Merge branch 'ni-merge'
authorJean Privat <jean@pryen.org>
Thu, 1 Aug 2013 20:54:47 +0000 (16:54 -0400)
committerJean Privat <jean@pryen.org>
Thu, 1 Aug 2013 20:54:47 +0000 (16:54 -0400)
105 files changed:
c_src/abstracttool._sep.c
c_src/abstracttool._sep.h
c_src/clib/nit_main.c
c_src/compiling._sep.c
c_src/compiling___compiling_base._sep.c
c_src/compiling___compiling_global._sep.c
c_src/compiling___compiling_icode._sep.c
c_src/compiling___table_computation._sep.c
c_src/compiling_writer._sep.c
c_src/environ._nitni.c
c_src/exec._nitni.c
c_src/file._nitni.c
c_src/global___rta_analysis._sep.c
c_src/icode___icode_builder._sep.c
c_src/location._sep.c
c_src/location._sep.h
c_src/math._nitni.c
c_src/metamodel___abstractmetamodel._sep.c
c_src/metamodel___genericity._sep.c
c_src/metamodel___genericity._sep.h
c_src/metamodel___inheritance._sep.c
c_src/metamodel___partial_order._sep.c
c_src/metamodel___static_type._sep.c
c_src/metamodel___static_type._sep.h
c_src/metamodel___type_formal._sep.c
c_src/metamodel___type_formal._sep.h
c_src/mmloader._sep.c
c_src/native_interface___frontier._sep.c
c_src/native_interface___ni_metamodel._sep.c
c_src/nit_version._sep.c
c_src/nitc._build.sh
c_src/nitc._sep.c
c_src/nitc._tables.c
c_src/opts._sep.c
c_src/parser._sep.c
c_src/parser._sep.h
c_src/parser___lexer._sep.c
c_src/parser___lexer._sep.h
c_src/parser___parser_nodes._sep.c
c_src/parser___parser_nodes._sep.h
c_src/parser___parser_prod._sep.c
c_src/parser___parser_prod._sep.h
c_src/primitive_info._sep.c
c_src/program._sep.c
c_src/program._sep.h
c_src/separate_options._sep.c
c_src/standard___collection._sep.c
c_src/standard___collection._sep.h
c_src/standard___collection___array._sep.c
c_src/standard___collection___array._sep.h
c_src/standard___collection___hash_collection._sep.c
c_src/standard___collection___hash_collection._sep.h
c_src/standard___collection___list._sep.c
c_src/standard___collection___list._sep.h
c_src/standard___collection___sorter._sep.c
c_src/standard___environ._sep.h
c_src/standard___exec._sep.c
c_src/standard___file._sep.c
c_src/standard___file._sep.h
c_src/standard___string._ffi.c [new file with mode: 0644]
c_src/standard___string._ffi.h [new file with mode: 0644]
c_src/standard___string._sep.c
c_src/standard___string._sep.h
c_src/standard___string_search._sep.c
c_src/standard___string_search._sep.h
c_src/stream._nitni.c
c_src/stream_nit.h
c_src/string._nitni.c
c_src/string._nitni.h
c_src/symbol._sep.h
c_src/syntax___extern_inline._sep.h
c_src/syntax___extern_type_inheritance._sep.c
c_src/syntax___flow._sep.c
c_src/syntax___icode_generation._sep.c
c_src/syntax___icode_generation._sep.h
c_src/syntax___mmbuilder._sep.c
c_src/syntax___mmbuilder._sep.h
c_src/syntax___scope._sep.c
c_src/syntax___syntax_base._sep.h
c_src/syntax___typing._sep.c
c_src/syntax___typing._sep.h
c_src/tables._nitni.c
c_src/tables_nit.c
c_src/time._nitni.c
c_src/toolcontext._sep.c
c_src/utils._sep.c
examples/curl_http.nit [new file with mode: 0644]
examples/curl_mail.nit [new file with mode: 0644]
lib/curl/curl.nit [new file with mode: 0644]
lib/curl/curl_c.nit [new file with mode: 0644]
lib/curl/curl_c.nit.args [new file with mode: 0644]
lib/standard/string.nit
lib/standard/string_nit.c [deleted file]
lib/standard/string_nit.h [deleted file]
src/abstract_compiler.nit
src/compiling/compiling_icode.nit
src/naive_interpreter.nit
tests/curl_http.args [new file with mode: 0644]
tests/sav/curl_http.sav [new file with mode: 0644]
tests/sav/curl_http_args1.sav [new file with mode: 0644]
tests/sav/curl_http_args2.sav [new file with mode: 0644]
tests/sav/curl_http_args3.sav [new file with mode: 0644]
tests/sav/curl_mail.sav [new file with mode: 0644]
tests/sav/test_curl.sav [new file with mode: 0644]
tests/test_curl.nit [new file with mode: 0644]

index 8e54516..1096734 100644 (file)
@@ -298,7 +298,7 @@ void abstracttool___AbstractCompiler___exec_cmd_line(val_t p0){
       if (UNTAG_Bool(REGB3)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label9;
@@ -892,3 +892,21 @@ void abstracttool___MMLocalClass___dump_properties(val_t p0, val_t p1){
         stack_frame_head = fra.me.prev;
         return;
       }
+static const char LOCATE_abstracttool___AAnnotations___visit_all[] = "abstracttool::AAnnotations::(parser_prod::ANode::visit_all)";
+void abstracttool___AAnnotations___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_abstracttool;
+  fra.me.line = 134;
+  fra.me.meth = LOCATE_abstracttool___AAnnotations___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  stack_frame_head = fra.me.prev;
+  return;
+}
index e3157ae..a306bb3 100644 (file)
@@ -45,4 +45,9 @@ typedef void (*abstracttool___MMLocalClass___dump_properties_t)(val_t p0, val_t
       void OC_abstracttool___MMLocalClass___dump_properties_5(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
       typedef void (*OC_abstracttool___MMLocalClass___dump_properties_5_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
 val_t NEW_MMLocalClass_metamodel___abstractmetamodel___MMLocalClass___init(val_t p0, val_t p1, val_t p2);
+void abstracttool___AAnnotations___visit_all(val_t p0, val_t p1);
+typedef void (*abstracttool___AAnnotations___visit_all_t)(val_t p0, val_t p1);
+val_t NEW_AAnnotations_parser___parser_prod___AAnnotations___empty_init();
+val_t NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(val_t p0, val_t p1, val_t p2, val_t p3);
+val_t NEW_AAnnotations_parser___parser_nodes___ANode___init();
 #endif
index 0be5918..9b20edb 100644 (file)
@@ -231,13 +231,12 @@ void nitni_global_ref_list_init() {
 void nitni_global_ref_add( struct nitni_ref *ref ) {
        if ( nitni_global_ref_list->head == NULL ) {
                nitni_global_ref_list->head = ref;
-               nitni_global_ref_list->tail = ref;
-
                ref->prev = NULL;
        } else {
                nitni_global_ref_list->tail->next = ref;
                ref->prev = nitni_global_ref_list->tail;
        }
+       nitni_global_ref_list->tail = ref;
 
        ref->next = NULL;
 }
index f99178d..c939fdc 100644 (file)
@@ -1027,7 +1027,7 @@ void compiling___MMModule___compile_separate_module(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB0)];
       /* compiling/compiling.nit:134 */
       REGB1 = TAG_Int(3);
index 44f4242..5871c76 100644 (file)
@@ -1269,7 +1269,7 @@ void compiling___compiling_base___CProgram___generate_build_file(val_t p0){
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[0] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB1)];
       /* compiling/compiling_base.nit:113 */
       REGB2 = TAG_Int(3);
@@ -1343,7 +1343,7 @@ void compiling___compiling_base___CProgram___generate_build_file(val_t p0){
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB1)];
       /* compiling/compiling_base.nit:114 */
       REGB2 = TAG_Int(3);
@@ -1417,7 +1417,7 @@ void compiling___compiling_base___CProgram___generate_build_file(val_t p0){
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB1)];
       /* compiling/compiling_base.nit:115 */
       REGB2 = TAG_Int(3);
index 81f52b0..06ef833 100644 (file)
@@ -116,7 +116,7 @@ void compiling___compiling_global___Program___compile_tables_to_c(val_t p0, val_
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
       /* compiling/compiling_global.nit:38 */
       fra.me.REG[6] = CALL_program___Program___main_module(fra.me.REG[0])(fra.me.REG[0]);
@@ -622,7 +622,7 @@ void compiling___compiling_global___MMModule___compile_mod_to_c(val_t p0, val_t
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB1)];
       /* compiling/compiling_global.nit:91 */
       fra.me.REG[5] = CALL_compiling___compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
@@ -1092,7 +1092,7 @@ void compiling___compiling_global___MMModule___compile_local_table_to_c(val_t p0
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* compiling/compiling_global.nit:130 */
       fra.me.REG[4] = CALL_compiling___compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
@@ -1302,7 +1302,7 @@ void compiling___compiling_global___ModuleTableEltGroup___compile_macros(val_t p
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB1)];
       /* compiling/compiling_global.nit:160 */
       REGB2 = TAG_Int(5);
@@ -1610,7 +1610,7 @@ val_t compiling___compiling_global___TableEltSuper___compile_to_c(val_t p0, val_
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB1)];
       /* compiling/compiling_global.nit:195 */
       REGB2 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[5],fra.me.REG[1]));
@@ -2473,7 +2473,7 @@ val_t compiling___compiling_global___TableEltClassInitTable___compile_to_c(val_t
     if (UNTAG_Bool(REGB2)) {
       nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
     }
-    /* ../lib/standard/collection/array.nit:718 */
+    /* ../lib/standard/collection/array.nit:724 */
     fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB1)];
     /* ../lib/standard/collection/array.nit:281 */
     goto label1;
@@ -3018,7 +3018,7 @@ val_t compiling___compiling_global___TableEltClassObjectSize___compile_to_c(val_
         if (UNTAG_Bool(REGB2)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB1)];
         /* compiling/compiling_global.nit:339 */
         REGB2 = TAG_Int(1);
@@ -3635,7 +3635,7 @@ void compiling___compiling_global___MMLocalClass___compile_tables_to_c(val_t p0,
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB2)];
       /* compiling/compiling_global.nit:393 */
       REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
@@ -3792,7 +3792,7 @@ void compiling___compiling_global___MMLocalClass___compile_tables_to_c(val_t p0,
       if (UNTAG_Bool(REGB0)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB2)];
       /* compiling/compiling_global.nit:406 */
       REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
index 4f170d9..20f99ce 100644 (file)
@@ -2676,7 +2676,7 @@ val_t compiling___compiling_icode___IRoutine___compile_inside_to_c(val_t p0, val
         if (UNTAG_Bool(REGB4)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB3)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label29;
@@ -2982,7 +2982,7 @@ val_t compiling___compiling_icode___IRoutine___compile_inside_to_c(val_t p0, val
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB0)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label26;
@@ -4879,7 +4879,7 @@ void compiling___compiling_icode___INative___compile_extern_method_to_c(val_t p0
   if (UNTAG_Bool(REGB2)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB1)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label3;
@@ -4951,7 +4951,7 @@ void compiling___compiling_icode___INative___compile_extern_method_to_c(val_t p0
       if (UNTAG_Bool(REGB0)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB3)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label4;
@@ -5358,42 +5358,49 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                static val_t once_value_438; /* Once value */
                static val_t once_value_439; /* Once value */
                static val_t once_value_440; /* Once value */
+               static val_t once_value_441; /* Once value */
                static val_t once_value_442; /* Once value */
                static val_t once_value_443; /* Once value */
-               static val_t once_value_444; /* Once value */
                static val_t once_value_445; /* Once value */
                static val_t once_value_446; /* Once value */
                static val_t once_value_447; /* Once value */
                static val_t once_value_448; /* Once value */
                static val_t once_value_450; /* Once value */
+               static val_t once_value_451; /* Once value */
                static val_t once_value_452; /* Once value */
                static val_t once_value_453; /* Once value */
                static val_t once_value_454; /* Once value */
                static val_t once_value_455; /* Once value */
-               static val_t once_value_457; /* Once value */
+               static val_t once_value_456; /* Once value */
                static val_t once_value_458; /* Once value */
-               static val_t once_value_459; /* Once value */
                static val_t once_value_460; /* Once value */
+               static val_t once_value_461; /* Once value */
                static val_t once_value_462; /* Once value */
                static val_t once_value_463; /* Once value */
-               static val_t once_value_464; /* Once value */
                static val_t once_value_465; /* Once value */
+               static val_t once_value_466; /* Once value */
                static val_t once_value_467; /* Once value */
                static val_t once_value_468; /* Once value */
-               static val_t once_value_469; /* Once value */
                static val_t once_value_470; /* Once value */
+               static val_t once_value_471; /* Once value */
                static val_t once_value_472; /* Once value */
                static val_t once_value_473; /* Once value */
-               static val_t once_value_474; /* Once value */
                static val_t once_value_475; /* Once value */
+               static val_t once_value_476; /* Once value */
                static val_t once_value_477; /* Once value */
-      static val_t once_value_478; /* Once value */
-      static val_t once_value_479; /* Once value */
-    static val_t once_value_480; /* Once value */
-    static val_t once_value_481; /* Once value */
-    static val_t once_value_482; /* Once value */
-    static val_t once_value_483; /* Once value */
-    static val_t once_value_484; /* Once value */
+               static val_t once_value_478; /* Once value */
+               static val_t once_value_480; /* Once value */
+               static val_t once_value_481; /* Once value */
+               static val_t once_value_482; /* Once value */
+               static val_t once_value_483; /* Once value */
+               static val_t once_value_485; /* Once value */
+      static val_t once_value_486; /* Once value */
+      static val_t once_value_487; /* Once value */
+    static val_t once_value_488; /* Once value */
+    static val_t once_value_489; /* Once value */
+    static val_t once_value_490; /* Once value */
+    static val_t once_value_491; /* Once value */
+    static val_t once_value_492; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
   fra.me.line = 722;
@@ -5537,7 +5544,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB1)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label5;
@@ -5621,7 +5628,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
         if (UNTAG_Bool(REGB2)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label9;
@@ -5716,7 +5723,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
           if (UNTAG_Bool(REGB2)) {
             nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
           }
-          /* ../lib/standard/collection/array.nit:718 */
+          /* ../lib/standard/collection/array.nit:724 */
           fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
           /* ../lib/standard/collection/array.nit:281 */
           goto label14;
@@ -5811,7 +5818,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
             if (UNTAG_Bool(REGB2)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
             /* ../lib/standard/collection/array.nit:281 */
             goto label19;
@@ -5906,7 +5913,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
               if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
               }
-              /* ../lib/standard/collection/array.nit:718 */
+              /* ../lib/standard/collection/array.nit:724 */
               fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
               /* ../lib/standard/collection/array.nit:281 */
               goto label24;
@@ -6001,7 +6008,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label29;
@@ -6096,7 +6103,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label34;
@@ -6191,7 +6198,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label39;
@@ -6249,7 +6256,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label41;
@@ -6344,7 +6351,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label46;
@@ -6402,7 +6409,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label48;
@@ -6497,7 +6504,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label53;
@@ -6555,7 +6562,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label55;
@@ -6650,7 +6657,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label60;
@@ -6708,7 +6715,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label62;
@@ -6803,7 +6810,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label67;
@@ -6861,7 +6868,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label69;
@@ -6956,7 +6963,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label74;
@@ -7014,7 +7021,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label76;
@@ -7109,7 +7116,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label81;
@@ -7167,7 +7174,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label83;
@@ -7262,7 +7269,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label88;
@@ -7320,7 +7327,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label90;
@@ -7415,7 +7422,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label95;
@@ -7473,7 +7480,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label97;
@@ -7568,7 +7575,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label102;
@@ -7626,7 +7633,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label104;
@@ -7721,7 +7728,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label109;
@@ -7779,7 +7786,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label111;
@@ -7874,7 +7881,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label116;
@@ -7932,7 +7939,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label118;
@@ -8027,7 +8034,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label123;
@@ -8085,7 +8092,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label125;
@@ -8222,7 +8229,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
         if (UNTAG_Bool(REGB2)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label132;
@@ -8317,7 +8324,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
           if (UNTAG_Bool(REGB2)) {
             nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
           }
-          /* ../lib/standard/collection/array.nit:718 */
+          /* ../lib/standard/collection/array.nit:724 */
           fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
           /* ../lib/standard/collection/array.nit:281 */
           goto label137;
@@ -8412,7 +8419,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
             if (UNTAG_Bool(REGB2)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
             /* ../lib/standard/collection/array.nit:281 */
             goto label142;
@@ -8507,7 +8514,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
               if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
               }
-              /* ../lib/standard/collection/array.nit:718 */
+              /* ../lib/standard/collection/array.nit:724 */
               fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
               /* ../lib/standard/collection/array.nit:281 */
               goto label147;
@@ -8602,7 +8609,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label152;
@@ -8660,7 +8667,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label154;
@@ -8755,7 +8762,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label159;
@@ -8813,7 +8820,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label161;
@@ -8908,7 +8915,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label166;
@@ -8966,7 +8973,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label168;
@@ -9061,7 +9068,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label173;
@@ -9119,7 +9126,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label175;
@@ -9214,7 +9221,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label180;
@@ -9272,7 +9279,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label182;
@@ -9367,7 +9374,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label187;
@@ -9425,7 +9432,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label189;
@@ -9520,7 +9527,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label194;
@@ -9578,7 +9585,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label196;
@@ -9673,7 +9680,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label201;
@@ -9731,7 +9738,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label203;
@@ -9860,7 +9867,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
           if (UNTAG_Bool(REGB2)) {
             nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
           }
-          /* ../lib/standard/collection/array.nit:718 */
+          /* ../lib/standard/collection/array.nit:724 */
           fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
           /* ../lib/standard/collection/array.nit:281 */
           goto label210;
@@ -9955,7 +9962,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
             if (UNTAG_Bool(REGB2)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
             /* ../lib/standard/collection/array.nit:281 */
             goto label215;
@@ -10050,7 +10057,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
               if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
               }
-              /* ../lib/standard/collection/array.nit:718 */
+              /* ../lib/standard/collection/array.nit:724 */
               fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
               /* ../lib/standard/collection/array.nit:281 */
               goto label220;
@@ -10145,7 +10152,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label225;
@@ -10240,7 +10247,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label230;
@@ -10335,7 +10342,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label235;
@@ -10430,7 +10437,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label240;
@@ -10525,7 +10532,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label245;
@@ -10583,7 +10590,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label247;
@@ -10678,7 +10685,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label252;
@@ -10736,7 +10743,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label254;
@@ -10831,7 +10838,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label259;
@@ -10889,7 +10896,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label261;
@@ -10984,7 +10991,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label266;
@@ -11042,7 +11049,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label268;
@@ -11137,7 +11144,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label273;
@@ -11195,7 +11202,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label275;
@@ -11290,7 +11297,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label280;
@@ -11348,7 +11355,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label282;
@@ -11443,7 +11450,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label287;
@@ -11501,7 +11508,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label289;
@@ -11596,7 +11603,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label294;
@@ -11654,7 +11661,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label296;
@@ -11749,7 +11756,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label301;
@@ -11807,7 +11814,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label303;
@@ -11902,7 +11909,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label308;
@@ -11960,7 +11967,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label310;
@@ -12055,7 +12062,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label315;
@@ -12113,7 +12120,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label317;
@@ -12248,7 +12255,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
             if (UNTAG_Bool(REGB2)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
             /* ../lib/standard/collection/array.nit:281 */
             goto label324;
@@ -12343,7 +12350,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
               if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
               }
-              /* ../lib/standard/collection/array.nit:718 */
+              /* ../lib/standard/collection/array.nit:724 */
               fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
               /* ../lib/standard/collection/array.nit:281 */
               goto label329;
@@ -12438,7 +12445,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label334;
@@ -12533,7 +12540,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label339;
@@ -12628,7 +12635,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label344;
@@ -12723,7 +12730,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label349;
@@ -12781,7 +12788,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label351;
@@ -12876,7 +12883,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label356;
@@ -12934,7 +12941,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label358;
@@ -13058,7 +13065,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
               if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
               }
-              /* ../lib/standard/collection/array.nit:718 */
+              /* ../lib/standard/collection/array.nit:724 */
               fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
               /* ../lib/standard/collection/array.nit:281 */
               goto label365;
@@ -13153,7 +13160,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label370;
@@ -13211,7 +13218,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label372;
@@ -13306,7 +13313,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label377;
@@ -13364,7 +13371,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label379;
@@ -13422,7 +13429,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label381;
@@ -13517,7 +13524,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label386;
@@ -13575,7 +13582,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label388;
@@ -13633,7 +13640,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label390;
@@ -13754,7 +13761,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label397;
@@ -13849,7 +13856,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label402;
@@ -13944,7 +13951,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label407;
@@ -14002,7 +14009,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label409;
@@ -14097,7 +14104,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label414;
@@ -14155,7 +14162,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label416;
@@ -14213,7 +14220,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label418;
@@ -14308,7 +14315,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label423;
@@ -14366,7 +14373,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label425;
@@ -14424,7 +14431,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label427;
@@ -14482,7 +14489,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label429;
@@ -14540,7 +14547,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label431;
@@ -14618,13 +14625,12 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                } else fra.me.REG[6] = once_value_437;
                fra.me.REG[6] = fra.me.REG[6];
                fra.me.REG[5] = fra.me.REG[6];
-               }
-              } else {
-               /* compiling/compiling_icode.nit:878 */
+               } else {
+               /* compiling/compiling_icode.nit:877 */
                if (!once_value_438) {
                if (!once_value_439) {
-               fra.me.REG[6] = BOX_NativeString("object_id");
-               REGB1 = TAG_Int(9);
+               fra.me.REG[6] = BOX_NativeString("native_argc");
+               REGB1 = TAG_Int(11);
                fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB1);
                once_value_439 = fra.me.REG[6];
                register_static_object(&once_value_439);
@@ -14642,16 +14648,147 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                REGB1 = REGB2;
                }
                if (UNTAG_Bool(REGB1)) {
+               /* compiling/compiling_icode.nit:878 */
+               if (!once_value_440) {
+               fra.me.REG[6] = BOX_NativeString("TAG_Int(glob_argc)");
+               REGB1 = TAG_Int(18);
+               fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB1);
+               once_value_440 = fra.me.REG[6];
+               register_static_object(&once_value_440);
+               } else fra.me.REG[6] = once_value_440;
+               fra.me.REG[6] = fra.me.REG[6];
+               fra.me.REG[5] = fra.me.REG[6];
+               } else {
                /* compiling/compiling_icode.nit:879 */
+               if (!once_value_441) {
+               if (!once_value_442) {
+               fra.me.REG[6] = BOX_NativeString("native_argv");
+               REGB1 = TAG_Int(11);
+               fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB1);
+               once_value_442 = fra.me.REG[6];
+               register_static_object(&once_value_442);
+               } else fra.me.REG[6] = once_value_442;
+               fra.me.REG[6] = fra.me.REG[6];
+               fra.me.REG[6] = CALL_symbol___String___to_symbol(fra.me.REG[6])(fra.me.REG[6]);
+               once_value_441 = fra.me.REG[6];
+               register_static_object(&once_value_441);
+               } else fra.me.REG[6] = once_value_441;
+               fra.me.REG[6] = fra.me.REG[6];
+               REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[6]));
+               if (UNTAG_Bool(REGB1)) {
+               } else {
+               REGB2 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+               REGB1 = REGB2;
+               }
+               if (UNTAG_Bool(REGB1)) {
+               /* compiling/compiling_icode.nit:880 */
                REGB1 = TAG_Int(3);
                fra.me.REG[6] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
-               if (!once_value_440) {
+               if (!once_value_443) {
+               fra.me.REG[2] = BOX_NativeString("BOX_NativeString(glob_argv[UNTAG_Int(");
+               REGB1 = TAG_Int(37);
+               fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
+               once_value_443 = fra.me.REG[2];
+               register_static_object(&once_value_443);
+               } else fra.me.REG[2] = once_value_443;
+               fra.me.REG[2] = fra.me.REG[2];
+               CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
+               REGB1 = TAG_Int(1);
+               /* ../lib/standard/collection/array.nit:278 */
+               fra.me.REG[2] = fra.me.REG[4];
+               /* ../lib/standard/collection/array.nit:280 */
+               REGB2 = TAG_Int(0);
+               REGB0 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+               if (UNTAG_Bool(REGB0)) {
+               } else {
+               nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+               }
+               /* ../lib/standard/kernel.nit:236 */
+               REGB2 = TAG_Bool(UNTAG_Int(REGB1)>=UNTAG_Int(REGB2));
+               /* ../lib/standard/collection/array.nit:280 */
+               if (UNTAG_Bool(REGB2)) {
+               REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+               if (UNTAG_Bool(REGB2)) {
+               } else {
+               nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 280);
+               }
+               REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
+               REGB0 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+               if (UNTAG_Bool(REGB0)) {
+               } else {
+               nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+               }
+               /* ../lib/standard/kernel.nit:235 */
+               REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
+               } else {
+               /* ../lib/standard/collection/array.nit:280 */
+               REGB0 = TAG_Bool(0);
+               REGB2 = REGB0;
+               }
+               if (UNTAG_Bool(REGB2)) {
+               } else {
+               nit_abort("Assert '%s' failed", "index", LOCATE_standard___collection___array, 280);
+               }
+               /* ../lib/standard/collection/array.nit:281 */
+               fra.me.REG[2] = ATTR_standard___collection___array___Array____items(fra.me.REG[2]);
+               REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+               if (UNTAG_Bool(REGB2)) {
+               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
+               }
+               /* ../lib/standard/collection/array.nit:724 */
+               fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB1)];
+               /* ../lib/standard/collection/array.nit:281 */
+               goto label444;
+               label444: while(0);
+               /* compiling/compiling_icode.nit:880 */
+               CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
+               if (!once_value_445) {
+               fra.me.REG[2] = BOX_NativeString(")])");
+               REGB1 = TAG_Int(3);
+               fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
+               once_value_445 = fra.me.REG[2];
+               register_static_object(&once_value_445);
+               } else fra.me.REG[2] = once_value_445;
+               fra.me.REG[2] = fra.me.REG[2];
+               CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
+               fra.me.REG[6] = CALL_standard___string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
+               fra.me.REG[5] = fra.me.REG[6];
+               }
+               }
+               }
+              } else {
+               /* compiling/compiling_icode.nit:882 */
+               if (!once_value_446) {
+               if (!once_value_447) {
+               fra.me.REG[6] = BOX_NativeString("object_id");
+               REGB1 = TAG_Int(9);
+               fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB1);
+               once_value_447 = fra.me.REG[6];
+               register_static_object(&once_value_447);
+               } else fra.me.REG[6] = once_value_447;
+               fra.me.REG[6] = fra.me.REG[6];
+               fra.me.REG[6] = CALL_symbol___String___to_symbol(fra.me.REG[6])(fra.me.REG[6]);
+               once_value_446 = fra.me.REG[6];
+               register_static_object(&once_value_446);
+               } else fra.me.REG[6] = once_value_446;
+               fra.me.REG[6] = fra.me.REG[6];
+               REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[6]));
+               if (UNTAG_Bool(REGB1)) {
+               } else {
+               REGB2 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+               REGB1 = REGB2;
+               }
+               if (UNTAG_Bool(REGB1)) {
+               /* compiling/compiling_icode.nit:883 */
+               REGB1 = TAG_Int(3);
+               fra.me.REG[6] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
+               if (!once_value_448) {
                fra.me.REG[2] = BOX_NativeString("TAG_Int((bigint)((obj_t)");
                REGB1 = TAG_Int(24);
                fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
-               once_value_440 = fra.me.REG[2];
-               register_static_object(&once_value_440);
-               } else fra.me.REG[2] = once_value_440;
+               once_value_448 = fra.me.REG[2];
+               register_static_object(&once_value_448);
+               } else fra.me.REG[2] = once_value_448;
                fra.me.REG[2] = fra.me.REG[2];
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
                REGB1 = TAG_Int(0);
@@ -14696,39 +14833,39 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
-               goto label441;
-               label441: while(0);
-               /* compiling/compiling_icode.nit:879 */
+               goto label449;
+               label449: while(0);
+               /* compiling/compiling_icode.nit:883 */
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
-               if (!once_value_442) {
+               if (!once_value_450) {
                fra.me.REG[2] = BOX_NativeString(")[1].object_id)");
                REGB1 = TAG_Int(15);
                fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
-               once_value_442 = fra.me.REG[2];
-               register_static_object(&once_value_442);
-               } else fra.me.REG[2] = once_value_442;
+               once_value_450 = fra.me.REG[2];
+               register_static_object(&once_value_450);
+               } else fra.me.REG[2] = once_value_450;
                fra.me.REG[2] = fra.me.REG[2];
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
                fra.me.REG[6] = CALL_standard___string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
                fra.me.REG[5] = fra.me.REG[6];
                } else {
-               /* compiling/compiling_icode.nit:880 */
-               if (!once_value_443) {
-               if (!once_value_444) {
+               /* compiling/compiling_icode.nit:884 */
+               if (!once_value_451) {
+               if (!once_value_452) {
                fra.me.REG[6] = BOX_NativeString("sys");
                REGB1 = TAG_Int(3);
                fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB1);
-               once_value_444 = fra.me.REG[6];
-               register_static_object(&once_value_444);
-               } else fra.me.REG[6] = once_value_444;
+               once_value_452 = fra.me.REG[6];
+               register_static_object(&once_value_452);
+               } else fra.me.REG[6] = once_value_452;
                fra.me.REG[6] = fra.me.REG[6];
                fra.me.REG[6] = CALL_symbol___String___to_symbol(fra.me.REG[6])(fra.me.REG[6]);
-               once_value_443 = fra.me.REG[6];
-               register_static_object(&once_value_443);
-               } else fra.me.REG[6] = once_value_443;
+               once_value_451 = fra.me.REG[6];
+               register_static_object(&once_value_451);
+               } else fra.me.REG[6] = once_value_451;
                fra.me.REG[6] = fra.me.REG[6];
                REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[6]));
                if (UNTAG_Bool(REGB1)) {
@@ -14737,31 +14874,31 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                REGB1 = REGB2;
                }
                if (UNTAG_Bool(REGB1)) {
-               /* compiling/compiling_icode.nit:881 */
-               if (!once_value_445) {
+               /* compiling/compiling_icode.nit:885 */
+               if (!once_value_453) {
                fra.me.REG[6] = BOX_NativeString("(G_sys)");
                REGB1 = TAG_Int(7);
                fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB1);
-               once_value_445 = fra.me.REG[6];
-               register_static_object(&once_value_445);
-               } else fra.me.REG[6] = once_value_445;
+               once_value_453 = fra.me.REG[6];
+               register_static_object(&once_value_453);
+               } else fra.me.REG[6] = once_value_453;
                fra.me.REG[6] = fra.me.REG[6];
                fra.me.REG[5] = fra.me.REG[6];
                } else {
-               /* compiling/compiling_icode.nit:882 */
-               if (!once_value_446) {
-               if (!once_value_447) {
+               /* compiling/compiling_icode.nit:886 */
+               if (!once_value_454) {
+               if (!once_value_455) {
                fra.me.REG[6] = BOX_NativeString("is_same_type");
                REGB1 = TAG_Int(12);
                fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB1);
-               once_value_447 = fra.me.REG[6];
-               register_static_object(&once_value_447);
-               } else fra.me.REG[6] = once_value_447;
+               once_value_455 = fra.me.REG[6];
+               register_static_object(&once_value_455);
+               } else fra.me.REG[6] = once_value_455;
                fra.me.REG[6] = fra.me.REG[6];
                fra.me.REG[6] = CALL_symbol___String___to_symbol(fra.me.REG[6])(fra.me.REG[6]);
-               once_value_446 = fra.me.REG[6];
-               register_static_object(&once_value_446);
-               } else fra.me.REG[6] = once_value_446;
+               once_value_454 = fra.me.REG[6];
+               register_static_object(&once_value_454);
+               } else fra.me.REG[6] = once_value_454;
                fra.me.REG[6] = fra.me.REG[6];
                REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[6]));
                if (UNTAG_Bool(REGB1)) {
@@ -14770,16 +14907,16 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                REGB1 = REGB2;
                }
                if (UNTAG_Bool(REGB1)) {
-               /* compiling/compiling_icode.nit:883 */
+               /* compiling/compiling_icode.nit:887 */
                REGB1 = TAG_Int(5);
                fra.me.REG[6] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
-               if (!once_value_448) {
+               if (!once_value_456) {
                fra.me.REG[2] = BOX_NativeString("TAG_Bool((VAL2VFT(");
                REGB1 = TAG_Int(18);
                fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
-               once_value_448 = fra.me.REG[2];
-               register_static_object(&once_value_448);
-               } else fra.me.REG[2] = once_value_448;
+               once_value_456 = fra.me.REG[2];
+               register_static_object(&once_value_456);
+               } else fra.me.REG[2] = once_value_456;
                fra.me.REG[2] = fra.me.REG[2];
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
                REGB1 = TAG_Int(0);
@@ -14824,20 +14961,20 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
-               goto label449;
-               label449: while(0);
-               /* compiling/compiling_icode.nit:883 */
+               goto label457;
+               label457: while(0);
+               /* compiling/compiling_icode.nit:887 */
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
-               if (!once_value_450) {
+               if (!once_value_458) {
                fra.me.REG[2] = BOX_NativeString(")==VAL2VFT(");
                REGB1 = TAG_Int(11);
                fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
-               once_value_450 = fra.me.REG[2];
-               register_static_object(&once_value_450);
-               } else fra.me.REG[2] = once_value_450;
+               once_value_458 = fra.me.REG[2];
+               register_static_object(&once_value_458);
+               } else fra.me.REG[2] = once_value_458;
                fra.me.REG[2] = fra.me.REG[2];
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
                REGB1 = TAG_Int(1);
@@ -14882,39 +15019,39 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
-               goto label451;
-               label451: while(0);
-               /* compiling/compiling_icode.nit:883 */
+               goto label459;
+               label459: while(0);
+               /* compiling/compiling_icode.nit:887 */
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
-               if (!once_value_452) {
+               if (!once_value_460) {
                fra.me.REG[2] = BOX_NativeString(")))");
                REGB1 = TAG_Int(3);
                fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
-               once_value_452 = fra.me.REG[2];
-               register_static_object(&once_value_452);
-               } else fra.me.REG[2] = once_value_452;
+               once_value_460 = fra.me.REG[2];
+               register_static_object(&once_value_460);
+               } else fra.me.REG[2] = once_value_460;
                fra.me.REG[2] = fra.me.REG[2];
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
                fra.me.REG[6] = CALL_standard___string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
                fra.me.REG[5] = fra.me.REG[6];
                } else {
-               /* compiling/compiling_icode.nit:884 */
-               if (!once_value_453) {
-               if (!once_value_454) {
+               /* compiling/compiling_icode.nit:888 */
+               if (!once_value_461) {
+               if (!once_value_462) {
                fra.me.REG[6] = BOX_NativeString("exit");
                REGB1 = TAG_Int(4);
                fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB1);
-               once_value_454 = fra.me.REG[6];
-               register_static_object(&once_value_454);
-               } else fra.me.REG[6] = once_value_454;
+               once_value_462 = fra.me.REG[6];
+               register_static_object(&once_value_462);
+               } else fra.me.REG[6] = once_value_462;
                fra.me.REG[6] = fra.me.REG[6];
                fra.me.REG[6] = CALL_symbol___String___to_symbol(fra.me.REG[6])(fra.me.REG[6]);
-               once_value_453 = fra.me.REG[6];
-               register_static_object(&once_value_453);
-               } else fra.me.REG[6] = once_value_453;
+               once_value_461 = fra.me.REG[6];
+               register_static_object(&once_value_461);
+               } else fra.me.REG[6] = once_value_461;
                fra.me.REG[6] = fra.me.REG[6];
                REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[6]));
                if (UNTAG_Bool(REGB1)) {
@@ -14923,16 +15060,16 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                REGB1 = REGB2;
                }
                if (UNTAG_Bool(REGB1)) {
-               /* compiling/compiling_icode.nit:885 */
+               /* compiling/compiling_icode.nit:889 */
                REGB1 = TAG_Int(3);
                fra.me.REG[6] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
-               if (!once_value_455) {
+               if (!once_value_463) {
                fra.me.REG[2] = BOX_NativeString("exit(UNTAG_Int(");
                REGB1 = TAG_Int(15);
                fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
-               once_value_455 = fra.me.REG[2];
-               register_static_object(&once_value_455);
-               } else fra.me.REG[2] = once_value_455;
+               once_value_463 = fra.me.REG[2];
+               register_static_object(&once_value_463);
+               } else fra.me.REG[2] = once_value_463;
                fra.me.REG[2] = fra.me.REG[2];
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
                REGB1 = TAG_Int(1);
@@ -14977,39 +15114,39 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
-               goto label456;
-               label456: while(0);
-               /* compiling/compiling_icode.nit:885 */
+               goto label464;
+               label464: while(0);
+               /* compiling/compiling_icode.nit:889 */
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
-               if (!once_value_457) {
+               if (!once_value_465) {
                fra.me.REG[2] = BOX_NativeString("));");
                REGB1 = TAG_Int(3);
                fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
-               once_value_457 = fra.me.REG[2];
-               register_static_object(&once_value_457);
-               } else fra.me.REG[2] = once_value_457;
+               once_value_465 = fra.me.REG[2];
+               register_static_object(&once_value_465);
+               } else fra.me.REG[2] = once_value_465;
                fra.me.REG[2] = fra.me.REG[2];
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
                fra.me.REG[6] = CALL_standard___string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
                fra.me.REG[5] = fra.me.REG[6];
                } else {
-               /* compiling/compiling_icode.nit:886 */
-               if (!once_value_458) {
-               if (!once_value_459) {
+               /* compiling/compiling_icode.nit:890 */
+               if (!once_value_466) {
+               if (!once_value_467) {
                fra.me.REG[6] = BOX_NativeString("calloc_array");
                REGB1 = TAG_Int(12);
                fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB1);
-               once_value_459 = fra.me.REG[6];
-               register_static_object(&once_value_459);
-               } else fra.me.REG[6] = once_value_459;
+               once_value_467 = fra.me.REG[6];
+               register_static_object(&once_value_467);
+               } else fra.me.REG[6] = once_value_467;
                fra.me.REG[6] = fra.me.REG[6];
                fra.me.REG[6] = CALL_symbol___String___to_symbol(fra.me.REG[6])(fra.me.REG[6]);
-               once_value_458 = fra.me.REG[6];
-               register_static_object(&once_value_458);
-               } else fra.me.REG[6] = once_value_458;
+               once_value_466 = fra.me.REG[6];
+               register_static_object(&once_value_466);
+               } else fra.me.REG[6] = once_value_466;
                fra.me.REG[6] = fra.me.REG[6];
                REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[6]));
                if (UNTAG_Bool(REGB1)) {
@@ -15018,16 +15155,16 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                REGB1 = REGB2;
                }
                if (UNTAG_Bool(REGB1)) {
-               /* compiling/compiling_icode.nit:887 */
+               /* compiling/compiling_icode.nit:891 */
                REGB1 = TAG_Int(3);
                fra.me.REG[6] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
-               if (!once_value_460) {
+               if (!once_value_468) {
                fra.me.REG[2] = BOX_NativeString("NEW_NativeArray(UNTAG_Int(");
                REGB1 = TAG_Int(26);
                fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
-               once_value_460 = fra.me.REG[2];
-               register_static_object(&once_value_460);
-               } else fra.me.REG[2] = once_value_460;
+               once_value_468 = fra.me.REG[2];
+               register_static_object(&once_value_468);
+               } else fra.me.REG[2] = once_value_468;
                fra.me.REG[2] = fra.me.REG[2];
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
                REGB1 = TAG_Int(1);
@@ -15072,39 +15209,39 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
-               goto label461;
-               label461: while(0);
-               /* compiling/compiling_icode.nit:887 */
+               goto label469;
+               label469: while(0);
+               /* compiling/compiling_icode.nit:891 */
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
-               if (!once_value_462) {
+               if (!once_value_470) {
                fra.me.REG[2] = BOX_NativeString("), sizeof(val_t))");
                REGB1 = TAG_Int(17);
                fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
-               once_value_462 = fra.me.REG[2];
-               register_static_object(&once_value_462);
-               } else fra.me.REG[2] = once_value_462;
+               once_value_470 = fra.me.REG[2];
+               register_static_object(&once_value_470);
+               } else fra.me.REG[2] = once_value_470;
                fra.me.REG[2] = fra.me.REG[2];
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
                fra.me.REG[6] = CALL_standard___string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
                fra.me.REG[5] = fra.me.REG[6];
                } else {
-               /* compiling/compiling_icode.nit:888 */
-               if (!once_value_463) {
-               if (!once_value_464) {
+               /* compiling/compiling_icode.nit:892 */
+               if (!once_value_471) {
+               if (!once_value_472) {
                fra.me.REG[6] = BOX_NativeString("calloc_string");
                REGB1 = TAG_Int(13);
                fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB1);
-               once_value_464 = fra.me.REG[6];
-               register_static_object(&once_value_464);
-               } else fra.me.REG[6] = once_value_464;
+               once_value_472 = fra.me.REG[6];
+               register_static_object(&once_value_472);
+               } else fra.me.REG[6] = once_value_472;
                fra.me.REG[6] = fra.me.REG[6];
                fra.me.REG[6] = CALL_symbol___String___to_symbol(fra.me.REG[6])(fra.me.REG[6]);
-               once_value_463 = fra.me.REG[6];
-               register_static_object(&once_value_463);
-               } else fra.me.REG[6] = once_value_463;
+               once_value_471 = fra.me.REG[6];
+               register_static_object(&once_value_471);
+               } else fra.me.REG[6] = once_value_471;
                fra.me.REG[6] = fra.me.REG[6];
                REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[6]));
                if (UNTAG_Bool(REGB1)) {
@@ -15113,16 +15250,16 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                REGB1 = REGB2;
                }
                if (UNTAG_Bool(REGB1)) {
-               /* compiling/compiling_icode.nit:889 */
+               /* compiling/compiling_icode.nit:893 */
                REGB1 = TAG_Int(3);
                fra.me.REG[6] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
-               if (!once_value_465) {
+               if (!once_value_473) {
                fra.me.REG[2] = BOX_NativeString("BOX_NativeString((char*)raw_alloc((UNTAG_Int(");
                REGB1 = TAG_Int(45);
                fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
-               once_value_465 = fra.me.REG[2];
-               register_static_object(&once_value_465);
-               } else fra.me.REG[2] = once_value_465;
+               once_value_473 = fra.me.REG[2];
+               register_static_object(&once_value_473);
+               } else fra.me.REG[2] = once_value_473;
                fra.me.REG[2] = fra.me.REG[2];
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
                REGB1 = TAG_Int(1);
@@ -15167,39 +15304,39 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
-               goto label466;
-               label466: while(0);
-               /* compiling/compiling_icode.nit:889 */
+               goto label474;
+               label474: while(0);
+               /* compiling/compiling_icode.nit:893 */
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
-               if (!once_value_467) {
+               if (!once_value_475) {
                fra.me.REG[2] = BOX_NativeString(") * sizeof(char))))");
                REGB1 = TAG_Int(19);
                fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
-               once_value_467 = fra.me.REG[2];
-               register_static_object(&once_value_467);
-               } else fra.me.REG[2] = once_value_467;
+               once_value_475 = fra.me.REG[2];
+               register_static_object(&once_value_475);
+               } else fra.me.REG[2] = once_value_475;
                fra.me.REG[2] = fra.me.REG[2];
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
                fra.me.REG[6] = CALL_standard___string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
                fra.me.REG[5] = fra.me.REG[6];
                } else {
-               /* compiling/compiling_icode.nit:891 */
-               if (!once_value_468) {
-               if (!once_value_469) {
+               /* compiling/compiling_icode.nit:895 */
+               if (!once_value_476) {
+               if (!once_value_477) {
                fra.me.REG[6] = BOX_NativeString("output_class_name");
                REGB1 = TAG_Int(17);
                fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB1);
-               once_value_469 = fra.me.REG[6];
-               register_static_object(&once_value_469);
-               } else fra.me.REG[6] = once_value_469;
+               once_value_477 = fra.me.REG[6];
+               register_static_object(&once_value_477);
+               } else fra.me.REG[6] = once_value_477;
                fra.me.REG[6] = fra.me.REG[6];
                fra.me.REG[6] = CALL_symbol___String___to_symbol(fra.me.REG[6])(fra.me.REG[6]);
-               once_value_468 = fra.me.REG[6];
-               register_static_object(&once_value_468);
-               } else fra.me.REG[6] = once_value_468;
+               once_value_476 = fra.me.REG[6];
+               register_static_object(&once_value_476);
+               } else fra.me.REG[6] = once_value_476;
                fra.me.REG[6] = fra.me.REG[6];
                REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[6]));
                if (UNTAG_Bool(REGB1)) {
@@ -15208,16 +15345,16 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                REGB1 = REGB2;
                }
                if (UNTAG_Bool(REGB1)) {
-               /* compiling/compiling_icode.nit:892 */
+               /* compiling/compiling_icode.nit:896 */
                REGB1 = TAG_Int(3);
                fra.me.REG[6] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
-               if (!once_value_470) {
+               if (!once_value_478) {
                fra.me.REG[2] = BOX_NativeString("printf(\"%s\\n\", VAL2VFT(");
                REGB1 = TAG_Int(23);
                fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
-               once_value_470 = fra.me.REG[2];
-               register_static_object(&once_value_470);
-               } else fra.me.REG[2] = once_value_470;
+               once_value_478 = fra.me.REG[2];
+               register_static_object(&once_value_478);
+               } else fra.me.REG[2] = once_value_478;
                fra.me.REG[2] = fra.me.REG[2];
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
                REGB1 = TAG_Int(0);
@@ -15262,39 +15399,39 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
-               goto label471;
-               label471: while(0);
-               /* compiling/compiling_icode.nit:892 */
+               goto label479;
+               label479: while(0);
+               /* compiling/compiling_icode.nit:896 */
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
-               if (!once_value_472) {
+               if (!once_value_480) {
                fra.me.REG[2] = BOX_NativeString(")[2].cname);");
                REGB1 = TAG_Int(12);
                fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
-               once_value_472 = fra.me.REG[2];
-               register_static_object(&once_value_472);
-               } else fra.me.REG[2] = once_value_472;
+               once_value_480 = fra.me.REG[2];
+               register_static_object(&once_value_480);
+               } else fra.me.REG[2] = once_value_480;
                fra.me.REG[2] = fra.me.REG[2];
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
                fra.me.REG[6] = CALL_standard___string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
                fra.me.REG[5] = fra.me.REG[6];
                } else {
-               /* compiling/compiling_icode.nit:894 */
-               if (!once_value_473) {
-               if (!once_value_474) {
+               /* compiling/compiling_icode.nit:898 */
+               if (!once_value_481) {
+               if (!once_value_482) {
                fra.me.REG[6] = BOX_NativeString("native_class_name");
                REGB1 = TAG_Int(17);
                fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB1);
-               once_value_474 = fra.me.REG[6];
-               register_static_object(&once_value_474);
-               } else fra.me.REG[6] = once_value_474;
+               once_value_482 = fra.me.REG[6];
+               register_static_object(&once_value_482);
+               } else fra.me.REG[6] = once_value_482;
                fra.me.REG[6] = fra.me.REG[6];
                fra.me.REG[6] = CALL_symbol___String___to_symbol(fra.me.REG[6])(fra.me.REG[6]);
-               once_value_473 = fra.me.REG[6];
-               register_static_object(&once_value_473);
-               } else fra.me.REG[6] = once_value_473;
+               once_value_481 = fra.me.REG[6];
+               register_static_object(&once_value_481);
+               } else fra.me.REG[6] = once_value_481;
                fra.me.REG[6] = fra.me.REG[6];
                REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[6]));
                if (UNTAG_Bool(REGB1)) {
@@ -15303,16 +15440,16 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                REGB1 = REGB2;
                }
                if (UNTAG_Bool(REGB1)) {
-               /* compiling/compiling_icode.nit:895 */
+               /* compiling/compiling_icode.nit:899 */
                REGB1 = TAG_Int(3);
                fra.me.REG[6] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
-               if (!once_value_475) {
+               if (!once_value_483) {
                fra.me.REG[3] = BOX_NativeString("BOX_NativeString(VAL2VFT(");
                REGB1 = TAG_Int(25);
                fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB1);
-               once_value_475 = fra.me.REG[3];
-               register_static_object(&once_value_475);
-               } else fra.me.REG[3] = once_value_475;
+               once_value_483 = fra.me.REG[3];
+               register_static_object(&once_value_483);
+               } else fra.me.REG[3] = once_value_483;
                fra.me.REG[3] = fra.me.REG[3];
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
                REGB1 = TAG_Int(0);
@@ -15355,20 +15492,20 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
                if (UNTAG_Bool(REGB2)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB1)];
                /* ../lib/standard/collection/array.nit:281 */
-               goto label476;
-               label476: while(0);
-               /* compiling/compiling_icode.nit:895 */
+               goto label484;
+               label484: while(0);
+               /* compiling/compiling_icode.nit:899 */
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
-               if (!once_value_477) {
+               if (!once_value_485) {
                fra.me.REG[4] = BOX_NativeString(")[2].cname);");
                REGB1 = TAG_Int(12);
                fra.me.REG[4] = NEW_String_standard___string___String___with_native(fra.me.REG[4], REGB1);
-               once_value_477 = fra.me.REG[4];
-               register_static_object(&once_value_477);
-               } else fra.me.REG[4] = once_value_477;
+               once_value_485 = fra.me.REG[4];
+               register_static_object(&once_value_485);
+               } else fra.me.REG[4] = once_value_485;
                fra.me.REG[4] = fra.me.REG[4];
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
                fra.me.REG[6] = CALL_standard___string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
@@ -15388,7 +15525,7 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
       }
     }
   }
-  /* compiling/compiling_icode.nit:898 */
+  /* compiling/compiling_icode.nit:902 */
   REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
@@ -15402,9 +15539,9 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
     }
   }
   if (UNTAG_Bool(REGB1)) {
-    /* compiling/compiling_icode.nit:899 */
+    /* compiling/compiling_icode.nit:903 */
     fra.me.REG[6] = CALL_icode___icode_base___ICode___location(fra.me.REG[0])(fra.me.REG[0]);
-    /* compiling/compiling_icode.nit:900 */
+    /* compiling/compiling_icode.nit:904 */
     REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
     } else {
@@ -15421,81 +15558,81 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Int(3);
       fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
-      if (!once_value_478) {
+      if (!once_value_486) {
         fra.me.REG[3] = BOX_NativeString("fprintf(stderr, \"");
         REGB1 = TAG_Int(17);
         fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB1);
-        once_value_478 = fra.me.REG[3];
-        register_static_object(&once_value_478);
-      } else fra.me.REG[3] = once_value_478;
+        once_value_486 = fra.me.REG[3];
+        register_static_object(&once_value_486);
+      } else fra.me.REG[3] = once_value_486;
       fra.me.REG[3] = fra.me.REG[3];
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
       REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        nit_abort("Reciever is null", NULL, LOCATE_compiling___compiling_icode, 900);
+        nit_abort("Reciever is null", NULL, LOCATE_compiling___compiling_icode, 904);
       }
       fra.me.REG[6] = CALL_standard___string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-      if (!once_value_479) {
+      if (!once_value_487) {
         fra.me.REG[6] = BOX_NativeString(": \");");
         REGB1 = TAG_Int(5);
         fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB1);
-        once_value_479 = fra.me.REG[6];
-        register_static_object(&once_value_479);
-      } else fra.me.REG[6] = once_value_479;
+        once_value_487 = fra.me.REG[6];
+        register_static_object(&once_value_487);
+      } else fra.me.REG[6] = once_value_487;
       fra.me.REG[6] = fra.me.REG[6];
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
       fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
       CALL_compiling___compiling_icode___I2CCompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
     }
-    /* compiling/compiling_icode.nit:901 */
+    /* compiling/compiling_icode.nit:905 */
     REGB1 = TAG_Int(3);
     fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
-    if (!once_value_480) {
+    if (!once_value_488) {
       fra.me.REG[6] = BOX_NativeString("fprintf(stderr, \"Fatal error: unknown intern method ");
       REGB1 = TAG_Int(52);
       fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB1);
-      once_value_480 = fra.me.REG[6];
-      register_static_object(&once_value_480);
-    } else fra.me.REG[6] = once_value_480;
+      once_value_488 = fra.me.REG[6];
+      register_static_object(&once_value_488);
+    } else fra.me.REG[6] = once_value_488;
     fra.me.REG[6] = fra.me.REG[6];
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
     fra.me.REG[6] = CALL_icode___icode_base___INative___method(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalProperty___full_name(fra.me.REG[6])(fra.me.REG[6]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-    if (!once_value_481) {
+    if (!once_value_489) {
       fra.me.REG[6] = BOX_NativeString(".\\n\");");
       REGB1 = TAG_Int(6);
       fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB1);
-      once_value_481 = fra.me.REG[6];
-      register_static_object(&once_value_481);
-    } else fra.me.REG[6] = once_value_481;
+      once_value_489 = fra.me.REG[6];
+      register_static_object(&once_value_489);
+    } else fra.me.REG[6] = once_value_489;
     fra.me.REG[6] = fra.me.REG[6];
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
     fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
     CALL_compiling___compiling_icode___I2CCompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-    /* compiling/compiling_icode.nit:902 */
-    if (!once_value_482) {
+    /* compiling/compiling_icode.nit:906 */
+    if (!once_value_490) {
       fra.me.REG[4] = BOX_NativeString("nit_exit(1);");
       REGB1 = TAG_Int(12);
       fra.me.REG[4] = NEW_String_standard___string___String___with_native(fra.me.REG[4], REGB1);
-      once_value_482 = fra.me.REG[4];
-      register_static_object(&once_value_482);
-    } else fra.me.REG[4] = once_value_482;
+      once_value_490 = fra.me.REG[4];
+      register_static_object(&once_value_490);
+    } else fra.me.REG[4] = once_value_490;
     fra.me.REG[4] = fra.me.REG[4];
     CALL_compiling___compiling_icode___I2CCompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-    /* compiling/compiling_icode.nit:903 */
-    if (!once_value_483) {
+    /* compiling/compiling_icode.nit:907 */
+    if (!once_value_491) {
       fra.me.REG[4] = BOX_NativeString("NIT_NULL");
       REGB1 = TAG_Int(8);
       fra.me.REG[4] = NEW_String_standard___string___String___with_native(fra.me.REG[4], REGB1);
-      once_value_483 = fra.me.REG[4];
-      register_static_object(&once_value_483);
-    } else fra.me.REG[4] = once_value_483;
+      once_value_491 = fra.me.REG[4];
+      register_static_object(&once_value_491);
+    } else fra.me.REG[4] = once_value_491;
     fra.me.REG[4] = fra.me.REG[4];
     fra.me.REG[5] = fra.me.REG[4];
   }
-  /* compiling/compiling_icode.nit:905 */
+  /* compiling/compiling_icode.nit:909 */
   fra.me.REG[4] = CALL_icode___icode_base___ICode___result(fra.me.REG[0])(fra.me.REG[0]);
   REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
@@ -15510,25 +15647,25 @@ void compiling___compiling_icode___INative___compile_intern_method_to_c(val_t p0
     }
   }
   if (UNTAG_Bool(REGB1)) {
-    /* compiling/compiling_icode.nit:906 */
+    /* compiling/compiling_icode.nit:910 */
     fra.me.REG[4] = CALL_compiling___compiling_icode___I2CCompilerVisitor___new_instr(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[4] = CALL_compiling_writer___Writer___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
-    if (!once_value_484) {
+    if (!once_value_492) {
       fra.me.REG[6] = BOX_NativeString(";\n");
       REGB1 = TAG_Int(2);
       fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB1);
-      once_value_484 = fra.me.REG[6];
-      register_static_object(&once_value_484);
-    } else fra.me.REG[6] = once_value_484;
+      once_value_492 = fra.me.REG[6];
+      register_static_object(&once_value_492);
+    } else fra.me.REG[6] = once_value_492;
     fra.me.REG[6] = fra.me.REG[6];
     CALL_compiling_writer___Writer___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
   } else {
-    /* compiling/compiling_icode.nit:907 */
+    /* compiling/compiling_icode.nit:911 */
     REGB1 = CALL_compiling___compiling_icode___ICode___need_result(fra.me.REG[0])(fra.me.REG[0]);
     if (UNTAG_Bool(REGB1)) {
-      /* compiling/compiling_icode.nit:908 */
+      /* compiling/compiling_icode.nit:912 */
       fra.me.REG[1] = CALL_compiling___compiling_icode___ICode___new_result(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-      /* compiling/compiling_icode.nit:909 */
+      /* compiling/compiling_icode.nit:913 */
       CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
     }
   }
@@ -15544,7 +15681,7 @@ void compiling___compiling_icode___IIntValue___compile_to_c(val_t p0, val_t p1){
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 915;
+  fra.me.line = 919;
   fra.me.meth = LOCATE_compiling___compiling_icode___IIntValue___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15554,12 +15691,12 @@ void compiling___compiling_icode___IIntValue___compile_to_c(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:917 */
+  /* compiling/compiling_icode.nit:921 */
   fra.me.REG[2] = CALL_icode___icode_base___ICode___location(fra.me.REG[0])(fra.me.REG[0]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_location(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:918 */
+  /* compiling/compiling_icode.nit:922 */
   fra.me.REG[1] = CALL_compiling___compiling_icode___ICode___new_result(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:919 */
+  /* compiling/compiling_icode.nit:923 */
   if (!once_value_1) {
     fra.me.REG[2] = BOX_NativeString("TAG_Int(");
     REGB0 = TAG_Int(8);
@@ -15595,7 +15732,7 @@ void compiling___compiling_icode___IBoolValue___compile_to_c(val_t p0, val_t p1)
   static val_t once_value_4; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 924;
+  fra.me.line = 928;
   fra.me.meth = LOCATE_compiling___compiling_icode___IBoolValue___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15605,12 +15742,12 @@ void compiling___compiling_icode___IBoolValue___compile_to_c(val_t p0, val_t p1)
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:926 */
+  /* compiling/compiling_icode.nit:930 */
   fra.me.REG[2] = CALL_icode___icode_base___ICode___location(fra.me.REG[0])(fra.me.REG[0]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_location(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:927 */
+  /* compiling/compiling_icode.nit:931 */
   fra.me.REG[1] = CALL_compiling___compiling_icode___ICode___new_result(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:928 */
+  /* compiling/compiling_icode.nit:932 */
   if (!once_value_1) {
     fra.me.REG[2] = BOX_NativeString("TAG_Bool(");
     REGB0 = TAG_Int(9);
@@ -15620,7 +15757,7 @@ void compiling___compiling_icode___IBoolValue___compile_to_c(val_t p0, val_t p1)
   } else fra.me.REG[2] = once_value_1;
   fra.me.REG[2] = fra.me.REG[2];
   CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:929 */
+  /* compiling/compiling_icode.nit:933 */
   REGB0 = CALL_icode___icode_base___IBoolValue___value(fra.me.REG[0])(fra.me.REG[0]);
   if (UNTAG_Bool(REGB0)) {
     if (!once_value_2) {
@@ -15643,7 +15780,7 @@ void compiling___compiling_icode___IBoolValue___compile_to_c(val_t p0, val_t p1)
     fra.me.REG[0] = fra.me.REG[0];
     CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* compiling/compiling_icode.nit:930 */
+  /* compiling/compiling_icode.nit:934 */
   if (!once_value_4) {
     fra.me.REG[0] = BOX_NativeString(")");
     REGB0 = TAG_Int(1);
@@ -15665,7 +15802,7 @@ void compiling___compiling_icode___ICharValue___compile_to_c(val_t p0, val_t p1)
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 935;
+  fra.me.line = 939;
   fra.me.meth = LOCATE_compiling___compiling_icode___ICharValue___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15675,12 +15812,12 @@ void compiling___compiling_icode___ICharValue___compile_to_c(val_t p0, val_t p1)
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:937 */
+  /* compiling/compiling_icode.nit:941 */
   fra.me.REG[2] = CALL_icode___icode_base___ICode___location(fra.me.REG[0])(fra.me.REG[0]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_location(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:938 */
+  /* compiling/compiling_icode.nit:942 */
   fra.me.REG[1] = CALL_compiling___compiling_icode___ICode___new_result(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:939 */
+  /* compiling/compiling_icode.nit:943 */
   if (!once_value_1) {
     fra.me.REG[2] = BOX_NativeString("TAG_Char(");
     REGB0 = TAG_Int(9);
@@ -15713,7 +15850,7 @@ void compiling___compiling_icode___IFloatValue___compile_to_c(val_t p0, val_t p1
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 944;
+  fra.me.line = 948;
   fra.me.meth = LOCATE_compiling___compiling_icode___IFloatValue___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15723,12 +15860,12 @@ void compiling___compiling_icode___IFloatValue___compile_to_c(val_t p0, val_t p1
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:946 */
+  /* compiling/compiling_icode.nit:950 */
   fra.me.REG[2] = CALL_icode___icode_base___ICode___location(fra.me.REG[0])(fra.me.REG[0]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_location(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:947 */
+  /* compiling/compiling_icode.nit:951 */
   fra.me.REG[1] = CALL_compiling___compiling_icode___ICode___new_result(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:948 */
+  /* compiling/compiling_icode.nit:952 */
   if (!once_value_1) {
     fra.me.REG[2] = BOX_NativeString("BOX_Float(");
     REGB0 = TAG_Int(10);
@@ -15761,7 +15898,7 @@ void compiling___compiling_icode___IStringValue___compile_to_c(val_t p0, val_t p
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 953;
+  fra.me.line = 957;
   fra.me.meth = LOCATE_compiling___compiling_icode___IStringValue___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15771,12 +15908,12 @@ void compiling___compiling_icode___IStringValue___compile_to_c(val_t p0, val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:955 */
+  /* compiling/compiling_icode.nit:959 */
   fra.me.REG[2] = CALL_icode___icode_base___ICode___location(fra.me.REG[0])(fra.me.REG[0]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_location(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:956 */
+  /* compiling/compiling_icode.nit:960 */
   fra.me.REG[1] = CALL_compiling___compiling_icode___ICode___new_result(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:957 */
+  /* compiling/compiling_icode.nit:961 */
   if (!once_value_1) {
     fra.me.REG[2] = BOX_NativeString("BOX_NativeString(\"");
     REGB0 = TAG_Int(18);
@@ -15817,7 +15954,7 @@ void compiling___compiling_icode___IAbort___compile_to_c(val_t p0, val_t p1){
   static val_t once_value_10; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 962;
+  fra.me.line = 966;
   fra.me.meth = LOCATE_compiling___compiling_icode___IAbort___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15827,12 +15964,12 @@ void compiling___compiling_icode___IAbort___compile_to_c(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:964 */
+  /* compiling/compiling_icode.nit:968 */
   fra.me.REG[2] = CALL_icode___icode_base___ICode___location(fra.me.REG[0])(fra.me.REG[0]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_location(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:965 */
+  /* compiling/compiling_icode.nit:969 */
   fra.me.REG[1] = CALL_compiling___compiling_icode___I2CCompilerVisitor___new_instr(fra.me.REG[1])(fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:966 */
+  /* compiling/compiling_icode.nit:970 */
   if (!once_value_1) {
     fra.me.REG[2] = BOX_NativeString("nit_abort(\"");
     REGB0 = TAG_Int(11);
@@ -15842,7 +15979,7 @@ void compiling___compiling_icode___IAbort___compile_to_c(val_t p0, val_t p1){
   } else fra.me.REG[2] = once_value_1;
   fra.me.REG[2] = fra.me.REG[2];
   CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:967 */
+  /* compiling/compiling_icode.nit:971 */
   fra.me.REG[2] = CALL_icode___icode_base___IAbort___texts(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Int(0);
   /* ../lib/standard/collection/array.nit:280 */
@@ -15884,14 +16021,14 @@ void compiling___compiling_icode___IAbort___compile_to_c(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB1)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label2;
   label2: while(0);
-  /* compiling/compiling_icode.nit:967 */
+  /* compiling/compiling_icode.nit:971 */
   CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:968 */
+  /* compiling/compiling_icode.nit:972 */
   fra.me.REG[2] = CALL_icode___icode_base___IAbort___texts(fra.me.REG[0])(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:24 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
@@ -15900,7 +16037,7 @@ void compiling___compiling_icode___IAbort___compile_to_c(val_t p0, val_t p1){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:968 */
+  /* compiling/compiling_icode.nit:972 */
   REGB1 = TAG_Int(1);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
@@ -15909,9 +16046,9 @@ void compiling___compiling_icode___IAbort___compile_to_c(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:237 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB1));
-  /* compiling/compiling_icode.nit:968 */
+  /* compiling/compiling_icode.nit:972 */
   if (UNTAG_Bool(REGB1)) {
-    /* compiling/compiling_icode.nit:969 */
+    /* compiling/compiling_icode.nit:973 */
     if (!once_value_3) {
       fra.me.REG[2] = BOX_NativeString("\", \"");
       REGB1 = TAG_Int(4);
@@ -15921,7 +16058,7 @@ void compiling___compiling_icode___IAbort___compile_to_c(val_t p0, val_t p1){
     } else fra.me.REG[2] = once_value_3;
     fra.me.REG[2] = fra.me.REG[2];
     CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    /* compiling/compiling_icode.nit:970 */
+    /* compiling/compiling_icode.nit:974 */
     fra.me.REG[2] = CALL_icode___icode_base___IAbort___texts(fra.me.REG[0])(fra.me.REG[0]);
     REGB1 = TAG_Int(1);
     /* ../lib/standard/collection/array.nit:280 */
@@ -15963,14 +16100,14 @@ void compiling___compiling_icode___IAbort___compile_to_c(val_t p0, val_t p1){
     if (UNTAG_Bool(REGB0)) {
       nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
     }
-    /* ../lib/standard/collection/array.nit:718 */
+    /* ../lib/standard/collection/array.nit:724 */
     fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB1)];
     /* ../lib/standard/collection/array.nit:281 */
     goto label4;
     label4: while(0);
-    /* compiling/compiling_icode.nit:970 */
+    /* compiling/compiling_icode.nit:974 */
     CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    /* compiling/compiling_icode.nit:971 */
+    /* compiling/compiling_icode.nit:975 */
     if (!once_value_5) {
       fra.me.REG[2] = BOX_NativeString("\"");
       REGB1 = TAG_Int(1);
@@ -15981,7 +16118,7 @@ void compiling___compiling_icode___IAbort___compile_to_c(val_t p0, val_t p1){
     fra.me.REG[2] = fra.me.REG[2];
     CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   } else {
-    /* compiling/compiling_icode.nit:973 */
+    /* compiling/compiling_icode.nit:977 */
     if (!once_value_6) {
       fra.me.REG[2] = BOX_NativeString("\", NULL");
       REGB1 = TAG_Int(7);
@@ -15992,7 +16129,7 @@ void compiling___compiling_icode___IAbort___compile_to_c(val_t p0, val_t p1){
     fra.me.REG[2] = fra.me.REG[2];
     CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* compiling/compiling_icode.nit:975 */
+  /* compiling/compiling_icode.nit:979 */
   if (!once_value_7) {
     fra.me.REG[2] = BOX_NativeString(", LOCATE_");
     REGB1 = TAG_Int(9);
@@ -16002,13 +16139,13 @@ void compiling___compiling_icode___IAbort___compile_to_c(val_t p0, val_t p1){
   } else fra.me.REG[2] = once_value_7;
   fra.me.REG[2] = fra.me.REG[2];
   CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:976 */
+  /* compiling/compiling_icode.nit:980 */
   fra.me.REG[2] = CALL_icode___icode_base___IAbort___module_location(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_compiling___compiling_base___MMModule___cname(fra.me.REG[2])(fra.me.REG[2]);
   CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:977 */
+  /* compiling/compiling_icode.nit:981 */
   fra.me.REG[0] = CALL_icode___icode_base___ICode___location(fra.me.REG[0])(fra.me.REG[0]);
-  /* compiling/compiling_icode.nit:978 */
+  /* compiling/compiling_icode.nit:982 */
   REGB1 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
@@ -16023,7 +16160,7 @@ void compiling___compiling_icode___IAbort___compile_to_c(val_t p0, val_t p1){
   }
   REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
   if (UNTAG_Bool(REGB1)) {
-    /* compiling/compiling_icode.nit:979 */
+    /* compiling/compiling_icode.nit:983 */
     if (!once_value_8) {
       fra.me.REG[2] = BOX_NativeString(", ");
       REGB1 = TAG_Int(2);
@@ -16033,16 +16170,16 @@ void compiling___compiling_icode___IAbort___compile_to_c(val_t p0, val_t p1){
     } else fra.me.REG[2] = once_value_8;
     fra.me.REG[2] = fra.me.REG[2];
     CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    /* compiling/compiling_icode.nit:980 */
+    /* compiling/compiling_icode.nit:984 */
     REGB1 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      nit_abort("Reciever is null", NULL, LOCATE_compiling___compiling_icode, 980);
+      nit_abort("Reciever is null", NULL, LOCATE_compiling___compiling_icode, 984);
     }
     REGB1 = CALL_location___Location___line_start(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[0] = CALL_standard___string___Object___to_s(REGB1)(REGB1);
     CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   } else {
-    /* compiling/compiling_icode.nit:982 */
+    /* compiling/compiling_icode.nit:986 */
     if (!once_value_9) {
       fra.me.REG[0] = BOX_NativeString(", 0");
       REGB1 = TAG_Int(3);
@@ -16053,7 +16190,7 @@ void compiling___compiling_icode___IAbort___compile_to_c(val_t p0, val_t p1){
     fra.me.REG[0] = fra.me.REG[0];
     CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* compiling/compiling_icode.nit:984 */
+  /* compiling/compiling_icode.nit:988 */
   if (!once_value_10) {
     fra.me.REG[0] = BOX_NativeString(");\n");
     REGB1 = TAG_Int(3);
@@ -16076,7 +16213,7 @@ void compiling___compiling_icode___IMove___compile_to_c(val_t p0, val_t p1){
   static val_t once_value_3; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 989;
+  fra.me.line = 993;
   fra.me.meth = LOCATE_compiling___compiling_icode___IMove___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -16088,26 +16225,26 @@ void compiling___compiling_icode___IMove___compile_to_c(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:989 */
+  /* compiling/compiling_icode.nit:993 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* compiling/compiling_icode.nit:991 */
+  /* compiling/compiling_icode.nit:995 */
   REGB0 = CALL_compiling___compiling_icode___ICode___need_result(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* compiling/compiling_icode.nit:992 */
+  /* compiling/compiling_icode.nit:996 */
   fra.me.REG[3] = CALL_icode___icode_base___ICode1___expr(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[3] = CALL_compiling___compiling_icode___I2CCompilerVisitor___register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:993 */
+  /* compiling/compiling_icode.nit:997 */
   fra.me.REG[4] = CALL_icode___icode_base___ICode___result(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_icode___icode_base___IRegister, ID_icode___icode_base___IRegister)) /*cast IRegister*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_compiling___compiling_icode, 993);
+    nit_abort("Cast failed", NULL, LOCATE_compiling___compiling_icode, 997);
   }
   fra.me.REG[4] = CALL_compiling___compiling_icode___I2CCompilerVisitor___register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* compiling/compiling_icode.nit:994 */
+  /* compiling/compiling_icode.nit:998 */
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[4]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -16117,14 +16254,14 @@ void compiling___compiling_icode___IMove___compile_to_c(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* compiling/compiling_icode.nit:995 */
+  /* compiling/compiling_icode.nit:999 */
   fra.me.REG[2] = CALL_icode___icode_base___ICode___location(fra.me.REG[2])(fra.me.REG[2]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_location(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:996 */
+  /* compiling/compiling_icode.nit:1000 */
   fra.me.REG[1] = CALL_compiling___compiling_icode___I2CCompilerVisitor___new_instr(fra.me.REG[1])(fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:997 */
+  /* compiling/compiling_icode.nit:1001 */
   CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* compiling/compiling_icode.nit:998 */
+  /* compiling/compiling_icode.nit:1002 */
   if (!once_value_2) {
     fra.me.REG[4] = BOX_NativeString(" = ");
     REGB0 = TAG_Int(3);
@@ -16134,9 +16271,9 @@ void compiling___compiling_icode___IMove___compile_to_c(val_t p0, val_t p1){
   } else fra.me.REG[4] = once_value_2;
   fra.me.REG[4] = fra.me.REG[4];
   CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* compiling/compiling_icode.nit:999 */
+  /* compiling/compiling_icode.nit:1003 */
   CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1000 */
+  /* compiling/compiling_icode.nit:1004 */
   if (!once_value_3) {
     fra.me.REG[3] = BOX_NativeString(";\n");
     REGB0 = TAG_Int(2);
@@ -16159,7 +16296,7 @@ void compiling___compiling_icode___IAttrRead___compile_to_c(val_t p0, val_t p1){
   static val_t once_value_3; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 1005;
+  fra.me.line = 1009;
   fra.me.meth = LOCATE_compiling___compiling_icode___IAttrRead___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16170,23 +16307,23 @@ void compiling___compiling_icode___IAttrRead___compile_to_c(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:1007 */
+  /* compiling/compiling_icode.nit:1011 */
   REGB0 = CALL_compiling___compiling_icode___ICode___need_result(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* compiling/compiling_icode.nit:1008 */
+  /* compiling/compiling_icode.nit:1012 */
   fra.me.REG[2] = CALL_icode___icode_base___ICode___location(fra.me.REG[0])(fra.me.REG[0]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_location(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:1009 */
+  /* compiling/compiling_icode.nit:1013 */
   fra.me.REG[2] = CALL_compiling___compiling_icode___ICode___new_result(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1010 */
+  /* compiling/compiling_icode.nit:1014 */
   fra.me.REG[3] = CALL_icode___icode_base___IAttrRead___property(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[3] = CALL_compiling___compiling_base___MMGlobalProperty___attr_access(fra.me.REG[3])(fra.me.REG[3]);
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1011 */
+  /* compiling/compiling_icode.nit:1015 */
   if (!once_value_2) {
     fra.me.REG[3] = BOX_NativeString("(");
     REGB0 = TAG_Int(1);
@@ -16196,11 +16333,11 @@ void compiling___compiling_icode___IAttrRead___compile_to_c(val_t p0, val_t p1){
   } else fra.me.REG[3] = once_value_2;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1012 */
+  /* compiling/compiling_icode.nit:1016 */
   fra.me.REG[0] = CALL_icode___icode_base___ICode1___expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_compiling___compiling_icode___I2CCompilerVisitor___register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* compiling/compiling_icode.nit:1013 */
+  /* compiling/compiling_icode.nit:1017 */
   if (!once_value_3) {
     fra.me.REG[0] = BOX_NativeString(")");
     REGB0 = TAG_Int(1);
@@ -16224,7 +16361,7 @@ void compiling___compiling_icode___IAttrIsset___compile_to_c(val_t p0, val_t p1)
   static val_t once_value_4; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 1018;
+  fra.me.line = 1022;
   fra.me.meth = LOCATE_compiling___compiling_icode___IAttrIsset___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16235,18 +16372,18 @@ void compiling___compiling_icode___IAttrIsset___compile_to_c(val_t p0, val_t p1)
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:1020 */
+  /* compiling/compiling_icode.nit:1024 */
   REGB0 = CALL_compiling___compiling_icode___ICode___need_result(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* compiling/compiling_icode.nit:1021 */
+  /* compiling/compiling_icode.nit:1025 */
   fra.me.REG[2] = CALL_icode___icode_base___ICode___location(fra.me.REG[0])(fra.me.REG[0]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_location(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:1022 */
+  /* compiling/compiling_icode.nit:1026 */
   fra.me.REG[2] = CALL_compiling___compiling_icode___ICode___new_result(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1023 */
+  /* compiling/compiling_icode.nit:1027 */
   if (!once_value_2) {
     fra.me.REG[3] = BOX_NativeString("TAG_Bool(");
     REGB0 = TAG_Int(9);
@@ -16256,12 +16393,12 @@ void compiling___compiling_icode___IAttrIsset___compile_to_c(val_t p0, val_t p1)
   } else fra.me.REG[3] = once_value_2;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1024 */
+  /* compiling/compiling_icode.nit:1028 */
   fra.me.REG[3] = CALL_icode___icode_base___IAttrIsset___property(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[3] = CALL_compiling___compiling_base___MMGlobalProperty___attr_access(fra.me.REG[3])(fra.me.REG[3]);
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1025 */
+  /* compiling/compiling_icode.nit:1029 */
   if (!once_value_3) {
     fra.me.REG[3] = BOX_NativeString("(");
     REGB0 = TAG_Int(1);
@@ -16271,11 +16408,11 @@ void compiling___compiling_icode___IAttrIsset___compile_to_c(val_t p0, val_t p1)
   } else fra.me.REG[3] = once_value_3;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1026 */
+  /* compiling/compiling_icode.nit:1030 */
   fra.me.REG[0] = CALL_icode___icode_base___ICode1___expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_compiling___compiling_icode___I2CCompilerVisitor___register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* compiling/compiling_icode.nit:1027 */
+  /* compiling/compiling_icode.nit:1031 */
   if (!once_value_4) {
     fra.me.REG[0] = BOX_NativeString(")!=NIT_NULL)");
     REGB0 = TAG_Int(12);
@@ -16299,7 +16436,7 @@ void compiling___compiling_icode___IAttrWrite___compile_to_c(val_t p0, val_t p1)
   static val_t once_value_3; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 1032;
+  fra.me.line = 1036;
   fra.me.meth = LOCATE_compiling___compiling_icode___IAttrWrite___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16310,17 +16447,17 @@ void compiling___compiling_icode___IAttrWrite___compile_to_c(val_t p0, val_t p1)
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:1034 */
+  /* compiling/compiling_icode.nit:1038 */
   fra.me.REG[2] = CALL_icode___icode_base___ICode___location(fra.me.REG[0])(fra.me.REG[0]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_location(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:1035 */
+  /* compiling/compiling_icode.nit:1039 */
   fra.me.REG[2] = CALL_compiling___compiling_icode___I2CCompilerVisitor___new_instr(fra.me.REG[1])(fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1036 */
+  /* compiling/compiling_icode.nit:1040 */
   fra.me.REG[3] = CALL_icode___icode_base___IAttrWrite___property(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[3] = CALL_compiling___compiling_base___MMGlobalProperty___attr_access(fra.me.REG[3])(fra.me.REG[3]);
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1037 */
+  /* compiling/compiling_icode.nit:1041 */
   if (!once_value_1) {
     fra.me.REG[3] = BOX_NativeString("(");
     REGB0 = TAG_Int(1);
@@ -16330,11 +16467,11 @@ void compiling___compiling_icode___IAttrWrite___compile_to_c(val_t p0, val_t p1)
   } else fra.me.REG[3] = once_value_1;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1038 */
+  /* compiling/compiling_icode.nit:1042 */
   fra.me.REG[3] = CALL_icode___icode_base___ICode2___expr1(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_compiling___compiling_icode___I2CCompilerVisitor___register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1039 */
+  /* compiling/compiling_icode.nit:1043 */
   if (!once_value_2) {
     fra.me.REG[3] = BOX_NativeString(") = ");
     REGB0 = TAG_Int(4);
@@ -16344,11 +16481,11 @@ void compiling___compiling_icode___IAttrWrite___compile_to_c(val_t p0, val_t p1)
   } else fra.me.REG[3] = once_value_2;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1040 */
+  /* compiling/compiling_icode.nit:1044 */
   fra.me.REG[0] = CALL_icode___icode_base___ICode2___expr2(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_compiling___compiling_icode___I2CCompilerVisitor___register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* compiling/compiling_icode.nit:1041 */
+  /* compiling/compiling_icode.nit:1045 */
   if (!once_value_3) {
     fra.me.REG[0] = BOX_NativeString(";\n");
     REGB0 = TAG_Int(2);
@@ -16389,7 +16526,7 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
     static val_t once_value_21; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 1046;
+  fra.me.line = 1050;
   fra.me.meth = LOCATE_compiling___compiling_icode___ITypeCheck___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -16402,21 +16539,21 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:1048 */
+  /* compiling/compiling_icode.nit:1052 */
   REGB0 = CALL_compiling___compiling_icode___ICode___need_result(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* compiling/compiling_icode.nit:1049 */
+  /* compiling/compiling_icode.nit:1053 */
   fra.me.REG[2] = CALL_icode___icode_base___ICode___location(fra.me.REG[0])(fra.me.REG[0]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_location(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:1050 */
+  /* compiling/compiling_icode.nit:1054 */
   fra.me.REG[2] = CALL_icode___icode_base___ICode2___expr2(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_compiling___compiling_icode___I2CCompilerVisitor___register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:1051 */
+  /* compiling/compiling_icode.nit:1055 */
   fra.me.REG[3] = CALL_compiling___compiling_icode___ICode___new_result(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1052 */
+  /* compiling/compiling_icode.nit:1056 */
   if (!once_value_2) {
     fra.me.REG[4] = BOX_NativeString("TAG_Bool(");
     REGB0 = TAG_Int(9);
@@ -16426,16 +16563,16 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
   } else fra.me.REG[4] = once_value_2;
   fra.me.REG[4] = fra.me.REG[4];
   CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
-  /* compiling/compiling_icode.nit:1053 */
+  /* compiling/compiling_icode.nit:1057 */
   fra.me.REG[4] = CALL_icode___icode_base___ICode2___expr2(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_icode___icode_base___IRegister___stype(fra.me.REG[4])(fra.me.REG[4]);
   REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[4])(fra.me.REG[4]);
   if (UNTAG_Bool(REGB0)) {
-    /* compiling/compiling_icode.nit:1054 */
+    /* compiling/compiling_icode.nit:1058 */
     fra.me.REG[4] = CALL_icode___icode_base___ITypeCheck___stype(fra.me.REG[0])(fra.me.REG[0]);
     REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[4])(fra.me.REG[4]);
     if (UNTAG_Bool(REGB0)) {
-      /* compiling/compiling_icode.nit:1055 */
+      /* compiling/compiling_icode.nit:1059 */
       if (!once_value_3) {
         fra.me.REG[4] = BOX_NativeString("(");
         REGB0 = TAG_Int(1);
@@ -16445,9 +16582,9 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
       } else fra.me.REG[4] = once_value_3;
       fra.me.REG[4] = fra.me.REG[4];
       CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
-      /* compiling/compiling_icode.nit:1056 */
+      /* compiling/compiling_icode.nit:1060 */
       CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-      /* compiling/compiling_icode.nit:1057 */
+      /* compiling/compiling_icode.nit:1061 */
       if (!once_value_4) {
         fra.me.REG[4] = BOX_NativeString("==NIT_NULL) || ");
         REGB0 = TAG_Int(15);
@@ -16458,7 +16595,7 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
       fra.me.REG[4] = fra.me.REG[4];
       CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
     } else {
-      /* compiling/compiling_icode.nit:1058 */
+      /* compiling/compiling_icode.nit:1062 */
       fra.me.REG[4] = CALL_icode___icode_base___ITypeCheck___stype(fra.me.REG[0])(fra.me.REG[0]);
       fra.me.REG[4] = CALL_metamodel___static_type___MMType___as_nullable(fra.me.REG[4])(fra.me.REG[4]);
       fra.me.REG[5] = CALL_icode___icode_base___ICode2___expr2(fra.me.REG[0])(fra.me.REG[0]);
@@ -16470,9 +16607,9 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
         REGB0 = REGB1;
       }
       if (UNTAG_Bool(REGB0)) {
-        /* compiling/compiling_icode.nit:1059 */
+        /* compiling/compiling_icode.nit:1063 */
         CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-        /* compiling/compiling_icode.nit:1060 */
+        /* compiling/compiling_icode.nit:1064 */
         if (!once_value_5) {
           fra.me.REG[5] = BOX_NativeString("!=NIT_NULL)");
           REGB0 = TAG_Int(11);
@@ -16482,10 +16619,10 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
         } else fra.me.REG[5] = once_value_5;
         fra.me.REG[5] = fra.me.REG[5];
         CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-        /* compiling/compiling_icode.nit:1061 */
+        /* compiling/compiling_icode.nit:1065 */
         goto label1;
       } else {
-        /* compiling/compiling_icode.nit:1063 */
+        /* compiling/compiling_icode.nit:1067 */
         if (!once_value_6) {
           fra.me.REG[5] = BOX_NativeString("(");
           REGB0 = TAG_Int(1);
@@ -16495,9 +16632,9 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
         } else fra.me.REG[5] = once_value_6;
         fra.me.REG[5] = fra.me.REG[5];
         CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-        /* compiling/compiling_icode.nit:1064 */
+        /* compiling/compiling_icode.nit:1068 */
         CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-        /* compiling/compiling_icode.nit:1065 */
+        /* compiling/compiling_icode.nit:1069 */
         if (!once_value_7) {
           fra.me.REG[5] = BOX_NativeString("!=NIT_NULL) && ");
           REGB0 = TAG_Int(15);
@@ -16510,18 +16647,18 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
       }
     }
   }
-  /* compiling/compiling_icode.nit:1069 */
+  /* compiling/compiling_icode.nit:1073 */
   fra.me.REG[5] = CALL_icode___icode_base___ITypeCheck___stype(fra.me.REG[0])(fra.me.REG[0]);
-  /* compiling/compiling_icode.nit:1070 */
+  /* compiling/compiling_icode.nit:1074 */
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[5], COLOR_metamodel___virtualtype___MMVirtualType, ID_metamodel___virtualtype___MMVirtualType)) /*cast MMVirtualType*/;
   if (UNTAG_Bool(REGB0)) {
-    /* compiling/compiling_icode.nit:1071 */
+    /* compiling/compiling_icode.nit:1075 */
     fra.me.REG[0] = CALL_icode___icode_base___ICode2___expr1(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[0] = CALL_compiling___compiling_icode___I2CCompilerVisitor___register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* compiling/compiling_icode.nit:1072 */
+    /* compiling/compiling_icode.nit:1076 */
     fra.me.REG[1] = CALL_metamodel___virtualtype___MMVirtualType___property(fra.me.REG[5])(fra.me.REG[5]);
     fra.me.REG[1] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[1])(fra.me.REG[1]);
-    /* compiling/compiling_icode.nit:1073 */
+    /* compiling/compiling_icode.nit:1077 */
     if (!once_value_8) {
       fra.me.REG[4] = BOX_NativeString("VAL_ISA(");
       REGB0 = TAG_Int(8);
@@ -16531,9 +16668,9 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
     } else fra.me.REG[4] = once_value_8;
     fra.me.REG[4] = fra.me.REG[4];
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
-    /* compiling/compiling_icode.nit:1074 */
+    /* compiling/compiling_icode.nit:1078 */
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-    /* compiling/compiling_icode.nit:1075 */
+    /* compiling/compiling_icode.nit:1079 */
     if (!once_value_9) {
       fra.me.REG[4] = BOX_NativeString(", ");
       REGB0 = TAG_Int(2);
@@ -16543,10 +16680,10 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
     } else fra.me.REG[4] = once_value_9;
     fra.me.REG[4] = fra.me.REG[4];
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
-    /* compiling/compiling_icode.nit:1076 */
+    /* compiling/compiling_icode.nit:1080 */
     fra.me.REG[4] = CALL_compiling___compiling_base___MMGlobalProperty___vt_class_color(fra.me.REG[1])(fra.me.REG[1]);
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
-    /* compiling/compiling_icode.nit:1077 */
+    /* compiling/compiling_icode.nit:1081 */
     if (!once_value_10) {
       fra.me.REG[4] = BOX_NativeString("(");
       REGB0 = TAG_Int(1);
@@ -16556,9 +16693,9 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
     } else fra.me.REG[4] = once_value_10;
     fra.me.REG[4] = fra.me.REG[4];
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
-    /* compiling/compiling_icode.nit:1078 */
+    /* compiling/compiling_icode.nit:1082 */
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-    /* compiling/compiling_icode.nit:1079 */
+    /* compiling/compiling_icode.nit:1083 */
     if (!once_value_11) {
       fra.me.REG[4] = BOX_NativeString(")");
       REGB0 = TAG_Int(1);
@@ -16568,7 +16705,7 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
     } else fra.me.REG[4] = once_value_11;
     fra.me.REG[4] = fra.me.REG[4];
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
-    /* compiling/compiling_icode.nit:1080 */
+    /* compiling/compiling_icode.nit:1084 */
     if (!once_value_12) {
       fra.me.REG[4] = BOX_NativeString(", ");
       REGB0 = TAG_Int(2);
@@ -16578,10 +16715,10 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
     } else fra.me.REG[4] = once_value_12;
     fra.me.REG[4] = fra.me.REG[4];
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
-    /* compiling/compiling_icode.nit:1081 */
+    /* compiling/compiling_icode.nit:1085 */
     fra.me.REG[1] = CALL_compiling___compiling_base___MMGlobalProperty___vt_class_id(fra.me.REG[1])(fra.me.REG[1]);
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    /* compiling/compiling_icode.nit:1082 */
+    /* compiling/compiling_icode.nit:1086 */
     if (!once_value_13) {
       fra.me.REG[1] = BOX_NativeString("(");
       REGB0 = TAG_Int(1);
@@ -16591,9 +16728,9 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
     } else fra.me.REG[1] = once_value_13;
     fra.me.REG[1] = fra.me.REG[1];
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    /* compiling/compiling_icode.nit:1083 */
+    /* compiling/compiling_icode.nit:1087 */
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-    /* compiling/compiling_icode.nit:1084 */
+    /* compiling/compiling_icode.nit:1088 */
     if (!once_value_14) {
       fra.me.REG[0] = BOX_NativeString(")");
       REGB0 = TAG_Int(1);
@@ -16603,7 +16740,7 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
     } else fra.me.REG[0] = once_value_14;
     fra.me.REG[0] = fra.me.REG[0];
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-    /* compiling/compiling_icode.nit:1085 */
+    /* compiling/compiling_icode.nit:1089 */
     if (!once_value_15) {
       fra.me.REG[0] = BOX_NativeString(")) /*cast ");
       REGB0 = TAG_Int(10);
@@ -16613,10 +16750,10 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
     } else fra.me.REG[0] = once_value_15;
     fra.me.REG[0] = fra.me.REG[0];
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-    /* compiling/compiling_icode.nit:1086 */
+    /* compiling/compiling_icode.nit:1090 */
     fra.me.REG[0] = CALL_standard___string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-    /* compiling/compiling_icode.nit:1087 */
+    /* compiling/compiling_icode.nit:1091 */
     if (!once_value_16) {
       fra.me.REG[0] = BOX_NativeString("*/");
       REGB0 = TAG_Int(2);
@@ -16627,10 +16764,10 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
     fra.me.REG[0] = fra.me.REG[0];
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   } else {
-    /* compiling/compiling_icode.nit:1089 */
+    /* compiling/compiling_icode.nit:1093 */
     fra.me.REG[0] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[5])(fra.me.REG[5]);
     fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMLocalClass___global(fra.me.REG[0])(fra.me.REG[0]);
-    /* compiling/compiling_icode.nit:1090 */
+    /* compiling/compiling_icode.nit:1094 */
     if (!once_value_17) {
       fra.me.REG[1] = BOX_NativeString("VAL_ISA(");
       REGB0 = TAG_Int(8);
@@ -16640,9 +16777,9 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
     } else fra.me.REG[1] = once_value_17;
     fra.me.REG[1] = fra.me.REG[1];
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    /* compiling/compiling_icode.nit:1091 */
+    /* compiling/compiling_icode.nit:1095 */
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-    /* compiling/compiling_icode.nit:1092 */
+    /* compiling/compiling_icode.nit:1096 */
     if (!once_value_18) {
       fra.me.REG[2] = BOX_NativeString(", ");
       REGB0 = TAG_Int(2);
@@ -16652,10 +16789,10 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
     } else fra.me.REG[2] = once_value_18;
     fra.me.REG[2] = fra.me.REG[2];
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-    /* compiling/compiling_icode.nit:1093 */
+    /* compiling/compiling_icode.nit:1097 */
     fra.me.REG[2] = CALL_compiling___compiling_base___MMGlobalClass___color_id(fra.me.REG[0])(fra.me.REG[0]);
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-    /* compiling/compiling_icode.nit:1094 */
+    /* compiling/compiling_icode.nit:1098 */
     if (!once_value_19) {
       fra.me.REG[2] = BOX_NativeString(", ");
       REGB0 = TAG_Int(2);
@@ -16665,10 +16802,10 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
     } else fra.me.REG[2] = once_value_19;
     fra.me.REG[2] = fra.me.REG[2];
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-    /* compiling/compiling_icode.nit:1095 */
+    /* compiling/compiling_icode.nit:1099 */
     fra.me.REG[0] = CALL_compiling___compiling_base___MMGlobalClass___id_id(fra.me.REG[0])(fra.me.REG[0]);
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-    /* compiling/compiling_icode.nit:1096 */
+    /* compiling/compiling_icode.nit:1100 */
     if (!once_value_20) {
       fra.me.REG[0] = BOX_NativeString(")) /*cast ");
       REGB0 = TAG_Int(10);
@@ -16678,10 +16815,10 @@ void compiling___compiling_icode___ITypeCheck___compile_to_c(val_t p0, val_t p1)
     } else fra.me.REG[0] = once_value_20;
     fra.me.REG[0] = fra.me.REG[0];
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-    /* compiling/compiling_icode.nit:1097 */
+    /* compiling/compiling_icode.nit:1101 */
     fra.me.REG[5] = CALL_standard___string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
     CALL_compiling_writer___Writer___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-    /* compiling/compiling_icode.nit:1098 */
+    /* compiling/compiling_icode.nit:1102 */
     if (!once_value_21) {
       fra.me.REG[5] = BOX_NativeString("*/");
       REGB0 = TAG_Int(2);
@@ -16717,7 +16854,7 @@ void compiling___compiling_icode___IIs___compile_to_c(val_t p0, val_t p1){
   static val_t once_value_15; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 1104;
+  fra.me.line = 1108;
   fra.me.meth = LOCATE_compiling___compiling_icode___IIs___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -16730,18 +16867,18 @@ void compiling___compiling_icode___IIs___compile_to_c(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:1106 */
+  /* compiling/compiling_icode.nit:1110 */
   REGB0 = CALL_compiling___compiling_icode___ICode___need_result(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* compiling/compiling_icode.nit:1107 */
+  /* compiling/compiling_icode.nit:1111 */
   fra.me.REG[2] = CALL_icode___icode_base___ICode___location(fra.me.REG[0])(fra.me.REG[0]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_location(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:1108 */
+  /* compiling/compiling_icode.nit:1112 */
   fra.me.REG[2] = CALL_compiling___compiling_icode___ICode___new_result(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1109 */
+  /* compiling/compiling_icode.nit:1113 */
   if (!once_value_2) {
     fra.me.REG[3] = BOX_NativeString("TAG_Bool(");
     REGB0 = TAG_Int(9);
@@ -16751,19 +16888,19 @@ void compiling___compiling_icode___IIs___compile_to_c(val_t p0, val_t p1){
   } else fra.me.REG[3] = once_value_2;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1110 */
+  /* compiling/compiling_icode.nit:1114 */
   fra.me.REG[3] = CALL_icode___icode_base___ICode2___expr1(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_icode___icode_base___IRegister___stype(fra.me.REG[3])(fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1111 */
+  /* compiling/compiling_icode.nit:1115 */
   fra.me.REG[4] = CALL_icode___icode_base___ICode2___expr2(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_icode___icode_base___IRegister___stype(fra.me.REG[4])(fra.me.REG[4]);
-  /* compiling/compiling_icode.nit:1112 */
+  /* compiling/compiling_icode.nit:1116 */
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[3], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
   if (UNTAG_Bool(REGB0)) {
-    /* compiling/compiling_icode.nit:1113 */
+    /* compiling/compiling_icode.nit:1117 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[4], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
     if (UNTAG_Bool(REGB0)) {
-      /* compiling/compiling_icode.nit:1114 */
+      /* compiling/compiling_icode.nit:1118 */
       if (!once_value_3) {
         fra.me.REG[5] = BOX_NativeString("1)");
         REGB0 = TAG_Int(2);
@@ -16773,17 +16910,17 @@ void compiling___compiling_icode___IIs___compile_to_c(val_t p0, val_t p1){
       } else fra.me.REG[5] = once_value_3;
       fra.me.REG[5] = fra.me.REG[5];
       CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-      /* compiling/compiling_icode.nit:1115 */
+      /* compiling/compiling_icode.nit:1119 */
       goto label1;
     } else {
-      /* compiling/compiling_icode.nit:1116 */
+      /* compiling/compiling_icode.nit:1120 */
       REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[4])(fra.me.REG[4]);
       if (UNTAG_Bool(REGB0)) {
-        /* compiling/compiling_icode.nit:1117 */
+        /* compiling/compiling_icode.nit:1121 */
         fra.me.REG[5] = CALL_icode___icode_base___ICode2___expr2(fra.me.REG[0])(fra.me.REG[0]);
         fra.me.REG[5] = CALL_compiling___compiling_icode___I2CCompilerVisitor___register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
         CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-        /* compiling/compiling_icode.nit:1118 */
+        /* compiling/compiling_icode.nit:1122 */
         if (!once_value_4) {
           fra.me.REG[5] = BOX_NativeString("==NIT_NULL)");
           REGB0 = TAG_Int(11);
@@ -16793,10 +16930,10 @@ void compiling___compiling_icode___IIs___compile_to_c(val_t p0, val_t p1){
         } else fra.me.REG[5] = once_value_4;
         fra.me.REG[5] = fra.me.REG[5];
         CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-        /* compiling/compiling_icode.nit:1119 */
+        /* compiling/compiling_icode.nit:1123 */
         goto label1;
       } else {
-        /* compiling/compiling_icode.nit:1121 */
+        /* compiling/compiling_icode.nit:1125 */
         if (!once_value_5) {
           fra.me.REG[5] = BOX_NativeString("0)");
           REGB0 = TAG_Int(2);
@@ -16806,22 +16943,22 @@ void compiling___compiling_icode___IIs___compile_to_c(val_t p0, val_t p1){
         } else fra.me.REG[5] = once_value_5;
         fra.me.REG[5] = fra.me.REG[5];
         CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-        /* compiling/compiling_icode.nit:1122 */
+        /* compiling/compiling_icode.nit:1126 */
         goto label1;
       }
     }
   } else {
-    /* compiling/compiling_icode.nit:1124 */
+    /* compiling/compiling_icode.nit:1128 */
     REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[3])(fra.me.REG[3]);
     if (UNTAG_Bool(REGB0)) {
-      /* compiling/compiling_icode.nit:1125 */
+      /* compiling/compiling_icode.nit:1129 */
       REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[4], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
       if (UNTAG_Bool(REGB0)) {
-        /* compiling/compiling_icode.nit:1126 */
+        /* compiling/compiling_icode.nit:1130 */
         fra.me.REG[3] = CALL_icode___icode_base___ICode2___expr1(fra.me.REG[0])(fra.me.REG[0]);
         fra.me.REG[3] = CALL_compiling___compiling_icode___I2CCompilerVisitor___register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
         CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-        /* compiling/compiling_icode.nit:1127 */
+        /* compiling/compiling_icode.nit:1131 */
         if (!once_value_6) {
           fra.me.REG[3] = BOX_NativeString("==NIT_NULL)");
           REGB0 = TAG_Int(11);
@@ -16831,13 +16968,13 @@ void compiling___compiling_icode___IIs___compile_to_c(val_t p0, val_t p1){
         } else fra.me.REG[3] = once_value_6;
         fra.me.REG[3] = fra.me.REG[3];
         CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-        /* compiling/compiling_icode.nit:1128 */
+        /* compiling/compiling_icode.nit:1132 */
         goto label1;
       } else {
-        /* compiling/compiling_icode.nit:1129 */
+        /* compiling/compiling_icode.nit:1133 */
         REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[4])(fra.me.REG[4]);
         if (UNTAG_Bool(REGB0)) {
-          /* compiling/compiling_icode.nit:1130 */
+          /* compiling/compiling_icode.nit:1134 */
           if (!once_value_7) {
             fra.me.REG[3] = BOX_NativeString("IS_EQUAL_NN(");
             REGB0 = TAG_Int(12);
@@ -16848,7 +16985,7 @@ void compiling___compiling_icode___IIs___compile_to_c(val_t p0, val_t p1){
           fra.me.REG[3] = fra.me.REG[3];
           CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
         } else {
-          /* compiling/compiling_icode.nit:1132 */
+          /* compiling/compiling_icode.nit:1136 */
           if (!once_value_8) {
             fra.me.REG[3] = BOX_NativeString("IS_EQUAL_ON(");
             REGB0 = TAG_Int(12);
@@ -16858,11 +16995,11 @@ void compiling___compiling_icode___IIs___compile_to_c(val_t p0, val_t p1){
           } else fra.me.REG[3] = once_value_8;
           fra.me.REG[3] = fra.me.REG[3];
           CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-          /* compiling/compiling_icode.nit:1133 */
+          /* compiling/compiling_icode.nit:1137 */
           fra.me.REG[3] = CALL_icode___icode_base___ICode2___expr2(fra.me.REG[0])(fra.me.REG[0]);
           fra.me.REG[3] = CALL_compiling___compiling_icode___I2CCompilerVisitor___register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
           CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-          /* compiling/compiling_icode.nit:1134 */
+          /* compiling/compiling_icode.nit:1138 */
           if (!once_value_9) {
             fra.me.REG[3] = BOX_NativeString(",");
             REGB0 = TAG_Int(1);
@@ -16872,11 +17009,11 @@ void compiling___compiling_icode___IIs___compile_to_c(val_t p0, val_t p1){
           } else fra.me.REG[3] = once_value_9;
           fra.me.REG[3] = fra.me.REG[3];
           CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-          /* compiling/compiling_icode.nit:1135 */
+          /* compiling/compiling_icode.nit:1139 */
           fra.me.REG[3] = CALL_icode___icode_base___ICode2___expr1(fra.me.REG[0])(fra.me.REG[0]);
           fra.me.REG[3] = CALL_compiling___compiling_icode___I2CCompilerVisitor___register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
           CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-          /* compiling/compiling_icode.nit:1136 */
+          /* compiling/compiling_icode.nit:1140 */
           if (!once_value_10) {
             fra.me.REG[3] = BOX_NativeString("))");
             REGB0 = TAG_Int(2);
@@ -16886,15 +17023,15 @@ void compiling___compiling_icode___IIs___compile_to_c(val_t p0, val_t p1){
           } else fra.me.REG[3] = once_value_10;
           fra.me.REG[3] = fra.me.REG[3];
           CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-          /* compiling/compiling_icode.nit:1137 */
+          /* compiling/compiling_icode.nit:1141 */
           goto label1;
         }
       }
     } else {
-      /* compiling/compiling_icode.nit:1140 */
+      /* compiling/compiling_icode.nit:1144 */
       REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[4], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
       if (UNTAG_Bool(REGB0)) {
-        /* compiling/compiling_icode.nit:1141 */
+        /* compiling/compiling_icode.nit:1145 */
         if (!once_value_11) {
           fra.me.REG[3] = BOX_NativeString("0)");
           REGB0 = TAG_Int(2);
@@ -16904,13 +17041,13 @@ void compiling___compiling_icode___IIs___compile_to_c(val_t p0, val_t p1){
         } else fra.me.REG[3] = once_value_11;
         fra.me.REG[3] = fra.me.REG[3];
         CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-        /* compiling/compiling_icode.nit:1142 */
+        /* compiling/compiling_icode.nit:1146 */
         goto label1;
       } else {
-        /* compiling/compiling_icode.nit:1143 */
+        /* compiling/compiling_icode.nit:1147 */
         REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[4])(fra.me.REG[4]);
         if (UNTAG_Bool(REGB0)) {
-          /* compiling/compiling_icode.nit:1144 */
+          /* compiling/compiling_icode.nit:1148 */
           if (!once_value_12) {
             fra.me.REG[4] = BOX_NativeString("IS_EQUAL_ON(");
             REGB0 = TAG_Int(12);
@@ -16921,7 +17058,7 @@ void compiling___compiling_icode___IIs___compile_to_c(val_t p0, val_t p1){
           fra.me.REG[4] = fra.me.REG[4];
           CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
         } else {
-          /* compiling/compiling_icode.nit:1146 */
+          /* compiling/compiling_icode.nit:1150 */
           if (!once_value_13) {
             fra.me.REG[4] = BOX_NativeString("IS_EQUAL_OO(");
             REGB0 = TAG_Int(12);
@@ -16935,11 +17072,11 @@ void compiling___compiling_icode___IIs___compile_to_c(val_t p0, val_t p1){
       }
     }
   }
-  /* compiling/compiling_icode.nit:1149 */
+  /* compiling/compiling_icode.nit:1153 */
   fra.me.REG[4] = CALL_icode___icode_base___ICode2___expr1(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_compiling___compiling_icode___I2CCompilerVisitor___register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* compiling/compiling_icode.nit:1150 */
+  /* compiling/compiling_icode.nit:1154 */
   if (!once_value_14) {
     fra.me.REG[4] = BOX_NativeString(",");
     REGB0 = TAG_Int(1);
@@ -16949,11 +17086,11 @@ void compiling___compiling_icode___IIs___compile_to_c(val_t p0, val_t p1){
   } else fra.me.REG[4] = once_value_14;
   fra.me.REG[4] = fra.me.REG[4];
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* compiling/compiling_icode.nit:1151 */
+  /* compiling/compiling_icode.nit:1155 */
   fra.me.REG[0] = CALL_icode___icode_base___ICode2___expr2(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_compiling___compiling_icode___I2CCompilerVisitor___register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* compiling/compiling_icode.nit:1152 */
+  /* compiling/compiling_icode.nit:1156 */
   if (!once_value_15) {
     fra.me.REG[0] = BOX_NativeString("))");
     REGB0 = TAG_Int(2);
@@ -16976,7 +17113,7 @@ void compiling___compiling_icode___INot___compile_to_c(val_t p0, val_t p1){
   static val_t once_value_3; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 1157;
+  fra.me.line = 1161;
   fra.me.meth = LOCATE_compiling___compiling_icode___INot___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16987,18 +17124,18 @@ void compiling___compiling_icode___INot___compile_to_c(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:1159 */
+  /* compiling/compiling_icode.nit:1163 */
   REGB0 = CALL_compiling___compiling_icode___ICode___need_result(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* compiling/compiling_icode.nit:1160 */
+  /* compiling/compiling_icode.nit:1164 */
   fra.me.REG[2] = CALL_icode___icode_base___ICode___location(fra.me.REG[0])(fra.me.REG[0]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_location(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:1161 */
+  /* compiling/compiling_icode.nit:1165 */
   fra.me.REG[2] = CALL_compiling___compiling_icode___ICode___new_result(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1162 */
+  /* compiling/compiling_icode.nit:1166 */
   if (!once_value_2) {
     fra.me.REG[3] = BOX_NativeString("TAG_Bool(!UNTAG_Bool(");
     REGB0 = TAG_Int(21);
@@ -17008,11 +17145,11 @@ void compiling___compiling_icode___INot___compile_to_c(val_t p0, val_t p1){
   } else fra.me.REG[3] = once_value_2;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1163 */
+  /* compiling/compiling_icode.nit:1167 */
   fra.me.REG[0] = CALL_icode___icode_base___ICode1___expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_compiling___compiling_icode___I2CCompilerVisitor___register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* compiling/compiling_icode.nit:1164 */
+  /* compiling/compiling_icode.nit:1168 */
   if (!once_value_3) {
     fra.me.REG[0] = BOX_NativeString("))");
     REGB0 = TAG_Int(2);
@@ -17053,7 +17190,7 @@ void compiling___compiling_icode___IOnce___compile_to_c(val_t p0, val_t p1){
   static val_t once_value_19; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 1169;
+  fra.me.line = 1173;
   fra.me.meth = LOCATE_compiling___compiling_icode___IOnce___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -17066,25 +17203,25 @@ void compiling___compiling_icode___IOnce___compile_to_c(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:1169 */
+  /* compiling/compiling_icode.nit:1173 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* compiling/compiling_icode.nit:1171 */
+  /* compiling/compiling_icode.nit:1175 */
   fra.me.REG[3] = CALL_icode___icode_base___ICode___location(fra.me.REG[2])(fra.me.REG[2]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_location(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1172 */
+  /* compiling/compiling_icode.nit:1176 */
   REGB0 = CALL_compiling___compiling_icode___I2CCompilerVisitor___new_number(fra.me.REG[1])(fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1173 */
+  /* compiling/compiling_icode.nit:1177 */
   fra.me.REG[3] = CALL_icode___icode_base___ICode___result(fra.me.REG[2])(fra.me.REG[2]);
   REGB1 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_icode___icode_base___IRegister, ID_icode___icode_base___IRegister)) /*cast IRegister*/;
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_compiling___compiling_icode, 1173);
+    nit_abort("Cast failed", NULL, LOCATE_compiling___compiling_icode, 1177);
   }
-  /* compiling/compiling_icode.nit:1174 */
+  /* compiling/compiling_icode.nit:1178 */
   fra.me.REG[0] = CALL_icode___icode_base___IRegister___stype(fra.me.REG[3])(fra.me.REG[3]);
   REGB1 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[0])(fra.me.REG[0]);
   if (UNTAG_Bool(REGB1)) {
-    /* compiling/compiling_icode.nit:1175 */
+    /* compiling/compiling_icode.nit:1179 */
     REGB1 = TAG_Int(5);
     fra.me.REG[0] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
     if (!once_value_1) {
@@ -17120,7 +17257,7 @@ void compiling___compiling_icode___IOnce___compile_to_c(val_t p0, val_t p1){
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4]);
     fra.me.REG[0] = CALL_standard___string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
     CALL_compiling___compiling_icode___I2CCompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* compiling/compiling_icode.nit:1176 */
+    /* compiling/compiling_icode.nit:1180 */
     REGB1 = TAG_Int(3);
     fra.me.REG[0] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
     if (!once_value_4) {
@@ -17146,7 +17283,7 @@ void compiling___compiling_icode___IOnce___compile_to_c(val_t p0, val_t p1){
     fra.me.REG[0] = CALL_standard___string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
     CALL_compiling___compiling_icode___I2CCompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   } else {
-    /* compiling/compiling_icode.nit:1179 */
+    /* compiling/compiling_icode.nit:1183 */
     REGB1 = TAG_Int(3);
     fra.me.REG[0] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
     if (!once_value_6) {
@@ -17171,7 +17308,7 @@ void compiling___compiling_icode___IOnce___compile_to_c(val_t p0, val_t p1){
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4]);
     fra.me.REG[0] = CALL_standard___string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
     CALL_compiling___compiling_icode___I2CCompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* compiling/compiling_icode.nit:1180 */
+    /* compiling/compiling_icode.nit:1184 */
     REGB1 = TAG_Int(3);
     fra.me.REG[0] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
     if (!once_value_8) {
@@ -17197,14 +17334,14 @@ void compiling___compiling_icode___IOnce___compile_to_c(val_t p0, val_t p1){
     fra.me.REG[0] = CALL_standard___string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
     CALL_compiling___compiling_icode___I2CCompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* compiling/compiling_icode.nit:1182 */
+  /* compiling/compiling_icode.nit:1186 */
   CALL_compiling___compiling_icode___I2CCompilerVisitor___indent(fra.me.REG[1])(fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1183 */
+  /* compiling/compiling_icode.nit:1187 */
   fra.me.REG[0] = CALL_icode___icode_base___IOnce___body(fra.me.REG[2])(fra.me.REG[2]);
   CALL_compiling___compiling_icode___ICode___compile_to_c(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1184 */
+  /* compiling/compiling_icode.nit:1188 */
   fra.me.REG[0] = CALL_compiling___compiling_icode___I2CCompilerVisitor___register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1185 */
+  /* compiling/compiling_icode.nit:1189 */
   REGB1 = TAG_Int(5);
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
   if (!once_value_10) {
@@ -17239,7 +17376,7 @@ void compiling___compiling_icode___IOnce___compile_to_c(val_t p0, val_t p1){
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* compiling/compiling_icode.nit:1186 */
+  /* compiling/compiling_icode.nit:1190 */
   REGB1 = TAG_Int(3);
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
   if (!once_value_13) {
@@ -17264,7 +17401,7 @@ void compiling___compiling_icode___IOnce___compile_to_c(val_t p0, val_t p1){
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* compiling/compiling_icode.nit:1187 */
+  /* compiling/compiling_icode.nit:1191 */
   fra.me.REG[3] = CALL_icode___icode_base___IRegister___stype(fra.me.REG[3])(fra.me.REG[3]);
   REGB1 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[3])(fra.me.REG[3]);
   if (UNTAG_Bool(REGB1)) {
@@ -17293,9 +17430,9 @@ void compiling___compiling_icode___IOnce___compile_to_c(val_t p0, val_t p1){
     fra.me.REG[3] = CALL_standard___string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
     CALL_compiling___compiling_icode___I2CCompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* compiling/compiling_icode.nit:1188 */
+  /* compiling/compiling_icode.nit:1192 */
   CALL_compiling___compiling_icode___I2CCompilerVisitor___unindent(fra.me.REG[1])(fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1189 */
+  /* compiling/compiling_icode.nit:1193 */
   REGB1 = TAG_Int(5);
   fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
   if (!once_value_17) {
@@ -17330,9 +17467,9 @@ void compiling___compiling_icode___IOnce___compile_to_c(val_t p0, val_t p1){
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   fra.me.REG[3] = CALL_standard___string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1190 */
+  /* compiling/compiling_icode.nit:1194 */
   fra.me.REG[1] = CALL_compiling___compiling_icode___ICode___new_result(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1191 */
+  /* compiling/compiling_icode.nit:1195 */
   CALL_compiling_writer___Writer___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
@@ -17359,7 +17496,7 @@ void compiling___compiling_icode___IClosCall___compile_to_c(val_t p0, val_t p1){
   static val_t once_value_14; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 1196;
+  fra.me.line = 1200;
   fra.me.meth = LOCATE_compiling___compiling_icode___IClosCall___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -17373,13 +17510,13 @@ void compiling___compiling_icode___IClosCall___compile_to_c(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:1198 */
+  /* compiling/compiling_icode.nit:1202 */
   fra.me.REG[2] = CALL_icode___icode_base___ICode___location(fra.me.REG[0])(fra.me.REG[0]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_location(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:1201 */
+  /* compiling/compiling_icode.nit:1205 */
   REGB0 = CALL_compiling___compiling_icode___I2CCompilerVisitor___closure(fra.me.REG[1])(fra.me.REG[1]);
   if (UNTAG_Bool(REGB0)) {
-    /* compiling/compiling_icode.nit:1202 */
+    /* compiling/compiling_icode.nit:1206 */
     REGB0 = TAG_Int(3);
     fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
     if (!once_value_1) {
@@ -17405,7 +17542,7 @@ void compiling___compiling_icode___IClosCall___compile_to_c(val_t p0, val_t p1){
     fra.me.REG[4] = fra.me.REG[4];
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
     fra.me.REG[2] = CALL_standard___string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
-    /* compiling/compiling_icode.nit:1203 */
+    /* compiling/compiling_icode.nit:1207 */
     REGB0 = TAG_Int(1);
     fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
     if (!once_value_3) {
@@ -17418,7 +17555,7 @@ void compiling___compiling_icode___IClosCall___compile_to_c(val_t p0, val_t p1){
     fra.me.REG[3] = fra.me.REG[3];
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   } else {
-    /* compiling/compiling_icode.nit:1205 */
+    /* compiling/compiling_icode.nit:1209 */
     REGB0 = TAG_Int(3);
     fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
     if (!once_value_4) {
@@ -17445,7 +17582,7 @@ void compiling___compiling_icode___IClosCall___compile_to_c(val_t p0, val_t p1){
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
     fra.me.REG[3] = CALL_standard___string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
     fra.me.REG[2] = fra.me.REG[3];
-    /* compiling/compiling_icode.nit:1206 */
+    /* compiling/compiling_icode.nit:1210 */
     REGB0 = TAG_Int(1);
     fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
     if (!once_value_6) {
@@ -17459,11 +17596,11 @@ void compiling___compiling_icode___IClosCall___compile_to_c(val_t p0, val_t p1){
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
     fra.me.REG[4] = fra.me.REG[3];
   }
-  /* compiling/compiling_icode.nit:1208 */
+  /* compiling/compiling_icode.nit:1212 */
   fra.me.REG[3] = CALL_icode___icode_base___ICodeN___exprs(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_compiling___compiling_icode___I2CCompilerVisitor___registers(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   CALL_standard___collection___abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1210 */
+  /* compiling/compiling_icode.nit:1214 */
   REGB0 = TAG_Int(7);
   fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_7) {
@@ -17518,13 +17655,13 @@ void compiling___compiling_icode___IClosCall___compile_to_c(val_t p0, val_t p1){
   fra.me.REG[2] = fra.me.REG[2];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
   fra.me.REG[3] = CALL_standard___string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1211 */
+  /* compiling/compiling_icode.nit:1215 */
   fra.me.REG[2] = NEW_Writer_compiling_writer___Writer___init();
-  /* compiling/compiling_icode.nit:1212 */
+  /* compiling/compiling_icode.nit:1216 */
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1213 */
+  /* compiling/compiling_icode.nit:1217 */
   CALL_compiling___compiling_icode___ICode___store_result(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:1216 */
+  /* compiling/compiling_icode.nit:1220 */
   REGB0 = TAG_Int(3);
   fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_12) {
@@ -17549,11 +17686,11 @@ void compiling___compiling_icode___IClosCall___compile_to_c(val_t p0, val_t p1){
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   fra.me.REG[2] = CALL_standard___string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:1217 */
+  /* compiling/compiling_icode.nit:1221 */
   CALL_compiling___compiling_icode___I2CCompilerVisitor___indent(fra.me.REG[1])(fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1218 */
+  /* compiling/compiling_icode.nit:1222 */
   fra.me.REG[0] = CALL_icode___icode_base___IClosCall___break_seq(fra.me.REG[0])(fra.me.REG[0]);
-  /* compiling/compiling_icode.nit:1219 */
+  /* compiling/compiling_icode.nit:1223 */
   REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -17568,20 +17705,20 @@ void compiling___compiling_icode___IClosCall___compile_to_c(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* compiling/compiling_icode.nit:1220 */
+    /* compiling/compiling_icode.nit:1224 */
     REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_compiling___compiling_icode, 1220);
+      nit_abort("Reciever is null", NULL, LOCATE_compiling___compiling_icode, 1224);
     }
     CALL_compiling___compiling_icode___ICode___compile_to_c(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   }
-  /* compiling/compiling_icode.nit:1222 */
+  /* compiling/compiling_icode.nit:1226 */
   fra.me.REG[0] = CALL_compiling___compiling_icode___I2CCompilerVisitor___iroutine(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[0] = CALL_icode___icode_base___IRoutine___body(fra.me.REG[0])(fra.me.REG[0]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_goto(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* compiling/compiling_icode.nit:1223 */
+  /* compiling/compiling_icode.nit:1227 */
   CALL_compiling___compiling_icode___I2CCompilerVisitor___unindent(fra.me.REG[1])(fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1224 */
+  /* compiling/compiling_icode.nit:1228 */
   if (!once_value_14) {
     fra.me.REG[0] = BOX_NativeString("}");
     REGB0 = TAG_Int(1);
@@ -17607,7 +17744,7 @@ void compiling___compiling_icode___IHasClos___compile_to_c(val_t p0, val_t p1){
   static val_t once_value_7; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 1229;
+  fra.me.line = 1233;
   fra.me.meth = LOCATE_compiling___compiling_icode___IHasClos___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -17619,18 +17756,18 @@ void compiling___compiling_icode___IHasClos___compile_to_c(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:1231 */
+  /* compiling/compiling_icode.nit:1235 */
   REGB0 = CALL_compiling___compiling_icode___ICode___need_result(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* compiling/compiling_icode.nit:1232 */
+  /* compiling/compiling_icode.nit:1236 */
   fra.me.REG[2] = CALL_icode___icode_base___ICode___location(fra.me.REG[0])(fra.me.REG[0]);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_location(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:1233 */
+  /* compiling/compiling_icode.nit:1237 */
   fra.me.REG[2] = CALL_compiling___compiling_icode___ICode___new_result(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1234 */
+  /* compiling/compiling_icode.nit:1238 */
   if (!once_value_2) {
     fra.me.REG[3] = BOX_NativeString("TAG_Bool(");
     REGB0 = TAG_Int(9);
@@ -17640,10 +17777,10 @@ void compiling___compiling_icode___IHasClos___compile_to_c(val_t p0, val_t p1){
   } else fra.me.REG[3] = once_value_2;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1235 */
+  /* compiling/compiling_icode.nit:1239 */
   REGB0 = CALL_compiling___compiling_icode___I2CCompilerVisitor___closure(fra.me.REG[1])(fra.me.REG[1]);
   if (UNTAG_Bool(REGB0)) {
-    /* compiling/compiling_icode.nit:1236 */
+    /* compiling/compiling_icode.nit:1240 */
     if (!once_value_3) {
       fra.me.REG[3] = BOX_NativeString("closctx->closure_funs[");
       REGB0 = TAG_Int(22);
@@ -17653,12 +17790,12 @@ void compiling___compiling_icode___IHasClos___compile_to_c(val_t p0, val_t p1){
     } else fra.me.REG[3] = once_value_3;
     fra.me.REG[3] = fra.me.REG[3];
     CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-    /* compiling/compiling_icode.nit:1237 */
+    /* compiling/compiling_icode.nit:1241 */
     fra.me.REG[3] = CALL_compiling___compiling_icode___I2CCompilerVisitor___closures(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[4] = CALL_icode___icode_base___IHasClos___closure_decl(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[4] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
     CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-    /* compiling/compiling_icode.nit:1238 */
+    /* compiling/compiling_icode.nit:1242 */
     if (!once_value_4) {
       fra.me.REG[4] = BOX_NativeString("]");
       REGB0 = TAG_Int(1);
@@ -17669,7 +17806,7 @@ void compiling___compiling_icode___IHasClos___compile_to_c(val_t p0, val_t p1){
     fra.me.REG[4] = fra.me.REG[4];
     CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   } else {
-    /* compiling/compiling_icode.nit:1240 */
+    /* compiling/compiling_icode.nit:1244 */
     if (!once_value_5) {
       fra.me.REG[4] = BOX_NativeString("CREG[");
       REGB0 = TAG_Int(5);
@@ -17679,12 +17816,12 @@ void compiling___compiling_icode___IHasClos___compile_to_c(val_t p0, val_t p1){
     } else fra.me.REG[4] = once_value_5;
     fra.me.REG[4] = fra.me.REG[4];
     CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-    /* compiling/compiling_icode.nit:1241 */
+    /* compiling/compiling_icode.nit:1245 */
     fra.me.REG[1] = CALL_compiling___compiling_icode___I2CCompilerVisitor___closures(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[0] = CALL_icode___icode_base___IHasClos___closure_decl(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[0] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
     CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-    /* compiling/compiling_icode.nit:1242 */
+    /* compiling/compiling_icode.nit:1246 */
     if (!once_value_6) {
       fra.me.REG[0] = BOX_NativeString("]");
       REGB0 = TAG_Int(1);
@@ -17695,7 +17832,7 @@ void compiling___compiling_icode___IHasClos___compile_to_c(val_t p0, val_t p1){
     fra.me.REG[0] = fra.me.REG[0];
     CALL_compiling_writer___Writer___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  /* compiling/compiling_icode.nit:1244 */
+  /* compiling/compiling_icode.nit:1248 */
   if (!once_value_7) {
     fra.me.REG[0] = BOX_NativeString(" != NULL)");
     REGB0 = TAG_Int(9);
@@ -17728,7 +17865,7 @@ val_t compiling___compiling_icode___IClosureDef___compile_closure(val_t p0, val_
   static val_t once_value_10; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling___compiling_icode;
-  fra.me.line = 1249;
+  fra.me.line = 1253;
   fra.me.meth = LOCATE_compiling___compiling_icode___IClosureDef___compile_closure;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -17744,31 +17881,31 @@ val_t compiling___compiling_icode___IClosureDef___compile_closure(val_t p0, val_
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* compiling/compiling_icode.nit:1253 */
+  /* compiling/compiling_icode.nit:1257 */
   fra.me.REG[2] = CALL_compiling___compiling_icode___I2CCompilerVisitor___visitor(fra.me.REG[1])(fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1256 */
+  /* compiling/compiling_icode.nit:1260 */
   REGB0 = CALL_compiling___compiling_icode___I2CCompilerVisitor___closure(fra.me.REG[1])(fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1257 */
+  /* compiling/compiling_icode.nit:1261 */
   REGB1 = TAG_Bool(1);
   CALL_compiling___compiling_icode___I2CCompilerVisitor___closure__eq(fra.me.REG[1])(fra.me.REG[1], REGB1);
-  /* compiling/compiling_icode.nit:1260 */
+  /* compiling/compiling_icode.nit:1264 */
   fra.me.REG[3] = CALL_compiling___compiling_icode___I2CCompilerVisitor___local_labels(fra.me.REG[1])(fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1261 */
+  /* compiling/compiling_icode.nit:1265 */
   fra.me.REG[4] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
   CALL_compiling___compiling_icode___I2CCompilerVisitor___local_labels__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* compiling/compiling_icode.nit:1264 */
+  /* compiling/compiling_icode.nit:1268 */
   fra.me.REG[4] = CALL_compiling___compiling_base___CompilerVisitor___decl_writer(fra.me.REG[2])(fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:1265 */
+  /* compiling/compiling_icode.nit:1269 */
   fra.me.REG[5] = CALL_compiling___compiling_base___CompilerVisitor___writer(fra.me.REG[2])(fra.me.REG[2]);
-  /* compiling/compiling_icode.nit:1266 */
+  /* compiling/compiling_icode.nit:1270 */
   fra.me.REG[6] = CALL_compiling___compiling_base___CompilerVisitor___top_writer(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[6] = CALL_compiling_writer___Writer___sub(fra.me.REG[6])(fra.me.REG[6]);
   CALL_compiling___compiling_base___CompilerVisitor___writer__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
-  /* compiling/compiling_icode.nit:1267 */
+  /* compiling/compiling_icode.nit:1271 */
   fra.me.REG[6] = CALL_compiling___compiling_base___CompilerVisitor___header_writer(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[6] = CALL_compiling_writer___Writer___sub(fra.me.REG[6])(fra.me.REG[6]);
   CALL_compiling___compiling_base___CompilerVisitor___decl_writer__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
-  /* compiling/compiling_icode.nit:1270 */
+  /* compiling/compiling_icode.nit:1274 */
   REGB1 = TAG_Int(5);
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
   if (!once_value_1) {
@@ -17804,7 +17941,7 @@ val_t compiling___compiling_icode___IClosureDef___compile_closure(val_t p0, val_
   fra.me.REG[7] = fra.me.REG[7];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   fra.me.REG[6] = CALL_standard___string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
-  /* compiling/compiling_icode.nit:1271 */
+  /* compiling/compiling_icode.nit:1275 */
   fra.me.REG[7] = CALL_compiling___compiling_icode___I2CCompilerVisitor___visitor(fra.me.REG[1])(fra.me.REG[1]);
   if (!once_value_4) {
     fra.me.REG[8] = BOX_NativeString("struct stack_frame_t *closctx");
@@ -17815,13 +17952,13 @@ val_t compiling___compiling_icode___IClosureDef___compile_closure(val_t p0, val_
   } else fra.me.REG[8] = once_value_4;
   fra.me.REG[8] = fra.me.REG[8];
   fra.me.REG[8] = CALL_compiling___compiling_icode___IRoutine___compile_signature_to_c(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[8], NIT_NULL);
-  /* compiling/compiling_icode.nit:1272 */
+  /* compiling/compiling_icode.nit:1276 */
   fra.me.REG[7] = CALL_compiling___compiling_base___CompilerVisitor___writer(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[7] = CALL_compiling_writer___Writer___sub(fra.me.REG[7])(fra.me.REG[7]);
   CALL_compiling___compiling_base___CompilerVisitor___decl_writer__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
-  /* compiling/compiling_icode.nit:1274 */
+  /* compiling/compiling_icode.nit:1278 */
   fra.me.REG[8] = CALL_compiling___compiling_icode___IRoutine___compile_inside_to_c(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[8]);
-  /* compiling/compiling_icode.nit:1275 */
+  /* compiling/compiling_icode.nit:1279 */
   REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
@@ -17835,7 +17972,7 @@ val_t compiling___compiling_icode___IClosureDef___compile_closure(val_t p0, val_
     }
   }
   if (UNTAG_Bool(REGB1)) {
-    /* compiling/compiling_icode.nit:1276 */
+    /* compiling/compiling_icode.nit:1280 */
     if (!once_value_5) {
       fra.me.REG[0] = BOX_NativeString("return;");
       REGB1 = TAG_Int(7);
@@ -17846,7 +17983,7 @@ val_t compiling___compiling_icode___IClosureDef___compile_closure(val_t p0, val_
     fra.me.REG[0] = fra.me.REG[0];
     CALL_compiling___compiling_icode___I2CCompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   } else {
-    /* compiling/compiling_icode.nit:1278 */
+    /* compiling/compiling_icode.nit:1282 */
     REGB1 = TAG_Int(3);
     fra.me.REG[0] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
     if (!once_value_6) {
@@ -17871,9 +18008,9 @@ val_t compiling___compiling_icode___IClosureDef___compile_closure(val_t p0, val_
     fra.me.REG[0] = CALL_standard___string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
     CALL_compiling___compiling_icode___I2CCompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* compiling/compiling_icode.nit:1280 */
+  /* compiling/compiling_icode.nit:1284 */
   CALL_compiling___compiling_icode___I2CCompilerVisitor___unindent(fra.me.REG[1])(fra.me.REG[1]);
-  /* compiling/compiling_icode.nit:1281 */
+  /* compiling/compiling_icode.nit:1285 */
   if (!once_value_8) {
     fra.me.REG[0] = BOX_NativeString("}");
     REGB1 = TAG_Int(1);
@@ -17883,15 +18020,15 @@ val_t compiling___compiling_icode___IClosureDef___compile_closure(val_t p0, val_
   } else fra.me.REG[0] = once_value_8;
   fra.me.REG[0] = fra.me.REG[0];
   CALL_compiling___compiling_icode___I2CCompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* compiling/compiling_icode.nit:1284 */
+  /* compiling/compiling_icode.nit:1288 */
   CALL_compiling___compiling_base___CompilerVisitor___writer__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* compiling/compiling_icode.nit:1285 */
+  /* compiling/compiling_icode.nit:1289 */
   CALL_compiling___compiling_base___CompilerVisitor___decl_writer__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* compiling/compiling_icode.nit:1286 */
+  /* compiling/compiling_icode.nit:1290 */
   CALL_compiling___compiling_icode___I2CCompilerVisitor___closure__eq(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  /* compiling/compiling_icode.nit:1287 */
+  /* compiling/compiling_icode.nit:1291 */
   CALL_compiling___compiling_icode___I2CCompilerVisitor___local_labels__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* compiling/compiling_icode.nit:1288 */
+  /* compiling/compiling_icode.nit:1292 */
   REGB0 = TAG_Int(3);
   fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_9) {
index 6d29ff6..4f975b0 100644 (file)
@@ -924,7 +924,7 @@ void compiling___table_computation___Program___do_global_table_analysis(val_t p0
       if (UNTAG_Bool(REGB3)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB2)];
       /* compiling/table_computation.nit:182 */
       fra.me.REG[8] = NEW_CompiledClass_compiling___table_computation___CompiledClass___init(fra.me.REG[7]);
@@ -1040,7 +1040,7 @@ void compiling___table_computation___Program___do_global_table_analysis(val_t p0
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[8] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB2)];
       /* compiling/table_computation.nit:212 */
       while(1) {
@@ -1134,7 +1134,7 @@ void compiling___table_computation___Program___do_global_table_analysis(val_t p0
       if (UNTAG_Bool(REGB0)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[8] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB3)];
       /* compiling/table_computation.nit:226 */
       fra.me.REG[10] = CALL_compiling___table_computation___Program___compiled_classes(fra.me.REG[0])(fra.me.REG[0]);
@@ -1288,7 +1288,7 @@ void compiling___table_computation___Program___do_global_table_analysis(val_t p0
       if (UNTAG_Bool(REGB0)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[8] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB3)];
       /* compiling/table_computation.nit:250 */
       fra.me.REG[9] = CALL_compiling___table_computation___Program___compiled_classes(fra.me.REG[0])(fra.me.REG[0]);
@@ -1395,7 +1395,7 @@ void compiling___table_computation___Program___do_global_table_analysis(val_t p0
       if (UNTAG_Bool(REGB0)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB3)];
       /* compiling/table_computation.nit:277 */
       fra.me.REG[1] = CALL_compiling___table_computation___Program___compiled_classes(fra.me.REG[0])(fra.me.REG[0]);
@@ -1647,7 +1647,7 @@ void compiling___table_computation___Program___colorize(val_t p0, val_t p1, val_
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB1)];
       /* compiling/table_computation.nit:309 */
       REGB2 = TAG_Int(1);
@@ -1719,7 +1719,7 @@ void compiling___table_computation___Program___colorize(val_t p0, val_t p1, val_
                if (UNTAG_Bool(REGB6)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[9] = ((Nit_NativeArray)fra.me.REG[8])->val[UNTAG_Int(REGB5)];
                /* compiling/table_computation.nit:324 */
                REGB6 = TAG_Int(0);
@@ -1940,7 +1940,7 @@ val_t compiling___table_computation___Program___free_color(val_t p0, val_t p1, v
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)];
       /* compiling/table_computation.nit:350 */
       REGB1 = CALL_compiling___table_computation___TableElt___is_related_to(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
@@ -2103,7 +2103,7 @@ void compiling___table_computation___Program___build_tables_in(val_t p0, val_t p
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB1)];
       /* compiling/table_computation.nit:371 */
       REGB2 = CALL_compiling___table_computation___TableElt___is_related_to(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
@@ -2702,7 +2702,7 @@ val_t compiling___table_computation___TableEltComposite___item(val_t p0, val_t p
   if (UNTAG_Bool(REGB1)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[0] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label1;
index 899e6e2..183e2e1 100644 (file)
@@ -123,7 +123,7 @@ val_t compiling_writer___Writer___add_all(val_t p0, val_t p1, val_t p2){
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB1)];
       /* compiling_writer.nit:44 */
       if (UNTAG_Bool(REGB0)) {
index 6d10932..8c66d72 100644 (file)
@@ -3,9 +3,11 @@
 /* out/indirect function for environ::NativeString::get_environ */
 val_t NativeString_get_environ___out( val_t recv )
 {
+char * trans_recv;
 char * orig_return;
 val_t trans_return;
-orig_return = string_NativeString_NativeString_get_environ_0( UNBOX_NativeString(recv) );
+trans_recv = UNBOX_NativeString(recv);
+orig_return = string_NativeString_NativeString_get_environ_0( trans_recv );
 trans_return = BOX_NativeString(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -13,6 +15,10 @@ return trans_return;
 /* out/indirect function for environ::NativeString::setenv */
 void NativeString_setenv___out( val_t recv, val_t v )
 {
-string_NativeString_NativeString_setenv_1( UNBOX_NativeString(recv), UNBOX_NativeString(v) );
+char * trans_recv;
+char * trans___v;
+trans_recv = UNBOX_NativeString(recv);
+trans___v = UNBOX_NativeString(v);
+string_NativeString_NativeString_setenv_1( trans_recv, trans___v );
 nitni_local_ref_clean(  );
 }
index 72a50c7..ec1837c 100644 (file)
@@ -3,13 +3,13 @@
 /* out/indirect function for exec::Process::basic_exec_execute */
 val_t Process_basic_exec_execute___out( val_t recv, val_t p, val_t av, val_t ac, val_t pf )
 {
-bigint trans___ac;
-bigint trans___pf;
+char * trans___p;
+char * trans___av;
 void* orig_return;
 val_t trans_return;
-trans___ac = UNTAG_Int(ac);
-trans___pf = UNTAG_Int(pf);
-orig_return = exec_Process_Process_basic_exec_execute_4( NULL, UNBOX_NativeString(p), UNBOX_NativeString(av), trans___ac, trans___pf );
+trans___p = UNBOX_NativeString(p);
+trans___av = UNBOX_NativeString(av);
+orig_return = exec_Process_Process_basic_exec_execute_4( NULL, trans___p, trans___av, UNTAG_Int(ac), UNTAG_Int(pf) );
 trans_return = BOX_NativeProcess(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -17,9 +17,11 @@ return trans_return;
 /* out/indirect function for exec::NativeString::system */
 val_t NativeString_system___out( val_t recv )
 {
+char * trans_recv;
 bigint orig_return;
 val_t trans_return;
-orig_return = string_NativeString_NativeString_system_0( UNBOX_NativeString(recv) );
+trans_recv = UNBOX_NativeString(recv);
+orig_return = string_NativeString_NativeString_system_0( trans_recv );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -27,9 +29,11 @@ return trans_return;
 /* out/indirect function for exec::NativeProcess::id */
 val_t NativeProcess_id___out( val_t recv )
 {
+void* trans_recv;
 bigint orig_return;
 val_t trans_return;
-orig_return = exec_NativeProcess_NativeProcess_id_0( UNBOX_NativeProcess(recv) );
+trans_recv = UNBOX_NativeProcess(recv);
+orig_return = exec_NativeProcess_NativeProcess_id_0( trans_recv );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -37,9 +41,11 @@ return trans_return;
 /* out/indirect function for exec::NativeProcess::is_finished */
 val_t NativeProcess_is_finished___out( val_t recv )
 {
+void* trans_recv;
 int orig_return;
 val_t trans_return;
-orig_return = exec_NativeProcess_NativeProcess_is_finished_0( UNBOX_NativeProcess(recv) );
+trans_recv = UNBOX_NativeProcess(recv);
+orig_return = exec_NativeProcess_NativeProcess_is_finished_0( trans_recv );
 trans_return = TAG_Bool(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -47,9 +53,11 @@ return trans_return;
 /* out/indirect function for exec::NativeProcess::status */
 val_t NativeProcess_status___out( val_t recv )
 {
+void* trans_recv;
 bigint orig_return;
 val_t trans_return;
-orig_return = exec_NativeProcess_NativeProcess_status_0( UNBOX_NativeProcess(recv) );
+trans_recv = UNBOX_NativeProcess(recv);
+orig_return = exec_NativeProcess_NativeProcess_status_0( trans_recv );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -57,15 +65,19 @@ return trans_return;
 /* out/indirect function for exec::NativeProcess::wait */
 void NativeProcess_wait___out( val_t recv )
 {
-exec_NativeProcess_NativeProcess_wait_0( UNBOX_NativeProcess(recv) );
+void* trans_recv;
+trans_recv = UNBOX_NativeProcess(recv);
+exec_NativeProcess_NativeProcess_wait_0( trans_recv );
 nitni_local_ref_clean(  );
 }
 /* out/indirect function for exec::NativeProcess::in_fd */
 val_t NativeProcess_in_fd___out( val_t recv )
 {
+void* trans_recv;
 bigint orig_return;
 val_t trans_return;
-orig_return = exec_NativeProcess_NativeProcess_in_fd_0( UNBOX_NativeProcess(recv) );
+trans_recv = UNBOX_NativeProcess(recv);
+orig_return = exec_NativeProcess_NativeProcess_in_fd_0( trans_recv );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -73,9 +85,11 @@ return trans_return;
 /* out/indirect function for exec::NativeProcess::out_fd */
 val_t NativeProcess_out_fd___out( val_t recv )
 {
+void* trans_recv;
 bigint orig_return;
 val_t trans_return;
-orig_return = exec_NativeProcess_NativeProcess_out_fd_0( UNBOX_NativeProcess(recv) );
+trans_recv = UNBOX_NativeProcess(recv);
+orig_return = exec_NativeProcess_NativeProcess_out_fd_0( trans_recv );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -83,9 +97,11 @@ return trans_return;
 /* out/indirect function for exec::NativeProcess::err_fd */
 val_t NativeProcess_err_fd___out( val_t recv )
 {
+void* trans_recv;
 bigint orig_return;
 val_t trans_return;
-orig_return = exec_NativeProcess_NativeProcess_err_fd_0( UNBOX_NativeProcess(recv) );
+trans_recv = UNBOX_NativeProcess(recv);
+orig_return = exec_NativeProcess_NativeProcess_err_fd_0( trans_recv );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
index 460ab72..d4c650b 100644 (file)
@@ -32,9 +32,11 @@ return trans_return;
 /* out/indirect function for file::NativeString::file_exists */
 val_t NativeString_file_exists___out( val_t recv )
 {
+char * trans_recv;
 int orig_return;
 val_t trans_return;
-orig_return = string_NativeString_NativeString_file_exists_0( UNBOX_NativeString(recv) );
+trans_recv = UNBOX_NativeString(recv);
+orig_return = string_NativeString_NativeString_file_exists_0( trans_recv );
 trans_return = TAG_Bool(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -42,9 +44,11 @@ return trans_return;
 /* out/indirect function for file::NativeString::file_stat */
 val_t NativeString_file_stat___out( val_t recv )
 {
+char * trans_recv;
 void* orig_return;
 val_t trans_return;
-orig_return = string_NativeString_NativeString_file_stat_0( UNBOX_NativeString(recv) );
+trans_recv = UNBOX_NativeString(recv);
+orig_return = string_NativeString_NativeString_file_stat_0( trans_recv );
 trans_return = BOX_FileStat(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -52,9 +56,11 @@ return trans_return;
 /* out/indirect function for file::NativeString::file_mkdir */
 val_t NativeString_file_mkdir___out( val_t recv )
 {
+char * trans_recv;
 int orig_return;
 val_t trans_return;
-orig_return = string_NativeString_NativeString_file_mkdir_0( UNBOX_NativeString(recv) );
+trans_recv = UNBOX_NativeString(recv);
+orig_return = string_NativeString_NativeString_file_mkdir_0( trans_recv );
 trans_return = TAG_Bool(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -62,9 +68,11 @@ return trans_return;
 /* out/indirect function for file::NativeString::file_delete */
 val_t NativeString_file_delete___out( val_t recv )
 {
+char * trans_recv;
 int orig_return;
 val_t trans_return;
-orig_return = string_NativeString_NativeString_file_delete_0( UNBOX_NativeString(recv) );
+trans_recv = UNBOX_NativeString(recv);
+orig_return = string_NativeString_NativeString_file_delete_0( trans_recv );
 trans_return = TAG_Bool(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -72,9 +80,11 @@ return trans_return;
 /* out/indirect function for file::FileStat::mode */
 val_t FileStat_mode___out( val_t recv )
 {
+void* trans_recv;
 bigint orig_return;
 val_t trans_return;
-orig_return = file_FileStat_FileStat_mode_0( UNBOX_FileStat(recv) );
+trans_recv = UNBOX_FileStat(recv);
+orig_return = file_FileStat_FileStat_mode_0( trans_recv );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -82,9 +92,11 @@ return trans_return;
 /* out/indirect function for file::FileStat::atime */
 val_t FileStat_atime___out( val_t recv )
 {
+void* trans_recv;
 bigint orig_return;
 val_t trans_return;
-orig_return = file_FileStat_FileStat_atime_0( UNBOX_FileStat(recv) );
+trans_recv = UNBOX_FileStat(recv);
+orig_return = file_FileStat_FileStat_atime_0( trans_recv );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -92,9 +104,11 @@ return trans_return;
 /* out/indirect function for file::FileStat::ctime */
 val_t FileStat_ctime___out( val_t recv )
 {
+void* trans_recv;
 bigint orig_return;
 val_t trans_return;
-orig_return = file_FileStat_FileStat_ctime_0( UNBOX_FileStat(recv) );
+trans_recv = UNBOX_FileStat(recv);
+orig_return = file_FileStat_FileStat_ctime_0( trans_recv );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -102,9 +116,11 @@ return trans_return;
 /* out/indirect function for file::FileStat::mtime */
 val_t FileStat_mtime___out( val_t recv )
 {
+void* trans_recv;
 bigint orig_return;
 val_t trans_return;
-orig_return = file_FileStat_FileStat_mtime_0( UNBOX_FileStat(recv) );
+trans_recv = UNBOX_FileStat(recv);
+orig_return = file_FileStat_FileStat_mtime_0( trans_recv );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -112,9 +128,11 @@ return trans_return;
 /* out/indirect function for file::FileStat::size */
 val_t FileStat_size___out( val_t recv )
 {
+void* trans_recv;
 bigint orig_return;
 val_t trans_return;
-orig_return = file_FileStat_FileStat_size_0( UNBOX_FileStat(recv) );
+trans_recv = UNBOX_FileStat(recv);
+orig_return = file_FileStat_FileStat_size_0( trans_recv );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -122,11 +140,13 @@ return trans_return;
 /* out/indirect function for file::NativeFile::io_read */
 val_t NativeFile_io_read___out( val_t recv, val_t buf, val_t len )
 {
-bigint trans___len;
+void* trans_recv;
+char * trans___buf;
 bigint orig_return;
 val_t trans_return;
-trans___len = UNTAG_Int(len);
-orig_return = file_NativeFile_NativeFile_io_read_2( UNBOX_NativeFile(recv), UNBOX_NativeString(buf), trans___len );
+trans_recv = UNBOX_NativeFile(recv);
+trans___buf = UNBOX_NativeString(buf);
+orig_return = file_NativeFile_NativeFile_io_read_2( trans_recv, trans___buf, UNTAG_Int(len) );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -134,11 +154,13 @@ return trans_return;
 /* out/indirect function for file::NativeFile::io_write */
 val_t NativeFile_io_write___out( val_t recv, val_t buf, val_t len )
 {
-bigint trans___len;
+void* trans_recv;
+char * trans___buf;
 bigint orig_return;
 val_t trans_return;
-trans___len = UNTAG_Int(len);
-orig_return = file_NativeFile_NativeFile_io_write_2( UNBOX_NativeFile(recv), UNBOX_NativeString(buf), trans___len );
+trans_recv = UNBOX_NativeFile(recv);
+trans___buf = UNBOX_NativeString(buf);
+orig_return = file_NativeFile_NativeFile_io_write_2( trans_recv, trans___buf, UNTAG_Int(len) );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -146,9 +168,11 @@ return trans_return;
 /* out/indirect function for file::NativeFile::io_close */
 val_t NativeFile_io_close___out( val_t recv )
 {
+void* trans_recv;
 bigint orig_return;
 val_t trans_return;
-orig_return = file_NativeFile_NativeFile_io_close_0( UNBOX_NativeFile(recv) );
+trans_recv = UNBOX_NativeFile(recv);
+orig_return = file_NativeFile_NativeFile_io_close_0( trans_recv );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -156,9 +180,11 @@ return trans_return;
 /* out/indirect function for file::NativeFile::file_stat */
 val_t NativeFile_file_stat___out( val_t recv )
 {
+void* trans_recv;
 void* orig_return;
 val_t trans_return;
-orig_return = file_NativeFile_NativeFile_file_stat_0( UNBOX_NativeFile(recv) );
+trans_recv = UNBOX_NativeFile(recv);
+orig_return = file_NativeFile_NativeFile_file_stat_0( trans_recv );
 trans_return = BOX_FileStat(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -166,9 +192,11 @@ return trans_return;
 /* out/indirect function for file::NativeFile::io_open_read */
 val_t NEW_NativeFile_standard___file___NativeFile___io_open_read( val_t path )
 {
+char * trans___path;
 void* orig_return;
 val_t trans_return;
-orig_return = file_NativeFileCapable_NativeFileCapable_io_open_read_1( UNBOX_NativeString(path) );
+trans___path = UNBOX_NativeString(path);
+orig_return = file_NativeFileCapable_NativeFileCapable_io_open_read_1( trans___path );
 trans_return = BOX_NativeFile(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -176,9 +204,11 @@ return trans_return;
 /* out/indirect function for file::NativeFile::io_open_write */
 val_t NEW_NativeFile_standard___file___NativeFile___io_open_write( val_t path )
 {
+char * trans___path;
 void* orig_return;
 val_t trans_return;
-orig_return = file_NativeFileCapable_NativeFileCapable_io_open_write_1( UNBOX_NativeString(path) );
+trans___path = UNBOX_NativeString(path);
+orig_return = file_NativeFileCapable_NativeFileCapable_io_open_write_1( trans___path );
 trans_return = BOX_NativeFile(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -238,13 +268,15 @@ CALL_standard___collection___abstract_collection___SimpleCollection___add( trans
 /* friendly for string::String::from_cstring */
 String file_new_String_from_cstring( char * str )
 {
+val_t trans___str;
 val_t orig_return;
 String trans_return;
+trans___str = BOX_NativeString(str);
 trans_return = malloc( sizeof( struct s_String ) );
 trans_return->ref.val = NIT_NULL;
 trans_return->ref.count = 0;
 nitni_local_ref_add( (struct nitni_ref *)trans_return );
-orig_return = NEW_String_standard___string___String___from_cstring( BOX_NativeString(str) );
+orig_return = NEW_String_standard___string___String___from_cstring( trans___str );
 trans_return->ref.val = orig_return;
 return trans_return;
 }
@@ -263,7 +295,7 @@ int file_HashSet_is_a_Set( HashSet value )
 {
 val_t temp;
 temp = value->ref.val;
-if ( ! ( ISOBJ( temp ) ? OBJISA( temp, standard___collection___abstract_collection___Set ): VALISA( temp, standard___collection___abstract_collection___Set ) ) ) return 0;
+if ( ! ( ISOBJ( temp ) ? ISNULL( temp ) || OBJISA( temp, standard___collection___abstract_collection___Set ): VALISA( temp, standard___collection___abstract_collection___Set ) ) ) return 0;
 return 1;
 }
 Set file_HashSet_as_Set( HashSet value )
@@ -277,7 +309,7 @@ nitni_local_ref_add( (struct nitni_ref *)out );
 temp = value->ref.val;
 if ( ISNULL(temp) ){   fprintf( stderr, "Casting from HashSet[String] to Set[String] failed because value is null." );
        abort();
-}if ( ! ( ISOBJ( temp ) ? OBJISA( temp, standard___collection___abstract_collection___Set ): VALISA( temp, standard___collection___abstract_collection___Set ) ) ){
+}if ( ! ( ISOBJ( temp ) ? ISNULL( temp ) || OBJISA( temp, standard___collection___abstract_collection___Set ): VALISA( temp, standard___collection___abstract_collection___Set ) ) ){
        fprintf( stderr, "Casting to Set[String] failed because value is not a Set[String]." );
        abort();
 }
@@ -288,7 +320,7 @@ int file_String_is_a_Object( String value )
 {
 val_t temp;
 temp = value->ref.val;
-if ( ! ( ISOBJ( temp ) ? OBJISA( temp, standard___kernel___Object ): VALISA( temp, standard___kernel___Object ) ) ) return 0;
+if ( ! ( ISOBJ( temp ) ? ISNULL( temp ) || OBJISA( temp, standard___kernel___Object ): VALISA( temp, standard___kernel___Object ) ) ) return 0;
 return 1;
 }
 Object file_String_as_Object( String value )
@@ -302,7 +334,7 @@ nitni_local_ref_add( (struct nitni_ref *)out );
 temp = value->ref.val;
 if ( ISNULL(temp) ){   fprintf( stderr, "Casting from String to Object failed because value is null." );
        abort();
-}if ( ! ( ISOBJ( temp ) ? OBJISA( temp, standard___kernel___Object ): VALISA( temp, standard___kernel___Object ) ) ){
+}if ( ! ( ISOBJ( temp ) ? ISNULL( temp ) || OBJISA( temp, standard___kernel___Object ): VALISA( temp, standard___kernel___Object ) ) ){
        fprintf( stderr, "Casting to Object failed because value is not a Object." );
        abort();
 }
index b993a6a..8c4bb57 100644 (file)
@@ -820,7 +820,7 @@ void global___rta_analysis___RtaBuilder___force_some_type_analysis(val_t p0){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* global/rta_analysis.nit:133 */
       fra.me.REG[4] = CALL_global___rta_analysis___RtaBuilder___program(fra.me.REG[0])(fra.me.REG[0]);
@@ -1139,7 +1139,7 @@ void global___rta_analysis___RtaBuilder___work(val_t p0){
         if (UNTAG_Bool(REGB1)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
         /* global/rta_analysis.nit:177 */
         fra.me.REG[5] = CALL_global___rta_analysis___RtaBuilder___program(fra.me.REG[1])(fra.me.REG[1]);
index f01256c..2210409 100644 (file)
@@ -546,7 +546,7 @@ val_t icode___icode_builder___ICodeBuilder___add_call(val_t p0, val_t p1, val_t
     if (UNTAG_Bool(REGB1)) {
       nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
     }
-    /* ../lib/standard/collection/array.nit:718 */
+    /* ../lib/standard/collection/array.nit:724 */
     fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
     /* ../lib/standard/collection/array.nit:281 */
     goto label6;
@@ -594,7 +594,7 @@ val_t icode___icode_builder___ICodeBuilder___add_call(val_t p0, val_t p1, val_t
     if (UNTAG_Bool(REGB1)) {
       nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
     }
-    /* ../lib/standard/collection/array.nit:718 */
+    /* ../lib/standard/collection/array.nit:724 */
     fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB0)];
     /* ../lib/standard/collection/array.nit:281 */
     goto label7;
@@ -661,7 +661,7 @@ val_t icode___icode_builder___ICodeBuilder___add_call(val_t p0, val_t p1, val_t
     if (UNTAG_Bool(REGB1)) {
       nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
     }
-    /* ../lib/standard/collection/array.nit:718 */
+    /* ../lib/standard/collection/array.nit:724 */
     fra.me.REG[9] = ((Nit_NativeArray)fra.me.REG[9])->val[UNTAG_Int(REGB0)];
     /* ../lib/standard/collection/array.nit:281 */
     goto label8;
@@ -719,7 +719,7 @@ val_t icode___icode_builder___ICodeBuilder___add_call(val_t p0, val_t p1, val_t
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[10] = ((Nit_NativeArray)fra.me.REG[10])->val[UNTAG_Int(REGB0)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label9;
@@ -1258,7 +1258,7 @@ val_t icode___icode_builder___MMSignature___generate_empty_iroutine(val_t p0){
         if (UNTAG_Bool(REGB1)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB0)];
         /* icode/icode_builder.nit:243 */
         fra.me.REG[6] = NEW_IClosureDecl_icode___icode_base___IClosureDecl___init(fra.me.REG[6]);
@@ -1352,7 +1352,7 @@ val_t icode___icode_builder___MMSignature___generate_empty_iroutine(val_t p0){
         if (UNTAG_Bool(REGB2)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB3)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label3;
@@ -1504,7 +1504,7 @@ val_t icode___icode_builder___MMSignature___generate_empty_iclosuredef(val_t p0,
         if (UNTAG_Bool(REGB1)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
         /* icode/icode_builder.nit:275 */
         fra.me.REG[1] = NEW_IClosureDecl_icode___icode_base___IClosureDecl___init(fra.me.REG[1]);
index 41939a0..be2524c 100644 (file)
@@ -123,6 +123,40 @@ void location___SourceFile___init(val_t p0, val_t p1, val_t p2, int* init_table)
   init_table[itpos0] = 1;
   return;
 }
+static const char LOCATE_location___SourceFile___from_string[] = "location::SourceFile::from_string";
+void location___SourceFile___from_string(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos1 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_location___SourceFile].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos1]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_location;
+  fra.me.line = 36;
+  fra.me.meth = LOCATE_location___SourceFile___from_string;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* location.nit:39 */
+  CALL_location___SourceFile___filename__eq(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
+  /* location.nit:40 */
+  CALL_location___SourceFile___string__eq(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[2]);
+  /* location.nit:41 */
+  fra.me.REG[0] = CALL_location___SourceFile___line_starts(fra.me.REG[0])(fra.me.REG[0]);
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Int(0);
+  CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[0])(fra.me.REG[0], REGB0, REGB1);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos1] = 1;
+  return;
+}
 static const char LOCATE_location___SourceFile___line_starts[] = "location::SourceFile::line_starts";
 val_t location___SourceFile___line_starts(val_t p0){
   struct {struct stack_frame_t me;} fra;
@@ -130,18 +164,18 @@ val_t location___SourceFile___line_starts(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 36;
+  fra.me.line = 44;
   fra.me.meth = LOCATE_location___SourceFile___line_starts;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* location.nit:36 */
+  /* location.nit:44 */
   REGB0 = TAG_Bool(ATTR_location___SourceFile_____atline_starts(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "@line_starts", LOCATE_location, 36);
+    nit_abort("Uninitialized attribute %s", "@line_starts", LOCATE_location, 44);
   }
   fra.me.REG[0] = ATTR_location___SourceFile_____atline_starts(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -153,7 +187,7 @@ void location___SourceFile___line_starts__eq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 36;
+  fra.me.line = 44;
   fra.me.meth = LOCATE_location___SourceFile___line_starts__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -162,7 +196,7 @@ void location___SourceFile___line_starts__eq(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* location.nit:36 */
+  /* location.nit:44 */
   ATTR_location___SourceFile_____atline_starts(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -173,14 +207,14 @@ val_t location___Location___file(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 45;
+  fra.me.line = 53;
   fra.me.meth = LOCATE_location___Location___file;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* location.nit:45 */
+  /* location.nit:53 */
   fra.me.REG[0] = ATTR_location___Location____file(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -192,18 +226,18 @@ val_t location___Location___line_start(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 46;
+  fra.me.line = 54;
   fra.me.meth = LOCATE_location___Location___line_start;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* location.nit:46 */
+  /* location.nit:54 */
   REGB0 = TAG_Bool(ATTR_location___Location____line_start(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_line_start", LOCATE_location, 46);
+    nit_abort("Uninitialized attribute %s", "_line_start", LOCATE_location, 54);
   }
   REGB0 = ATTR_location___Location____line_start(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -216,18 +250,18 @@ val_t location___Location___line_end(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 47;
+  fra.me.line = 55;
   fra.me.meth = LOCATE_location___Location___line_end;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* location.nit:47 */
+  /* location.nit:55 */
   REGB0 = TAG_Bool(ATTR_location___Location____line_end(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_line_end", LOCATE_location, 47);
+    nit_abort("Uninitialized attribute %s", "_line_end", LOCATE_location, 55);
   }
   REGB0 = ATTR_location___Location____line_end(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -240,18 +274,18 @@ val_t location___Location___column_start(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 48;
+  fra.me.line = 56;
   fra.me.meth = LOCATE_location___Location___column_start;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* location.nit:48 */
+  /* location.nit:56 */
   REGB0 = TAG_Bool(ATTR_location___Location____column_start(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_column_start", LOCATE_location, 48);
+    nit_abort("Uninitialized attribute %s", "_column_start", LOCATE_location, 56);
   }
   REGB0 = ATTR_location___Location____column_start(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -264,18 +298,18 @@ val_t location___Location___column_end(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 49;
+  fra.me.line = 57;
   fra.me.meth = LOCATE_location___Location___column_end;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* location.nit:49 */
+  /* location.nit:57 */
   REGB0 = TAG_Bool(ATTR_location___Location____column_end(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_column_end", LOCATE_location, 49);
+    nit_abort("Uninitialized attribute %s", "_column_end", LOCATE_location, 57);
   }
   REGB0 = ATTR_location___Location____column_end(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -283,17 +317,17 @@ val_t location___Location___column_end(val_t p0){
 }
 static const char LOCATE_location___Location___init[] = "location::Location::init";
 void location___Location___init(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
-  int itpos1 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_location___Location].i;
+  int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_location___Location].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
   val_t REGB3;
   val_t tmp;
-  if (init_table[itpos1]) return;
+  if (init_table[itpos2]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 51;
+  fra.me.line = 59;
   fra.me.meth = LOCATE_location___Location___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -306,18 +340,18 @@ void location___Location___init(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4
   REGB1 = p3;
   REGB2 = p4;
   REGB3 = p5;
-  /* location.nit:52 */
+  /* location.nit:60 */
   ATTR_location___Location____file(fra.me.REG[0]) = fra.me.REG[1];
-  /* location.nit:53 */
+  /* location.nit:61 */
   ATTR_location___Location____line_start(fra.me.REG[0]) = REGB0;
-  /* location.nit:54 */
+  /* location.nit:62 */
   ATTR_location___Location____line_end(fra.me.REG[0]) = REGB1;
-  /* location.nit:55 */
+  /* location.nit:63 */
   ATTR_location___Location____column_start(fra.me.REG[0]) = REGB2;
-  /* location.nit:56 */
+  /* location.nit:64 */
   ATTR_location___Location____column_end(fra.me.REG[0]) = REGB3;
   stack_frame_head = fra.me.prev;
-  init_table[itpos1] = 1;
+  init_table[itpos2] = 1;
   return;
 }
 static const char LOCATE_location___Location___text[] = "location::Location::text";
@@ -330,7 +364,7 @@ val_t location___Location___text(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 59;
+  fra.me.line = 67;
   fra.me.meth = LOCATE_location___Location___text;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -341,9 +375,9 @@ val_t location___Location___text(val_t p0){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* location.nit:62 */
+  /* location.nit:70 */
   fra.me.REG[1] = CALL_location___Location___text_cache(fra.me.REG[0])(fra.me.REG[0]);
-  /* location.nit:63 */
+  /* location.nit:71 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -361,13 +395,13 @@ val_t location___Location___text(val_t p0){
     fra.me.REG[2] = fra.me.REG[1];
     goto label1;
   }
-  /* location.nit:64 */
+  /* location.nit:72 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* location.nit:65 */
+  /* location.nit:73 */
   fra.me.REG[4] = CALL_location___Location___file(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 65);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 73);
   }
   fra.me.REG[4] = CALL_location___SourceFile___line_starts(fra.me.REG[4])(fra.me.REG[4]);
   REGB0 = CALL_location___Location___line_start(fra.me.REG[3])(fra.me.REG[3]);
@@ -413,28 +447,28 @@ val_t location___Location___text(val_t p0){
   if (UNTAG_Bool(REGB0)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB1)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label2;
   label2: while(0);
-  /* location.nit:65 */
+  /* location.nit:73 */
   REGB1 = CALL_location___Location___column_start(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 65);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 73);
   }
   /* ../lib/standard/kernel.nit:238 */
   REGB1 = TAG_Int(UNTAG_Int(fra.me.REG[4])+UNTAG_Int(REGB1));
-  /* location.nit:65 */
+  /* location.nit:73 */
   REGB0 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:240 */
   REGB0 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB0));
-  /* location.nit:66 */
+  /* location.nit:74 */
   fra.me.REG[4] = CALL_location___Location___file(fra.me.REG[3])(fra.me.REG[3]);
   REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 66);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 74);
   }
   fra.me.REG[4] = CALL_location___SourceFile___line_starts(fra.me.REG[4])(fra.me.REG[4]);
   REGB1 = CALL_location___Location___line_end(fra.me.REG[3])(fra.me.REG[3]);
@@ -480,42 +514,42 @@ val_t location___Location___text(val_t p0){
   if (UNTAG_Bool(REGB1)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB2)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label3;
   label3: while(0);
-  /* location.nit:66 */
+  /* location.nit:74 */
   REGB2 = CALL_location___Location___column_end(fra.me.REG[3])(fra.me.REG[3]);
   REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 66);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 74);
   }
   /* ../lib/standard/kernel.nit:238 */
   REGB2 = TAG_Int(UNTAG_Int(fra.me.REG[4])+UNTAG_Int(REGB2));
-  /* location.nit:66 */
+  /* location.nit:74 */
   REGB1 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:240 */
   REGB1 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB1));
-  /* location.nit:67 */
+  /* location.nit:75 */
   fra.me.REG[3] = CALL_location___Location___file(fra.me.REG[3])(fra.me.REG[3]);
   REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 67);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 75);
   }
   fra.me.REG[3] = CALL_location___SourceFile___string(fra.me.REG[3])(fra.me.REG[3]);
   /* ../lib/standard/kernel.nit:240 */
   REGB1 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB0));
-  /* location.nit:67 */
+  /* location.nit:75 */
   REGB2 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:238 */
   REGB2 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB2));
-  /* location.nit:67 */
+  /* location.nit:75 */
   fra.me.REG[3] = CALL_standard___string___AbstractString___substring(fra.me.REG[3])(fra.me.REG[3], REGB0, REGB2);
   fra.me.REG[1] = fra.me.REG[3];
-  /* location.nit:68 */
+  /* location.nit:76 */
   CALL_location___Location___text_cache__eq(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* location.nit:69 */
+  /* location.nit:77 */
   fra.me.REG[2] = fra.me.REG[1];
   goto label1;
   label1: while(0);
@@ -528,14 +562,14 @@ val_t location___Location___text_cache(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 72;
+  fra.me.line = 80;
   fra.me.meth = LOCATE_location___Location___text_cache;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* location.nit:72 */
+  /* location.nit:80 */
   fra.me.REG[0] = ATTR_location___Location_____attext_cache(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -546,7 +580,7 @@ void location___Location___text_cache__eq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 72;
+  fra.me.line = 80;
   fra.me.meth = LOCATE_location___Location___text_cache__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -555,24 +589,24 @@ void location___Location___text_cache__eq(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* location.nit:72 */
+  /* location.nit:80 */
   ATTR_location___Location_____attext_cache(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
 }
 static const char LOCATE_location___Location___with_file[] = "location::Location::with_file";
 void location___Location___with_file(val_t p0, val_t p1, int* init_table){
-  int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_location___Location].i;
+  int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_location___Location].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
   val_t REGB3;
   val_t tmp;
-  if (init_table[itpos2]) return;
+  if (init_table[itpos3]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 74;
+  fra.me.line = 82;
   fra.me.meth = LOCATE_location___Location___with_file;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -581,14 +615,14 @@ void location___Location___with_file(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* location.nit:74 */
+  /* location.nit:82 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Int(0);
   REGB3 = TAG_Int(0);
   CALL_location___Location___init(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], REGB0, REGB1, REGB2, REGB3, init_table);
   stack_frame_head = fra.me.prev;
-  init_table[itpos2] = 1;
+  init_table[itpos3] = 1;
   return;
 }
 static const char LOCATE_location___Location_____eqeq[] = "location::Location::(kernel::Object::==)";
@@ -601,7 +635,7 @@ val_t location___Location_____eqeq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 76;
+  fra.me.line = 84;
   fra.me.meth = LOCATE_location___Location_____eqeq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -612,7 +646,7 @@ val_t location___Location_____eqeq(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* location.nit:77 */
+  /* location.nit:85 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -629,7 +663,7 @@ val_t location___Location_____eqeq(val_t p0, val_t p1){
     REGB0 = TAG_Bool(0);
     goto label1;
   }
-  /* location.nit:78 */
+  /* location.nit:86 */
   REGB1 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_location___Location, ID_location___Location)) /*cast Location*/;
   REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
   if (UNTAG_Bool(REGB1)) {
@@ -637,10 +671,10 @@ val_t location___Location_____eqeq(val_t p0, val_t p1){
     REGB0 = REGB1;
     goto label1;
   }
-  /* location.nit:80 */
+  /* location.nit:88 */
   REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 80);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 88);
   }
   fra.me.REG[2] = CALL_location___Location___file(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[3] = CALL_location___Location___file(fra.me.REG[0])(fra.me.REG[0]);
@@ -662,10 +696,10 @@ val_t location___Location_____eqeq(val_t p0, val_t p1){
     REGB0 = REGB1;
     goto label1;
   }
-  /* location.nit:81 */
+  /* location.nit:89 */
   REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 81);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 89);
   }
   REGB1 = CALL_location___Location___line_start(fra.me.REG[1])(fra.me.REG[1]);
   REGB2 = CALL_location___Location___line_start(fra.me.REG[0])(fra.me.REG[0]);
@@ -674,7 +708,7 @@ val_t location___Location_____eqeq(val_t p0, val_t p1){
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB2 = TAG_Bool((REGB1)==(REGB2));
-    /* location.nit:81 */
+    /* location.nit:89 */
     REGB3 = REGB2;
   }
   REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
@@ -683,10 +717,10 @@ val_t location___Location_____eqeq(val_t p0, val_t p1){
     REGB0 = REGB3;
     goto label1;
   }
-  /* location.nit:82 */
+  /* location.nit:90 */
   REGB3 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB3)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 82);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 90);
   }
   REGB3 = CALL_location___Location___line_end(fra.me.REG[1])(fra.me.REG[1]);
   REGB2 = CALL_location___Location___line_end(fra.me.REG[0])(fra.me.REG[0]);
@@ -695,7 +729,7 @@ val_t location___Location_____eqeq(val_t p0, val_t p1){
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB2 = TAG_Bool((REGB3)==(REGB2));
-    /* location.nit:82 */
+    /* location.nit:90 */
     REGB1 = REGB2;
   }
   REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
@@ -704,10 +738,10 @@ val_t location___Location_____eqeq(val_t p0, val_t p1){
     REGB0 = REGB1;
     goto label1;
   }
-  /* location.nit:83 */
+  /* location.nit:91 */
   REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 83);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 91);
   }
   REGB1 = CALL_location___Location___column_start(fra.me.REG[1])(fra.me.REG[1]);
   REGB2 = CALL_location___Location___column_start(fra.me.REG[0])(fra.me.REG[0]);
@@ -716,7 +750,7 @@ val_t location___Location_____eqeq(val_t p0, val_t p1){
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB2 = TAG_Bool((REGB1)==(REGB2));
-    /* location.nit:83 */
+    /* location.nit:91 */
     REGB3 = REGB2;
   }
   REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
@@ -725,10 +759,10 @@ val_t location___Location_____eqeq(val_t p0, val_t p1){
     REGB0 = REGB3;
     goto label1;
   }
-  /* location.nit:84 */
+  /* location.nit:92 */
   REGB3 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB3)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 84);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 92);
   }
   REGB3 = CALL_location___Location___column_end(fra.me.REG[1])(fra.me.REG[1]);
   REGB2 = CALL_location___Location___column_end(fra.me.REG[0])(fra.me.REG[0]);
@@ -737,7 +771,7 @@ val_t location___Location_____eqeq(val_t p0, val_t p1){
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB2 = TAG_Bool((REGB3)==(REGB2));
-    /* location.nit:84 */
+    /* location.nit:92 */
     REGB1 = REGB2;
   }
   REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
@@ -746,7 +780,7 @@ val_t location___Location_____eqeq(val_t p0, val_t p1){
     REGB0 = REGB1;
     goto label1;
   }
-  /* location.nit:86 */
+  /* location.nit:94 */
   REGB1 = TAG_Bool(1);
   REGB0 = REGB1;
   goto label1;
@@ -764,7 +798,7 @@ val_t location___Location___located_in(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 89;
+  fra.me.line = 97;
   fra.me.meth = LOCATE_location___Location___located_in;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -773,7 +807,7 @@ val_t location___Location___located_in(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* location.nit:90 */
+  /* location.nit:98 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -790,11 +824,11 @@ val_t location___Location___located_in(val_t p0, val_t p1){
     REGB0 = TAG_Bool(0);
     goto label1;
   }
-  /* location.nit:92 */
+  /* location.nit:100 */
   REGB1 = CALL_location___Location___line_start(fra.me.REG[0])(fra.me.REG[0]);
   REGB2 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 92);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 100);
   }
   REGB2 = CALL_location___Location___line_start(fra.me.REG[1])(fra.me.REG[1]);
   REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
@@ -804,17 +838,17 @@ val_t location___Location___located_in(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:235 */
   REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
-  /* location.nit:92 */
+  /* location.nit:100 */
   if (UNTAG_Bool(REGB2)) {
     REGB2 = TAG_Bool(0);
     REGB0 = REGB2;
     goto label1;
   }
-  /* location.nit:93 */
+  /* location.nit:101 */
   REGB2 = CALL_location___Location___line_start(fra.me.REG[0])(fra.me.REG[0]);
   REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 93);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 101);
   }
   REGB1 = CALL_location___Location___line_end(fra.me.REG[1])(fra.me.REG[1]);
   REGB3 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
@@ -824,17 +858,17 @@ val_t location___Location___located_in(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:237 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB2)>UNTAG_Int(REGB1));
-  /* location.nit:93 */
+  /* location.nit:101 */
   if (UNTAG_Bool(REGB1)) {
     REGB1 = TAG_Bool(0);
     REGB0 = REGB1;
     goto label1;
   }
-  /* location.nit:95 */
+  /* location.nit:103 */
   REGB1 = CALL_location___Location___line_end(fra.me.REG[0])(fra.me.REG[0]);
   REGB2 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 95);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 103);
   }
   REGB2 = CALL_location___Location___line_end(fra.me.REG[1])(fra.me.REG[1]);
   REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
@@ -844,17 +878,17 @@ val_t location___Location___located_in(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:237 */
   REGB2 = TAG_Bool(UNTAG_Int(REGB1)>UNTAG_Int(REGB2));
-  /* location.nit:95 */
+  /* location.nit:103 */
   if (UNTAG_Bool(REGB2)) {
     REGB2 = TAG_Bool(0);
     REGB0 = REGB2;
     goto label1;
   }
-  /* location.nit:97 */
+  /* location.nit:105 */
   REGB2 = CALL_location___Location___line_start(fra.me.REG[0])(fra.me.REG[0]);
   REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 97);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 105);
   }
   REGB1 = CALL_location___Location___line_start(fra.me.REG[1])(fra.me.REG[1]);
   REGB3 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB1));
@@ -862,15 +896,15 @@ val_t location___Location___located_in(val_t p0, val_t p1){
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB1 = TAG_Bool((REGB2)==(REGB1));
-    /* location.nit:97 */
+    /* location.nit:105 */
     REGB3 = REGB1;
   }
   if (UNTAG_Bool(REGB3)) {
-    /* location.nit:98 */
+    /* location.nit:106 */
     REGB3 = CALL_location___Location___column_start(fra.me.REG[0])(fra.me.REG[0]);
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      nit_abort("Reciever is null", NULL, LOCATE_location, 98);
+      nit_abort("Reciever is null", NULL, LOCATE_location, 106);
     }
     REGB1 = CALL_location___Location___column_start(fra.me.REG[1])(fra.me.REG[1]);
     REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB3), VTID_standard___kernel___Comparable___OTHER(REGB3))) /*cast OTHER*/;
@@ -880,17 +914,17 @@ val_t location___Location___located_in(val_t p0, val_t p1){
     }
     /* ../lib/standard/kernel.nit:235 */
     REGB1 = TAG_Bool(UNTAG_Int(REGB3)<UNTAG_Int(REGB1));
-    /* location.nit:98 */
+    /* location.nit:106 */
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
       goto label1;
     }
-    /* location.nit:99 */
+    /* location.nit:107 */
     REGB1 = CALL_location___Location___column_start(fra.me.REG[0])(fra.me.REG[0]);
     REGB3 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB3)) {
-      nit_abort("Reciever is null", NULL, LOCATE_location, 99);
+      nit_abort("Reciever is null", NULL, LOCATE_location, 107);
     }
     REGB3 = CALL_location___Location___column_end(fra.me.REG[1])(fra.me.REG[1]);
     REGB2 = TAG_Bool(VAL_ISA(REGB3, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
@@ -900,18 +934,18 @@ val_t location___Location___located_in(val_t p0, val_t p1){
     }
     /* ../lib/standard/kernel.nit:237 */
     REGB3 = TAG_Bool(UNTAG_Int(REGB1)>UNTAG_Int(REGB3));
-    /* location.nit:99 */
+    /* location.nit:107 */
     if (UNTAG_Bool(REGB3)) {
       REGB3 = TAG_Bool(0);
       REGB0 = REGB3;
       goto label1;
     }
   }
-  /* location.nit:102 */
+  /* location.nit:110 */
   REGB3 = CALL_location___Location___line_end(fra.me.REG[0])(fra.me.REG[0]);
   REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 102);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 110);
   }
   REGB1 = CALL_location___Location___line_end(fra.me.REG[1])(fra.me.REG[1]);
   REGB2 = TAG_Bool(IS_EQUAL_OO(REGB3,REGB1));
@@ -919,14 +953,14 @@ val_t location___Location___located_in(val_t p0, val_t p1){
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB1 = TAG_Bool((REGB3)==(REGB1));
-    /* location.nit:102 */
+    /* location.nit:110 */
     REGB2 = REGB1;
   }
   if (UNTAG_Bool(REGB2)) {
     REGB2 = CALL_location___Location___column_end(fra.me.REG[0])(fra.me.REG[0]);
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      nit_abort("Reciever is null", NULL, LOCATE_location, 102);
+      nit_abort("Reciever is null", NULL, LOCATE_location, 110);
     }
     REGB1 = CALL_location___Location___column_end(fra.me.REG[1])(fra.me.REG[1]);
     REGB3 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
@@ -937,7 +971,7 @@ val_t location___Location___located_in(val_t p0, val_t p1){
     /* ../lib/standard/kernel.nit:237 */
     REGB1 = TAG_Bool(UNTAG_Int(REGB2)>UNTAG_Int(REGB1));
   } else {
-    /* location.nit:102 */
+    /* location.nit:110 */
     REGB2 = TAG_Bool(0);
     REGB1 = REGB2;
   }
@@ -946,7 +980,7 @@ val_t location___Location___located_in(val_t p0, val_t p1){
     REGB0 = REGB1;
     goto label1;
   }
-  /* location.nit:104 */
+  /* location.nit:112 */
   REGB1 = TAG_Bool(1);
   REGB0 = REGB1;
   goto label1;
@@ -980,7 +1014,7 @@ val_t location___Location___to_s(val_t p0){
     static val_t once_value_18; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 107;
+  fra.me.line = 115;
   fra.me.meth = LOCATE_location___Location___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -991,7 +1025,7 @@ val_t location___Location___to_s(val_t p0){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* location.nit:108 */
+  /* location.nit:116 */
   if (!once_value_1) {
     fra.me.REG[1] = BOX_NativeString("");
     REGB0 = TAG_Int(0);
@@ -1000,7 +1034,7 @@ val_t location___Location___to_s(val_t p0){
     register_static_object(&once_value_1);
   } else fra.me.REG[1] = once_value_1;
   fra.me.REG[1] = fra.me.REG[1];
-  /* location.nit:109 */
+  /* location.nit:117 */
   fra.me.REG[2] = CALL_location___Location___file(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -1016,19 +1050,19 @@ val_t location___Location___to_s(val_t p0){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* location.nit:110 */
+    /* location.nit:118 */
     fra.me.REG[2] = CALL_location___Location___file(fra.me.REG[0])(fra.me.REG[0]);
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_location, 110);
+      nit_abort("Reciever is null", NULL, LOCATE_location, 118);
     }
     fra.me.REG[2] = CALL_location___SourceFile___filename(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[1] = fra.me.REG[2];
-    /* location.nit:111 */
+    /* location.nit:119 */
     fra.me.REG[2] = CALL_location___Location___file(fra.me.REG[0])(fra.me.REG[0]);
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_location, 111);
+      nit_abort("Reciever is null", NULL, LOCATE_location, 119);
     }
     fra.me.REG[2] = CALL_location___SourceFile___filename(fra.me.REG[2])(fra.me.REG[2]);
     /* ../lib/standard/collection/array.nit:24 */
@@ -1038,7 +1072,7 @@ val_t location___Location___to_s(val_t p0){
       nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
     }
     REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
-    /* location.nit:111 */
+    /* location.nit:119 */
     REGB1 = TAG_Int(0);
     REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
     if (UNTAG_Bool(REGB2)) {
@@ -1047,7 +1081,7 @@ val_t location___Location___to_s(val_t p0){
     }
     /* ../lib/standard/kernel.nit:237 */
     REGB1 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB1));
-    /* location.nit:111 */
+    /* location.nit:119 */
     if (UNTAG_Bool(REGB1)) {
       if (!once_value_2) {
         fra.me.REG[2] = BOX_NativeString(":");
@@ -1061,7 +1095,7 @@ val_t location___Location___to_s(val_t p0){
       fra.me.REG[1] = fra.me.REG[2];
     }
   }
-  /* location.nit:114 */
+  /* location.nit:122 */
   REGB1 = CALL_location___Location___line_start(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_location___Location___line_end(fra.me.REG[0])(fra.me.REG[0]);
   REGB2 = TAG_Bool(IS_EQUAL_OO(REGB1,REGB0));
@@ -1069,11 +1103,11 @@ val_t location___Location___to_s(val_t p0){
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB0 = TAG_Bool((REGB1)==(REGB0));
-    /* location.nit:114 */
+    /* location.nit:122 */
     REGB2 = REGB0;
   }
   if (UNTAG_Bool(REGB2)) {
-    /* location.nit:115 */
+    /* location.nit:123 */
     REGB2 = CALL_location___Location___column_start(fra.me.REG[0])(fra.me.REG[0]);
     REGB0 = CALL_location___Location___column_end(fra.me.REG[0])(fra.me.REG[0]);
     REGB1 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB0));
@@ -1081,11 +1115,11 @@ val_t location___Location___to_s(val_t p0){
     } else {
       /* ../lib/standard/kernel.nit:230 */
       REGB0 = TAG_Bool((REGB2)==(REGB0));
-      /* location.nit:115 */
+      /* location.nit:123 */
       REGB1 = REGB0;
     }
     if (UNTAG_Bool(REGB1)) {
-      /* location.nit:116 */
+      /* location.nit:124 */
       REGB1 = TAG_Int(7);
       fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
       if (!once_value_3) {
@@ -1134,7 +1168,7 @@ val_t location___Location___to_s(val_t p0){
       fra.me.REG[2] = CALL_standard___string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
       goto label7;
     } else {
-      /* location.nit:118 */
+      /* location.nit:126 */
       REGB1 = TAG_Int(9);
       fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
       if (!once_value_8) {
@@ -1197,7 +1231,7 @@ val_t location___Location___to_s(val_t p0){
       goto label7;
     }
   } else {
-    /* location.nit:121 */
+    /* location.nit:129 */
     REGB1 = TAG_Int(11);
     fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
     if (!once_value_13) {
@@ -1285,7 +1319,7 @@ val_t location___Location___relative_to(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 125;
+  fra.me.line = 133;
   fra.me.meth = LOCATE_location___Location___relative_to;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -1295,7 +1329,7 @@ val_t location___Location___relative_to(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* location.nit:127 */
+  /* location.nit:135 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -1312,7 +1346,7 @@ val_t location___Location___relative_to(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_location, 127);
+      nit_abort("Reciever is null", NULL, LOCATE_location, 135);
     }
     fra.me.REG[1] = CALL_location___Location___file(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[2] = CALL_location___Location___file(fra.me.REG[0])(fra.me.REG[0]);
@@ -1333,14 +1367,14 @@ val_t location___Location___relative_to(val_t p0, val_t p1){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* location.nit:128 */
+    /* location.nit:136 */
     REGB0 = CALL_location___Location___line_start(fra.me.REG[0])(fra.me.REG[0]);
     REGB1 = CALL_location___Location___line_end(fra.me.REG[0])(fra.me.REG[0]);
     REGB2 = CALL_location___Location___column_start(fra.me.REG[0])(fra.me.REG[0]);
     REGB3 = CALL_location___Location___column_end(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[2] = NEW_Location_location___Location___init(NIT_NULL, REGB0, REGB1, REGB2, REGB3);
   } else {
-    /* location.nit:130 */
+    /* location.nit:138 */
     fra.me.REG[1] = CALL_location___Location___file(fra.me.REG[0])(fra.me.REG[0]);
     REGB3 = CALL_location___Location___line_start(fra.me.REG[0])(fra.me.REG[0]);
     REGB2 = CALL_location___Location___line_end(fra.me.REG[0])(fra.me.REG[0]);
@@ -1349,7 +1383,7 @@ val_t location___Location___relative_to(val_t p0, val_t p1){
     fra.me.REG[1] = NEW_Location_location___Location___init(fra.me.REG[1], REGB3, REGB2, REGB1, REGB0);
     fra.me.REG[2] = fra.me.REG[1];
   }
-  /* location.nit:132 */
+  /* location.nit:140 */
   fra.me.REG[2] = CALL_standard___string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
   goto label1;
   label1: while(0);
@@ -1366,7 +1400,7 @@ val_t location___Location_____l(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 135;
+  fra.me.line = 143;
   fra.me.meth = LOCATE_location___Location_____l;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1380,7 +1414,7 @@ val_t location___Location_____l(val_t p0, val_t p1){
   } else {
     nit_abort("Cast failed", NULL, LOCATE_location, 0);
   }
-  /* location.nit:136 */
+  /* location.nit:144 */
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[0],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -1391,21 +1425,21 @@ val_t location___Location_____l(val_t p0, val_t p1){
     REGB0 = TAG_Bool(0);
     goto label1;
   }
-  /* location.nit:137 */
+  /* location.nit:145 */
   REGB1 = CALL_location___Location___located_in(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   if (UNTAG_Bool(REGB1)) {
     REGB1 = TAG_Bool(1);
     REGB0 = REGB1;
     goto label1;
   }
-  /* location.nit:138 */
+  /* location.nit:146 */
   REGB1 = CALL_location___Location___located_in(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   if (UNTAG_Bool(REGB1)) {
     REGB1 = TAG_Bool(0);
     REGB0 = REGB1;
     goto label1;
   }
-  /* location.nit:140 */
+  /* location.nit:148 */
   REGB1 = CALL_location___Location___line_start(fra.me.REG[0])(fra.me.REG[0]);
   REGB2 = CALL_location___Location___line_start(fra.me.REG[1])(fra.me.REG[1]);
   REGB3 = TAG_Bool(IS_EQUAL_OO(REGB1,REGB2));
@@ -1413,7 +1447,7 @@ val_t location___Location_____l(val_t p0, val_t p1){
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB2 = TAG_Bool((REGB1)==(REGB2));
-    /* location.nit:140 */
+    /* location.nit:148 */
     REGB3 = REGB2;
   }
   REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
@@ -1427,11 +1461,11 @@ val_t location___Location_____l(val_t p0, val_t p1){
     }
     /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB3)<UNTAG_Int(REGB2));
-    /* location.nit:140 */
+    /* location.nit:148 */
     REGB0 = REGB2;
     goto label1;
   }
-  /* location.nit:141 */
+  /* location.nit:149 */
   REGB2 = CALL_location___Location___column_start(fra.me.REG[0])(fra.me.REG[0]);
   REGB3 = CALL_location___Location___column_start(fra.me.REG[1])(fra.me.REG[1]);
   REGB1 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB3));
@@ -1439,7 +1473,7 @@ val_t location___Location_____l(val_t p0, val_t p1){
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB3 = TAG_Bool((REGB2)==(REGB3));
-    /* location.nit:141 */
+    /* location.nit:149 */
     REGB1 = REGB3;
   }
   REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
@@ -1453,11 +1487,11 @@ val_t location___Location_____l(val_t p0, val_t p1){
     }
     /* ../lib/standard/kernel.nit:235 */
     REGB3 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB3));
-    /* location.nit:141 */
+    /* location.nit:149 */
     REGB0 = REGB3;
     goto label1;
   }
-  /* location.nit:142 */
+  /* location.nit:150 */
   REGB3 = CALL_location___Location___line_end(fra.me.REG[0])(fra.me.REG[0]);
   REGB1 = CALL_location___Location___line_end(fra.me.REG[1])(fra.me.REG[1]);
   REGB2 = TAG_Bool(IS_EQUAL_OO(REGB3,REGB1));
@@ -1465,7 +1499,7 @@ val_t location___Location_____l(val_t p0, val_t p1){
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB1 = TAG_Bool((REGB3)==(REGB1));
-    /* location.nit:142 */
+    /* location.nit:150 */
     REGB2 = REGB1;
   }
   REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
@@ -1479,11 +1513,11 @@ val_t location___Location_____l(val_t p0, val_t p1){
     }
     /* ../lib/standard/kernel.nit:235 */
     REGB1 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB1));
-    /* location.nit:142 */
+    /* location.nit:150 */
     REGB0 = REGB1;
     goto label1;
   }
-  /* location.nit:144 */
+  /* location.nit:152 */
   REGB1 = CALL_location___Location___column_end(fra.me.REG[0])(fra.me.REG[0]);
   REGB2 = CALL_location___Location___column_end(fra.me.REG[1])(fra.me.REG[1]);
   REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
@@ -1493,7 +1527,7 @@ val_t location___Location_____l(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:235 */
   REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
-  /* location.nit:144 */
+  /* location.nit:152 */
   REGB0 = REGB2;
   goto label1;
   label1: while(0);
@@ -1526,7 +1560,7 @@ val_t location___Location___colored_line(val_t p0, val_t p1){
   static val_t once_value_17; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_location;
-  fra.me.line = 147;
+  fra.me.line = 155;
   fra.me.meth = LOCATE_location___Location___colored_line;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -1541,11 +1575,11 @@ val_t location___Location___colored_line(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* location.nit:154 */
+  /* location.nit:162 */
   REGB0 = TAG_Int(27);
   /* ../lib/standard/kernel.nit:300 */
   REGB0 = TAG_Char(UNTAG_Int(REGB0));
-  /* location.nit:155 */
+  /* location.nit:163 */
   REGB1 = TAG_Int(3);
   fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
   if (!once_value_1) {
@@ -1569,7 +1603,7 @@ val_t location___Location___colored_line(val_t p0, val_t p1){
   fra.me.REG[3] = fra.me.REG[3];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   fra.me.REG[2] = CALL_standard___string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
-  /* location.nit:156 */
+  /* location.nit:164 */
   REGB1 = TAG_Int(5);
   fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
   if (!once_value_3) {
@@ -1603,13 +1637,13 @@ val_t location___Location___colored_line(val_t p0, val_t p1){
   fra.me.REG[1] = fra.me.REG[1];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
   fra.me.REG[3] = CALL_standard___string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
-  /* location.nit:159 */
+  /* location.nit:167 */
   REGB0 = CALL_location___Location___line_start(fra.me.REG[0])(fra.me.REG[0]);
-  /* location.nit:160 */
+  /* location.nit:168 */
   fra.me.REG[1] = CALL_location___Location___file(fra.me.REG[0])(fra.me.REG[0]);
   REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 160);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 168);
   }
   fra.me.REG[1] = CALL_location___SourceFile___line_starts(fra.me.REG[1])(fra.me.REG[1]);
   REGB1 = TAG_Int(1);
@@ -1654,23 +1688,23 @@ val_t location___Location___colored_line(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB2)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB1)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label6;
   label6: while(0);
-  /* location.nit:160 */
+  /* location.nit:168 */
   REGB1 = fra.me.REG[1];
-  /* location.nit:161 */
+  /* location.nit:169 */
   REGB2 = REGB1;
-  /* location.nit:162 */
+  /* location.nit:170 */
   fra.me.REG[1] = CALL_location___Location___file(fra.me.REG[0])(fra.me.REG[0]);
   REGB3 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB3)) {
-    nit_abort("Reciever is null", NULL, LOCATE_location, 162);
+    nit_abort("Reciever is null", NULL, LOCATE_location, 170);
   }
   fra.me.REG[1] = CALL_location___SourceFile___string(fra.me.REG[1])(fra.me.REG[1]);
-  /* location.nit:163 */
+  /* location.nit:171 */
   while(1) {
     REGB3 = TAG_Int(1);
     /* ../lib/standard/kernel.nit:238 */
@@ -1689,12 +1723,12 @@ val_t location___Location___colored_line(val_t p0, val_t p1){
     }
     /* ../lib/standard/kernel.nit:235 */
     REGB4 = TAG_Bool(UNTAG_Int(REGB3)<UNTAG_Int(REGB4));
-    /* location.nit:163 */
+    /* location.nit:171 */
     if (UNTAG_Bool(REGB4)) {
       REGB4 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:238 */
       REGB4 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB4));
-      /* location.nit:163 */
+      /* location.nit:171 */
       REGB4 = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[1])(fra.me.REG[1], REGB4);
       REGB3 = TAG_Char('\n');
       REGB5 = TAG_Bool(IS_EQUAL_OO(REGB4,REGB3));
@@ -1702,7 +1736,7 @@ val_t location___Location___colored_line(val_t p0, val_t p1){
       } else {
         /* ../lib/standard/kernel.nit:381 */
         REGB3 = TAG_Bool((REGB4)==(REGB3));
-        /* location.nit:163 */
+        /* location.nit:171 */
         REGB5 = REGB3;
       }
       REGB5 = TAG_Bool(!UNTAG_Bool(REGB5));
@@ -1714,7 +1748,7 @@ val_t location___Location___colored_line(val_t p0, val_t p1){
       REGB5 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:238 */
       REGB5 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB5));
-      /* location.nit:163 */
+      /* location.nit:171 */
       REGB5 = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[1])(fra.me.REG[1], REGB5);
       REGB3 = TAG_Char('\r');
       REGB4 = TAG_Bool(IS_EQUAL_OO(REGB5,REGB3));
@@ -1722,7 +1756,7 @@ val_t location___Location___colored_line(val_t p0, val_t p1){
       } else {
         /* ../lib/standard/kernel.nit:381 */
         REGB3 = TAG_Bool((REGB5)==(REGB3));
-        /* location.nit:163 */
+        /* location.nit:171 */
         REGB4 = REGB3;
       }
       REGB4 = TAG_Bool(!UNTAG_Bool(REGB4));
@@ -1731,47 +1765,47 @@ val_t location___Location___colored_line(val_t p0, val_t p1){
       REGB4 = REGB3;
     }
     if (UNTAG_Bool(REGB4)) {
-      /* location.nit:164 */
+      /* location.nit:172 */
       REGB4 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:238 */
       REGB4 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB4));
-      /* location.nit:164 */
+      /* location.nit:172 */
       REGB2 = REGB4;
     } else {
-      /* location.nit:163 */
+      /* location.nit:171 */
       goto label7;
     }
   }
   label7: while(0);
-  /* location.nit:166 */
+  /* location.nit:174 */
   REGB4 = CALL_location___Location___column_start(fra.me.REG[0])(fra.me.REG[0]);
   REGB3 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:240 */
   REGB3 = TAG_Int(UNTAG_Int(REGB4)-UNTAG_Int(REGB3));
-  /* location.nit:166 */
+  /* location.nit:174 */
   fra.me.REG[4] = CALL_standard___string___AbstractString___substring(fra.me.REG[1])(fra.me.REG[1], REGB1, REGB3);
-  /* location.nit:168 */
+  /* location.nit:176 */
   REGB3 = CALL_location___Location___line_end(fra.me.REG[0])(fra.me.REG[0]);
   REGB4 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB3));
   if (UNTAG_Bool(REGB4)) {
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB3 = TAG_Bool((REGB0)==(REGB3));
-    /* location.nit:168 */
+    /* location.nit:176 */
     REGB4 = REGB3;
   }
   REGB4 = TAG_Bool(!UNTAG_Bool(REGB4));
   if (UNTAG_Bool(REGB4)) {
     /* ../lib/standard/kernel.nit:240 */
     REGB4 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB1));
-    /* location.nit:169 */
+    /* location.nit:177 */
     REGB3 = TAG_Int(1);
     /* ../lib/standard/kernel.nit:238 */
     REGB3 = TAG_Int(UNTAG_Int(REGB4)+UNTAG_Int(REGB3));
-    /* location.nit:169 */
+    /* location.nit:177 */
     fra.me.REG[5] = REGB3;
   } else {
-    /* location.nit:171 */
+    /* location.nit:179 */
     REGB3 = CALL_location___Location___column_end(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[5] = REGB3;
   }
@@ -1791,43 +1825,43 @@ val_t location___Location___colored_line(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:234 */
   REGB4 = TAG_Bool(UNTAG_Int(REGB3)<=UNTAG_Int(REGB4));
-  /* location.nit:175 */
+  /* location.nit:183 */
   if (UNTAG_Bool(REGB4)) {
-    /* location.nit:176 */
+    /* location.nit:184 */
     REGB4 = CALL_location___Location___column_start(fra.me.REG[0])(fra.me.REG[0]);
     /* ../lib/standard/kernel.nit:238 */
     REGB4 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB4));
-    /* location.nit:176 */
+    /* location.nit:184 */
     REGB3 = TAG_Int(1);
     /* ../lib/standard/kernel.nit:240 */
     REGB3 = TAG_Int(UNTAG_Int(REGB4)-UNTAG_Int(REGB3));
-    /* location.nit:176 */
+    /* location.nit:184 */
     REGB4 = CALL_location___Location___column_start(fra.me.REG[0])(fra.me.REG[0]);
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_location, 176);
+      nit_abort("Reciever is null", NULL, LOCATE_location, 184);
     }
     /* ../lib/standard/kernel.nit:240 */
     REGB4 = TAG_Int(UNTAG_Int(fra.me.REG[5])-UNTAG_Int(REGB4));
-    /* location.nit:176 */
+    /* location.nit:184 */
     REGB0 = TAG_Int(1);
     /* ../lib/standard/kernel.nit:238 */
     REGB0 = TAG_Int(UNTAG_Int(REGB4)+UNTAG_Int(REGB0));
-    /* location.nit:176 */
+    /* location.nit:184 */
     fra.me.REG[6] = CALL_standard___string___AbstractString___substring(fra.me.REG[1])(fra.me.REG[1], REGB3, REGB0);
     /* ../lib/standard/kernel.nit:238 */
     REGB0 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(fra.me.REG[5]));
     /* ../lib/standard/kernel.nit:240 */
     REGB2 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB1));
     REGB2 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(fra.me.REG[5]));
-    /* location.nit:177 */
+    /* location.nit:185 */
     REGB3 = TAG_Int(1);
     /* ../lib/standard/kernel.nit:238 */
     REGB3 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB3));
-    /* location.nit:177 */
+    /* location.nit:185 */
     fra.me.REG[5] = CALL_standard___string___AbstractString___substring(fra.me.REG[1])(fra.me.REG[1], REGB0, REGB3);
   } else {
-    /* location.nit:179 */
+    /* location.nit:187 */
     if (!once_value_8) {
       fra.me.REG[7] = BOX_NativeString("");
       REGB3 = TAG_Int(0);
@@ -1837,7 +1871,7 @@ val_t location___Location___colored_line(val_t p0, val_t p1){
     } else fra.me.REG[7] = once_value_8;
     fra.me.REG[7] = fra.me.REG[7];
     fra.me.REG[6] = fra.me.REG[7];
-    /* location.nit:180 */
+    /* location.nit:188 */
     if (!once_value_9) {
       fra.me.REG[7] = BOX_NativeString("");
       REGB3 = TAG_Int(0);
@@ -1848,13 +1882,13 @@ val_t location___Location___colored_line(val_t p0, val_t p1){
     fra.me.REG[7] = fra.me.REG[7];
     fra.me.REG[5] = fra.me.REG[7];
   }
-  /* location.nit:182 */
+  /* location.nit:190 */
   fra.me.REG[7] = NEW_Buffer_standard___string___Buffer___init();
-  /* location.nit:183 */
+  /* location.nit:191 */
   REGB3 = CALL_location___Location___column_start(fra.me.REG[0])(fra.me.REG[0]);
   /* ../lib/standard/kernel.nit:238 */
   REGB3 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB3));
-  /* location.nit:183 */
+  /* location.nit:191 */
   REGB0 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:240 */
   REGB0 = TAG_Int(UNTAG_Int(REGB3)-UNTAG_Int(REGB0));
@@ -1869,9 +1903,9 @@ val_t location___Location___colored_line(val_t p0, val_t p1){
     REGB3 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB0));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB3)) {
-      /* location.nit:183 */
+      /* location.nit:191 */
       REGB3 = REGB1;
-      /* location.nit:184 */
+      /* location.nit:192 */
       REGB3 = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[1])(fra.me.REG[1], REGB3);
       REGB2 = TAG_Char('\t');
       REGB4 = TAG_Bool(IS_EQUAL_OO(REGB3,REGB2));
@@ -1879,15 +1913,15 @@ val_t location___Location___colored_line(val_t p0, val_t p1){
       } else {
         /* ../lib/standard/kernel.nit:381 */
         REGB2 = TAG_Bool((REGB3)==(REGB2));
-        /* location.nit:184 */
+        /* location.nit:192 */
         REGB4 = REGB2;
       }
       if (UNTAG_Bool(REGB4)) {
-        /* location.nit:185 */
+        /* location.nit:193 */
         REGB4 = TAG_Char('\t');
         CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], REGB4);
       } else {
-        /* location.nit:187 */
+        /* location.nit:195 */
         REGB4 = TAG_Char(' ');
         CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], REGB4);
       }
@@ -1903,7 +1937,7 @@ val_t location___Location___colored_line(val_t p0, val_t p1){
     }
   }
   label10: while(0);
-  /* location.nit:190 */
+  /* location.nit:198 */
   REGB1 = TAG_Int(13);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
   if (!once_value_11) {
index 8c78c7c..44f3ddd 100644 (file)
@@ -20,8 +20,9 @@ extern const int SFT_location[];
 #define CALL_location___SourceFile___string(recv) ((location___SourceFile___string_t)CALL((recv), (SFT_location[3] + 3)))
 #define CALL_location___SourceFile___string__eq(recv) ((location___SourceFile___string__eq_t)CALL((recv), (SFT_location[3] + 4)))
 #define CALL_location___SourceFile___init(recv) ((location___SourceFile___init_t)CALL((recv), (SFT_location[3] + 5)))
-#define CALL_location___SourceFile___line_starts(recv) ((location___SourceFile___line_starts_t)CALL((recv), (SFT_location[3] + 6)))
-#define CALL_location___SourceFile___line_starts__eq(recv) ((location___SourceFile___line_starts__eq_t)CALL((recv), (SFT_location[3] + 7)))
+#define CALL_location___SourceFile___from_string(recv) ((location___SourceFile___from_string_t)CALL((recv), (SFT_location[3] + 6)))
+#define CALL_location___SourceFile___line_starts(recv) ((location___SourceFile___line_starts_t)CALL((recv), (SFT_location[3] + 7)))
+#define CALL_location___SourceFile___line_starts__eq(recv) ((location___SourceFile___line_starts__eq_t)CALL((recv), (SFT_location[3] + 8)))
 #define ID_location___Location (SFT_location[4])
 #define COLOR_location___Location (SFT_location[5])
 #define ATTR_location___Location____file(recv) ATTR(recv, (SFT_location[6] + 0))
@@ -55,6 +56,9 @@ typedef void (*location___SourceFile___string__eq_t)(val_t p0, val_t p1);
 void location___SourceFile___init(val_t p0, val_t p1, val_t p2, int* init_table);
 typedef void (*location___SourceFile___init_t)(val_t p0, val_t p1, val_t p2, int* init_table);
 val_t NEW_SourceFile_location___SourceFile___init(val_t p0, val_t p1);
+void location___SourceFile___from_string(val_t p0, val_t p1, val_t p2, int* init_table);
+typedef void (*location___SourceFile___from_string_t)(val_t p0, val_t p1, val_t p2, int* init_table);
+val_t NEW_SourceFile_location___SourceFile___from_string(val_t p0, val_t p1);
 val_t location___SourceFile___line_starts(val_t p0);
 typedef val_t (*location___SourceFile___line_starts_t)(val_t p0);
 void location___SourceFile___line_starts__eq(val_t p0, val_t p1);
index e90b572..ba7f92f 100644 (file)
@@ -3,11 +3,9 @@
 /* out/indirect function for math::Int::rand */
 val_t Int_rand___out( val_t recv )
 {
-bigint trans_recv;
 bigint orig_return;
 val_t trans_return;
-trans_recv = UNTAG_Int(recv);
-orig_return = kernel_Int_Int_rand_0( trans_recv );
+orig_return = kernel_Int_Int_rand_0( UNTAG_Int(recv) );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -15,13 +13,9 @@ return trans_return;
 /* out/indirect function for math::Int::bin_and */
 val_t Int_bin_and___out( val_t recv, val_t i )
 {
-bigint trans_recv;
-bigint trans___i;
 bigint orig_return;
 val_t trans_return;
-trans_recv = UNTAG_Int(recv);
-trans___i = UNTAG_Int(i);
-orig_return = kernel_Int_Int_binand_0( trans_recv, trans___i );
+orig_return = kernel_Int_Int_binand_0( UNTAG_Int(recv), UNTAG_Int(i) );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -29,13 +23,9 @@ return trans_return;
 /* out/indirect function for math::Int::bin_or */
 val_t Int_bin_or___out( val_t recv, val_t i )
 {
-bigint trans_recv;
-bigint trans___i;
 bigint orig_return;
 val_t trans_return;
-trans_recv = UNTAG_Int(recv);
-trans___i = UNTAG_Int(i);
-orig_return = kernel_Int_Int_binor_0( trans_recv, trans___i );
+orig_return = kernel_Int_Int_binor_0( UNTAG_Int(recv), UNTAG_Int(i) );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -43,13 +33,9 @@ return trans_return;
 /* out/indirect function for math::Int::bin_xor */
 val_t Int_bin_xor___out( val_t recv, val_t i )
 {
-bigint trans_recv;
-bigint trans___i;
 bigint orig_return;
 val_t trans_return;
-trans_recv = UNTAG_Int(recv);
-trans___i = UNTAG_Int(i);
-orig_return = kernel_Int_Int_binxor_0( trans_recv, trans___i );
+orig_return = kernel_Int_Int_binxor_0( UNTAG_Int(recv), UNTAG_Int(i) );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -57,9 +43,11 @@ return trans_return;
 /* out/indirect function for math::Float::sqrt */
 val_t Float_sqrt___out( val_t recv )
 {
+float trans_recv;
 float orig_return;
 val_t trans_return;
-orig_return = kernel_Float_Float_sqrt_0( UNBOX_Float(recv) );
+trans_recv = UNBOX_Float(recv);
+orig_return = kernel_Float_Float_sqrt_0( trans_recv );
 trans_return = BOX_Float(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -67,9 +55,11 @@ return trans_return;
 /* out/indirect function for math::Float::cos */
 val_t Float_cos___out( val_t recv )
 {
+float trans_recv;
 float orig_return;
 val_t trans_return;
-orig_return = kernel_Float_Float_cos_0( UNBOX_Float(recv) );
+trans_recv = UNBOX_Float(recv);
+orig_return = kernel_Float_Float_cos_0( trans_recv );
 trans_return = BOX_Float(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -77,9 +67,11 @@ return trans_return;
 /* out/indirect function for math::Float::sin */
 val_t Float_sin___out( val_t recv )
 {
+float trans_recv;
 float orig_return;
 val_t trans_return;
-orig_return = kernel_Float_Float_sin_0( UNBOX_Float(recv) );
+trans_recv = UNBOX_Float(recv);
+orig_return = kernel_Float_Float_sin_0( trans_recv );
 trans_return = BOX_Float(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -87,9 +79,11 @@ return trans_return;
 /* out/indirect function for math::Float::tan */
 val_t Float_tan___out( val_t recv )
 {
+float trans_recv;
 float orig_return;
 val_t trans_return;
-orig_return = kernel_Float_Float_tan_0( UNBOX_Float(recv) );
+trans_recv = UNBOX_Float(recv);
+orig_return = kernel_Float_Float_tan_0( trans_recv );
 trans_return = BOX_Float(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -97,9 +91,11 @@ return trans_return;
 /* out/indirect function for math::Float::acos */
 val_t Float_acos___out( val_t recv )
 {
+float trans_recv;
 float orig_return;
 val_t trans_return;
-orig_return = kernel_Float_Float_acos_0( UNBOX_Float(recv) );
+trans_recv = UNBOX_Float(recv);
+orig_return = kernel_Float_Float_acos_0( trans_recv );
 trans_return = BOX_Float(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -107,9 +103,11 @@ return trans_return;
 /* out/indirect function for math::Float::asin */
 val_t Float_asin___out( val_t recv )
 {
+float trans_recv;
 float orig_return;
 val_t trans_return;
-orig_return = kernel_Float_Float_asin_0( UNBOX_Float(recv) );
+trans_recv = UNBOX_Float(recv);
+orig_return = kernel_Float_Float_asin_0( trans_recv );
 trans_return = BOX_Float(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -117,9 +115,11 @@ return trans_return;
 /* out/indirect function for math::Float::atan */
 val_t Float_atan___out( val_t recv )
 {
+float trans_recv;
 float orig_return;
 val_t trans_return;
-orig_return = kernel_Float_Float_atan_0( UNBOX_Float(recv) );
+trans_recv = UNBOX_Float(recv);
+orig_return = kernel_Float_Float_atan_0( trans_recv );
 trans_return = BOX_Float(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -127,9 +127,13 @@ return trans_return;
 /* out/indirect function for math::Float::pow */
 val_t Float_pow___out( val_t recv, val_t e )
 {
+float trans_recv;
+float trans___e;
 float orig_return;
 val_t trans_return;
-orig_return = kernel_Float_Float_pow_1( UNBOX_Float(recv), UNBOX_Float(e) );
+trans_recv = UNBOX_Float(recv);
+trans___e = UNBOX_Float(e);
+orig_return = kernel_Float_Float_pow_1( trans_recv, trans___e );
 trans_return = BOX_Float(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -137,9 +141,11 @@ return trans_return;
 /* out/indirect function for math::Float::log */
 val_t Float_log___out( val_t recv )
 {
+float trans_recv;
 float orig_return;
 val_t trans_return;
-orig_return = kernel_Float_Float_log_0( UNBOX_Float(recv) );
+trans_recv = UNBOX_Float(recv);
+orig_return = kernel_Float_Float_log_0( trans_recv );
 trans_return = BOX_Float(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -147,9 +153,11 @@ return trans_return;
 /* out/indirect function for math::Float::exp */
 val_t Float_exp___out( val_t recv )
 {
+float trans_recv;
 float orig_return;
 val_t trans_return;
-orig_return = kernel_Float_Float_exp_0( UNBOX_Float(recv) );
+trans_recv = UNBOX_Float(recv);
+orig_return = kernel_Float_Float_exp_0( trans_recv );
 trans_return = BOX_Float(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -157,9 +165,11 @@ return trans_return;
 /* out/indirect function for math::Float::rand */
 val_t Float_rand___out( val_t recv )
 {
+float trans_recv;
 float orig_return;
 val_t trans_return;
-orig_return = kernel_Float_Float_rand_0( UNBOX_Float(recv) );
+trans_recv = UNBOX_Float(recv);
+orig_return = kernel_Float_Float_rand_0( trans_recv );
 trans_return = BOX_Float(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -167,9 +177,13 @@ return trans_return;
 /* out/indirect function for math::Float::hypot_with */
 val_t Float_hypot_with___out( val_t recv, val_t b )
 {
+float trans_recv;
+float trans___b;
 float orig_return;
 val_t trans_return;
-orig_return = hypotf( UNBOX_Float(recv), UNBOX_Float(b) );
+trans_recv = UNBOX_Float(recv);
+trans___b = UNBOX_Float(b);
+orig_return = hypotf( trans_recv, trans___b );
 trans_return = BOX_Float(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -177,9 +191,13 @@ return trans_return;
 /* out/indirect function for math::Object::atan2 */
 val_t Object_atan2___out( val_t recv, val_t x, val_t y )
 {
+float trans___x;
+float trans___y;
 float orig_return;
 val_t trans_return;
-orig_return = kernel_Any_Any_atan2_2( NULL, UNBOX_Float(x), UNBOX_Float(y) );
+trans___x = UNBOX_Float(x);
+trans___y = UNBOX_Float(y);
+orig_return = kernel_Any_Any_atan2_2( NULL, trans___x, trans___y );
 trans_return = BOX_Float(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -197,9 +215,7 @@ return trans_return;
 /* out/indirect function for math::Object::srand_from */
 void Object_srand_from___out( val_t recv, val_t x )
 {
-bigint trans___x;
-trans___x = UNTAG_Int(x);
-kernel_Any_Any_srand_from_1( NULL, trans___x );
+kernel_Any_Any_srand_from_1( NULL, UNTAG_Int(x) );
 nitni_local_ref_clean(  );
 }
 /* out/indirect function for math::Object::srand */
index 70aea82..4b1d2bc 100644 (file)
@@ -235,7 +235,7 @@ void metamodel___abstractmetamodel___MMContext___add_local_class(val_t p0, val_t
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
       /* metamodel/abstractmetamodel.nit:59 */
       REGB1 = TAG_Bool(VAL_ISA(fra.me.REG[5], COLOR_metamodel___abstractmetamodel___MMConcreteClass, ID_metamodel___abstractmetamodel___MMConcreteClass)) /*cast MMConcreteClass*/;
@@ -280,7 +280,7 @@ void metamodel___abstractmetamodel___MMContext___add_local_class(val_t p0, val_t
             if (UNTAG_Bool(REGB2)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB1)];
             /* metamodel/abstractmetamodel.nit:63 */
             REGB2 = CALL_standard___collection___abstract_collection___Collection___has(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
@@ -2594,7 +2594,7 @@ val_t metamodel___abstractmetamodel___MMLocalClass___super_methods_named(val_t p
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
       /* metamodel/abstractmetamodel.nit:471 */
       fra.me.REG[5] = CALL_metamodel___abstractmetamodel___MMLocalClass___method(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
index 981e458..a616ce4 100644 (file)
@@ -58,7 +58,7 @@ val_t metamodel___genericity___MMLocalClass___get_formal(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB1)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[0] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label1;
@@ -201,7 +201,7 @@ val_t metamodel___genericity___MMLocalClass___get_instantiate_type(val_t p0, val
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
       /* metamodel/genericity.nit:47 */
       REGB1 = CALL_metamodel___genericity___MMTypeGeneric___params_equals(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
@@ -377,7 +377,7 @@ val_t metamodel___genericity___MMLocalClass___formals_types(val_t p0){
         if (UNTAG_Bool(REGB3)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB2)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label2;
@@ -787,7 +787,7 @@ val_t metamodel___genericity___MMTypeGeneric___for_module(val_t p0, val_t p1){
         if (UNTAG_Bool(REGB1)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB0)];
         /* metamodel/genericity.nit:140 */
         fra.me.REG[6] = CALL_metamodel___static_type___MMType___for_module(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[1]);
@@ -887,7 +887,7 @@ val_t metamodel___genericity___MMTypeGeneric___adapt_to(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
       /* metamodel/genericity.nit:152 */
       fra.me.REG[5] = CALL_metamodel___static_type___MMType___adapt_to(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[1]);
@@ -1048,7 +1048,7 @@ val_t metamodel___genericity___MMTypeGeneric___params_equals(val_t p0, val_t p1)
       if (UNTAG_Bool(REGB5)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB4)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label2;
@@ -1094,7 +1094,7 @@ val_t metamodel___genericity___MMTypeGeneric___params_equals(val_t p0, val_t p1)
       if (UNTAG_Bool(REGB4)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB3)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label3;
@@ -1310,7 +1310,7 @@ val_t metamodel___genericity___MMTypeGeneric___is_subtype(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB4)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB3)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label1;
@@ -1361,7 +1361,7 @@ val_t metamodel___genericity___MMTypeGeneric___is_subtype(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB3)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB2)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label2;
@@ -1398,6 +1398,93 @@ val_t metamodel___genericity___MMTypeGeneric___is_subtype(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return REGB2;
 }
+static const char LOCATE_metamodel___genericity___MMTypeGeneric___has_formal[] = "genericity::MMTypeGeneric::(type_formal::MMType::has_formal)";
+val_t metamodel___genericity___MMTypeGeneric___has_formal(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_metamodel___genericity;
+  fra.me.line = 189;
+  fra.me.meth = LOCATE_metamodel___genericity___MMTypeGeneric___has_formal;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* metamodel/genericity.nit:191 */
+  REGB0 = TAG_Bool(ATTR_metamodel___genericity___MMTypeGeneric____params(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_params", LOCATE_metamodel___genericity, 191);
+  }
+  fra.me.REG[0] = ATTR_metamodel___genericity___MMTypeGeneric____params(fra.me.REG[0]);
+  /* ../lib/standard/collection/array.nit:269 */
+  REGB0 = TAG_Int(0);
+  /* ../lib/standard/collection/array.nit:270 */
+  REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
+  }
+  REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  /* ../lib/standard/collection/array.nit:271 */
+  fra.me.REG[1] = ATTR_standard___collection___array___Array____items(fra.me.REG[0]);
+  /* ../lib/standard/collection/array.nit:272 */
+  while(1) {
+    /* ../lib/standard/collection/array.nit:24 */
+    REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+    }
+    REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ../lib/standard/collection/array.nit:272 */
+    if (UNTAG_Bool(REGB1)) {
+      /* ../lib/standard/collection/array.nit:273 */
+      REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
+      }
+      /* ../lib/standard/collection/array.nit:724 */
+      fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB0)];
+      /* metamodel/genericity.nit:192 */
+      REGB1 = CALL_metamodel___type_formal___MMType___has_formal(fra.me.REG[2])(fra.me.REG[2]);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(1);
+        goto label1;
+      }
+      /* ../lib/standard/collection/array.nit:274 */
+      REGB2 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ../lib/standard/collection/array.nit:274 */
+      REGB0 = REGB2;
+    } else {
+      /* ../lib/standard/collection/array.nit:272 */
+      goto label2;
+    }
+  }
+  label2: while(0);
+  /* metamodel/genericity.nit:194 */
+  REGB0 = TAG_Bool(0);
+  REGB1 = REGB0;
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
 static const char LOCATE_metamodel___genericity___MMTypeGeneric___init[] = "genericity::MMTypeGeneric::init";
 void metamodel___genericity___MMTypeGeneric___init(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos0 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_metamodel___genericity___MMTypeGeneric].i;
@@ -1406,7 +1493,7 @@ void metamodel___genericity___MMTypeGeneric___init(val_t p0, val_t p1, val_t p2,
   if (init_table[itpos0]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___genericity;
-  fra.me.line = 189;
+  fra.me.line = 197;
   fra.me.meth = LOCATE_metamodel___genericity___MMTypeGeneric___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1418,11 +1505,11 @@ void metamodel___genericity___MMTypeGeneric___init(val_t p0, val_t p1, val_t p2,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* metamodel/genericity.nit:189 */
+  /* metamodel/genericity.nit:197 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* metamodel/genericity.nit:191 */
+  /* metamodel/genericity.nit:199 */
   CALL_metamodel___static_type___MMTypeClass___init(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], init_table);
-  /* metamodel/genericity.nit:192 */
+  /* metamodel/genericity.nit:200 */
   ATTR_metamodel___genericity___MMTypeGeneric____params(fra.me.REG[3]) = fra.me.REG[2];
   stack_frame_head = fra.me.prev;
   init_table[itpos0] = 1;
@@ -1435,18 +1522,18 @@ val_t metamodel___genericity___MMTypeFormalParameter___def_class(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___genericity;
-  fra.me.line = 198;
+  fra.me.line = 206;
   fra.me.meth = LOCATE_metamodel___genericity___MMTypeFormalParameter___def_class;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* metamodel/genericity.nit:198 */
+  /* metamodel/genericity.nit:206 */
   REGB0 = TAG_Bool(ATTR_metamodel___genericity___MMTypeFormalParameter____def_class(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_def_class", LOCATE_metamodel___genericity, 198);
+    nit_abort("Uninitialized attribute %s", "_def_class", LOCATE_metamodel___genericity, 206);
   }
   fra.me.REG[0] = ATTR_metamodel___genericity___MMTypeFormalParameter____def_class(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1459,18 +1546,18 @@ val_t metamodel___genericity___MMTypeFormalParameter___position(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___genericity;
-  fra.me.line = 201;
+  fra.me.line = 209;
   fra.me.meth = LOCATE_metamodel___genericity___MMTypeFormalParameter___position;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* metamodel/genericity.nit:201 */
+  /* metamodel/genericity.nit:209 */
   REGB0 = TAG_Bool(ATTR_metamodel___genericity___MMTypeFormalParameter____position(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_position", LOCATE_metamodel___genericity, 201);
+    nit_abort("Uninitialized attribute %s", "_position", LOCATE_metamodel___genericity, 209);
   }
   REGB0 = ATTR_metamodel___genericity___MMTypeFormalParameter____position(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1483,18 +1570,18 @@ val_t metamodel___genericity___MMTypeFormalParameter___mmmodule(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___genericity;
-  fra.me.line = 204;
+  fra.me.line = 212;
   fra.me.meth = LOCATE_metamodel___genericity___MMTypeFormalParameter___mmmodule;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* metamodel/genericity.nit:204 */
+  /* metamodel/genericity.nit:212 */
   REGB0 = TAG_Bool(ATTR_metamodel___genericity___MMTypeFormalParameter____def_class(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_def_class", LOCATE_metamodel___genericity, 204);
+    nit_abort("Uninitialized attribute %s", "_def_class", LOCATE_metamodel___genericity, 212);
   }
   fra.me.REG[0] = ATTR_metamodel___genericity___MMTypeFormalParameter____def_class(fra.me.REG[0]);
   fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMLocalClass___mmmodule(fra.me.REG[0])(fra.me.REG[0]);
@@ -1511,7 +1598,7 @@ val_t metamodel___genericity___MMTypeFormalParameter___for_module(val_t p0, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___genericity;
-  fra.me.line = 206;
+  fra.me.line = 214;
   fra.me.meth = LOCATE_metamodel___genericity___MMTypeFormalParameter___for_module;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1522,9 +1609,9 @@ val_t metamodel___genericity___MMTypeFormalParameter___for_module(val_t p0, val_
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* metamodel/genericity.nit:208 */
+  /* metamodel/genericity.nit:216 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* metamodel/genericity.nit:209 */
+  /* metamodel/genericity.nit:217 */
   fra.me.REG[3] = CALL_metamodel___static_type___MMType___mmmodule(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
@@ -1534,11 +1621,11 @@ val_t metamodel___genericity___MMTypeFormalParameter___for_module(val_t p0, val_
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* metamodel/genericity.nit:210 */
+    /* metamodel/genericity.nit:218 */
     REGB0 = TAG_Bool(ATTR_metamodel___genericity___MMTypeFormalParameter____def_class(fra.me.REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_def_class", LOCATE_metamodel___genericity, 210);
+      nit_abort("Uninitialized attribute %s", "_def_class", LOCATE_metamodel___genericity, 218);
     }
     fra.me.REG[3] = ATTR_metamodel___genericity___MMTypeFormalParameter____def_class(fra.me.REG[0]);
     fra.me.REG[3] = CALL_metamodel___abstractmetamodel___MMLocalClass___global(fra.me.REG[3])(fra.me.REG[3]);
@@ -1547,7 +1634,7 @@ val_t metamodel___genericity___MMTypeFormalParameter___for_module(val_t p0, val_
     fra.me.REG[3] = CALL_metamodel___genericity___MMLocalClass___get_formal(fra.me.REG[3])(fra.me.REG[3], REGB0);
     fra.me.REG[2] = fra.me.REG[3];
   }
-  /* metamodel/genericity.nit:212 */
+  /* metamodel/genericity.nit:220 */
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1560,7 +1647,7 @@ val_t metamodel___genericity___MMTypeFormalParameter___upcast_for(val_t p0, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___genericity;
-  fra.me.line = 215;
+  fra.me.line = 223;
   fra.me.meth = LOCATE_metamodel___genericity___MMTypeFormalParameter___upcast_for;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1569,11 +1656,11 @@ val_t metamodel___genericity___MMTypeFormalParameter___upcast_for(val_t p0, val_
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* metamodel/genericity.nit:215 */
+  /* metamodel/genericity.nit:223 */
   fra.me.REG[0] = ATTR_metamodel___type_formal___MMTypeFormal____bound(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_metamodel___genericity, 215);
+    nit_abort("Reciever is null", NULL, LOCATE_metamodel___genericity, 223);
   }
   fra.me.REG[1] = CALL_metamodel___static_type___MMType___upcast_for(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   goto label1;
@@ -1589,7 +1676,7 @@ void metamodel___genericity___MMTypeFormalParameter___bound__eq(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___genericity;
-  fra.me.line = 217;
+  fra.me.line = 225;
   fra.me.meth = LOCATE_metamodel___genericity___MMTypeFormalParameter___bound__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -1599,7 +1686,7 @@ void metamodel___genericity___MMTypeFormalParameter___bound__eq(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* metamodel/genericity.nit:219 */
+  /* metamodel/genericity.nit:227 */
   fra.me.REG[2] = ATTR_metamodel___type_formal___MMTypeFormal____bound(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -1615,9 +1702,9 @@ void metamodel___genericity___MMTypeFormalParameter___bound__eq(val_t p0, val_t
   }
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_metamodel___genericity, 219);
+    nit_abort("Assert failed", NULL, LOCATE_metamodel___genericity, 227);
   }
-  /* metamodel/genericity.nit:220 */
+  /* metamodel/genericity.nit:228 */
   ATTR_metamodel___type_formal___MMTypeFormal____bound(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -1631,7 +1718,7 @@ val_t metamodel___genericity___MMTypeFormalParameter___adapt_to(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___genericity;
-  fra.me.line = 223;
+  fra.me.line = 231;
   fra.me.meth = LOCATE_metamodel___genericity___MMTypeFormalParameter___adapt_to;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -1641,19 +1728,19 @@ val_t metamodel___genericity___MMTypeFormalParameter___adapt_to(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* metamodel/genericity.nit:225 */
+  /* metamodel/genericity.nit:233 */
   fra.me.REG[2] = CALL_metamodel___type_formal___MMType___direct_type(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[1] = fra.me.REG[2];
-  /* metamodel/genericity.nit:226 */
+  /* metamodel/genericity.nit:234 */
   fra.me.REG[2] = CALL_metamodel___genericity___MMTypeFormalParameter___def_class(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_metamodel___static_type___MMType___upcast_for(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* metamodel/genericity.nit:231 */
+  /* metamodel/genericity.nit:239 */
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_metamodel___genericity___MMTypeGeneric, ID_metamodel___genericity___MMTypeGeneric)) /*cast MMTypeGeneric*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_metamodel___genericity, 231);
+    nit_abort("Assert failed", NULL, LOCATE_metamodel___genericity, 239);
   }
-  /* metamodel/genericity.nit:232 */
+  /* metamodel/genericity.nit:240 */
   fra.me.REG[2] = CALL_metamodel___genericity___MMTypeGeneric___params(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = CALL_metamodel___genericity___MMTypeFormalParameter___position(fra.me.REG[0])(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:280 */
@@ -1695,12 +1782,12 @@ val_t metamodel___genericity___MMTypeFormalParameter___adapt_to(val_t p0, val_t
   if (UNTAG_Bool(REGB1)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label1;
   label1: while(0);
-  /* metamodel/genericity.nit:233 */
+  /* metamodel/genericity.nit:241 */
   goto label2;
   label2: while(0);
   stack_frame_head = fra.me.prev;
@@ -1715,7 +1802,7 @@ void metamodel___genericity___MMTypeFormalParameter___with_bound(val_t p0, val_t
   if (init_table[itpos1]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___genericity;
-  fra.me.line = 236;
+  fra.me.line = 244;
   fra.me.meth = LOCATE_metamodel___genericity___MMTypeFormalParameter___with_bound;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1729,9 +1816,9 @@ void metamodel___genericity___MMTypeFormalParameter___with_bound(val_t p0, val_t
   REGB0 = p2;
   fra.me.REG[2] = p3;
   fra.me.REG[3] = p4;
-  /* metamodel/genericity.nit:238 */
+  /* metamodel/genericity.nit:246 */
   CALL_metamodel___genericity___MMTypeFormalParameter___init(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], REGB0, fra.me.REG[2], init_table);
-  /* metamodel/genericity.nit:239 */
+  /* metamodel/genericity.nit:247 */
   ATTR_metamodel___type_formal___MMTypeFormal____bound(fra.me.REG[0]) = fra.me.REG[3];
   stack_frame_head = fra.me.prev;
   init_table[itpos1] = 1;
@@ -1746,7 +1833,7 @@ void metamodel___genericity___MMTypeFormalParameter___init(val_t p0, val_t p1, v
   if (init_table[itpos2]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___genericity;
-  fra.me.line = 242;
+  fra.me.line = 250;
   fra.me.meth = LOCATE_metamodel___genericity___MMTypeFormalParameter___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1759,13 +1846,13 @@ void metamodel___genericity___MMTypeFormalParameter___init(val_t p0, val_t p1, v
   fra.me.REG[1] = p1;
   REGB0 = p2;
   fra.me.REG[2] = p3;
-  /* metamodel/genericity.nit:242 */
+  /* metamodel/genericity.nit:250 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* metamodel/genericity.nit:244 */
+  /* metamodel/genericity.nit:252 */
   CALL_metamodel___type_formal___MMTypeFormal___init(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], NIT_NULL, init_table);
-  /* metamodel/genericity.nit:245 */
+  /* metamodel/genericity.nit:253 */
   ATTR_metamodel___genericity___MMTypeFormalParameter____position(fra.me.REG[3]) = REGB0;
-  /* metamodel/genericity.nit:246 */
+  /* metamodel/genericity.nit:254 */
   ATTR_metamodel___genericity___MMTypeFormalParameter____def_class(fra.me.REG[3]) = fra.me.REG[2];
   stack_frame_head = fra.me.prev;
   init_table[itpos2] = 1;
@@ -1778,14 +1865,14 @@ val_t metamodel___genericity___MMTypeNone___is_generic(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___genericity;
-  fra.me.line = 251;
+  fra.me.line = 259;
   fra.me.meth = LOCATE_metamodel___genericity___MMTypeNone___is_generic;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* metamodel/genericity.nit:251 */
+  /* metamodel/genericity.nit:259 */
   REGB0 = TAG_Bool(0);
   goto label1;
   label1: while(0);
@@ -1798,7 +1885,7 @@ val_t metamodel___genericity___MMTypeNone___for_module(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___genericity;
-  fra.me.line = 252;
+  fra.me.line = 260;
   fra.me.meth = LOCATE_metamodel___genericity___MMTypeNone___for_module;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1807,7 +1894,7 @@ val_t metamodel___genericity___MMTypeNone___for_module(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* metamodel/genericity.nit:252 */
+  /* metamodel/genericity.nit:260 */
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1819,7 +1906,7 @@ val_t metamodel___genericity___MMTypeNone___adapt_to(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___genericity;
-  fra.me.line = 253;
+  fra.me.line = 261;
   fra.me.meth = LOCATE_metamodel___genericity___MMTypeNone___adapt_to;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1828,7 +1915,7 @@ val_t metamodel___genericity___MMTypeNone___adapt_to(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* metamodel/genericity.nit:253 */
+  /* metamodel/genericity.nit:261 */
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
index 693815c..bda7d07 100644 (file)
@@ -78,6 +78,8 @@ val_t metamodel___genericity___MMTypeGeneric___to_s(val_t p0);
 typedef val_t (*metamodel___genericity___MMTypeGeneric___to_s_t)(val_t p0);
 val_t metamodel___genericity___MMTypeGeneric___is_subtype(val_t p0, val_t p1);
 typedef val_t (*metamodel___genericity___MMTypeGeneric___is_subtype_t)(val_t p0, val_t p1);
+val_t metamodel___genericity___MMTypeGeneric___has_formal(val_t p0);
+typedef val_t (*metamodel___genericity___MMTypeGeneric___has_formal_t)(val_t p0);
 void metamodel___genericity___MMTypeGeneric___init(val_t p0, val_t p1, val_t p2, int* init_table);
 typedef void (*metamodel___genericity___MMTypeGeneric___init_t)(val_t p0, val_t p1, val_t p2, int* init_table);
 val_t NEW_MMTypeGeneric_metamodel___genericity___MMTypeGeneric___init(val_t p0, val_t p1);
index 294ad45..ce2006a 100644 (file)
@@ -136,7 +136,7 @@ void metamodel___inheritance___MMContext___handle_property_conflict(val_t p0, va
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB0)];
       /* metamodel/inheritance.nit:32 */
       REGB1 = TAG_Int(3);
@@ -395,7 +395,7 @@ void metamodel___inheritance___MMModule___import_global_classes(val_t p0){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* metamodel/inheritance.nit:61 */
       fra.me.REG[3] = CALL_metamodel___abstractmetamodel___MMModule___global_classes(fra.me.REG[3])(fra.me.REG[3]);
@@ -819,7 +819,7 @@ void metamodel___inheritance___MMLocalClass___inherit_global_properties(val_t p0
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
       /* metamodel/inheritance.nit:144 */
       fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMLocalClass___global_properties(fra.me.REG[4])(fra.me.REG[4]);
@@ -1042,7 +1042,7 @@ val_t metamodel___inheritance___MMLocalClass___has_global_property(val_t p0, val
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB1)];
       /* metamodel/inheritance.nit:181 */
       REGB2 = CALL_metamodel___abstractmetamodel___MMLocalClass___has_global_property(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
@@ -1225,7 +1225,7 @@ val_t metamodel___inheritance___MMLocalClass___has_global_property_by_name(val_t
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB3)];
       /* metamodel/inheritance.nit:210 */
       REGB2 = CALL_metamodel___abstractmetamodel___MMLocalClass___has_global_property_by_name(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[1]);
@@ -1797,7 +1797,7 @@ void metamodel___inheritance___MMLocalClass___add_default_any_class(val_t p0, va
             if (UNTAG_Bool(REGB2)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB1)];
             /* metamodel/inheritance.nit:306 */
             fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMLocalClass___global(fra.me.REG[4])(fra.me.REG[4]);
@@ -1967,7 +1967,7 @@ void metamodel___inheritance___MMLocalClass___add_super_classes(val_t p0, val_t
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
       /* metamodel/inheritance.nit:332 */
       fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMLocalClass___cshe(fra.me.REG[4])(fra.me.REG[4]);
@@ -2006,7 +2006,7 @@ void metamodel___inheritance___MMLocalClass___add_super_classes(val_t p0, val_t
           if (UNTAG_Bool(REGB2)) {
             nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
           }
-          /* ../lib/standard/collection/array.nit:718 */
+          /* ../lib/standard/collection/array.nit:724 */
           fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB1)];
           /* metamodel/inheritance.nit:333 */
           REGB2 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMLocalClass____mmmodule(fra.me.REG[0])!=NIT_NULL);
@@ -2106,7 +2106,7 @@ void metamodel___inheritance___MMLocalClass___add_explicit_classes(val_t p0, val
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* metamodel/inheritance.nit:343 */
       fra.me.REG[3] = CALL_metamodel___static_type___MMAncestor___local_class(fra.me.REG[3])(fra.me.REG[3]);
@@ -2179,7 +2179,7 @@ void metamodel___inheritance___MMLocalClass___compute_super_parents(val_t p0, va
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)];
       /* metamodel/inheritance.nit:351 */
       CALL_metamodel___inheritance___MMLocalClass___compute_super_classes(fra.me.REG[2])(fra.me.REG[2]);
@@ -2281,7 +2281,7 @@ val_t metamodel___inheritance___MMLocalClass___build_ancestors(val_t p0){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
       /* metamodel/inheritance.nit:362 */
       REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[4],fra.me.REG[0]));
@@ -2352,7 +2352,7 @@ val_t metamodel___inheritance___MMLocalClass___build_ancestors(val_t p0){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* metamodel/inheritance.nit:367 */
       fra.me.REG[5] = CALL_metamodel___static_type___MMAncestor___local_class(fra.me.REG[4])(fra.me.REG[4]);
@@ -2446,7 +2446,7 @@ val_t metamodel___inheritance___MMLocalClass___group_ancestors(val_t p0, val_t p
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* metamodel/inheritance.nit:379 */
       fra.me.REG[4] = CALL_metamodel___static_type___MMAncestor___local_class(fra.me.REG[3])(fra.me.REG[3]);
@@ -2822,7 +2822,7 @@ val_t metamodel___inheritance___MMLocalClass___inherit_local_property(val_t p0,
           if (UNTAG_Bool(REGB1)) {
             nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
           }
-          /* ../lib/standard/collection/array.nit:718 */
+          /* ../lib/standard/collection/array.nit:724 */
           fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB0)];
           /* metamodel/inheritance.nit:450 */
           REGB1 = CALL_metamodel___abstractmetamodel___MMLocalClass___has_global_property(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[1]);
@@ -2951,7 +2951,7 @@ void metamodel___inheritance___MMLocalProperty___inherit_global(val_t p0, val_t
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
       /* metamodel/inheritance.nit:481 */
       REGB1 = CALL_metamodel___abstractmetamodel___MMLocalClass___has_global_property(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[1]);
index 936ae0d..3f1a2c8 100644 (file)
@@ -400,7 +400,7 @@ val_t metamodel___partial_order___PartialOrder___to_dot(val_t p0){
         if (UNTAG_Bool(REGB1)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
         /* metamodel/partial_order.nit:72 */
         fra.me.REG[4] = CALL_metamodel___partial_order___PartialOrderElement___value(fra.me.REG[0])(fra.me.REG[0]);
@@ -918,7 +918,7 @@ val_t metamodel___partial_order___PartialOrder___add_to_smallests(val_t p0, val_
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
       /* metamodel/partial_order.nit:160 */
       REGB1 = CALL_metamodel___partial_order___PartialOrderElement_____g(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5]);
@@ -1421,7 +1421,7 @@ val_t metamodel___partial_order___PartialOrderElement___linear_extension(val_t p
         if (UNTAG_Bool(REGB1)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB0)];
         /* metamodel/partial_order.nit:252 */
         fra.me.REG[7] = CALL_metamodel___partial_order___PartialOrderElement___order(fra.me.REG[1])(fra.me.REG[1]);
@@ -1465,7 +1465,7 @@ val_t metamodel___partial_order___PartialOrderElement___linear_extension(val_t p
             if (UNTAG_Bool(REGB2)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[9] = ((Nit_NativeArray)fra.me.REG[8])->val[UNTAG_Int(REGB1)];
             /* metamodel/partial_order.nit:255 */
             REGB2 = CALL_standard___collection___abstract_collection___Collection___has(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[9]);
@@ -1597,7 +1597,7 @@ val_t metamodel___partial_order___PartialOrderElement___reverse_linear_extension
         if (UNTAG_Bool(REGB1)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
         /* metamodel/partial_order.nit:278 */
         fra.me.REG[6] = CALL_metamodel___partial_order___PartialOrderElement___order(fra.me.REG[1])(fra.me.REG[1]);
@@ -1918,7 +1918,7 @@ void metamodel___partial_order___PartialOrderElement___init(val_t p0, val_t p1,
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB1)];
       /* metamodel/partial_order.nit:329 */
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
index dfbb481..d01f0da 100644 (file)
@@ -602,7 +602,7 @@ val_t metamodel___static_type___MMSignature___closure_named(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* metamodel/static_type.nit:101 */
       fra.me.REG[4] = CALL_metamodel___static_type___MMClosure___name(fra.me.REG[3])(fra.me.REG[3]);
@@ -960,7 +960,7 @@ val_t metamodel___static_type___MMSignature_____l(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB5)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB2)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label3;
@@ -1006,7 +1006,7 @@ val_t metamodel___static_type___MMSignature_____l(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB3)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label4;
@@ -1133,7 +1133,7 @@ val_t metamodel___static_type___MMSignature_____bra(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB1)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[0] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label1;
@@ -1293,7 +1293,7 @@ val_t metamodel___static_type___MMSignature___to_s(val_t p0){
         if (UNTAG_Bool(REGB3)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB2)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label1;
@@ -1485,7 +1485,7 @@ val_t metamodel___static_type___MMSignature___adaptation_to(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB0)];
       /* metamodel/static_type.nit:172 */
       fra.me.REG[8] = CALL_metamodel___static_type___MMParam___mmtype(fra.me.REG[7])(fra.me.REG[7]);
@@ -1591,7 +1591,7 @@ val_t metamodel___static_type___MMSignature___adaptation_to(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
       /* metamodel/static_type.nit:188 */
       fra.me.REG[5] = CALL_metamodel___static_type___MMSignature___closures(fra.me.REG[6])(fra.me.REG[6]);
@@ -1712,7 +1712,7 @@ val_t metamodel___static_type___MMSignature___not_for_self(val_t p0){
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB1)];
       /* metamodel/static_type.nit:204 */
       fra.me.REG[6] = CALL_metamodel___static_type___MMParam___mmtype(fra.me.REG[5])(fra.me.REG[5]);
@@ -1838,7 +1838,7 @@ val_t metamodel___static_type___MMSignature___not_for_self(val_t p0){
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB1)];
       /* metamodel/static_type.nit:224 */
       fra.me.REG[8] = CALL_metamodel___static_type___MMClosure___not_for_self(fra.me.REG[6])(fra.me.REG[6]);
@@ -2819,6 +2819,30 @@ void metamodel___static_type___MMType___init(val_t p0, int* init_table){
   init_table[itpos5] = 1;
   return;
 }
+static const char LOCATE_metamodel___static_type___MMNullableType___base_type[] = "static_type::MMNullableType::base_type";
+val_t metamodel___static_type___MMNullableType___base_type(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_metamodel___static_type;
+  fra.me.line = 420;
+  fra.me.meth = LOCATE_metamodel___static_type___MMNullableType___base_type;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* metamodel/static_type.nit:420 */
+  REGB0 = TAG_Bool(ATTR_metamodel___static_type___MMNullableType____base_type(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_base_type", LOCATE_metamodel___static_type, 420);
+  }
+  fra.me.REG[0] = ATTR_metamodel___static_type___MMNullableType____base_type(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
 static const char LOCATE_metamodel___static_type___MMNullableType___is_valid[] = "static_type::MMNullableType::(static_type::MMType::is_valid)";
 val_t metamodel___static_type___MMNullableType___is_valid(val_t p0){
   struct {struct stack_frame_t me;} fra;
index c1b519c..cdddd1a 100644 (file)
@@ -118,7 +118,8 @@ extern const int SFT_metamodel___static_type[];
 #define COLOR_metamodel___static_type___MMNullableType (SFT_metamodel___static_type[27])
 #define ATTR_metamodel___static_type___MMNullableType____base_type(recv) ATTR(recv, (SFT_metamodel___static_type[28] + 0))
 #define INIT_TABLE_POS_metamodel___static_type___MMNullableType (SFT_metamodel___static_type[29] + 0)
-#define CALL_metamodel___static_type___MMNullableType___init(recv) ((metamodel___static_type___MMNullableType___init_t)CALL((recv), (SFT_metamodel___static_type[29] + 1)))
+#define CALL_metamodel___static_type___MMNullableType___base_type(recv) ((metamodel___static_type___MMNullableType___base_type_t)CALL((recv), (SFT_metamodel___static_type[29] + 1)))
+#define CALL_metamodel___static_type___MMNullableType___init(recv) ((metamodel___static_type___MMNullableType___init_t)CALL((recv), (SFT_metamodel___static_type[29] + 2)))
 #define ID_metamodel___static_type___MMTypeClass (SFT_metamodel___static_type[30])
 #define COLOR_metamodel___static_type___MMTypeClass (SFT_metamodel___static_type[31])
 #define ATTR_metamodel___static_type___MMTypeClass____local_class(recv) ATTR(recv, (SFT_metamodel___static_type[32] + 0))
@@ -272,6 +273,8 @@ typedef val_t (*metamodel___static_type___MMType___as_notnull_t)(val_t p0);
 void metamodel___static_type___MMType___init(val_t p0, int* init_table);
 typedef void (*metamodel___static_type___MMType___init_t)(val_t p0, int* init_table);
 val_t NEW_MMType_metamodel___static_type___MMType___init();
+val_t metamodel___static_type___MMNullableType___base_type(val_t p0);
+typedef val_t (*metamodel___static_type___MMNullableType___base_type_t)(val_t p0);
 val_t metamodel___static_type___MMNullableType___is_valid(val_t p0);
 typedef val_t (*metamodel___static_type___MMNullableType___is_valid_t)(val_t p0);
 val_t metamodel___static_type___MMNullableType___is_nullable(val_t p0);
index cd64735..df789f0 100644 (file)
@@ -19,6 +19,27 @@ val_t metamodel___type_formal___MMType___direct_type(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
+static const char LOCATE_metamodel___type_formal___MMType___has_formal[] = "type_formal::MMType::has_formal";
+val_t metamodel___type_formal___MMType___has_formal(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_metamodel___type_formal;
+  fra.me.line = 27;
+  fra.me.meth = LOCATE_metamodel___type_formal___MMType___has_formal;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* metamodel/type_formal.nit:27 */
+  REGB0 = TAG_Bool(0);
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
 static const char LOCATE_metamodel___type_formal___MMTypeFormal___is_valid[] = "type_formal::MMTypeFormal::(static_type::MMType::is_valid)";
 val_t metamodel___type_formal___MMTypeFormal___is_valid(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -27,7 +48,7 @@ val_t metamodel___type_formal___MMTypeFormal___is_valid(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___type_formal;
-  fra.me.line = 31;
+  fra.me.line = 33;
   fra.me.meth = LOCATE_metamodel___type_formal___MMTypeFormal___is_valid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35,7 +56,7 @@ val_t metamodel___type_formal___MMTypeFormal___is_valid(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* metamodel/type_formal.nit:31 */
+  /* metamodel/type_formal.nit:33 */
   fra.me.REG[1] = ATTR_metamodel___type_formal___MMTypeFormal____bound(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -54,7 +75,7 @@ val_t metamodel___type_formal___MMTypeFormal___is_valid(val_t p0){
     fra.me.REG[0] = ATTR_metamodel___type_formal___MMTypeFormal____bound(fra.me.REG[0]);
     REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_metamodel___type_formal, 31);
+      nit_abort("Reciever is null", NULL, LOCATE_metamodel___type_formal, 33);
     }
     REGB0 = CALL_metamodel___static_type___MMType___is_valid(fra.me.REG[0])(fra.me.REG[0]);
   } else {
@@ -73,18 +94,18 @@ val_t metamodel___type_formal___MMTypeFormal___name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___type_formal;
-  fra.me.line = 33;
+  fra.me.line = 35;
   fra.me.meth = LOCATE_metamodel___type_formal___MMTypeFormal___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* metamodel/type_formal.nit:33 */
+  /* metamodel/type_formal.nit:35 */
   REGB0 = TAG_Bool(ATTR_metamodel___type_formal___MMTypeFormal____name(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_name", LOCATE_metamodel___type_formal, 33);
+    nit_abort("Uninitialized attribute %s", "_name", LOCATE_metamodel___type_formal, 35);
   }
   fra.me.REG[0] = ATTR_metamodel___type_formal___MMTypeFormal____name(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -97,7 +118,7 @@ val_t metamodel___type_formal___MMTypeFormal___bound(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___type_formal;
-  fra.me.line = 36;
+  fra.me.line = 38;
   fra.me.meth = LOCATE_metamodel___type_formal___MMTypeFormal___bound;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -105,14 +126,14 @@ val_t metamodel___type_formal___MMTypeFormal___bound(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* metamodel/type_formal.nit:36 */
+  /* metamodel/type_formal.nit:38 */
   fra.me.REG[1] = fra.me.REG[0];
-  /* metamodel/type_formal.nit:37 */
+  /* metamodel/type_formal.nit:39 */
   fra.me.REG[1] = ATTR_metamodel___type_formal___MMTypeFormal____bound(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_metamodel___type_formal, 37);
+    nit_abort("Cast failed", NULL, LOCATE_metamodel___type_formal, 39);
   }
   goto label1;
   label1: while(0);
@@ -127,7 +148,7 @@ val_t metamodel___type_formal___MMTypeFormal_____l(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___type_formal;
-  fra.me.line = 40;
+  fra.me.line = 42;
   fra.me.meth = LOCATE_metamodel___type_formal___MMTypeFormal_____l;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -136,7 +157,7 @@ val_t metamodel___type_formal___MMTypeFormal_____l(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* metamodel/type_formal.nit:40 */
+  /* metamodel/type_formal.nit:42 */
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[1],fra.me.REG[0]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -162,7 +183,7 @@ val_t metamodel___type_formal___MMTypeFormal___is_supertype(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___type_formal;
-  fra.me.line = 41;
+  fra.me.line = 43;
   fra.me.meth = LOCATE_metamodel___type_formal___MMTypeFormal___is_supertype;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -171,11 +192,11 @@ val_t metamodel___type_formal___MMTypeFormal___is_supertype(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* metamodel/type_formal.nit:41 */
+  /* metamodel/type_formal.nit:43 */
   fra.me.REG[0] = ATTR_metamodel___type_formal___MMTypeFormal____bound(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_metamodel___type_formal, 41);
+    nit_abort("Reciever is null", NULL, LOCATE_metamodel___type_formal, 43);
   }
   REGB0 = CALL_metamodel___static_type___MMType___is_supertype(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   goto label1;
@@ -190,18 +211,18 @@ val_t metamodel___type_formal___MMTypeFormal___is_nullable(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___type_formal;
-  fra.me.line = 42;
+  fra.me.line = 44;
   fra.me.meth = LOCATE_metamodel___type_formal___MMTypeFormal___is_nullable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* metamodel/type_formal.nit:42 */
+  /* metamodel/type_formal.nit:44 */
   fra.me.REG[0] = ATTR_metamodel___type_formal___MMTypeFormal____bound(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_metamodel___type_formal, 42);
+    nit_abort("Reciever is null", NULL, LOCATE_metamodel___type_formal, 44);
   }
   REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -216,18 +237,18 @@ val_t metamodel___type_formal___MMTypeFormal___direct_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___type_formal;
-  fra.me.line = 43;
+  fra.me.line = 45;
   fra.me.meth = LOCATE_metamodel___type_formal___MMTypeFormal___direct_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* metamodel/type_formal.nit:43 */
+  /* metamodel/type_formal.nit:45 */
   fra.me.REG[0] = ATTR_metamodel___type_formal___MMTypeFormal____bound(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_metamodel___type_formal, 43);
+    nit_abort("Reciever is null", NULL, LOCATE_metamodel___type_formal, 45);
   }
   fra.me.REG[0] = CALL_metamodel___type_formal___MMType___direct_type(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -242,18 +263,18 @@ val_t metamodel___type_formal___MMTypeFormal___local_class(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___type_formal;
-  fra.me.line = 44;
+  fra.me.line = 46;
   fra.me.meth = LOCATE_metamodel___type_formal___MMTypeFormal___local_class;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* metamodel/type_formal.nit:44 */
+  /* metamodel/type_formal.nit:46 */
   fra.me.REG[0] = ATTR_metamodel___type_formal___MMTypeFormal____bound(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_metamodel___type_formal, 44);
+    nit_abort("Reciever is null", NULL, LOCATE_metamodel___type_formal, 46);
   }
   fra.me.REG[0] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -261,6 +282,27 @@ val_t metamodel___type_formal___MMTypeFormal___local_class(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
+static const char LOCATE_metamodel___type_formal___MMTypeFormal___has_formal[] = "type_formal::MMTypeFormal::(type_formal::MMType::has_formal)";
+val_t metamodel___type_formal___MMTypeFormal___has_formal(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_metamodel___type_formal;
+  fra.me.line = 47;
+  fra.me.meth = LOCATE_metamodel___type_formal___MMTypeFormal___has_formal;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* metamodel/type_formal.nit:47 */
+  REGB0 = TAG_Bool(1);
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
 static const char LOCATE_metamodel___type_formal___MMTypeFormal___to_s[] = "type_formal::MMTypeFormal::(string::Object::to_s)";
 val_t metamodel___type_formal___MMTypeFormal___to_s(val_t p0){
   struct {struct stack_frame_t me;} fra;
@@ -268,18 +310,18 @@ val_t metamodel___type_formal___MMTypeFormal___to_s(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___type_formal;
-  fra.me.line = 46;
+  fra.me.line = 49;
   fra.me.meth = LOCATE_metamodel___type_formal___MMTypeFormal___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* metamodel/type_formal.nit:46 */
+  /* metamodel/type_formal.nit:49 */
   REGB0 = TAG_Bool(ATTR_metamodel___type_formal___MMTypeFormal____name(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_name", LOCATE_metamodel___type_formal, 46);
+    nit_abort("Uninitialized attribute %s", "_name", LOCATE_metamodel___type_formal, 49);
   }
   fra.me.REG[0] = ATTR_metamodel___type_formal___MMTypeFormal____name(fra.me.REG[0]);
   fra.me.REG[0] = CALL_standard___string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
@@ -296,7 +338,7 @@ void metamodel___type_formal___MMTypeFormal___init(val_t p0, val_t p1, val_t p2,
   if (init_table[itpos0]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_metamodel___type_formal;
-  fra.me.line = 48;
+  fra.me.line = 51;
   fra.me.meth = LOCATE_metamodel___type_formal___MMTypeFormal___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -308,14 +350,36 @@ void metamodel___type_formal___MMTypeFormal___init(val_t p0, val_t p1, val_t p2,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* metamodel/type_formal.nit:48 */
+  /* metamodel/type_formal.nit:51 */
   fra.me.REG[3] = fra.me.REG[0];
   CALL_metamodel___static_type___MMType___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* metamodel/type_formal.nit:50 */
+  /* metamodel/type_formal.nit:53 */
   ATTR_metamodel___type_formal___MMTypeFormal____name(fra.me.REG[3]) = fra.me.REG[1];
-  /* metamodel/type_formal.nit:51 */
+  /* metamodel/type_formal.nit:54 */
   ATTR_metamodel___type_formal___MMTypeFormal____bound(fra.me.REG[3]) = fra.me.REG[2];
   stack_frame_head = fra.me.prev;
   init_table[itpos0] = 1;
   return;
 }
+static const char LOCATE_metamodel___type_formal___MMNullableType___has_formal[] = "type_formal::MMNullableType::(type_formal::MMType::has_formal)";
+val_t metamodel___type_formal___MMNullableType___has_formal(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_metamodel___type_formal;
+  fra.me.line = 59;
+  fra.me.meth = LOCATE_metamodel___type_formal___MMNullableType___has_formal;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* metamodel/type_formal.nit:59 */
+  fra.me.REG[0] = CALL_metamodel___static_type___MMNullableType___base_type(fra.me.REG[0])(fra.me.REG[0]);
+  REGB0 = CALL_metamodel___type_formal___MMType___has_formal(fra.me.REG[0])(fra.me.REG[0]);
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
index 6fe49ed..c1d3db7 100644 (file)
@@ -8,6 +8,7 @@ extern const classtable_elt_t VFT_metamodel___type_formal___MMTypeFormal[];
 extern const char LOCATE_metamodel___type_formal[];
 extern const int SFT_metamodel___type_formal[];
 #define CALL_metamodel___type_formal___MMType___direct_type(recv) ((metamodel___type_formal___MMType___direct_type_t)CALL((recv), (SFT_metamodel___type_formal[0] + 0)))
+#define CALL_metamodel___type_formal___MMType___has_formal(recv) ((metamodel___type_formal___MMType___has_formal_t)CALL((recv), (SFT_metamodel___type_formal[0] + 1)))
 #define ID_metamodel___type_formal___MMTypeFormal (SFT_metamodel___type_formal[1])
 #define COLOR_metamodel___type_formal___MMTypeFormal (SFT_metamodel___type_formal[2])
 #define ATTR_metamodel___type_formal___MMTypeFormal____name(recv) ATTR(recv, (SFT_metamodel___type_formal[3] + 0))
@@ -18,6 +19,8 @@ extern const int SFT_metamodel___type_formal[];
 #define CALL_metamodel___type_formal___MMTypeFormal___init(recv) ((metamodel___type_formal___MMTypeFormal___init_t)CALL((recv), (SFT_metamodel___type_formal[4] + 3)))
 val_t metamodel___type_formal___MMType___direct_type(val_t p0);
 typedef val_t (*metamodel___type_formal___MMType___direct_type_t)(val_t p0);
+val_t metamodel___type_formal___MMType___has_formal(val_t p0);
+typedef val_t (*metamodel___type_formal___MMType___has_formal_t)(val_t p0);
 val_t NEW_MMType_metamodel___static_type___MMType___init();
 val_t metamodel___type_formal___MMTypeFormal___is_valid(val_t p0);
 typedef val_t (*metamodel___type_formal___MMTypeFormal___is_valid_t)(val_t p0);
@@ -35,9 +38,14 @@ val_t metamodel___type_formal___MMTypeFormal___direct_type(val_t p0);
 typedef val_t (*metamodel___type_formal___MMTypeFormal___direct_type_t)(val_t p0);
 val_t metamodel___type_formal___MMTypeFormal___local_class(val_t p0);
 typedef val_t (*metamodel___type_formal___MMTypeFormal___local_class_t)(val_t p0);
+val_t metamodel___type_formal___MMTypeFormal___has_formal(val_t p0);
+typedef val_t (*metamodel___type_formal___MMTypeFormal___has_formal_t)(val_t p0);
 val_t metamodel___type_formal___MMTypeFormal___to_s(val_t p0);
 typedef val_t (*metamodel___type_formal___MMTypeFormal___to_s_t)(val_t p0);
 void metamodel___type_formal___MMTypeFormal___init(val_t p0, val_t p1, val_t p2, int* init_table);
 typedef void (*metamodel___type_formal___MMTypeFormal___init_t)(val_t p0, val_t p1, val_t p2, int* init_table);
 val_t NEW_MMTypeFormal_metamodel___type_formal___MMTypeFormal___init(val_t p0, val_t p1);
+val_t metamodel___type_formal___MMNullableType___has_formal(val_t p0);
+typedef val_t (*metamodel___type_formal___MMNullableType___has_formal_t)(val_t p0);
+val_t NEW_MMNullableType_metamodel___static_type___MMNullableType___init(val_t p0);
 #endif
index c84e9b4..fcede1c 100644 (file)
@@ -345,7 +345,7 @@ val_t mmloader___ToolContext___try_to_load(val_t p0, val_t p1, val_t p2){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB0)];
       /* mmloader.nit:86 */
       fra.me.REG[7] = CALL_mmloader___ModuleLoader___try_to_load_dir(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[1], fra.me.REG[2]);
@@ -800,7 +800,7 @@ val_t mmloader___ToolContext___get_module(val_t p0, val_t p1, val_t p2){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
       /* mmloader.nit:164 */
       fra.me.REG[5] = CALL_mmloader___ToolContext___directory_for(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5]);
index 21fba24..dae1caf 100644 (file)
@@ -92,6 +92,7 @@ val_t native_interface___frontier___NiVariable___needs_preparation(val_t p0){
       nit_abort("Reciever is null", NULL, LOCATE_native_interface___frontier, 39);
     }
     REGB1 = CALL_primitive_info___PrimitiveInfo___tagged(fra.me.REG[1])(fra.me.REG[1]);
+    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
     /* native_interface/frontier.nit:38 */
     REGB0 = REGB1;
   }
@@ -1695,7 +1696,7 @@ void native_interface___frontier___MMSrcMethod___compile_super_to_frontier(val_t
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB0)];
       /* native_interface/frontier.nit:229 */
       CALL_native_interface___frontier___NiVariable___prepare_for_nit(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
@@ -1747,7 +1748,7 @@ void native_interface___frontier___MMSrcMethod___compile_super_to_frontier(val_t
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
       /* native_interface/frontier.nit:233 */
       fra.me.REG[6] = CALL_native_interface___frontier___NiVariable___as_arg_to_nit(fra.me.REG[6])(fra.me.REG[6]);
@@ -2760,7 +2761,7 @@ void native_interface___frontier___MMSignature___compile_frontier(val_t p0, val_
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* native_interface/frontier.nit:347 */
       fra.me.REG[5] = CALL_native_interface___frontier___FrontierVisitor___types(fra.me.REG[1])(fra.me.REG[1]);
@@ -4442,6 +4443,7 @@ val_t native_interface___frontier___MMType___compile_condition_isa(val_t p0, val
   static val_t once_value_4; /* Once value */
   static val_t once_value_5; /* Once value */
   static val_t once_value_6; /* Once value */
+  static val_t once_value_7; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_native_interface___frontier;
   fra.me.line = 532;
@@ -4456,7 +4458,7 @@ val_t native_interface___frontier___MMType___compile_condition_isa(val_t p0, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   /* native_interface/frontier.nit:536 */
-  REGB0 = TAG_Int(11);
+  REGB0 = TAG_Int(13);
   fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_1) {
     fra.me.REG[3] = BOX_NativeString("( ISOBJ( ");
@@ -4469,7 +4471,7 @@ val_t native_interface___frontier___MMType___compile_condition_isa(val_t p0, val
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
   if (!once_value_2) {
-    fra.me.REG[3] = BOX_NativeString(" ) ? OBJISA( ");
+    fra.me.REG[3] = BOX_NativeString(" ) ? ISNULL( ");
     REGB0 = TAG_Int(13);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_2 = fra.me.REG[3];
@@ -4479,51 +4481,61 @@ val_t native_interface___frontier___MMType___compile_condition_isa(val_t p0, val
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
   if (!once_value_3) {
-    fra.me.REG[3] = BOX_NativeString(", ");
-    REGB0 = TAG_Int(2);
+    fra.me.REG[3] = BOX_NativeString(" ) || OBJISA( ");
+    REGB0 = TAG_Int(14);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_3 = fra.me.REG[3];
     register_static_object(&once_value_3);
   } else fra.me.REG[3] = once_value_3;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
+  if (!once_value_4) {
+    fra.me.REG[3] = BOX_NativeString(", ");
+    REGB0 = TAG_Int(2);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_4 = fra.me.REG[3];
+    register_static_object(&once_value_4);
+  } else fra.me.REG[3] = once_value_4;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   fra.me.REG[3] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_compiling___compiling_base___MMLocalClass___cname(fra.me.REG[3])(fra.me.REG[3]);
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  if (!once_value_4) {
+  if (!once_value_5) {
     fra.me.REG[3] = BOX_NativeString(" ): VALISA( ");
     REGB0 = TAG_Int(12);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_4 = fra.me.REG[3];
-    register_static_object(&once_value_4);
-  } else fra.me.REG[3] = once_value_4;
+    once_value_5 = fra.me.REG[3];
+    register_static_object(&once_value_5);
+  } else fra.me.REG[3] = once_value_5;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  if (!once_value_5) {
+  if (!once_value_6) {
     fra.me.REG[1] = BOX_NativeString(", ");
     REGB0 = TAG_Int(2);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_5 = fra.me.REG[1];
-    register_static_object(&once_value_5);
-  } else fra.me.REG[1] = once_value_5;
+    once_value_6 = fra.me.REG[1];
+    register_static_object(&once_value_6);
+  } else fra.me.REG[1] = once_value_6;
   fra.me.REG[1] = fra.me.REG[1];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
   fra.me.REG[0] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_compiling___compiling_base___MMLocalClass___cname(fra.me.REG[0])(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  if (!once_value_6) {
+  if (!once_value_7) {
     fra.me.REG[0] = BOX_NativeString(" ) )");
     REGB0 = TAG_Int(4);
     fra.me.REG[0] = NEW_String_standard___string___String___with_native(fra.me.REG[0], REGB0);
-    once_value_6 = fra.me.REG[0];
-    register_static_object(&once_value_6);
-  } else fra.me.REG[0] = once_value_6;
+    once_value_7 = fra.me.REG[0];
+    register_static_object(&once_value_7);
+  } else fra.me.REG[0] = once_value_7;
   fra.me.REG[0] = fra.me.REG[0];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   fra.me.REG[2] = CALL_standard___string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
-  goto label7;
-  label7: while(0);
+  goto label8;
+  label8: while(0);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[2];
 }
@@ -5629,7 +5641,7 @@ void native_interface___frontier___MMExplicitImport___compile_friendly_to_fronti
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB0)];
       /* native_interface/frontier.nit:634 */
       CALL_native_interface___frontier___NiVariable___prepare_for_nit(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
@@ -5850,7 +5862,7 @@ void native_interface___frontier___MMExplicitImport___compile_friendly_to_fronti
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)];
       /* native_interface/frontier.nit:655 */
       fra.me.REG[7] = CALL_native_interface___frontier___NiVariable___as_arg_to_nit(fra.me.REG[7])(fra.me.REG[7]);
index 1771ae2..fa444ef 100644 (file)
@@ -945,7 +945,7 @@ val_t native_interface___ni_metamodel___MMMethod___friendly_cparams(val_t p0, va
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
       /* native_interface/ni_metamodel.nit:127 */
       REGB1 = TAG_Int(5);
@@ -1482,7 +1482,7 @@ val_t native_interface___ni_metamodel___MMMethod___cparams(val_t p0){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* native_interface/ni_metamodel.nit:198 */
       REGB1 = TAG_Int(3);
index 33cdbc3..9b6891b 100644 (file)
@@ -17,8 +17,8 @@ val_t nit_version___Object___nit_version(val_t p0){
   fra.me.REG[0] = p0;
   /* nit_version.nit:3 */
   if (!once_value_1) {
-    fra.me.REG[0] = BOX_NativeString("v0.5-590-g649111c_nc3_dirty");
-    REGB0 = TAG_Int(27);
+    fra.me.REG[0] = BOX_NativeString("v0.6-5-g36c7240_nc3");
+    REGB0 = TAG_Int(19);
     fra.me.REG[0] = NEW_String_standard___string___String___with_native(fra.me.REG[0], REGB0);
     once_value_1 = fra.me.REG[0];
     register_static_object(&once_value_1);
index 05a06cf..b79dbdb 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # This shell script is generated by NIT to compile the program ./nitc.
 CLIBDIR="clib"
-../bin/gccx -v -d . -I $CLIBDIR -I . -o nitc -O "$@" \
+../bin/gccx -v -d . -I $CLIBDIR -I . -o nitc "$@" \
   $CLIBDIR/nit_main.c\
   $CLIBDIR/gc.c\
   $CLIBDIR/gc_static_objects_list.c\
@@ -26,6 +26,7 @@ CLIBDIR="clib"
   standard___environ._sep.c\
   string._nitni.c\
   string_nit.c\
+  standard___string._ffi.c\
   standard___string._sep.c\
   standard___collection._sep.c\
   standard___collection___range._sep.c\
index fd0f8f6..2ddb42b 100644 (file)
@@ -774,7 +774,7 @@ void nitc___NitCompiler___perform_work(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* nitc.nit:110 */
       fra.me.REG[3] = NEW_Program_program___Program___init(fra.me.REG[3], fra.me.REG[0]);
index dc62425..3c3dce9 100644 (file)
@@ -204,6 +204,8 @@ val_t NEW_Array_standard___collection___array___Array___filled_with(val_t p0, va
 typedef val_t (*NEW_Array_standard___collection___array___Array___filled_with_t)(val_t p0, val_t p1);
 val_t NEW_Array_standard___collection___array___Array___with_items(val_t p0);
 typedef val_t (*NEW_Array_standard___collection___array___Array___with_items_t)(val_t p0);
+val_t NEW_Array_standard___collection___array___Array___from(val_t p0);
+typedef val_t (*NEW_Array_standard___collection___array___Array___from_t)(val_t p0);
 val_t NEW_Array_standard___collection___array___Array___with_native(val_t p0, val_t p1);
 typedef val_t (*NEW_Array_standard___collection___array___Array___with_native_t)(val_t p0, val_t p1);
 void INIT_ATTRIBUTES__standard___collection___array___ArrayIterator(val_t p0);
@@ -299,6 +301,8 @@ void CHECKNEW_standard___collection___hash_collection___HashSet(val_t p0);
 typedef void (*CHECKNEW_standard___collection___hash_collection___HashSet_t)(val_t p0);
 val_t NEW_HashSet_standard___collection___hash_collection___HashSet___init(void);
 typedef val_t (*NEW_HashSet_standard___collection___hash_collection___HashSet___init_t)(void);
+val_t NEW_HashSet_standard___collection___hash_collection___HashSet___from(val_t p0);
+typedef val_t (*NEW_HashSet_standard___collection___hash_collection___HashSet___from_t)(val_t p0);
 void INIT_ATTRIBUTES__standard___collection___hash_collection___HashSetNode(val_t p0);
 typedef void (*INIT_ATTRIBUTES__standard___collection___hash_collection___HashSetNode_t)(val_t p0);
 val_t NEW_standard___collection___hash_collection___HashSetNode(void);
@@ -322,6 +326,10 @@ val_t NEW_String_standard___string___String___with_native(val_t p0, val_t p1);
 typedef val_t (*NEW_String_standard___string___String___with_native_t)(val_t p0, val_t p1);
 val_t NEW_String_standard___string___String___from_cstring(val_t p0);
 typedef val_t (*NEW_String_standard___string___String___from_cstring_t)(val_t p0);
+val_t NEW_String_standard___string___String___from_substring(val_t p0, val_t p1, val_t p2);
+typedef val_t (*NEW_String_standard___string___String___from_substring_t)(val_t p0, val_t p1, val_t p2);
+val_t NEW_String_standard___string___String___copy_from_native(val_t p0);
+typedef val_t (*NEW_String_standard___string___String___copy_from_native_t)(val_t p0);
 void INIT_ATTRIBUTES__standard___string___Buffer(val_t p0);
 typedef void (*INIT_ATTRIBUTES__standard___string___Buffer_t)(val_t p0);
 val_t NEW_standard___string___Buffer(void);
@@ -470,6 +478,8 @@ void CHECKNEW_location___SourceFile(val_t p0);
 typedef void (*CHECKNEW_location___SourceFile_t)(val_t p0);
 val_t NEW_SourceFile_location___SourceFile___init(val_t p0, val_t p1);
 typedef val_t (*NEW_SourceFile_location___SourceFile___init_t)(val_t p0, val_t p1);
+val_t NEW_SourceFile_location___SourceFile___from_string(val_t p0, val_t p1);
+typedef val_t (*NEW_SourceFile_location___SourceFile___from_string_t)(val_t p0, val_t p1);
 void INIT_ATTRIBUTES__location___Location(val_t p0);
 typedef void (*INIT_ATTRIBUTES__location___Location_t)(val_t p0);
 val_t NEW_location___Location(void);
@@ -931,15 +941,6 @@ val_t NEW_TKwenum_parser___lexer___TKwenum___init_tk(val_t p0);
 typedef val_t (*NEW_TKwenum_parser___lexer___TKwenum___init_tk_t)(val_t p0);
 val_t NEW_TKwenum_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_TKwenum_parser___parser_nodes___ANode___init_t)(void);
-void INIT_ATTRIBUTES__parser___parser_nodes___TKwspecial(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___TKwspecial_t)(val_t p0);
-val_t NEW_parser___parser_nodes___TKwspecial(void);
-void CHECKNEW_parser___parser_nodes___TKwspecial(val_t p0);
-typedef void (*CHECKNEW_parser___parser_nodes___TKwspecial_t)(val_t p0);
-val_t NEW_TKwspecial_parser___lexer___TKwspecial___init_tk(val_t p0);
-typedef val_t (*NEW_TKwspecial_parser___lexer___TKwspecial___init_tk_t)(val_t p0);
-val_t NEW_TKwspecial_parser___parser_nodes___ANode___init(void);
-typedef val_t (*NEW_TKwspecial_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___TKwend(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___TKwend_t)(val_t p0);
 val_t NEW_parser___parser_nodes___TKwend(void);
@@ -1579,6 +1580,15 @@ val_t NEW_TBang_parser___lexer___TBang___init_tk(val_t p0);
 typedef val_t (*NEW_TBang_parser___lexer___TBang___init_tk_t)(val_t p0);
 val_t NEW_TBang_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_TBang_parser___parser_nodes___ANode___init_t)(void);
+void INIT_ATTRIBUTES__parser___parser_nodes___TAt(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___TAt_t)(val_t p0);
+val_t NEW_parser___parser_nodes___TAt(void);
+void CHECKNEW_parser___parser_nodes___TAt(val_t p0);
+typedef void (*CHECKNEW_parser___parser_nodes___TAt_t)(val_t p0);
+val_t NEW_TAt_parser___lexer___TAt___init_tk(val_t p0);
+typedef val_t (*NEW_TAt_parser___lexer___TAt___init_tk_t)(val_t p0);
+val_t NEW_TAt_parser___parser_nodes___ANode___init(void);
+typedef val_t (*NEW_TAt_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___TClassid(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___TClassid_t)(val_t p0);
 val_t NEW_parser___parser_nodes___TClassid(void);
@@ -1701,10 +1711,10 @@ typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___EOF_t)(val_t p0);
 val_t NEW_parser___parser_nodes___EOF(void);
 void CHECKNEW_parser___parser_nodes___EOF(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___EOF_t)(val_t p0);
-val_t NEW_EOF_parser___lexer___EOF___init(val_t p0);
-typedef val_t (*NEW_EOF_parser___lexer___EOF___init_t)(val_t p0);
-val_t NEW_EOF_parser___parser_nodes___EOF___noinit(void);
-typedef val_t (*NEW_EOF_parser___parser_nodes___EOF___noinit_t)(void);
+val_t NEW_EOF_parser___lexer___EOF___init_tk(val_t p0);
+typedef val_t (*NEW_EOF_parser___lexer___EOF___init_tk_t)(val_t p0);
+val_t NEW_EOF_parser___parser_nodes___ANode___init(void);
+typedef val_t (*NEW_EOF_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___AError(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___AError_t)(val_t p0);
 val_t NEW_parser___parser_nodes___AError(void);
@@ -1712,8 +1722,36 @@ void CHECKNEW_parser___parser_nodes___AError(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___AError_t)(val_t p0);
 val_t NEW_AError_parser___lexer___AError___init_error(val_t p0, val_t p1);
 typedef val_t (*NEW_AError_parser___lexer___AError___init_error_t)(val_t p0, val_t p1);
-val_t NEW_AError_parser___parser_nodes___AError___noinit(void);
-typedef val_t (*NEW_AError_parser___parser_nodes___AError___noinit_t)(void);
+val_t NEW_AError_parser___lexer___EOF___init_tk(val_t p0);
+typedef val_t (*NEW_AError_parser___lexer___EOF___init_tk_t)(val_t p0);
+val_t NEW_AError_parser___parser_nodes___ANode___init(void);
+typedef val_t (*NEW_AError_parser___parser_nodes___ANode___init_t)(void);
+void INIT_ATTRIBUTES__parser___parser_nodes___ALexerError(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___ALexerError_t)(val_t p0);
+val_t NEW_parser___parser_nodes___ALexerError(void);
+void CHECKNEW_parser___parser_nodes___ALexerError(val_t p0);
+typedef void (*CHECKNEW_parser___parser_nodes___ALexerError_t)(val_t p0);
+val_t NEW_ALexerError_parser___lexer___ALexerError___init_lexer_error(val_t p0, val_t p1, val_t p2);
+typedef val_t (*NEW_ALexerError_parser___lexer___ALexerError___init_lexer_error_t)(val_t p0, val_t p1, val_t p2);
+val_t NEW_ALexerError_parser___lexer___AError___init_error(val_t p0, val_t p1);
+typedef val_t (*NEW_ALexerError_parser___lexer___AError___init_error_t)(val_t p0, val_t p1);
+val_t NEW_ALexerError_parser___parser_nodes___ANode___init(void);
+typedef val_t (*NEW_ALexerError_parser___parser_nodes___ANode___init_t)(void);
+val_t NEW_ALexerError_parser___lexer___EOF___init_tk(val_t p0);
+typedef val_t (*NEW_ALexerError_parser___lexer___EOF___init_tk_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___parser_nodes___AParserError(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___AParserError_t)(val_t p0);
+val_t NEW_parser___parser_nodes___AParserError(void);
+void CHECKNEW_parser___parser_nodes___AParserError(val_t p0);
+typedef void (*CHECKNEW_parser___parser_nodes___AParserError_t)(val_t p0);
+val_t NEW_AParserError_parser___lexer___AParserError___init_parser_error(val_t p0, val_t p1, val_t p2);
+typedef val_t (*NEW_AParserError_parser___lexer___AParserError___init_parser_error_t)(val_t p0, val_t p1, val_t p2);
+val_t NEW_AParserError_parser___lexer___AError___init_error(val_t p0, val_t p1);
+typedef val_t (*NEW_AParserError_parser___lexer___AError___init_error_t)(val_t p0, val_t p1);
+val_t NEW_AParserError_parser___parser_nodes___ANode___init(void);
+typedef val_t (*NEW_AParserError_parser___parser_nodes___ANode___init_t)(void);
+val_t NEW_AParserError_parser___lexer___EOF___init_tk(val_t p0);
+typedef val_t (*NEW_AParserError_parser___lexer___EOF___init_tk_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___parser_nodes___AModule(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___AModule_t)(val_t p0);
 val_t NEW_parser___parser_nodes___AModule(void);
@@ -1732,8 +1770,8 @@ void CHECKNEW_parser___parser_nodes___AModuledecl(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___AModuledecl_t)(val_t p0);
 val_t NEW_AModuledecl_parser___parser_prod___AModuledecl___empty_init(void);
 typedef val_t (*NEW_AModuledecl_parser___parser_prod___AModuledecl___empty_init_t)(void);
-val_t NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, val_t p2);
-typedef val_t (*NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl_t)(val_t p0, val_t p1, val_t p2);
+val_t NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, val_t p2, val_t p3);
+typedef val_t (*NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl_t)(val_t p0, val_t p1, val_t p2, val_t p3);
 val_t NEW_AModuledecl_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AModuledecl_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___AStdImport(val_t p0);
@@ -1743,8 +1781,8 @@ void CHECKNEW_parser___parser_nodes___AStdImport(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___AStdImport_t)(val_t p0);
 val_t NEW_AStdImport_parser___parser_prod___AStdImport___empty_init(void);
 typedef val_t (*NEW_AStdImport_parser___parser_prod___AStdImport___empty_init_t)(void);
-val_t NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val_t p2);
-typedef val_t (*NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport_t)(val_t p0, val_t p1, val_t p2);
+val_t NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val_t p2, val_t p3);
+typedef val_t (*NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport_t)(val_t p0, val_t p1, val_t p2, val_t p3);
 val_t NEW_AStdImport_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AStdImport_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___ANoImport(val_t p0);
@@ -1809,8 +1847,8 @@ void CHECKNEW_parser___parser_nodes___AStdClassdef(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___AStdClassdef_t)(val_t p0);
 val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___empty_init(void);
 typedef val_t (*NEW_AStdClassdef_parser___parser_prod___AStdClassdef___empty_init_t)(void);
-val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9);
-typedef val_t (*NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9);
+val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10);
+typedef val_t (*NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10);
 val_t NEW_AStdClassdef_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AStdClassdef_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___ATopClassdef(val_t p0);
@@ -1886,8 +1924,8 @@ void CHECKNEW_parser___parser_nodes___AExternClasskind(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___AExternClasskind_t)(val_t p0);
 val_t NEW_AExternClasskind_parser___parser_prod___AExternClasskind___empty_init(void);
 typedef val_t (*NEW_AExternClasskind_parser___parser_prod___AExternClasskind___empty_init_t)(void);
-val_t NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind(val_t p0);
-typedef val_t (*NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind_t)(val_t p0);
+val_t NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind(val_t p0, val_t p1);
+typedef val_t (*NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind_t)(val_t p0, val_t p1);
 val_t NEW_AExternClasskind_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AExternClasskind_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___AFormaldef(val_t p0);
@@ -1897,8 +1935,8 @@ void CHECKNEW_parser___parser_nodes___AFormaldef(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___AFormaldef_t)(val_t p0);
 val_t NEW_AFormaldef_parser___parser_prod___AFormaldef___empty_init(void);
 typedef val_t (*NEW_AFormaldef_parser___parser_prod___AFormaldef___empty_init_t)(void);
-val_t NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1);
-typedef val_t (*NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef_t)(val_t p0, val_t p1);
+val_t NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val_t p2);
+typedef val_t (*NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef_t)(val_t p0, val_t p1, val_t p2);
 val_t NEW_AFormaldef_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AFormaldef_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___ASuperclass(val_t p0);
@@ -1919,8 +1957,8 @@ void CHECKNEW_parser___parser_nodes___AAttrPropdef(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___AAttrPropdef_t)(val_t p0);
 val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___empty_init(void);
 typedef val_t (*NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___empty_init_t)(void);
-val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9);
-typedef val_t (*NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9);
+val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10);
+typedef val_t (*NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10);
 val_t NEW_AAttrPropdef_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AAttrPropdef_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___ADeferredMethPropdef(val_t p0);
@@ -1932,8 +1970,8 @@ val_t NEW_ADeferredMethPropdef_parser___parser_prod___AMethPropdef___empty_init(
 typedef val_t (*NEW_ADeferredMethPropdef_parser___parser_prod___AMethPropdef___empty_init_t)(void);
 val_t NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___empty_init(void);
 typedef val_t (*NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___empty_init_t)(void);
-val_t NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5);
-typedef val_t (*NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5);
+val_t NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+typedef val_t (*NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
 val_t NEW_ADeferredMethPropdef_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_ADeferredMethPropdef_parser___parser_nodes___ANode___init_t)(void);
 val_t NEW_ADeferredMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
@@ -1977,8 +2015,8 @@ val_t NEW_AConcreteMethPropdef_parser___parser_prod___AMethPropdef___empty_init(
 typedef val_t (*NEW_AConcreteMethPropdef_parser___parser_prod___AMethPropdef___empty_init_t)(void);
 val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___empty_init(void);
 typedef val_t (*NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___empty_init_t)(void);
-val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
-typedef val_t (*NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
+typedef val_t (*NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
 val_t NEW_AConcreteMethPropdef_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AConcreteMethPropdef_parser___parser_nodes___ANode___init_t)(void);
 val_t NEW_AConcreteMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
@@ -1992,14 +2030,14 @@ val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___emp
 typedef val_t (*NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___empty_init_t)(void);
 val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___empty_init(void);
 typedef val_t (*NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___empty_init_t)(void);
-val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
-typedef val_t (*NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
+typedef val_t (*NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
 val_t NEW_AConcreteInitPropdef_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AConcreteInitPropdef_parser___parser_nodes___ANode___init_t)(void);
 val_t NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___empty_init(void);
 typedef val_t (*NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___empty_init_t)(void);
-val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
-typedef val_t (*NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
+typedef val_t (*NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
 val_t NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 typedef val_t (*NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 void INIT_ATTRIBUTES__parser___parser_nodes___AExternInitPropdef(val_t p0);
@@ -2032,8 +2070,8 @@ val_t NEW_AMainMethPropdef_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AMainMethPropdef_parser___parser_nodes___ANode___init_t)(void);
 val_t NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___empty_init(void);
 typedef val_t (*NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___empty_init_t)(void);
-val_t NEW_AMainMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
-typedef val_t (*NEW_AMainMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+val_t NEW_AMainMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
+typedef val_t (*NEW_AMainMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
 val_t NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 typedef val_t (*NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 void INIT_ATTRIBUTES__parser___parser_nodes___AExternCalls(val_t p0);
@@ -2159,8 +2197,8 @@ void CHECKNEW_parser___parser_nodes___ATypePropdef(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___ATypePropdef_t)(val_t p0);
 val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___empty_init(void);
 typedef val_t (*NEW_ATypePropdef_parser___parser_prod___ATypePropdef___empty_init_t)(void);
-val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5);
-typedef val_t (*NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5);
+val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+typedef val_t (*NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
 val_t NEW_ATypePropdef_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_ATypePropdef_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___AReadAble(val_t p0);
@@ -2401,8 +2439,8 @@ void CHECKNEW_parser___parser_nodes___AParam(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___AParam_t)(val_t p0);
 val_t NEW_AParam_parser___parser_prod___AParam___empty_init(void);
 typedef val_t (*NEW_AParam_parser___parser_prod___AParam___empty_init_t)(void);
-val_t NEW_AParam_parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2);
-typedef val_t (*NEW_AParam_parser___parser_prod___AParam___init_aparam_t)(val_t p0, val_t p1, val_t p2);
+val_t NEW_AParam_parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, val_t p3);
+typedef val_t (*NEW_AParam_parser___parser_prod___AParam___init_aparam_t)(val_t p0, val_t p1, val_t p2, val_t p3);
 val_t NEW_AParam_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AParam_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___AClosureDecl(val_t p0);
@@ -2423,8 +2461,8 @@ void CHECKNEW_parser___parser_nodes___AType(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___AType_t)(val_t p0);
 val_t NEW_AType_parser___parser_prod___AType___empty_init(void);
 typedef val_t (*NEW_AType_parser___parser_prod___AType___empty_init_t)(void);
-val_t NEW_AType_parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2);
-typedef val_t (*NEW_AType_parser___parser_prod___AType___init_atype_t)(val_t p0, val_t p1, val_t p2);
+val_t NEW_AType_parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3);
+typedef val_t (*NEW_AType_parser___parser_prod___AType___init_atype_t)(val_t p0, val_t p1, val_t p2, val_t p3);
 val_t NEW_AType_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AType_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___ALabel(val_t p0);
@@ -2456,8 +2494,8 @@ void CHECKNEW_parser___parser_nodes___AVardeclExpr(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___AVardeclExpr_t)(val_t p0);
 val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___empty_init(void);
 typedef val_t (*NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___empty_init_t)(void);
-val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
-typedef val_t (*NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
+val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5);
+typedef val_t (*NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5);
 val_t NEW_AVardeclExpr_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AVardeclExpr_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___AReturnExpr(val_t p0);
@@ -3152,12 +3190,12 @@ val_t NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___empty_init(void);
 typedef val_t (*NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___empty_init_t)(void);
 val_t NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___empty_init(void);
 typedef val_t (*NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___empty_init_t)(void);
-val_t NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, val_t p2, val_t p3);
-typedef val_t (*NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr_t)(val_t p0, val_t p1, val_t p2, val_t p3);
+val_t NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
+typedef val_t (*NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 val_t NEW_ACrangeExpr_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_ACrangeExpr_parser___parser_nodes___ANode___init_t)(void);
-val_t NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1);
-typedef val_t (*NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr_t)(val_t p0, val_t p1);
+val_t NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2);
+typedef val_t (*NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr_t)(val_t p0, val_t p1, val_t p2);
 void INIT_ATTRIBUTES__parser___parser_nodes___AOrangeExpr(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___AOrangeExpr_t)(val_t p0);
 val_t NEW_parser___parser_nodes___AOrangeExpr(void);
@@ -3167,12 +3205,12 @@ val_t NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___empty_init(void);
 typedef val_t (*NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___empty_init_t)(void);
 val_t NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___empty_init(void);
 typedef val_t (*NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___empty_init_t)(void);
-val_t NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, val_t p2, val_t p3);
-typedef val_t (*NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr_t)(val_t p0, val_t p1, val_t p2, val_t p3);
+val_t NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
+typedef val_t (*NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 val_t NEW_AOrangeExpr_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AOrangeExpr_parser___parser_nodes___ANode___init_t)(void);
-val_t NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1);
-typedef val_t (*NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr_t)(val_t p0, val_t p1);
+val_t NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2);
+typedef val_t (*NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr_t)(val_t p0, val_t p1, val_t p2);
 void INIT_ATTRIBUTES__parser___parser_nodes___AArrayExpr(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___AArrayExpr_t)(val_t p0);
 val_t NEW_parser___parser_nodes___AArrayExpr(void);
@@ -3180,8 +3218,8 @@ void CHECKNEW_parser___parser_nodes___AArrayExpr(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___AArrayExpr_t)(val_t p0);
 val_t NEW_AArrayExpr_parser___parser_prod___AArrayExpr___empty_init(void);
 typedef val_t (*NEW_AArrayExpr_parser___parser_prod___AArrayExpr___empty_init_t)(void);
-val_t NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr(val_t p0);
-typedef val_t (*NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr_t)(val_t p0);
+val_t NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1);
+typedef val_t (*NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr_t)(val_t p0, val_t p1);
 val_t NEW_AArrayExpr_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AArrayExpr_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___ASelfExpr(val_t p0);
@@ -3191,8 +3229,8 @@ void CHECKNEW_parser___parser_nodes___ASelfExpr(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___ASelfExpr_t)(val_t p0);
 val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___empty_init(void);
 typedef val_t (*NEW_ASelfExpr_parser___parser_prod___ASelfExpr___empty_init_t)(void);
-val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0);
-typedef val_t (*NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr_t)(val_t p0);
+val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1);
+typedef val_t (*NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr_t)(val_t p0, val_t p1);
 val_t NEW_ASelfExpr_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_ASelfExpr_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___AImplicitSelfExpr(val_t p0);
@@ -3208,8 +3246,8 @@ val_t NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimp
 typedef val_t (*NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr_t)(void);
 val_t NEW_AImplicitSelfExpr_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AImplicitSelfExpr_parser___parser_nodes___ANode___init_t)(void);
-val_t NEW_AImplicitSelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0);
-typedef val_t (*NEW_AImplicitSelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr_t)(val_t p0);
+val_t NEW_AImplicitSelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1);
+typedef val_t (*NEW_AImplicitSelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr_t)(val_t p0, val_t p1);
 void INIT_ATTRIBUTES__parser___parser_nodes___ATrueExpr(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___ATrueExpr_t)(val_t p0);
 val_t NEW_parser___parser_nodes___ATrueExpr(void);
@@ -3217,8 +3255,8 @@ void CHECKNEW_parser___parser_nodes___ATrueExpr(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___ATrueExpr_t)(val_t p0);
 val_t NEW_ATrueExpr_parser___parser_prod___ATrueExpr___empty_init(void);
 typedef val_t (*NEW_ATrueExpr_parser___parser_prod___ATrueExpr___empty_init_t)(void);
-val_t NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr(val_t p0);
-typedef val_t (*NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr_t)(val_t p0);
+val_t NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr(val_t p0, val_t p1);
+typedef val_t (*NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr_t)(val_t p0, val_t p1);
 val_t NEW_ATrueExpr_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_ATrueExpr_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___AFalseExpr(val_t p0);
@@ -3228,8 +3266,8 @@ void CHECKNEW_parser___parser_nodes___AFalseExpr(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___AFalseExpr_t)(val_t p0);
 val_t NEW_AFalseExpr_parser___parser_prod___AFalseExpr___empty_init(void);
 typedef val_t (*NEW_AFalseExpr_parser___parser_prod___AFalseExpr___empty_init_t)(void);
-val_t NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr(val_t p0);
-typedef val_t (*NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr_t)(val_t p0);
+val_t NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr(val_t p0, val_t p1);
+typedef val_t (*NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr_t)(val_t p0, val_t p1);
 val_t NEW_AFalseExpr_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AFalseExpr_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___ANullExpr(val_t p0);
@@ -3239,8 +3277,8 @@ void CHECKNEW_parser___parser_nodes___ANullExpr(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___ANullExpr_t)(val_t p0);
 val_t NEW_ANullExpr_parser___parser_prod___ANullExpr___empty_init(void);
 typedef val_t (*NEW_ANullExpr_parser___parser_prod___ANullExpr___empty_init_t)(void);
-val_t NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr(val_t p0);
-typedef val_t (*NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr_t)(val_t p0);
+val_t NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr(val_t p0, val_t p1);
+typedef val_t (*NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr_t)(val_t p0, val_t p1);
 val_t NEW_ANullExpr_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_ANullExpr_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___AIntExpr(val_t p0);
@@ -3250,8 +3288,8 @@ void CHECKNEW_parser___parser_nodes___AIntExpr(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___AIntExpr_t)(val_t p0);
 val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___empty_init(void);
 typedef val_t (*NEW_AIntExpr_parser___parser_prod___AIntExpr___empty_init_t)(void);
-val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(val_t p0);
-typedef val_t (*NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr_t)(val_t p0);
+val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(val_t p0, val_t p1);
+typedef val_t (*NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr_t)(val_t p0, val_t p1);
 val_t NEW_AIntExpr_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AIntExpr_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___AFloatExpr(val_t p0);
@@ -3261,8 +3299,8 @@ void CHECKNEW_parser___parser_nodes___AFloatExpr(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___AFloatExpr_t)(val_t p0);
 val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___empty_init(void);
 typedef val_t (*NEW_AFloatExpr_parser___parser_prod___AFloatExpr___empty_init_t)(void);
-val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0);
-typedef val_t (*NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr_t)(val_t p0);
+val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0, val_t p1);
+typedef val_t (*NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr_t)(val_t p0, val_t p1);
 val_t NEW_AFloatExpr_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AFloatExpr_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___ACharExpr(val_t p0);
@@ -3272,8 +3310,8 @@ void CHECKNEW_parser___parser_nodes___ACharExpr(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___ACharExpr_t)(val_t p0);
 val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___empty_init(void);
 typedef val_t (*NEW_ACharExpr_parser___parser_prod___ACharExpr___empty_init_t)(void);
-val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(val_t p0);
-typedef val_t (*NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr_t)(val_t p0);
+val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(val_t p0, val_t p1);
+typedef val_t (*NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr_t)(val_t p0, val_t p1);
 val_t NEW_ACharExpr_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_ACharExpr_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___AStringExpr(val_t p0);
@@ -3283,8 +3321,8 @@ void CHECKNEW_parser___parser_nodes___AStringExpr(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___AStringExpr_t)(val_t p0);
 val_t NEW_AStringExpr_parser___parser_prod___AStringExpr___empty_init(void);
 typedef val_t (*NEW_AStringExpr_parser___parser_prod___AStringExpr___empty_init_t)(void);
-val_t NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr(val_t p0);
-typedef val_t (*NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr_t)(val_t p0);
+val_t NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr(val_t p0, val_t p1);
+typedef val_t (*NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr_t)(val_t p0, val_t p1);
 val_t NEW_AStringExpr_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AStringExpr_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___AStartStringExpr(val_t p0);
@@ -3327,8 +3365,8 @@ void CHECKNEW_parser___parser_nodes___ASuperstringExpr(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___ASuperstringExpr_t)(val_t p0);
 val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___empty_init(void);
 typedef val_t (*NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___empty_init_t)(void);
-val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0);
-typedef val_t (*NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr_t)(val_t p0);
+val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, val_t p1);
+typedef val_t (*NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr_t)(val_t p0, val_t p1);
 val_t NEW_ASuperstringExpr_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_ASuperstringExpr_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___AParExpr(val_t p0);
@@ -3338,8 +3376,8 @@ void CHECKNEW_parser___parser_nodes___AParExpr(val_t p0);
 typedef void (*CHECKNEW_parser___parser_nodes___AParExpr_t)(val_t p0);
 val_t NEW_AParExpr_parser___parser_prod___AParExpr___empty_init(void);
 typedef val_t (*NEW_AParExpr_parser___parser_prod___AParExpr___empty_init_t)(void);
-val_t NEW_AParExpr_parser___parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, val_t p2);
-typedef val_t (*NEW_AParExpr_parser___parser_prod___AParExpr___init_aparexpr_t)(val_t p0, val_t p1, val_t p2);
+val_t NEW_AParExpr_parser___parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, val_t p2, val_t p3);
+typedef val_t (*NEW_AParExpr_parser___parser_prod___AParExpr___init_aparexpr_t)(val_t p0, val_t p1, val_t p2, val_t p3);
 val_t NEW_AParExpr_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_AParExpr_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___AAsCastExpr(val_t p0);
@@ -3529,6 +3567,127 @@ val_t NEW_ADoc_parser___parser_prod___ADoc___init_adoc(val_t p0);
 typedef val_t (*NEW_ADoc_parser___parser_prod___ADoc___init_adoc_t)(val_t p0);
 val_t NEW_ADoc_parser___parser_nodes___ANode___init(void);
 typedef val_t (*NEW_ADoc_parser___parser_nodes___ANode___init_t)(void);
+void INIT_ATTRIBUTES__parser___parser_nodes___AAnnotations(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___AAnnotations_t)(val_t p0);
+val_t NEW_parser___parser_nodes___AAnnotations(void);
+void CHECKNEW_parser___parser_nodes___AAnnotations(val_t p0);
+typedef void (*CHECKNEW_parser___parser_nodes___AAnnotations_t)(val_t p0);
+val_t NEW_AAnnotations_parser___parser_prod___AAnnotations___empty_init(void);
+typedef val_t (*NEW_AAnnotations_parser___parser_prod___AAnnotations___empty_init_t)(void);
+val_t NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(val_t p0, val_t p1, val_t p2, val_t p3);
+typedef val_t (*NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations_t)(val_t p0, val_t p1, val_t p2, val_t p3);
+val_t NEW_AAnnotations_parser___parser_nodes___ANode___init(void);
+typedef val_t (*NEW_AAnnotations_parser___parser_nodes___ANode___init_t)(void);
+void INIT_ATTRIBUTES__parser___parser_nodes___AAnnotation(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___AAnnotation_t)(val_t p0);
+val_t NEW_parser___parser_nodes___AAnnotation(void);
+void CHECKNEW_parser___parser_nodes___AAnnotation(val_t p0);
+typedef void (*CHECKNEW_parser___parser_nodes___AAnnotation_t)(val_t p0);
+val_t NEW_AAnnotation_parser___parser_prod___AAnnotation___empty_init(void);
+typedef val_t (*NEW_AAnnotation_parser___parser_prod___AAnnotation___empty_init_t)(void);
+val_t NEW_AAnnotation_parser___parser_prod___AAnnotation___init_aannotation(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
+typedef val_t (*NEW_AAnnotation_parser___parser_prod___AAnnotation___init_aannotation_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
+val_t NEW_AAnnotation_parser___parser_nodes___ANode___init(void);
+typedef val_t (*NEW_AAnnotation_parser___parser_nodes___ANode___init_t)(void);
+void INIT_ATTRIBUTES__parser___parser_nodes___ATypeAtArg(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___ATypeAtArg_t)(val_t p0);
+val_t NEW_parser___parser_nodes___ATypeAtArg(void);
+void CHECKNEW_parser___parser_nodes___ATypeAtArg(val_t p0);
+typedef void (*CHECKNEW_parser___parser_nodes___ATypeAtArg_t)(val_t p0);
+val_t NEW_ATypeAtArg_parser___parser_prod___ATypeAtArg___empty_init(void);
+typedef val_t (*NEW_ATypeAtArg_parser___parser_prod___ATypeAtArg___empty_init_t)(void);
+val_t NEW_ATypeAtArg_parser___parser_prod___ATypeAtArg___init_atypeatarg(val_t p0);
+typedef val_t (*NEW_ATypeAtArg_parser___parser_prod___ATypeAtArg___init_atypeatarg_t)(val_t p0);
+val_t NEW_ATypeAtArg_parser___parser_nodes___ANode___init(void);
+typedef val_t (*NEW_ATypeAtArg_parser___parser_nodes___ANode___init_t)(void);
+void INIT_ATTRIBUTES__parser___parser_nodes___AExprAtArg(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___AExprAtArg_t)(val_t p0);
+val_t NEW_parser___parser_nodes___AExprAtArg(void);
+void CHECKNEW_parser___parser_nodes___AExprAtArg(val_t p0);
+typedef void (*CHECKNEW_parser___parser_nodes___AExprAtArg_t)(val_t p0);
+val_t NEW_AExprAtArg_parser___parser_prod___AExprAtArg___empty_init(void);
+typedef val_t (*NEW_AExprAtArg_parser___parser_prod___AExprAtArg___empty_init_t)(void);
+val_t NEW_AExprAtArg_parser___parser_prod___AExprAtArg___init_aexpratarg(val_t p0);
+typedef val_t (*NEW_AExprAtArg_parser___parser_prod___AExprAtArg___init_aexpratarg_t)(val_t p0);
+val_t NEW_AExprAtArg_parser___parser_nodes___ANode___init(void);
+typedef val_t (*NEW_AExprAtArg_parser___parser_nodes___ANode___init_t)(void);
+void INIT_ATTRIBUTES__parser___parser_nodes___AAtAtArg(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___AAtAtArg_t)(val_t p0);
+val_t NEW_parser___parser_nodes___AAtAtArg(void);
+void CHECKNEW_parser___parser_nodes___AAtAtArg(val_t p0);
+typedef void (*CHECKNEW_parser___parser_nodes___AAtAtArg_t)(val_t p0);
+val_t NEW_AAtAtArg_parser___parser_prod___AAtAtArg___empty_init(void);
+typedef val_t (*NEW_AAtAtArg_parser___parser_prod___AAtAtArg___empty_init_t)(void);
+val_t NEW_AAtAtArg_parser___parser_prod___AAtAtArg___init_aatatarg(val_t p0);
+typedef val_t (*NEW_AAtAtArg_parser___parser_prod___AAtAtArg___init_aatatarg_t)(val_t p0);
+val_t NEW_AAtAtArg_parser___parser_nodes___ANode___init(void);
+typedef val_t (*NEW_AAtAtArg_parser___parser_nodes___ANode___init_t)(void);
+void INIT_ATTRIBUTES__parser___parser_nodes___AIdAtid(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___AIdAtid_t)(val_t p0);
+val_t NEW_parser___parser_nodes___AIdAtid(void);
+void CHECKNEW_parser___parser_nodes___AIdAtid(val_t p0);
+typedef void (*CHECKNEW_parser___parser_nodes___AIdAtid_t)(val_t p0);
+val_t NEW_AIdAtid_parser___parser_prod___AIdAtid___empty_init(void);
+typedef val_t (*NEW_AIdAtid_parser___parser_prod___AIdAtid___empty_init_t)(void);
+val_t NEW_AIdAtid_parser___parser_prod___AIdAtid___init_aidatid(val_t p0);
+typedef val_t (*NEW_AIdAtid_parser___parser_prod___AIdAtid___init_aidatid_t)(val_t p0);
+val_t NEW_AIdAtid_parser___parser_nodes___ANode___init(void);
+typedef val_t (*NEW_AIdAtid_parser___parser_nodes___ANode___init_t)(void);
+void INIT_ATTRIBUTES__parser___parser_nodes___AKwexternAtid(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___AKwexternAtid_t)(val_t p0);
+val_t NEW_parser___parser_nodes___AKwexternAtid(void);
+void CHECKNEW_parser___parser_nodes___AKwexternAtid(val_t p0);
+typedef void (*CHECKNEW_parser___parser_nodes___AKwexternAtid_t)(val_t p0);
+val_t NEW_AKwexternAtid_parser___parser_prod___AKwexternAtid___empty_init(void);
+typedef val_t (*NEW_AKwexternAtid_parser___parser_prod___AKwexternAtid___empty_init_t)(void);
+val_t NEW_AKwexternAtid_parser___parser_prod___AKwexternAtid___init_akwexternatid(val_t p0);
+typedef val_t (*NEW_AKwexternAtid_parser___parser_prod___AKwexternAtid___init_akwexternatid_t)(val_t p0);
+val_t NEW_AKwexternAtid_parser___parser_nodes___ANode___init(void);
+typedef val_t (*NEW_AKwexternAtid_parser___parser_nodes___ANode___init_t)(void);
+void INIT_ATTRIBUTES__parser___parser_nodes___AKwinternAtid(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___AKwinternAtid_t)(val_t p0);
+val_t NEW_parser___parser_nodes___AKwinternAtid(void);
+void CHECKNEW_parser___parser_nodes___AKwinternAtid(val_t p0);
+typedef void (*CHECKNEW_parser___parser_nodes___AKwinternAtid_t)(val_t p0);
+val_t NEW_AKwinternAtid_parser___parser_prod___AKwinternAtid___empty_init(void);
+typedef val_t (*NEW_AKwinternAtid_parser___parser_prod___AKwinternAtid___empty_init_t)(void);
+val_t NEW_AKwinternAtid_parser___parser_prod___AKwinternAtid___init_akwinternatid(val_t p0);
+typedef val_t (*NEW_AKwinternAtid_parser___parser_prod___AKwinternAtid___init_akwinternatid_t)(val_t p0);
+val_t NEW_AKwinternAtid_parser___parser_nodes___ANode___init(void);
+typedef val_t (*NEW_AKwinternAtid_parser___parser_nodes___ANode___init_t)(void);
+void INIT_ATTRIBUTES__parser___parser_nodes___AKwreadableAtid(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___AKwreadableAtid_t)(val_t p0);
+val_t NEW_parser___parser_nodes___AKwreadableAtid(void);
+void CHECKNEW_parser___parser_nodes___AKwreadableAtid(val_t p0);
+typedef void (*CHECKNEW_parser___parser_nodes___AKwreadableAtid_t)(val_t p0);
+val_t NEW_AKwreadableAtid_parser___parser_prod___AKwreadableAtid___empty_init(void);
+typedef val_t (*NEW_AKwreadableAtid_parser___parser_prod___AKwreadableAtid___empty_init_t)(void);
+val_t NEW_AKwreadableAtid_parser___parser_prod___AKwreadableAtid___init_akwreadableatid(val_t p0);
+typedef val_t (*NEW_AKwreadableAtid_parser___parser_prod___AKwreadableAtid___init_akwreadableatid_t)(val_t p0);
+val_t NEW_AKwreadableAtid_parser___parser_nodes___ANode___init(void);
+typedef val_t (*NEW_AKwreadableAtid_parser___parser_nodes___ANode___init_t)(void);
+void INIT_ATTRIBUTES__parser___parser_nodes___AKwwritableAtid(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___AKwwritableAtid_t)(val_t p0);
+val_t NEW_parser___parser_nodes___AKwwritableAtid(void);
+void CHECKNEW_parser___parser_nodes___AKwwritableAtid(val_t p0);
+typedef void (*CHECKNEW_parser___parser_nodes___AKwwritableAtid_t)(val_t p0);
+val_t NEW_AKwwritableAtid_parser___parser_prod___AKwwritableAtid___empty_init(void);
+typedef val_t (*NEW_AKwwritableAtid_parser___parser_prod___AKwwritableAtid___empty_init_t)(void);
+val_t NEW_AKwwritableAtid_parser___parser_prod___AKwwritableAtid___init_akwwritableatid(val_t p0);
+typedef val_t (*NEW_AKwwritableAtid_parser___parser_prod___AKwwritableAtid___init_akwwritableatid_t)(val_t p0);
+val_t NEW_AKwwritableAtid_parser___parser_nodes___ANode___init(void);
+typedef val_t (*NEW_AKwwritableAtid_parser___parser_nodes___ANode___init_t)(void);
+void INIT_ATTRIBUTES__parser___parser_nodes___AKwimportAtid(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___AKwimportAtid_t)(val_t p0);
+val_t NEW_parser___parser_nodes___AKwimportAtid(void);
+void CHECKNEW_parser___parser_nodes___AKwimportAtid(val_t p0);
+typedef void (*CHECKNEW_parser___parser_nodes___AKwimportAtid_t)(val_t p0);
+val_t NEW_AKwimportAtid_parser___parser_prod___AKwimportAtid___empty_init(void);
+typedef val_t (*NEW_AKwimportAtid_parser___parser_prod___AKwimportAtid___empty_init_t)(void);
+val_t NEW_AKwimportAtid_parser___parser_prod___AKwimportAtid___init_akwimportatid(val_t p0);
+typedef val_t (*NEW_AKwimportAtid_parser___parser_prod___AKwimportAtid___init_akwimportatid_t)(val_t p0);
+val_t NEW_AKwimportAtid_parser___parser_nodes___ANode___init(void);
+typedef val_t (*NEW_AKwimportAtid_parser___parser_nodes___ANode___init_t)(void);
 void INIT_ATTRIBUTES__parser___parser_nodes___Start(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___parser_nodes___Start_t)(val_t p0);
 val_t NEW_parser___parser_nodes___Start(void);
@@ -4054,6 +4213,13 @@ void CHECKNEW_parser___ReduceAction69(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction69_t)(val_t p0);
 val_t NEW_ReduceAction69_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction69_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction70(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction70_t)(val_t p0);
+val_t NEW_parser___ReduceAction70(void);
+void CHECKNEW_parser___ReduceAction70(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction70_t)(val_t p0);
+val_t NEW_ReduceAction70_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction70_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction71(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction71_t)(val_t p0);
 val_t NEW_parser___ReduceAction71(void);
@@ -4061,13 +4227,6 @@ void CHECKNEW_parser___ReduceAction71(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction71_t)(val_t p0);
 val_t NEW_ReduceAction71_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction71_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction72(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction72_t)(val_t p0);
-val_t NEW_parser___ReduceAction72(void);
-void CHECKNEW_parser___ReduceAction72(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction72_t)(val_t p0);
-val_t NEW_ReduceAction72_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction72_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction73(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction73_t)(val_t p0);
 val_t NEW_parser___ReduceAction73(void);
@@ -5769,6 +5928,13 @@ void CHECKNEW_parser___ReduceAction315(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction315_t)(val_t p0);
 val_t NEW_ReduceAction315_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction315_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction316(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction316_t)(val_t p0);
+val_t NEW_parser___ReduceAction316(void);
+void CHECKNEW_parser___ReduceAction316(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction316_t)(val_t p0);
+val_t NEW_ReduceAction316_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction316_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction317(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction317_t)(val_t p0);
 val_t NEW_parser___ReduceAction317(void);
@@ -5811,13 +5977,6 @@ void CHECKNEW_parser___ReduceAction322(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction322_t)(val_t p0);
 val_t NEW_ReduceAction322_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction322_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction323(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction323_t)(val_t p0);
-val_t NEW_parser___ReduceAction323(void);
-void CHECKNEW_parser___ReduceAction323(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction323_t)(val_t p0);
-val_t NEW_ReduceAction323_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction323_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction324(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction324_t)(val_t p0);
 val_t NEW_parser___ReduceAction324(void);
@@ -5895,6 +6054,13 @@ void CHECKNEW_parser___ReduceAction334(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction334_t)(val_t p0);
 val_t NEW_ReduceAction334_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction334_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction335(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction335_t)(val_t p0);
+val_t NEW_parser___ReduceAction335(void);
+void CHECKNEW_parser___ReduceAction335(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction335_t)(val_t p0);
+val_t NEW_ReduceAction335_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction335_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction336(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction336_t)(val_t p0);
 val_t NEW_parser___ReduceAction336(void);
@@ -5965,6 +6131,27 @@ void CHECKNEW_parser___ReduceAction345(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction345_t)(val_t p0);
 val_t NEW_ReduceAction345_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction345_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction346(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction346_t)(val_t p0);
+val_t NEW_parser___ReduceAction346(void);
+void CHECKNEW_parser___ReduceAction346(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction346_t)(val_t p0);
+val_t NEW_ReduceAction346_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction346_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction347(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction347_t)(val_t p0);
+val_t NEW_parser___ReduceAction347(void);
+void CHECKNEW_parser___ReduceAction347(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction347_t)(val_t p0);
+val_t NEW_ReduceAction347_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction347_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction348(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction348_t)(val_t p0);
+val_t NEW_parser___ReduceAction348(void);
+void CHECKNEW_parser___ReduceAction348(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction348_t)(val_t p0);
+val_t NEW_ReduceAction348_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction348_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction349(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction349_t)(val_t p0);
 val_t NEW_parser___ReduceAction349(void);
@@ -6042,6 +6229,48 @@ void CHECKNEW_parser___ReduceAction359(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction359_t)(val_t p0);
 val_t NEW_ReduceAction359_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction359_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction360(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction360_t)(val_t p0);
+val_t NEW_parser___ReduceAction360(void);
+void CHECKNEW_parser___ReduceAction360(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction360_t)(val_t p0);
+val_t NEW_ReduceAction360_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction360_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction361(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction361_t)(val_t p0);
+val_t NEW_parser___ReduceAction361(void);
+void CHECKNEW_parser___ReduceAction361(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction361_t)(val_t p0);
+val_t NEW_ReduceAction361_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction361_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction362(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction362_t)(val_t p0);
+val_t NEW_parser___ReduceAction362(void);
+void CHECKNEW_parser___ReduceAction362(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction362_t)(val_t p0);
+val_t NEW_ReduceAction362_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction362_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction363(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction363_t)(val_t p0);
+val_t NEW_parser___ReduceAction363(void);
+void CHECKNEW_parser___ReduceAction363(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction363_t)(val_t p0);
+val_t NEW_ReduceAction363_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction363_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction364(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction364_t)(val_t p0);
+val_t NEW_parser___ReduceAction364(void);
+void CHECKNEW_parser___ReduceAction364(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction364_t)(val_t p0);
+val_t NEW_ReduceAction364_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction364_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction365(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction365_t)(val_t p0);
+val_t NEW_parser___ReduceAction365(void);
+void CHECKNEW_parser___ReduceAction365(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction365_t)(val_t p0);
+val_t NEW_ReduceAction365_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction365_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction366(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction366_t)(val_t p0);
 val_t NEW_parser___ReduceAction366(void);
@@ -6224,13 +6453,6 @@ void CHECKNEW_parser___ReduceAction391(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction391_t)(val_t p0);
 val_t NEW_ReduceAction391_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction391_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction392(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction392_t)(val_t p0);
-val_t NEW_parser___ReduceAction392(void);
-void CHECKNEW_parser___ReduceAction392(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction392_t)(val_t p0);
-val_t NEW_ReduceAction392_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction392_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction393(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction393_t)(val_t p0);
 val_t NEW_parser___ReduceAction393(void);
@@ -6385,13 +6607,6 @@ void CHECKNEW_parser___ReduceAction414(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction414_t)(val_t p0);
 val_t NEW_ReduceAction414_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction414_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction415(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction415_t)(val_t p0);
-val_t NEW_parser___ReduceAction415(void);
-void CHECKNEW_parser___ReduceAction415(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction415_t)(val_t p0);
-val_t NEW_ReduceAction415_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction415_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction416(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction416_t)(val_t p0);
 val_t NEW_parser___ReduceAction416(void);
@@ -6413,6 +6628,20 @@ void CHECKNEW_parser___ReduceAction418(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction418_t)(val_t p0);
 val_t NEW_ReduceAction418_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction418_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction419(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction419_t)(val_t p0);
+val_t NEW_parser___ReduceAction419(void);
+void CHECKNEW_parser___ReduceAction419(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction419_t)(val_t p0);
+val_t NEW_ReduceAction419_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction419_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction420(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction420_t)(val_t p0);
+val_t NEW_parser___ReduceAction420(void);
+void CHECKNEW_parser___ReduceAction420(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction420_t)(val_t p0);
+val_t NEW_ReduceAction420_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction420_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction421(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction421_t)(val_t p0);
 val_t NEW_parser___ReduceAction421(void);
@@ -6448,27 +6677,6 @@ void CHECKNEW_parser___ReduceAction425(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction425_t)(val_t p0);
 val_t NEW_ReduceAction425_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction425_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction426(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction426_t)(val_t p0);
-val_t NEW_parser___ReduceAction426(void);
-void CHECKNEW_parser___ReduceAction426(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction426_t)(val_t p0);
-val_t NEW_ReduceAction426_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction426_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction427(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction427_t)(val_t p0);
-val_t NEW_parser___ReduceAction427(void);
-void CHECKNEW_parser___ReduceAction427(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction427_t)(val_t p0);
-val_t NEW_ReduceAction427_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction427_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction428(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction428_t)(val_t p0);
-val_t NEW_parser___ReduceAction428(void);
-void CHECKNEW_parser___ReduceAction428(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction428_t)(val_t p0);
-val_t NEW_ReduceAction428_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction428_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction429(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction429_t)(val_t p0);
 val_t NEW_parser___ReduceAction429(void);
@@ -6504,6 +6712,27 @@ void CHECKNEW_parser___ReduceAction433(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction433_t)(val_t p0);
 val_t NEW_ReduceAction433_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction433_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction434(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction434_t)(val_t p0);
+val_t NEW_parser___ReduceAction434(void);
+void CHECKNEW_parser___ReduceAction434(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction434_t)(val_t p0);
+val_t NEW_ReduceAction434_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction434_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction435(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction435_t)(val_t p0);
+val_t NEW_parser___ReduceAction435(void);
+void CHECKNEW_parser___ReduceAction435(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction435_t)(val_t p0);
+val_t NEW_ReduceAction435_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction435_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction436(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction436_t)(val_t p0);
+val_t NEW_parser___ReduceAction436(void);
+void CHECKNEW_parser___ReduceAction436(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction436_t)(val_t p0);
+val_t NEW_ReduceAction436_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction436_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction437(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction437_t)(val_t p0);
 val_t NEW_parser___ReduceAction437(void);
@@ -6511,6 +6740,13 @@ void CHECKNEW_parser___ReduceAction437(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction437_t)(val_t p0);
 val_t NEW_ReduceAction437_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction437_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction438(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction438_t)(val_t p0);
+val_t NEW_parser___ReduceAction438(void);
+void CHECKNEW_parser___ReduceAction438(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction438_t)(val_t p0);
+val_t NEW_ReduceAction438_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction438_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction439(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction439_t)(val_t p0);
 val_t NEW_parser___ReduceAction439(void);
@@ -6518,34 +6754,13 @@ void CHECKNEW_parser___ReduceAction439(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction439_t)(val_t p0);
 val_t NEW_ReduceAction439_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction439_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction441(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction441_t)(val_t p0);
-val_t NEW_parser___ReduceAction441(void);
-void CHECKNEW_parser___ReduceAction441(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction441_t)(val_t p0);
-val_t NEW_ReduceAction441_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction441_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction442(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction442_t)(val_t p0);
-val_t NEW_parser___ReduceAction442(void);
-void CHECKNEW_parser___ReduceAction442(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction442_t)(val_t p0);
-val_t NEW_ReduceAction442_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction442_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction443(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction443_t)(val_t p0);
-val_t NEW_parser___ReduceAction443(void);
-void CHECKNEW_parser___ReduceAction443(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction443_t)(val_t p0);
-val_t NEW_ReduceAction443_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction443_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction445(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction445_t)(val_t p0);
-val_t NEW_parser___ReduceAction445(void);
-void CHECKNEW_parser___ReduceAction445(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction445_t)(val_t p0);
-val_t NEW_ReduceAction445_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction445_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction446(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction446_t)(val_t p0);
+val_t NEW_parser___ReduceAction446(void);
+void CHECKNEW_parser___ReduceAction446(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction446_t)(val_t p0);
+val_t NEW_ReduceAction446_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction446_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction447(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction447_t)(val_t p0);
 val_t NEW_parser___ReduceAction447(void);
@@ -6623,6 +6838,13 @@ void CHECKNEW_parser___ReduceAction457(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction457_t)(val_t p0);
 val_t NEW_ReduceAction457_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction457_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction458(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction458_t)(val_t p0);
+val_t NEW_parser___ReduceAction458(void);
+void CHECKNEW_parser___ReduceAction458(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction458_t)(val_t p0);
+val_t NEW_ReduceAction458_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction458_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction459(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction459_t)(val_t p0);
 val_t NEW_parser___ReduceAction459(void);
@@ -6637,6 +6859,13 @@ void CHECKNEW_parser___ReduceAction460(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction460_t)(val_t p0);
 val_t NEW_ReduceAction460_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction460_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction461(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction461_t)(val_t p0);
+val_t NEW_parser___ReduceAction461(void);
+void CHECKNEW_parser___ReduceAction461(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction461_t)(val_t p0);
+val_t NEW_ReduceAction461_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction461_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction462(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction462_t)(val_t p0);
 val_t NEW_parser___ReduceAction462(void);
@@ -6658,6 +6887,13 @@ void CHECKNEW_parser___ReduceAction464(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction464_t)(val_t p0);
 val_t NEW_ReduceAction464_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction464_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction465(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction465_t)(val_t p0);
+val_t NEW_parser___ReduceAction465(void);
+void CHECKNEW_parser___ReduceAction465(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction465_t)(val_t p0);
+val_t NEW_ReduceAction465_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction465_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction466(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction466_t)(val_t p0);
 val_t NEW_parser___ReduceAction466(void);
@@ -6672,6 +6908,13 @@ void CHECKNEW_parser___ReduceAction467(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction467_t)(val_t p0);
 val_t NEW_ReduceAction467_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction467_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction468(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction468_t)(val_t p0);
+val_t NEW_parser___ReduceAction468(void);
+void CHECKNEW_parser___ReduceAction468(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction468_t)(val_t p0);
+val_t NEW_ReduceAction468_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction468_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction469(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction469_t)(val_t p0);
 val_t NEW_parser___ReduceAction469(void);
@@ -6707,6 +6950,48 @@ void CHECKNEW_parser___ReduceAction473(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction473_t)(val_t p0);
 val_t NEW_ReduceAction473_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction473_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction474(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction474_t)(val_t p0);
+val_t NEW_parser___ReduceAction474(void);
+void CHECKNEW_parser___ReduceAction474(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction474_t)(val_t p0);
+val_t NEW_ReduceAction474_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction474_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction475(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction475_t)(val_t p0);
+val_t NEW_parser___ReduceAction475(void);
+void CHECKNEW_parser___ReduceAction475(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction475_t)(val_t p0);
+val_t NEW_ReduceAction475_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction475_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction476(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction476_t)(val_t p0);
+val_t NEW_parser___ReduceAction476(void);
+void CHECKNEW_parser___ReduceAction476(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction476_t)(val_t p0);
+val_t NEW_ReduceAction476_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction476_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction477(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction477_t)(val_t p0);
+val_t NEW_parser___ReduceAction477(void);
+void CHECKNEW_parser___ReduceAction477(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction477_t)(val_t p0);
+val_t NEW_ReduceAction477_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction477_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction478(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction478_t)(val_t p0);
+val_t NEW_parser___ReduceAction478(void);
+void CHECKNEW_parser___ReduceAction478(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction478_t)(val_t p0);
+val_t NEW_ReduceAction478_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction478_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction479(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction479_t)(val_t p0);
+val_t NEW_parser___ReduceAction479(void);
+void CHECKNEW_parser___ReduceAction479(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction479_t)(val_t p0);
+val_t NEW_ReduceAction479_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction479_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction480(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction480_t)(val_t p0);
 val_t NEW_parser___ReduceAction480(void);
@@ -6798,6 +7083,13 @@ void CHECKNEW_parser___ReduceAction492(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction492_t)(val_t p0);
 val_t NEW_ReduceAction492_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction492_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction493(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction493_t)(val_t p0);
+val_t NEW_parser___ReduceAction493(void);
+void CHECKNEW_parser___ReduceAction493(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction493_t)(val_t p0);
+val_t NEW_ReduceAction493_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction493_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction494(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction494_t)(val_t p0);
 val_t NEW_parser___ReduceAction494(void);
@@ -6847,6 +7139,13 @@ void CHECKNEW_parser___ReduceAction500(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction500_t)(val_t p0);
 val_t NEW_ReduceAction500_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction500_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction501(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction501_t)(val_t p0);
+val_t NEW_parser___ReduceAction501(void);
+void CHECKNEW_parser___ReduceAction501(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction501_t)(val_t p0);
+val_t NEW_ReduceAction501_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction501_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction502(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction502_t)(val_t p0);
 val_t NEW_parser___ReduceAction502(void);
@@ -6854,20 +7153,6 @@ void CHECKNEW_parser___ReduceAction502(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction502_t)(val_t p0);
 val_t NEW_ReduceAction502_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction502_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction503(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction503_t)(val_t p0);
-val_t NEW_parser___ReduceAction503(void);
-void CHECKNEW_parser___ReduceAction503(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction503_t)(val_t p0);
-val_t NEW_ReduceAction503_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction503_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction504(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction504_t)(val_t p0);
-val_t NEW_parser___ReduceAction504(void);
-void CHECKNEW_parser___ReduceAction504(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction504_t)(val_t p0);
-val_t NEW_ReduceAction504_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction504_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction505(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction505_t)(val_t p0);
 val_t NEW_parser___ReduceAction505(void);
@@ -6882,6 +7167,13 @@ void CHECKNEW_parser___ReduceAction506(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction506_t)(val_t p0);
 val_t NEW_ReduceAction506_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction506_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction507(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction507_t)(val_t p0);
+val_t NEW_parser___ReduceAction507(void);
+void CHECKNEW_parser___ReduceAction507(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction507_t)(val_t p0);
+val_t NEW_ReduceAction507_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction507_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction508(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction508_t)(val_t p0);
 val_t NEW_parser___ReduceAction508(void);
@@ -6889,6 +7181,20 @@ void CHECKNEW_parser___ReduceAction508(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction508_t)(val_t p0);
 val_t NEW_ReduceAction508_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction508_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction509(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction509_t)(val_t p0);
+val_t NEW_parser___ReduceAction509(void);
+void CHECKNEW_parser___ReduceAction509(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction509_t)(val_t p0);
+val_t NEW_ReduceAction509_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction509_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction510(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction510_t)(val_t p0);
+val_t NEW_parser___ReduceAction510(void);
+void CHECKNEW_parser___ReduceAction510(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction510_t)(val_t p0);
+val_t NEW_ReduceAction510_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction510_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction511(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction511_t)(val_t p0);
 val_t NEW_parser___ReduceAction511(void);
@@ -6938,27 +7244,6 @@ void CHECKNEW_parser___ReduceAction517(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction517_t)(val_t p0);
 val_t NEW_ReduceAction517_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction517_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction518(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction518_t)(val_t p0);
-val_t NEW_parser___ReduceAction518(void);
-void CHECKNEW_parser___ReduceAction518(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction518_t)(val_t p0);
-val_t NEW_ReduceAction518_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction518_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction519(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction519_t)(val_t p0);
-val_t NEW_parser___ReduceAction519(void);
-void CHECKNEW_parser___ReduceAction519(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction519_t)(val_t p0);
-val_t NEW_ReduceAction519_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction519_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction520(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction520_t)(val_t p0);
-val_t NEW_parser___ReduceAction520(void);
-void CHECKNEW_parser___ReduceAction520(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction520_t)(val_t p0);
-val_t NEW_ReduceAction520_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction520_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction521(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction521_t)(val_t p0);
 val_t NEW_parser___ReduceAction521(void);
@@ -6966,13 +7251,6 @@ void CHECKNEW_parser___ReduceAction521(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction521_t)(val_t p0);
 val_t NEW_ReduceAction521_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction521_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction522(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction522_t)(val_t p0);
-val_t NEW_parser___ReduceAction522(void);
-void CHECKNEW_parser___ReduceAction522(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction522_t)(val_t p0);
-val_t NEW_ReduceAction522_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction522_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction523(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction523_t)(val_t p0);
 val_t NEW_parser___ReduceAction523(void);
@@ -6980,13 +7258,6 @@ void CHECKNEW_parser___ReduceAction523(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction523_t)(val_t p0);
 val_t NEW_ReduceAction523_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction523_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction524(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction524_t)(val_t p0);
-val_t NEW_parser___ReduceAction524(void);
-void CHECKNEW_parser___ReduceAction524(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction524_t)(val_t p0);
-val_t NEW_ReduceAction524_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction524_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction525(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction525_t)(val_t p0);
 val_t NEW_parser___ReduceAction525(void);
@@ -7001,13 +7272,13 @@ void CHECKNEW_parser___ReduceAction526(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction526_t)(val_t p0);
 val_t NEW_ReduceAction526_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction526_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction528(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction528_t)(val_t p0);
-val_t NEW_parser___ReduceAction528(void);
-void CHECKNEW_parser___ReduceAction528(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction528_t)(val_t p0);
-val_t NEW_ReduceAction528_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction528_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction527(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction527_t)(val_t p0);
+val_t NEW_parser___ReduceAction527(void);
+void CHECKNEW_parser___ReduceAction527(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction527_t)(val_t p0);
+val_t NEW_ReduceAction527_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction527_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__parser___ReduceAction529(val_t p0);
 typedef void (*INIT_ATTRIBUTES__parser___ReduceAction529_t)(val_t p0);
 val_t NEW_parser___ReduceAction529(void);
@@ -7043,237 +7314,993 @@ void CHECKNEW_parser___ReduceAction534(val_t p0);
 typedef void (*CHECKNEW_parser___ReduceAction534_t)(val_t p0);
 val_t NEW_ReduceAction534_parser___ReduceAction___init(val_t p0);
 typedef val_t (*NEW_ReduceAction534_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction806(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction806_t)(val_t p0);
-val_t NEW_parser___ReduceAction806(void);
-void CHECKNEW_parser___ReduceAction806(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction806_t)(val_t p0);
-val_t NEW_ReduceAction806_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction806_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction807(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction807_t)(val_t p0);
-val_t NEW_parser___ReduceAction807(void);
-void CHECKNEW_parser___ReduceAction807(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction807_t)(val_t p0);
-val_t NEW_ReduceAction807_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction807_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction808(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction808_t)(val_t p0);
-val_t NEW_parser___ReduceAction808(void);
-void CHECKNEW_parser___ReduceAction808(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction808_t)(val_t p0);
-val_t NEW_ReduceAction808_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction808_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction811(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction811_t)(val_t p0);
-val_t NEW_parser___ReduceAction811(void);
-void CHECKNEW_parser___ReduceAction811(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction811_t)(val_t p0);
-val_t NEW_ReduceAction811_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction811_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction824(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction824_t)(val_t p0);
-val_t NEW_parser___ReduceAction824(void);
-void CHECKNEW_parser___ReduceAction824(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction824_t)(val_t p0);
-val_t NEW_ReduceAction824_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction824_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction825(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction825_t)(val_t p0);
-val_t NEW_parser___ReduceAction825(void);
-void CHECKNEW_parser___ReduceAction825(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction825_t)(val_t p0);
-val_t NEW_ReduceAction825_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction825_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction832(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction832_t)(val_t p0);
-val_t NEW_parser___ReduceAction832(void);
-void CHECKNEW_parser___ReduceAction832(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction832_t)(val_t p0);
-val_t NEW_ReduceAction832_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction832_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction833(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction833_t)(val_t p0);
-val_t NEW_parser___ReduceAction833(void);
-void CHECKNEW_parser___ReduceAction833(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction833_t)(val_t p0);
-val_t NEW_ReduceAction833_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction833_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction834(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction834_t)(val_t p0);
-val_t NEW_parser___ReduceAction834(void);
-void CHECKNEW_parser___ReduceAction834(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction834_t)(val_t p0);
-val_t NEW_ReduceAction834_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction834_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction835(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction835_t)(val_t p0);
-val_t NEW_parser___ReduceAction835(void);
-void CHECKNEW_parser___ReduceAction835(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction835_t)(val_t p0);
-val_t NEW_ReduceAction835_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction835_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction836(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction836_t)(val_t p0);
-val_t NEW_parser___ReduceAction836(void);
-void CHECKNEW_parser___ReduceAction836(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction836_t)(val_t p0);
-val_t NEW_ReduceAction836_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction836_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction837(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction837_t)(val_t p0);
-val_t NEW_parser___ReduceAction837(void);
-void CHECKNEW_parser___ReduceAction837(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction837_t)(val_t p0);
-val_t NEW_ReduceAction837_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction837_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction838(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction838_t)(val_t p0);
-val_t NEW_parser___ReduceAction838(void);
-void CHECKNEW_parser___ReduceAction838(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction838_t)(val_t p0);
-val_t NEW_ReduceAction838_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction838_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction839(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction839_t)(val_t p0);
-val_t NEW_parser___ReduceAction839(void);
-void CHECKNEW_parser___ReduceAction839(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction839_t)(val_t p0);
-val_t NEW_ReduceAction839_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction839_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction840(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction840_t)(val_t p0);
-val_t NEW_parser___ReduceAction840(void);
-void CHECKNEW_parser___ReduceAction840(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction840_t)(val_t p0);
-val_t NEW_ReduceAction840_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction840_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction841(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction841_t)(val_t p0);
-val_t NEW_parser___ReduceAction841(void);
-void CHECKNEW_parser___ReduceAction841(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction841_t)(val_t p0);
-val_t NEW_ReduceAction841_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction841_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction844(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction844_t)(val_t p0);
-val_t NEW_parser___ReduceAction844(void);
-void CHECKNEW_parser___ReduceAction844(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction844_t)(val_t p0);
-val_t NEW_ReduceAction844_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction844_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction845(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction845_t)(val_t p0);
-val_t NEW_parser___ReduceAction845(void);
-void CHECKNEW_parser___ReduceAction845(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction845_t)(val_t p0);
-val_t NEW_ReduceAction845_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction845_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction846(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction846_t)(val_t p0);
-val_t NEW_parser___ReduceAction846(void);
-void CHECKNEW_parser___ReduceAction846(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction846_t)(val_t p0);
-val_t NEW_ReduceAction846_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction846_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction847(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction847_t)(val_t p0);
-val_t NEW_parser___ReduceAction847(void);
-void CHECKNEW_parser___ReduceAction847(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction847_t)(val_t p0);
-val_t NEW_ReduceAction847_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction847_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction848(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction848_t)(val_t p0);
-val_t NEW_parser___ReduceAction848(void);
-void CHECKNEW_parser___ReduceAction848(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction848_t)(val_t p0);
-val_t NEW_ReduceAction848_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction848_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction849(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction849_t)(val_t p0);
-val_t NEW_parser___ReduceAction849(void);
-void CHECKNEW_parser___ReduceAction849(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction849_t)(val_t p0);
-val_t NEW_ReduceAction849_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction849_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction850(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction850_t)(val_t p0);
-val_t NEW_parser___ReduceAction850(void);
-void CHECKNEW_parser___ReduceAction850(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction850_t)(val_t p0);
-val_t NEW_ReduceAction850_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction850_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction851(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction851_t)(val_t p0);
-val_t NEW_parser___ReduceAction851(void);
-void CHECKNEW_parser___ReduceAction851(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction851_t)(val_t p0);
-val_t NEW_ReduceAction851_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction851_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction853(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction853_t)(val_t p0);
-val_t NEW_parser___ReduceAction853(void);
-void CHECKNEW_parser___ReduceAction853(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction853_t)(val_t p0);
-val_t NEW_ReduceAction853_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction853_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction854(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction854_t)(val_t p0);
-val_t NEW_parser___ReduceAction854(void);
-void CHECKNEW_parser___ReduceAction854(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction854_t)(val_t p0);
-val_t NEW_ReduceAction854_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction854_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction855(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction855_t)(val_t p0);
-val_t NEW_parser___ReduceAction855(void);
-void CHECKNEW_parser___ReduceAction855(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction855_t)(val_t p0);
-val_t NEW_ReduceAction855_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction855_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction857(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction857_t)(val_t p0);
-val_t NEW_parser___ReduceAction857(void);
-void CHECKNEW_parser___ReduceAction857(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction857_t)(val_t p0);
-val_t NEW_ReduceAction857_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction857_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction861(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction861_t)(val_t p0);
-val_t NEW_parser___ReduceAction861(void);
-void CHECKNEW_parser___ReduceAction861(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction861_t)(val_t p0);
-val_t NEW_ReduceAction861_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction861_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction862(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction862_t)(val_t p0);
-val_t NEW_parser___ReduceAction862(void);
-void CHECKNEW_parser___ReduceAction862(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction862_t)(val_t p0);
-val_t NEW_ReduceAction862_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction862_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction863(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction863_t)(val_t p0);
-val_t NEW_parser___ReduceAction863(void);
-void CHECKNEW_parser___ReduceAction863(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction863_t)(val_t p0);
-val_t NEW_ReduceAction863_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction863_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction864(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction864_t)(val_t p0);
-val_t NEW_parser___ReduceAction864(void);
-void CHECKNEW_parser___ReduceAction864(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction864_t)(val_t p0);
-val_t NEW_ReduceAction864_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction864_parser___ReduceAction___init_t)(val_t p0);
-void INIT_ATTRIBUTES__parser___ReduceAction865(val_t p0);
-typedef void (*INIT_ATTRIBUTES__parser___ReduceAction865_t)(val_t p0);
-val_t NEW_parser___ReduceAction865(void);
-void CHECKNEW_parser___ReduceAction865(val_t p0);
-typedef void (*CHECKNEW_parser___ReduceAction865_t)(val_t p0);
-val_t NEW_ReduceAction865_parser___ReduceAction___init(val_t p0);
-typedef val_t (*NEW_ReduceAction865_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction535(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction535_t)(val_t p0);
+val_t NEW_parser___ReduceAction535(void);
+void CHECKNEW_parser___ReduceAction535(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction535_t)(val_t p0);
+val_t NEW_ReduceAction535_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction535_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction536(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction536_t)(val_t p0);
+val_t NEW_parser___ReduceAction536(void);
+void CHECKNEW_parser___ReduceAction536(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction536_t)(val_t p0);
+val_t NEW_ReduceAction536_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction536_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction537(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction537_t)(val_t p0);
+val_t NEW_parser___ReduceAction537(void);
+void CHECKNEW_parser___ReduceAction537(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction537_t)(val_t p0);
+val_t NEW_ReduceAction537_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction537_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction538(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction538_t)(val_t p0);
+val_t NEW_parser___ReduceAction538(void);
+void CHECKNEW_parser___ReduceAction538(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction538_t)(val_t p0);
+val_t NEW_ReduceAction538_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction538_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction539(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction539_t)(val_t p0);
+val_t NEW_parser___ReduceAction539(void);
+void CHECKNEW_parser___ReduceAction539(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction539_t)(val_t p0);
+val_t NEW_ReduceAction539_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction539_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction540(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction540_t)(val_t p0);
+val_t NEW_parser___ReduceAction540(void);
+void CHECKNEW_parser___ReduceAction540(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction540_t)(val_t p0);
+val_t NEW_ReduceAction540_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction540_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction541(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction541_t)(val_t p0);
+val_t NEW_parser___ReduceAction541(void);
+void CHECKNEW_parser___ReduceAction541(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction541_t)(val_t p0);
+val_t NEW_ReduceAction541_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction541_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction543(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction543_t)(val_t p0);
+val_t NEW_parser___ReduceAction543(void);
+void CHECKNEW_parser___ReduceAction543(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction543_t)(val_t p0);
+val_t NEW_ReduceAction543_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction543_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction544(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction544_t)(val_t p0);
+val_t NEW_parser___ReduceAction544(void);
+void CHECKNEW_parser___ReduceAction544(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction544_t)(val_t p0);
+val_t NEW_ReduceAction544_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction544_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction546(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction546_t)(val_t p0);
+val_t NEW_parser___ReduceAction546(void);
+void CHECKNEW_parser___ReduceAction546(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction546_t)(val_t p0);
+val_t NEW_ReduceAction546_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction546_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction547(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction547_t)(val_t p0);
+val_t NEW_parser___ReduceAction547(void);
+void CHECKNEW_parser___ReduceAction547(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction547_t)(val_t p0);
+val_t NEW_ReduceAction547_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction547_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction548(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction548_t)(val_t p0);
+val_t NEW_parser___ReduceAction548(void);
+void CHECKNEW_parser___ReduceAction548(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction548_t)(val_t p0);
+val_t NEW_ReduceAction548_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction548_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction550(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction550_t)(val_t p0);
+val_t NEW_parser___ReduceAction550(void);
+void CHECKNEW_parser___ReduceAction550(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction550_t)(val_t p0);
+val_t NEW_ReduceAction550_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction550_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction551(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction551_t)(val_t p0);
+val_t NEW_parser___ReduceAction551(void);
+void CHECKNEW_parser___ReduceAction551(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction551_t)(val_t p0);
+val_t NEW_ReduceAction551_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction551_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction553(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction553_t)(val_t p0);
+val_t NEW_parser___ReduceAction553(void);
+void CHECKNEW_parser___ReduceAction553(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction553_t)(val_t p0);
+val_t NEW_ReduceAction553_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction553_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction554(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction554_t)(val_t p0);
+val_t NEW_parser___ReduceAction554(void);
+void CHECKNEW_parser___ReduceAction554(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction554_t)(val_t p0);
+val_t NEW_ReduceAction554_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction554_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction555(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction555_t)(val_t p0);
+val_t NEW_parser___ReduceAction555(void);
+void CHECKNEW_parser___ReduceAction555(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction555_t)(val_t p0);
+val_t NEW_ReduceAction555_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction555_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction556(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction556_t)(val_t p0);
+val_t NEW_parser___ReduceAction556(void);
+void CHECKNEW_parser___ReduceAction556(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction556_t)(val_t p0);
+val_t NEW_ReduceAction556_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction556_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction557(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction557_t)(val_t p0);
+val_t NEW_parser___ReduceAction557(void);
+void CHECKNEW_parser___ReduceAction557(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction557_t)(val_t p0);
+val_t NEW_ReduceAction557_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction557_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction564(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction564_t)(val_t p0);
+val_t NEW_parser___ReduceAction564(void);
+void CHECKNEW_parser___ReduceAction564(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction564_t)(val_t p0);
+val_t NEW_ReduceAction564_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction564_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction565(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction565_t)(val_t p0);
+val_t NEW_parser___ReduceAction565(void);
+void CHECKNEW_parser___ReduceAction565(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction565_t)(val_t p0);
+val_t NEW_ReduceAction565_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction565_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction566(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction566_t)(val_t p0);
+val_t NEW_parser___ReduceAction566(void);
+void CHECKNEW_parser___ReduceAction566(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction566_t)(val_t p0);
+val_t NEW_ReduceAction566_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction566_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction567(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction567_t)(val_t p0);
+val_t NEW_parser___ReduceAction567(void);
+void CHECKNEW_parser___ReduceAction567(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction567_t)(val_t p0);
+val_t NEW_ReduceAction567_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction567_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction568(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction568_t)(val_t p0);
+val_t NEW_parser___ReduceAction568(void);
+void CHECKNEW_parser___ReduceAction568(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction568_t)(val_t p0);
+val_t NEW_ReduceAction568_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction568_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction569(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction569_t)(val_t p0);
+val_t NEW_parser___ReduceAction569(void);
+void CHECKNEW_parser___ReduceAction569(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction569_t)(val_t p0);
+val_t NEW_ReduceAction569_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction569_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction570(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction570_t)(val_t p0);
+val_t NEW_parser___ReduceAction570(void);
+void CHECKNEW_parser___ReduceAction570(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction570_t)(val_t p0);
+val_t NEW_ReduceAction570_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction570_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction571(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction571_t)(val_t p0);
+val_t NEW_parser___ReduceAction571(void);
+void CHECKNEW_parser___ReduceAction571(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction571_t)(val_t p0);
+val_t NEW_ReduceAction571_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction571_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction572(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction572_t)(val_t p0);
+val_t NEW_parser___ReduceAction572(void);
+void CHECKNEW_parser___ReduceAction572(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction572_t)(val_t p0);
+val_t NEW_ReduceAction572_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction572_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction573(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction573_t)(val_t p0);
+val_t NEW_parser___ReduceAction573(void);
+void CHECKNEW_parser___ReduceAction573(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction573_t)(val_t p0);
+val_t NEW_ReduceAction573_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction573_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction574(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction574_t)(val_t p0);
+val_t NEW_parser___ReduceAction574(void);
+void CHECKNEW_parser___ReduceAction574(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction574_t)(val_t p0);
+val_t NEW_ReduceAction574_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction574_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction575(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction575_t)(val_t p0);
+val_t NEW_parser___ReduceAction575(void);
+void CHECKNEW_parser___ReduceAction575(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction575_t)(val_t p0);
+val_t NEW_ReduceAction575_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction575_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction576(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction576_t)(val_t p0);
+val_t NEW_parser___ReduceAction576(void);
+void CHECKNEW_parser___ReduceAction576(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction576_t)(val_t p0);
+val_t NEW_ReduceAction576_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction576_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction577(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction577_t)(val_t p0);
+val_t NEW_parser___ReduceAction577(void);
+void CHECKNEW_parser___ReduceAction577(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction577_t)(val_t p0);
+val_t NEW_ReduceAction577_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction577_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction578(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction578_t)(val_t p0);
+val_t NEW_parser___ReduceAction578(void);
+void CHECKNEW_parser___ReduceAction578(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction578_t)(val_t p0);
+val_t NEW_ReduceAction578_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction578_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction579(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction579_t)(val_t p0);
+val_t NEW_parser___ReduceAction579(void);
+void CHECKNEW_parser___ReduceAction579(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction579_t)(val_t p0);
+val_t NEW_ReduceAction579_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction579_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction580(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction580_t)(val_t p0);
+val_t NEW_parser___ReduceAction580(void);
+void CHECKNEW_parser___ReduceAction580(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction580_t)(val_t p0);
+val_t NEW_ReduceAction580_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction580_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction581(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction581_t)(val_t p0);
+val_t NEW_parser___ReduceAction581(void);
+void CHECKNEW_parser___ReduceAction581(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction581_t)(val_t p0);
+val_t NEW_ReduceAction581_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction581_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction582(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction582_t)(val_t p0);
+val_t NEW_parser___ReduceAction582(void);
+void CHECKNEW_parser___ReduceAction582(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction582_t)(val_t p0);
+val_t NEW_ReduceAction582_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction582_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction583(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction583_t)(val_t p0);
+val_t NEW_parser___ReduceAction583(void);
+void CHECKNEW_parser___ReduceAction583(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction583_t)(val_t p0);
+val_t NEW_ReduceAction583_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction583_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction584(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction584_t)(val_t p0);
+val_t NEW_parser___ReduceAction584(void);
+void CHECKNEW_parser___ReduceAction584(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction584_t)(val_t p0);
+val_t NEW_ReduceAction584_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction584_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction585(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction585_t)(val_t p0);
+val_t NEW_parser___ReduceAction585(void);
+void CHECKNEW_parser___ReduceAction585(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction585_t)(val_t p0);
+val_t NEW_ReduceAction585_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction585_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction586(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction586_t)(val_t p0);
+val_t NEW_parser___ReduceAction586(void);
+void CHECKNEW_parser___ReduceAction586(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction586_t)(val_t p0);
+val_t NEW_ReduceAction586_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction586_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction587(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction587_t)(val_t p0);
+val_t NEW_parser___ReduceAction587(void);
+void CHECKNEW_parser___ReduceAction587(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction587_t)(val_t p0);
+val_t NEW_ReduceAction587_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction587_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction589(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction589_t)(val_t p0);
+val_t NEW_parser___ReduceAction589(void);
+void CHECKNEW_parser___ReduceAction589(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction589_t)(val_t p0);
+val_t NEW_ReduceAction589_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction589_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction590(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction590_t)(val_t p0);
+val_t NEW_parser___ReduceAction590(void);
+void CHECKNEW_parser___ReduceAction590(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction590_t)(val_t p0);
+val_t NEW_ReduceAction590_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction590_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction591(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction591_t)(val_t p0);
+val_t NEW_parser___ReduceAction591(void);
+void CHECKNEW_parser___ReduceAction591(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction591_t)(val_t p0);
+val_t NEW_ReduceAction591_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction591_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction592(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction592_t)(val_t p0);
+val_t NEW_parser___ReduceAction592(void);
+void CHECKNEW_parser___ReduceAction592(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction592_t)(val_t p0);
+val_t NEW_ReduceAction592_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction592_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction593(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction593_t)(val_t p0);
+val_t NEW_parser___ReduceAction593(void);
+void CHECKNEW_parser___ReduceAction593(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction593_t)(val_t p0);
+val_t NEW_ReduceAction593_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction593_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction594(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction594_t)(val_t p0);
+val_t NEW_parser___ReduceAction594(void);
+void CHECKNEW_parser___ReduceAction594(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction594_t)(val_t p0);
+val_t NEW_ReduceAction594_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction594_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction595(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction595_t)(val_t p0);
+val_t NEW_parser___ReduceAction595(void);
+void CHECKNEW_parser___ReduceAction595(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction595_t)(val_t p0);
+val_t NEW_ReduceAction595_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction595_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction596(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction596_t)(val_t p0);
+val_t NEW_parser___ReduceAction596(void);
+void CHECKNEW_parser___ReduceAction596(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction596_t)(val_t p0);
+val_t NEW_ReduceAction596_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction596_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction597(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction597_t)(val_t p0);
+val_t NEW_parser___ReduceAction597(void);
+void CHECKNEW_parser___ReduceAction597(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction597_t)(val_t p0);
+val_t NEW_ReduceAction597_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction597_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction598(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction598_t)(val_t p0);
+val_t NEW_parser___ReduceAction598(void);
+void CHECKNEW_parser___ReduceAction598(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction598_t)(val_t p0);
+val_t NEW_ReduceAction598_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction598_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction600(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction600_t)(val_t p0);
+val_t NEW_parser___ReduceAction600(void);
+void CHECKNEW_parser___ReduceAction600(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction600_t)(val_t p0);
+val_t NEW_ReduceAction600_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction600_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction601(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction601_t)(val_t p0);
+val_t NEW_parser___ReduceAction601(void);
+void CHECKNEW_parser___ReduceAction601(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction601_t)(val_t p0);
+val_t NEW_ReduceAction601_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction601_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction602(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction602_t)(val_t p0);
+val_t NEW_parser___ReduceAction602(void);
+void CHECKNEW_parser___ReduceAction602(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction602_t)(val_t p0);
+val_t NEW_ReduceAction602_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction602_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction603(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction603_t)(val_t p0);
+val_t NEW_parser___ReduceAction603(void);
+void CHECKNEW_parser___ReduceAction603(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction603_t)(val_t p0);
+val_t NEW_ReduceAction603_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction603_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction604(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction604_t)(val_t p0);
+val_t NEW_parser___ReduceAction604(void);
+void CHECKNEW_parser___ReduceAction604(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction604_t)(val_t p0);
+val_t NEW_ReduceAction604_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction604_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction605(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction605_t)(val_t p0);
+val_t NEW_parser___ReduceAction605(void);
+void CHECKNEW_parser___ReduceAction605(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction605_t)(val_t p0);
+val_t NEW_ReduceAction605_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction605_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction606(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction606_t)(val_t p0);
+val_t NEW_parser___ReduceAction606(void);
+void CHECKNEW_parser___ReduceAction606(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction606_t)(val_t p0);
+val_t NEW_ReduceAction606_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction606_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction607(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction607_t)(val_t p0);
+val_t NEW_parser___ReduceAction607(void);
+void CHECKNEW_parser___ReduceAction607(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction607_t)(val_t p0);
+val_t NEW_ReduceAction607_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction607_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction608(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction608_t)(val_t p0);
+val_t NEW_parser___ReduceAction608(void);
+void CHECKNEW_parser___ReduceAction608(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction608_t)(val_t p0);
+val_t NEW_ReduceAction608_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction608_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction609(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction609_t)(val_t p0);
+val_t NEW_parser___ReduceAction609(void);
+void CHECKNEW_parser___ReduceAction609(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction609_t)(val_t p0);
+val_t NEW_ReduceAction609_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction609_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction610(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction610_t)(val_t p0);
+val_t NEW_parser___ReduceAction610(void);
+void CHECKNEW_parser___ReduceAction610(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction610_t)(val_t p0);
+val_t NEW_ReduceAction610_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction610_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction612(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction612_t)(val_t p0);
+val_t NEW_parser___ReduceAction612(void);
+void CHECKNEW_parser___ReduceAction612(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction612_t)(val_t p0);
+val_t NEW_ReduceAction612_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction612_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction613(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction613_t)(val_t p0);
+val_t NEW_parser___ReduceAction613(void);
+void CHECKNEW_parser___ReduceAction613(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction613_t)(val_t p0);
+val_t NEW_ReduceAction613_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction613_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction614(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction614_t)(val_t p0);
+val_t NEW_parser___ReduceAction614(void);
+void CHECKNEW_parser___ReduceAction614(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction614_t)(val_t p0);
+val_t NEW_ReduceAction614_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction614_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction615(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction615_t)(val_t p0);
+val_t NEW_parser___ReduceAction615(void);
+void CHECKNEW_parser___ReduceAction615(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction615_t)(val_t p0);
+val_t NEW_ReduceAction615_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction615_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction616(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction616_t)(val_t p0);
+val_t NEW_parser___ReduceAction616(void);
+void CHECKNEW_parser___ReduceAction616(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction616_t)(val_t p0);
+val_t NEW_ReduceAction616_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction616_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction617(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction617_t)(val_t p0);
+val_t NEW_parser___ReduceAction617(void);
+void CHECKNEW_parser___ReduceAction617(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction617_t)(val_t p0);
+val_t NEW_ReduceAction617_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction617_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction618(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction618_t)(val_t p0);
+val_t NEW_parser___ReduceAction618(void);
+void CHECKNEW_parser___ReduceAction618(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction618_t)(val_t p0);
+val_t NEW_ReduceAction618_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction618_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction619(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction619_t)(val_t p0);
+val_t NEW_parser___ReduceAction619(void);
+void CHECKNEW_parser___ReduceAction619(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction619_t)(val_t p0);
+val_t NEW_ReduceAction619_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction619_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction620(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction620_t)(val_t p0);
+val_t NEW_parser___ReduceAction620(void);
+void CHECKNEW_parser___ReduceAction620(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction620_t)(val_t p0);
+val_t NEW_ReduceAction620_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction620_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction621(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction621_t)(val_t p0);
+val_t NEW_parser___ReduceAction621(void);
+void CHECKNEW_parser___ReduceAction621(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction621_t)(val_t p0);
+val_t NEW_ReduceAction621_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction621_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction622(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction622_t)(val_t p0);
+val_t NEW_parser___ReduceAction622(void);
+void CHECKNEW_parser___ReduceAction622(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction622_t)(val_t p0);
+val_t NEW_ReduceAction622_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction622_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction624(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction624_t)(val_t p0);
+val_t NEW_parser___ReduceAction624(void);
+void CHECKNEW_parser___ReduceAction624(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction624_t)(val_t p0);
+val_t NEW_ReduceAction624_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction624_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction625(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction625_t)(val_t p0);
+val_t NEW_parser___ReduceAction625(void);
+void CHECKNEW_parser___ReduceAction625(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction625_t)(val_t p0);
+val_t NEW_ReduceAction625_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction625_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction626(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction626_t)(val_t p0);
+val_t NEW_parser___ReduceAction626(void);
+void CHECKNEW_parser___ReduceAction626(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction626_t)(val_t p0);
+val_t NEW_ReduceAction626_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction626_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction627(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction627_t)(val_t p0);
+val_t NEW_parser___ReduceAction627(void);
+void CHECKNEW_parser___ReduceAction627(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction627_t)(val_t p0);
+val_t NEW_ReduceAction627_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction627_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction628(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction628_t)(val_t p0);
+val_t NEW_parser___ReduceAction628(void);
+void CHECKNEW_parser___ReduceAction628(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction628_t)(val_t p0);
+val_t NEW_ReduceAction628_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction628_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction629(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction629_t)(val_t p0);
+val_t NEW_parser___ReduceAction629(void);
+void CHECKNEW_parser___ReduceAction629(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction629_t)(val_t p0);
+val_t NEW_ReduceAction629_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction629_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction630(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction630_t)(val_t p0);
+val_t NEW_parser___ReduceAction630(void);
+void CHECKNEW_parser___ReduceAction630(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction630_t)(val_t p0);
+val_t NEW_ReduceAction630_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction630_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction631(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction631_t)(val_t p0);
+val_t NEW_parser___ReduceAction631(void);
+void CHECKNEW_parser___ReduceAction631(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction631_t)(val_t p0);
+val_t NEW_ReduceAction631_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction631_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction633(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction633_t)(val_t p0);
+val_t NEW_parser___ReduceAction633(void);
+void CHECKNEW_parser___ReduceAction633(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction633_t)(val_t p0);
+val_t NEW_ReduceAction633_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction633_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction636(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction636_t)(val_t p0);
+val_t NEW_parser___ReduceAction636(void);
+void CHECKNEW_parser___ReduceAction636(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction636_t)(val_t p0);
+val_t NEW_ReduceAction636_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction636_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction637(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction637_t)(val_t p0);
+val_t NEW_parser___ReduceAction637(void);
+void CHECKNEW_parser___ReduceAction637(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction637_t)(val_t p0);
+val_t NEW_ReduceAction637_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction637_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction638(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction638_t)(val_t p0);
+val_t NEW_parser___ReduceAction638(void);
+void CHECKNEW_parser___ReduceAction638(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction638_t)(val_t p0);
+val_t NEW_ReduceAction638_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction638_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction639(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction639_t)(val_t p0);
+val_t NEW_parser___ReduceAction639(void);
+void CHECKNEW_parser___ReduceAction639(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction639_t)(val_t p0);
+val_t NEW_ReduceAction639_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction639_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction640(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction640_t)(val_t p0);
+val_t NEW_parser___ReduceAction640(void);
+void CHECKNEW_parser___ReduceAction640(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction640_t)(val_t p0);
+val_t NEW_ReduceAction640_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction640_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction641(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction641_t)(val_t p0);
+val_t NEW_parser___ReduceAction641(void);
+void CHECKNEW_parser___ReduceAction641(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction641_t)(val_t p0);
+val_t NEW_ReduceAction641_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction641_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction642(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction642_t)(val_t p0);
+val_t NEW_parser___ReduceAction642(void);
+void CHECKNEW_parser___ReduceAction642(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction642_t)(val_t p0);
+val_t NEW_ReduceAction642_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction642_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction643(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction643_t)(val_t p0);
+val_t NEW_parser___ReduceAction643(void);
+void CHECKNEW_parser___ReduceAction643(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction643_t)(val_t p0);
+val_t NEW_ReduceAction643_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction643_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction644(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction644_t)(val_t p0);
+val_t NEW_parser___ReduceAction644(void);
+void CHECKNEW_parser___ReduceAction644(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction644_t)(val_t p0);
+val_t NEW_ReduceAction644_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction644_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction645(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction645_t)(val_t p0);
+val_t NEW_parser___ReduceAction645(void);
+void CHECKNEW_parser___ReduceAction645(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction645_t)(val_t p0);
+val_t NEW_ReduceAction645_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction645_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction646(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction646_t)(val_t p0);
+val_t NEW_parser___ReduceAction646(void);
+void CHECKNEW_parser___ReduceAction646(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction646_t)(val_t p0);
+val_t NEW_ReduceAction646_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction646_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction647(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction647_t)(val_t p0);
+val_t NEW_parser___ReduceAction647(void);
+void CHECKNEW_parser___ReduceAction647(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction647_t)(val_t p0);
+val_t NEW_ReduceAction647_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction647_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction648(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction648_t)(val_t p0);
+val_t NEW_parser___ReduceAction648(void);
+void CHECKNEW_parser___ReduceAction648(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction648_t)(val_t p0);
+val_t NEW_ReduceAction648_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction648_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction649(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction649_t)(val_t p0);
+val_t NEW_parser___ReduceAction649(void);
+void CHECKNEW_parser___ReduceAction649(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction649_t)(val_t p0);
+val_t NEW_ReduceAction649_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction649_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction650(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction650_t)(val_t p0);
+val_t NEW_parser___ReduceAction650(void);
+void CHECKNEW_parser___ReduceAction650(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction650_t)(val_t p0);
+val_t NEW_ReduceAction650_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction650_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction651(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction651_t)(val_t p0);
+val_t NEW_parser___ReduceAction651(void);
+void CHECKNEW_parser___ReduceAction651(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction651_t)(val_t p0);
+val_t NEW_ReduceAction651_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction651_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction653(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction653_t)(val_t p0);
+val_t NEW_parser___ReduceAction653(void);
+void CHECKNEW_parser___ReduceAction653(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction653_t)(val_t p0);
+val_t NEW_ReduceAction653_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction653_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction654(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction654_t)(val_t p0);
+val_t NEW_parser___ReduceAction654(void);
+void CHECKNEW_parser___ReduceAction654(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction654_t)(val_t p0);
+val_t NEW_ReduceAction654_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction654_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction656(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction656_t)(val_t p0);
+val_t NEW_parser___ReduceAction656(void);
+void CHECKNEW_parser___ReduceAction656(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction656_t)(val_t p0);
+val_t NEW_ReduceAction656_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction656_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction657(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction657_t)(val_t p0);
+val_t NEW_parser___ReduceAction657(void);
+void CHECKNEW_parser___ReduceAction657(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction657_t)(val_t p0);
+val_t NEW_ReduceAction657_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction657_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction658(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction658_t)(val_t p0);
+val_t NEW_parser___ReduceAction658(void);
+void CHECKNEW_parser___ReduceAction658(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction658_t)(val_t p0);
+val_t NEW_ReduceAction658_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction658_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction659(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction659_t)(val_t p0);
+val_t NEW_parser___ReduceAction659(void);
+void CHECKNEW_parser___ReduceAction659(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction659_t)(val_t p0);
+val_t NEW_ReduceAction659_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction659_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction931(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction931_t)(val_t p0);
+val_t NEW_parser___ReduceAction931(void);
+void CHECKNEW_parser___ReduceAction931(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction931_t)(val_t p0);
+val_t NEW_ReduceAction931_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction931_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction932(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction932_t)(val_t p0);
+val_t NEW_parser___ReduceAction932(void);
+void CHECKNEW_parser___ReduceAction932(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction932_t)(val_t p0);
+val_t NEW_ReduceAction932_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction932_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction933(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction933_t)(val_t p0);
+val_t NEW_parser___ReduceAction933(void);
+void CHECKNEW_parser___ReduceAction933(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction933_t)(val_t p0);
+val_t NEW_ReduceAction933_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction933_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction936(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction936_t)(val_t p0);
+val_t NEW_parser___ReduceAction936(void);
+void CHECKNEW_parser___ReduceAction936(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction936_t)(val_t p0);
+val_t NEW_ReduceAction936_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction936_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction957(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction957_t)(val_t p0);
+val_t NEW_parser___ReduceAction957(void);
+void CHECKNEW_parser___ReduceAction957(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction957_t)(val_t p0);
+val_t NEW_ReduceAction957_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction957_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction958(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction958_t)(val_t p0);
+val_t NEW_parser___ReduceAction958(void);
+void CHECKNEW_parser___ReduceAction958(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction958_t)(val_t p0);
+val_t NEW_ReduceAction958_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction958_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1250(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1250_t)(val_t p0);
+val_t NEW_parser___ReduceAction1250(void);
+void CHECKNEW_parser___ReduceAction1250(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1250_t)(val_t p0);
+val_t NEW_ReduceAction1250_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1250_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1251(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1251_t)(val_t p0);
+val_t NEW_parser___ReduceAction1251(void);
+void CHECKNEW_parser___ReduceAction1251(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1251_t)(val_t p0);
+val_t NEW_ReduceAction1251_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1251_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1252(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1252_t)(val_t p0);
+val_t NEW_parser___ReduceAction1252(void);
+void CHECKNEW_parser___ReduceAction1252(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1252_t)(val_t p0);
+val_t NEW_ReduceAction1252_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1252_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1253(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1253_t)(val_t p0);
+val_t NEW_parser___ReduceAction1253(void);
+void CHECKNEW_parser___ReduceAction1253(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1253_t)(val_t p0);
+val_t NEW_ReduceAction1253_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1253_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1254(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1254_t)(val_t p0);
+val_t NEW_parser___ReduceAction1254(void);
+void CHECKNEW_parser___ReduceAction1254(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1254_t)(val_t p0);
+val_t NEW_ReduceAction1254_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1254_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1255(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1255_t)(val_t p0);
+val_t NEW_parser___ReduceAction1255(void);
+void CHECKNEW_parser___ReduceAction1255(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1255_t)(val_t p0);
+val_t NEW_ReduceAction1255_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1255_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1256(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1256_t)(val_t p0);
+val_t NEW_parser___ReduceAction1256(void);
+void CHECKNEW_parser___ReduceAction1256(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1256_t)(val_t p0);
+val_t NEW_ReduceAction1256_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1256_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1257(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1257_t)(val_t p0);
+val_t NEW_parser___ReduceAction1257(void);
+void CHECKNEW_parser___ReduceAction1257(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1257_t)(val_t p0);
+val_t NEW_ReduceAction1257_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1257_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1258(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1258_t)(val_t p0);
+val_t NEW_parser___ReduceAction1258(void);
+void CHECKNEW_parser___ReduceAction1258(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1258_t)(val_t p0);
+val_t NEW_ReduceAction1258_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1258_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1259(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1259_t)(val_t p0);
+val_t NEW_parser___ReduceAction1259(void);
+void CHECKNEW_parser___ReduceAction1259(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1259_t)(val_t p0);
+val_t NEW_ReduceAction1259_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1259_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1262(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1262_t)(val_t p0);
+val_t NEW_parser___ReduceAction1262(void);
+void CHECKNEW_parser___ReduceAction1262(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1262_t)(val_t p0);
+val_t NEW_ReduceAction1262_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1262_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1263(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1263_t)(val_t p0);
+val_t NEW_parser___ReduceAction1263(void);
+void CHECKNEW_parser___ReduceAction1263(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1263_t)(val_t p0);
+val_t NEW_ReduceAction1263_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1263_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1264(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1264_t)(val_t p0);
+val_t NEW_parser___ReduceAction1264(void);
+void CHECKNEW_parser___ReduceAction1264(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1264_t)(val_t p0);
+val_t NEW_ReduceAction1264_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1264_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1265(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1265_t)(val_t p0);
+val_t NEW_parser___ReduceAction1265(void);
+void CHECKNEW_parser___ReduceAction1265(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1265_t)(val_t p0);
+val_t NEW_ReduceAction1265_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1265_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1266(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1266_t)(val_t p0);
+val_t NEW_parser___ReduceAction1266(void);
+void CHECKNEW_parser___ReduceAction1266(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1266_t)(val_t p0);
+val_t NEW_ReduceAction1266_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1266_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1267(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1267_t)(val_t p0);
+val_t NEW_parser___ReduceAction1267(void);
+void CHECKNEW_parser___ReduceAction1267(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1267_t)(val_t p0);
+val_t NEW_ReduceAction1267_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1267_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1268(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1268_t)(val_t p0);
+val_t NEW_parser___ReduceAction1268(void);
+void CHECKNEW_parser___ReduceAction1268(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1268_t)(val_t p0);
+val_t NEW_ReduceAction1268_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1268_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1269(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1269_t)(val_t p0);
+val_t NEW_parser___ReduceAction1269(void);
+void CHECKNEW_parser___ReduceAction1269(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1269_t)(val_t p0);
+val_t NEW_ReduceAction1269_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1269_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1271(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1271_t)(val_t p0);
+val_t NEW_parser___ReduceAction1271(void);
+void CHECKNEW_parser___ReduceAction1271(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1271_t)(val_t p0);
+val_t NEW_ReduceAction1271_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1271_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1272(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1272_t)(val_t p0);
+val_t NEW_parser___ReduceAction1272(void);
+void CHECKNEW_parser___ReduceAction1272(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1272_t)(val_t p0);
+val_t NEW_ReduceAction1272_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1272_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1273(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1273_t)(val_t p0);
+val_t NEW_parser___ReduceAction1273(void);
+void CHECKNEW_parser___ReduceAction1273(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1273_t)(val_t p0);
+val_t NEW_ReduceAction1273_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1273_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1275(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1275_t)(val_t p0);
+val_t NEW_parser___ReduceAction1275(void);
+void CHECKNEW_parser___ReduceAction1275(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1275_t)(val_t p0);
+val_t NEW_ReduceAction1275_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1275_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1277(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1277_t)(val_t p0);
+val_t NEW_parser___ReduceAction1277(void);
+void CHECKNEW_parser___ReduceAction1277(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1277_t)(val_t p0);
+val_t NEW_ReduceAction1277_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1277_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1281(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1281_t)(val_t p0);
+val_t NEW_parser___ReduceAction1281(void);
+void CHECKNEW_parser___ReduceAction1281(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1281_t)(val_t p0);
+val_t NEW_ReduceAction1281_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1281_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1285(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1285_t)(val_t p0);
+val_t NEW_parser___ReduceAction1285(void);
+void CHECKNEW_parser___ReduceAction1285(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1285_t)(val_t p0);
+val_t NEW_ReduceAction1285_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1285_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1286(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1286_t)(val_t p0);
+val_t NEW_parser___ReduceAction1286(void);
+void CHECKNEW_parser___ReduceAction1286(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1286_t)(val_t p0);
+val_t NEW_ReduceAction1286_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1286_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1287(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1287_t)(val_t p0);
+val_t NEW_parser___ReduceAction1287(void);
+void CHECKNEW_parser___ReduceAction1287(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1287_t)(val_t p0);
+val_t NEW_ReduceAction1287_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1287_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1288(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1288_t)(val_t p0);
+val_t NEW_parser___ReduceAction1288(void);
+void CHECKNEW_parser___ReduceAction1288(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1288_t)(val_t p0);
+val_t NEW_ReduceAction1288_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1288_parser___ReduceAction___init_t)(val_t p0);
+void INIT_ATTRIBUTES__parser___ReduceAction1289(val_t p0);
+typedef void (*INIT_ATTRIBUTES__parser___ReduceAction1289_t)(val_t p0);
+val_t NEW_parser___ReduceAction1289(void);
+void CHECKNEW_parser___ReduceAction1289(val_t p0);
+typedef void (*CHECKNEW_parser___ReduceAction1289_t)(val_t p0);
+val_t NEW_ReduceAction1289_parser___ReduceAction___init(val_t p0);
+typedef val_t (*NEW_ReduceAction1289_parser___ReduceAction___init_t)(val_t p0);
 void INIT_ATTRIBUTES__opts___OptionText(val_t p0);
 typedef void (*INIT_ATTRIBUTES__opts___OptionText_t)(val_t p0);
 val_t NEW_opts___OptionText(void);
@@ -7997,7 +9024,7 @@ const int SFT_global[4] = {
 };
 const char LOCATE_abstracttool[] = "abstracttool.nit";
 const int SFT_abstracttool[6] = {
-  3223 /* Id of AbstractCompiler */,
+  3723 /* Id of AbstractCompiler */,
   6 /* Color of AbstractCompiler */,
   55 /* Group of ? */,
   142 /* Group of ? */,
@@ -8015,7 +9042,7 @@ const int SFT_syntax[6] = {
 };
 const char LOCATE_syntax___icode_generation[] = "syntax/icode_generation.nit";
 const int SFT_syntax___icode_generation[27] = {
-  2827 /* Id of A2IContext */,
+  3323 /* Id of A2IContext */,
   5 /* Color of A2IContext */,
   6 /* Group of ? */,
   74 /* Group of ? */,
@@ -8026,22 +9053,22 @@ const int SFT_syntax___icode_generation[27] = {
   74 /* Group of ? */,
   11 /* Group of ? */,
   105 /* Group of ? */,
-  3343 /* Id of A2IVisitor */,
+  3859 /* Id of A2IVisitor */,
   6 /* Color of A2IVisitor */,
   7 /* Group of ? */,
   84 /* Group of ? */,
   68 /* Group of ? */,
-  99 /* Group of ? */,
-  93 /* Group of ? */,
-  84 /* Group of ? */,
-  103 /* Group of ? */,
-  103 /* Group of ? */,
-  81 /* Group of ? */,
-  11 /* Group of ? */,
-  88 /* Group of ? */,
-  96 /* Group of ? */,
-  7 /* Group of ? */,
-  76 /* Group of ? */,
+  100 /* Group of ? */,
+  94 /* Group of ? */,
+  85 /* Group of ? */,
+  104 /* Group of ? */,
+  104 /* Group of ? */,
+  82 /* Group of ? */,
+  12 /* Group of ? */,
+  89 /* Group of ? */,
+  97 /* Group of ? */,
+  8 /* Group of ? */,
+  77 /* Group of ? */,
 };
 const char LOCATE_icode[] = "icode/icode.nit";
 const char LOCATE_icode___icode_tools[] = "icode/icode_tools.nit";
@@ -8084,134 +9111,134 @@ const int SFT_icode___icode_base[148] = {
   4 /* Color of IRoutine */,
   2 /* Group of ? */,
   51 /* Group of ? */,
-  2699 /* Id of IClosureDef */,
+  3195 /* Id of IClosureDef */,
   5 /* Color of IClosureDef */,
   72 /* Group of ? */,
   227 /* Id of ICode */,
   4 /* Color of ICode */,
   2 /* Group of ? */,
   58 /* Group of ? */,
-  2695 /* Id of ICode0 */,
+  3191 /* Id of ICode0 */,
   5 /* Color of ICode0 */,
   66 /* Group of ? */,
-  2691 /* Id of ICode1 */,
+  3187 /* Id of ICode1 */,
   5 /* Color of ICode1 */,
   4 /* Group of ? */,
   66 /* Group of ? */,
-  2687 /* Id of ICode2 */,
+  3183 /* Id of ICode2 */,
   5 /* Color of ICode2 */,
   4 /* Group of ? */,
   66 /* Group of ? */,
-  2683 /* Id of ICodeN */,
+  3179 /* Id of ICodeN */,
   5 /* Color of ICodeN */,
   4 /* Group of ? */,
   67 /* Group of ? */,
-  3055 /* Id of ISeq */,
+  3555 /* Id of ISeq */,
   6 /* Color of ISeq */,
   4 /* Group of ? */,
   68 /* Group of ? */,
-  3723 /* Id of ILoop */,
+  4235 /* Id of ILoop */,
   7 /* Color of ILoop */,
   73 /* Group of ? */,
-  3095 /* Id of IIf */,
+  3595 /* Id of IIf */,
   6 /* Color of IIf */,
   5 /* Group of ? */,
   69 /* Group of ? */,
-  3107 /* Id of IEscape */,
+  3607 /* Id of IEscape */,
   6 /* Color of IEscape */,
   4 /* Group of ? */,
   67 /* Group of ? */,
-  3147 /* Id of IAbort */,
+  3647 /* Id of IAbort */,
   6 /* Color of IAbort */,
   4 /* Group of ? */,
   67 /* Group of ? */,
-  3143 /* Id of IAbsCall */,
+  3643 /* Id of IAbsCall */,
   6 /* Color of IAbsCall */,
   6 /* Group of ? */,
   73 /* Group of ? */,
-  3731 /* Id of ICall */,
+  4243 /* Id of ICall */,
   7 /* Color of ICall */,
   78 /* Group of ? */,
-  3707 /* Id of ISuper */,
+  4219 /* Id of ISuper */,
   7 /* Color of ISuper */,
   78 /* Group of ? */,
-  3719 /* Id of INew */,
+  4231 /* Id of INew */,
   7 /* Color of INew */,
   8 /* Group of ? */,
   78 /* Group of ? */,
-  3139 /* Id of IAllocateInstance */,
+  3639 /* Id of IAllocateInstance */,
   6 /* Color of IAllocateInstance */,
   4 /* Group of ? */,
   67 /* Group of ? */,
-  3711 /* Id of IStaticCall */,
+  4223 /* Id of IStaticCall */,
   7 /* Color of IStaticCall */,
   78 /* Group of ? */,
-  3115 /* Id of ICheckInstance */,
+  3615 /* Id of ICheckInstance */,
   6 /* Color of ICheckInstance */,
   5 /* Group of ? */,
   69 /* Group of ? */,
-  3091 /* Id of IInitAttributes */,
+  3591 /* Id of IInitAttributes */,
   6 /* Color of IInitAttributes */,
   5 /* Group of ? */,
   69 /* Group of ? */,
-  3111 /* Id of IClosCall */,
+  3611 /* Id of IClosCall */,
   6 /* Color of IClosCall */,
   6 /* Group of ? */,
   73 /* Group of ? */,
-  3075 /* Id of INative */,
+  3575 /* Id of INative */,
   6 /* Color of INative */,
   6 /* Group of ? */,
   74 /* Group of ? */,
-  3087 /* Id of IIntValue */,
+  3587 /* Id of IIntValue */,
   6 /* Color of IIntValue */,
   4 /* Group of ? */,
   67 /* Group of ? */,
-  3123 /* Id of IBoolValue */,
+  3623 /* Id of IBoolValue */,
   6 /* Color of IBoolValue */,
   4 /* Group of ? */,
   67 /* Group of ? */,
-  3051 /* Id of IStringValue */,
+  3551 /* Id of IStringValue */,
   6 /* Color of IStringValue */,
   4 /* Group of ? */,
   67 /* Group of ? */,
-  3103 /* Id of IFloatValue */,
+  3603 /* Id of IFloatValue */,
   6 /* Color of IFloatValue */,
   4 /* Group of ? */,
   67 /* Group of ? */,
-  3119 /* Id of ICharValue */,
+  3619 /* Id of ICharValue */,
   6 /* Color of ICharValue */,
   4 /* Group of ? */,
   67 /* Group of ? */,
-  3079 /* Id of IMove */,
+  3579 /* Id of IMove */,
   6 /* Color of IMove */,
   69 /* Group of ? */,
-  3131 /* Id of IAttrRead */,
+  3631 /* Id of IAttrRead */,
   6 /* Color of IAttrRead */,
   5 /* Group of ? */,
   69 /* Group of ? */,
-  3127 /* Id of IAttrWrite */,
+  3627 /* Id of IAttrWrite */,
   6 /* Color of IAttrWrite */,
   6 /* Group of ? */,
   70 /* Group of ? */,
-  3135 /* Id of IAttrIsset */,
+  3635 /* Id of IAttrIsset */,
   6 /* Color of IAttrIsset */,
   5 /* Group of ? */,
   69 /* Group of ? */,
-  3047 /* Id of ITypeCheck */,
+  3547 /* Id of ITypeCheck */,
   6 /* Color of ITypeCheck */,
   6 /* Group of ? */,
   70 /* Group of ? */,
-  3083 /* Id of IIs */,
+  3583 /* Id of IIs */,
   6 /* Color of IIs */,
   70 /* Group of ? */,
-  3071 /* Id of INot */,
+  3571 /* Id of INot */,
   6 /* Color of INot */,
   69 /* Group of ? */,
-  3063 /* Id of IOnce */,
+  3563 /* Id of IOnce */,
   6 /* Color of IOnce */,
   4 /* Group of ? */,
   67 /* Group of ? */,
-  3099 /* Id of IHasClos */,
+  3599 /* Id of IHasClos */,
   6 /* Color of IHasClos */,
   4 /* Group of ? */,
   67 /* Group of ? */,
@@ -8229,22 +9256,22 @@ const int SFT_metamodel___genericity[11] = {
   7 /* Group of ? */,
   87 /* Group of ? */,
   68 /* Group of ? */,
-  3007 /* Id of MMTypeGeneric */,
+  3507 /* Id of MMTypeGeneric */,
   6 /* Color of MMTypeGeneric */,
   4 /* Group of ? */,
-  86 /* Group of ? */,
-  3011 /* Id of MMTypeFormalParameter */,
+  87 /* Group of ? */,
+  3511 /* Id of MMTypeFormalParameter */,
   6 /* Color of MMTypeFormalParameter */,
   5 /* Group of ? */,
-  88 /* Group of ? */,
+  89 /* Group of ? */,
 };
 const char LOCATE_metamodel___type_formal[] = "metamodel/type_formal.nit";
 const int SFT_metamodel___type_formal[5] = {
   69 /* Group of ? */,
-  2599 /* Id of MMTypeFormal */,
+  3095 /* Id of MMTypeFormal */,
   5 /* Color of MMTypeFormal */,
   3 /* Group of ? */,
-  84 /* Group of ? */,
+  85 /* Group of ? */,
 };
 const char LOCATE_metamodel___inheritance[] = "metamodel/inheritance.nit";
 const int SFT_metamodel___inheritance[19] = {
@@ -8254,17 +9281,17 @@ const int SFT_metamodel___inheritance[19] = {
   93 /* Group of ? */,
   53 /* Group of ? */,
   50 /* Group of ? */,
-  3031 /* Id of MMImplicitLocalClass */,
+  3531 /* Id of MMImplicitLocalClass */,
   7 /* Color of MMImplicitLocalClass */,
   152 /* Group of ? */,
-  2615 /* Id of MMRefineAncestor */,
+  3111 /* Id of MMRefineAncestor */,
   5 /* Color of MMRefineAncestor */,
   4 /* Group of ? */,
   60 /* Group of ? */,
-  2611 /* Id of MMSpecAncestor */,
+  3107 /* Id of MMSpecAncestor */,
   5 /* Color of MMSpecAncestor */,
   60 /* Group of ? */,
-  2639 /* Id of MMDefaultAncestor */,
+  3135 /* Id of MMDefaultAncestor */,
   5 /* Color of MMDefaultAncestor */,
   60 /* Group of ? */,
 };
@@ -8274,7 +9301,7 @@ const int SFT_metamodel___static_type[48] = {
   109 /* Group of ? */,
   2 /* Group of ? */,
   54 /* Group of ? */,
-  2619 /* Id of MMParam */,
+  3115 /* Id of MMParam */,
   5 /* Color of MMParam */,
   2 /* Group of ? */,
   60 /* Group of ? */,
@@ -8295,22 +9322,22 @@ const int SFT_metamodel___static_type[48] = {
   143 /* Id of MMType */,
   4 /* Color of MMType */,
   2 /* Group of ? */,
-  70 /* Group of ? */,
-  2623 /* Id of MMNullableType */,
+  71 /* Group of ? */,
+  3119 /* Id of MMNullableType */,
   5 /* Color of MMNullableType */,
   3 /* Group of ? */,
-  84 /* Group of ? */,
-  2603 /* Id of MMTypeClass */,
+  85 /* Group of ? */,
+  3099 /* Id of MMTypeClass */,
   5 /* Color of MMTypeClass */,
   3 /* Group of ? */,
-  84 /* Group of ? */,
-  3003 /* Id of MMTypeSimpleClass */,
+  85 /* Group of ? */,
+  3503 /* Id of MMTypeSimpleClass */,
   6 /* Color of MMTypeSimpleClass */,
-  86 /* Group of ? */,
-  2595 /* Id of MMTypeNone */,
+  87 /* Group of ? */,
+  3091 /* Id of MMTypeNone */,
   5 /* Color of MMTypeNone */,
   3 /* Group of ? */,
-  84 /* Group of ? */,
+  85 /* Group of ? */,
   4 /* Group of ? */,
   84 /* Group of ? */,
   155 /* Id of MMImportedCast */,
@@ -8329,7 +9356,7 @@ const int SFT_metamodel___abstractmetamodel[41] = {
   4 /* Color of MMDirectory */,
   2 /* Group of ? */,
   50 /* Group of ? */,
-  2627 /* Id of MMModule */,
+  3123 /* Id of MMModule */,
   6 /* Color of MMModule */,
   5 /* Group of ? */,
   86 /* Group of ? */,
@@ -8337,7 +9364,7 @@ const int SFT_metamodel___abstractmetamodel[41] = {
   4 /* Color of MMGlobalClass */,
   2 /* Group of ? */,
   51 /* Group of ? */,
-  2635 /* Id of MMLocalClass */,
+  3131 /* Id of MMLocalClass */,
   6 /* Color of MMLocalClass */,
   14 /* Group of ? */,
   113 /* Group of ? */,
@@ -8349,26 +9376,26 @@ const int SFT_metamodel___abstractmetamodel[41] = {
   4 /* Color of MMLocalProperty */,
   4 /* Group of ? */,
   57 /* Group of ? */,
-  2643 /* Id of MMAttribute */,
+  3139 /* Id of MMAttribute */,
   5 /* Color of MMAttribute */,
   73 /* Group of ? */,
   167 /* Id of MMExplicitImport */,
   4 /* Color of MMExplicitImport */,
   3 /* Group of ? */,
   54 /* Group of ? */,
-  2631 /* Id of MMMethod */,
+  3127 /* Id of MMMethod */,
   6 /* Color of MMMethod */,
   80 /* Group of ? */,
-  3035 /* Id of MMConcreteClass */,
+  3535 /* Id of MMConcreteClass */,
   7 /* Color of MMConcreteClass */,
   156 /* Group of ? */,
 };
 const char LOCATE_metamodel___partial_order[] = "metamodel/partial_order.nit";
 const int SFT_metamodel___partial_order[8] = {
-  2527 /* Id of PartialOrder */,
-  7 /* Color of PartialOrder */,
+  3023 /* Id of PartialOrder */,
+  8 /* Color of PartialOrder */,
   2 /* Group of ? */,
-  78 /* Group of ? */,
+  80 /* Group of ? */,
   107 /* Id of PartialOrderElement */,
   4 /* Color of PartialOrderElement */,
   2 /* Group of ? */,
@@ -8377,26 +9404,28 @@ const int SFT_metamodel___partial_order[8] = {
 const char LOCATE_standard[] = "../lib/standard/standard.nit";
 const char LOCATE_standard___environ[] = "../lib/standard/environ.nit";
 const int SFT_standard___environ[2] = {
-  117 /* Group of ? */,
+  127 /* Group of ? */,
   50 /* Group of ? */,
 };
 const char LOCATE_standard___string[] = "../lib/standard/string.nit";
-const int SFT_standard___string[24] = {
-  3743 /* Id of AbstractString */,
-  12 /* Color of AbstractString */,
+const int SFT_standard___string[26] = {
+  4255 /* Id of AbstractString */,
+  13 /* Color of AbstractString */,
   3 /* Group of ? */,
-  103 /* Group of ? */,
-  4055 /* Id of String */,
-  8 /* Color of String */,
-  119 /* Group of ? */,
-  4267 /* Id of Buffer */,
-  14 /* Color of Buffer */,
+  111 /* Group of ? */,
+  4603 /* Id of String */,
+  9 /* Color of String */,
   4 /* Group of ? */,
-  120 /* Group of ? */,
+  129 /* Group of ? */,
+  4823 /* Id of Buffer */,
+  5 /* Color of Buffer */,
+  4 /* Group of ? */,
+  126 /* Group of ? */,
   37 /* Group of ? */,
-  72 /* Group of ? */,
+  74 /* Group of ? */,
   50 /* Group of ? */,
-  66 /* Group of ? */,
+  74 /* Group of ? */,
+  68 /* Group of ? */,
   61 /* Group of ? */,
   -5 /* Id of NativeString */,
   4 /* Color of NativeString */,
@@ -8408,13 +9437,16 @@ const int SFT_standard___string[24] = {
   55 /* Group of ? */,
 };
 const char LOCATE_standard___collection[] = "../lib/standard/collection/collection.nit";
+const int SFT_standard___collection[1] = {
+  100 /* Group of ? */,
+};
 const char LOCATE_standard___collection___range[] = "../lib/standard/collection/range.nit";
 const int SFT_standard___collection___range[8] = {
-  2507 /* Id of Range */,
-  7 /* Color of Range */,
+  3003 /* Id of Range */,
+  8 /* Color of Range */,
   2 /* Group of ? */,
-  78 /* Group of ? */,
-  2655 /* Id of IteratorRange */,
+  80 /* Group of ? */,
+  3151 /* Id of IteratorRange */,
   5 /* Color of IteratorRange */,
   2 /* Group of ? */,
   55 /* Group of ? */,
@@ -8422,61 +9454,61 @@ const int SFT_standard___collection___range[8] = {
 const char LOCATE_standard___collection___abstract_collection[] = "../lib/standard/collection/abstract_collection.nit";
 const int SFT_standard___collection___abstract_collection[63] = {
   283 /* Id of Collection */,
-  6 /* Color of Collection */,
-  68 /* Group of ? */,
-  2559 /* Id of NaiveCollection */,
-  7 /* Color of NaiveCollection */,
-  78 /* Group of ? */,
+  7 /* Color of Collection */,
+  70 /* Group of ? */,
+  3055 /* Id of NaiveCollection */,
+  8 /* Color of NaiveCollection */,
+  80 /* Group of ? */,
   187 /* Id of Iterator */,
   4 /* Color of Iterator */,
   51 /* Group of ? */,
-  2775 /* Id of Container */,
-  7 /* Color of Container */,
+  3267 /* Id of Container */,
+  8 /* Color of Container */,
   2 /* Group of ? */,
-  78 /* Group of ? */,
-  2771 /* Id of ContainerIterator */,
+  80 /* Group of ? */,
+  3271 /* Id of ContainerIterator */,
   5 /* Color of ContainerIterator */,
   2 /* Group of ? */,
   55 /* Group of ? */,
   375 /* Id of RemovableCollection */,
-  8 /* Color of RemovableCollection */,
-  82 /* Group of ? */,
-  2959 /* Id of SimpleCollection */,
-  9 /* Color of SimpleCollection */,
+  9 /* Color of RemovableCollection */,
   52 /* Group of ? */,
-  3683 /* Id of Set */,
+  3459 /* Id of SimpleCollection */,
+  10 /* Color of SimpleCollection */,
+  90 /* Group of ? */,
+  4195 /* Id of Set */,
   4 /* Color of Set */,
   50 /* Group of ? */,
   135 /* Id of MapRead */,
   4 /* Color of MapRead */,
   50 /* Group of ? */,
-  2587 /* Id of Map */,
+  3079 /* Id of Map */,
   6 /* Color of Map */,
   62 /* Group of ? */,
   139 /* Id of MapIterator */,
   4 /* Color of MapIterator */,
   50 /* Group of ? */,
-  2583 /* Id of MapKeysIterator */,
+  3083 /* Id of MapKeysIterator */,
   5 /* Color of MapKeysIterator */,
   2 /* Group of ? */,
   55 /* Group of ? */,
-  2579 /* Id of MapValuesIterator */,
+  3075 /* Id of MapValuesIterator */,
   5 /* Color of MapValuesIterator */,
   2 /* Group of ? */,
   55 /* Group of ? */,
   355 /* Id of SequenceRead */,
-  7 /* Color of SequenceRead */,
-  78 /* Group of ? */,
-  3687 /* Id of Sequence */,
-  11 /* Color of Sequence */,
-  93 /* Group of ? */,
-  2671 /* Id of IndexedIterator */,
+  8 /* Color of SequenceRead */,
+  80 /* Group of ? */,
+  4199 /* Id of Sequence */,
+  12 /* Color of Sequence */,
+  101 /* Group of ? */,
+  3167 /* Id of IndexedIterator */,
   5 /* Color of IndexedIterator */,
   55 /* Group of ? */,
-  3179 /* Id of CoupleMap */,
+  3679 /* Id of CoupleMap */,
   7 /* Color of CoupleMap */,
   66 /* Group of ? */,
-  2767 /* Id of CoupleMapIterator */,
+  3263 /* Id of CoupleMapIterator */,
   5 /* Color of CoupleMapIterator */,
   2 /* Group of ? */,
   55 /* Group of ? */,
@@ -8494,90 +9526,90 @@ const int SFT_standard___kernel[27] = {
   4 /* Color of Sys */,
   51 /* Group of ? */,
   275 /* Id of Comparable */,
-  5 /* Color of Comparable */,
-  55 /* Group of ? */,
-  2747 /* Id of Discrete */,
-  6 /* Color of Discrete */,
-  66 /* Group of ? */,
+  6 /* Color of Comparable */,
+  57 /* Group of ? */,
+  3243 /* Id of Discrete */,
+  4 /* Color of Discrete */,
+  68 /* Group of ? */,
   -13 /* Id of Bool */,
   4 /* Color of Bool */,
   50 /* Group of ? */,
   -9 /* Id of Float */,
   4 /* Color of Float */,
-  51 /* Group of ? */,
+  52 /* Group of ? */,
   -29 /* Id of Int */,
   7 /* Color of Int */,
-  75 /* Group of ? */,
+  77 /* Group of ? */,
   -33 /* Id of Char */,
   7 /* Color of Char */,
-  72 /* Group of ? */,
+  77 /* Group of ? */,
   -1 /* Id of Pointer */,
   4 /* Color of Pointer */,
   50 /* Group of ? */,
 };
 const char LOCATE_standard___collection___list[] = "../lib/standard/collection/list.nit";
 const int SFT_standard___collection___list[12] = {
-  4075 /* Id of List */,
-  12 /* Color of List */,
+  4623 /* Id of List */,
+  13 /* Color of List */,
   2 /* Group of ? */,
-  103 /* Group of ? */,
-  3043 /* Id of ListIterator */,
+  111 /* Group of ? */,
+  3543 /* Id of ListIterator */,
   6 /* Color of ListIterator */,
   2 /* Group of ? */,
   57 /* Group of ? */,
-  3039 /* Id of ListNode */,
-  8 /* Color of ListNode */,
+  3539 /* Id of ListNode */,
+  9 /* Color of ListNode */,
   3 /* Group of ? */,
-  82 /* Group of ? */,
+  84 /* Group of ? */,
 };
 const char LOCATE_standard___collection___sorter[] = "../lib/standard/collection/sorter.nit";
 const int SFT_standard___collection___sorter[6] = {
   307 /* Id of AbstractSorter */,
   4 /* Color of AbstractSorter */,
   50 /* Group of ? */,
-  2787 /* Id of ComparableSorter */,
+  3283 /* Id of ComparableSorter */,
   5 /* Color of ComparableSorter */,
   56 /* Group of ? */,
 };
 const char LOCATE_standard___collection___array[] = "../lib/standard/collection/array.nit";
 const int SFT_standard___collection___array[43] = {
-  3227 /* Id of AbstractArrayRead */,
-  10 /* Color of AbstractArrayRead */,
+  3727 /* Id of AbstractArrayRead */,
+  11 /* Color of AbstractArrayRead */,
   2 /* Group of ? */,
-  86 /* Group of ? */,
-  4087 /* Id of AbstractArray */,
-  13 /* Color of AbstractArray */,
-  116 /* Group of ? */,
-  4271 /* Id of Array */,
+  93 /* Group of ? */,
+  4635 /* Id of AbstractArray */,
+  14 /* Color of AbstractArray */,
+  84 /* Group of ? */,
+  4827 /* Id of Array */,
   4 /* Color of Array */,
   3 /* Group of ? */,
-  103 /* Group of ? */,
-  3219 /* Id of ArrayIterator */,
+  111 /* Group of ? */,
+  3719 /* Id of ArrayIterator */,
   6 /* Color of ArrayIterator */,
   2 /* Group of ? */,
   57 /* Group of ? */,
-  4083 /* Id of ArraySet */,
-  10 /* Color of ArraySet */,
+  4631 /* Id of ArraySet */,
+  11 /* Color of ArraySet */,
   2 /* Group of ? */,
-  86 /* Group of ? */,
-  2815 /* Id of ArraySetIterator */,
+  93 /* Group of ? */,
+  3311 /* Id of ArraySetIterator */,
   5 /* Color of ArraySetIterator */,
   2 /* Group of ? */,
   55 /* Group of ? */,
-  3739 /* Id of ArrayMap */,
+  4251 /* Id of ArrayMap */,
   8 /* Color of ArrayMap */,
   2 /* Group of ? */,
   68 /* Group of ? */,
-  3215 /* Id of ArrayMapKeys */,
-  9 /* Color of ArrayMapKeys */,
+  3715 /* Id of ArrayMapKeys */,
+  10 /* Color of ArrayMapKeys */,
   2 /* Group of ? */,
-  86 /* Group of ? */,
-  3211 /* Id of ArrayMapValues */,
-  9 /* Color of ArrayMapValues */,
+  80 /* Group of ? */,
+  3711 /* Id of ArrayMapValues */,
+  10 /* Color of ArrayMapValues */,
   2 /* Group of ? */,
-  86 /* Group of ? */,
+  80 /* Group of ? */,
   50 /* Group of ? */,
-  67 /* Group of ? */,
+  69 /* Group of ? */,
   303 /* Id of ArrayCapable */,
   5 /* Color of ArrayCapable */,
   59 /* Group of ? */,
@@ -8587,41 +9619,41 @@ const int SFT_standard___collection___array[43] = {
 };
 const char LOCATE_standard___collection___hash_collection[] = "../lib/standard/collection/hash_collection.nit";
 const int SFT_standard___collection___hash_collection[38] = {
-  2719 /* Id of HashCollection */,
-  7 /* Color of HashCollection */,
+  3215 /* Id of HashCollection */,
+  8 /* Color of HashCollection */,
   2 /* Group of ? */,
-  86 /* Group of ? */,
+  80 /* Group of ? */,
   239 /* Id of HashNode */,
   4 /* Color of HashNode */,
   2 /* Group of ? */,
   50 /* Group of ? */,
-  3159 /* Id of HashMap */,
-  8 /* Color of HashMap */,
+  3651 /* Id of HashMap */,
+  7 /* Color of HashMap */,
   9 /* Group of ? */,
   66 /* Group of ? */,
-  3155 /* Id of HashMapKeys */,
-  9 /* Color of HashMapKeys */,
+  3659 /* Id of HashMapKeys */,
+  10 /* Color of HashMapKeys */,
   2 /* Group of ? */,
-  86 /* Group of ? */,
-  3151 /* Id of HashMapValues */,
-  9 /* Color of HashMapValues */,
+  80 /* Group of ? */,
+  3655 /* Id of HashMapValues */,
+  10 /* Color of HashMapValues */,
   2 /* Group of ? */,
-  86 /* Group of ? */,
-  2711 /* Id of HashMapNode */,
+  80 /* Group of ? */,
+  3207 /* Id of HashMapNode */,
   5 /* Color of HashMapNode */,
   7 /* Group of ? */,
   58 /* Group of ? */,
-  2715 /* Id of HashMapIterator */,
+  3211 /* Id of HashMapIterator */,
   5 /* Color of HashMapIterator */,
   2 /* Group of ? */,
   55 /* Group of ? */,
-  4079 /* Id of HashSet */,
-  10 /* Color of HashSet */,
-  55 /* Group of ? */,
-  2703 /* Id of HashSetNode */,
+  4627 /* Id of HashSet */,
+  6 /* Color of HashSet */,
+  56 /* Group of ? */,
+  3199 /* Id of HashSetNode */,
   5 /* Color of HashSetNode */,
   58 /* Group of ? */,
-  2707 /* Id of HashSetIterator */,
+  3203 /* Id of HashSetIterator */,
   5 /* Color of HashSetIterator */,
   2 /* Group of ? */,
   55 /* Group of ? */,
@@ -8638,28 +9670,28 @@ const int SFT_standard___time[2] = {
 const char LOCATE_standard___file[] = "../lib/standard/file.nit";
 const int SFT_standard___file[30] = {
   28 /* Group of ? */,
-  2731 /* Id of FStream */,
+  3227 /* Id of FStream */,
   4 /* Color of FStream */,
   2 /* Group of ? */,
   50 /* Group of ? */,
-  3727 /* Id of IFStream */,
+  4239 /* Id of IFStream */,
   8 /* Color of IFStream */,
   6 /* Group of ? */,
   73 /* Group of ? */,
-  2991 /* Id of OFStream */,
+  3491 /* Id of OFStream */,
   7 /* Color of OFStream */,
   4 /* Group of ? */,
   54 /* Group of ? */,
-  4059 /* Id of Stdin */,
+  4607 /* Id of Stdin */,
   9 /* Color of Stdin */,
   78 /* Group of ? */,
-  3675 /* Id of Stdout */,
+  4187 /* Id of Stdout */,
   8 /* Color of Stdout */,
   66 /* Group of ? */,
-  3679 /* Id of Stderr */,
+  4191 /* Id of Stderr */,
   8 /* Color of Stderr */,
   66 /* Group of ? */,
-  125 /* Group of ? */,
+  139 /* Group of ? */,
   60 /* Group of ? */,
   -25 /* Id of FileStat */,
   5 /* Color of FileStat */,
@@ -8673,32 +9705,32 @@ const int SFT_standard___stream[32] = {
   203 /* Id of IOS */,
   5 /* Color of IOS */,
   61 /* Group of ? */,
-  2675 /* Id of IStream */,
+  3171 /* Id of IStream */,
   7 /* Color of IStream */,
   66 /* Group of ? */,
-  2555 /* Id of OStream */,
+  3051 /* Id of OStream */,
   6 /* Color of OStream */,
   63 /* Group of ? */,
-  3203 /* Id of BufferedIStream */,
+  3703 /* Id of BufferedIStream */,
   6 /* Color of BufferedIStream */,
   4 /* Group of ? */,
   54 /* Group of ? */,
-  3067 /* Id of IOStream */,
+  3567 /* Id of IOStream */,
   10 /* Color of IOStream */,
   83 /* Group of ? */,
-  2735 /* Id of FDStream */,
+  3231 /* Id of FDStream */,
   4 /* Color of FDStream */,
   2 /* Group of ? */,
   50 /* Group of ? */,
-  3167 /* Id of FDIStream */,
+  3667 /* Id of FDIStream */,
   9 /* Color of FDIStream */,
   4 /* Group of ? */,
   76 /* Group of ? */,
-  3163 /* Id of FDOStream */,
+  3663 /* Id of FDOStream */,
   8 /* Color of FDOStream */,
   3 /* Group of ? */,
   73 /* Group of ? */,
-  3735 /* Id of FDIOStream */,
+  4247 /* Id of FDIOStream */,
   11 /* Color of FDIOStream */,
   59 /* Group of ? */,
   35 /* Group of ? */,
@@ -8706,17 +9738,17 @@ const int SFT_standard___stream[32] = {
 const char LOCATE_standard___string_search[] = "../lib/standard/string_search.nit";
 const int SFT_standard___string_search[12] = {
   103 /* Id of Pattern */,
-  4 /* Color of Pattern */,
-  50 /* Group of ? */,
-  2807 /* Id of BM_Pattern */,
-  5 /* Color of BM_Pattern */,
+  5 /* Color of Pattern */,
+  52 /* Group of ? */,
+  3303 /* Id of BM_Pattern */,
+  6 /* Color of BM_Pattern */,
   2 /* Group of ? */,
-  55 /* Group of ? */,
+  57 /* Group of ? */,
   131 /* Id of Match */,
   4 /* Color of Match */,
   2 /* Group of ? */,
   50 /* Group of ? */,
-  136 /* Group of ? */,
+  150 /* Group of ? */,
 };
 const char LOCATE_standard___exec[] = "../lib/standard/exec.nit";
 const int SFT_standard___exec[20] = {
@@ -8724,15 +9756,15 @@ const int SFT_standard___exec[20] = {
   4 /* Color of Process */,
   2 /* Group of ? */,
   50 /* Group of ? */,
-  3059 /* Id of IProcess */,
+  3559 /* Id of IProcess */,
   9 /* Color of IProcess */,
   4 /* Group of ? */,
   78 /* Group of ? */,
-  2987 /* Id of OProcess */,
+  3487 /* Id of OProcess */,
   8 /* Color of OProcess */,
   3 /* Group of ? */,
   73 /* Group of ? */,
-  3715 /* Id of IOProcess */,
+  4227 /* Id of IOProcess */,
   11 /* Color of IOProcess */,
   84 /* Group of ? */,
   54 /* Group of ? */,
@@ -8743,9 +9775,9 @@ const int SFT_standard___exec[20] = {
 };
 const char LOCATE_standard___math[] = "../lib/standard/math.nit";
 const int SFT_standard___math[4] = {
-  89 /* Group of ? */,
-  62 /* Group of ? */,
-  77 /* Group of ? */,
+  91 /* Group of ? */,
+  63 /* Group of ? */,
+  79 /* Group of ? */,
   44 /* Group of ? */,
 };
 const char LOCATE_standard___gc[] = "../lib/standard/gc.nit";
@@ -8758,14 +9790,14 @@ const int SFT_location[8] = {
   4 /* Color of SourceFile */,
   2 /* Group of ? */,
   50 /* Group of ? */,
-  2647 /* Id of Location */,
-  6 /* Color of Location */,
+  3143 /* Id of Location */,
+  7 /* Color of Location */,
   2 /* Group of ? */,
-  67 /* Group of ? */,
+  69 /* Group of ? */,
 };
 const char LOCATE_symbol[] = "../lib/symbol.nit";
 const int SFT_symbol[5] = {
-  116 /* Group of ? */,
+  126 /* Group of ? */,
   31 /* Id of Symbol */,
   4 /* Color of Symbol */,
   2 /* Group of ? */,
@@ -8774,73 +9806,73 @@ const int SFT_symbol[5] = {
 const char LOCATE_metamodel___virtualtype[] = "metamodel/virtualtype.nit";
 const int SFT_metamodel___virtualtype[10] = {
   51 /* Group of ? */,
-  2591 /* Id of MMTypeProperty */,
+  3087 /* Id of MMTypeProperty */,
   5 /* Color of MMTypeProperty */,
   10 /* Group of ? */,
   72 /* Group of ? */,
-  2999 /* Id of MMVirtualType */,
+  3499 /* Id of MMVirtualType */,
   6 /* Color of MMVirtualType */,
   5 /* Group of ? */,
-  88 /* Group of ? */,
+  89 /* Group of ? */,
   140 /* Group of ? */,
 };
 const char LOCATE_syntax___typing[] = "syntax/typing.nit";
 const int SFT_syntax___typing[55] = {
   123 /* Group of ? */,
-  2831 /* Id of TypingVisitor */,
+  3327 /* Id of TypingVisitor */,
   6 /* Color of TypingVisitor */,
   7 /* Group of ? */,
   84 /* Group of ? */,
   69 /* Group of ? */,
-  87 /* Group of ? */,
-  7 /* Group of ? */,
-  100 /* Group of ? */,
-  95 /* Group of ? */,
-  97 /* Group of ? */,
-  103 /* Group of ? */,
+  88 /* Group of ? */,
+  8 /* Group of ? */,
+  101 /* Group of ? */,
+  96 /* Group of ? */,
+  98 /* Group of ? */,
   104 /* Group of ? */,
-  13 /* Group of ? */,
-  85 /* Group of ? */,
-  11 /* Group of ? */,
-  7 /* Group of ? */,
-  82 /* Group of ? */,
-  11 /* Group of ? */,
-  4043 /* Id of AAbsControl */,
+  105 /* Group of ? */,
+  14 /* Group of ? */,
+  86 /* Group of ? */,
+  12 /* Group of ? */,
+  8 /* Group of ? */,
+  83 /* Group of ? */,
+  12 /* Group of ? */,
+  4591 /* Id of AAbsControl */,
   8 /* Color of AAbsControl */,
-  11 /* Group of ? */,
-  88 /* Group of ? */,
   12 /* Group of ? */,
-  92 /* Group of ? */,
-  11 /* Group of ? */,
+  89 /* Group of ? */,
   13 /* Group of ? */,
-  91 /* Group of ? */,
-  74 /* Group of ? */,
-  11 /* Group of ? */,
-  11 /* Group of ? */,
-  88 /* Group of ? */,
-  18 /* Group of ? */,
-  74 /* Group of ? */,
-  79 /* Group of ? */,
-  16 /* Group of ? */,
-  96 /* Group of ? */,
-  11 /* Group of ? */,
+  93 /* Group of ? */,
+  12 /* Group of ? */,
+  14 /* Group of ? */,
+  92 /* Group of ? */,
+  75 /* Group of ? */,
+  12 /* Group of ? */,
+  12 /* Group of ? */,
+  89 /* Group of ? */,
+  19 /* Group of ? */,
+  75 /* Group of ? */,
+  80 /* Group of ? */,
+  17 /* Group of ? */,
   97 /* Group of ? */,
-  16 /* Group of ? */,
-  103 /* Group of ? */,
-  74 /* Group of ? */,
-  109 /* Group of ? */,
-  6 /* Group of ? */,
-  121 /* Group of ? */,
-  121 /* Group of ? */,
-  117 /* Group of ? */,
-  13 /* Group of ? */,
-  74 /* Group of ? */,
-  8 /* Group of ? */,
-  77 /* Group of ? */,
-  3763 /* Id of ATypeCheckExpr */,
+  12 /* Group of ? */,
+  98 /* Group of ? */,
+  17 /* Group of ? */,
+  104 /* Group of ? */,
+  75 /* Group of ? */,
+  110 /* Group of ? */,
+  7 /* Group of ? */,
+  122 /* Group of ? */,
+  122 /* Group of ? */,
+  118 /* Group of ? */,
+  14 /* Group of ? */,
+  75 /* Group of ? */,
+  9 /* Group of ? */,
+  78 /* Group of ? */,
+  4275 /* Id of ATypeCheckExpr */,
   6 /* Color of ATypeCheckExpr */,
-  74 /* Group of ? */,
-  90 /* Group of ? */,
+  75 /* Group of ? */,
+  91 /* Group of ? */,
 };
 const char LOCATE_syntax___scope[] = "syntax/scope.nit";
 const int SFT_syntax___scope[23] = {
@@ -8852,21 +9884,21 @@ const int SFT_syntax___scope[23] = {
   4 /* Color of ScopeBlock */,
   2 /* Group of ? */,
   50 /* Group of ? */,
-  2743 /* Id of EscapableBlock */,
+  3239 /* Id of EscapableBlock */,
   5 /* Color of EscapableBlock */,
   8 /* Group of ? */,
   63 /* Group of ? */,
-  3207 /* Id of BreakOnlyEscapableBlock */,
+  3707 /* Id of BreakOnlyEscapableBlock */,
   6 /* Color of BreakOnlyEscapableBlock */,
   71 /* Group of ? */,
-  3171 /* Id of EscapableClosure */,
+  3671 /* Id of EscapableClosure */,
   6 /* Color of EscapableClosure */,
   11 /* Group of ? */,
   71 /* Group of ? */,
-  3951 /* Id of AEscapeExpr */,
+  4495 /* Id of AEscapeExpr */,
   8 /* Color of AEscapeExpr */,
-  11 /* Group of ? */,
-  88 /* Group of ? */,
+  12 /* Group of ? */,
+  89 /* Group of ? */,
 };
 const char LOCATE_syntax___flow[] = "syntax/flow.nit";
 const int SFT_syntax___flow[20] = {
@@ -8881,11 +9913,11 @@ const int SFT_syntax___flow[20] = {
   5 /* Color of SubFlowContext */,
   7 /* Group of ? */,
   65 /* Group of ? */,
-  3199 /* Id of CastFlowContext */,
+  3699 /* Id of CastFlowContext */,
   6 /* Color of CastFlowContext */,
   8 /* Group of ? */,
   68 /* Group of ? */,
-  2575 /* Id of MergeFlowContext */,
+  3071 /* Id of MergeFlowContext */,
   5 /* Color of MergeFlowContext */,
   7 /* Group of ? */,
   65 /* Group of ? */,
@@ -8893,41 +9925,41 @@ const int SFT_syntax___flow[20] = {
 };
 const char LOCATE_syntax___syntax_base[] = "syntax/syntax_base.nit";
 const int SFT_syntax___syntax_base[101] = {
-  3019 /* Id of MMSrcModule */,
+  3519 /* Id of MMSrcModule */,
   7 /* Color of MMSrcModule */,
   23 /* Group of ? */,
   124 /* Group of ? */,
   78 /* Group of ? */,
   50 /* Group of ? */,
-  3695 /* Id of MMSrcLocalClass */,
+  4207 /* Id of MMSrcLocalClass */,
   8 /* Color of MMSrcLocalClass */,
   31 /* Group of ? */,
   159 /* Group of ? */,
   50 /* Group of ? */,
   51 /* Group of ? */,
-  3027 /* Id of MMSrcAttribute */,
+  3527 /* Id of MMSrcAttribute */,
   6 /* Color of MMSrcAttribute */,
   76 /* Group of ? */,
-  3023 /* Id of MMSrcMethod */,
+  3523 /* Id of MMSrcMethod */,
   7 /* Color of MMSrcMethod */,
   108 /* Group of ? */,
-  3703 /* Id of MMAttrImplementationMethod */,
+  4215 /* Id of MMAttrImplementationMethod */,
   8 /* Color of MMAttrImplementationMethod */,
   109 /* Group of ? */,
-  4067 /* Id of MMReadImplementationMethod */,
+  4615 /* Id of MMReadImplementationMethod */,
   9 /* Color of MMReadImplementationMethod */,
   111 /* Group of ? */,
-  4063 /* Id of MMWriteImplementationMethod */,
+  4611 /* Id of MMWriteImplementationMethod */,
   9 /* Color of MMWriteImplementationMethod */,
   111 /* Group of ? */,
-  3699 /* Id of MMMethSrcMethod */,
+  4211 /* Id of MMMethSrcMethod */,
   8 /* Color of MMMethSrcMethod */,
   12 /* Group of ? */,
   109 /* Group of ? */,
-  3015 /* Id of MMSrcTypeProperty */,
+  3515 /* Id of MMSrcTypeProperty */,
   6 /* Color of MMSrcTypeProperty */,
   75 /* Group of ? */,
-  4071 /* Id of MMImplicitInit */,
+  4619 /* Id of MMImplicitInit */,
   9 /* Color of MMImplicitInit */,
   20 /* Group of ? */,
   112 /* Group of ? */,
@@ -8938,75 +9970,75 @@ const int SFT_syntax___syntax_base[101] = {
   327 /* Id of VarVariable */,
   5 /* Color of VarVariable */,
   58 /* Group of ? */,
-  2535 /* Id of ParamVariable */,
+  3031 /* Id of ParamVariable */,
   5 /* Color of ParamVariable */,
   58 /* Group of ? */,
-  2811 /* Id of AutoVariable */,
+  3307 /* Id of AutoVariable */,
   5 /* Color of AutoVariable */,
   58 /* Group of ? */,
-  2791 /* Id of ClosureVariable */,
+  3287 /* Id of ClosureVariable */,
   5 /* Color of ClosureVariable */,
   5 /* Group of ? */,
   58 /* Group of ? */,
-  2823 /* Id of AbsSyntaxVisitor */,
+  3319 /* Id of AbsSyntaxVisitor */,
   5 /* Color of AbsSyntaxVisitor */,
   3 /* Group of ? */,
   55 /* Group of ? */,
   56 /* Group of ? */,
   4 /* Group of ? */,
   71 /* Group of ? */,
-  7 /* Group of ? */,
-  82 /* Group of ? */,
-  78 /* Group of ? */,
-  84 /* Group of ? */,
-  16 /* Group of ? */,
-  105 /* Group of ? */,
+  8 /* Group of ? */,
+  83 /* Group of ? */,
+  79 /* Group of ? */,
   85 /* Group of ? */,
-  84 /* Group of ? */,
+  17 /* Group of ? */,
+  106 /* Group of ? */,
+  86 /* Group of ? */,
+  85 /* Group of ? */,
+  79 /* Group of ? */,
+  76 /* Group of ? */,
+  7 /* Group of ? */,
+  76 /* Group of ? */,
   78 /* Group of ? */,
-  75 /* Group of ? */,
-  6 /* Group of ? */,
-  75 /* Group of ? */,
-  77 /* Group of ? */,
-  4047 /* Id of AAbsAbsSendExpr */,
+  4595 /* Id of AAbsAbsSendExpr */,
   6 /* Color of AAbsAbsSendExpr */,
-  100 /* Group of ? */,
-  4263 /* Id of AAbsSendExpr */,
+  101 /* Group of ? */,
+  4819 /* Id of AAbsSendExpr */,
   9 /* Color of AAbsSendExpr */,
-  106 /* Group of ? */,
-  4275 /* Id of ASuperInitCall */,
+  107 /* Group of ? */,
+  4831 /* Id of ASuperInitCall */,
   10 /* Color of ASuperInitCall */,
-  75 /* Group of ? */,
-  109 /* Group of ? */,
-  111 /* Group of ? */,
-  92 /* Group of ? */,
-  4315 /* Id of ASendReassignExpr */,
+  76 /* Group of ? */,
+  110 /* Group of ? */,
+  112 /* Group of ? */,
+  93 /* Group of ? */,
+  4871 /* Id of ASendReassignExpr */,
   13 /* Color of ASendReassignExpr */,
+  90 /* Group of ? */,
+  98 /* Group of ? */,
   89 /* Group of ? */,
-  97 /* Group of ? */,
-  88 /* Group of ? */,
-  88 /* Group of ? */,
-  93 /* Group of ? */,
-  88 /* Group of ? */,
-  88 /* Group of ? */,
-  103 /* Group of ? */,
-  11 /* Group of ? */,
-  80 /* Group of ? */,
+  89 /* Group of ? */,
+  94 /* Group of ? */,
+  89 /* Group of ? */,
+  89 /* Group of ? */,
+  104 /* Group of ? */,
+  12 /* Group of ? */,
+  81 /* Group of ? */,
+  76 /* Group of ? */,
   75 /* Group of ? */,
-  74 /* Group of ? */,
 };
 const char LOCATE_parser[] = "parser/parser.nit";
-const int SFT_parser[1607] = {
+const int SFT_parser[1979] = {
   39 /* Id of State */,
   4 /* Color of State */,
   2 /* Group of ? */,
   50 /* Group of ? */,
-  2531 /* Id of Parser */,
+  3027 /* Id of Parser */,
   5 /* Color of Parser */,
   2 /* Group of ? */,
   55 /* Group of ? */,
   4 /* Group of ? */,
-  2779 /* Id of ComputeProdLocationVisitor */,
+  3275 /* Id of ComputeProdLocationVisitor */,
   5 /* Color of ComputeProdLocationVisitor */,
   3 /* Group of ? */,
   55 /* Group of ? */,
@@ -9014,289 +10046,289 @@ const int SFT_parser[1607] = {
   4 /* Color of ReduceAction */,
   2 /* Group of ? */,
   50 /* Group of ? */,
-  2495 /* Id of ReduceAction0 */,
+  2991 /* Id of ReduceAction0 */,
   5 /* Color of ReduceAction0 */,
   54 /* Group of ? */,
-  2491 /* Id of ReduceAction1 */,
+  2987 /* Id of ReduceAction1 */,
   5 /* Color of ReduceAction1 */,
   54 /* Group of ? */,
-  2047 /* Id of ReduceAction2 */,
+  2427 /* Id of ReduceAction2 */,
   5 /* Color of ReduceAction2 */,
   54 /* Group of ? */,
-  1603 /* Id of ReduceAction3 */,
+  1983 /* Id of ReduceAction3 */,
   5 /* Color of ReduceAction3 */,
   54 /* Group of ? */,
-  1203 /* Id of ReduceAction4 */,
+  1547 /* Id of ReduceAction4 */,
   5 /* Color of ReduceAction4 */,
   54 /* Group of ? */,
-  839 /* Id of ReduceAction5 */,
+  1143 /* Id of ReduceAction5 */,
   5 /* Color of ReduceAction5 */,
   54 /* Group of ? */,
-  679 /* Id of ReduceAction6 */,
+  783 /* Id of ReduceAction6 */,
   5 /* Color of ReduceAction6 */,
   54 /* Group of ? */,
-  635 /* Id of ReduceAction7 */,
+  527 /* Id of ReduceAction7 */,
   5 /* Color of ReduceAction7 */,
   54 /* Group of ? */,
-  595 /* Id of ReduceAction8 */,
+  487 /* Id of ReduceAction8 */,
   5 /* Color of ReduceAction8 */,
   54 /* Group of ? */,
-  419 /* Id of ReduceAction9 */,
+  443 /* Id of ReduceAction9 */,
   5 /* Color of ReduceAction9 */,
   54 /* Group of ? */,
-  2487 /* Id of ReduceAction10 */,
+  2983 /* Id of ReduceAction10 */,
   5 /* Color of ReduceAction10 */,
   54 /* Group of ? */,
-  2443 /* Id of ReduceAction11 */,
+  2939 /* Id of ReduceAction11 */,
   5 /* Color of ReduceAction11 */,
   54 /* Group of ? */,
-  2399 /* Id of ReduceAction12 */,
+  2895 /* Id of ReduceAction12 */,
   5 /* Color of ReduceAction12 */,
   54 /* Group of ? */,
-  2355 /* Id of ReduceAction13 */,
+  2735 /* Id of ReduceAction13 */,
   5 /* Color of ReduceAction13 */,
   54 /* Group of ? */,
-  2311 /* Id of ReduceAction14 */,
+  2691 /* Id of ReduceAction14 */,
   5 /* Color of ReduceAction14 */,
   54 /* Group of ? */,
-  2267 /* Id of ReduceAction15 */,
+  2647 /* Id of ReduceAction15 */,
   5 /* Color of ReduceAction15 */,
   54 /* Group of ? */,
-  2223 /* Id of ReduceAction16 */,
+  2603 /* Id of ReduceAction16 */,
   5 /* Color of ReduceAction16 */,
   54 /* Group of ? */,
-  2179 /* Id of ReduceAction17 */,
+  2559 /* Id of ReduceAction17 */,
   5 /* Color of ReduceAction17 */,
   54 /* Group of ? */,
-  2135 /* Id of ReduceAction18 */,
+  2515 /* Id of ReduceAction18 */,
   5 /* Color of ReduceAction18 */,
   54 /* Group of ? */,
-  2091 /* Id of ReduceAction19 */,
+  2471 /* Id of ReduceAction19 */,
   5 /* Color of ReduceAction19 */,
   54 /* Group of ? */,
-  2043 /* Id of ReduceAction20 */,
+  2423 /* Id of ReduceAction20 */,
   5 /* Color of ReduceAction20 */,
   54 /* Group of ? */,
-  1999 /* Id of ReduceAction21 */,
+  2379 /* Id of ReduceAction21 */,
   5 /* Color of ReduceAction21 */,
   54 /* Group of ? */,
-  1955 /* Id of ReduceAction22 */,
+  2335 /* Id of ReduceAction22 */,
   5 /* Color of ReduceAction22 */,
   54 /* Group of ? */,
-  1911 /* Id of ReduceAction23 */,
+  2291 /* Id of ReduceAction23 */,
   5 /* Color of ReduceAction23 */,
   54 /* Group of ? */,
-  1867 /* Id of ReduceAction24 */,
+  2247 /* Id of ReduceAction24 */,
   5 /* Color of ReduceAction24 */,
   54 /* Group of ? */,
-  1823 /* Id of ReduceAction25 */,
+  2203 /* Id of ReduceAction25 */,
   5 /* Color of ReduceAction25 */,
   54 /* Group of ? */,
-  1779 /* Id of ReduceAction26 */,
+  2159 /* Id of ReduceAction26 */,
   5 /* Color of ReduceAction26 */,
   54 /* Group of ? */,
-  1735 /* Id of ReduceAction27 */,
+  2115 /* Id of ReduceAction27 */,
   5 /* Color of ReduceAction27 */,
   54 /* Group of ? */,
-  1691 /* Id of ReduceAction28 */,
+  2071 /* Id of ReduceAction28 */,
   5 /* Color of ReduceAction28 */,
   54 /* Group of ? */,
-  1647 /* Id of ReduceAction29 */,
+  2027 /* Id of ReduceAction29 */,
   5 /* Color of ReduceAction29 */,
   54 /* Group of ? */,
-  1599 /* Id of ReduceAction30 */,
+  1979 /* Id of ReduceAction30 */,
   5 /* Color of ReduceAction30 */,
   54 /* Group of ? */,
-  1555 /* Id of ReduceAction31 */,
+  1935 /* Id of ReduceAction31 */,
   5 /* Color of ReduceAction31 */,
   54 /* Group of ? */,
-  1515 /* Id of ReduceAction32 */,
+  1891 /* Id of ReduceAction32 */,
   5 /* Color of ReduceAction32 */,
   54 /* Group of ? */,
-  1471 /* Id of ReduceAction33 */,
+  1851 /* Id of ReduceAction33 */,
   5 /* Color of ReduceAction33 */,
   54 /* Group of ? */,
-  1431 /* Id of ReduceAction34 */,
+  1807 /* Id of ReduceAction34 */,
   5 /* Color of ReduceAction34 */,
   54 /* Group of ? */,
-  1399 /* Id of ReduceAction35 */,
+  1763 /* Id of ReduceAction35 */,
   5 /* Color of ReduceAction35 */,
   54 /* Group of ? */,
-  1355 /* Id of ReduceAction36 */,
+  1719 /* Id of ReduceAction36 */,
   5 /* Color of ReduceAction36 */,
   54 /* Group of ? */,
-  1335 /* Id of ReduceAction37 */,
+  1675 /* Id of ReduceAction37 */,
   5 /* Color of ReduceAction37 */,
   54 /* Group of ? */,
-  1291 /* Id of ReduceAction38 */,
+  1631 /* Id of ReduceAction38 */,
   5 /* Color of ReduceAction38 */,
   54 /* Group of ? */,
-  1247 /* Id of ReduceAction39 */,
+  1587 /* Id of ReduceAction39 */,
   5 /* Color of ReduceAction39 */,
   54 /* Group of ? */,
-  1199 /* Id of ReduceAction40 */,
+  1543 /* Id of ReduceAction40 */,
   5 /* Color of ReduceAction40 */,
   54 /* Group of ? */,
-  1155 /* Id of ReduceAction41 */,
+  1499 /* Id of ReduceAction41 */,
   5 /* Color of ReduceAction41 */,
   54 /* Group of ? */,
-  1115 /* Id of ReduceAction42 */,
+  1459 /* Id of ReduceAction42 */,
   5 /* Color of ReduceAction42 */,
   54 /* Group of ? */,
-  1075 /* Id of ReduceAction43 */,
+  1427 /* Id of ReduceAction43 */,
   5 /* Color of ReduceAction43 */,
   54 /* Group of ? */,
-  1047 /* Id of ReduceAction44 */,
+  1383 /* Id of ReduceAction44 */,
   5 /* Color of ReduceAction44 */,
   54 /* Group of ? */,
-  1015 /* Id of ReduceAction45 */,
+  1363 /* Id of ReduceAction45 */,
   5 /* Color of ReduceAction45 */,
   54 /* Group of ? */,
-  975 /* Id of ReduceAction46 */,
+  1319 /* Id of ReduceAction46 */,
   5 /* Color of ReduceAction46 */,
   54 /* Group of ? */,
-  943 /* Id of ReduceAction47 */,
+  1275 /* Id of ReduceAction47 */,
   5 /* Color of ReduceAction47 */,
   54 /* Group of ? */,
-  923 /* Id of ReduceAction48 */,
+  1231 /* Id of ReduceAction48 */,
   5 /* Color of ReduceAction48 */,
   54 /* Group of ? */,
-  879 /* Id of ReduceAction49 */,
+  1187 /* Id of ReduceAction49 */,
   5 /* Color of ReduceAction49 */,
   54 /* Group of ? */,
-  835 /* Id of ReduceAction50 */,
+  1139 /* Id of ReduceAction50 */,
   5 /* Color of ReduceAction50 */,
   54 /* Group of ? */,
-  803 /* Id of ReduceAction51 */,
+  1103 /* Id of ReduceAction51 */,
   5 /* Color of ReduceAction51 */,
   54 /* Group of ? */,
-  763 /* Id of ReduceAction52 */,
+  1067 /* Id of ReduceAction52 */,
   5 /* Color of ReduceAction52 */,
   54 /* Group of ? */,
-  723 /* Id of ReduceAction53 */,
+  1039 /* Id of ReduceAction53 */,
   5 /* Color of ReduceAction53 */,
   54 /* Group of ? */,
-  703 /* Id of ReduceAction54 */,
+  999 /* Id of ReduceAction54 */,
   5 /* Color of ReduceAction54 */,
   54 /* Group of ? */,
-  699 /* Id of ReduceAction55 */,
+  967 /* Id of ReduceAction55 */,
   5 /* Color of ReduceAction55 */,
   54 /* Group of ? */,
-  695 /* Id of ReduceAction56 */,
+  935 /* Id of ReduceAction56 */,
   5 /* Color of ReduceAction56 */,
   54 /* Group of ? */,
-  691 /* Id of ReduceAction57 */,
+  907 /* Id of ReduceAction57 */,
   5 /* Color of ReduceAction57 */,
   54 /* Group of ? */,
-  687 /* Id of ReduceAction58 */,
+  863 /* Id of ReduceAction58 */,
   5 /* Color of ReduceAction58 */,
   54 /* Group of ? */,
-  683 /* Id of ReduceAction59 */,
+  823 /* Id of ReduceAction59 */,
   5 /* Color of ReduceAction59 */,
   54 /* Group of ? */,
-  675 /* Id of ReduceAction60 */,
+  779 /* Id of ReduceAction60 */,
   5 /* Color of ReduceAction60 */,
   54 /* Group of ? */,
-  671 /* Id of ReduceAction61 */,
+  735 /* Id of ReduceAction61 */,
   5 /* Color of ReduceAction61 */,
   54 /* Group of ? */,
-  667 /* Id of ReduceAction62 */,
+  695 /* Id of ReduceAction62 */,
   5 /* Color of ReduceAction62 */,
   54 /* Group of ? */,
-  663 /* Id of ReduceAction63 */,
+  655 /* Id of ReduceAction63 */,
   5 /* Color of ReduceAction63 */,
   54 /* Group of ? */,
-  659 /* Id of ReduceAction64 */,
+  623 /* Id of ReduceAction64 */,
   5 /* Color of ReduceAction64 */,
   54 /* Group of ? */,
-  655 /* Id of ReduceAction65 */,
+  579 /* Id of ReduceAction65 */,
   5 /* Color of ReduceAction65 */,
   54 /* Group of ? */,
-  651 /* Id of ReduceAction66 */,
+  543 /* Id of ReduceAction66 */,
   5 /* Color of ReduceAction66 */,
   54 /* Group of ? */,
-  647 /* Id of ReduceAction67 */,
+  539 /* Id of ReduceAction67 */,
   5 /* Color of ReduceAction67 */,
   54 /* Group of ? */,
-  643 /* Id of ReduceAction68 */,
+  535 /* Id of ReduceAction68 */,
   5 /* Color of ReduceAction68 */,
   54 /* Group of ? */,
-  639 /* Id of ReduceAction69 */,
+  531 /* Id of ReduceAction69 */,
   5 /* Color of ReduceAction69 */,
   54 /* Group of ? */,
-  631 /* Id of ReduceAction71 */,
-  5 /* Color of ReduceAction71 */,
+  523 /* Id of ReduceAction70 */,
+  5 /* Color of ReduceAction70 */,
   54 /* Group of ? */,
-  627 /* Id of ReduceAction72 */,
-  5 /* Color of ReduceAction72 */,
+  519 /* Id of ReduceAction71 */,
+  5 /* Color of ReduceAction71 */,
   54 /* Group of ? */,
-  623 /* Id of ReduceAction73 */,
+  515 /* Id of ReduceAction73 */,
   5 /* Color of ReduceAction73 */,
   54 /* Group of ? */,
-  619 /* Id of ReduceAction74 */,
+  511 /* Id of ReduceAction74 */,
   5 /* Color of ReduceAction74 */,
   54 /* Group of ? */,
-  615 /* Id of ReduceAction75 */,
+  507 /* Id of ReduceAction75 */,
   5 /* Color of ReduceAction75 */,
   54 /* Group of ? */,
-  611 /* Id of ReduceAction76 */,
+  503 /* Id of ReduceAction76 */,
   5 /* Color of ReduceAction76 */,
   54 /* Group of ? */,
-  607 /* Id of ReduceAction77 */,
+  499 /* Id of ReduceAction77 */,
   5 /* Color of ReduceAction77 */,
   54 /* Group of ? */,
-  603 /* Id of ReduceAction78 */,
+  495 /* Id of ReduceAction78 */,
   5 /* Color of ReduceAction78 */,
   54 /* Group of ? */,
-  599 /* Id of ReduceAction79 */,
+  491 /* Id of ReduceAction79 */,
   5 /* Color of ReduceAction79 */,
   54 /* Group of ? */,
-  591 /* Id of ReduceAction80 */,
+  483 /* Id of ReduceAction80 */,
   5 /* Color of ReduceAction80 */,
   54 /* Group of ? */,
-  575 /* Id of ReduceAction81 */,
+  479 /* Id of ReduceAction81 */,
   5 /* Color of ReduceAction81 */,
   54 /* Group of ? */,
-  567 /* Id of ReduceAction82 */,
+  475 /* Id of ReduceAction82 */,
   5 /* Color of ReduceAction82 */,
   54 /* Group of ? */,
-  555 /* Id of ReduceAction83 */,
+  471 /* Id of ReduceAction83 */,
   5 /* Color of ReduceAction83 */,
   54 /* Group of ? */,
-  519 /* Id of ReduceAction84 */,
+  467 /* Id of ReduceAction84 */,
   5 /* Color of ReduceAction84 */,
   54 /* Group of ? */,
-  483 /* Id of ReduceAction85 */,
+  463 /* Id of ReduceAction85 */,
   5 /* Color of ReduceAction85 */,
   54 /* Group of ? */,
-  455 /* Id of ReduceAction86 */,
+  459 /* Id of ReduceAction86 */,
   5 /* Color of ReduceAction86 */,
   54 /* Group of ? */,
-  431 /* Id of ReduceAction87 */,
+  455 /* Id of ReduceAction87 */,
   5 /* Color of ReduceAction87 */,
   54 /* Group of ? */,
-  427 /* Id of ReduceAction88 */,
+  451 /* Id of ReduceAction88 */,
   5 /* Color of ReduceAction88 */,
   54 /* Group of ? */,
-  423 /* Id of ReduceAction89 */,
+  447 /* Id of ReduceAction89 */,
   5 /* Color of ReduceAction89 */,
   54 /* Group of ? */,
-  415 /* Id of ReduceAction90 */,
+  439 /* Id of ReduceAction90 */,
   5 /* Color of ReduceAction90 */,
   54 /* Group of ? */,
-  411 /* Id of ReduceAction91 */,
+  435 /* Id of ReduceAction91 */,
   5 /* Color of ReduceAction91 */,
   54 /* Group of ? */,
-  407 /* Id of ReduceAction92 */,
+  431 /* Id of ReduceAction92 */,
   5 /* Color of ReduceAction92 */,
   54 /* Group of ? */,
-  403 /* Id of ReduceAction93 */,
+  427 /* Id of ReduceAction93 */,
   5 /* Color of ReduceAction93 */,
   54 /* Group of ? */,
-  399 /* Id of ReduceAction94 */,
+  407 /* Id of ReduceAction94 */,
   5 /* Color of ReduceAction94 */,
   54 /* Group of ? */,
-  395 /* Id of ReduceAction95 */,
+  403 /* Id of ReduceAction95 */,
   5 /* Color of ReduceAction95 */,
   54 /* Group of ? */,
   391 /* Id of ReduceAction96 */,
@@ -9311,1302 +10343,1674 @@ const int SFT_parser[1607] = {
   379 /* Id of ReduceAction99 */,
   5 /* Color of ReduceAction99 */,
   54 /* Group of ? */,
-  2483 /* Id of ReduceAction100 */,
+  2979 /* Id of ReduceAction100 */,
   5 /* Color of ReduceAction100 */,
   54 /* Group of ? */,
-  2479 /* Id of ReduceAction101 */,
+  2975 /* Id of ReduceAction101 */,
   5 /* Color of ReduceAction101 */,
   54 /* Group of ? */,
-  2475 /* Id of ReduceAction102 */,
+  2971 /* Id of ReduceAction102 */,
   5 /* Color of ReduceAction102 */,
   54 /* Group of ? */,
-  2471 /* Id of ReduceAction103 */,
+  2967 /* Id of ReduceAction103 */,
   5 /* Color of ReduceAction103 */,
   54 /* Group of ? */,
-  2467 /* Id of ReduceAction104 */,
+  2963 /* Id of ReduceAction104 */,
   5 /* Color of ReduceAction104 */,
   54 /* Group of ? */,
-  2463 /* Id of ReduceAction105 */,
+  2959 /* Id of ReduceAction105 */,
   5 /* Color of ReduceAction105 */,
   54 /* Group of ? */,
-  2459 /* Id of ReduceAction106 */,
+  2955 /* Id of ReduceAction106 */,
   5 /* Color of ReduceAction106 */,
   54 /* Group of ? */,
-  2455 /* Id of ReduceAction107 */,
+  2951 /* Id of ReduceAction107 */,
   5 /* Color of ReduceAction107 */,
   54 /* Group of ? */,
-  2451 /* Id of ReduceAction108 */,
+  2947 /* Id of ReduceAction108 */,
   5 /* Color of ReduceAction108 */,
   54 /* Group of ? */,
-  2447 /* Id of ReduceAction109 */,
+  2943 /* Id of ReduceAction109 */,
   5 /* Color of ReduceAction109 */,
   54 /* Group of ? */,
-  2439 /* Id of ReduceAction110 */,
+  2935 /* Id of ReduceAction110 */,
   5 /* Color of ReduceAction110 */,
   54 /* Group of ? */,
-  2435 /* Id of ReduceAction111 */,
+  2931 /* Id of ReduceAction111 */,
   5 /* Color of ReduceAction111 */,
   54 /* Group of ? */,
-  2431 /* Id of ReduceAction112 */,
+  2927 /* Id of ReduceAction112 */,
   5 /* Color of ReduceAction112 */,
   54 /* Group of ? */,
-  2427 /* Id of ReduceAction113 */,
+  2923 /* Id of ReduceAction113 */,
   5 /* Color of ReduceAction113 */,
   54 /* Group of ? */,
-  2423 /* Id of ReduceAction114 */,
+  2919 /* Id of ReduceAction114 */,
   5 /* Color of ReduceAction114 */,
   54 /* Group of ? */,
-  2419 /* Id of ReduceAction115 */,
+  2915 /* Id of ReduceAction115 */,
   5 /* Color of ReduceAction115 */,
   54 /* Group of ? */,
-  2415 /* Id of ReduceAction116 */,
+  2911 /* Id of ReduceAction116 */,
   5 /* Color of ReduceAction116 */,
   54 /* Group of ? */,
-  2411 /* Id of ReduceAction117 */,
+  2907 /* Id of ReduceAction117 */,
   5 /* Color of ReduceAction117 */,
   54 /* Group of ? */,
-  2407 /* Id of ReduceAction118 */,
+  2903 /* Id of ReduceAction118 */,
   5 /* Color of ReduceAction118 */,
   54 /* Group of ? */,
-  2403 /* Id of ReduceAction119 */,
+  2899 /* Id of ReduceAction119 */,
   5 /* Color of ReduceAction119 */,
   54 /* Group of ? */,
-  2395 /* Id of ReduceAction120 */,
+  2891 /* Id of ReduceAction120 */,
   5 /* Color of ReduceAction120 */,
   54 /* Group of ? */,
-  2391 /* Id of ReduceAction121 */,
+  2887 /* Id of ReduceAction121 */,
   5 /* Color of ReduceAction121 */,
   54 /* Group of ? */,
-  2387 /* Id of ReduceAction122 */,
+  2883 /* Id of ReduceAction122 */,
   5 /* Color of ReduceAction122 */,
   54 /* Group of ? */,
-  2383 /* Id of ReduceAction123 */,
+  2879 /* Id of ReduceAction123 */,
   5 /* Color of ReduceAction123 */,
   54 /* Group of ? */,
-  2379 /* Id of ReduceAction124 */,
+  2875 /* Id of ReduceAction124 */,
   5 /* Color of ReduceAction124 */,
   54 /* Group of ? */,
-  2375 /* Id of ReduceAction125 */,
+  2871 /* Id of ReduceAction125 */,
   5 /* Color of ReduceAction125 */,
   54 /* Group of ? */,
-  2371 /* Id of ReduceAction126 */,
+  2827 /* Id of ReduceAction126 */,
   5 /* Color of ReduceAction126 */,
   54 /* Group of ? */,
-  2367 /* Id of ReduceAction127 */,
+  2791 /* Id of ReduceAction127 */,
   5 /* Color of ReduceAction127 */,
   54 /* Group of ? */,
-  2363 /* Id of ReduceAction128 */,
+  2767 /* Id of ReduceAction128 */,
   5 /* Color of ReduceAction128 */,
   54 /* Group of ? */,
-  2359 /* Id of ReduceAction129 */,
+  2739 /* Id of ReduceAction129 */,
   5 /* Color of ReduceAction129 */,
   54 /* Group of ? */,
-  2351 /* Id of ReduceAction130 */,
+  2731 /* Id of ReduceAction130 */,
   5 /* Color of ReduceAction130 */,
   54 /* Group of ? */,
-  2347 /* Id of ReduceAction131 */,
+  2727 /* Id of ReduceAction131 */,
   5 /* Color of ReduceAction131 */,
   54 /* Group of ? */,
-  2343 /* Id of ReduceAction132 */,
+  2723 /* Id of ReduceAction132 */,
   5 /* Color of ReduceAction132 */,
   54 /* Group of ? */,
-  2339 /* Id of ReduceAction133 */,
+  2719 /* Id of ReduceAction133 */,
   5 /* Color of ReduceAction133 */,
   54 /* Group of ? */,
-  2335 /* Id of ReduceAction134 */,
+  2715 /* Id of ReduceAction134 */,
   5 /* Color of ReduceAction134 */,
   54 /* Group of ? */,
-  2331 /* Id of ReduceAction135 */,
+  2711 /* Id of ReduceAction135 */,
   5 /* Color of ReduceAction135 */,
   54 /* Group of ? */,
-  2327 /* Id of ReduceAction136 */,
+  2707 /* Id of ReduceAction136 */,
   5 /* Color of ReduceAction136 */,
   54 /* Group of ? */,
-  2323 /* Id of ReduceAction137 */,
+  2703 /* Id of ReduceAction137 */,
   5 /* Color of ReduceAction137 */,
   54 /* Group of ? */,
-  2319 /* Id of ReduceAction138 */,
+  2699 /* Id of ReduceAction138 */,
   5 /* Color of ReduceAction138 */,
   54 /* Group of ? */,
-  2315 /* Id of ReduceAction139 */,
+  2695 /* Id of ReduceAction139 */,
   5 /* Color of ReduceAction139 */,
   54 /* Group of ? */,
-  2307 /* Id of ReduceAction140 */,
+  2687 /* Id of ReduceAction140 */,
   5 /* Color of ReduceAction140 */,
   54 /* Group of ? */,
-  2303 /* Id of ReduceAction141 */,
+  2683 /* Id of ReduceAction141 */,
   5 /* Color of ReduceAction141 */,
   54 /* Group of ? */,
-  2299 /* Id of ReduceAction142 */,
+  2679 /* Id of ReduceAction142 */,
   5 /* Color of ReduceAction142 */,
   54 /* Group of ? */,
-  2295 /* Id of ReduceAction143 */,
+  2675 /* Id of ReduceAction143 */,
   5 /* Color of ReduceAction143 */,
   54 /* Group of ? */,
-  2291 /* Id of ReduceAction144 */,
+  2671 /* Id of ReduceAction144 */,
   5 /* Color of ReduceAction144 */,
   54 /* Group of ? */,
-  2287 /* Id of ReduceAction145 */,
+  2667 /* Id of ReduceAction145 */,
   5 /* Color of ReduceAction145 */,
   54 /* Group of ? */,
-  2283 /* Id of ReduceAction146 */,
+  2663 /* Id of ReduceAction146 */,
   5 /* Color of ReduceAction146 */,
   54 /* Group of ? */,
-  2279 /* Id of ReduceAction147 */,
+  2659 /* Id of ReduceAction147 */,
   5 /* Color of ReduceAction147 */,
   54 /* Group of ? */,
-  2275 /* Id of ReduceAction148 */,
+  2655 /* Id of ReduceAction148 */,
   5 /* Color of ReduceAction148 */,
   54 /* Group of ? */,
-  2271 /* Id of ReduceAction149 */,
+  2651 /* Id of ReduceAction149 */,
   5 /* Color of ReduceAction149 */,
   54 /* Group of ? */,
-  2263 /* Id of ReduceAction150 */,
+  2643 /* Id of ReduceAction150 */,
   5 /* Color of ReduceAction150 */,
   54 /* Group of ? */,
-  2259 /* Id of ReduceAction151 */,
+  2639 /* Id of ReduceAction151 */,
   5 /* Color of ReduceAction151 */,
   54 /* Group of ? */,
-  2255 /* Id of ReduceAction152 */,
+  2635 /* Id of ReduceAction152 */,
   5 /* Color of ReduceAction152 */,
   54 /* Group of ? */,
-  2251 /* Id of ReduceAction153 */,
+  2631 /* Id of ReduceAction153 */,
   5 /* Color of ReduceAction153 */,
   54 /* Group of ? */,
-  2247 /* Id of ReduceAction154 */,
+  2627 /* Id of ReduceAction154 */,
   5 /* Color of ReduceAction154 */,
   54 /* Group of ? */,
-  2243 /* Id of ReduceAction155 */,
+  2623 /* Id of ReduceAction155 */,
   5 /* Color of ReduceAction155 */,
   54 /* Group of ? */,
-  2239 /* Id of ReduceAction156 */,
+  2619 /* Id of ReduceAction156 */,
   5 /* Color of ReduceAction156 */,
   54 /* Group of ? */,
-  2235 /* Id of ReduceAction157 */,
+  2615 /* Id of ReduceAction157 */,
   5 /* Color of ReduceAction157 */,
   54 /* Group of ? */,
-  2231 /* Id of ReduceAction158 */,
+  2611 /* Id of ReduceAction158 */,
   5 /* Color of ReduceAction158 */,
   54 /* Group of ? */,
-  2227 /* Id of ReduceAction159 */,
+  2607 /* Id of ReduceAction159 */,
   5 /* Color of ReduceAction159 */,
   54 /* Group of ? */,
-  2219 /* Id of ReduceAction160 */,
+  2599 /* Id of ReduceAction160 */,
   5 /* Color of ReduceAction160 */,
   54 /* Group of ? */,
-  2215 /* Id of ReduceAction161 */,
+  2595 /* Id of ReduceAction161 */,
   5 /* Color of ReduceAction161 */,
   54 /* Group of ? */,
-  2211 /* Id of ReduceAction162 */,
+  2591 /* Id of ReduceAction162 */,
   5 /* Color of ReduceAction162 */,
   54 /* Group of ? */,
-  2207 /* Id of ReduceAction163 */,
+  2587 /* Id of ReduceAction163 */,
   5 /* Color of ReduceAction163 */,
   54 /* Group of ? */,
-  2203 /* Id of ReduceAction164 */,
+  2583 /* Id of ReduceAction164 */,
   5 /* Color of ReduceAction164 */,
   54 /* Group of ? */,
-  2199 /* Id of ReduceAction165 */,
+  2579 /* Id of ReduceAction165 */,
   5 /* Color of ReduceAction165 */,
   54 /* Group of ? */,
-  2195 /* Id of ReduceAction166 */,
+  2575 /* Id of ReduceAction166 */,
   5 /* Color of ReduceAction166 */,
   54 /* Group of ? */,
-  2191 /* Id of ReduceAction167 */,
+  2571 /* Id of ReduceAction167 */,
   5 /* Color of ReduceAction167 */,
   54 /* Group of ? */,
-  2187 /* Id of ReduceAction168 */,
+  2567 /* Id of ReduceAction168 */,
   5 /* Color of ReduceAction168 */,
   54 /* Group of ? */,
-  2183 /* Id of ReduceAction169 */,
+  2563 /* Id of ReduceAction169 */,
   5 /* Color of ReduceAction169 */,
   54 /* Group of ? */,
-  2175 /* Id of ReduceAction170 */,
+  2555 /* Id of ReduceAction170 */,
   5 /* Color of ReduceAction170 */,
   54 /* Group of ? */,
-  2171 /* Id of ReduceAction171 */,
+  2551 /* Id of ReduceAction171 */,
   5 /* Color of ReduceAction171 */,
   54 /* Group of ? */,
-  2167 /* Id of ReduceAction172 */,
+  2547 /* Id of ReduceAction172 */,
   5 /* Color of ReduceAction172 */,
   54 /* Group of ? */,
-  2163 /* Id of ReduceAction173 */,
+  2543 /* Id of ReduceAction173 */,
   5 /* Color of ReduceAction173 */,
   54 /* Group of ? */,
-  2159 /* Id of ReduceAction174 */,
+  2539 /* Id of ReduceAction174 */,
   5 /* Color of ReduceAction174 */,
   54 /* Group of ? */,
-  2155 /* Id of ReduceAction175 */,
+  2535 /* Id of ReduceAction175 */,
   5 /* Color of ReduceAction175 */,
   54 /* Group of ? */,
-  2151 /* Id of ReduceAction176 */,
+  2531 /* Id of ReduceAction176 */,
   5 /* Color of ReduceAction176 */,
   54 /* Group of ? */,
-  2147 /* Id of ReduceAction177 */,
+  2527 /* Id of ReduceAction177 */,
   5 /* Color of ReduceAction177 */,
   54 /* Group of ? */,
-  2143 /* Id of ReduceAction178 */,
+  2523 /* Id of ReduceAction178 */,
   5 /* Color of ReduceAction178 */,
   54 /* Group of ? */,
-  2139 /* Id of ReduceAction179 */,
+  2519 /* Id of ReduceAction179 */,
   5 /* Color of ReduceAction179 */,
   54 /* Group of ? */,
-  2131 /* Id of ReduceAction180 */,
+  2511 /* Id of ReduceAction180 */,
   5 /* Color of ReduceAction180 */,
   54 /* Group of ? */,
-  2127 /* Id of ReduceAction181 */,
+  2507 /* Id of ReduceAction181 */,
   5 /* Color of ReduceAction181 */,
   54 /* Group of ? */,
-  2123 /* Id of ReduceAction182 */,
+  2503 /* Id of ReduceAction182 */,
   5 /* Color of ReduceAction182 */,
   54 /* Group of ? */,
-  2119 /* Id of ReduceAction183 */,
+  2499 /* Id of ReduceAction183 */,
   5 /* Color of ReduceAction183 */,
   54 /* Group of ? */,
-  2115 /* Id of ReduceAction184 */,
+  2495 /* Id of ReduceAction184 */,
   5 /* Color of ReduceAction184 */,
   54 /* Group of ? */,
-  2111 /* Id of ReduceAction185 */,
+  2491 /* Id of ReduceAction185 */,
   5 /* Color of ReduceAction185 */,
   54 /* Group of ? */,
-  2107 /* Id of ReduceAction186 */,
+  2487 /* Id of ReduceAction186 */,
   5 /* Color of ReduceAction186 */,
   54 /* Group of ? */,
-  2103 /* Id of ReduceAction187 */,
+  2483 /* Id of ReduceAction187 */,
   5 /* Color of ReduceAction187 */,
   54 /* Group of ? */,
-  2099 /* Id of ReduceAction188 */,
+  2479 /* Id of ReduceAction188 */,
   5 /* Color of ReduceAction188 */,
   54 /* Group of ? */,
-  2095 /* Id of ReduceAction189 */,
+  2475 /* Id of ReduceAction189 */,
   5 /* Color of ReduceAction189 */,
   54 /* Group of ? */,
-  2087 /* Id of ReduceAction190 */,
+  2467 /* Id of ReduceAction190 */,
   5 /* Color of ReduceAction190 */,
   54 /* Group of ? */,
-  2083 /* Id of ReduceAction191 */,
+  2463 /* Id of ReduceAction191 */,
   5 /* Color of ReduceAction191 */,
   54 /* Group of ? */,
-  2079 /* Id of ReduceAction192 */,
+  2459 /* Id of ReduceAction192 */,
   5 /* Color of ReduceAction192 */,
   54 /* Group of ? */,
-  2075 /* Id of ReduceAction193 */,
+  2455 /* Id of ReduceAction193 */,
   5 /* Color of ReduceAction193 */,
   54 /* Group of ? */,
-  2071 /* Id of ReduceAction194 */,
+  2451 /* Id of ReduceAction194 */,
   5 /* Color of ReduceAction194 */,
   54 /* Group of ? */,
-  2067 /* Id of ReduceAction195 */,
+  2447 /* Id of ReduceAction195 */,
   5 /* Color of ReduceAction195 */,
   54 /* Group of ? */,
-  2063 /* Id of ReduceAction196 */,
+  2443 /* Id of ReduceAction196 */,
   5 /* Color of ReduceAction196 */,
   54 /* Group of ? */,
-  2059 /* Id of ReduceAction197 */,
+  2439 /* Id of ReduceAction197 */,
   5 /* Color of ReduceAction197 */,
   54 /* Group of ? */,
-  2055 /* Id of ReduceAction198 */,
+  2435 /* Id of ReduceAction198 */,
   5 /* Color of ReduceAction198 */,
   54 /* Group of ? */,
-  2051 /* Id of ReduceAction199 */,
+  2431 /* Id of ReduceAction199 */,
   5 /* Color of ReduceAction199 */,
   54 /* Group of ? */,
-  2039 /* Id of ReduceAction200 */,
+  2419 /* Id of ReduceAction200 */,
   5 /* Color of ReduceAction200 */,
   54 /* Group of ? */,
-  2035 /* Id of ReduceAction201 */,
+  2415 /* Id of ReduceAction201 */,
   5 /* Color of ReduceAction201 */,
   54 /* Group of ? */,
-  2031 /* Id of ReduceAction202 */,
+  2411 /* Id of ReduceAction202 */,
   5 /* Color of ReduceAction202 */,
   54 /* Group of ? */,
-  2027 /* Id of ReduceAction203 */,
+  2407 /* Id of ReduceAction203 */,
   5 /* Color of ReduceAction203 */,
   54 /* Group of ? */,
-  2023 /* Id of ReduceAction204 */,
+  2403 /* Id of ReduceAction204 */,
   5 /* Color of ReduceAction204 */,
   54 /* Group of ? */,
-  2019 /* Id of ReduceAction205 */,
+  2399 /* Id of ReduceAction205 */,
   5 /* Color of ReduceAction205 */,
   54 /* Group of ? */,
-  2015 /* Id of ReduceAction206 */,
+  2395 /* Id of ReduceAction206 */,
   5 /* Color of ReduceAction206 */,
   54 /* Group of ? */,
-  2011 /* Id of ReduceAction207 */,
+  2391 /* Id of ReduceAction207 */,
   5 /* Color of ReduceAction207 */,
   54 /* Group of ? */,
-  2007 /* Id of ReduceAction208 */,
+  2387 /* Id of ReduceAction208 */,
   5 /* Color of ReduceAction208 */,
   54 /* Group of ? */,
-  2003 /* Id of ReduceAction209 */,
+  2383 /* Id of ReduceAction209 */,
   5 /* Color of ReduceAction209 */,
   54 /* Group of ? */,
-  1995 /* Id of ReduceAction210 */,
+  2375 /* Id of ReduceAction210 */,
   5 /* Color of ReduceAction210 */,
   54 /* Group of ? */,
-  1991 /* Id of ReduceAction211 */,
+  2371 /* Id of ReduceAction211 */,
   5 /* Color of ReduceAction211 */,
   54 /* Group of ? */,
-  1987 /* Id of ReduceAction212 */,
+  2367 /* Id of ReduceAction212 */,
   5 /* Color of ReduceAction212 */,
   54 /* Group of ? */,
-  1983 /* Id of ReduceAction213 */,
+  2363 /* Id of ReduceAction213 */,
   5 /* Color of ReduceAction213 */,
   54 /* Group of ? */,
-  1979 /* Id of ReduceAction214 */,
+  2359 /* Id of ReduceAction214 */,
   5 /* Color of ReduceAction214 */,
   54 /* Group of ? */,
-  1975 /* Id of ReduceAction215 */,
+  2355 /* Id of ReduceAction215 */,
   5 /* Color of ReduceAction215 */,
   54 /* Group of ? */,
-  1971 /* Id of ReduceAction216 */,
+  2351 /* Id of ReduceAction216 */,
   5 /* Color of ReduceAction216 */,
   54 /* Group of ? */,
-  1967 /* Id of ReduceAction217 */,
+  2347 /* Id of ReduceAction217 */,
   5 /* Color of ReduceAction217 */,
   54 /* Group of ? */,
-  1963 /* Id of ReduceAction218 */,
+  2343 /* Id of ReduceAction218 */,
   5 /* Color of ReduceAction218 */,
   54 /* Group of ? */,
-  1959 /* Id of ReduceAction219 */,
+  2339 /* Id of ReduceAction219 */,
   5 /* Color of ReduceAction219 */,
   54 /* Group of ? */,
-  1951 /* Id of ReduceAction220 */,
+  2331 /* Id of ReduceAction220 */,
   5 /* Color of ReduceAction220 */,
   54 /* Group of ? */,
-  1947 /* Id of ReduceAction221 */,
+  2327 /* Id of ReduceAction221 */,
   5 /* Color of ReduceAction221 */,
   54 /* Group of ? */,
-  1943 /* Id of ReduceAction222 */,
+  2323 /* Id of ReduceAction222 */,
   5 /* Color of ReduceAction222 */,
   54 /* Group of ? */,
-  1939 /* Id of ReduceAction223 */,
+  2319 /* Id of ReduceAction223 */,
   5 /* Color of ReduceAction223 */,
   54 /* Group of ? */,
-  1935 /* Id of ReduceAction224 */,
+  2315 /* Id of ReduceAction224 */,
   5 /* Color of ReduceAction224 */,
   54 /* Group of ? */,
-  1931 /* Id of ReduceAction225 */,
+  2311 /* Id of ReduceAction225 */,
   5 /* Color of ReduceAction225 */,
   54 /* Group of ? */,
-  1927 /* Id of ReduceAction226 */,
+  2307 /* Id of ReduceAction226 */,
   5 /* Color of ReduceAction226 */,
   54 /* Group of ? */,
-  1923 /* Id of ReduceAction227 */,
+  2303 /* Id of ReduceAction227 */,
   5 /* Color of ReduceAction227 */,
   54 /* Group of ? */,
-  1919 /* Id of ReduceAction228 */,
+  2299 /* Id of ReduceAction228 */,
   5 /* Color of ReduceAction228 */,
   54 /* Group of ? */,
-  1915 /* Id of ReduceAction229 */,
+  2295 /* Id of ReduceAction229 */,
   5 /* Color of ReduceAction229 */,
   54 /* Group of ? */,
-  1907 /* Id of ReduceAction230 */,
+  2287 /* Id of ReduceAction230 */,
   5 /* Color of ReduceAction230 */,
   54 /* Group of ? */,
-  1903 /* Id of ReduceAction231 */,
+  2283 /* Id of ReduceAction231 */,
   5 /* Color of ReduceAction231 */,
   54 /* Group of ? */,
-  1899 /* Id of ReduceAction232 */,
+  2279 /* Id of ReduceAction232 */,
   5 /* Color of ReduceAction232 */,
   54 /* Group of ? */,
-  1895 /* Id of ReduceAction233 */,
+  2275 /* Id of ReduceAction233 */,
   5 /* Color of ReduceAction233 */,
   54 /* Group of ? */,
-  1891 /* Id of ReduceAction234 */,
+  2271 /* Id of ReduceAction234 */,
   5 /* Color of ReduceAction234 */,
   54 /* Group of ? */,
-  1887 /* Id of ReduceAction235 */,
+  2267 /* Id of ReduceAction235 */,
   5 /* Color of ReduceAction235 */,
   54 /* Group of ? */,
-  1883 /* Id of ReduceAction236 */,
+  2263 /* Id of ReduceAction236 */,
   5 /* Color of ReduceAction236 */,
   54 /* Group of ? */,
-  1879 /* Id of ReduceAction237 */,
+  2259 /* Id of ReduceAction237 */,
   5 /* Color of ReduceAction237 */,
   54 /* Group of ? */,
-  1875 /* Id of ReduceAction238 */,
+  2255 /* Id of ReduceAction238 */,
   5 /* Color of ReduceAction238 */,
   54 /* Group of ? */,
-  1871 /* Id of ReduceAction239 */,
+  2251 /* Id of ReduceAction239 */,
   5 /* Color of ReduceAction239 */,
   54 /* Group of ? */,
-  1863 /* Id of ReduceAction240 */,
+  2243 /* Id of ReduceAction240 */,
   5 /* Color of ReduceAction240 */,
   54 /* Group of ? */,
-  1859 /* Id of ReduceAction241 */,
+  2239 /* Id of ReduceAction241 */,
   5 /* Color of ReduceAction241 */,
   54 /* Group of ? */,
-  1855 /* Id of ReduceAction242 */,
+  2235 /* Id of ReduceAction242 */,
   5 /* Color of ReduceAction242 */,
   54 /* Group of ? */,
-  1851 /* Id of ReduceAction243 */,
+  2231 /* Id of ReduceAction243 */,
   5 /* Color of ReduceAction243 */,
   54 /* Group of ? */,
-  1847 /* Id of ReduceAction244 */,
+  2227 /* Id of ReduceAction244 */,
   5 /* Color of ReduceAction244 */,
   54 /* Group of ? */,
-  1843 /* Id of ReduceAction245 */,
+  2223 /* Id of ReduceAction245 */,
   5 /* Color of ReduceAction245 */,
   54 /* Group of ? */,
-  1839 /* Id of ReduceAction246 */,
+  2219 /* Id of ReduceAction246 */,
   5 /* Color of ReduceAction246 */,
   54 /* Group of ? */,
-  1835 /* Id of ReduceAction247 */,
+  2215 /* Id of ReduceAction247 */,
   5 /* Color of ReduceAction247 */,
   54 /* Group of ? */,
-  1831 /* Id of ReduceAction248 */,
+  2211 /* Id of ReduceAction248 */,
   5 /* Color of ReduceAction248 */,
   54 /* Group of ? */,
-  1827 /* Id of ReduceAction249 */,
+  2207 /* Id of ReduceAction249 */,
   5 /* Color of ReduceAction249 */,
   54 /* Group of ? */,
-  1819 /* Id of ReduceAction250 */,
+  2199 /* Id of ReduceAction250 */,
   5 /* Color of ReduceAction250 */,
   54 /* Group of ? */,
-  1815 /* Id of ReduceAction251 */,
+  2195 /* Id of ReduceAction251 */,
   5 /* Color of ReduceAction251 */,
   54 /* Group of ? */,
-  1811 /* Id of ReduceAction252 */,
+  2191 /* Id of ReduceAction252 */,
   5 /* Color of ReduceAction252 */,
   54 /* Group of ? */,
-  1807 /* Id of ReduceAction253 */,
+  2187 /* Id of ReduceAction253 */,
   5 /* Color of ReduceAction253 */,
   54 /* Group of ? */,
-  1803 /* Id of ReduceAction254 */,
+  2183 /* Id of ReduceAction254 */,
   5 /* Color of ReduceAction254 */,
   54 /* Group of ? */,
-  1799 /* Id of ReduceAction255 */,
+  2179 /* Id of ReduceAction255 */,
   5 /* Color of ReduceAction255 */,
   54 /* Group of ? */,
-  1795 /* Id of ReduceAction256 */,
+  2175 /* Id of ReduceAction256 */,
   5 /* Color of ReduceAction256 */,
   54 /* Group of ? */,
-  1791 /* Id of ReduceAction257 */,
+  2171 /* Id of ReduceAction257 */,
   5 /* Color of ReduceAction257 */,
   54 /* Group of ? */,
-  1787 /* Id of ReduceAction258 */,
+  2167 /* Id of ReduceAction258 */,
   5 /* Color of ReduceAction258 */,
   54 /* Group of ? */,
-  1783 /* Id of ReduceAction259 */,
+  2163 /* Id of ReduceAction259 */,
   5 /* Color of ReduceAction259 */,
   54 /* Group of ? */,
-  1775 /* Id of ReduceAction260 */,
+  2155 /* Id of ReduceAction260 */,
   5 /* Color of ReduceAction260 */,
   54 /* Group of ? */,
-  1771 /* Id of ReduceAction261 */,
+  2151 /* Id of ReduceAction261 */,
   5 /* Color of ReduceAction261 */,
   54 /* Group of ? */,
-  1767 /* Id of ReduceAction262 */,
+  2147 /* Id of ReduceAction262 */,
   5 /* Color of ReduceAction262 */,
   54 /* Group of ? */,
-  1763 /* Id of ReduceAction263 */,
+  2143 /* Id of ReduceAction263 */,
   5 /* Color of ReduceAction263 */,
   54 /* Group of ? */,
-  1759 /* Id of ReduceAction264 */,
+  2139 /* Id of ReduceAction264 */,
   5 /* Color of ReduceAction264 */,
   54 /* Group of ? */,
-  1755 /* Id of ReduceAction265 */,
+  2135 /* Id of ReduceAction265 */,
   5 /* Color of ReduceAction265 */,
   54 /* Group of ? */,
-  1751 /* Id of ReduceAction266 */,
+  2131 /* Id of ReduceAction266 */,
   5 /* Color of ReduceAction266 */,
   54 /* Group of ? */,
-  1747 /* Id of ReduceAction267 */,
+  2127 /* Id of ReduceAction267 */,
   5 /* Color of ReduceAction267 */,
   54 /* Group of ? */,
-  1743 /* Id of ReduceAction268 */,
+  2123 /* Id of ReduceAction268 */,
   5 /* Color of ReduceAction268 */,
   54 /* Group of ? */,
-  1739 /* Id of ReduceAction269 */,
+  2119 /* Id of ReduceAction269 */,
   5 /* Color of ReduceAction269 */,
   54 /* Group of ? */,
-  1731 /* Id of ReduceAction270 */,
+  2111 /* Id of ReduceAction270 */,
   5 /* Color of ReduceAction270 */,
   54 /* Group of ? */,
-  1727 /* Id of ReduceAction271 */,
+  2107 /* Id of ReduceAction271 */,
   5 /* Color of ReduceAction271 */,
   54 /* Group of ? */,
-  1723 /* Id of ReduceAction272 */,
+  2103 /* Id of ReduceAction272 */,
   5 /* Color of ReduceAction272 */,
   54 /* Group of ? */,
-  1719 /* Id of ReduceAction273 */,
+  2099 /* Id of ReduceAction273 */,
   5 /* Color of ReduceAction273 */,
   54 /* Group of ? */,
-  1715 /* Id of ReduceAction274 */,
+  2095 /* Id of ReduceAction274 */,
   5 /* Color of ReduceAction274 */,
   54 /* Group of ? */,
-  1711 /* Id of ReduceAction275 */,
+  2091 /* Id of ReduceAction275 */,
   5 /* Color of ReduceAction275 */,
   54 /* Group of ? */,
-  1707 /* Id of ReduceAction276 */,
+  2087 /* Id of ReduceAction276 */,
   5 /* Color of ReduceAction276 */,
   54 /* Group of ? */,
-  1703 /* Id of ReduceAction277 */,
+  2083 /* Id of ReduceAction277 */,
   5 /* Color of ReduceAction277 */,
   54 /* Group of ? */,
-  1699 /* Id of ReduceAction278 */,
+  2079 /* Id of ReduceAction278 */,
   5 /* Color of ReduceAction278 */,
   54 /* Group of ? */,
-  1695 /* Id of ReduceAction279 */,
+  2075 /* Id of ReduceAction279 */,
   5 /* Color of ReduceAction279 */,
   54 /* Group of ? */,
-  1687 /* Id of ReduceAction280 */,
+  2067 /* Id of ReduceAction280 */,
   5 /* Color of ReduceAction280 */,
   54 /* Group of ? */,
-  1683 /* Id of ReduceAction281 */,
+  2063 /* Id of ReduceAction281 */,
   5 /* Color of ReduceAction281 */,
   54 /* Group of ? */,
-  1679 /* Id of ReduceAction282 */,
+  2059 /* Id of ReduceAction282 */,
   5 /* Color of ReduceAction282 */,
   54 /* Group of ? */,
-  1675 /* Id of ReduceAction283 */,
+  2055 /* Id of ReduceAction283 */,
   5 /* Color of ReduceAction283 */,
   54 /* Group of ? */,
-  1671 /* Id of ReduceAction284 */,
+  2051 /* Id of ReduceAction284 */,
   5 /* Color of ReduceAction284 */,
   54 /* Group of ? */,
-  1667 /* Id of ReduceAction285 */,
+  2047 /* Id of ReduceAction285 */,
   5 /* Color of ReduceAction285 */,
   54 /* Group of ? */,
-  1663 /* Id of ReduceAction286 */,
+  2043 /* Id of ReduceAction286 */,
   5 /* Color of ReduceAction286 */,
   54 /* Group of ? */,
-  1659 /* Id of ReduceAction287 */,
+  2039 /* Id of ReduceAction287 */,
   5 /* Color of ReduceAction287 */,
   54 /* Group of ? */,
-  1655 /* Id of ReduceAction288 */,
+  2035 /* Id of ReduceAction288 */,
   5 /* Color of ReduceAction288 */,
   54 /* Group of ? */,
-  1651 /* Id of ReduceAction289 */,
+  2031 /* Id of ReduceAction289 */,
   5 /* Color of ReduceAction289 */,
   54 /* Group of ? */,
-  1643 /* Id of ReduceAction290 */,
+  2023 /* Id of ReduceAction290 */,
   5 /* Color of ReduceAction290 */,
   54 /* Group of ? */,
-  1639 /* Id of ReduceAction291 */,
+  2019 /* Id of ReduceAction291 */,
   5 /* Color of ReduceAction291 */,
   54 /* Group of ? */,
-  1635 /* Id of ReduceAction292 */,
+  2015 /* Id of ReduceAction292 */,
   5 /* Color of ReduceAction292 */,
   54 /* Group of ? */,
-  1631 /* Id of ReduceAction293 */,
+  2011 /* Id of ReduceAction293 */,
   5 /* Color of ReduceAction293 */,
   54 /* Group of ? */,
-  1627 /* Id of ReduceAction294 */,
+  2007 /* Id of ReduceAction294 */,
   5 /* Color of ReduceAction294 */,
   54 /* Group of ? */,
-  1623 /* Id of ReduceAction295 */,
+  2003 /* Id of ReduceAction295 */,
   5 /* Color of ReduceAction295 */,
   54 /* Group of ? */,
-  1619 /* Id of ReduceAction296 */,
+  1999 /* Id of ReduceAction296 */,
   5 /* Color of ReduceAction296 */,
   54 /* Group of ? */,
-  1615 /* Id of ReduceAction297 */,
+  1995 /* Id of ReduceAction297 */,
   5 /* Color of ReduceAction297 */,
   54 /* Group of ? */,
-  1611 /* Id of ReduceAction298 */,
+  1991 /* Id of ReduceAction298 */,
   5 /* Color of ReduceAction298 */,
   54 /* Group of ? */,
-  1607 /* Id of ReduceAction299 */,
+  1987 /* Id of ReduceAction299 */,
   5 /* Color of ReduceAction299 */,
   54 /* Group of ? */,
-  1595 /* Id of ReduceAction300 */,
+  1975 /* Id of ReduceAction300 */,
   5 /* Color of ReduceAction300 */,
   54 /* Group of ? */,
-  1591 /* Id of ReduceAction301 */,
+  1971 /* Id of ReduceAction301 */,
   5 /* Color of ReduceAction301 */,
   54 /* Group of ? */,
-  1587 /* Id of ReduceAction302 */,
+  1967 /* Id of ReduceAction302 */,
   5 /* Color of ReduceAction302 */,
   54 /* Group of ? */,
-  1583 /* Id of ReduceAction303 */,
+  1963 /* Id of ReduceAction303 */,
   5 /* Color of ReduceAction303 */,
   54 /* Group of ? */,
-  1579 /* Id of ReduceAction304 */,
+  1959 /* Id of ReduceAction304 */,
   5 /* Color of ReduceAction304 */,
   54 /* Group of ? */,
-  1575 /* Id of ReduceAction305 */,
+  1955 /* Id of ReduceAction305 */,
   5 /* Color of ReduceAction305 */,
   54 /* Group of ? */,
-  1571 /* Id of ReduceAction306 */,
+  1951 /* Id of ReduceAction306 */,
   5 /* Color of ReduceAction306 */,
   54 /* Group of ? */,
-  1567 /* Id of ReduceAction307 */,
+  1947 /* Id of ReduceAction307 */,
   5 /* Color of ReduceAction307 */,
   54 /* Group of ? */,
-  1563 /* Id of ReduceAction308 */,
+  1943 /* Id of ReduceAction308 */,
   5 /* Color of ReduceAction308 */,
   54 /* Group of ? */,
-  1559 /* Id of ReduceAction309 */,
+  1939 /* Id of ReduceAction309 */,
   5 /* Color of ReduceAction309 */,
   54 /* Group of ? */,
-  1551 /* Id of ReduceAction310 */,
+  1931 /* Id of ReduceAction310 */,
   5 /* Color of ReduceAction310 */,
   54 /* Group of ? */,
-  1547 /* Id of ReduceAction311 */,
+  1927 /* Id of ReduceAction311 */,
   5 /* Color of ReduceAction311 */,
   54 /* Group of ? */,
-  1543 /* Id of ReduceAction312 */,
+  1923 /* Id of ReduceAction312 */,
   5 /* Color of ReduceAction312 */,
   54 /* Group of ? */,
-  1539 /* Id of ReduceAction313 */,
+  1919 /* Id of ReduceAction313 */,
   5 /* Color of ReduceAction313 */,
   54 /* Group of ? */,
-  1535 /* Id of ReduceAction314 */,
+  1915 /* Id of ReduceAction314 */,
   5 /* Color of ReduceAction314 */,
   54 /* Group of ? */,
-  1531 /* Id of ReduceAction315 */,
+  1911 /* Id of ReduceAction315 */,
   5 /* Color of ReduceAction315 */,
   54 /* Group of ? */,
-  1527 /* Id of ReduceAction317 */,
+  1907 /* Id of ReduceAction316 */,
+  5 /* Color of ReduceAction316 */,
+  54 /* Group of ? */,
+  1903 /* Id of ReduceAction317 */,
   5 /* Color of ReduceAction317 */,
   54 /* Group of ? */,
-  1523 /* Id of ReduceAction318 */,
+  1899 /* Id of ReduceAction318 */,
   5 /* Color of ReduceAction318 */,
   54 /* Group of ? */,
-  1519 /* Id of ReduceAction319 */,
+  1895 /* Id of ReduceAction319 */,
   5 /* Color of ReduceAction319 */,
   54 /* Group of ? */,
-  1511 /* Id of ReduceAction320 */,
+  1887 /* Id of ReduceAction320 */,
   5 /* Color of ReduceAction320 */,
   54 /* Group of ? */,
-  1507 /* Id of ReduceAction321 */,
+  1883 /* Id of ReduceAction321 */,
   5 /* Color of ReduceAction321 */,
   54 /* Group of ? */,
-  1503 /* Id of ReduceAction322 */,
+  1879 /* Id of ReduceAction322 */,
   5 /* Color of ReduceAction322 */,
   54 /* Group of ? */,
-  1499 /* Id of ReduceAction323 */,
-  5 /* Color of ReduceAction323 */,
-  54 /* Group of ? */,
-  1495 /* Id of ReduceAction324 */,
+  1875 /* Id of ReduceAction324 */,
   5 /* Color of ReduceAction324 */,
   54 /* Group of ? */,
-  1491 /* Id of ReduceAction325 */,
+  1871 /* Id of ReduceAction325 */,
   5 /* Color of ReduceAction325 */,
   54 /* Group of ? */,
-  1487 /* Id of ReduceAction326 */,
+  1867 /* Id of ReduceAction326 */,
   5 /* Color of ReduceAction326 */,
   54 /* Group of ? */,
-  1483 /* Id of ReduceAction327 */,
+  1863 /* Id of ReduceAction327 */,
   5 /* Color of ReduceAction327 */,
   54 /* Group of ? */,
-  1479 /* Id of ReduceAction328 */,
+  1859 /* Id of ReduceAction328 */,
   5 /* Color of ReduceAction328 */,
   54 /* Group of ? */,
-  1475 /* Id of ReduceAction329 */,
+  1855 /* Id of ReduceAction329 */,
   5 /* Color of ReduceAction329 */,
   54 /* Group of ? */,
-  1467 /* Id of ReduceAction330 */,
+  1847 /* Id of ReduceAction330 */,
   5 /* Color of ReduceAction330 */,
   54 /* Group of ? */,
-  1463 /* Id of ReduceAction331 */,
+  1843 /* Id of ReduceAction331 */,
   5 /* Color of ReduceAction331 */,
   54 /* Group of ? */,
-  1459 /* Id of ReduceAction332 */,
+  1839 /* Id of ReduceAction332 */,
   5 /* Color of ReduceAction332 */,
   54 /* Group of ? */,
-  1455 /* Id of ReduceAction333 */,
+  1835 /* Id of ReduceAction333 */,
   5 /* Color of ReduceAction333 */,
   54 /* Group of ? */,
-  1451 /* Id of ReduceAction334 */,
+  1831 /* Id of ReduceAction334 */,
   5 /* Color of ReduceAction334 */,
   54 /* Group of ? */,
-  1447 /* Id of ReduceAction336 */,
+  1827 /* Id of ReduceAction335 */,
+  5 /* Color of ReduceAction335 */,
+  54 /* Group of ? */,
+  1823 /* Id of ReduceAction336 */,
   5 /* Color of ReduceAction336 */,
   54 /* Group of ? */,
-  1443 /* Id of ReduceAction337 */,
+  1819 /* Id of ReduceAction337 */,
   5 /* Color of ReduceAction337 */,
   54 /* Group of ? */,
-  1439 /* Id of ReduceAction338 */,
+  1815 /* Id of ReduceAction338 */,
   5 /* Color of ReduceAction338 */,
   54 /* Group of ? */,
-  1435 /* Id of ReduceAction339 */,
+  1811 /* Id of ReduceAction339 */,
   5 /* Color of ReduceAction339 */,
   54 /* Group of ? */,
-  1427 /* Id of ReduceAction340 */,
+  1803 /* Id of ReduceAction340 */,
   5 /* Color of ReduceAction340 */,
   54 /* Group of ? */,
-  1423 /* Id of ReduceAction341 */,
+  1799 /* Id of ReduceAction341 */,
   5 /* Color of ReduceAction341 */,
   54 /* Group of ? */,
-  1419 /* Id of ReduceAction342 */,
+  1795 /* Id of ReduceAction342 */,
   5 /* Color of ReduceAction342 */,
   54 /* Group of ? */,
-  1415 /* Id of ReduceAction343 */,
+  1791 /* Id of ReduceAction343 */,
   5 /* Color of ReduceAction343 */,
   54 /* Group of ? */,
-  1411 /* Id of ReduceAction344 */,
+  1787 /* Id of ReduceAction344 */,
   5 /* Color of ReduceAction344 */,
   54 /* Group of ? */,
-  1407 /* Id of ReduceAction345 */,
+  1783 /* Id of ReduceAction345 */,
   5 /* Color of ReduceAction345 */,
   54 /* Group of ? */,
-  1403 /* Id of ReduceAction349 */,
+  1779 /* Id of ReduceAction346 */,
+  5 /* Color of ReduceAction346 */,
+  54 /* Group of ? */,
+  1775 /* Id of ReduceAction347 */,
+  5 /* Color of ReduceAction347 */,
+  54 /* Group of ? */,
+  1771 /* Id of ReduceAction348 */,
+  5 /* Color of ReduceAction348 */,
+  54 /* Group of ? */,
+  1767 /* Id of ReduceAction349 */,
   5 /* Color of ReduceAction349 */,
   54 /* Group of ? */,
-  1395 /* Id of ReduceAction350 */,
+  1759 /* Id of ReduceAction350 */,
   5 /* Color of ReduceAction350 */,
   54 /* Group of ? */,
-  1391 /* Id of ReduceAction351 */,
+  1755 /* Id of ReduceAction351 */,
   5 /* Color of ReduceAction351 */,
   54 /* Group of ? */,
-  1387 /* Id of ReduceAction352 */,
+  1751 /* Id of ReduceAction352 */,
   5 /* Color of ReduceAction352 */,
   54 /* Group of ? */,
-  1383 /* Id of ReduceAction353 */,
+  1747 /* Id of ReduceAction353 */,
   5 /* Color of ReduceAction353 */,
   54 /* Group of ? */,
-  1379 /* Id of ReduceAction354 */,
+  1743 /* Id of ReduceAction354 */,
   5 /* Color of ReduceAction354 */,
   54 /* Group of ? */,
-  1375 /* Id of ReduceAction355 */,
+  1739 /* Id of ReduceAction355 */,
   5 /* Color of ReduceAction355 */,
   54 /* Group of ? */,
-  1371 /* Id of ReduceAction356 */,
+  1735 /* Id of ReduceAction356 */,
   5 /* Color of ReduceAction356 */,
   54 /* Group of ? */,
-  1367 /* Id of ReduceAction357 */,
+  1731 /* Id of ReduceAction357 */,
   5 /* Color of ReduceAction357 */,
   54 /* Group of ? */,
-  1363 /* Id of ReduceAction358 */,
+  1727 /* Id of ReduceAction358 */,
   5 /* Color of ReduceAction358 */,
   54 /* Group of ? */,
-  1359 /* Id of ReduceAction359 */,
+  1723 /* Id of ReduceAction359 */,
   5 /* Color of ReduceAction359 */,
   54 /* Group of ? */,
-  1351 /* Id of ReduceAction366 */,
+  1715 /* Id of ReduceAction360 */,
+  5 /* Color of ReduceAction360 */,
+  54 /* Group of ? */,
+  1711 /* Id of ReduceAction361 */,
+  5 /* Color of ReduceAction361 */,
+  54 /* Group of ? */,
+  1707 /* Id of ReduceAction362 */,
+  5 /* Color of ReduceAction362 */,
+  54 /* Group of ? */,
+  1703 /* Id of ReduceAction363 */,
+  5 /* Color of ReduceAction363 */,
+  54 /* Group of ? */,
+  1699 /* Id of ReduceAction364 */,
+  5 /* Color of ReduceAction364 */,
+  54 /* Group of ? */,
+  1695 /* Id of ReduceAction365 */,
+  5 /* Color of ReduceAction365 */,
+  54 /* Group of ? */,
+  1691 /* Id of ReduceAction366 */,
   5 /* Color of ReduceAction366 */,
   54 /* Group of ? */,
-  1347 /* Id of ReduceAction367 */,
+  1687 /* Id of ReduceAction367 */,
   5 /* Color of ReduceAction367 */,
   54 /* Group of ? */,
-  1343 /* Id of ReduceAction368 */,
+  1683 /* Id of ReduceAction368 */,
   5 /* Color of ReduceAction368 */,
   54 /* Group of ? */,
-  1339 /* Id of ReduceAction369 */,
+  1679 /* Id of ReduceAction369 */,
   5 /* Color of ReduceAction369 */,
   54 /* Group of ? */,
-  1331 /* Id of ReduceAction370 */,
+  1671 /* Id of ReduceAction370 */,
   5 /* Color of ReduceAction370 */,
   54 /* Group of ? */,
-  1327 /* Id of ReduceAction371 */,
+  1667 /* Id of ReduceAction371 */,
   5 /* Color of ReduceAction371 */,
   54 /* Group of ? */,
-  1323 /* Id of ReduceAction372 */,
+  1663 /* Id of ReduceAction372 */,
   5 /* Color of ReduceAction372 */,
   54 /* Group of ? */,
-  1319 /* Id of ReduceAction373 */,
+  1659 /* Id of ReduceAction373 */,
   5 /* Color of ReduceAction373 */,
   54 /* Group of ? */,
-  1315 /* Id of ReduceAction374 */,
+  1655 /* Id of ReduceAction374 */,
   5 /* Color of ReduceAction374 */,
   54 /* Group of ? */,
-  1311 /* Id of ReduceAction375 */,
+  1651 /* Id of ReduceAction375 */,
   5 /* Color of ReduceAction375 */,
   54 /* Group of ? */,
-  1307 /* Id of ReduceAction376 */,
+  1647 /* Id of ReduceAction376 */,
   5 /* Color of ReduceAction376 */,
   54 /* Group of ? */,
-  1303 /* Id of ReduceAction377 */,
+  1643 /* Id of ReduceAction377 */,
   5 /* Color of ReduceAction377 */,
   54 /* Group of ? */,
-  1299 /* Id of ReduceAction378 */,
+  1639 /* Id of ReduceAction378 */,
   5 /* Color of ReduceAction378 */,
   54 /* Group of ? */,
-  1295 /* Id of ReduceAction379 */,
+  1635 /* Id of ReduceAction379 */,
   5 /* Color of ReduceAction379 */,
   54 /* Group of ? */,
-  1287 /* Id of ReduceAction380 */,
+  1627 /* Id of ReduceAction380 */,
   5 /* Color of ReduceAction380 */,
   54 /* Group of ? */,
-  1283 /* Id of ReduceAction381 */,
+  1623 /* Id of ReduceAction381 */,
   5 /* Color of ReduceAction381 */,
   54 /* Group of ? */,
-  1279 /* Id of ReduceAction382 */,
+  1619 /* Id of ReduceAction382 */,
   5 /* Color of ReduceAction382 */,
   54 /* Group of ? */,
-  1275 /* Id of ReduceAction383 */,
+  1615 /* Id of ReduceAction383 */,
   5 /* Color of ReduceAction383 */,
   54 /* Group of ? */,
-  1271 /* Id of ReduceAction384 */,
+  1611 /* Id of ReduceAction384 */,
   5 /* Color of ReduceAction384 */,
   54 /* Group of ? */,
-  1267 /* Id of ReduceAction385 */,
+  1607 /* Id of ReduceAction385 */,
   5 /* Color of ReduceAction385 */,
   54 /* Group of ? */,
-  1263 /* Id of ReduceAction386 */,
+  1603 /* Id of ReduceAction386 */,
   5 /* Color of ReduceAction386 */,
   54 /* Group of ? */,
-  1259 /* Id of ReduceAction387 */,
+  1599 /* Id of ReduceAction387 */,
   5 /* Color of ReduceAction387 */,
   54 /* Group of ? */,
-  1255 /* Id of ReduceAction388 */,
+  1595 /* Id of ReduceAction388 */,
   5 /* Color of ReduceAction388 */,
   54 /* Group of ? */,
-  1251 /* Id of ReduceAction389 */,
+  1591 /* Id of ReduceAction389 */,
   5 /* Color of ReduceAction389 */,
   54 /* Group of ? */,
-  1243 /* Id of ReduceAction390 */,
+  1583 /* Id of ReduceAction390 */,
   5 /* Color of ReduceAction390 */,
   54 /* Group of ? */,
-  1239 /* Id of ReduceAction391 */,
+  1579 /* Id of ReduceAction391 */,
   5 /* Color of ReduceAction391 */,
   54 /* Group of ? */,
-  1235 /* Id of ReduceAction392 */,
-  5 /* Color of ReduceAction392 */,
-  54 /* Group of ? */,
-  1231 /* Id of ReduceAction393 */,
+  1575 /* Id of ReduceAction393 */,
   5 /* Color of ReduceAction393 */,
   54 /* Group of ? */,
-  1227 /* Id of ReduceAction394 */,
+  1571 /* Id of ReduceAction394 */,
   5 /* Color of ReduceAction394 */,
   54 /* Group of ? */,
-  1223 /* Id of ReduceAction395 */,
+  1567 /* Id of ReduceAction395 */,
   5 /* Color of ReduceAction395 */,
   54 /* Group of ? */,
-  1219 /* Id of ReduceAction396 */,
+  1563 /* Id of ReduceAction396 */,
   5 /* Color of ReduceAction396 */,
   54 /* Group of ? */,
-  1215 /* Id of ReduceAction397 */,
+  1559 /* Id of ReduceAction397 */,
   5 /* Color of ReduceAction397 */,
   54 /* Group of ? */,
-  1211 /* Id of ReduceAction398 */,
+  1555 /* Id of ReduceAction398 */,
   5 /* Color of ReduceAction398 */,
   54 /* Group of ? */,
-  1207 /* Id of ReduceAction399 */,
+  1551 /* Id of ReduceAction399 */,
   5 /* Color of ReduceAction399 */,
   54 /* Group of ? */,
-  1195 /* Id of ReduceAction400 */,
+  1539 /* Id of ReduceAction400 */,
   5 /* Color of ReduceAction400 */,
   54 /* Group of ? */,
-  1191 /* Id of ReduceAction401 */,
+  1535 /* Id of ReduceAction401 */,
   5 /* Color of ReduceAction401 */,
   54 /* Group of ? */,
-  1187 /* Id of ReduceAction402 */,
+  1531 /* Id of ReduceAction402 */,
   5 /* Color of ReduceAction402 */,
   54 /* Group of ? */,
-  1183 /* Id of ReduceAction403 */,
+  1527 /* Id of ReduceAction403 */,
   5 /* Color of ReduceAction403 */,
   54 /* Group of ? */,
-  1179 /* Id of ReduceAction404 */,
+  1523 /* Id of ReduceAction404 */,
   5 /* Color of ReduceAction404 */,
   54 /* Group of ? */,
-  1175 /* Id of ReduceAction405 */,
+  1519 /* Id of ReduceAction405 */,
   5 /* Color of ReduceAction405 */,
   54 /* Group of ? */,
-  1171 /* Id of ReduceAction406 */,
+  1515 /* Id of ReduceAction406 */,
   5 /* Color of ReduceAction406 */,
   54 /* Group of ? */,
-  1167 /* Id of ReduceAction407 */,
+  1511 /* Id of ReduceAction407 */,
   5 /* Color of ReduceAction407 */,
   54 /* Group of ? */,
-  1163 /* Id of ReduceAction408 */,
+  1507 /* Id of ReduceAction408 */,
   5 /* Color of ReduceAction408 */,
   54 /* Group of ? */,
-  1159 /* Id of ReduceAction409 */,
+  1503 /* Id of ReduceAction409 */,
   5 /* Color of ReduceAction409 */,
   54 /* Group of ? */,
-  1151 /* Id of ReduceAction410 */,
+  1495 /* Id of ReduceAction410 */,
   5 /* Color of ReduceAction410 */,
   54 /* Group of ? */,
-  1147 /* Id of ReduceAction411 */,
+  1491 /* Id of ReduceAction411 */,
   5 /* Color of ReduceAction411 */,
   54 /* Group of ? */,
-  1143 /* Id of ReduceAction412 */,
+  1487 /* Id of ReduceAction412 */,
   5 /* Color of ReduceAction412 */,
   54 /* Group of ? */,
-  1139 /* Id of ReduceAction413 */,
+  1483 /* Id of ReduceAction413 */,
   5 /* Color of ReduceAction413 */,
   54 /* Group of ? */,
-  1135 /* Id of ReduceAction414 */,
+  1479 /* Id of ReduceAction414 */,
   5 /* Color of ReduceAction414 */,
   54 /* Group of ? */,
-  1131 /* Id of ReduceAction415 */,
-  5 /* Color of ReduceAction415 */,
-  54 /* Group of ? */,
-  1127 /* Id of ReduceAction416 */,
+  1475 /* Id of ReduceAction416 */,
   5 /* Color of ReduceAction416 */,
   54 /* Group of ? */,
-  1123 /* Id of ReduceAction417 */,
+  1471 /* Id of ReduceAction417 */,
   5 /* Color of ReduceAction417 */,
   54 /* Group of ? */,
-  1119 /* Id of ReduceAction418 */,
+  1467 /* Id of ReduceAction418 */,
   5 /* Color of ReduceAction418 */,
   54 /* Group of ? */,
-  1111 /* Id of ReduceAction421 */,
+  1463 /* Id of ReduceAction419 */,
+  5 /* Color of ReduceAction419 */,
+  54 /* Group of ? */,
+  1455 /* Id of ReduceAction420 */,
+  5 /* Color of ReduceAction420 */,
+  54 /* Group of ? */,
+  1451 /* Id of ReduceAction421 */,
   5 /* Color of ReduceAction421 */,
   54 /* Group of ? */,
-  1107 /* Id of ReduceAction422 */,
+  1447 /* Id of ReduceAction422 */,
   5 /* Color of ReduceAction422 */,
   54 /* Group of ? */,
-  1103 /* Id of ReduceAction423 */,
+  1443 /* Id of ReduceAction423 */,
   5 /* Color of ReduceAction423 */,
   54 /* Group of ? */,
-  1099 /* Id of ReduceAction424 */,
+  1439 /* Id of ReduceAction424 */,
   5 /* Color of ReduceAction424 */,
   54 /* Group of ? */,
-  1095 /* Id of ReduceAction425 */,
+  1435 /* Id of ReduceAction425 */,
   5 /* Color of ReduceAction425 */,
   54 /* Group of ? */,
-  1091 /* Id of ReduceAction426 */,
-  5 /* Color of ReduceAction426 */,
-  54 /* Group of ? */,
-  1087 /* Id of ReduceAction427 */,
-  5 /* Color of ReduceAction427 */,
-  54 /* Group of ? */,
-  1083 /* Id of ReduceAction428 */,
-  5 /* Color of ReduceAction428 */,
-  54 /* Group of ? */,
-  1079 /* Id of ReduceAction429 */,
+  1431 /* Id of ReduceAction429 */,
   5 /* Color of ReduceAction429 */,
   54 /* Group of ? */,
-  1071 /* Id of ReduceAction430 */,
+  1423 /* Id of ReduceAction430 */,
   5 /* Color of ReduceAction430 */,
   54 /* Group of ? */,
-  1067 /* Id of ReduceAction431 */,
+  1419 /* Id of ReduceAction431 */,
   5 /* Color of ReduceAction431 */,
   54 /* Group of ? */,
-  1063 /* Id of ReduceAction432 */,
+  1415 /* Id of ReduceAction432 */,
   5 /* Color of ReduceAction432 */,
   54 /* Group of ? */,
-  1059 /* Id of ReduceAction433 */,
+  1411 /* Id of ReduceAction433 */,
   5 /* Color of ReduceAction433 */,
   54 /* Group of ? */,
-  1055 /* Id of ReduceAction437 */,
-  5 /* Color of ReduceAction437 */,
+  1407 /* Id of ReduceAction434 */,
+  5 /* Color of ReduceAction434 */,
   54 /* Group of ? */,
-  1051 /* Id of ReduceAction439 */,
-  5 /* Color of ReduceAction439 */,
+  1403 /* Id of ReduceAction435 */,
+  5 /* Color of ReduceAction435 */,
+  54 /* Group of ? */,
+  1399 /* Id of ReduceAction436 */,
+  5 /* Color of ReduceAction436 */,
   54 /* Group of ? */,
-  1043 /* Id of ReduceAction441 */,
-  5 /* Color of ReduceAction441 */,
+  1395 /* Id of ReduceAction437 */,
+  5 /* Color of ReduceAction437 */,
   54 /* Group of ? */,
-  1039 /* Id of ReduceAction442 */,
-  5 /* Color of ReduceAction442 */,
+  1391 /* Id of ReduceAction438 */,
+  5 /* Color of ReduceAction438 */,
   54 /* Group of ? */,
-  1035 /* Id of ReduceAction443 */,
-  5 /* Color of ReduceAction443 */,
+  1387 /* Id of ReduceAction439 */,
+  5 /* Color of ReduceAction439 */,
   54 /* Group of ? */,
-  1031 /* Id of ReduceAction445 */,
-  5 /* Color of ReduceAction445 */,
+  1379 /* Id of ReduceAction446 */,
+  5 /* Color of ReduceAction446 */,
   54 /* Group of ? */,
-  1027 /* Id of ReduceAction447 */,
+  1375 /* Id of ReduceAction447 */,
   5 /* Color of ReduceAction447 */,
   54 /* Group of ? */,
-  1023 /* Id of ReduceAction448 */,
+  1371 /* Id of ReduceAction448 */,
   5 /* Color of ReduceAction448 */,
   54 /* Group of ? */,
-  1019 /* Id of ReduceAction449 */,
+  1367 /* Id of ReduceAction449 */,
   5 /* Color of ReduceAction449 */,
   54 /* Group of ? */,
-  1011 /* Id of ReduceAction450 */,
+  1359 /* Id of ReduceAction450 */,
   5 /* Color of ReduceAction450 */,
   54 /* Group of ? */,
-  1007 /* Id of ReduceAction451 */,
+  1355 /* Id of ReduceAction451 */,
   5 /* Color of ReduceAction451 */,
   54 /* Group of ? */,
-  1003 /* Id of ReduceAction452 */,
+  1351 /* Id of ReduceAction452 */,
   5 /* Color of ReduceAction452 */,
   54 /* Group of ? */,
-  999 /* Id of ReduceAction453 */,
+  1347 /* Id of ReduceAction453 */,
   5 /* Color of ReduceAction453 */,
   54 /* Group of ? */,
-  995 /* Id of ReduceAction454 */,
+  1343 /* Id of ReduceAction454 */,
   5 /* Color of ReduceAction454 */,
   54 /* Group of ? */,
-  991 /* Id of ReduceAction455 */,
+  1339 /* Id of ReduceAction455 */,
   5 /* Color of ReduceAction455 */,
   54 /* Group of ? */,
-  987 /* Id of ReduceAction456 */,
+  1335 /* Id of ReduceAction456 */,
   5 /* Color of ReduceAction456 */,
   54 /* Group of ? */,
-  983 /* Id of ReduceAction457 */,
+  1331 /* Id of ReduceAction457 */,
   5 /* Color of ReduceAction457 */,
   54 /* Group of ? */,
-  979 /* Id of ReduceAction459 */,
+  1327 /* Id of ReduceAction458 */,
+  5 /* Color of ReduceAction458 */,
+  54 /* Group of ? */,
+  1323 /* Id of ReduceAction459 */,
   5 /* Color of ReduceAction459 */,
   54 /* Group of ? */,
-  971 /* Id of ReduceAction460 */,
+  1315 /* Id of ReduceAction460 */,
   5 /* Color of ReduceAction460 */,
   54 /* Group of ? */,
-  967 /* Id of ReduceAction462 */,
+  1311 /* Id of ReduceAction461 */,
+  5 /* Color of ReduceAction461 */,
+  54 /* Group of ? */,
+  1307 /* Id of ReduceAction462 */,
   5 /* Color of ReduceAction462 */,
   54 /* Group of ? */,
-  963 /* Id of ReduceAction463 */,
+  1303 /* Id of ReduceAction463 */,
   5 /* Color of ReduceAction463 */,
   54 /* Group of ? */,
-  959 /* Id of ReduceAction464 */,
+  1299 /* Id of ReduceAction464 */,
   5 /* Color of ReduceAction464 */,
   54 /* Group of ? */,
-  955 /* Id of ReduceAction466 */,
+  1295 /* Id of ReduceAction465 */,
+  5 /* Color of ReduceAction465 */,
+  54 /* Group of ? */,
+  1291 /* Id of ReduceAction466 */,
   5 /* Color of ReduceAction466 */,
   54 /* Group of ? */,
-  951 /* Id of ReduceAction467 */,
+  1287 /* Id of ReduceAction467 */,
   5 /* Color of ReduceAction467 */,
   54 /* Group of ? */,
-  947 /* Id of ReduceAction469 */,
+  1283 /* Id of ReduceAction468 */,
+  5 /* Color of ReduceAction468 */,
+  54 /* Group of ? */,
+  1279 /* Id of ReduceAction469 */,
   5 /* Color of ReduceAction469 */,
   54 /* Group of ? */,
-  939 /* Id of ReduceAction470 */,
+  1271 /* Id of ReduceAction470 */,
   5 /* Color of ReduceAction470 */,
   54 /* Group of ? */,
-  935 /* Id of ReduceAction471 */,
+  1267 /* Id of ReduceAction471 */,
   5 /* Color of ReduceAction471 */,
   54 /* Group of ? */,
-  931 /* Id of ReduceAction472 */,
+  1263 /* Id of ReduceAction472 */,
   5 /* Color of ReduceAction472 */,
   54 /* Group of ? */,
-  927 /* Id of ReduceAction473 */,
+  1259 /* Id of ReduceAction473 */,
   5 /* Color of ReduceAction473 */,
   54 /* Group of ? */,
-  919 /* Id of ReduceAction480 */,
+  1255 /* Id of ReduceAction474 */,
+  5 /* Color of ReduceAction474 */,
+  54 /* Group of ? */,
+  1251 /* Id of ReduceAction475 */,
+  5 /* Color of ReduceAction475 */,
+  54 /* Group of ? */,
+  1247 /* Id of ReduceAction476 */,
+  5 /* Color of ReduceAction476 */,
+  54 /* Group of ? */,
+  1243 /* Id of ReduceAction477 */,
+  5 /* Color of ReduceAction477 */,
+  54 /* Group of ? */,
+  1239 /* Id of ReduceAction478 */,
+  5 /* Color of ReduceAction478 */,
+  54 /* Group of ? */,
+  1235 /* Id of ReduceAction479 */,
+  5 /* Color of ReduceAction479 */,
+  54 /* Group of ? */,
+  1227 /* Id of ReduceAction480 */,
   5 /* Color of ReduceAction480 */,
   54 /* Group of ? */,
-  915 /* Id of ReduceAction481 */,
+  1223 /* Id of ReduceAction481 */,
   5 /* Color of ReduceAction481 */,
   54 /* Group of ? */,
-  911 /* Id of ReduceAction482 */,
+  1219 /* Id of ReduceAction482 */,
   5 /* Color of ReduceAction482 */,
   54 /* Group of ? */,
-  907 /* Id of ReduceAction483 */,
+  1215 /* Id of ReduceAction483 */,
   5 /* Color of ReduceAction483 */,
   54 /* Group of ? */,
-  903 /* Id of ReduceAction484 */,
+  1211 /* Id of ReduceAction484 */,
   5 /* Color of ReduceAction484 */,
   54 /* Group of ? */,
-  899 /* Id of ReduceAction485 */,
+  1207 /* Id of ReduceAction485 */,
   5 /* Color of ReduceAction485 */,
   54 /* Group of ? */,
-  895 /* Id of ReduceAction486 */,
+  1203 /* Id of ReduceAction486 */,
   5 /* Color of ReduceAction486 */,
   54 /* Group of ? */,
-  891 /* Id of ReduceAction487 */,
+  1199 /* Id of ReduceAction487 */,
   5 /* Color of ReduceAction487 */,
   54 /* Group of ? */,
-  887 /* Id of ReduceAction488 */,
+  1195 /* Id of ReduceAction488 */,
   5 /* Color of ReduceAction488 */,
   54 /* Group of ? */,
-  883 /* Id of ReduceAction489 */,
+  1191 /* Id of ReduceAction489 */,
   5 /* Color of ReduceAction489 */,
   54 /* Group of ? */,
-  875 /* Id of ReduceAction490 */,
+  1183 /* Id of ReduceAction490 */,
   5 /* Color of ReduceAction490 */,
   54 /* Group of ? */,
-  871 /* Id of ReduceAction491 */,
+  1179 /* Id of ReduceAction491 */,
   5 /* Color of ReduceAction491 */,
   54 /* Group of ? */,
-  867 /* Id of ReduceAction492 */,
+  1175 /* Id of ReduceAction492 */,
   5 /* Color of ReduceAction492 */,
   54 /* Group of ? */,
-  863 /* Id of ReduceAction494 */,
+  1171 /* Id of ReduceAction493 */,
+  5 /* Color of ReduceAction493 */,
+  54 /* Group of ? */,
+  1167 /* Id of ReduceAction494 */,
   5 /* Color of ReduceAction494 */,
   54 /* Group of ? */,
-  859 /* Id of ReduceAction495 */,
+  1163 /* Id of ReduceAction495 */,
   5 /* Color of ReduceAction495 */,
   54 /* Group of ? */,
-  855 /* Id of ReduceAction496 */,
+  1159 /* Id of ReduceAction496 */,
   5 /* Color of ReduceAction496 */,
   54 /* Group of ? */,
-  851 /* Id of ReduceAction497 */,
+  1155 /* Id of ReduceAction497 */,
   5 /* Color of ReduceAction497 */,
   54 /* Group of ? */,
-  847 /* Id of ReduceAction498 */,
+  1151 /* Id of ReduceAction498 */,
   5 /* Color of ReduceAction498 */,
   54 /* Group of ? */,
-  843 /* Id of ReduceAction499 */,
+  1147 /* Id of ReduceAction499 */,
   5 /* Color of ReduceAction499 */,
   54 /* Group of ? */,
-  831 /* Id of ReduceAction500 */,
+  1135 /* Id of ReduceAction500 */,
   5 /* Color of ReduceAction500 */,
   54 /* Group of ? */,
-  827 /* Id of ReduceAction502 */,
-  5 /* Color of ReduceAction502 */,
-  54 /* Group of ? */,
-  823 /* Id of ReduceAction503 */,
-  5 /* Color of ReduceAction503 */,
+  1131 /* Id of ReduceAction501 */,
+  5 /* Color of ReduceAction501 */,
   54 /* Group of ? */,
-  819 /* Id of ReduceAction504 */,
-  5 /* Color of ReduceAction504 */,
+  1127 /* Id of ReduceAction502 */,
+  5 /* Color of ReduceAction502 */,
   54 /* Group of ? */,
-  815 /* Id of ReduceAction505 */,
+  1123 /* Id of ReduceAction505 */,
   5 /* Color of ReduceAction505 */,
   54 /* Group of ? */,
-  811 /* Id of ReduceAction506 */,
+  1119 /* Id of ReduceAction506 */,
   5 /* Color of ReduceAction506 */,
   54 /* Group of ? */,
-  807 /* Id of ReduceAction508 */,
+  1115 /* Id of ReduceAction507 */,
+  5 /* Color of ReduceAction507 */,
+  54 /* Group of ? */,
+  1111 /* Id of ReduceAction508 */,
   5 /* Color of ReduceAction508 */,
   54 /* Group of ? */,
-  799 /* Id of ReduceAction511 */,
+  1107 /* Id of ReduceAction509 */,
+  5 /* Color of ReduceAction509 */,
+  54 /* Group of ? */,
+  1099 /* Id of ReduceAction510 */,
+  5 /* Color of ReduceAction510 */,
+  54 /* Group of ? */,
+  1095 /* Id of ReduceAction511 */,
   5 /* Color of ReduceAction511 */,
   54 /* Group of ? */,
-  795 /* Id of ReduceAction512 */,
+  1091 /* Id of ReduceAction512 */,
   5 /* Color of ReduceAction512 */,
   54 /* Group of ? */,
-  791 /* Id of ReduceAction513 */,
+  1087 /* Id of ReduceAction513 */,
   5 /* Color of ReduceAction513 */,
   54 /* Group of ? */,
-  787 /* Id of ReduceAction514 */,
+  1083 /* Id of ReduceAction514 */,
   5 /* Color of ReduceAction514 */,
   54 /* Group of ? */,
-  783 /* Id of ReduceAction515 */,
+  1079 /* Id of ReduceAction515 */,
   5 /* Color of ReduceAction515 */,
   54 /* Group of ? */,
-  779 /* Id of ReduceAction516 */,
+  1075 /* Id of ReduceAction516 */,
   5 /* Color of ReduceAction516 */,
   54 /* Group of ? */,
-  775 /* Id of ReduceAction517 */,
+  1071 /* Id of ReduceAction517 */,
   5 /* Color of ReduceAction517 */,
   54 /* Group of ? */,
-  771 /* Id of ReduceAction518 */,
-  5 /* Color of ReduceAction518 */,
-  54 /* Group of ? */,
-  767 /* Id of ReduceAction519 */,
-  5 /* Color of ReduceAction519 */,
-  54 /* Group of ? */,
-  759 /* Id of ReduceAction520 */,
-  5 /* Color of ReduceAction520 */,
-  54 /* Group of ? */,
-  755 /* Id of ReduceAction521 */,
+  1063 /* Id of ReduceAction521 */,
   5 /* Color of ReduceAction521 */,
   54 /* Group of ? */,
-  751 /* Id of ReduceAction522 */,
-  5 /* Color of ReduceAction522 */,
-  54 /* Group of ? */,
-  747 /* Id of ReduceAction523 */,
+  1059 /* Id of ReduceAction523 */,
   5 /* Color of ReduceAction523 */,
   54 /* Group of ? */,
-  743 /* Id of ReduceAction524 */,
-  5 /* Color of ReduceAction524 */,
-  54 /* Group of ? */,
-  739 /* Id of ReduceAction525 */,
+  1055 /* Id of ReduceAction525 */,
   5 /* Color of ReduceAction525 */,
   54 /* Group of ? */,
-  735 /* Id of ReduceAction526 */,
+  1051 /* Id of ReduceAction526 */,
   5 /* Color of ReduceAction526 */,
   54 /* Group of ? */,
-  731 /* Id of ReduceAction528 */,
-  5 /* Color of ReduceAction528 */,
+  1047 /* Id of ReduceAction527 */,
+  5 /* Color of ReduceAction527 */,
   54 /* Group of ? */,
-  727 /* Id of ReduceAction529 */,
+  1043 /* Id of ReduceAction529 */,
   5 /* Color of ReduceAction529 */,
   54 /* Group of ? */,
-  719 /* Id of ReduceAction531 */,
+  1035 /* Id of ReduceAction531 */,
   5 /* Color of ReduceAction531 */,
   54 /* Group of ? */,
-  715 /* Id of ReduceAction532 */,
+  1031 /* Id of ReduceAction532 */,
   5 /* Color of ReduceAction532 */,
   54 /* Group of ? */,
-  711 /* Id of ReduceAction533 */,
+  1027 /* Id of ReduceAction533 */,
   5 /* Color of ReduceAction533 */,
   54 /* Group of ? */,
-  707 /* Id of ReduceAction534 */,
+  1023 /* Id of ReduceAction534 */,
   5 /* Color of ReduceAction534 */,
   54 /* Group of ? */,
-  587 /* Id of ReduceAction806 */,
-  5 /* Color of ReduceAction806 */,
+  1019 /* Id of ReduceAction535 */,
+  5 /* Color of ReduceAction535 */,
+  54 /* Group of ? */,
+  1015 /* Id of ReduceAction536 */,
+  5 /* Color of ReduceAction536 */,
+  54 /* Group of ? */,
+  1011 /* Id of ReduceAction537 */,
+  5 /* Color of ReduceAction537 */,
+  54 /* Group of ? */,
+  1007 /* Id of ReduceAction538 */,
+  5 /* Color of ReduceAction538 */,
+  54 /* Group of ? */,
+  1003 /* Id of ReduceAction539 */,
+  5 /* Color of ReduceAction539 */,
+  54 /* Group of ? */,
+  995 /* Id of ReduceAction540 */,
+  5 /* Color of ReduceAction540 */,
+  54 /* Group of ? */,
+  991 /* Id of ReduceAction541 */,
+  5 /* Color of ReduceAction541 */,
+  54 /* Group of ? */,
+  987 /* Id of ReduceAction543 */,
+  5 /* Color of ReduceAction543 */,
+  54 /* Group of ? */,
+  983 /* Id of ReduceAction544 */,
+  5 /* Color of ReduceAction544 */,
+  54 /* Group of ? */,
+  979 /* Id of ReduceAction546 */,
+  5 /* Color of ReduceAction546 */,
+  54 /* Group of ? */,
+  975 /* Id of ReduceAction547 */,
+  5 /* Color of ReduceAction547 */,
+  54 /* Group of ? */,
+  971 /* Id of ReduceAction548 */,
+  5 /* Color of ReduceAction548 */,
+  54 /* Group of ? */,
+  963 /* Id of ReduceAction550 */,
+  5 /* Color of ReduceAction550 */,
+  54 /* Group of ? */,
+  959 /* Id of ReduceAction551 */,
+  5 /* Color of ReduceAction551 */,
+  54 /* Group of ? */,
+  955 /* Id of ReduceAction553 */,
+  5 /* Color of ReduceAction553 */,
+  54 /* Group of ? */,
+  951 /* Id of ReduceAction554 */,
+  5 /* Color of ReduceAction554 */,
+  54 /* Group of ? */,
+  947 /* Id of ReduceAction555 */,
+  5 /* Color of ReduceAction555 */,
+  54 /* Group of ? */,
+  943 /* Id of ReduceAction556 */,
+  5 /* Color of ReduceAction556 */,
+  54 /* Group of ? */,
+  939 /* Id of ReduceAction557 */,
+  5 /* Color of ReduceAction557 */,
+  54 /* Group of ? */,
+  931 /* Id of ReduceAction564 */,
+  5 /* Color of ReduceAction564 */,
+  54 /* Group of ? */,
+  927 /* Id of ReduceAction565 */,
+  5 /* Color of ReduceAction565 */,
+  54 /* Group of ? */,
+  923 /* Id of ReduceAction566 */,
+  5 /* Color of ReduceAction566 */,
+  54 /* Group of ? */,
+  919 /* Id of ReduceAction567 */,
+  5 /* Color of ReduceAction567 */,
+  54 /* Group of ? */,
+  915 /* Id of ReduceAction568 */,
+  5 /* Color of ReduceAction568 */,
+  54 /* Group of ? */,
+  911 /* Id of ReduceAction569 */,
+  5 /* Color of ReduceAction569 */,
+  54 /* Group of ? */,
+  903 /* Id of ReduceAction570 */,
+  5 /* Color of ReduceAction570 */,
+  54 /* Group of ? */,
+  899 /* Id of ReduceAction571 */,
+  5 /* Color of ReduceAction571 */,
+  54 /* Group of ? */,
+  895 /* Id of ReduceAction572 */,
+  5 /* Color of ReduceAction572 */,
+  54 /* Group of ? */,
+  891 /* Id of ReduceAction573 */,
+  5 /* Color of ReduceAction573 */,
+  54 /* Group of ? */,
+  887 /* Id of ReduceAction574 */,
+  5 /* Color of ReduceAction574 */,
+  54 /* Group of ? */,
+  883 /* Id of ReduceAction575 */,
+  5 /* Color of ReduceAction575 */,
+  54 /* Group of ? */,
+  879 /* Id of ReduceAction576 */,
+  5 /* Color of ReduceAction576 */,
+  54 /* Group of ? */,
+  875 /* Id of ReduceAction577 */,
+  5 /* Color of ReduceAction577 */,
+  54 /* Group of ? */,
+  871 /* Id of ReduceAction578 */,
+  5 /* Color of ReduceAction578 */,
+  54 /* Group of ? */,
+  867 /* Id of ReduceAction579 */,
+  5 /* Color of ReduceAction579 */,
+  54 /* Group of ? */,
+  859 /* Id of ReduceAction580 */,
+  5 /* Color of ReduceAction580 */,
+  54 /* Group of ? */,
+  855 /* Id of ReduceAction581 */,
+  5 /* Color of ReduceAction581 */,
+  54 /* Group of ? */,
+  851 /* Id of ReduceAction582 */,
+  5 /* Color of ReduceAction582 */,
+  54 /* Group of ? */,
+  847 /* Id of ReduceAction583 */,
+  5 /* Color of ReduceAction583 */,
+  54 /* Group of ? */,
+  843 /* Id of ReduceAction584 */,
+  5 /* Color of ReduceAction584 */,
+  54 /* Group of ? */,
+  839 /* Id of ReduceAction585 */,
+  5 /* Color of ReduceAction585 */,
+  54 /* Group of ? */,
+  835 /* Id of ReduceAction586 */,
+  5 /* Color of ReduceAction586 */,
+  54 /* Group of ? */,
+  831 /* Id of ReduceAction587 */,
+  5 /* Color of ReduceAction587 */,
+  54 /* Group of ? */,
+  827 /* Id of ReduceAction589 */,
+  5 /* Color of ReduceAction589 */,
+  54 /* Group of ? */,
+  819 /* Id of ReduceAction590 */,
+  5 /* Color of ReduceAction590 */,
+  54 /* Group of ? */,
+  815 /* Id of ReduceAction591 */,
+  5 /* Color of ReduceAction591 */,
+  54 /* Group of ? */,
+  811 /* Id of ReduceAction592 */,
+  5 /* Color of ReduceAction592 */,
+  54 /* Group of ? */,
+  807 /* Id of ReduceAction593 */,
+  5 /* Color of ReduceAction593 */,
+  54 /* Group of ? */,
+  803 /* Id of ReduceAction594 */,
+  5 /* Color of ReduceAction594 */,
+  54 /* Group of ? */,
+  799 /* Id of ReduceAction595 */,
+  5 /* Color of ReduceAction595 */,
+  54 /* Group of ? */,
+  795 /* Id of ReduceAction596 */,
+  5 /* Color of ReduceAction596 */,
+  54 /* Group of ? */,
+  791 /* Id of ReduceAction597 */,
+  5 /* Color of ReduceAction597 */,
+  54 /* Group of ? */,
+  787 /* Id of ReduceAction598 */,
+  5 /* Color of ReduceAction598 */,
+  54 /* Group of ? */,
+  775 /* Id of ReduceAction600 */,
+  5 /* Color of ReduceAction600 */,
+  54 /* Group of ? */,
+  771 /* Id of ReduceAction601 */,
+  5 /* Color of ReduceAction601 */,
+  54 /* Group of ? */,
+  767 /* Id of ReduceAction602 */,
+  5 /* Color of ReduceAction602 */,
+  54 /* Group of ? */,
+  763 /* Id of ReduceAction603 */,
+  5 /* Color of ReduceAction603 */,
+  54 /* Group of ? */,
+  759 /* Id of ReduceAction604 */,
+  5 /* Color of ReduceAction604 */,
+  54 /* Group of ? */,
+  755 /* Id of ReduceAction605 */,
+  5 /* Color of ReduceAction605 */,
+  54 /* Group of ? */,
+  751 /* Id of ReduceAction606 */,
+  5 /* Color of ReduceAction606 */,
+  54 /* Group of ? */,
+  747 /* Id of ReduceAction607 */,
+  5 /* Color of ReduceAction607 */,
+  54 /* Group of ? */,
+  743 /* Id of ReduceAction608 */,
+  5 /* Color of ReduceAction608 */,
+  54 /* Group of ? */,
+  739 /* Id of ReduceAction609 */,
+  5 /* Color of ReduceAction609 */,
+  54 /* Group of ? */,
+  731 /* Id of ReduceAction610 */,
+  5 /* Color of ReduceAction610 */,
+  54 /* Group of ? */,
+  727 /* Id of ReduceAction612 */,
+  5 /* Color of ReduceAction612 */,
+  54 /* Group of ? */,
+  723 /* Id of ReduceAction613 */,
+  5 /* Color of ReduceAction613 */,
+  54 /* Group of ? */,
+  719 /* Id of ReduceAction614 */,
+  5 /* Color of ReduceAction614 */,
+  54 /* Group of ? */,
+  715 /* Id of ReduceAction615 */,
+  5 /* Color of ReduceAction615 */,
+  54 /* Group of ? */,
+  711 /* Id of ReduceAction616 */,
+  5 /* Color of ReduceAction616 */,
+  54 /* Group of ? */,
+  707 /* Id of ReduceAction617 */,
+  5 /* Color of ReduceAction617 */,
+  54 /* Group of ? */,
+  703 /* Id of ReduceAction618 */,
+  5 /* Color of ReduceAction618 */,
+  54 /* Group of ? */,
+  699 /* Id of ReduceAction619 */,
+  5 /* Color of ReduceAction619 */,
+  54 /* Group of ? */,
+  691 /* Id of ReduceAction620 */,
+  5 /* Color of ReduceAction620 */,
+  54 /* Group of ? */,
+  687 /* Id of ReduceAction621 */,
+  5 /* Color of ReduceAction621 */,
+  54 /* Group of ? */,
+  683 /* Id of ReduceAction622 */,
+  5 /* Color of ReduceAction622 */,
+  54 /* Group of ? */,
+  679 /* Id of ReduceAction624 */,
+  5 /* Color of ReduceAction624 */,
+  54 /* Group of ? */,
+  675 /* Id of ReduceAction625 */,
+  5 /* Color of ReduceAction625 */,
+  54 /* Group of ? */,
+  671 /* Id of ReduceAction626 */,
+  5 /* Color of ReduceAction626 */,
+  54 /* Group of ? */,
+  667 /* Id of ReduceAction627 */,
+  5 /* Color of ReduceAction627 */,
+  54 /* Group of ? */,
+  663 /* Id of ReduceAction628 */,
+  5 /* Color of ReduceAction628 */,
+  54 /* Group of ? */,
+  659 /* Id of ReduceAction629 */,
+  5 /* Color of ReduceAction629 */,
+  54 /* Group of ? */,
+  651 /* Id of ReduceAction630 */,
+  5 /* Color of ReduceAction630 */,
+  54 /* Group of ? */,
+  647 /* Id of ReduceAction631 */,
+  5 /* Color of ReduceAction631 */,
   54 /* Group of ? */,
-  583 /* Id of ReduceAction807 */,
-  5 /* Color of ReduceAction807 */,
+  643 /* Id of ReduceAction633 */,
+  5 /* Color of ReduceAction633 */,
   54 /* Group of ? */,
-  579 /* Id of ReduceAction808 */,
-  5 /* Color of ReduceAction808 */,
+  639 /* Id of ReduceAction636 */,
+  5 /* Color of ReduceAction636 */,
   54 /* Group of ? */,
-  571 /* Id of ReduceAction811 */,
-  5 /* Color of ReduceAction811 */,
+  635 /* Id of ReduceAction637 */,
+  5 /* Color of ReduceAction637 */,
   54 /* Group of ? */,
-  563 /* Id of ReduceAction824 */,
-  5 /* Color of ReduceAction824 */,
+  631 /* Id of ReduceAction638 */,
+  5 /* Color of ReduceAction638 */,
   54 /* Group of ? */,
-  559 /* Id of ReduceAction825 */,
-  5 /* Color of ReduceAction825 */,
+  627 /* Id of ReduceAction639 */,
+  5 /* Color of ReduceAction639 */,
   54 /* Group of ? */,
-  551 /* Id of ReduceAction832 */,
-  5 /* Color of ReduceAction832 */,
+  619 /* Id of ReduceAction640 */,
+  5 /* Color of ReduceAction640 */,
   54 /* Group of ? */,
-  547 /* Id of ReduceAction833 */,
-  5 /* Color of ReduceAction833 */,
+  615 /* Id of ReduceAction641 */,
+  5 /* Color of ReduceAction641 */,
   54 /* Group of ? */,
-  543 /* Id of ReduceAction834 */,
-  5 /* Color of ReduceAction834 */,
+  611 /* Id of ReduceAction642 */,
+  5 /* Color of ReduceAction642 */,
   54 /* Group of ? */,
-  539 /* Id of ReduceAction835 */,
-  5 /* Color of ReduceAction835 */,
+  607 /* Id of ReduceAction643 */,
+  5 /* Color of ReduceAction643 */,
   54 /* Group of ? */,
-  535 /* Id of ReduceAction836 */,
-  5 /* Color of ReduceAction836 */,
+  603 /* Id of ReduceAction644 */,
+  5 /* Color of ReduceAction644 */,
   54 /* Group of ? */,
-  531 /* Id of ReduceAction837 */,
-  5 /* Color of ReduceAction837 */,
+  599 /* Id of ReduceAction645 */,
+  5 /* Color of ReduceAction645 */,
   54 /* Group of ? */,
-  527 /* Id of ReduceAction838 */,
-  5 /* Color of ReduceAction838 */,
+  595 /* Id of ReduceAction646 */,
+  5 /* Color of ReduceAction646 */,
   54 /* Group of ? */,
-  523 /* Id of ReduceAction839 */,
-  5 /* Color of ReduceAction839 */,
+  591 /* Id of ReduceAction647 */,
+  5 /* Color of ReduceAction647 */,
   54 /* Group of ? */,
-  515 /* Id of ReduceAction840 */,
-  5 /* Color of ReduceAction840 */,
+  587 /* Id of ReduceAction648 */,
+  5 /* Color of ReduceAction648 */,
   54 /* Group of ? */,
-  511 /* Id of ReduceAction841 */,
-  5 /* Color of ReduceAction841 */,
+  583 /* Id of ReduceAction649 */,
+  5 /* Color of ReduceAction649 */,
   54 /* Group of ? */,
-  507 /* Id of ReduceAction844 */,
-  5 /* Color of ReduceAction844 */,
+  575 /* Id of ReduceAction650 */,
+  5 /* Color of ReduceAction650 */,
   54 /* Group of ? */,
-  503 /* Id of ReduceAction845 */,
-  5 /* Color of ReduceAction845 */,
+  571 /* Id of ReduceAction651 */,
+  5 /* Color of ReduceAction651 */,
   54 /* Group of ? */,
-  499 /* Id of ReduceAction846 */,
-  5 /* Color of ReduceAction846 */,
+  567 /* Id of ReduceAction653 */,
+  5 /* Color of ReduceAction653 */,
   54 /* Group of ? */,
-  495 /* Id of ReduceAction847 */,
-  5 /* Color of ReduceAction847 */,
+  563 /* Id of ReduceAction654 */,
+  5 /* Color of ReduceAction654 */,
   54 /* Group of ? */,
-  491 /* Id of ReduceAction848 */,
-  5 /* Color of ReduceAction848 */,
+  559 /* Id of ReduceAction656 */,
+  5 /* Color of ReduceAction656 */,
   54 /* Group of ? */,
-  487 /* Id of ReduceAction849 */,
-  5 /* Color of ReduceAction849 */,
+  555 /* Id of ReduceAction657 */,
+  5 /* Color of ReduceAction657 */,
   54 /* Group of ? */,
-  479 /* Id of ReduceAction850 */,
-  5 /* Color of ReduceAction850 */,
+  551 /* Id of ReduceAction658 */,
+  5 /* Color of ReduceAction658 */,
   54 /* Group of ? */,
-  475 /* Id of ReduceAction851 */,
-  5 /* Color of ReduceAction851 */,
+  547 /* Id of ReduceAction659 */,
+  5 /* Color of ReduceAction659 */,
   54 /* Group of ? */,
-  471 /* Id of ReduceAction853 */,
-  5 /* Color of ReduceAction853 */,
+  423 /* Id of ReduceAction931 */,
+  5 /* Color of ReduceAction931 */,
   54 /* Group of ? */,
-  467 /* Id of ReduceAction854 */,
-  5 /* Color of ReduceAction854 */,
+  419 /* Id of ReduceAction932 */,
+  5 /* Color of ReduceAction932 */,
   54 /* Group of ? */,
-  463 /* Id of ReduceAction855 */,
-  5 /* Color of ReduceAction855 */,
+  415 /* Id of ReduceAction933 */,
+  5 /* Color of ReduceAction933 */,
   54 /* Group of ? */,
-  459 /* Id of ReduceAction857 */,
-  5 /* Color of ReduceAction857 */,
+  411 /* Id of ReduceAction936 */,
+  5 /* Color of ReduceAction936 */,
   54 /* Group of ? */,
-  451 /* Id of ReduceAction861 */,
-  5 /* Color of ReduceAction861 */,
+  399 /* Id of ReduceAction957 */,
+  5 /* Color of ReduceAction957 */,
   54 /* Group of ? */,
-  447 /* Id of ReduceAction862 */,
-  5 /* Color of ReduceAction862 */,
+  395 /* Id of ReduceAction958 */,
+  5 /* Color of ReduceAction958 */,
   54 /* Group of ? */,
-  443 /* Id of ReduceAction863 */,
-  5 /* Color of ReduceAction863 */,
+  2867 /* Id of ReduceAction1250 */,
+  5 /* Color of ReduceAction1250 */,
   54 /* Group of ? */,
-  439 /* Id of ReduceAction864 */,
-  5 /* Color of ReduceAction864 */,
+  2863 /* Id of ReduceAction1251 */,
+  5 /* Color of ReduceAction1251 */,
   54 /* Group of ? */,
-  435 /* Id of ReduceAction865 */,
-  5 /* Color of ReduceAction865 */,
+  2859 /* Id of ReduceAction1252 */,
+  5 /* Color of ReduceAction1252 */,
+  54 /* Group of ? */,
+  2855 /* Id of ReduceAction1253 */,
+  5 /* Color of ReduceAction1253 */,
+  54 /* Group of ? */,
+  2851 /* Id of ReduceAction1254 */,
+  5 /* Color of ReduceAction1254 */,
+  54 /* Group of ? */,
+  2847 /* Id of ReduceAction1255 */,
+  5 /* Color of ReduceAction1255 */,
+  54 /* Group of ? */,
+  2843 /* Id of ReduceAction1256 */,
+  5 /* Color of ReduceAction1256 */,
+  54 /* Group of ? */,
+  2839 /* Id of ReduceAction1257 */,
+  5 /* Color of ReduceAction1257 */,
+  54 /* Group of ? */,
+  2835 /* Id of ReduceAction1258 */,
+  5 /* Color of ReduceAction1258 */,
+  54 /* Group of ? */,
+  2831 /* Id of ReduceAction1259 */,
+  5 /* Color of ReduceAction1259 */,
+  54 /* Group of ? */,
+  2823 /* Id of ReduceAction1262 */,
+  5 /* Color of ReduceAction1262 */,
+  54 /* Group of ? */,
+  2819 /* Id of ReduceAction1263 */,
+  5 /* Color of ReduceAction1263 */,
+  54 /* Group of ? */,
+  2815 /* Id of ReduceAction1264 */,
+  5 /* Color of ReduceAction1264 */,
+  54 /* Group of ? */,
+  2811 /* Id of ReduceAction1265 */,
+  5 /* Color of ReduceAction1265 */,
+  54 /* Group of ? */,
+  2807 /* Id of ReduceAction1266 */,
+  5 /* Color of ReduceAction1266 */,
+  54 /* Group of ? */,
+  2803 /* Id of ReduceAction1267 */,
+  5 /* Color of ReduceAction1267 */,
+  54 /* Group of ? */,
+  2799 /* Id of ReduceAction1268 */,
+  5 /* Color of ReduceAction1268 */,
+  54 /* Group of ? */,
+  2795 /* Id of ReduceAction1269 */,
+  5 /* Color of ReduceAction1269 */,
+  54 /* Group of ? */,
+  2787 /* Id of ReduceAction1271 */,
+  5 /* Color of ReduceAction1271 */,
+  54 /* Group of ? */,
+  2783 /* Id of ReduceAction1272 */,
+  5 /* Color of ReduceAction1272 */,
+  54 /* Group of ? */,
+  2779 /* Id of ReduceAction1273 */,
+  5 /* Color of ReduceAction1273 */,
+  54 /* Group of ? */,
+  2775 /* Id of ReduceAction1275 */,
+  5 /* Color of ReduceAction1275 */,
+  54 /* Group of ? */,
+  2771 /* Id of ReduceAction1277 */,
+  5 /* Color of ReduceAction1277 */,
+  54 /* Group of ? */,
+  2763 /* Id of ReduceAction1281 */,
+  5 /* Color of ReduceAction1281 */,
+  54 /* Group of ? */,
+  2759 /* Id of ReduceAction1285 */,
+  5 /* Color of ReduceAction1285 */,
+  54 /* Group of ? */,
+  2755 /* Id of ReduceAction1286 */,
+  5 /* Color of ReduceAction1286 */,
+  54 /* Group of ? */,
+  2751 /* Id of ReduceAction1287 */,
+  5 /* Color of ReduceAction1287 */,
+  54 /* Group of ? */,
+  2747 /* Id of ReduceAction1288 */,
+  5 /* Color of ReduceAction1288 */,
+  54 /* Group of ? */,
+  2743 /* Id of ReduceAction1289 */,
+  5 /* Color of ReduceAction1289 */,
   54 /* Group of ? */,
 };
 const char LOCATE_parser___parser_prod[] = "parser/parser_prod.nit";
-const int SFT_parser___parser_prod[157] = {
+const int SFT_parser___parser_prod[168] = {
   2 /* Group of ? */,
   57 /* Group of ? */,
   71 /* Group of ? */,
@@ -10614,231 +12018,222 @@ const int SFT_parser___parser_prod[157] = {
   4 /* Color of Visitor */,
   2 /* Group of ? */,
   50 /* Group of ? */,
-  75 /* Group of ? */,
-  74 /* Group of ? */,
-  77 /* Group of ? */,
-  77 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  91 /* Group of ? */,
-  88 /* Group of ? */,
-  88 /* Group of ? */,
-  79 /* Group of ? */,
-  79 /* Group of ? */,
-  79 /* Group of ? */,
-  79 /* Group of ? */,
-  79 /* Group of ? */,
   76 /* Group of ? */,
+  75 /* Group of ? */,
+  78 /* Group of ? */,
   78 /* Group of ? */,
-  87 /* Group of ? */,
-  86 /* Group of ? */,
-  96 /* Group of ? */,
-  96 /* Group of ? */,
-  104 /* Group of ? */,
-  98 /* Group of ? */,
-  107 /* Group of ? */,
-  106 /* Group of ? */,
-  103 /* Group of ? */,
-  85 /* Group of ? */,
-  77 /* Group of ? */,
-  77 /* Group of ? */,
-  77 /* Group of ? */,
-  77 /* Group of ? */,
-  77 /* Group of ? */,
-  77 /* Group of ? */,
-  77 /* Group of ? */,
-  77 /* Group of ? */,
-  77 /* Group of ? */,
-  77 /* Group of ? */,
-  77 /* Group of ? */,
-  77 /* Group of ? */,
-  77 /* Group of ? */,
-  77 /* Group of ? */,
-  77 /* Group of ? */,
-  77 /* Group of ? */,
   77 /* Group of ? */,
   77 /* Group of ? */,
   77 /* Group of ? */,
   77 /* Group of ? */,
-  76 /* Group of ? */,
+  92 /* Group of ? */,
+  89 /* Group of ? */,
+  89 /* Group of ? */,
+  80 /* Group of ? */,
+  80 /* Group of ? */,
+  80 /* Group of ? */,
+  80 /* Group of ? */,
   80 /* Group of ? */,
   77 /* Group of ? */,
-  81 /* Group of ? */,
-  74 /* Group of ? */,
-  88 /* Group of ? */,
-  89 /* Group of ? */,
-  88 /* Group of ? */,
-  92 /* Group of ? */,
-  88 /* Group of ? */,
-  92 /* Group of ? */,
-  92 /* Group of ? */,
-  88 /* Group of ? */,
-  88 /* Group of ? */,
-  92 /* Group of ? */,
-  92 /* Group of ? */,
-  94 /* Group of ? */,
+  79 /* Group of ? */,
   88 /* Group of ? */,
-  91 /* Group of ? */,
-  112 /* Group of ? */,
-  117 /* Group of ? */,
+  87 /* Group of ? */,
+  97 /* Group of ? */,
+  97 /* Group of ? */,
+  105 /* Group of ? */,
+  99 /* Group of ? */,
+  108 /* Group of ? */,
+  107 /* Group of ? */,
+  104 /* Group of ? */,
+  86 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  77 /* Group of ? */,
+  81 /* Group of ? */,
+  78 /* Group of ? */,
+  82 /* Group of ? */,
+  75 /* Group of ? */,
   89 /* Group of ? */,
+  90 /* Group of ? */,
   89 /* Group of ? */,
+  93 /* Group of ? */,
   89 /* Group of ? */,
+  93 /* Group of ? */,
+  93 /* Group of ? */,
   89 /* Group of ? */,
-  123 /* Group of ? */,
   89 /* Group of ? */,
-  123 /* Group of ? */,
-  121 /* Group of ? */,
-  121 /* Group of ? */,
-  121 /* Group of ? */,
-  121 /* Group of ? */,
-  121 /* Group of ? */,
-  121 /* Group of ? */,
+  93 /* Group of ? */,
+  93 /* Group of ? */,
+  95 /* Group of ? */,
   89 /* Group of ? */,
-  121 /* Group of ? */,
-  121 /* Group of ? */,
-  121 /* Group of ? */,
-  121 /* Group of ? */,
-  121 /* Group of ? */,
-  121 /* Group of ? */,
-  117 /* Group of ? */,
-  109 /* Group of ? */,
-  102 /* Group of ? */,
-  88 /* Group of ? */,
-  88 /* Group of ? */,
+  92 /* Group of ? */,
+  113 /* Group of ? */,
+  118 /* Group of ? */,
+  90 /* Group of ? */,
+  90 /* Group of ? */,
+  90 /* Group of ? */,
+  90 /* Group of ? */,
+  124 /* Group of ? */,
+  90 /* Group of ? */,
+  124 /* Group of ? */,
+  122 /* Group of ? */,
+  122 /* Group of ? */,
+  122 /* Group of ? */,
+  122 /* Group of ? */,
+  122 /* Group of ? */,
+  122 /* Group of ? */,
+  90 /* Group of ? */,
+  122 /* Group of ? */,
+  122 /* Group of ? */,
   122 /* Group of ? */,
-  88 /* Group of ? */,
   122 /* Group of ? */,
+  122 /* Group of ? */,
+  122 /* Group of ? */,
+  118 /* Group of ? */,
   110 /* Group of ? */,
-  117 /* Group of ? */,
-  119 /* Group of ? */,
-  88 /* Group of ? */,
-  119 /* Group of ? */,
-  104 /* Group of ? */,
-  91 /* Group of ? */,
+  103 /* Group of ? */,
+  89 /* Group of ? */,
+  89 /* Group of ? */,
+  123 /* Group of ? */,
+  89 /* Group of ? */,
+  123 /* Group of ? */,
+  111 /* Group of ? */,
+  118 /* Group of ? */,
+  120 /* Group of ? */,
+  89 /* Group of ? */,
+  120 /* Group of ? */,
+  105 /* Group of ? */,
+  92 /* Group of ? */,
+  95 /* Group of ? */,
+  97 /* Group of ? */,
+  89 /* Group of ? */,
   94 /* Group of ? */,
-  96 /* Group of ? */,
-  88 /* Group of ? */,
-  93 /* Group of ? */,
-  93 /* Group of ? */,
+  94 /* Group of ? */,
+  90 /* Group of ? */,
+  90 /* Group of ? */,
+  94 /* Group of ? */,
+  90 /* Group of ? */,
+  90 /* Group of ? */,
   89 /* Group of ? */,
   89 /* Group of ? */,
-  93 /* Group of ? */,
   89 /* Group of ? */,
   89 /* Group of ? */,
-  88 /* Group of ? */,
-  88 /* Group of ? */,
-  88 /* Group of ? */,
-  88 /* Group of ? */,
-  91 /* Group of ? */,
-  91 /* Group of ? */,
-  91 /* Group of ? */,
+  93 /* Group of ? */,
+  93 /* Group of ? */,
+  93 /* Group of ? */,
+  93 /* Group of ? */,
+  90 /* Group of ? */,
   91 /* Group of ? */,
   89 /* Group of ? */,
-  90 /* Group of ? */,
-  88 /* Group of ? */,
-  88 /* Group of ? */,
-  102 /* Group of ? */,
-  88 /* Group of ? */,
+  89 /* Group of ? */,
+  103 /* Group of ? */,
+  89 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  78 /* Group of ? */,
+  77 /* Group of ? */,
   77 /* Group of ? */,
+  84 /* Group of ? */,
   77 /* Group of ? */,
   77 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  83 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  74 /* Group of ? */,
-  74 /* Group of ? */,
-  76 /* Group of ? */,
-  79 /* Group of ? */,
-  80 /* Group of ? */,
-  80 /* Group of ? */,
-  80 /* Group of ? */,
-  82 /* Group of ? */,
-  82 /* Group of ? */,
-  82 /* Group of ? */,
-  74 /* Group of ? */,
   75 /* Group of ? */,
-  74 /* Group of ? */,
-  74 /* Group of ? */,
-};
-const char LOCATE_parser___lexer[] = "parser/lexer.nit";
-const int SFT_parser___lexer[102] = {
-  5 /* Group of ? */,
-  72 /* Group of ? */,
   75 /* Group of ? */,
+  77 /* Group of ? */,
+  80 /* Group of ? */,
+  81 /* Group of ? */,
+  81 /* Group of ? */,
+  81 /* Group of ? */,
+  83 /* Group of ? */,
+  83 /* Group of ? */,
+  83 /* Group of ? */,
   75 /* Group of ? */,
   76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  75 /* Group of ? */,
   75 /* Group of ? */,
   75 /* Group of ? */,
   75 /* Group of ? */,
   75 /* Group of ? */,
-  75 /* Group of ? */,
-  75 /* Group of ? */,
-  75 /* Group of ? */,
-  75 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
-  76 /* Group of ? */,
   76 /* Group of ? */,
   76 /* Group of ? */,
   76 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+};
+const char LOCATE_parser___lexer[] = "parser/lexer.nit";
+const int SFT_parser___lexer[106] = {
+  5 /* Group of ? */,
+  72 /* Group of ? */,
   76 /* Group of ? */,
   76 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
   76 /* Group of ? */,
   76 /* Group of ? */,
   76 /* Group of ? */,
@@ -10848,30 +12243,54 @@ const int SFT_parser___lexer[102] = {
   76 /* Group of ? */,
   76 /* Group of ? */,
   76 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
   76 /* Group of ? */,
-  75 /* Group of ? */,
-  75 /* Group of ? */,
-  75 /* Group of ? */,
   76 /* Group of ? */,
   76 /* Group of ? */,
   76 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
+  77 /* Group of ? */,
   76 /* Group of ? */,
+  77 /* Group of ? */,
   76 /* Group of ? */,
   76 /* Group of ? */,
-  75 /* Group of ? */,
-  75 /* Group of ? */,
-  75 /* Group of ? */,
+  77 /* Group of ? */,
   76 /* Group of ? */,
-  75 /* Group of ? */,
   6 /* Group of ? */,
   78 /* Group of ? */,
-  2651 /* Id of Lexer */,
+  7 /* Group of ? */,
+  81 /* Group of ? */,
+  7 /* Group of ? */,
+  81 /* Group of ? */,
+  3147 /* Id of Lexer */,
   5 /* Color of Lexer */,
   2 /* Group of ? */,
   55 /* Group of ? */,
 };
 const char LOCATE_parser___parser_nodes[] = "parser/parser_nodes.nit";
-const int SFT_parser___parser_nodes[966] = {
+const int SFT_parser___parser_nodes[1014] = {
   315 /* Id of ANode */,
   4 /* Color of ANode */,
   3 /* Group of ? */,
@@ -10879,965 +12298,1013 @@ const int SFT_parser___parser_nodes[966] = {
   335 /* Id of Token */,
   5 /* Color of Token */,
   73 /* Group of ? */,
-  2523 /* Id of Prod */,
+  3019 /* Id of Prod */,
   5 /* Color of Prod */,
+  6 /* Group of ? */,
   72 /* Group of ? */,
-  2907 /* Id of TEol */,
+  3403 /* Id of TEol */,
   6 /* Color of TEol */,
-  76 /* Group of ? */,
-  2919 /* Id of TComment */,
+  77 /* Group of ? */,
+  3415 /* Id of TComment */,
   6 /* Color of TComment */,
-  76 /* Group of ? */,
-  2843 /* Id of TokenKeyword */,
+  77 /* Group of ? */,
+  3339 /* Id of TokenKeyword */,
   6 /* Color of TokenKeyword */,
-  75 /* Group of ? */,
-  3519 /* Id of TKwmodule */,
+  76 /* Group of ? */,
+  4031 /* Id of TKwmodule */,
   7 /* Color of TKwmodule */,
-  77 /* Group of ? */,
-  3567 /* Id of TKwimport */,
+  78 /* Group of ? */,
+  4079 /* Id of TKwimport */,
   7 /* Color of TKwimport */,
-  77 /* Group of ? */,
-  3607 /* Id of TKwclass */,
+  78 /* Group of ? */,
+  4119 /* Id of TKwclass */,
   7 /* Color of TKwclass */,
-  77 /* Group of ? */,
-  3627 /* Id of TKwabstract */,
+  78 /* Group of ? */,
+  4139 /* Id of TKwabstract */,
   7 /* Color of TKwabstract */,
-  77 /* Group of ? */,
-  3555 /* Id of TKwinterface */,
+  78 /* Group of ? */,
+  4067 /* Id of TKwinterface */,
   7 /* Color of TKwinterface */,
-  77 /* Group of ? */,
-  3587 /* Id of TKwenum */,
+  78 /* Group of ? */,
+  4099 /* Id of TKwenum */,
   7 /* Color of TKwenum */,
-  77 /* Group of ? */,
-  3467 /* Id of TKwspecial */,
-  7 /* Color of TKwspecial */,
-  77 /* Group of ? */,
-  3591 /* Id of TKwend */,
+  78 /* Group of ? */,
+  4103 /* Id of TKwend */,
   7 /* Color of TKwend */,
-  77 /* Group of ? */,
-  3523 /* Id of TKwmeth */,
+  78 /* Group of ? */,
+  4035 /* Id of TKwmeth */,
   7 /* Color of TKwmeth */,
-  77 /* Group of ? */,
-  3451 /* Id of TKwtype */,
+  78 /* Group of ? */,
+  3967 /* Id of TKwtype */,
   7 /* Color of TKwtype */,
-  77 /* Group of ? */,
-  3559 /* Id of TKwinit */,
+  78 /* Group of ? */,
+  4071 /* Id of TKwinit */,
   7 /* Color of TKwinit */,
-  77 /* Group of ? */,
-  3479 /* Id of TKwredef */,
+  78 /* Group of ? */,
+  3991 /* Id of TKwredef */,
   7 /* Color of TKwredef */,
-  77 /* Group of ? */,
-  3543 /* Id of TKwis */,
+  78 /* Group of ? */,
+  4055 /* Id of TKwis */,
   7 /* Color of TKwis */,
-  77 /* Group of ? */,
-  3599 /* Id of TKwdo */,
+  78 /* Group of ? */,
+  4111 /* Id of TKwdo */,
   7 /* Color of TKwdo */,
-  77 /* Group of ? */,
-  3483 /* Id of TKwreadable */,
+  78 /* Group of ? */,
+  3995 /* Id of TKwreadable */,
   7 /* Color of TKwreadable */,
-  77 /* Group of ? */,
-  3439 /* Id of TKwwritable */,
+  78 /* Group of ? */,
+  3955 /* Id of TKwwritable */,
   7 /* Color of TKwwritable */,
-  77 /* Group of ? */,
-  3447 /* Id of TKwvar */,
+  78 /* Group of ? */,
+  3963 /* Id of TKwvar */,
   7 /* Color of TKwvar */,
-  77 /* Group of ? */,
-  3551 /* Id of TKwintern */,
+  78 /* Group of ? */,
+  4063 /* Id of TKwintern */,
   7 /* Color of TKwintern */,
-  77 /* Group of ? */,
-  3583 /* Id of TKwextern */,
+  78 /* Group of ? */,
+  4095 /* Id of TKwextern */,
   7 /* Color of TKwextern */,
-  77 /* Group of ? */,
-  3487 /* Id of TKwprotected */,
+  78 /* Group of ? */,
+  3999 /* Id of TKwprotected */,
   7 /* Color of TKwprotected */,
-  77 /* Group of ? */,
-  3491 /* Id of TKwprivate */,
+  78 /* Group of ? */,
+  4003 /* Id of TKwprivate */,
   7 /* Color of TKwprivate */,
-  77 /* Group of ? */,
-  3547 /* Id of TKwintrude */,
+  78 /* Group of ? */,
+  4059 /* Id of TKwintrude */,
   7 /* Color of TKwintrude */,
-  77 /* Group of ? */,
-  3571 /* Id of TKwif */,
+  78 /* Group of ? */,
+  4083 /* Id of TKwif */,
   7 /* Color of TKwif */,
-  77 /* Group of ? */,
-  3459 /* Id of TKwthen */,
+  78 /* Group of ? */,
+  3975 /* Id of TKwthen */,
   7 /* Color of TKwthen */,
-  77 /* Group of ? */,
-  3595 /* Id of TKwelse */,
+  78 /* Group of ? */,
+  4107 /* Id of TKwelse */,
   7 /* Color of TKwelse */,
-  77 /* Group of ? */,
-  3443 /* Id of TKwwhile */,
+  78 /* Group of ? */,
+  3959 /* Id of TKwwhile */,
   7 /* Color of TKwwhile */,
-  77 /* Group of ? */,
-  3527 /* Id of TKwloop */,
+  78 /* Group of ? */,
+  4039 /* Id of TKwloop */,
   7 /* Color of TKwloop */,
-  77 /* Group of ? */,
-  3575 /* Id of TKwfor */,
+  78 /* Group of ? */,
+  4087 /* Id of TKwfor */,
   7 /* Color of TKwfor */,
-  77 /* Group of ? */,
-  3563 /* Id of TKwin */,
+  78 /* Group of ? */,
+  4075 /* Id of TKwin */,
   7 /* Color of TKwin */,
-  77 /* Group of ? */,
-  3623 /* Id of TKwand */,
+  78 /* Group of ? */,
+  4135 /* Id of TKwand */,
   7 /* Color of TKwand */,
-  77 /* Group of ? */,
-  3495 /* Id of TKwor */,
+  78 /* Group of ? */,
+  4007 /* Id of TKwor */,
   7 /* Color of TKwor */,
-  77 /* Group of ? */,
-  3511 /* Id of TKwnot */,
+  78 /* Group of ? */,
+  4023 /* Id of TKwnot */,
   7 /* Color of TKwnot */,
-  77 /* Group of ? */,
-  3475 /* Id of TKwreturn */,
+  78 /* Group of ? */,
+  3987 /* Id of TKwreturn */,
   7 /* Color of TKwreturn */,
-  77 /* Group of ? */,
-  3603 /* Id of TKwcontinue */,
+  78 /* Group of ? */,
+  4115 /* Id of TKwcontinue */,
   7 /* Color of TKwcontinue */,
-  77 /* Group of ? */,
-  3611 /* Id of TKwbreak */,
+  78 /* Group of ? */,
+  4123 /* Id of TKwbreak */,
   7 /* Color of TKwbreak */,
-  77 /* Group of ? */,
-  3631 /* Id of TKwabort */,
+  78 /* Group of ? */,
+  4143 /* Id of TKwabort */,
   7 /* Color of TKwabort */,
-  77 /* Group of ? */,
-  3615 /* Id of TKwassert */,
+  78 /* Group of ? */,
+  4127 /* Id of TKwassert */,
   7 /* Color of TKwassert */,
-  77 /* Group of ? */,
-  3515 /* Id of TKwnew */,
+  78 /* Group of ? */,
+  4027 /* Id of TKwnew */,
   7 /* Color of TKwnew */,
-  77 /* Group of ? */,
-  3539 /* Id of TKwisa */,
+  78 /* Group of ? */,
+  4051 /* Id of TKwisa */,
   7 /* Color of TKwisa */,
-  77 /* Group of ? */,
-  3499 /* Id of TKwonce */,
+  78 /* Group of ? */,
+  4011 /* Id of TKwonce */,
   7 /* Color of TKwonce */,
-  77 /* Group of ? */,
-  3463 /* Id of TKwsuper */,
+  78 /* Group of ? */,
+  3979 /* Id of TKwsuper */,
   7 /* Color of TKwsuper */,
-  77 /* Group of ? */,
-  3471 /* Id of TKwself */,
+  78 /* Group of ? */,
+  3983 /* Id of TKwself */,
   7 /* Color of TKwself */,
-  77 /* Group of ? */,
-  3455 /* Id of TKwtrue */,
+  78 /* Group of ? */,
+  3971 /* Id of TKwtrue */,
   7 /* Color of TKwtrue */,
-  77 /* Group of ? */,
-  3579 /* Id of TKwfalse */,
+  78 /* Group of ? */,
+  4091 /* Id of TKwfalse */,
   7 /* Color of TKwfalse */,
-  77 /* Group of ? */,
-  3507 /* Id of TKwnull */,
+  78 /* Group of ? */,
+  4019 /* Id of TKwnull */,
   7 /* Color of TKwnull */,
-  77 /* Group of ? */,
-  3619 /* Id of TKwas */,
+  78 /* Group of ? */,
+  4131 /* Id of TKwas */,
   7 /* Color of TKwas */,
-  77 /* Group of ? */,
-  3503 /* Id of TKwnullable */,
+  78 /* Group of ? */,
+  4015 /* Id of TKwnullable */,
   7 /* Color of TKwnullable */,
-  77 /* Group of ? */,
-  3535 /* Id of TKwisset */,
+  78 /* Group of ? */,
+  4047 /* Id of TKwisset */,
   7 /* Color of TKwisset */,
-  77 /* Group of ? */,
-  3531 /* Id of TKwlabel */,
+  78 /* Group of ? */,
+  4043 /* Id of TKwlabel */,
   7 /* Color of TKwlabel */,
-  77 /* Group of ? */,
-  2895 /* Id of TKwdebug */,
+  78 /* Group of ? */,
+  3391 /* Id of TKwdebug */,
   6 /* Color of TKwdebug */,
-  76 /* Group of ? */,
-  2887 /* Id of TOpar */,
+  77 /* Group of ? */,
+  3383 /* Id of TOpar */,
   6 /* Color of TOpar */,
-  76 /* Group of ? */,
-  2915 /* Id of TCpar */,
+  77 /* Group of ? */,
+  3411 /* Id of TCpar */,
   6 /* Color of TCpar */,
-  76 /* Group of ? */,
-  2891 /* Id of TObra */,
+  77 /* Group of ? */,
+  3387 /* Id of TObra */,
   6 /* Color of TObra */,
-  76 /* Group of ? */,
-  2935 /* Id of TCbra */,
+  77 /* Group of ? */,
+  3431 /* Id of TCbra */,
   6 /* Color of TCbra */,
-  76 /* Group of ? */,
-  2923 /* Id of TComma */,
+  77 /* Group of ? */,
+  3419 /* Id of TComma */,
   6 /* Color of TComma */,
-  76 /* Group of ? */,
-  2927 /* Id of TColumn */,
+  77 /* Group of ? */,
+  3423 /* Id of TColumn */,
   6 /* Color of TColumn */,
-  76 /* Group of ? */,
-  2883 /* Id of TQuad */,
+  77 /* Group of ? */,
+  3379 /* Id of TQuad */,
   6 /* Color of TQuad */,
-  76 /* Group of ? */,
-  2951 /* Id of TAssign */,
+  77 /* Group of ? */,
+  3451 /* Id of TAssign */,
   6 /* Color of TAssign */,
-  76 /* Group of ? */,
-  2835 /* Id of TokenOperator */,
+  77 /* Group of ? */,
+  3331 /* Id of TokenOperator */,
   6 /* Color of TokenOperator */,
-  75 /* Group of ? */,
-  3395 /* Id of TPluseq */,
+  76 /* Group of ? */,
+  3911 /* Id of TPluseq */,
   7 /* Color of TPluseq */,
-  77 /* Group of ? */,
-  3415 /* Id of TMinuseq */,
+  78 /* Group of ? */,
+  3931 /* Id of TMinuseq */,
   7 /* Color of TMinuseq */,
-  77 /* Group of ? */,
-  3655 /* Id of TDotdotdot */,
+  78 /* Group of ? */,
+  4167 /* Id of TDotdotdot */,
   7 /* Color of TDotdotdot */,
-  77 /* Group of ? */,
-  3659 /* Id of TDotdot */,
+  78 /* Group of ? */,
+  4171 /* Id of TDotdot */,
   7 /* Color of TDotdot */,
-  77 /* Group of ? */,
-  3663 /* Id of TDot */,
+  78 /* Group of ? */,
+  4175 /* Id of TDot */,
   7 /* Color of TDot */,
-  77 /* Group of ? */,
-  3399 /* Id of TPlus */,
+  78 /* Group of ? */,
+  3915 /* Id of TPlus */,
   7 /* Color of TPlus */,
-  77 /* Group of ? */,
-  3419 /* Id of TMinus */,
+  78 /* Group of ? */,
+  3935 /* Id of TMinus */,
   7 /* Color of TMinus */,
-  77 /* Group of ? */,
-  3387 /* Id of TStar */,
+  78 /* Group of ? */,
+  3903 /* Id of TStar */,
   7 /* Color of TStar */,
-  77 /* Group of ? */,
-  3391 /* Id of TSlash */,
+  78 /* Group of ? */,
+  3907 /* Id of TSlash */,
   7 /* Color of TSlash */,
-  77 /* Group of ? */,
-  3403 /* Id of TPercent */,
+  78 /* Group of ? */,
+  3919 /* Id of TPercent */,
   7 /* Color of TPercent */,
-  77 /* Group of ? */,
-  3651 /* Id of TEq */,
+  78 /* Group of ? */,
+  4163 /* Id of TEq */,
   7 /* Color of TEq */,
-  77 /* Group of ? */,
-  3411 /* Id of TNe */,
+  78 /* Group of ? */,
+  3927 /* Id of TNe */,
   7 /* Color of TNe */,
-  77 /* Group of ? */,
-  3427 /* Id of TLt */,
+  78 /* Group of ? */,
+  3943 /* Id of TLt */,
   7 /* Color of TLt */,
-  77 /* Group of ? */,
-  3435 /* Id of TLe */,
+  78 /* Group of ? */,
+  3951 /* Id of TLe */,
   7 /* Color of TLe */,
-  77 /* Group of ? */,
-  3431 /* Id of TLl */,
+  78 /* Group of ? */,
+  3947 /* Id of TLl */,
   7 /* Color of TLl */,
-  77 /* Group of ? */,
-  3635 /* Id of TGt */,
+  78 /* Group of ? */,
+  4147 /* Id of TGt */,
   7 /* Color of TGt */,
-  77 /* Group of ? */,
-  3643 /* Id of TGe */,
+  78 /* Group of ? */,
+  4155 /* Id of TGe */,
   7 /* Color of TGe */,
-  77 /* Group of ? */,
-  3639 /* Id of TGg */,
+  78 /* Group of ? */,
+  4151 /* Id of TGg */,
   7 /* Color of TGg */,
-  77 /* Group of ? */,
-  3383 /* Id of TStarship */,
+  78 /* Group of ? */,
+  3899 /* Id of TStarship */,
   7 /* Color of TStarship */,
-  77 /* Group of ? */,
-  3671 /* Id of TBang */,
+  78 /* Group of ? */,
+  4183 /* Id of TBang */,
   7 /* Color of TBang */,
+  78 /* Group of ? */,
+  3447 /* Id of TAt */,
+  6 /* Color of TAt */,
   77 /* Group of ? */,
-  2931 /* Id of TClassid */,
+  3427 /* Id of TClassid */,
   6 /* Color of TClassid */,
-  76 /* Group of ? */,
-  2899 /* Id of TId */,
+  77 /* Group of ? */,
+  3395 /* Id of TId */,
   6 /* Color of TId */,
-  76 /* Group of ? */,
-  2947 /* Id of TAttrid */,
+  77 /* Group of ? */,
+  3443 /* Id of TAttrid */,
   6 /* Color of TAttrid */,
-  76 /* Group of ? */,
-  2839 /* Id of TokenLiteral */,
+  77 /* Group of ? */,
+  3335 /* Id of TokenLiteral */,
   6 /* Color of TokenLiteral */,
-  75 /* Group of ? */,
-  3407 /* Id of TNumber */,
+  76 /* Group of ? */,
+  3923 /* Id of TNumber */,
   7 /* Color of TNumber */,
-  77 /* Group of ? */,
-  3647 /* Id of TFloat */,
+  78 /* Group of ? */,
+  4159 /* Id of TFloat */,
   7 /* Color of TFloat */,
-  77 /* Group of ? */,
-  3667 /* Id of TChar */,
+  78 /* Group of ? */,
+  4179 /* Id of TChar */,
   7 /* Color of TChar */,
-  77 /* Group of ? */,
-  3375 /* Id of TString */,
+  78 /* Group of ? */,
+  3891 /* Id of TString */,
   7 /* Color of TString */,
-  77 /* Group of ? */,
-  3379 /* Id of TStartString */,
+  78 /* Group of ? */,
+  3895 /* Id of TStartString */,
   7 /* Color of TStartString */,
-  77 /* Group of ? */,
-  3423 /* Id of TMidString */,
+  78 /* Group of ? */,
+  3939 /* Id of TMidString */,
   7 /* Color of TMidString */,
-  77 /* Group of ? */,
-  2911 /* Id of TEndString */,
+  78 /* Group of ? */,
+  3407 /* Id of TEndString */,
   6 /* Color of TEndString */,
-  76 /* Group of ? */,
-  2939 /* Id of TBadString */,
+  77 /* Group of ? */,
+  3435 /* Id of TBadString */,
   6 /* Color of TBadString */,
-  76 /* Group of ? */,
-  2943 /* Id of TBadChar */,
+  77 /* Group of ? */,
+  3439 /* Id of TBadChar */,
   6 /* Color of TBadChar */,
-  76 /* Group of ? */,
-  2903 /* Id of TExternCodeSegment */,
-  6 /* Color of TExternCodeSegment */,
   77 /* Group of ? */,
-  3175 /* Id of EOF */,
+  3399 /* Id of TExternCodeSegment */,
+  6 /* Color of TExternCodeSegment */,
+  78 /* Group of ? */,
+  3675 /* Id of EOF */,
   6 /* Color of EOF */,
-  76 /* Group of ? */,
-  3955 /* Id of AError */,
+  77 /* Group of ? */,
+  4499 /* Id of AError */,
   7 /* Color of AError */,
   80 /* Group of ? */,
-  3267 /* Id of AModule */,
+  4707 /* Id of ALexerError */,
+  8 /* Color of ALexerError */,
+  83 /* Group of ? */,
+  4667 /* Id of AParserError */,
+  8 /* Color of AParserError */,
+  83 /* Group of ? */,
+  3767 /* Id of AModule */,
   6 /* Color of AModule */,
-  6 /* Group of ? */,
-  77 /* Group of ? */,
-  3259 /* Id of AModuledecl */,
+  7 /* Group of ? */,
+  78 /* Group of ? */,
+  3759 /* Id of AModuledecl */,
   6 /* Color of AModuledecl */,
-  6 /* Group of ? */,
-  76 /* Group of ? */,
-  3287 /* Id of AImport */,
+  7 /* Group of ? */,
+  77 /* Group of ? */,
+  3787 /* Id of AImport */,
   6 /* Color of AImport */,
-  76 /* Group of ? */,
-  3783 /* Id of AStdImport */,
+  77 /* Group of ? */,
+  4299 /* Id of AStdImport */,
   7 /* Color of AStdImport */,
-  6 /* Group of ? */,
-  79 /* Group of ? */,
-  3867 /* Id of ANoImport */,
+  7 /* Group of ? */,
+  80 /* Group of ? */,
+  4383 /* Id of ANoImport */,
   7 /* Color of ANoImport */,
-  6 /* Group of ? */,
-  79 /* Group of ? */,
-  3231 /* Id of AVisibility */,
+  7 /* Group of ? */,
+  80 /* Group of ? */,
+  3731 /* Id of AVisibility */,
   6 /* Color of AVisibility */,
-  75 /* Group of ? */,
-  3827 /* Id of APublicVisibility */,
+  76 /* Group of ? */,
+  4343 /* Id of APublicVisibility */,
   7 /* Color of APublicVisibility */,
-  78 /* Group of ? */,
-  3843 /* Id of APrivateVisibility */,
+  79 /* Group of ? */,
+  4359 /* Id of APrivateVisibility */,
   7 /* Color of APrivateVisibility */,
-  6 /* Group of ? */,
-  78 /* Group of ? */,
-  3835 /* Id of AProtectedVisibility */,
+  7 /* Group of ? */,
+  79 /* Group of ? */,
+  4351 /* Id of AProtectedVisibility */,
   7 /* Color of AProtectedVisibility */,
-  6 /* Group of ? */,
-  78 /* Group of ? */,
-  3907 /* Id of AIntrudeVisibility */,
+  7 /* Group of ? */,
+  79 /* Group of ? */,
+  4443 /* Id of AIntrudeVisibility */,
   7 /* Color of AIntrudeVisibility */,
-  6 /* Group of ? */,
-  78 /* Group of ? */,
-  3331 /* Id of AClassdef */,
+  7 /* Group of ? */,
+  79 /* Group of ? */,
+  3831 /* Id of AClassdef */,
   6 /* Color of AClassdef */,
-  8 /* Group of ? */,
-  85 /* Group of ? */,
-  3787 /* Id of AStdClassdef */,
-  7 /* Color of AStdClassdef */,
   9 /* Group of ? */,
-  93 /* Group of ? */,
-  3767 /* Id of ATopClassdef */,
+  86 /* Group of ? */,
+  4303 /* Id of AStdClassdef */,
+  7 /* Color of AStdClassdef */,
+  10 /* Group of ? */,
+  94 /* Group of ? */,
+  4283 /* Id of ATopClassdef */,
   7 /* Color of ATopClassdef */,
-  90 /* Group of ? */,
-  3887 /* Id of AMainClassdef */,
+  91 /* Group of ? */,
+  4403 /* Id of AMainClassdef */,
   7 /* Color of AMainClassdef */,
-  90 /* Group of ? */,
-  3327 /* Id of AClasskind */,
+  91 /* Group of ? */,
+  3827 /* Id of AClasskind */,
   6 /* Color of AClasskind */,
-  78 /* Group of ? */,
-  3971 /* Id of AConcreteClasskind */,
+  79 /* Group of ? */,
+  4515 /* Id of AConcreteClasskind */,
   7 /* Color of AConcreteClasskind */,
-  6 /* Group of ? */,
-  81 /* Group of ? */,
-  4039 /* Id of AAbstractClasskind */,
+  7 /* Group of ? */,
+  82 /* Group of ? */,
+  4587 /* Id of AAbstractClasskind */,
   7 /* Color of AAbstractClasskind */,
-  6 /* Group of ? */,
-  81 /* Group of ? */,
-  3911 /* Id of AInterfaceClasskind */,
+  7 /* Group of ? */,
+  82 /* Group of ? */,
+  4447 /* Id of AInterfaceClasskind */,
   7 /* Color of AInterfaceClasskind */,
-  6 /* Group of ? */,
-  81 /* Group of ? */,
-  3963 /* Id of AEnumClasskind */,
+  7 /* Group of ? */,
+  82 /* Group of ? */,
+  4507 /* Id of AEnumClasskind */,
   7 /* Color of AEnumClasskind */,
-  6 /* Group of ? */,
-  81 /* Group of ? */,
-  3947 /* Id of AExternClasskind */,
+  7 /* Group of ? */,
+  82 /* Group of ? */,
+  4487 /* Id of AExternClasskind */,
   7 /* Color of AExternClasskind */,
-  6 /* Group of ? */,
-  81 /* Group of ? */,
-  3291 /* Id of AFormaldef */,
-  6 /* Color of AFormaldef */,
   7 /* Group of ? */,
-  78 /* Group of ? */,
-  3239 /* Id of ASuperclass */,
+  82 /* Group of ? */,
+  3791 /* Id of AFormaldef */,
+  6 /* Color of AFormaldef */,
+  8 /* Group of ? */,
+  79 /* Group of ? */,
+  3739 /* Id of ASuperclass */,
   6 /* Color of ASuperclass */,
+  8 /* Group of ? */,
+  81 /* Group of ? */,
+  3751 /* Id of APropdef */,
+  6 /* Color of APropdef */,
   7 /* Group of ? */,
   80 /* Group of ? */,
-  3251 /* Id of APropdef */,
-  6 /* Color of APropdef */,
-  6 /* Group of ? */,
-  79 /* Group of ? */,
-  4011 /* Id of AAttrPropdef */,
+  4555 /* Id of AAttrPropdef */,
   7 /* Color of AAttrPropdef */,
+  12 /* Group of ? */,
+  90 /* Group of ? */,
+  4399 /* Id of AMethPropdef */,
+  7 /* Color of AMethPropdef */,
   11 /* Group of ? */,
   89 /* Group of ? */,
-  3883 /* Id of AMethPropdef */,
-  7 /* Color of AMethPropdef */,
-  10 /* Group of ? */,
-  88 /* Group of ? */,
-  4207 /* Id of ADeferredMethPropdef */,
+  4763 /* Id of ADeferredMethPropdef */,
   8 /* Color of ADeferredMethPropdef */,
-  14 /* Group of ? */,
-  98 /* Group of ? */,
-  4163 /* Id of AInternMethPropdef */,
+  15 /* Group of ? */,
+  99 /* Group of ? */,
+  4719 /* Id of AInternMethPropdef */,
   8 /* Color of AInternMethPropdef */,
-  14 /* Group of ? */,
-  98 /* Group of ? */,
-  4191 /* Id of AExternPropdef */,
+  15 /* Group of ? */,
+  99 /* Group of ? */,
+  4747 /* Id of AExternPropdef */,
   9 /* Color of AExternPropdef */,
-  14 /* Group of ? */,
-  97 /* Group of ? */,
-  4287 /* Id of AExternMethPropdef */,
+  15 /* Group of ? */,
+  98 /* Group of ? */,
+  4843 /* Id of AExternMethPropdef */,
   10 /* Color of AExternMethPropdef */,
-  17 /* Group of ? */,
-  106 /* Group of ? */,
-  4219 /* Id of AConcreteMethPropdef */,
+  18 /* Group of ? */,
+  107 /* Group of ? */,
+  4775 /* Id of AConcreteMethPropdef */,
   9 /* Color of AConcreteMethPropdef */,
-  14 /* Group of ? */,
-  100 /* Group of ? */,
-  4167 /* Id of AInitPropdef */,
+  15 /* Group of ? */,
+  101 /* Group of ? */,
+  4723 /* Id of AInitPropdef */,
   8 /* Color of AInitPropdef */,
-  96 /* Group of ? */,
-  4295 /* Id of AConcreteInitPropdef */,
+  97 /* Group of ? */,
+  4851 /* Id of AConcreteInitPropdef */,
   10 /* Color of AConcreteInitPropdef */,
+  19 /* Group of ? */,
+  110 /* Group of ? */,
+  4847 /* Id of AExternInitPropdef */,
+  10 /* Color of AExternInitPropdef */,
   18 /* Group of ? */,
   109 /* Group of ? */,
-  4291 /* Id of AExternInitPropdef */,
-  10 /* Color of AExternInitPropdef */,
-  17 /* Group of ? */,
-  108 /* Group of ? */,
-  4283 /* Id of AMainMethPropdef */,
+  4839 /* Id of AMainMethPropdef */,
   10 /* Color of AMainMethPropdef */,
-  105 /* Group of ? */,
-  3299 /* Id of AExternCalls */,
+  106 /* Group of ? */,
+  3799 /* Id of AExternCalls */,
   6 /* Color of AExternCalls */,
-  6 /* Group of ? */,
-  76 /* Group of ? */,
-  3303 /* Id of AExternCall */,
+  7 /* Group of ? */,
+  77 /* Group of ? */,
+  3803 /* Id of AExternCall */,
   6 /* Color of AExternCall */,
-  78 /* Group of ? */,
-  3839 /* Id of APropExternCall */,
-  7 /* Color of APropExternCall */,
   79 /* Group of ? */,
-  4151 /* Id of ALocalPropExternCall */,
+  4355 /* Id of APropExternCall */,
+  7 /* Color of APropExternCall */,
+  80 /* Group of ? */,
+  4703 /* Id of ALocalPropExternCall */,
   8 /* Color of ALocalPropExternCall */,
-  6 /* Group of ? */,
-  82 /* Group of ? */,
-  4179 /* Id of AFullPropExternCall */,
+  7 /* Group of ? */,
+  83 /* Group of ? */,
+  4735 /* Id of AFullPropExternCall */,
   8 /* Color of AFullPropExternCall */,
-  6 /* Group of ? */,
-  82 /* Group of ? */,
-  4171 /* Id of AInitPropExternCall */,
+  7 /* Group of ? */,
+  83 /* Group of ? */,
+  4727 /* Id of AInitPropExternCall */,
   8 /* Color of AInitPropExternCall */,
-  6 /* Group of ? */,
-  82 /* Group of ? */,
-  3775 /* Id of ASuperExternCall */,
+  7 /* Group of ? */,
+  83 /* Group of ? */,
+  4291 /* Id of ASuperExternCall */,
   7 /* Color of ASuperExternCall */,
-  6 /* Group of ? */,
-  81 /* Group of ? */,
-  3983 /* Id of ACastExternCall */,
+  7 /* Group of ? */,
+  82 /* Group of ? */,
+  4527 /* Id of ACastExternCall */,
   7 /* Color of ACastExternCall */,
-  81 /* Group of ? */,
-  4227 /* Id of ACastAsExternCall */,
+  82 /* Group of ? */,
+  4783 /* Id of ACastAsExternCall */,
   8 /* Color of ACastAsExternCall */,
-  6 /* Group of ? */,
-  84 /* Group of ? */,
-  4247 /* Id of AAsNullableExternCall */,
+  7 /* Group of ? */,
+  85 /* Group of ? */,
+  4803 /* Id of AAsNullableExternCall */,
   8 /* Color of AAsNullableExternCall */,
-  6 /* Group of ? */,
-  84 /* Group of ? */,
-  4251 /* Id of AAsNotNullableExternCall */,
+  7 /* Group of ? */,
+  85 /* Group of ? */,
+  4807 /* Id of AAsNotNullableExternCall */,
   8 /* Color of AAsNotNullableExternCall */,
-  6 /* Group of ? */,
-  84 /* Group of ? */,
-  3759 /* Id of ATypePropdef */,
+  7 /* Group of ? */,
+  85 /* Group of ? */,
+  4271 /* Id of ATypePropdef */,
   7 /* Color of ATypePropdef */,
-  9 /* Group of ? */,
-  87 /* Group of ? */,
-  3339 /* Id of AAble */,
+  10 /* Group of ? */,
+  88 /* Group of ? */,
+  3855 /* Id of AAble */,
   6 /* Color of AAble */,
-  6 /* Group of ? */,
-  74 /* Group of ? */,
-  3819 /* Id of AReadAble */,
+  7 /* Group of ? */,
+  75 /* Group of ? */,
+  4335 /* Id of AReadAble */,
   7 /* Color of AReadAble */,
-  8 /* Group of ? */,
-  79 /* Group of ? */,
-  3747 /* Id of AWriteAble */,
+  9 /* Group of ? */,
+  80 /* Group of ? */,
+  4259 /* Id of AWriteAble */,
   7 /* Color of AWriteAble */,
-  8 /* Group of ? */,
-  79 /* Group of ? */,
-  3271 /* Id of AMethid */,
+  9 /* Group of ? */,
+  80 /* Group of ? */,
+  3771 /* Id of AMethid */,
   6 /* Color of AMethid */,
-  76 /* Group of ? */,
-  3927 /* Id of AIdMethid */,
+  77 /* Group of ? */,
+  4463 /* Id of AIdMethid */,
   7 /* Color of AIdMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3847 /* Id of APlusMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4363 /* Id of APlusMethid */,
   7 /* Color of APlusMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3875 /* Id of AMinusMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4391 /* Id of AMinusMethid */,
   7 /* Color of AMinusMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3795 /* Id of AStarMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4311 /* Id of AStarMethid */,
   7 /* Color of AStarMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3799 /* Id of ASlashMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4315 /* Id of ASlashMethid */,
   7 /* Color of ASlashMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3855 /* Id of APercentMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4371 /* Id of APercentMethid */,
   7 /* Color of APercentMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3959 /* Id of AEqMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4503 /* Id of AEqMethid */,
   7 /* Color of AEqMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3871 /* Id of ANeMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4387 /* Id of ANeMethid */,
   7 /* Color of ANeMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3903 /* Id of ALeMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4419 /* Id of ALeMethid */,
   7 /* Color of ALeMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3939 /* Id of AGeMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4479 /* Id of AGeMethid */,
   7 /* Color of AGeMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3891 /* Id of ALtMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4407 /* Id of ALtMethid */,
   7 /* Color of ALtMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3931 /* Id of AGtMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4471 /* Id of AGtMethid */,
   7 /* Color of AGtMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3895 /* Id of ALlMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4411 /* Id of ALlMethid */,
   7 /* Color of ALlMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3935 /* Id of AGgMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4475 /* Id of AGgMethid */,
   7 /* Color of AGgMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3995 /* Id of ABraMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4539 /* Id of ABraMethid */,
   7 /* Color of ABraMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3791 /* Id of AStarshipMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4307 /* Id of AStarshipMethid */,
   7 /* Color of AStarshipMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  4019 /* Id of AAssignMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4567 /* Id of AAssignMethid */,
   7 /* Color of AAssignMethid */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3991 /* Id of ABraassignMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4535 /* Id of ABraassignMethid */,
   7 /* Color of ABraassignMethid */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  3743 /* Id of ASignature */,
+  6 /* Color of ASignature */,
   7 /* Group of ? */,
   79 /* Group of ? */,
-  3243 /* Id of ASignature */,
-  6 /* Color of ASignature */,
-  6 /* Group of ? */,
-  78 /* Group of ? */,
-  3255 /* Id of AParam */,
+  3755 /* Id of AParam */,
   6 /* Color of AParam */,
-  9 /* Group of ? */,
-  82 /* Group of ? */,
-  3323 /* Id of AClosureDecl */,
+  10 /* Group of ? */,
+  83 /* Group of ? */,
+  3823 /* Id of AClosureDecl */,
   6 /* Color of AClosureDecl */,
-  8 /* Group of ? */,
-  79 /* Group of ? */,
-  3235 /* Id of AType */,
+  9 /* Group of ? */,
+  80 /* Group of ? */,
+  3735 /* Id of AType */,
   6 /* Color of AType */,
-  8 /* Group of ? */,
-  83 /* Group of ? */,
-  3279 /* Id of ALabel */,
+  9 /* Group of ? */,
+  84 /* Group of ? */,
+  3779 /* Id of ALabel */,
   6 /* Color of ALabel */,
-  6 /* Group of ? */,
-  76 /* Group of ? */,
-  3311 /* Id of AExpr */,
+  7 /* Group of ? */,
+  77 /* Group of ? */,
+  3811 /* Id of AExpr */,
   7 /* Color of AExpr */,
-  80 /* Group of ? */,
-  4007 /* Id of ABlockExpr */,
+  81 /* Group of ? */,
+  4551 /* Id of ABlockExpr */,
   8 /* Color of ABlockExpr */,
-  11 /* Group of ? */,
-  90 /* Group of ? */,
-  3751 /* Id of AVardeclExpr */,
-  8 /* Color of AVardeclExpr */,
   12 /* Group of ? */,
   91 /* Group of ? */,
-  3811 /* Id of AReturnExpr */,
+  4263 /* Id of AVardeclExpr */,
+  8 /* Color of AVardeclExpr */,
+  13 /* Group of ? */,
+  92 /* Group of ? */,
+  4327 /* Id of AReturnExpr */,
   8 /* Color of AReturnExpr */,
-  11 /* Group of ? */,
-  90 /* Group of ? */,
-  3275 /* Id of ALabelable */,
+  12 /* Group of ? */,
+  91 /* Group of ? */,
+  3775 /* Id of ALabelable */,
   6 /* Color of ALabelable */,
-  6 /* Group of ? */,
-  74 /* Group of ? */,
-  4231 /* Id of ABreakExpr */,
+  7 /* Group of ? */,
+  75 /* Group of ? */,
+  4787 /* Id of ABreakExpr */,
   9 /* Color of ABreakExpr */,
-  12 /* Group of ? */,
-  94 /* Group of ? */,
-  4051 /* Id of AAbortExpr */,
+  13 /* Group of ? */,
+  95 /* Group of ? */,
+  4599 /* Id of AAbortExpr */,
   8 /* Color of AAbortExpr */,
-  11 /* Group of ? */,
-  90 /* Group of ? */,
-  4215 /* Id of AContinueExpr */,
-  9 /* Color of AContinueExpr */,
   12 /* Group of ? */,
-  94 /* Group of ? */,
-  4203 /* Id of ADoExpr */,
+  91 /* Group of ? */,
+  4771 /* Id of AContinueExpr */,
+  9 /* Color of AContinueExpr */,
+  13 /* Group of ? */,
+  95 /* Group of ? */,
+  4759 /* Id of ADoExpr */,
   9 /* Color of ADoExpr */,
-  12 /* Group of ? */,
-  94 /* Group of ? */,
-  3923 /* Id of AIfExpr */,
+  13 /* Group of ? */,
+  95 /* Group of ? */,
+  4459 /* Id of AIfExpr */,
   8 /* Color of AIfExpr */,
-  11 /* Group of ? */,
-  90 /* Group of ? */,
-  3919 /* Id of AIfexprExpr */,
+  12 /* Group of ? */,
+  91 /* Group of ? */,
+  4455 /* Id of AIfexprExpr */,
   8 /* Color of AIfexprExpr */,
-  11 /* Group of ? */,
-  90 /* Group of ? */,
-  4091 /* Id of AWhileExpr */,
-  9 /* Color of AWhileExpr */,
   12 /* Group of ? */,
-  94 /* Group of ? */,
-  4147 /* Id of ALoopExpr */,
+  91 /* Group of ? */,
+  4639 /* Id of AWhileExpr */,
+  9 /* Color of AWhileExpr */,
+  13 /* Group of ? */,
+  95 /* Group of ? */,
+  4699 /* Id of ALoopExpr */,
   9 /* Color of ALoopExpr */,
-  12 /* Group of ? */,
-  94 /* Group of ? */,
-  4183 /* Id of AForExpr */,
-  9 /* Color of AForExpr */,
   13 /* Group of ? */,
-  96 /* Group of ? */,
-  4027 /* Id of AAssertExpr */,
+  95 /* Group of ? */,
+  4739 /* Id of AForExpr */,
+  9 /* Color of AForExpr */,
+  14 /* Group of ? */,
+  97 /* Group of ? */,
+  4575 /* Id of AAssertExpr */,
   8 /* Color of AAssertExpr */,
-  11 /* Group of ? */,
-  90 /* Group of ? */,
-  4023 /* Id of AAssignFormExpr */,
-  8 /* Color of AAssignFormExpr */,
-  13 /* Group of ? */,
+  12 /* Group of ? */,
   91 /* Group of ? */,
-  3815 /* Id of AReassignFormExpr */,
-  8 /* Color of AReassignFormExpr */,
+  4571 /* Id of AAssignFormExpr */,
+  8 /* Color of AAssignFormExpr */,
   14 /* Group of ? */,
-  93 /* Group of ? */,
-  4135 /* Id of AOnceExpr */,
+  92 /* Group of ? */,
+  4331 /* Id of AReassignFormExpr */,
+  8 /* Color of AReassignFormExpr */,
+  15 /* Group of ? */,
+  94 /* Group of ? */,
+  4687 /* Id of AOnceExpr */,
   9 /* Color of AOnceExpr */,
-  12 /* Group of ? */,
-  93 /* Group of ? */,
-  4303 /* Id of ASendExpr */,
+  13 /* Group of ? */,
+  94 /* Group of ? */,
+  4859 /* Id of ASendExpr */,
   11 /* Color of ASendExpr */,
-  18 /* Group of ? */,
-  114 /* Group of ? */,
-  4331 /* Id of ABinopExpr */,
+  19 /* Group of ? */,
+  115 /* Group of ? */,
+  4887 /* Id of ABinopExpr */,
   12 /* Color of ABinopExpr */,
-  20 /* Group of ? */,
-  119 /* Group of ? */,
-  4003 /* Id of ABoolExpr */,
+  21 /* Group of ? */,
+  120 /* Group of ? */,
+  4547 /* Id of ABoolExpr */,
   8 /* Color of ABoolExpr */,
-  88 /* Group of ? */,
-  4127 /* Id of AOrExpr */,
+  89 /* Group of ? */,
+  4679 /* Id of AOrExpr */,
   9 /* Color of AOrExpr */,
-  11 /* Group of ? */,
-  91 /* Group of ? */,
-  4259 /* Id of AAndExpr */,
+  12 /* Group of ? */,
+  92 /* Group of ? */,
+  4815 /* Id of AAndExpr */,
   9 /* Color of AAndExpr */,
-  11 /* Group of ? */,
-  91 /* Group of ? */,
-  4131 /* Id of AOrElseExpr */,
+  12 /* Group of ? */,
+  92 /* Group of ? */,
+  4683 /* Id of AOrElseExpr */,
   9 /* Color of AOrElseExpr */,
-  11 /* Group of ? */,
-  91 /* Group of ? */,
-  4139 /* Id of ANotExpr */,
+  12 /* Group of ? */,
+  92 /* Group of ? */,
+  4691 /* Id of ANotExpr */,
   9 /* Color of ANotExpr */,
-  11 /* Group of ? */,
-  91 /* Group of ? */,
-  4387 /* Id of AEqExpr */,
+  12 /* Group of ? */,
+  92 /* Group of ? */,
+  4943 /* Id of AEqExpr */,
   13 /* Color of AEqExpr */,
-  125 /* Group of ? */,
-  4199 /* Id of AEeExpr */,
+  126 /* Group of ? */,
+  4755 /* Id of AEeExpr */,
   9 /* Color of AEeExpr */,
-  11 /* Group of ? */,
-  91 /* Group of ? */,
-  4355 /* Id of ANeExpr */,
+  12 /* Group of ? */,
+  92 /* Group of ? */,
+  4911 /* Id of ANeExpr */,
   13 /* Color of ANeExpr */,
-  125 /* Group of ? */,
-  4363 /* Id of ALtExpr */,
+  126 /* Group of ? */,
+  4919 /* Id of ALtExpr */,
   13 /* Color of ALtExpr */,
-  123 /* Group of ? */,
-  4371 /* Id of ALeExpr */,
+  124 /* Group of ? */,
+  4927 /* Id of ALeExpr */,
   13 /* Color of ALeExpr */,
-  123 /* Group of ? */,
-  4367 /* Id of ALlExpr */,
+  124 /* Group of ? */,
+  4923 /* Id of ALlExpr */,
   13 /* Color of ALlExpr */,
-  123 /* Group of ? */,
-  4375 /* Id of AGtExpr */,
+  124 /* Group of ? */,
+  4931 /* Id of AGtExpr */,
   13 /* Color of AGtExpr */,
-  123 /* Group of ? */,
-  4383 /* Id of AGeExpr */,
+  124 /* Group of ? */,
+  4939 /* Id of AGeExpr */,
   13 /* Color of AGeExpr */,
-  123 /* Group of ? */,
-  4379 /* Id of AGgExpr */,
+  124 /* Group of ? */,
+  4935 /* Id of AGgExpr */,
   13 /* Color of AGgExpr */,
-  123 /* Group of ? */,
-  4159 /* Id of AIsaExpr */,
+  124 /* Group of ? */,
+  4715 /* Id of AIsaExpr */,
   9 /* Color of AIsaExpr */,
-  11 /* Group of ? */,
-  91 /* Group of ? */,
-  4347 /* Id of APlusExpr */,
+  12 /* Group of ? */,
+  92 /* Group of ? */,
+  4903 /* Id of APlusExpr */,
   13 /* Color of APlusExpr */,
-  123 /* Group of ? */,
-  4359 /* Id of AMinusExpr */,
+  124 /* Group of ? */,
+  4915 /* Id of AMinusExpr */,
   13 /* Color of AMinusExpr */,
-  123 /* Group of ? */,
-  4335 /* Id of AStarshipExpr */,
+  124 /* Group of ? */,
+  4891 /* Id of AStarshipExpr */,
   13 /* Color of AStarshipExpr */,
-  123 /* Group of ? */,
-  4339 /* Id of AStarExpr */,
+  124 /* Group of ? */,
+  4895 /* Id of AStarExpr */,
   13 /* Color of AStarExpr */,
-  123 /* Group of ? */,
-  4343 /* Id of ASlashExpr */,
+  124 /* Group of ? */,
+  4899 /* Id of ASlashExpr */,
   13 /* Color of ASlashExpr */,
-  123 /* Group of ? */,
-  4351 /* Id of APercentExpr */,
+  124 /* Group of ? */,
+  4907 /* Id of APercentExpr */,
   13 /* Color of APercentExpr */,
-  123 /* Group of ? */,
-  4307 /* Id of AUminusExpr */,
+  124 /* Group of ? */,
+  4863 /* Id of AUminusExpr */,
   12 /* Color of AUminusExpr */,
-  20 /* Group of ? */,
-  119 /* Group of ? */,
-  4279 /* Id of ANewExpr */,
+  21 /* Group of ? */,
+  120 /* Group of ? */,
+  4835 /* Id of ANewExpr */,
   10 /* Color of ANewExpr */,
-  18 /* Group of ? */,
-  111 /* Group of ? */,
-  4015 /* Id of AAttrFormExpr */,
+  19 /* Group of ? */,
+  112 /* Group of ? */,
+  4559 /* Id of AAttrFormExpr */,
   6 /* Color of AAttrFormExpr */,
-  18 /* Group of ? */,
-  99 /* Group of ? */,
-  4239 /* Id of AAttrExpr */,
+  19 /* Group of ? */,
+  100 /* Group of ? */,
+  4795 /* Id of AAttrExpr */,
   8 /* Color of AAttrExpr */,
-  104 /* Group of ? */,
-  4243 /* Id of AAttrAssignExpr */,
+  105 /* Group of ? */,
+  4799 /* Id of AAttrAssignExpr */,
   9 /* Color of AAttrAssignExpr */,
-  90 /* Group of ? */,
-  4323 /* Id of ACallFormExpr */,
+  91 /* Group of ? */,
+  4879 /* Id of ACallFormExpr */,
   14 /* Color of ACallFormExpr */,
-  20 /* Group of ? */,
-  119 /* Group of ? */,
-  4311 /* Id of ASendReassignFormExpr */,
+  21 /* Group of ? */,
+  120 /* Group of ? */,
+  4867 /* Id of ASendReassignFormExpr */,
   12 /* Color of ASendReassignFormExpr */,
-  88 /* Group of ? */,
-  4235 /* Id of AAttrReassignExpr */,
+  89 /* Group of ? */,
+  4791 /* Id of AAttrReassignExpr */,
   9 /* Color of AAttrReassignExpr */,
-  90 /* Group of ? */,
-  4395 /* Id of ACallExpr */,
+  91 /* Group of ? */,
+  4951 /* Id of ACallExpr */,
   15 /* Color of ACallExpr */,
-  124 /* Group of ? */,
-  4399 /* Id of ACallAssignExpr */,
+  125 /* Group of ? */,
+  4955 /* Id of ACallAssignExpr */,
   12 /* Color of ACallAssignExpr */,
-  90 /* Group of ? */,
-  4391 /* Id of ACallReassignExpr */,
+  91 /* Group of ? */,
+  4947 /* Id of ACallReassignExpr */,
   15 /* Color of ACallReassignExpr */,
-  124 /* Group of ? */,
-  4299 /* Id of ASuperExpr */,
+  125 /* Group of ? */,
+  4855 /* Id of ASuperExpr */,
   11 /* Color of ASuperExpr */,
-  19 /* Group of ? */,
-  112 /* Group of ? */,
-  4319 /* Id of AInitExpr */,
-  12 /* Color of AInitExpr */,
   20 /* Group of ? */,
-  119 /* Group of ? */,
-  4327 /* Id of ABraFormExpr */,
+  113 /* Group of ? */,
+  4875 /* Id of AInitExpr */,
+  12 /* Color of AInitExpr */,
+  21 /* Group of ? */,
+  120 /* Group of ? */,
+  4883 /* Id of ABraFormExpr */,
   14 /* Color of ABraFormExpr */,
-  20 /* Group of ? */,
-  117 /* Group of ? */,
-  4407 /* Id of ABraExpr */,
+  21 /* Group of ? */,
+  118 /* Group of ? */,
+  4963 /* Id of ABraExpr */,
   15 /* Color of ABraExpr */,
-  121 /* Group of ? */,
-  4411 /* Id of ABraAssignExpr */,
+  122 /* Group of ? */,
+  4967 /* Id of ABraAssignExpr */,
   12 /* Color of ABraAssignExpr */,
-  90 /* Group of ? */,
-  3755 /* Id of AVarFormExpr */,
+  91 /* Group of ? */,
+  4267 /* Id of AVarFormExpr */,
   6 /* Color of AVarFormExpr */,
-  12 /* Group of ? */,
-  89 /* Group of ? */,
-  4403 /* Id of ABraReassignExpr */,
+  13 /* Group of ? */,
+  90 /* Group of ? */,
+  4959 /* Id of ABraReassignExpr */,
   15 /* Color of ABraReassignExpr */,
-  121 /* Group of ? */,
-  4223 /* Id of AClosureCallExpr */,
+  122 /* Group of ? */,
+  4779 /* Id of AClosureCallExpr */,
   8 /* Color of AClosureCallExpr */,
-  14 /* Group of ? */,
-  106 /* Group of ? */,
-  4099 /* Id of AVarExpr */,
+  15 /* Group of ? */,
+  107 /* Group of ? */,
+  4647 /* Id of AVarExpr */,
   8 /* Color of AVarExpr */,
-  93 /* Group of ? */,
-  4103 /* Id of AVarAssignExpr */,
+  94 /* Group of ? */,
+  4651 /* Id of AVarAssignExpr */,
   9 /* Color of AVarAssignExpr */,
-  96 /* Group of ? */,
-  4095 /* Id of AVarReassignExpr */,
+  97 /* Group of ? */,
+  4643 /* Id of AVarReassignExpr */,
   9 /* Color of AVarReassignExpr */,
-  98 /* Group of ? */,
-  3823 /* Id of ARangeExpr */,
+  99 /* Group of ? */,
+  4339 /* Id of ARangeExpr */,
   8 /* Color of ARangeExpr */,
-  11 /* Group of ? */,
-  90 /* Group of ? */,
-  4211 /* Id of ACrangeExpr */,
+  12 /* Group of ? */,
+  91 /* Group of ? */,
+  4767 /* Id of ACrangeExpr */,
   9 /* Color of ACrangeExpr */,
-  13 /* Group of ? */,
-  95 /* Group of ? */,
-  4123 /* Id of AOrangeExpr */,
+  14 /* Group of ? */,
+  96 /* Group of ? */,
+  4675 /* Id of AOrangeExpr */,
   9 /* Color of AOrangeExpr */,
-  13 /* Group of ? */,
-  95 /* Group of ? */,
-  4035 /* Id of AArrayExpr */,
+  14 /* Group of ? */,
+  96 /* Group of ? */,
+  4583 /* Id of AArrayExpr */,
   8 /* Color of AArrayExpr */,
-  11 /* Group of ? */,
-  91 /* Group of ? */,
-  3807 /* Id of ASelfExpr */,
-  8 /* Color of ASelfExpr */,
   12 /* Group of ? */,
-  91 /* Group of ? */,
-  4175 /* Id of AImplicitSelfExpr */,
+  92 /* Group of ? */,
+  4323 /* Id of ASelfExpr */,
+  8 /* Color of ASelfExpr */,
+  13 /* Group of ? */,
+  92 /* Group of ? */,
+  4731 /* Id of AImplicitSelfExpr */,
   9 /* Color of AImplicitSelfExpr */,
-  95 /* Group of ? */,
-  4107 /* Id of ATrueExpr */,
+  96 /* Group of ? */,
+  4655 /* Id of ATrueExpr */,
   9 /* Color of ATrueExpr */,
-  11 /* Group of ? */,
-  91 /* Group of ? */,
-  4187 /* Id of AFalseExpr */,
+  12 /* Group of ? */,
+  92 /* Group of ? */,
+  4743 /* Id of AFalseExpr */,
   9 /* Color of AFalseExpr */,
-  11 /* Group of ? */,
-  91 /* Group of ? */,
-  3863 /* Id of ANullExpr */,
+  12 /* Group of ? */,
+  92 /* Group of ? */,
+  4379 /* Id of ANullExpr */,
   8 /* Color of ANullExpr */,
-  11 /* Group of ? */,
-  90 /* Group of ? */,
-  3915 /* Id of AIntExpr */,
+  12 /* Group of ? */,
+  91 /* Group of ? */,
+  4451 /* Id of AIntExpr */,
   8 /* Color of AIntExpr */,
-  11 /* Group of ? */,
-  90 /* Group of ? */,
-  3943 /* Id of AFloatExpr */,
+  12 /* Group of ? */,
+  91 /* Group of ? */,
+  4483 /* Id of AFloatExpr */,
   8 /* Color of AFloatExpr */,
-  11 /* Group of ? */,
-  90 /* Group of ? */,
-  3979 /* Id of ACharExpr */,
+  12 /* Group of ? */,
+  91 /* Group of ? */,
+  4523 /* Id of ACharExpr */,
   8 /* Color of ACharExpr */,
-  11 /* Group of ? */,
-  90 /* Group of ? */,
-  3779 /* Id of AStringFormExpr */,
+  12 /* Group of ? */,
+  91 /* Group of ? */,
+  4295 /* Id of AStringFormExpr */,
   8 /* Color of AStringFormExpr */,
-  90 /* Group of ? */,
-  4111 /* Id of AStringExpr */,
+  14 /* Group of ? */,
+  91 /* Group of ? */,
+  4659 /* Id of AStringExpr */,
   9 /* Color of AStringExpr */,
-  13 /* Group of ? */,
-  93 /* Group of ? */,
-  4115 /* Id of AStartStringExpr */,
+  95 /* Group of ? */,
+  4663 /* Id of AStartStringExpr */,
   9 /* Color of AStartStringExpr */,
-  13 /* Group of ? */,
-  93 /* Group of ? */,
-  4143 /* Id of AMidStringExpr */,
+  95 /* Group of ? */,
+  4695 /* Id of AMidStringExpr */,
   9 /* Color of AMidStringExpr */,
-  13 /* Group of ? */,
-  93 /* Group of ? */,
-  4195 /* Id of AEndStringExpr */,
+  95 /* Group of ? */,
+  4751 /* Id of AEndStringExpr */,
   9 /* Color of AEndStringExpr */,
-  13 /* Group of ? */,
-  93 /* Group of ? */,
-  3771 /* Id of ASuperstringExpr */,
+  95 /* Group of ? */,
+  4287 /* Id of ASuperstringExpr */,
   8 /* Color of ASuperstringExpr */,
-  12 /* Group of ? */,
-  91 /* Group of ? */,
-  4119 /* Id of AParExpr */,
-  9 /* Color of AParExpr */,
-  12 /* Group of ? */,
+  13 /* Group of ? */,
   92 /* Group of ? */,
-  3831 /* Id of AProxyExpr */,
+  4671 /* Id of AParExpr */,
+  9 /* Color of AParExpr */,
+  13 /* Group of ? */,
+  93 /* Group of ? */,
+  4347 /* Id of AProxyExpr */,
   8 /* Color of AProxyExpr */,
-  11 /* Group of ? */,
-  88 /* Group of ? */,
-  4255 /* Id of AAsCastExpr */,
+  12 /* Group of ? */,
+  89 /* Group of ? */,
+  4811 /* Id of AAsCastExpr */,
   8 /* Color of AAsCastExpr */,
-  11 /* Group of ? */,
-  90 /* Group of ? */,
-  4031 /* Id of AAsNotnullExpr */,
+  12 /* Group of ? */,
+  91 /* Group of ? */,
+  4579 /* Id of AAsNotnullExpr */,
   8 /* Color of AAsNotnullExpr */,
-  11 /* Group of ? */,
-  90 /* Group of ? */,
-  4155 /* Id of AIssetAttrExpr */,
+  12 /* Group of ? */,
+  91 /* Group of ? */,
+  4711 /* Id of AIssetAttrExpr */,
   8 /* Color of AIssetAttrExpr */,
-  20 /* Group of ? */,
-  104 /* Group of ? */,
-  3307 /* Id of AExprs */,
+  21 /* Group of ? */,
+  105 /* Group of ? */,
+  3807 /* Id of AExprs */,
   6 /* Color of AExprs */,
-  6 /* Group of ? */,
-  75 /* Group of ? */,
-  3967 /* Id of ADebugTypeExpr */,
+  7 /* Group of ? */,
+  76 /* Group of ? */,
+  4511 /* Id of ADebugTypeExpr */,
   8 /* Color of ADebugTypeExpr */,
-  11 /* Group of ? */,
-  90 /* Group of ? */,
-  3899 /* Id of AListExprs */,
+  12 /* Group of ? */,
+  91 /* Group of ? */,
+  4415 /* Id of AListExprs */,
   7 /* Color of AListExprs */,
-  79 /* Group of ? */,
-  3859 /* Id of AParExprs */,
+  80 /* Group of ? */,
+  4375 /* Id of AParExprs */,
   7 /* Color of AParExprs */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3999 /* Id of ABraExprs */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  4543 /* Id of ABraExprs */,
   7 /* Color of ABraExprs */,
-  7 /* Group of ? */,
-  79 /* Group of ? */,
-  3335 /* Id of AAssignOp */,
+  8 /* Group of ? */,
+  80 /* Group of ? */,
+  3843 /* Id of AAssignOp */,
   6 /* Color of AAssignOp */,
-  75 /* Group of ? */,
-  3851 /* Id of APlusAssignOp */,
+  76 /* Group of ? */,
+  4367 /* Id of APlusAssignOp */,
   7 /* Color of APlusAssignOp */,
-  6 /* Group of ? */,
-  78 /* Group of ? */,
-  3879 /* Id of AMinusAssignOp */,
+  7 /* Group of ? */,
+  79 /* Group of ? */,
+  4395 /* Id of AMinusAssignOp */,
   7 /* Color of AMinusAssignOp */,
-  6 /* Group of ? */,
-  78 /* Group of ? */,
-  3975 /* Id of AClosureDef */,
+  7 /* Group of ? */,
+  79 /* Group of ? */,
+  4519 /* Id of AClosureDef */,
   7 /* Color of AClosureDef */,
-  12 /* Group of ? */,
-  85 /* Group of ? */,
-  3319 /* Id of AClosureId */,
+  13 /* Group of ? */,
+  86 /* Group of ? */,
+  3819 /* Id of AClosureId */,
   6 /* Color of AClosureId */,
-  75 /* Group of ? */,
-  3803 /* Id of ASimpleClosureId */,
+  76 /* Group of ? */,
+  4319 /* Id of ASimpleClosureId */,
   7 /* Color of ASimpleClosureId */,
-  6 /* Group of ? */,
-  78 /* Group of ? */,
-  3987 /* Id of ABreakClosureId */,
+  7 /* Group of ? */,
+  79 /* Group of ? */,
+  4531 /* Id of ABreakClosureId */,
   7 /* Color of ABreakClosureId */,
-  6 /* Group of ? */,
-  78 /* Group of ? */,
-  3263 /* Id of AModuleName */,
+  7 /* Group of ? */,
+  79 /* Group of ? */,
+  3763 /* Id of AModuleName */,
   6 /* Color of AModuleName */,
-  6 /* Group of ? */,
-  76 /* Group of ? */,
-  3283 /* Id of AInLanguage */,
+  7 /* Group of ? */,
+  77 /* Group of ? */,
+  3783 /* Id of AInLanguage */,
   6 /* Color of AInLanguage */,
-  6 /* Group of ? */,
-  76 /* Group of ? */,
-  3295 /* Id of AExternCodeBlock */,
-  6 /* Color of AExternCodeBlock */,
-  6 /* Group of ? */,
+  7 /* Group of ? */,
   77 /* Group of ? */,
-  3247 /* Id of AQualified */,
+  3795 /* Id of AExternCodeBlock */,
+  6 /* Color of AExternCodeBlock */,
+  7 /* Group of ? */,
+  78 /* Group of ? */,
+  3747 /* Id of AQualified */,
   6 /* Color of AQualified */,
-  6 /* Group of ? */,
-  76 /* Group of ? */,
-  3315 /* Id of ADoc */,
+  7 /* Group of ? */,
+  77 /* Group of ? */,
+  3815 /* Id of ADoc */,
   6 /* Color of ADoc */,
-  6 /* Group of ? */,
-  76 /* Group of ? */,
-  2955 /* Id of Start */,
+  7 /* Group of ? */,
+  77 /* Group of ? */,
+  3847 /* Id of AAnnotations */,
+  6 /* Color of AAnnotations */,
+  7 /* Group of ? */,
+  77 /* Group of ? */,
+  3851 /* Id of AAnnotation */,
+  6 /* Color of AAnnotation */,
+  7 /* Group of ? */,
+  77 /* Group of ? */,
+  3839 /* Id of AAtArg */,
+  6 /* Color of AAtArg */,
+  75 /* Group of ? */,
+  4279 /* Id of ATypeAtArg */,
+  7 /* Color of ATypeAtArg */,
+  7 /* Group of ? */,
+  78 /* Group of ? */,
+  4491 /* Id of AExprAtArg */,
+  7 /* Color of AExprAtArg */,
+  7 /* Group of ? */,
+  78 /* Group of ? */,
+  4563 /* Id of AAtAtArg */,
+  7 /* Color of AAtAtArg */,
+  78 /* Group of ? */,
+  3835 /* Id of AAtid */,
+  6 /* Color of AAtid */,
+  7 /* Group of ? */,
+  75 /* Group of ? */,
+  4467 /* Id of AIdAtid */,
+  7 /* Color of AIdAtid */,
+  79 /* Group of ? */,
+  4439 /* Id of AKwexternAtid */,
+  7 /* Color of AKwexternAtid */,
+  79 /* Group of ? */,
+  4431 /* Id of AKwinternAtid */,
+  7 /* Color of AKwinternAtid */,
+  79 /* Group of ? */,
+  4427 /* Id of AKwreadableAtid */,
+  7 /* Color of AKwreadableAtid */,
+  79 /* Group of ? */,
+  4423 /* Id of AKwwritableAtid */,
+  7 /* Color of AKwwritableAtid */,
+  79 /* Group of ? */,
+  4435 /* Id of AKwimportAtid */,
+  7 /* Color of AKwimportAtid */,
+  79 /* Group of ? */,
+  3455 /* Id of Start */,
   6 /* Color of Start */,
-  6 /* Group of ? */,
-  74 /* Group of ? */,
+  7 /* Group of ? */,
+  75 /* Group of ? */,
 };
 const char LOCATE_parser___tables[] = "parser/tables.nit";
 const int SFT_parser___tables[3] = {
@@ -11855,10 +13322,10 @@ const int SFT_mmloader[5] = {
 };
 const char LOCATE_toolcontext[] = "toolcontext.nit";
 const int SFT_toolcontext[8] = {
-  2571 /* Id of Message */,
-  6 /* Color of Message */,
+  3067 /* Id of Message */,
+  7 /* Color of Message */,
   2 /* Group of ? */,
-  66 /* Group of ? */,
+  68 /* Group of ? */,
   331 /* Id of ToolContext */,
   5 /* Color of ToolContext */,
   22 /* Group of ? */,
@@ -11870,30 +13337,30 @@ const int SFT_opts[35] = {
   4 /* Color of Option */,
   2 /* Group of ? */,
   50 /* Group of ? */,
-  2539 /* Id of OptionText */,
+  3035 /* Id of OptionText */,
   5 /* Color of OptionText */,
   68 /* Group of ? */,
-  2551 /* Id of OptionBool */,
+  3047 /* Id of OptionBool */,
   5 /* Color of OptionBool */,
   68 /* Group of ? */,
-  2547 /* Id of OptionCount */,
+  3043 /* Id of OptionCount */,
   5 /* Color of OptionCount */,
   68 /* Group of ? */,
-  2543 /* Id of OptionParameter */,
+  3039 /* Id of OptionParameter */,
   5 /* Color of OptionParameter */,
   9 /* Group of ? */,
   68 /* Group of ? */,
-  2971 /* Id of OptionString */,
+  3471 /* Id of OptionString */,
   6 /* Color of OptionString */,
   74 /* Group of ? */,
-  2979 /* Id of OptionEnum */,
+  3479 /* Id of OptionEnum */,
   6 /* Color of OptionEnum */,
   10 /* Group of ? */,
   74 /* Group of ? */,
-  2975 /* Id of OptionInt */,
+  3475 /* Id of OptionInt */,
   6 /* Color of OptionInt */,
   74 /* Group of ? */,
-  2983 /* Id of OptionArray */,
+  3483 /* Id of OptionArray */,
   6 /* Color of OptionArray */,
   10 /* Group of ? */,
   74 /* Group of ? */,
@@ -11920,7 +13387,7 @@ const int SFT_syntax___extern_type_inheritance[2] = {
 };
 const char LOCATE_syntax___extern_inline[] = "syntax/extern_inline.nit";
 const int SFT_syntax___extern_inline[15] = {
-  2739 /* Id of ExternCode */,
+  3235 /* Id of ExternCode */,
   6 /* Color of ExternCode */,
   3 /* Group of ? */,
   80 /* Group of ? */,
@@ -11930,15 +13397,15 @@ const int SFT_syntax___extern_inline[15] = {
   80 /* Group of ? */,
   10 /* Group of ? */,
   75 /* Group of ? */,
+  76 /* Group of ? */,
   75 /* Group of ? */,
-  74 /* Group of ? */,
-  101 /* Group of ? */,
-  88 /* Group of ? */,
+  102 /* Group of ? */,
+  89 /* Group of ? */,
   129 /* Group of ? */,
 };
 const char LOCATE_syntax___mmbuilder[] = "syntax/mmbuilder.nit";
 const int SFT_syntax___mmbuilder[69] = {
-  2803 /* Id of CSHSorter */,
+  3299 /* Id of CSHSorter */,
   5 /* Color of CSHSorter */,
   56 /* Group of ? */,
   130 /* Group of ? */,
@@ -11946,27 +13413,27 @@ const int SFT_syntax___mmbuilder[69] = {
   157 /* Group of ? */,
   50 /* Group of ? */,
   19 /* Group of ? */,
-  2607 /* Id of MMSrcAncestor */,
+  3103 /* Id of MMSrcAncestor */,
   5 /* Color of MMSrcAncestor */,
   4 /* Group of ? */,
   60 /* Group of ? */,
-  3191 /* Id of ClassBuilderVisitor */,
+  3691 /* Id of ClassBuilderVisitor */,
   6 /* Color of ClassBuilderVisitor */,
   7 /* Group of ? */,
   84 /* Group of ? */,
-  3187 /* Id of ClassSpecializationBuilderVisitor */,
+  3687 /* Id of ClassSpecializationBuilderVisitor */,
   6 /* Color of ClassSpecializationBuilderVisitor */,
   84 /* Group of ? */,
-  3195 /* Id of ClassAncestorBuilder */,
+  3695 /* Id of ClassAncestorBuilder */,
   6 /* Color of ClassAncestorBuilder */,
   84 /* Group of ? */,
-  3183 /* Id of ClassVerifierVisitor */,
+  3683 /* Id of ClassVerifierVisitor */,
   6 /* Color of ClassVerifierVisitor */,
   84 /* Group of ? */,
-  2967 /* Id of PropertyBuilderVisitor */,
+  3467 /* Id of PropertyBuilderVisitor */,
   6 /* Color of PropertyBuilderVisitor */,
   84 /* Group of ? */,
-  2963 /* Id of PropertyVerifierVisitor */,
+  3463 /* Id of PropertyVerifierVisitor */,
   6 /* Color of PropertyVerifierVisitor */,
   7 /* Group of ? */,
   84 /* Group of ? */,
@@ -11975,38 +13442,38 @@ const int SFT_syntax___mmbuilder[69] = {
   2 /* Group of ? */,
   50 /* Group of ? */,
   50 /* Group of ? */,
-  74 /* Group of ? */,
-  74 /* Group of ? */,
-  74 /* Group of ? */,
-  6 /* Group of ? */,
-  74 /* Group of ? */,
-  74 /* Group of ? */,
-  89 /* Group of ? */,
-  6 /* Group of ? */,
-  74 /* Group of ? */,
-  6 /* Group of ? */,
-  74 /* Group of ? */,
-  74 /* Group of ? */,
-  8 /* Group of ? */,
-  81 /* Group of ? */,
-  8 /* Group of ? */,
-  81 /* Group of ? */,
-  102 /* Group of ? */,
-  8 /* Group of ? */,
-  81 /* Group of ? */,
-  2567 /* Id of MethidAccumulator */,
+  75 /* Group of ? */,
+  75 /* Group of ? */,
+  75 /* Group of ? */,
+  7 /* Group of ? */,
+  75 /* Group of ? */,
+  75 /* Group of ? */,
+  90 /* Group of ? */,
+  7 /* Group of ? */,
+  75 /* Group of ? */,
+  7 /* Group of ? */,
+  75 /* Group of ? */,
+  75 /* Group of ? */,
+  9 /* Group of ? */,
+  82 /* Group of ? */,
+  9 /* Group of ? */,
+  82 /* Group of ? */,
+  103 /* Group of ? */,
+  9 /* Group of ? */,
+  82 /* Group of ? */,
+  3063 /* Id of MethidAccumulator */,
   5 /* Color of MethidAccumulator */,
   3 /* Group of ? */,
   55 /* Group of ? */,
-  6 /* Group of ? */,
-  74 /* Group of ? */,
-  74 /* Group of ? */,
-  6 /* Group of ? */,
-  74 /* Group of ? */,
-  6 /* Group of ? */,
-  74 /* Group of ? */,
-  74 /* Group of ? */,
-  76 /* Group of ? */,
+  7 /* Group of ? */,
+  75 /* Group of ? */,
+  75 /* Group of ? */,
+  7 /* Group of ? */,
+  75 /* Group of ? */,
+  7 /* Group of ? */,
+  75 /* Group of ? */,
+  75 /* Group of ? */,
+  77 /* Group of ? */,
 };
 const char LOCATE_nit_version[] = "nit_version.nit";
 const int SFT_nit_version[1] = {
@@ -12014,7 +13481,7 @@ const int SFT_nit_version[1] = {
 };
 const char LOCATE_global___cha_analysis[] = "global/cha_analysis.nit";
 const int SFT_global___cha_analysis[12] = {
-  2799 /* Id of ChaContext */,
+  3295 /* Id of ChaContext */,
   5 /* Color of ChaContext */,
   2 /* Group of ? */,
   53 /* Group of ? */,
@@ -12022,7 +13489,7 @@ const int SFT_global___cha_analysis[12] = {
   4 /* Color of ChaBuilder */,
   2 /* Group of ? */,
   50 /* Group of ? */,
-  2795 /* Id of ChaVisitor */,
+  3291 /* Id of ChaVisitor */,
   5 /* Color of ChaVisitor */,
   3 /* Group of ? */,
   58 /* Group of ? */,
@@ -12034,7 +13501,7 @@ const int SFT_global___reachable_method_analysis[8] = {
   71 /* Id of ReachableMethodAnalysis */,
   4 /* Color of ReachableMethodAnalysis */,
   50 /* Group of ? */,
-  2751 /* Id of DefaultReachableMethodAnalysis */,
+  3247 /* Id of DefaultReachableMethodAnalysis */,
   5 /* Color of DefaultReachableMethodAnalysis */,
   53 /* Group of ? */,
 };
@@ -12071,7 +13538,7 @@ const int SFT_global___instantiated_type_analysis[8] = {
   191 /* Id of InstantiatedTypeAnalysis */,
   5 /* Color of InstantiatedTypeAnalysis */,
   53 /* Group of ? */,
-  2763 /* Id of DefaultInstantiatedTypeAnalysis */,
+  3259 /* Id of DefaultInstantiatedTypeAnalysis */,
   6 /* Color of DefaultInstantiatedTypeAnalysis */,
   55 /* Group of ? */,
 };
@@ -12081,11 +13548,11 @@ const int SFT_global___reachable_as_init_impl[12] = {
   4 /* Color of ReachableAsInitBuilder */,
   2 /* Group of ? */,
   50 /* Group of ? */,
-  2503 /* Id of ReachableAsInitAnalysisImpl */,
+  2999 /* Id of ReachableAsInitAnalysisImpl */,
   5 /* Color of ReachableAsInitAnalysisImpl */,
   2 /* Group of ? */,
   52 /* Group of ? */,
-  2519 /* Id of RAIVisitor */,
+  3015 /* Id of RAIVisitor */,
   5 /* Color of RAIVisitor */,
   3 /* Group of ? */,
   58 /* Group of ? */,
@@ -12097,7 +13564,7 @@ const int SFT_global___reachable_as_init[8] = {
   83 /* Id of ReachableAsInitAnalysis */,
   4 /* Color of ReachableAsInitAnalysis */,
   50 /* Group of ? */,
-  2759 /* Id of DefaultReachableAsInitAnalysis */,
+  3255 /* Id of DefaultReachableAsInitAnalysis */,
   5 /* Color of DefaultReachableAsInitAnalysis */,
   52 /* Group of ? */,
 };
@@ -12107,11 +13574,11 @@ const int SFT_global___reachable_from_init_method_analysis_impl[12] = {
   4 /* Color of RFIMABuilder */,
   2 /* Group of ? */,
   50 /* Group of ? */,
-  2515 /* Id of RFIMAContext */,
+  3011 /* Id of RFIMAContext */,
   5 /* Color of RFIMAContext */,
   2 /* Group of ? */,
   53 /* Group of ? */,
-  2511 /* Id of RFIMAVisitor */,
+  3007 /* Id of RFIMAVisitor */,
   5 /* Color of RFIMAVisitor */,
   3 /* Group of ? */,
   58 /* Group of ? */,
@@ -12123,7 +13590,7 @@ const int SFT_global___reachable_from_init_method_analysis[8] = {
   75 /* Id of ReachableFromInitMethodAnalysis */,
   4 /* Color of ReachableFromInitMethodAnalysis */,
   50 /* Group of ? */,
-  2755 /* Id of DefaultReachableFromInitMethodAnalysis */,
+  3251 /* Id of DefaultReachableFromInitMethodAnalysis */,
   5 /* Color of DefaultReachableFromInitMethodAnalysis */,
   53 /* Group of ? */,
 };
@@ -12137,7 +13604,7 @@ const char LOCATE_global___inline_get_and_set[] = "global/inline_get_and_set.nit
 const int SFT_global___inline_get_and_set[6] = {
   11 /* Group of ? */,
   80 /* Group of ? */,
-  2667 /* Id of InlineGetSetVisitor */,
+  3163 /* Id of InlineGetSetVisitor */,
   5 /* Color of InlineGetSetVisitor */,
   3 /* Group of ? */,
   58 /* Group of ? */,
@@ -12146,11 +13613,11 @@ const char LOCATE_global___remove_out_of_init_get_test[] = "global/remove_out_of
 const int SFT_global___remove_out_of_init_get_test[10] = {
   12 /* Group of ? */,
   82 /* Group of ? */,
-  2659 /* Id of IssetCounter */,
+  3155 /* Id of IssetCounter */,
   5 /* Color of IssetCounter */,
   3 /* Group of ? */,
   58 /* Group of ? */,
-  2723 /* Id of GetterTestRemover */,
+  3219 /* Id of GetterTestRemover */,
   5 /* Color of GetterTestRemover */,
   3 /* Group of ? */,
   58 /* Group of ? */,
@@ -12170,7 +13637,7 @@ const char LOCATE_ffi___c[] = "ffi/c.nit";
 const int SFT_ffi___c[3] = {
   74 /* Group of ? */,
   74 /* Group of ? */,
-  66 /* Group of ? */,
+  68 /* Group of ? */,
 };
 const char LOCATE_ffi___ffi_base[] = "ffi/ffi_base.nit";
 const int SFT_ffi___ffi_base[14] = {
@@ -12198,7 +13665,7 @@ const int SFT_native_interface___frontier[22] = {
   119 /* Id of NiVariable */,
   4 /* Color of NiVariable */,
   50 /* Group of ? */,
-  2499 /* Id of ReceiverVariable */,
+  2995 /* Id of ReceiverVariable */,
   5 /* Color of ReceiverVariable */,
   2 /* Group of ? */,
   60 /* Group of ? */,
@@ -12234,7 +13701,7 @@ const int SFT_compiling[3] = {
 const char LOCATE_compiling___icode_generator[] = "compiling/icode_generator.nit";
 const int SFT_compiling___icode_generator[7] = {
   94 /* Group of ? */,
-  2727 /* Id of FileICodeDumper */,
+  3223 /* Id of FileICodeDumper */,
   5 /* Color of FileICodeDumper */,
   10 /* Group of ? */,
   64 /* Group of ? */,
@@ -12302,7 +13769,7 @@ const int SFT_analysis___icode_dump[8] = {
 };
 const char LOCATE_analysis___allocate_iregister_slots[] = "analysis/allocate_iregister_slots.nit";
 const int SFT_analysis___allocate_iregister_slots[12] = {
-  2679 /* Id of IRegisterSlotAllocationVisitor */,
+  3175 /* Id of IRegisterSlotAllocationVisitor */,
   5 /* Color of IRegisterSlotAllocationVisitor */,
   3 /* Group of ? */,
   58 /* Group of ? */,
@@ -12317,7 +13784,7 @@ const int SFT_analysis___allocate_iregister_slots[12] = {
 };
 const char LOCATE_analysis___inline_methods[] = "analysis/inline_methods.nit";
 const int SFT_analysis___inline_methods[6] = {
-  2663 /* Id of InlineMethodVisitor */,
+  3159 /* Id of InlineMethodVisitor */,
   5 /* Color of InlineMethodVisitor */,
   3 /* Group of ? */,
   58 /* Group of ? */,
@@ -12345,7 +13812,7 @@ const int SFT_compiling___table_computation[85] = {
   5 /* Color of TableInformation */,
   3 /* Group of ? */,
   55 /* Group of ? */,
-  2783 /* Id of CompiledClass */,
+  3279 /* Id of CompiledClass */,
   5 /* Color of CompiledClass */,
   3 /* Group of ? */,
   55 /* Group of ? */,
@@ -12361,65 +13828,65 @@ const int SFT_compiling___table_computation[85] = {
   343 /* Id of TableElt */,
   5 /* Color of TableElt */,
   53 /* Group of ? */,
-  2563 /* Id of ModuleTableElt */,
+  3059 /* Id of ModuleTableElt */,
   6 /* Color of ModuleTableElt */,
   58 /* Group of ? */,
-  2995 /* Id of ModuleTableEltGroup */,
+  3495 /* Id of ModuleTableEltGroup */,
   7 /* Color of ModuleTableEltGroup */,
   2 /* Group of ? */,
   59 /* Group of ? */,
-  2851 /* Id of TableEltProp */,
+  3347 /* Id of TableEltProp */,
   6 /* Color of TableEltProp */,
   2 /* Group of ? */,
   57 /* Group of ? */,
-  3359 /* Id of TableEltMeth */,
+  3875 /* Id of TableEltMeth */,
   7 /* Color of TableEltMeth */,
   60 /* Group of ? */,
-  3351 /* Id of TableEltVTClassColor */,
+  3867 /* Id of TableEltVTClassColor */,
   7 /* Color of TableEltVTClassColor */,
   60 /* Group of ? */,
-  3347 /* Id of TableEltVTClassId */,
+  3863 /* Id of TableEltVTClassId */,
   7 /* Color of TableEltVTClassId */,
   60 /* Group of ? */,
-  3355 /* Id of TableEltSuper */,
+  3871 /* Id of TableEltSuper */,
   7 /* Color of TableEltSuper */,
   60 /* Group of ? */,
-  3371 /* Id of TableEltAttr */,
+  3887 /* Id of TableEltAttr */,
   7 /* Color of TableEltAttr */,
   60 /* Group of ? */,
-  2819 /* Id of AbsTableEltClass */,
+  3315 /* Id of AbsTableEltClass */,
   7 /* Color of AbsTableEltClass */,
   2 /* Group of ? */,
   60 /* Group of ? */,
-  2879 /* Id of TableEltClass */,
+  3375 /* Id of TableEltClass */,
   8 /* Color of TableEltClass */,
   63 /* Group of ? */,
-  2875 /* Id of TableEltClassId */,
+  3371 /* Id of TableEltClassId */,
   5 /* Color of TableEltClassId */,
   52 /* Group of ? */,
-  3363 /* Id of TableEltClassInitTable */,
+  3879 /* Id of TableEltClassInitTable */,
   9 /* Color of TableEltClassInitTable */,
   64 /* Group of ? */,
-  3367 /* Id of TableEltClassColor */,
+  3883 /* Id of TableEltClassColor */,
   9 /* Color of TableEltClassColor */,
   64 /* Group of ? */,
-  2859 /* Id of TableEltComposite */,
+  3355 /* Id of TableEltComposite */,
   6 /* Color of TableEltComposite */,
   2 /* Group of ? */,
   57 /* Group of ? */,
-  2867 /* Id of TableEltClassSelfId */,
+  3363 /* Id of TableEltClassSelfId */,
   6 /* Color of TableEltClassSelfId */,
   57 /* Group of ? */,
-  2863 /* Id of TableEltClassSelfName */,
+  3359 /* Id of TableEltClassSelfName */,
   6 /* Color of TableEltClassSelfName */,
   57 /* Group of ? */,
-  2871 /* Id of TableEltClassObjectSize */,
+  3367 /* Id of TableEltClassObjectSize */,
   6 /* Color of TableEltClassObjectSize */,
   57 /* Group of ? */,
-  2855 /* Id of TableEltObjectId */,
+  3351 /* Id of TableEltObjectId */,
   6 /* Color of TableEltObjectId */,
   57 /* Group of ? */,
-  2847 /* Id of TableEltVftPointer */,
+  3343 /* Id of TableEltVftPointer */,
   6 /* Color of TableEltVftPointer */,
   57 /* Group of ? */,
 };
@@ -12455,21 +13922,21 @@ const int SFT_c_tools[8] = {
 };
 const char LOCATE_nitc[] = "nitc.nit";
 const int SFT_nitc[5] = {
-  3691 /* Id of NitCompiler */,
+  4203 /* Id of NitCompiler */,
   7 /* Color of NitCompiler */,
   56 /* Group of ? */,
   148 /* Group of ? */,
   140 /* Group of ? */,
 };
 const classtable_elt_t VFT_nitc___NitCompiler[160] = {
-  {(bigint) 3691 /* 0: Identity */},
+  {(bigint) 4203 /* 0: Identity */},
   {(bigint) 65 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "NitCompiler" /* 2: Class Name */},
   {(bigint) 3 /* 3: NitCompiler < Object: superclass typecheck marker */},
   {(bigint) 175 /* 4: NitCompiler < MMContext: superclass typecheck marker */},
   {(bigint) 331 /* 5: NitCompiler < ToolContext: superclass typecheck marker */},
-  {(bigint) 3223 /* 6: NitCompiler < AbstractCompiler: superclass typecheck marker */},
-  {(bigint) 3691 /* 7: NitCompiler < NitCompiler: superclass typecheck marker */},
+  {(bigint) 3723 /* 6: NitCompiler < AbstractCompiler: superclass typecheck marker */},
+  {(bigint) 4203 /* 7: NitCompiler < NitCompiler: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -12787,943 +14254,943 @@ void INIT_ATTRIBUTES__nitc___NitCompiler(val_t p0){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* nitc.nit:33 */
+  /* metamodel/abstractmetamodel.nit:31 */
+  fra.me.REG[1] = NEW_PartialOrder_metamodel___partial_order___PartialOrder___init();
+  ATTR_metamodel___abstractmetamodel___MMContext____module_hierarchy(fra.me.REG[0]) = fra.me.REG[1];
+  /* metamodel/abstractmetamodel.nit:35 */
+  fra.me.REG[1] = NEW_PartialOrder_metamodel___partial_order___PartialOrder___init();
+  ATTR_metamodel___abstractmetamodel___MMContext____class_hierarchy(fra.me.REG[0]) = fra.me.REG[1];
+  /* metamodel/abstractmetamodel.nit:38 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_metamodel___abstractmetamodel___MMContext____global_classes(fra.me.REG[0]) = fra.me.REG[1];
+  /* metamodel/abstractmetamodel.nit:41 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_metamodel___abstractmetamodel___MMContext____modules(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:73 */
+  REGB0 = TAG_Int(0);
+  ATTR_toolcontext___ToolContext____error_count(fra.me.REG[0]) = REGB0;
+  /* toolcontext.nit:76 */
+  REGB0 = TAG_Int(0);
+  ATTR_toolcontext___ToolContext____warning_count(fra.me.REG[0]) = REGB0;
+  /* toolcontext.nit:79 */
   if (!once_value_1) {
-    fra.me.REG[1] = BOX_NativeString("Output file");
-    REGB0 = TAG_Int(11);
+    fra.me.REG[1] = BOX_NativeString("logs");
+    REGB0 = TAG_Int(4);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_1 = fra.me.REG[1];
     register_static_object(&once_value_1);
   } else fra.me.REG[1] = once_value_1;
   fra.me.REG[1] = fra.me.REG[1];
-  REGB0 = TAG_Int(1);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  ATTR_toolcontext___ToolContext____log_directory(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:82 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_toolcontext___ToolContext____messages(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:83 */
+  fra.me.REG[1] = NEW_ComparableSorter_standard___collection___sorter___ComparableSorter___init();
+  ATTR_toolcontext___ToolContext____message_sorter(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:137 */
+  fra.me.REG[1] = NEW_OptionContext_opts___OptionContext___init();
+  ATTR_toolcontext___ToolContext____option_context(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:140 */
   if (!once_value_2) {
-    fra.me.REG[3] = BOX_NativeString("-o");
-    REGB0 = TAG_Int(2);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_2 = fra.me.REG[3];
+    fra.me.REG[1] = BOX_NativeString("Show warnings");
+    REGB0 = TAG_Int(13);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_2 = fra.me.REG[1];
     register_static_object(&once_value_2);
-  } else fra.me.REG[3] = once_value_2;
-  fra.me.REG[3] = fra.me.REG[3];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  } else fra.me.REG[1] = once_value_2;
+  fra.me.REG[1] = fra.me.REG[1];
+  REGB0 = TAG_Int(1);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_3) {
-    fra.me.REG[3] = BOX_NativeString("--output");
-    REGB0 = TAG_Int(8);
+    fra.me.REG[3] = BOX_NativeString("-W");
+    REGB0 = TAG_Int(2);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_3 = fra.me.REG[3];
     register_static_object(&once_value_3);
   } else fra.me.REG[3] = once_value_3;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  fra.me.REG[2] = NEW_OptionString_opts___OptionString___init(fra.me.REG[1], fra.me.REG[2]);
-  ATTR_nitc___NitCompiler____opt_output(fra.me.REG[0]) = fra.me.REG[2];
-  /* nitc.nit:34 */
   if (!once_value_4) {
-    fra.me.REG[2] = BOX_NativeString("Optimize compilation");
+    fra.me.REG[3] = BOX_NativeString("--warn");
+    REGB0 = TAG_Int(6);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_4 = fra.me.REG[3];
+    register_static_object(&once_value_4);
+  } else fra.me.REG[3] = once_value_4;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionCount_opts___OptionCount___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_toolcontext___ToolContext____opt_warn(fra.me.REG[0]) = fra.me.REG[2];
+  /* toolcontext.nit:143 */
+  if (!once_value_5) {
+    fra.me.REG[2] = BOX_NativeString("Do not show warnings");
     REGB0 = TAG_Int(20);
     fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_4 = fra.me.REG[2];
-    register_static_object(&once_value_4);
-  } else fra.me.REG[2] = once_value_4;
+    once_value_5 = fra.me.REG[2];
+    register_static_object(&once_value_5);
+  } else fra.me.REG[2] = once_value_5;
   fra.me.REG[2] = fra.me.REG[2];
   REGB0 = TAG_Int(1);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
-  if (!once_value_5) {
-    fra.me.REG[3] = BOX_NativeString("-O");
+  if (!once_value_6) {
+    fra.me.REG[3] = BOX_NativeString("-q");
     REGB0 = TAG_Int(2);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_5 = fra.me.REG[3];
-    register_static_object(&once_value_5);
-  } else fra.me.REG[3] = once_value_5;
+    once_value_6 = fra.me.REG[3];
+    register_static_object(&once_value_6);
+  } else fra.me.REG[3] = once_value_6;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  if (!once_value_6) {
-    fra.me.REG[3] = BOX_NativeString("--boost");
+  if (!once_value_7) {
+    fra.me.REG[3] = BOX_NativeString("--quiet");
     REGB0 = TAG_Int(7);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_6 = fra.me.REG[3];
-    register_static_object(&once_value_6);
-  } else fra.me.REG[3] = once_value_6;
+    once_value_7 = fra.me.REG[3];
+    register_static_object(&once_value_7);
+  } else fra.me.REG[3] = once_value_7;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
-  ATTR_nitc___NitCompiler____opt_boost(fra.me.REG[0]) = fra.me.REG[1];
-  /* nitc.nit:35 */
-  if (!once_value_7) {
-    fra.me.REG[1] = BOX_NativeString("Do not invoke C compiler");
-    REGB0 = TAG_Int(24);
+  ATTR_toolcontext___ToolContext____opt_quiet(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:146 */
+  if (!once_value_8) {
+    fra.me.REG[1] = BOX_NativeString("Generate various log files");
+    REGB0 = TAG_Int(26);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_7 = fra.me.REG[1];
-    register_static_object(&once_value_7);
-  } else fra.me.REG[1] = once_value_7;
+    once_value_8 = fra.me.REG[1];
+    register_static_object(&once_value_8);
+  } else fra.me.REG[1] = once_value_8;
   fra.me.REG[1] = fra.me.REG[1];
   REGB0 = TAG_Int(0);
   fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
-  if (!once_value_8) {
-    fra.me.REG[3] = BOX_NativeString("--no-cc");
-    REGB0 = TAG_Int(7);
+  if (!once_value_9) {
+    fra.me.REG[3] = BOX_NativeString("--log");
+    REGB0 = TAG_Int(5);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_8 = fra.me.REG[3];
-    register_static_object(&once_value_8);
-  } else fra.me.REG[3] = once_value_8;
+    once_value_9 = fra.me.REG[3];
+    register_static_object(&once_value_9);
+  } else fra.me.REG[3] = once_value_9;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
-  ATTR_nitc___NitCompiler____opt_no_cc(fra.me.REG[0]) = fra.me.REG[2];
-  /* nitc.nit:36 */
-  if (!once_value_9) {
-    fra.me.REG[2] = BOX_NativeString("Do not invoke C linker");
-    REGB0 = TAG_Int(22);
+  ATTR_toolcontext___ToolContext____opt_log(fra.me.REG[0]) = fra.me.REG[2];
+  /* toolcontext.nit:149 */
+  if (!once_value_10) {
+    fra.me.REG[2] = BOX_NativeString("Directory where to generate log files");
+    REGB0 = TAG_Int(37);
     fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_9 = fra.me.REG[2];
-    register_static_object(&once_value_9);
-  } else fra.me.REG[2] = once_value_9;
+    once_value_10 = fra.me.REG[2];
+    register_static_object(&once_value_10);
+  } else fra.me.REG[2] = once_value_10;
   fra.me.REG[2] = fra.me.REG[2];
   REGB0 = TAG_Int(0);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
-  if (!once_value_10) {
-    fra.me.REG[3] = BOX_NativeString("--cc-no-link");
-    REGB0 = TAG_Int(12);
+  if (!once_value_11) {
+    fra.me.REG[3] = BOX_NativeString("--log-dir");
+    REGB0 = TAG_Int(9);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_10 = fra.me.REG[3];
-    register_static_object(&once_value_10);
-  } else fra.me.REG[3] = once_value_10;
+    once_value_11 = fra.me.REG[3];
+    register_static_object(&once_value_11);
+  } else fra.me.REG[3] = once_value_11;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
-  ATTR_nitc___NitCompiler____opt_cc_no_link(fra.me.REG[0]) = fra.me.REG[1];
-  /* nitc.nit:37 */
-  if (!once_value_11) {
-    fra.me.REG[1] = BOX_NativeString("NIT C library directory");
+  fra.me.REG[1] = NEW_OptionString_opts___OptionString___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_toolcontext___ToolContext____opt_log_dir(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:152 */
+  if (!once_value_12) {
+    fra.me.REG[1] = BOX_NativeString("Show Help (This screen)");
     REGB0 = TAG_Int(23);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_11 = fra.me.REG[1];
-    register_static_object(&once_value_11);
-  } else fra.me.REG[1] = once_value_11;
+    once_value_12 = fra.me.REG[1];
+    register_static_object(&once_value_12);
+  } else fra.me.REG[1] = once_value_12;
   fra.me.REG[1] = fra.me.REG[1];
-  REGB0 = TAG_Int(0);
+  REGB0 = TAG_Int(2);
   fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
-  if (!once_value_12) {
-    fra.me.REG[3] = BOX_NativeString("--clibdir");
-    REGB0 = TAG_Int(9);
+  if (!once_value_13) {
+    fra.me.REG[3] = BOX_NativeString("-h");
+    REGB0 = TAG_Int(2);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_12 = fra.me.REG[3];
-    register_static_object(&once_value_12);
-  } else fra.me.REG[3] = once_value_12;
+    once_value_13 = fra.me.REG[3];
+    register_static_object(&once_value_13);
+  } else fra.me.REG[3] = once_value_13;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  fra.me.REG[2] = NEW_OptionString_opts___OptionString___init(fra.me.REG[1], fra.me.REG[2]);
-  ATTR_nitc___NitCompiler____opt_clibdir(fra.me.REG[0]) = fra.me.REG[2];
-  /* nitc.nit:38 */
-  if (!once_value_13) {
-    fra.me.REG[2] = BOX_NativeString("NIT tools directory");
-    REGB0 = TAG_Int(19);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_13 = fra.me.REG[2];
-    register_static_object(&once_value_13);
-  } else fra.me.REG[2] = once_value_13;
-  fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_14) {
-    fra.me.REG[3] = BOX_NativeString("--bindir");
-    REGB0 = TAG_Int(8);
+    fra.me.REG[3] = BOX_NativeString("-?");
+    REGB0 = TAG_Int(2);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_14 = fra.me.REG[3];
     register_static_object(&once_value_14);
   } else fra.me.REG[3] = once_value_14;
   fra.me.REG[3] = fra.me.REG[3];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  fra.me.REG[1] = NEW_OptionString_opts___OptionString___init(fra.me.REG[2], fra.me.REG[1]);
-  ATTR_nitc___NitCompiler____opt_bindir(fra.me.REG[0]) = fra.me.REG[1];
-  /* nitc.nit:39 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   if (!once_value_15) {
-    fra.me.REG[1] = BOX_NativeString("Intermediate compilation directory");
-    REGB0 = TAG_Int(34);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_15 = fra.me.REG[1];
-    register_static_object(&once_value_15);
-  } else fra.me.REG[1] = once_value_15;
-  fra.me.REG[1] = fra.me.REG[1];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
-  if (!once_value_16) {
-    fra.me.REG[3] = BOX_NativeString("--compdir");
-    REGB0 = TAG_Int(9);
+    fra.me.REG[3] = BOX_NativeString("--help");
+    REGB0 = TAG_Int(6);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_16 = fra.me.REG[3];
-    register_static_object(&once_value_16);
-  } else fra.me.REG[3] = once_value_16;
+    once_value_15 = fra.me.REG[3];
+    register_static_object(&once_value_15);
+  } else fra.me.REG[3] = once_value_15;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  fra.me.REG[2] = NEW_OptionString_opts___OptionString___init(fra.me.REG[1], fra.me.REG[2]);
-  ATTR_nitc___NitCompiler____opt_compdir(fra.me.REG[0]) = fra.me.REG[2];
-  /* nitc.nit:40 */
-  if (!once_value_17) {
-    fra.me.REG[2] = BOX_NativeString("Append prefix to file extension");
-    REGB0 = TAG_Int(31);
+  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_toolcontext___ToolContext____opt_help(fra.me.REG[0]) = fra.me.REG[2];
+  /* toolcontext.nit:155 */
+  if (!once_value_16) {
+    fra.me.REG[2] = BOX_NativeString("Show version and exit");
+    REGB0 = TAG_Int(21);
     fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_17 = fra.me.REG[2];
-    register_static_object(&once_value_17);
-  } else fra.me.REG[2] = once_value_17;
+    once_value_16 = fra.me.REG[2];
+    register_static_object(&once_value_16);
+  } else fra.me.REG[2] = once_value_16;
   fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(1);
+  REGB0 = TAG_Int(0);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
-  if (!once_value_18) {
-    fra.me.REG[3] = BOX_NativeString("-p");
-    REGB0 = TAG_Int(2);
+  if (!once_value_17) {
+    fra.me.REG[3] = BOX_NativeString("--version");
+    REGB0 = TAG_Int(9);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_18 = fra.me.REG[3];
-    register_static_object(&once_value_18);
-  } else fra.me.REG[3] = once_value_18;
+    once_value_17 = fra.me.REG[3];
+    register_static_object(&once_value_17);
+  } else fra.me.REG[3] = once_value_17;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_toolcontext___ToolContext____opt_version(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:158 */
+  if (!once_value_18) {
+    fra.me.REG[1] = BOX_NativeString("Verbose");
+    REGB0 = TAG_Int(7);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_18 = fra.me.REG[1];
+    register_static_object(&once_value_18);
+  } else fra.me.REG[1] = once_value_18;
+  fra.me.REG[1] = fra.me.REG[1];
+  REGB0 = TAG_Int(1);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_19) {
-    fra.me.REG[3] = BOX_NativeString("--extension-prefix");
-    REGB0 = TAG_Int(18);
+    fra.me.REG[3] = BOX_NativeString("-v");
+    REGB0 = TAG_Int(2);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_19 = fra.me.REG[3];
     register_static_object(&once_value_19);
   } else fra.me.REG[3] = once_value_19;
   fra.me.REG[3] = fra.me.REG[3];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  fra.me.REG[1] = NEW_OptionString_opts___OptionString___init(fra.me.REG[2], fra.me.REG[1]);
-  ATTR_nitc___NitCompiler____opt_extension_prefix(fra.me.REG[0]) = fra.me.REG[1];
-  /* nitc.nit:41 */
-  REGB0 = TAG_Int(3);
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   if (!once_value_20) {
-    fra.me.REG[2] = BOX_NativeString("none");
-    REGB0 = TAG_Int(4);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_20 = fra.me.REG[2];
+    fra.me.REG[3] = BOX_NativeString("--verbose");
+    REGB0 = TAG_Int(9);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_20 = fra.me.REG[3];
     register_static_object(&once_value_20);
-  } else fra.me.REG[2] = once_value_20;
-  fra.me.REG[2] = fra.me.REG[2];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  } else fra.me.REG[3] = once_value_20;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionCount_opts___OptionCount___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_toolcontext___ToolContext____opt_verbose(fra.me.REG[0]) = fra.me.REG[2];
+  /* toolcontext.nit:161 */
   if (!once_value_21) {
-    fra.me.REG[2] = BOX_NativeString("C");
-    REGB0 = TAG_Int(1);
+    fra.me.REG[2] = BOX_NativeString("Stop on first error");
+    REGB0 = TAG_Int(19);
     fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
     once_value_21 = fra.me.REG[2];
     register_static_object(&once_value_21);
   } else fra.me.REG[2] = once_value_21;
   fra.me.REG[2] = fra.me.REG[2];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Int(0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_22) {
-    fra.me.REG[2] = BOX_NativeString("icode");
-    REGB0 = TAG_Int(5);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_22 = fra.me.REG[2];
+    fra.me.REG[3] = BOX_NativeString("--stop-on-first-error");
+    REGB0 = TAG_Int(21);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_22 = fra.me.REG[3];
     register_static_object(&once_value_22);
-  } else fra.me.REG[2] = once_value_22;
-  fra.me.REG[2] = fra.me.REG[2];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  } else fra.me.REG[3] = once_value_22;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_toolcontext___ToolContext____opt_stop_on_first_error(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:164 */
   if (!once_value_23) {
-    fra.me.REG[2] = BOX_NativeString("The type of code we want to be generated");
-    REGB0 = TAG_Int(40);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_23 = fra.me.REG[2];
+    fra.me.REG[1] = BOX_NativeString("Do not use color to display errors and warnings");
+    REGB0 = TAG_Int(47);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_23 = fra.me.REG[1];
     register_static_object(&once_value_23);
-  } else fra.me.REG[2] = once_value_23;
-  fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(1);
-  REGB1 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
+  } else fra.me.REG[1] = once_value_23;
+  fra.me.REG[1] = fra.me.REG[1];
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_24) {
-    fra.me.REG[4] = BOX_NativeString("--output-format");
-    REGB1 = TAG_Int(15);
-    fra.me.REG[4] = NEW_String_standard___string___String___with_native(fra.me.REG[4], REGB1);
-    once_value_24 = fra.me.REG[4];
+    fra.me.REG[3] = BOX_NativeString("--no-color");
+    REGB0 = TAG_Int(10);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_24 = fra.me.REG[3];
     register_static_object(&once_value_24);
-  } else fra.me.REG[4] = once_value_24;
-  fra.me.REG[4] = fra.me.REG[4];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[3] = NEW_OptionEnum_opts___OptionEnum___init(fra.me.REG[1], fra.me.REG[2], REGB0, fra.me.REG[3]);
-  ATTR_nitc___NitCompiler____opt_output_format(fra.me.REG[0]) = fra.me.REG[3];
-  /* syntax/syntax.nit:100 */
-  REGB0 = TAG_Bool(0);
-  ATTR_syntax___ToolContext____keep_ast(fra.me.REG[0]) = REGB0;
+  } else fra.me.REG[3] = once_value_24;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_toolcontext___ToolContext____opt_no_color(fra.me.REG[0]) = fra.me.REG[2];
+  /* toolcontext.nit:167 */
+  REGB0 = TAG_Int(0);
+  ATTR_toolcontext___ToolContext____verbose_level(fra.me.REG[0]) = REGB0;
   /* mmloader.nit:30 */
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_mmloader___ToolContext____paths(fra.me.REG[0]) = fra.me.REG[3];
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_mmloader___ToolContext____paths(fra.me.REG[0]) = fra.me.REG[2];
   /* mmloader.nit:33 */
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_mmloader___ToolContext____loaders(fra.me.REG[0]) = fra.me.REG[3];
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_mmloader___ToolContext____loaders(fra.me.REG[0]) = fra.me.REG[2];
   /* mmloader.nit:36 */
   if (!once_value_25) {
-    fra.me.REG[3] = BOX_NativeString("Set include path for loaders (may be used more than once)");
+    fra.me.REG[2] = BOX_NativeString("Set include path for loaders (may be used more than once)");
     REGB0 = TAG_Int(57);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_25 = fra.me.REG[3];
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_25 = fra.me.REG[2];
     register_static_object(&once_value_25);
-  } else fra.me.REG[3] = once_value_25;
-  fra.me.REG[3] = fra.me.REG[3];
+  } else fra.me.REG[2] = once_value_25;
+  fra.me.REG[2] = fra.me.REG[2];
   REGB0 = TAG_Int(1);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_26) {
-    fra.me.REG[1] = BOX_NativeString("-I");
+    fra.me.REG[3] = BOX_NativeString("-I");
     REGB0 = TAG_Int(2);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_26 = fra.me.REG[1];
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_26 = fra.me.REG[3];
     register_static_object(&once_value_26);
-  } else fra.me.REG[1] = once_value_26;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
+  } else fra.me.REG[3] = once_value_26;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   if (!once_value_27) {
-    fra.me.REG[1] = BOX_NativeString("--path");
+    fra.me.REG[3] = BOX_NativeString("--path");
     REGB0 = TAG_Int(6);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_27 = fra.me.REG[1];
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_27 = fra.me.REG[3];
     register_static_object(&once_value_27);
-  } else fra.me.REG[1] = once_value_27;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionArray_opts___OptionArray___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_mmloader___ToolContext____opt_path(fra.me.REG[0]) = fra.me.REG[2];
+  } else fra.me.REG[3] = once_value_27;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionArray_opts___OptionArray___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_mmloader___ToolContext____opt_path(fra.me.REG[0]) = fra.me.REG[1];
   /* mmloader.nit:39 */
   if (!once_value_28) {
-    fra.me.REG[2] = BOX_NativeString("Stop after meta-model processing");
+    fra.me.REG[1] = BOX_NativeString("Stop after meta-model processing");
     REGB0 = TAG_Int(32);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_28 = fra.me.REG[2];
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_28 = fra.me.REG[1];
     register_static_object(&once_value_28);
-  } else fra.me.REG[2] = once_value_28;
-  fra.me.REG[2] = fra.me.REG[2];
+  } else fra.me.REG[1] = once_value_28;
+  fra.me.REG[1] = fra.me.REG[1];
   REGB0 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_29) {
-    fra.me.REG[1] = BOX_NativeString("--only-metamodel");
+    fra.me.REG[3] = BOX_NativeString("--only-metamodel");
     REGB0 = TAG_Int(16);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_29 = fra.me.REG[1];
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_29 = fra.me.REG[3];
     register_static_object(&once_value_29);
-  } else fra.me.REG[1] = once_value_29;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  fra.me.REG[3] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[3]);
-  ATTR_mmloader___ToolContext____opt_only_metamodel(fra.me.REG[0]) = fra.me.REG[3];
+  } else fra.me.REG[3] = once_value_29;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_mmloader___ToolContext____opt_only_metamodel(fra.me.REG[0]) = fra.me.REG[2];
   /* mmloader.nit:42 */
   if (!once_value_30) {
-    fra.me.REG[3] = BOX_NativeString("Only proceed to parse step of loaders");
+    fra.me.REG[2] = BOX_NativeString("Only proceed to parse step of loaders");
     REGB0 = TAG_Int(37);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_30 = fra.me.REG[3];
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_30 = fra.me.REG[2];
     register_static_object(&once_value_30);
-  } else fra.me.REG[3] = once_value_30;
-  fra.me.REG[3] = fra.me.REG[3];
+  } else fra.me.REG[2] = once_value_30;
+  fra.me.REG[2] = fra.me.REG[2];
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_31) {
-    fra.me.REG[1] = BOX_NativeString("--only-parse");
+    fra.me.REG[3] = BOX_NativeString("--only-parse");
     REGB0 = TAG_Int(12);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_31 = fra.me.REG[1];
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_31 = fra.me.REG[3];
     register_static_object(&once_value_31);
-  } else fra.me.REG[1] = once_value_31;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_mmloader___ToolContext____opt_only_parse(fra.me.REG[0]) = fra.me.REG[2];
+  } else fra.me.REG[3] = once_value_31;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_mmloader___ToolContext____opt_only_parse(fra.me.REG[0]) = fra.me.REG[1];
   /* mmloader.nit:115 */
-  fra.me.REG[2] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
-  ATTR_mmloader___ToolContext____processing_modules(fra.me.REG[0]) = fra.me.REG[2];
+  fra.me.REG[1] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
+  ATTR_mmloader___ToolContext____processing_modules(fra.me.REG[0]) = fra.me.REG[1];
   /* mmloader.nit:182 */
-  fra.me.REG[2] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
-  ATTR_mmloader___ToolContext____path_dirs(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:73 */
-  REGB0 = TAG_Int(0);
-  ATTR_toolcontext___ToolContext____error_count(fra.me.REG[0]) = REGB0;
-  /* toolcontext.nit:76 */
-  REGB0 = TAG_Int(0);
-  ATTR_toolcontext___ToolContext____warning_count(fra.me.REG[0]) = REGB0;
-  /* toolcontext.nit:79 */
+  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
+  ATTR_mmloader___ToolContext____path_dirs(fra.me.REG[0]) = fra.me.REG[1];
+  /* program.nit:26 */
+  REGB0 = TAG_Bool(0);
+  ATTR_program___ToolContext____global(fra.me.REG[0]) = REGB0;
+  /* program.nit:27 */
+  REGB0 = TAG_Bool(1);
+  ATTR_program___ToolContext____use_SFT_optimization(fra.me.REG[0]) = REGB0;
+  /* compiling/compiling_base.nit:27 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_compiling___compiling_base___ToolContext____compdir(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/compiling_base.nit:28 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_compiling___compiling_base___ToolContext____clibdir(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/compiling_base.nit:29 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_compiling___compiling_base___ToolContext____bindir(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/compiling_base.nit:30 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_compiling___compiling_base___ToolContext____output_file(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/compiling_base.nit:31 */
+  REGB0 = TAG_Bool(0);
+  ATTR_compiling___compiling_base___ToolContext____boost(fra.me.REG[0]) = REGB0;
+  /* compiling/compiling_base.nit:32 */
+  REGB0 = TAG_Bool(0);
+  ATTR_compiling___compiling_base___ToolContext____no_cc(fra.me.REG[0]) = REGB0;
+  /* compiling/compiling_base.nit:33 */
+  REGB0 = TAG_Bool(0);
+  ATTR_compiling___compiling_base___ToolContext____cc_link(fra.me.REG[0]) = REGB0;
+  /* compiling/compiling_base.nit:34 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_compiling___compiling_base___ToolContext____cc_libs(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/compiling_base.nit:35 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_compiling___compiling_base___ToolContext____cc_lib_paths(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/compiling_base.nit:36 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_compiling___compiling_base___ToolContext____cc_include_paths(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/compiling_base.nit:37 */
   if (!once_value_32) {
-    fra.me.REG[2] = BOX_NativeString("logs");
-    REGB0 = TAG_Int(4);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_32 = fra.me.REG[2];
+    fra.me.REG[1] = BOX_NativeString("");
+    REGB0 = TAG_Int(0);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_32 = fra.me.REG[1];
     register_static_object(&once_value_32);
-  } else fra.me.REG[2] = once_value_32;
-  fra.me.REG[2] = fra.me.REG[2];
-  ATTR_toolcontext___ToolContext____log_directory(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:82 */
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_toolcontext___ToolContext____messages(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:83 */
-  fra.me.REG[2] = NEW_ComparableSorter_standard___collection___sorter___ComparableSorter___init();
-  ATTR_toolcontext___ToolContext____message_sorter(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:137 */
-  fra.me.REG[2] = NEW_OptionContext_opts___OptionContext___init();
-  ATTR_toolcontext___ToolContext____option_context(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:140 */
+  } else fra.me.REG[1] = once_value_32;
+  fra.me.REG[1] = fra.me.REG[1];
+  ATTR_compiling___compiling_base___ToolContext____ext_prefix(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/syntax.nit:100 */
+  REGB0 = TAG_Bool(0);
+  ATTR_syntax___ToolContext____keep_ast(fra.me.REG[0]) = REGB0;
+  /* separate_options.nit:29 */
+  fra.me.REG[1] = NEW_OptionContext_opts___OptionContext___init();
+  ATTR_separate_options___ToolContext_____atseparate_options(fra.me.REG[0]) = fra.me.REG[1];
+  /* separate_options.nit:30 */
   if (!once_value_33) {
-    fra.me.REG[2] = BOX_NativeString("Show warnings");
-    REGB0 = TAG_Int(13);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_33 = fra.me.REG[2];
+    fra.me.REG[1] = BOX_NativeString("Path to libraries for C compiler");
+    REGB0 = TAG_Int(32);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_33 = fra.me.REG[1];
     register_static_object(&once_value_33);
-  } else fra.me.REG[2] = once_value_33;
-  fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(1);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  } else fra.me.REG[1] = once_value_33;
+  fra.me.REG[1] = fra.me.REG[1];
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_34) {
-    fra.me.REG[1] = BOX_NativeString("-W");
-    REGB0 = TAG_Int(2);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_34 = fra.me.REG[1];
+    fra.me.REG[3] = BOX_NativeString("--cc-lib-path");
+    REGB0 = TAG_Int(13);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_34 = fra.me.REG[3];
     register_static_object(&once_value_34);
-  } else fra.me.REG[1] = once_value_34;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+  } else fra.me.REG[3] = once_value_34;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionArray_opts___OptionArray___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_separate_options___ToolContext_____atopt_cc_lib_paths(fra.me.REG[0]) = fra.me.REG[2];
+  /* separate_options.nit:31 */
   if (!once_value_35) {
-    fra.me.REG[1] = BOX_NativeString("--warn");
-    REGB0 = TAG_Int(6);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_35 = fra.me.REG[1];
+    fra.me.REG[2] = BOX_NativeString("Name of library to use for C compiler");
+    REGB0 = TAG_Int(37);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_35 = fra.me.REG[2];
     register_static_object(&once_value_35);
-  } else fra.me.REG[1] = once_value_35;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  fra.me.REG[3] = NEW_OptionCount_opts___OptionCount___init(fra.me.REG[2], fra.me.REG[3]);
-  ATTR_toolcontext___ToolContext____opt_warn(fra.me.REG[0]) = fra.me.REG[3];
-  /* toolcontext.nit:143 */
+  } else fra.me.REG[2] = once_value_35;
+  fra.me.REG[2] = fra.me.REG[2];
+  REGB0 = TAG_Int(0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_36) {
-    fra.me.REG[3] = BOX_NativeString("Do not show warnings");
-    REGB0 = TAG_Int(20);
+    fra.me.REG[3] = BOX_NativeString("--cc-lib-name");
+    REGB0 = TAG_Int(13);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_36 = fra.me.REG[3];
     register_static_object(&once_value_36);
   } else fra.me.REG[3] = once_value_36;
   fra.me.REG[3] = fra.me.REG[3];
-  REGB0 = TAG_Int(1);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionArray_opts___OptionArray___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_separate_options___ToolContext_____atopt_cc_libs(fra.me.REG[0]) = fra.me.REG[1];
+  /* separate_options.nit:32 */
   if (!once_value_37) {
-    fra.me.REG[1] = BOX_NativeString("-q");
-    REGB0 = TAG_Int(2);
+    fra.me.REG[1] = BOX_NativeString("Path to .h files for C compiler");
+    REGB0 = TAG_Int(31);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_37 = fra.me.REG[1];
     register_static_object(&once_value_37);
   } else fra.me.REG[1] = once_value_37;
   fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_38) {
-    fra.me.REG[1] = BOX_NativeString("--quiet");
-    REGB0 = TAG_Int(7);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_38 = fra.me.REG[1];
+    fra.me.REG[3] = BOX_NativeString("--cc-header-path");
+    REGB0 = TAG_Int(16);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_38 = fra.me.REG[3];
     register_static_object(&once_value_38);
-  } else fra.me.REG[1] = once_value_38;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_toolcontext___ToolContext____opt_quiet(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:146 */
+  } else fra.me.REG[3] = once_value_38;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionArray_opts___OptionArray___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_separate_options___ToolContext_____atopt_cc_include_paths(fra.me.REG[0]) = fra.me.REG[2];
+  /* global/global.nit:44 */
   if (!once_value_39) {
-    fra.me.REG[2] = BOX_NativeString("Generate various log files");
-    REGB0 = TAG_Int(26);
+    fra.me.REG[2] = BOX_NativeString("rta");
+    REGB0 = TAG_Int(3);
     fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
     once_value_39 = fra.me.REG[2];
     register_static_object(&once_value_39);
   } else fra.me.REG[2] = once_value_39;
   fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  ATTR_global___ToolContext____global_callgraph(fra.me.REG[0]) = fra.me.REG[2];
+  /* global/global.nit:46 */
   if (!once_value_40) {
-    fra.me.REG[1] = BOX_NativeString("--log");
-    REGB0 = TAG_Int(5);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_40 = fra.me.REG[1];
+    fra.me.REG[2] = BOX_NativeString("Use global compilation");
+    REGB0 = TAG_Int(22);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_40 = fra.me.REG[2];
     register_static_object(&once_value_40);
-  } else fra.me.REG[1] = once_value_40;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  fra.me.REG[3] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[3]);
-  ATTR_toolcontext___ToolContext____opt_log(fra.me.REG[0]) = fra.me.REG[3];
-  /* toolcontext.nit:149 */
+  } else fra.me.REG[2] = once_value_40;
+  fra.me.REG[2] = fra.me.REG[2];
+  REGB0 = TAG_Int(0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_41) {
-    fra.me.REG[3] = BOX_NativeString("Directory where to generate log files");
-    REGB0 = TAG_Int(37);
+    fra.me.REG[3] = BOX_NativeString("--global");
+    REGB0 = TAG_Int(8);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_41 = fra.me.REG[3];
     register_static_object(&once_value_41);
   } else fra.me.REG[3] = once_value_41;
   fra.me.REG[3] = fra.me.REG[3];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_global___ToolContext____opt_global(fra.me.REG[0]) = fra.me.REG[1];
+  /* global/global.nit:47 */
   if (!once_value_42) {
-    fra.me.REG[1] = BOX_NativeString("--log-dir");
-    REGB0 = TAG_Int(9);
+    fra.me.REG[1] = BOX_NativeString("Do not use SFT optimization");
+    REGB0 = TAG_Int(27);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_42 = fra.me.REG[1];
     register_static_object(&once_value_42);
   } else fra.me.REG[1] = once_value_42;
   fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionString_opts___OptionString___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_toolcontext___ToolContext____opt_log_dir(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:152 */
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_43) {
-    fra.me.REG[2] = BOX_NativeString("Show Help (This screen)");
-    REGB0 = TAG_Int(23);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_43 = fra.me.REG[2];
+    fra.me.REG[3] = BOX_NativeString("--no-global-SFT-optimization");
+    REGB0 = TAG_Int(28);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_43 = fra.me.REG[3];
     register_static_object(&once_value_43);
-  } else fra.me.REG[2] = once_value_43;
-  fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(2);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  } else fra.me.REG[3] = once_value_43;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_global___ToolContext____opt_global_no_STF_opt(fra.me.REG[0]) = fra.me.REG[2];
+  /* global/global.nit:48 */
   if (!once_value_44) {
-    fra.me.REG[1] = BOX_NativeString("-h");
-    REGB0 = TAG_Int(2);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_44 = fra.me.REG[1];
+    fra.me.REG[2] = BOX_NativeString("Do not use dead method removal optimization");
+    REGB0 = TAG_Int(43);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_44 = fra.me.REG[2];
     register_static_object(&once_value_44);
-  } else fra.me.REG[1] = once_value_44;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+  } else fra.me.REG[2] = once_value_44;
+  fra.me.REG[2] = fra.me.REG[2];
+  REGB0 = TAG_Int(0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_45) {
-    fra.me.REG[1] = BOX_NativeString("-?");
-    REGB0 = TAG_Int(2);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_45 = fra.me.REG[1];
+    fra.me.REG[3] = BOX_NativeString("--no-global-DMR-optimization");
+    REGB0 = TAG_Int(28);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_45 = fra.me.REG[3];
     register_static_object(&once_value_45);
-  } else fra.me.REG[1] = once_value_45;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+  } else fra.me.REG[3] = once_value_45;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_global___ToolContext____opt_global_no_DMR_opt(fra.me.REG[0]) = fra.me.REG[1];
+  /* global/global.nit:49 */
   if (!once_value_46) {
-    fra.me.REG[1] = BOX_NativeString("--help");
-    REGB0 = TAG_Int(6);
+    fra.me.REG[1] = BOX_NativeString("Do not automatically inline getters/setters");
+    REGB0 = TAG_Int(43);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_46 = fra.me.REG[1];
     register_static_object(&once_value_46);
   } else fra.me.REG[1] = once_value_46;
   fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  fra.me.REG[3] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[3]);
-  ATTR_toolcontext___ToolContext____opt_help(fra.me.REG[0]) = fra.me.REG[3];
-  /* toolcontext.nit:155 */
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_47) {
-    fra.me.REG[3] = BOX_NativeString("Show version and exit");
-    REGB0 = TAG_Int(21);
+    fra.me.REG[3] = BOX_NativeString("--no-global-get-set-inlining");
+    REGB0 = TAG_Int(28);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_47 = fra.me.REG[3];
     register_static_object(&once_value_47);
   } else fra.me.REG[3] = once_value_47;
   fra.me.REG[3] = fra.me.REG[3];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_global___ToolContext____opt_global_no_inline_get_set(fra.me.REG[0]) = fra.me.REG[2];
+  /* global/global.nit:50 */
   if (!once_value_48) {
-    fra.me.REG[1] = BOX_NativeString("--version");
-    REGB0 = TAG_Int(9);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_48 = fra.me.REG[1];
+    fra.me.REG[2] = BOX_NativeString("Do not remove get tests outside object initialization");
+    REGB0 = TAG_Int(53);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_48 = fra.me.REG[2];
     register_static_object(&once_value_48);
-  } else fra.me.REG[1] = once_value_48;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_toolcontext___ToolContext____opt_version(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:158 */
+  } else fra.me.REG[2] = once_value_48;
+  fra.me.REG[2] = fra.me.REG[2];
+  REGB0 = TAG_Int(0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_49) {
-    fra.me.REG[2] = BOX_NativeString("Verbose");
-    REGB0 = TAG_Int(7);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_49 = fra.me.REG[2];
+    fra.me.REG[3] = BOX_NativeString("--no-global-OOIT-optimization");
+    REGB0 = TAG_Int(29);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_49 = fra.me.REG[3];
     register_static_object(&once_value_49);
-  } else fra.me.REG[2] = once_value_49;
-  fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(1);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  } else fra.me.REG[3] = once_value_49;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_global___ToolContext____opt_global_no_out_of_init_get_test_opt(fra.me.REG[0]) = fra.me.REG[1];
+  /* global/global.nit:51 */
   if (!once_value_50) {
-    fra.me.REG[1] = BOX_NativeString("-v");
-    REGB0 = TAG_Int(2);
+    fra.me.REG[1] = BOX_NativeString("Do not use a specialized algorithm to find reachable methods from initializers");
+    REGB0 = TAG_Int(78);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_50 = fra.me.REG[1];
     register_static_object(&once_value_50);
   } else fra.me.REG[1] = once_value_50;
   fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_51) {
-    fra.me.REG[1] = BOX_NativeString("--verbose");
-    REGB0 = TAG_Int(9);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_51 = fra.me.REG[1];
-    register_static_object(&once_value_51);
-  } else fra.me.REG[1] = once_value_51;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  fra.me.REG[3] = NEW_OptionCount_opts___OptionCount___init(fra.me.REG[2], fra.me.REG[3]);
-  ATTR_toolcontext___ToolContext____opt_verbose(fra.me.REG[0]) = fra.me.REG[3];
-  /* toolcontext.nit:161 */
-  if (!once_value_52) {
-    fra.me.REG[3] = BOX_NativeString("Stop on first error");
-    REGB0 = TAG_Int(19);
+    fra.me.REG[3] = BOX_NativeString("--no-global-RFIM-analysis");
+    REGB0 = TAG_Int(25);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_52 = fra.me.REG[3];
-    register_static_object(&once_value_52);
-  } else fra.me.REG[3] = once_value_52;
+    once_value_51 = fra.me.REG[3];
+    register_static_object(&once_value_51);
+  } else fra.me.REG[3] = once_value_51;
   fra.me.REG[3] = fra.me.REG[3];
-  REGB0 = TAG_Int(0);
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_global___ToolContext____opt_global_no_RFIMA(fra.me.REG[0]) = fra.me.REG[2];
+  /* global/global.nit:52 */
+  REGB0 = TAG_Int(3);
   fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  if (!once_value_52) {
+    fra.me.REG[1] = BOX_NativeString("none");
+    REGB0 = TAG_Int(4);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_52 = fra.me.REG[1];
+    register_static_object(&once_value_52);
+  } else fra.me.REG[1] = once_value_52;
+  fra.me.REG[1] = fra.me.REG[1];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
   if (!once_value_53) {
-    fra.me.REG[1] = BOX_NativeString("--stop-on-first-error");
-    REGB0 = TAG_Int(21);
+    fra.me.REG[1] = BOX_NativeString("cha");
+    REGB0 = TAG_Int(3);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_53 = fra.me.REG[1];
     register_static_object(&once_value_53);
   } else fra.me.REG[1] = once_value_53;
   fra.me.REG[1] = fra.me.REG[1];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_toolcontext___ToolContext____opt_stop_on_first_error(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:164 */
   if (!once_value_54) {
-    fra.me.REG[2] = BOX_NativeString("Do not use color to display errors and warnings");
-    REGB0 = TAG_Int(47);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_54 = fra.me.REG[2];
+    fra.me.REG[1] = BOX_NativeString("rta");
+    REGB0 = TAG_Int(3);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_54 = fra.me.REG[1];
     register_static_object(&once_value_54);
-  } else fra.me.REG[2] = once_value_54;
-  fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  } else fra.me.REG[1] = once_value_54;
+  fra.me.REG[1] = fra.me.REG[1];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
   if (!once_value_55) {
-    fra.me.REG[1] = BOX_NativeString("--no-color");
-    REGB0 = TAG_Int(10);
+    fra.me.REG[1] = BOX_NativeString("The algorithm to use to build the callgraph");
+    REGB0 = TAG_Int(43);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_55 = fra.me.REG[1];
     register_static_object(&once_value_55);
   } else fra.me.REG[1] = once_value_55;
   fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  fra.me.REG[3] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[3]);
-  ATTR_toolcontext___ToolContext____opt_no_color(fra.me.REG[0]) = fra.me.REG[3];
-  /* toolcontext.nit:167 */
-  REGB0 = TAG_Int(0);
-  ATTR_toolcontext___ToolContext____verbose_level(fra.me.REG[0]) = REGB0;
-  /* metamodel/abstractmetamodel.nit:31 */
-  fra.me.REG[3] = NEW_PartialOrder_metamodel___partial_order___PartialOrder___init();
-  ATTR_metamodel___abstractmetamodel___MMContext____module_hierarchy(fra.me.REG[0]) = fra.me.REG[3];
-  /* metamodel/abstractmetamodel.nit:35 */
-  fra.me.REG[3] = NEW_PartialOrder_metamodel___partial_order___PartialOrder___init();
-  ATTR_metamodel___abstractmetamodel___MMContext____class_hierarchy(fra.me.REG[0]) = fra.me.REG[3];
-  /* metamodel/abstractmetamodel.nit:38 */
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_metamodel___abstractmetamodel___MMContext____global_classes(fra.me.REG[0]) = fra.me.REG[3];
-  /* metamodel/abstractmetamodel.nit:41 */
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_metamodel___abstractmetamodel___MMContext____modules(fra.me.REG[0]) = fra.me.REG[3];
-  /* global/global.nit:44 */
+  REGB0 = TAG_Int(2);
+  REGB1 = TAG_Int(0);
+  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
   if (!once_value_56) {
-    fra.me.REG[3] = BOX_NativeString("rta");
-    REGB0 = TAG_Int(3);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_56 = fra.me.REG[3];
+    fra.me.REG[4] = BOX_NativeString("--global-callgraph");
+    REGB1 = TAG_Int(18);
+    fra.me.REG[4] = NEW_String_standard___string___String___with_native(fra.me.REG[4], REGB1);
+    once_value_56 = fra.me.REG[4];
     register_static_object(&once_value_56);
-  } else fra.me.REG[3] = once_value_56;
-  fra.me.REG[3] = fra.me.REG[3];
-  ATTR_global___ToolContext____global_callgraph(fra.me.REG[0]) = fra.me.REG[3];
-  /* global/global.nit:46 */
+  } else fra.me.REG[4] = once_value_56;
+  fra.me.REG[4] = fra.me.REG[4];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  fra.me.REG[3] = NEW_OptionEnum_opts___OptionEnum___init(fra.me.REG[2], fra.me.REG[1], REGB0, fra.me.REG[3]);
+  ATTR_global___ToolContext____opt_global_callgraph(fra.me.REG[0]) = fra.me.REG[3];
+  /* nitc.nit:33 */
   if (!once_value_57) {
-    fra.me.REG[3] = BOX_NativeString("Use global compilation");
-    REGB0 = TAG_Int(22);
+    fra.me.REG[3] = BOX_NativeString("Output file");
+    REGB0 = TAG_Int(11);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_57 = fra.me.REG[3];
     register_static_object(&once_value_57);
   } else fra.me.REG[3] = once_value_57;
   fra.me.REG[3] = fra.me.REG[3];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  REGB0 = TAG_Int(1);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_58) {
-    fra.me.REG[1] = BOX_NativeString("--global");
-    REGB0 = TAG_Int(8);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_58 = fra.me.REG[1];
+    fra.me.REG[2] = BOX_NativeString("-o");
+    REGB0 = TAG_Int(2);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_58 = fra.me.REG[2];
     register_static_object(&once_value_58);
-  } else fra.me.REG[1] = once_value_58;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_global___ToolContext____opt_global(fra.me.REG[0]) = fra.me.REG[2];
-  /* global/global.nit:47 */
+  } else fra.me.REG[2] = once_value_58;
+  fra.me.REG[2] = fra.me.REG[2];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   if (!once_value_59) {
-    fra.me.REG[2] = BOX_NativeString("Do not use SFT optimization");
-    REGB0 = TAG_Int(27);
+    fra.me.REG[2] = BOX_NativeString("--output");
+    REGB0 = TAG_Int(8);
     fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
     once_value_59 = fra.me.REG[2];
     register_static_object(&once_value_59);
   } else fra.me.REG[2] = once_value_59;
   fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[1] = NEW_OptionString_opts___OptionString___init(fra.me.REG[3], fra.me.REG[1]);
+  ATTR_nitc___NitCompiler____opt_output(fra.me.REG[0]) = fra.me.REG[1];
+  /* nitc.nit:34 */
   if (!once_value_60) {
-    fra.me.REG[1] = BOX_NativeString("--no-global-SFT-optimization");
-    REGB0 = TAG_Int(28);
+    fra.me.REG[1] = BOX_NativeString("Optimize compilation");
+    REGB0 = TAG_Int(20);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_60 = fra.me.REG[1];
     register_static_object(&once_value_60);
   } else fra.me.REG[1] = once_value_60;
   fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  fra.me.REG[3] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[3]);
-  ATTR_global___ToolContext____opt_global_no_STF_opt(fra.me.REG[0]) = fra.me.REG[3];
-  /* global/global.nit:48 */
+  REGB0 = TAG_Int(1);
+  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_61) {
-    fra.me.REG[3] = BOX_NativeString("Do not use dead method removal optimization");
-    REGB0 = TAG_Int(43);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_61 = fra.me.REG[3];
+    fra.me.REG[2] = BOX_NativeString("-O");
+    REGB0 = TAG_Int(2);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_61 = fra.me.REG[2];
     register_static_object(&once_value_61);
-  } else fra.me.REG[3] = once_value_61;
-  fra.me.REG[3] = fra.me.REG[3];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  } else fra.me.REG[2] = once_value_61;
+  fra.me.REG[2] = fra.me.REG[2];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
   if (!once_value_62) {
-    fra.me.REG[1] = BOX_NativeString("--no-global-DMR-optimization");
-    REGB0 = TAG_Int(28);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_62 = fra.me.REG[1];
+    fra.me.REG[2] = BOX_NativeString("--boost");
+    REGB0 = TAG_Int(7);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_62 = fra.me.REG[2];
     register_static_object(&once_value_62);
-  } else fra.me.REG[1] = once_value_62;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_global___ToolContext____opt_global_no_DMR_opt(fra.me.REG[0]) = fra.me.REG[2];
-  /* global/global.nit:49 */
+  } else fra.me.REG[2] = once_value_62;
+  fra.me.REG[2] = fra.me.REG[2];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
+  fra.me.REG[3] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[3]);
+  ATTR_nitc___NitCompiler____opt_boost(fra.me.REG[0]) = fra.me.REG[3];
+  /* nitc.nit:35 */
   if (!once_value_63) {
-    fra.me.REG[2] = BOX_NativeString("Do not automatically inline getters/setters");
-    REGB0 = TAG_Int(43);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_63 = fra.me.REG[2];
+    fra.me.REG[3] = BOX_NativeString("Do not invoke C compiler");
+    REGB0 = TAG_Int(24);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_63 = fra.me.REG[3];
     register_static_object(&once_value_63);
-  } else fra.me.REG[2] = once_value_63;
-  fra.me.REG[2] = fra.me.REG[2];
+  } else fra.me.REG[3] = once_value_63;
+  fra.me.REG[3] = fra.me.REG[3];
   REGB0 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_64) {
-    fra.me.REG[1] = BOX_NativeString("--no-global-get-set-inlining");
-    REGB0 = TAG_Int(28);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_64 = fra.me.REG[1];
+    fra.me.REG[2] = BOX_NativeString("--no-cc");
+    REGB0 = TAG_Int(7);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_64 = fra.me.REG[2];
     register_static_object(&once_value_64);
-  } else fra.me.REG[1] = once_value_64;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  fra.me.REG[3] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[3]);
-  ATTR_global___ToolContext____opt_global_no_inline_get_set(fra.me.REG[0]) = fra.me.REG[3];
-  /* global/global.nit:50 */
+  } else fra.me.REG[2] = once_value_64;
+  fra.me.REG[2] = fra.me.REG[2];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[3], fra.me.REG[1]);
+  ATTR_nitc___NitCompiler____opt_no_cc(fra.me.REG[0]) = fra.me.REG[1];
+  /* nitc.nit:36 */
   if (!once_value_65) {
-    fra.me.REG[3] = BOX_NativeString("Do not remove get tests outside object initialization");
-    REGB0 = TAG_Int(53);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_65 = fra.me.REG[3];
+    fra.me.REG[1] = BOX_NativeString("Do not invoke C linker");
+    REGB0 = TAG_Int(22);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_65 = fra.me.REG[1];
     register_static_object(&once_value_65);
-  } else fra.me.REG[3] = once_value_65;
-  fra.me.REG[3] = fra.me.REG[3];
+  } else fra.me.REG[1] = once_value_65;
+  fra.me.REG[1] = fra.me.REG[1];
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_66) {
-    fra.me.REG[1] = BOX_NativeString("--no-global-OOIT-optimization");
-    REGB0 = TAG_Int(29);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_66 = fra.me.REG[1];
+    fra.me.REG[2] = BOX_NativeString("--cc-no-link");
+    REGB0 = TAG_Int(12);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_66 = fra.me.REG[2];
     register_static_object(&once_value_66);
-  } else fra.me.REG[1] = once_value_66;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_global___ToolContext____opt_global_no_out_of_init_get_test_opt(fra.me.REG[0]) = fra.me.REG[2];
-  /* global/global.nit:51 */
+  } else fra.me.REG[2] = once_value_66;
+  fra.me.REG[2] = fra.me.REG[2];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
+  fra.me.REG[3] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[3]);
+  ATTR_nitc___NitCompiler____opt_cc_no_link(fra.me.REG[0]) = fra.me.REG[3];
+  /* nitc.nit:37 */
   if (!once_value_67) {
-    fra.me.REG[2] = BOX_NativeString("Do not use a specialized algorithm to find reachable methods from initializers");
-    REGB0 = TAG_Int(78);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_67 = fra.me.REG[2];
+    fra.me.REG[3] = BOX_NativeString("NIT C library directory");
+    REGB0 = TAG_Int(23);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_67 = fra.me.REG[3];
     register_static_object(&once_value_67);
-  } else fra.me.REG[2] = once_value_67;
-  fra.me.REG[2] = fra.me.REG[2];
+  } else fra.me.REG[3] = once_value_67;
+  fra.me.REG[3] = fra.me.REG[3];
   REGB0 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_68) {
-    fra.me.REG[1] = BOX_NativeString("--no-global-RFIM-analysis");
-    REGB0 = TAG_Int(25);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_68 = fra.me.REG[1];
+    fra.me.REG[2] = BOX_NativeString("--clibdir");
+    REGB0 = TAG_Int(9);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_68 = fra.me.REG[2];
     register_static_object(&once_value_68);
-  } else fra.me.REG[1] = once_value_68;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  fra.me.REG[3] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[3]);
-  ATTR_global___ToolContext____opt_global_no_RFIMA(fra.me.REG[0]) = fra.me.REG[3];
-  /* global/global.nit:52 */
-  REGB0 = TAG_Int(3);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  } else fra.me.REG[2] = once_value_68;
+  fra.me.REG[2] = fra.me.REG[2];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[1] = NEW_OptionString_opts___OptionString___init(fra.me.REG[3], fra.me.REG[1]);
+  ATTR_nitc___NitCompiler____opt_clibdir(fra.me.REG[0]) = fra.me.REG[1];
+  /* nitc.nit:38 */
   if (!once_value_69) {
-    fra.me.REG[2] = BOX_NativeString("none");
-    REGB0 = TAG_Int(4);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_69 = fra.me.REG[2];
+    fra.me.REG[1] = BOX_NativeString("NIT tools directory");
+    REGB0 = TAG_Int(19);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_69 = fra.me.REG[1];
     register_static_object(&once_value_69);
-  } else fra.me.REG[2] = once_value_69;
-  fra.me.REG[2] = fra.me.REG[2];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
+  } else fra.me.REG[1] = once_value_69;
+  fra.me.REG[1] = fra.me.REG[1];
+  REGB0 = TAG_Int(0);
+  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_70) {
-    fra.me.REG[2] = BOX_NativeString("cha");
-    REGB0 = TAG_Int(3);
+    fra.me.REG[2] = BOX_NativeString("--bindir");
+    REGB0 = TAG_Int(8);
     fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
     once_value_70 = fra.me.REG[2];
     register_static_object(&once_value_70);
   } else fra.me.REG[2] = once_value_70;
   fra.me.REG[2] = fra.me.REG[2];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
+  fra.me.REG[3] = NEW_OptionString_opts___OptionString___init(fra.me.REG[1], fra.me.REG[3]);
+  ATTR_nitc___NitCompiler____opt_bindir(fra.me.REG[0]) = fra.me.REG[3];
+  /* nitc.nit:39 */
   if (!once_value_71) {
-    fra.me.REG[2] = BOX_NativeString("rta");
-    REGB0 = TAG_Int(3);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_71 = fra.me.REG[2];
+    fra.me.REG[3] = BOX_NativeString("Intermediate compilation directory");
+    REGB0 = TAG_Int(34);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_71 = fra.me.REG[3];
     register_static_object(&once_value_71);
-  } else fra.me.REG[2] = once_value_71;
-  fra.me.REG[2] = fra.me.REG[2];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
+  } else fra.me.REG[3] = once_value_71;
+  fra.me.REG[3] = fra.me.REG[3];
+  REGB0 = TAG_Int(0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_72) {
-    fra.me.REG[2] = BOX_NativeString("The algorithm to use to build the callgraph");
-    REGB0 = TAG_Int(43);
+    fra.me.REG[2] = BOX_NativeString("--compdir");
+    REGB0 = TAG_Int(9);
     fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
     once_value_72 = fra.me.REG[2];
     register_static_object(&once_value_72);
   } else fra.me.REG[2] = once_value_72;
   fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(2);
-  REGB1 = TAG_Int(0);
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[1] = NEW_OptionString_opts___OptionString___init(fra.me.REG[3], fra.me.REG[1]);
+  ATTR_nitc___NitCompiler____opt_compdir(fra.me.REG[0]) = fra.me.REG[1];
+  /* nitc.nit:40 */
   if (!once_value_73) {
-    fra.me.REG[4] = BOX_NativeString("--global-callgraph");
-    REGB1 = TAG_Int(18);
-    fra.me.REG[4] = NEW_String_standard___string___String___with_native(fra.me.REG[4], REGB1);
-    once_value_73 = fra.me.REG[4];
+    fra.me.REG[1] = BOX_NativeString("Append prefix to file extension");
+    REGB0 = TAG_Int(31);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_73 = fra.me.REG[1];
     register_static_object(&once_value_73);
-  } else fra.me.REG[4] = once_value_73;
-  fra.me.REG[4] = fra.me.REG[4];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  fra.me.REG[1] = NEW_OptionEnum_opts___OptionEnum___init(fra.me.REG[3], fra.me.REG[2], REGB0, fra.me.REG[1]);
-  ATTR_global___ToolContext____opt_global_callgraph(fra.me.REG[0]) = fra.me.REG[1];
-  /* program.nit:26 */
-  REGB0 = TAG_Bool(0);
-  ATTR_program___ToolContext____global(fra.me.REG[0]) = REGB0;
-  /* program.nit:27 */
-  REGB0 = TAG_Bool(1);
-  ATTR_program___ToolContext____use_SFT_optimization(fra.me.REG[0]) = REGB0;
-  /* separate_options.nit:29 */
-  fra.me.REG[1] = NEW_OptionContext_opts___OptionContext___init();
-  ATTR_separate_options___ToolContext_____atseparate_options(fra.me.REG[0]) = fra.me.REG[1];
-  /* separate_options.nit:30 */
+  } else fra.me.REG[1] = once_value_73;
+  fra.me.REG[1] = fra.me.REG[1];
+  REGB0 = TAG_Int(1);
+  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_74) {
-    fra.me.REG[1] = BOX_NativeString("Path to libraries for C compiler");
-    REGB0 = TAG_Int(32);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_74 = fra.me.REG[1];
+    fra.me.REG[2] = BOX_NativeString("-p");
+    REGB0 = TAG_Int(2);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_74 = fra.me.REG[2];
     register_static_object(&once_value_74);
-  } else fra.me.REG[1] = once_value_74;
-  fra.me.REG[1] = fra.me.REG[1];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  } else fra.me.REG[2] = once_value_74;
+  fra.me.REG[2] = fra.me.REG[2];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
   if (!once_value_75) {
-    fra.me.REG[3] = BOX_NativeString("--cc-lib-path");
-    REGB0 = TAG_Int(13);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_75 = fra.me.REG[3];
+    fra.me.REG[2] = BOX_NativeString("--extension-prefix");
+    REGB0 = TAG_Int(18);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_75 = fra.me.REG[2];
     register_static_object(&once_value_75);
-  } else fra.me.REG[3] = once_value_75;
-  fra.me.REG[3] = fra.me.REG[3];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  fra.me.REG[2] = NEW_OptionArray_opts___OptionArray___init(fra.me.REG[1], fra.me.REG[2]);
-  ATTR_separate_options___ToolContext_____atopt_cc_lib_paths(fra.me.REG[0]) = fra.me.REG[2];
-  /* separate_options.nit:31 */
+  } else fra.me.REG[2] = once_value_75;
+  fra.me.REG[2] = fra.me.REG[2];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
+  fra.me.REG[3] = NEW_OptionString_opts___OptionString___init(fra.me.REG[1], fra.me.REG[3]);
+  ATTR_nitc___NitCompiler____opt_extension_prefix(fra.me.REG[0]) = fra.me.REG[3];
+  /* nitc.nit:41 */
+  REGB0 = TAG_Int(3);
+  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_76) {
-    fra.me.REG[2] = BOX_NativeString("Name of library to use for C compiler");
-    REGB0 = TAG_Int(37);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_76 = fra.me.REG[2];
+    fra.me.REG[1] = BOX_NativeString("none");
+    REGB0 = TAG_Int(4);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_76 = fra.me.REG[1];
     register_static_object(&once_value_76);
-  } else fra.me.REG[2] = once_value_76;
-  fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  } else fra.me.REG[1] = once_value_76;
+  fra.me.REG[1] = fra.me.REG[1];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
   if (!once_value_77) {
-    fra.me.REG[3] = BOX_NativeString("--cc-lib-name");
-    REGB0 = TAG_Int(13);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_77 = fra.me.REG[3];
+    fra.me.REG[1] = BOX_NativeString("C");
+    REGB0 = TAG_Int(1);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_77 = fra.me.REG[1];
     register_static_object(&once_value_77);
-  } else fra.me.REG[3] = once_value_77;
-  fra.me.REG[3] = fra.me.REG[3];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  fra.me.REG[1] = NEW_OptionArray_opts___OptionArray___init(fra.me.REG[2], fra.me.REG[1]);
-  ATTR_separate_options___ToolContext_____atopt_cc_libs(fra.me.REG[0]) = fra.me.REG[1];
-  /* separate_options.nit:32 */
+  } else fra.me.REG[1] = once_value_77;
+  fra.me.REG[1] = fra.me.REG[1];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
   if (!once_value_78) {
-    fra.me.REG[1] = BOX_NativeString("Path to .h files for C compiler");
-    REGB0 = TAG_Int(31);
+    fra.me.REG[1] = BOX_NativeString("icode");
+    REGB0 = TAG_Int(5);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_78 = fra.me.REG[1];
     register_static_object(&once_value_78);
   } else fra.me.REG[1] = once_value_78;
   fra.me.REG[1] = fra.me.REG[1];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
   if (!once_value_79) {
-    fra.me.REG[3] = BOX_NativeString("--cc-header-path");
-    REGB0 = TAG_Int(16);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_79 = fra.me.REG[3];
+    fra.me.REG[1] = BOX_NativeString("The type of code we want to be generated");
+    REGB0 = TAG_Int(40);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_79 = fra.me.REG[1];
     register_static_object(&once_value_79);
-  } else fra.me.REG[3] = once_value_79;
-  fra.me.REG[3] = fra.me.REG[3];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  fra.me.REG[2] = NEW_OptionArray_opts___OptionArray___init(fra.me.REG[1], fra.me.REG[2]);
-  ATTR_separate_options___ToolContext_____atopt_cc_include_paths(fra.me.REG[0]) = fra.me.REG[2];
-  /* compiling/compiling_base.nit:27 */
-  fra.me.REG[2] = NIT_NULL;
-  ATTR_compiling___compiling_base___ToolContext____compdir(fra.me.REG[0]) = fra.me.REG[2];
-  /* compiling/compiling_base.nit:28 */
-  fra.me.REG[2] = NIT_NULL;
-  ATTR_compiling___compiling_base___ToolContext____clibdir(fra.me.REG[0]) = fra.me.REG[2];
-  /* compiling/compiling_base.nit:29 */
-  fra.me.REG[2] = NIT_NULL;
-  ATTR_compiling___compiling_base___ToolContext____bindir(fra.me.REG[0]) = fra.me.REG[2];
-  /* compiling/compiling_base.nit:30 */
-  fra.me.REG[2] = NIT_NULL;
-  ATTR_compiling___compiling_base___ToolContext____output_file(fra.me.REG[0]) = fra.me.REG[2];
-  /* compiling/compiling_base.nit:31 */
-  REGB0 = TAG_Bool(0);
-  ATTR_compiling___compiling_base___ToolContext____boost(fra.me.REG[0]) = REGB0;
-  /* compiling/compiling_base.nit:32 */
-  REGB0 = TAG_Bool(0);
-  ATTR_compiling___compiling_base___ToolContext____no_cc(fra.me.REG[0]) = REGB0;
-  /* compiling/compiling_base.nit:33 */
-  REGB0 = TAG_Bool(0);
-  ATTR_compiling___compiling_base___ToolContext____cc_link(fra.me.REG[0]) = REGB0;
-  /* compiling/compiling_base.nit:34 */
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_compiling___compiling_base___ToolContext____cc_libs(fra.me.REG[0]) = fra.me.REG[2];
-  /* compiling/compiling_base.nit:35 */
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_compiling___compiling_base___ToolContext____cc_lib_paths(fra.me.REG[0]) = fra.me.REG[2];
-  /* compiling/compiling_base.nit:36 */
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_compiling___compiling_base___ToolContext____cc_include_paths(fra.me.REG[0]) = fra.me.REG[2];
-  /* compiling/compiling_base.nit:37 */
+  } else fra.me.REG[1] = once_value_79;
+  fra.me.REG[1] = fra.me.REG[1];
+  REGB0 = TAG_Int(1);
+  REGB1 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
   if (!once_value_80) {
-    fra.me.REG[2] = BOX_NativeString("");
-    REGB0 = TAG_Int(0);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_80 = fra.me.REG[2];
+    fra.me.REG[4] = BOX_NativeString("--output-format");
+    REGB1 = TAG_Int(15);
+    fra.me.REG[4] = NEW_String_standard___string___String___with_native(fra.me.REG[4], REGB1);
+    once_value_80 = fra.me.REG[4];
     register_static_object(&once_value_80);
-  } else fra.me.REG[2] = once_value_80;
-  fra.me.REG[2] = fra.me.REG[2];
-  ATTR_compiling___compiling_base___ToolContext____ext_prefix(fra.me.REG[0]) = fra.me.REG[2];
+  } else fra.me.REG[4] = once_value_80;
+  fra.me.REG[4] = fra.me.REG[4];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  fra.me.REG[2] = NEW_OptionEnum_opts___OptionEnum___init(fra.me.REG[3], fra.me.REG[1], REGB0, fra.me.REG[2]);
+  ATTR_nitc___NitCompiler____opt_output_format(fra.me.REG[0]) = fra.me.REG[2];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_nitc___NitCompiler(void)
@@ -14340,688 +15807,688 @@ void INIT_ATTRIBUTES__toolcontext___ToolContext(val_t p0){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* global/global.nit:44 */
+  /* metamodel/abstractmetamodel.nit:31 */
+  fra.me.REG[1] = NEW_PartialOrder_metamodel___partial_order___PartialOrder___init();
+  ATTR_metamodel___abstractmetamodel___MMContext____module_hierarchy(fra.me.REG[0]) = fra.me.REG[1];
+  /* metamodel/abstractmetamodel.nit:35 */
+  fra.me.REG[1] = NEW_PartialOrder_metamodel___partial_order___PartialOrder___init();
+  ATTR_metamodel___abstractmetamodel___MMContext____class_hierarchy(fra.me.REG[0]) = fra.me.REG[1];
+  /* metamodel/abstractmetamodel.nit:38 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_metamodel___abstractmetamodel___MMContext____global_classes(fra.me.REG[0]) = fra.me.REG[1];
+  /* metamodel/abstractmetamodel.nit:41 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_metamodel___abstractmetamodel___MMContext____modules(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:73 */
+  REGB0 = TAG_Int(0);
+  ATTR_toolcontext___ToolContext____error_count(fra.me.REG[0]) = REGB0;
+  /* toolcontext.nit:76 */
+  REGB0 = TAG_Int(0);
+  ATTR_toolcontext___ToolContext____warning_count(fra.me.REG[0]) = REGB0;
+  /* toolcontext.nit:79 */
   if (!once_value_1) {
-    fra.me.REG[1] = BOX_NativeString("rta");
-    REGB0 = TAG_Int(3);
+    fra.me.REG[1] = BOX_NativeString("logs");
+    REGB0 = TAG_Int(4);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_1 = fra.me.REG[1];
     register_static_object(&once_value_1);
   } else fra.me.REG[1] = once_value_1;
   fra.me.REG[1] = fra.me.REG[1];
-  ATTR_global___ToolContext____global_callgraph(fra.me.REG[0]) = fra.me.REG[1];
-  /* global/global.nit:46 */
+  ATTR_toolcontext___ToolContext____log_directory(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:82 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_toolcontext___ToolContext____messages(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:83 */
+  fra.me.REG[1] = NEW_ComparableSorter_standard___collection___sorter___ComparableSorter___init();
+  ATTR_toolcontext___ToolContext____message_sorter(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:137 */
+  fra.me.REG[1] = NEW_OptionContext_opts___OptionContext___init();
+  ATTR_toolcontext___ToolContext____option_context(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:140 */
   if (!once_value_2) {
-    fra.me.REG[1] = BOX_NativeString("Use global compilation");
-    REGB0 = TAG_Int(22);
+    fra.me.REG[1] = BOX_NativeString("Show warnings");
+    REGB0 = TAG_Int(13);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_2 = fra.me.REG[1];
     register_static_object(&once_value_2);
   } else fra.me.REG[1] = once_value_2;
   fra.me.REG[1] = fra.me.REG[1];
-  REGB0 = TAG_Int(0);
+  REGB0 = TAG_Int(1);
   fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_3) {
-    fra.me.REG[3] = BOX_NativeString("--global");
-    REGB0 = TAG_Int(8);
+    fra.me.REG[3] = BOX_NativeString("-W");
+    REGB0 = TAG_Int(2);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_3 = fra.me.REG[3];
     register_static_object(&once_value_3);
   } else fra.me.REG[3] = once_value_3;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
-  ATTR_global___ToolContext____opt_global(fra.me.REG[0]) = fra.me.REG[2];
-  /* global/global.nit:47 */
   if (!once_value_4) {
-    fra.me.REG[2] = BOX_NativeString("Do not use SFT optimization");
-    REGB0 = TAG_Int(27);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_4 = fra.me.REG[2];
+    fra.me.REG[3] = BOX_NativeString("--warn");
+    REGB0 = TAG_Int(6);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_4 = fra.me.REG[3];
     register_static_object(&once_value_4);
-  } else fra.me.REG[2] = once_value_4;
+  } else fra.me.REG[3] = once_value_4;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionCount_opts___OptionCount___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_toolcontext___ToolContext____opt_warn(fra.me.REG[0]) = fra.me.REG[2];
+  /* toolcontext.nit:143 */
+  if (!once_value_5) {
+    fra.me.REG[2] = BOX_NativeString("Do not show warnings");
+    REGB0 = TAG_Int(20);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_5 = fra.me.REG[2];
+    register_static_object(&once_value_5);
+  } else fra.me.REG[2] = once_value_5;
   fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(0);
+  REGB0 = TAG_Int(1);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
-  if (!once_value_5) {
-    fra.me.REG[3] = BOX_NativeString("--no-global-SFT-optimization");
-    REGB0 = TAG_Int(28);
+  if (!once_value_6) {
+    fra.me.REG[3] = BOX_NativeString("-q");
+    REGB0 = TAG_Int(2);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_5 = fra.me.REG[3];
-    register_static_object(&once_value_5);
-  } else fra.me.REG[3] = once_value_5;
+    once_value_6 = fra.me.REG[3];
+    register_static_object(&once_value_6);
+  } else fra.me.REG[3] = once_value_6;
   fra.me.REG[3] = fra.me.REG[3];
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
-  ATTR_global___ToolContext____opt_global_no_STF_opt(fra.me.REG[0]) = fra.me.REG[1];
-  /* global/global.nit:48 */
-  if (!once_value_6) {
-    fra.me.REG[1] = BOX_NativeString("Do not use dead method removal optimization");
-    REGB0 = TAG_Int(43);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_6 = fra.me.REG[1];
-    register_static_object(&once_value_6);
-  } else fra.me.REG[1] = once_value_6;
-  fra.me.REG[1] = fra.me.REG[1];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_7) {
-    fra.me.REG[3] = BOX_NativeString("--no-global-DMR-optimization");
-    REGB0 = TAG_Int(28);
+    fra.me.REG[3] = BOX_NativeString("--quiet");
+    REGB0 = TAG_Int(7);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_7 = fra.me.REG[3];
     register_static_object(&once_value_7);
   } else fra.me.REG[3] = once_value_7;
   fra.me.REG[3] = fra.me.REG[3];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
-  ATTR_global___ToolContext____opt_global_no_DMR_opt(fra.me.REG[0]) = fra.me.REG[2];
-  /* global/global.nit:49 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_toolcontext___ToolContext____opt_quiet(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:146 */
   if (!once_value_8) {
-    fra.me.REG[2] = BOX_NativeString("Do not automatically inline getters/setters");
-    REGB0 = TAG_Int(43);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_8 = fra.me.REG[2];
+    fra.me.REG[1] = BOX_NativeString("Generate various log files");
+    REGB0 = TAG_Int(26);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_8 = fra.me.REG[1];
     register_static_object(&once_value_8);
-  } else fra.me.REG[2] = once_value_8;
-  fra.me.REG[2] = fra.me.REG[2];
+  } else fra.me.REG[1] = once_value_8;
+  fra.me.REG[1] = fra.me.REG[1];
   REGB0 = TAG_Int(0);
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_9) {
-    fra.me.REG[3] = BOX_NativeString("--no-global-get-set-inlining");
-    REGB0 = TAG_Int(28);
+    fra.me.REG[3] = BOX_NativeString("--log");
+    REGB0 = TAG_Int(5);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_9 = fra.me.REG[3];
     register_static_object(&once_value_9);
   } else fra.me.REG[3] = once_value_9;
   fra.me.REG[3] = fra.me.REG[3];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
-  ATTR_global___ToolContext____opt_global_no_inline_get_set(fra.me.REG[0]) = fra.me.REG[1];
-  /* global/global.nit:50 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_toolcontext___ToolContext____opt_log(fra.me.REG[0]) = fra.me.REG[2];
+  /* toolcontext.nit:149 */
   if (!once_value_10) {
-    fra.me.REG[1] = BOX_NativeString("Do not remove get tests outside object initialization");
-    REGB0 = TAG_Int(53);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_10 = fra.me.REG[1];
+    fra.me.REG[2] = BOX_NativeString("Directory where to generate log files");
+    REGB0 = TAG_Int(37);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_10 = fra.me.REG[2];
     register_static_object(&once_value_10);
-  } else fra.me.REG[1] = once_value_10;
-  fra.me.REG[1] = fra.me.REG[1];
+  } else fra.me.REG[2] = once_value_10;
+  fra.me.REG[2] = fra.me.REG[2];
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_11) {
-    fra.me.REG[3] = BOX_NativeString("--no-global-OOIT-optimization");
-    REGB0 = TAG_Int(29);
+    fra.me.REG[3] = BOX_NativeString("--log-dir");
+    REGB0 = TAG_Int(9);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_11 = fra.me.REG[3];
     register_static_object(&once_value_11);
   } else fra.me.REG[3] = once_value_11;
   fra.me.REG[3] = fra.me.REG[3];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
-  ATTR_global___ToolContext____opt_global_no_out_of_init_get_test_opt(fra.me.REG[0]) = fra.me.REG[2];
-  /* global/global.nit:51 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionString_opts___OptionString___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_toolcontext___ToolContext____opt_log_dir(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:152 */
   if (!once_value_12) {
-    fra.me.REG[2] = BOX_NativeString("Do not use a specialized algorithm to find reachable methods from initializers");
-    REGB0 = TAG_Int(78);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_12 = fra.me.REG[2];
+    fra.me.REG[1] = BOX_NativeString("Show Help (This screen)");
+    REGB0 = TAG_Int(23);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_12 = fra.me.REG[1];
     register_static_object(&once_value_12);
-  } else fra.me.REG[2] = once_value_12;
-  fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  } else fra.me.REG[1] = once_value_12;
+  fra.me.REG[1] = fra.me.REG[1];
+  REGB0 = TAG_Int(2);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_13) {
-    fra.me.REG[3] = BOX_NativeString("--no-global-RFIM-analysis");
-    REGB0 = TAG_Int(25);
+    fra.me.REG[3] = BOX_NativeString("-h");
+    REGB0 = TAG_Int(2);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_13 = fra.me.REG[3];
     register_static_object(&once_value_13);
   } else fra.me.REG[3] = once_value_13;
   fra.me.REG[3] = fra.me.REG[3];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
-  ATTR_global___ToolContext____opt_global_no_RFIMA(fra.me.REG[0]) = fra.me.REG[1];
-  /* global/global.nit:52 */
-  REGB0 = TAG_Int(3);
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   if (!once_value_14) {
-    fra.me.REG[2] = BOX_NativeString("none");
-    REGB0 = TAG_Int(4);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_14 = fra.me.REG[2];
+    fra.me.REG[3] = BOX_NativeString("-?");
+    REGB0 = TAG_Int(2);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_14 = fra.me.REG[3];
     register_static_object(&once_value_14);
-  } else fra.me.REG[2] = once_value_14;
-  fra.me.REG[2] = fra.me.REG[2];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  } else fra.me.REG[3] = once_value_14;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   if (!once_value_15) {
-    fra.me.REG[2] = BOX_NativeString("cha");
-    REGB0 = TAG_Int(3);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_15 = fra.me.REG[2];
+    fra.me.REG[3] = BOX_NativeString("--help");
+    REGB0 = TAG_Int(6);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_15 = fra.me.REG[3];
     register_static_object(&once_value_15);
-  } else fra.me.REG[2] = once_value_15;
-  fra.me.REG[2] = fra.me.REG[2];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  } else fra.me.REG[3] = once_value_15;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_toolcontext___ToolContext____opt_help(fra.me.REG[0]) = fra.me.REG[2];
+  /* toolcontext.nit:155 */
   if (!once_value_16) {
-    fra.me.REG[2] = BOX_NativeString("rta");
-    REGB0 = TAG_Int(3);
+    fra.me.REG[2] = BOX_NativeString("Show version and exit");
+    REGB0 = TAG_Int(21);
     fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
     once_value_16 = fra.me.REG[2];
     register_static_object(&once_value_16);
   } else fra.me.REG[2] = once_value_16;
   fra.me.REG[2] = fra.me.REG[2];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Int(0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_17) {
-    fra.me.REG[2] = BOX_NativeString("The algorithm to use to build the callgraph");
-    REGB0 = TAG_Int(43);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_17 = fra.me.REG[2];
+    fra.me.REG[3] = BOX_NativeString("--version");
+    REGB0 = TAG_Int(9);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_17 = fra.me.REG[3];
     register_static_object(&once_value_17);
-  } else fra.me.REG[2] = once_value_17;
-  fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(2);
-  REGB1 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
+  } else fra.me.REG[3] = once_value_17;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_toolcontext___ToolContext____opt_version(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:158 */
   if (!once_value_18) {
-    fra.me.REG[4] = BOX_NativeString("--global-callgraph");
-    REGB1 = TAG_Int(18);
-    fra.me.REG[4] = NEW_String_standard___string___String___with_native(fra.me.REG[4], REGB1);
-    once_value_18 = fra.me.REG[4];
+    fra.me.REG[1] = BOX_NativeString("Verbose");
+    REGB0 = TAG_Int(7);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_18 = fra.me.REG[1];
     register_static_object(&once_value_18);
-  } else fra.me.REG[4] = once_value_18;
-  fra.me.REG[4] = fra.me.REG[4];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[3] = NEW_OptionEnum_opts___OptionEnum___init(fra.me.REG[1], fra.me.REG[2], REGB0, fra.me.REG[3]);
-  ATTR_global___ToolContext____opt_global_callgraph(fra.me.REG[0]) = fra.me.REG[3];
-  /* syntax/syntax.nit:100 */
-  REGB0 = TAG_Bool(0);
-  ATTR_syntax___ToolContext____keep_ast(fra.me.REG[0]) = REGB0;
-  /* mmloader.nit:30 */
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_mmloader___ToolContext____paths(fra.me.REG[0]) = fra.me.REG[3];
-  /* mmloader.nit:33 */
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_mmloader___ToolContext____loaders(fra.me.REG[0]) = fra.me.REG[3];
-  /* mmloader.nit:36 */
+  } else fra.me.REG[1] = once_value_18;
+  fra.me.REG[1] = fra.me.REG[1];
+  REGB0 = TAG_Int(1);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_19) {
-    fra.me.REG[3] = BOX_NativeString("Set include path for loaders (may be used more than once)");
-    REGB0 = TAG_Int(57);
+    fra.me.REG[3] = BOX_NativeString("-v");
+    REGB0 = TAG_Int(2);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_19 = fra.me.REG[3];
     register_static_object(&once_value_19);
   } else fra.me.REG[3] = once_value_19;
   fra.me.REG[3] = fra.me.REG[3];
-  REGB0 = TAG_Int(1);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   if (!once_value_20) {
-    fra.me.REG[1] = BOX_NativeString("-I");
-    REGB0 = TAG_Int(2);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_20 = fra.me.REG[1];
+    fra.me.REG[3] = BOX_NativeString("--verbose");
+    REGB0 = TAG_Int(9);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_20 = fra.me.REG[3];
     register_static_object(&once_value_20);
-  } else fra.me.REG[1] = once_value_20;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
+  } else fra.me.REG[3] = once_value_20;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionCount_opts___OptionCount___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_toolcontext___ToolContext____opt_verbose(fra.me.REG[0]) = fra.me.REG[2];
+  /* toolcontext.nit:161 */
   if (!once_value_21) {
-    fra.me.REG[1] = BOX_NativeString("--path");
-    REGB0 = TAG_Int(6);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_21 = fra.me.REG[1];
-    register_static_object(&once_value_21);
-  } else fra.me.REG[1] = once_value_21;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionArray_opts___OptionArray___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_mmloader___ToolContext____opt_path(fra.me.REG[0]) = fra.me.REG[2];
-  /* mmloader.nit:39 */
-  if (!once_value_22) {
-    fra.me.REG[2] = BOX_NativeString("Stop after meta-model processing");
-    REGB0 = TAG_Int(32);
+    fra.me.REG[2] = BOX_NativeString("Stop on first error");
+    REGB0 = TAG_Int(19);
     fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_22 = fra.me.REG[2];
-    register_static_object(&once_value_22);
-  } else fra.me.REG[2] = once_value_22;
+    once_value_21 = fra.me.REG[2];
+    register_static_object(&once_value_21);
+  } else fra.me.REG[2] = once_value_21;
   fra.me.REG[2] = fra.me.REG[2];
   REGB0 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  if (!once_value_22) {
+    fra.me.REG[3] = BOX_NativeString("--stop-on-first-error");
+    REGB0 = TAG_Int(21);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_22 = fra.me.REG[3];
+    register_static_object(&once_value_22);
+  } else fra.me.REG[3] = once_value_22;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_toolcontext___ToolContext____opt_stop_on_first_error(fra.me.REG[0]) = fra.me.REG[1];
+  /* toolcontext.nit:164 */
   if (!once_value_23) {
-    fra.me.REG[1] = BOX_NativeString("--only-metamodel");
-    REGB0 = TAG_Int(16);
+    fra.me.REG[1] = BOX_NativeString("Do not use color to display errors and warnings");
+    REGB0 = TAG_Int(47);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_23 = fra.me.REG[1];
     register_static_object(&once_value_23);
   } else fra.me.REG[1] = once_value_23;
   fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  fra.me.REG[3] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[3]);
-  ATTR_mmloader___ToolContext____opt_only_metamodel(fra.me.REG[0]) = fra.me.REG[3];
-  /* mmloader.nit:42 */
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_24) {
-    fra.me.REG[3] = BOX_NativeString("Only proceed to parse step of loaders");
-    REGB0 = TAG_Int(37);
+    fra.me.REG[3] = BOX_NativeString("--no-color");
+    REGB0 = TAG_Int(10);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_24 = fra.me.REG[3];
     register_static_object(&once_value_24);
   } else fra.me.REG[3] = once_value_24;
   fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_toolcontext___ToolContext____opt_no_color(fra.me.REG[0]) = fra.me.REG[2];
+  /* toolcontext.nit:167 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  ATTR_toolcontext___ToolContext____verbose_level(fra.me.REG[0]) = REGB0;
+  /* mmloader.nit:30 */
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_mmloader___ToolContext____paths(fra.me.REG[0]) = fra.me.REG[2];
+  /* mmloader.nit:33 */
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_mmloader___ToolContext____loaders(fra.me.REG[0]) = fra.me.REG[2];
+  /* mmloader.nit:36 */
   if (!once_value_25) {
-    fra.me.REG[1] = BOX_NativeString("--only-parse");
-    REGB0 = TAG_Int(12);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_25 = fra.me.REG[1];
+    fra.me.REG[2] = BOX_NativeString("Set include path for loaders (may be used more than once)");
+    REGB0 = TAG_Int(57);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_25 = fra.me.REG[2];
     register_static_object(&once_value_25);
-  } else fra.me.REG[1] = once_value_25;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_mmloader___ToolContext____opt_only_parse(fra.me.REG[0]) = fra.me.REG[2];
-  /* mmloader.nit:115 */
-  fra.me.REG[2] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
-  ATTR_mmloader___ToolContext____processing_modules(fra.me.REG[0]) = fra.me.REG[2];
-  /* mmloader.nit:182 */
-  fra.me.REG[2] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
-  ATTR_mmloader___ToolContext____path_dirs(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:73 */
-  REGB0 = TAG_Int(0);
-  ATTR_toolcontext___ToolContext____error_count(fra.me.REG[0]) = REGB0;
-  /* toolcontext.nit:76 */
-  REGB0 = TAG_Int(0);
-  ATTR_toolcontext___ToolContext____warning_count(fra.me.REG[0]) = REGB0;
-  /* toolcontext.nit:79 */
+  } else fra.me.REG[2] = once_value_25;
+  fra.me.REG[2] = fra.me.REG[2];
+  REGB0 = TAG_Int(1);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_26) {
-    fra.me.REG[2] = BOX_NativeString("logs");
-    REGB0 = TAG_Int(4);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_26 = fra.me.REG[2];
+    fra.me.REG[3] = BOX_NativeString("-I");
+    REGB0 = TAG_Int(2);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_26 = fra.me.REG[3];
     register_static_object(&once_value_26);
-  } else fra.me.REG[2] = once_value_26;
-  fra.me.REG[2] = fra.me.REG[2];
-  ATTR_toolcontext___ToolContext____log_directory(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:82 */
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_toolcontext___ToolContext____messages(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:83 */
-  fra.me.REG[2] = NEW_ComparableSorter_standard___collection___sorter___ComparableSorter___init();
-  ATTR_toolcontext___ToolContext____message_sorter(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:137 */
-  fra.me.REG[2] = NEW_OptionContext_opts___OptionContext___init();
-  ATTR_toolcontext___ToolContext____option_context(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:140 */
+  } else fra.me.REG[3] = once_value_26;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   if (!once_value_27) {
-    fra.me.REG[2] = BOX_NativeString("Show warnings");
-    REGB0 = TAG_Int(13);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_27 = fra.me.REG[2];
+    fra.me.REG[3] = BOX_NativeString("--path");
+    REGB0 = TAG_Int(6);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_27 = fra.me.REG[3];
     register_static_object(&once_value_27);
-  } else fra.me.REG[2] = once_value_27;
-  fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(1);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  } else fra.me.REG[3] = once_value_27;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionArray_opts___OptionArray___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_mmloader___ToolContext____opt_path(fra.me.REG[0]) = fra.me.REG[1];
+  /* mmloader.nit:39 */
   if (!once_value_28) {
-    fra.me.REG[1] = BOX_NativeString("-W");
-    REGB0 = TAG_Int(2);
+    fra.me.REG[1] = BOX_NativeString("Stop after meta-model processing");
+    REGB0 = TAG_Int(32);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_28 = fra.me.REG[1];
     register_static_object(&once_value_28);
   } else fra.me.REG[1] = once_value_28;
   fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_29) {
-    fra.me.REG[1] = BOX_NativeString("--warn");
-    REGB0 = TAG_Int(6);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_29 = fra.me.REG[1];
+    fra.me.REG[3] = BOX_NativeString("--only-metamodel");
+    REGB0 = TAG_Int(16);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_29 = fra.me.REG[3];
     register_static_object(&once_value_29);
-  } else fra.me.REG[1] = once_value_29;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  fra.me.REG[3] = NEW_OptionCount_opts___OptionCount___init(fra.me.REG[2], fra.me.REG[3]);
-  ATTR_toolcontext___ToolContext____opt_warn(fra.me.REG[0]) = fra.me.REG[3];
-  /* toolcontext.nit:143 */
+  } else fra.me.REG[3] = once_value_29;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_mmloader___ToolContext____opt_only_metamodel(fra.me.REG[0]) = fra.me.REG[2];
+  /* mmloader.nit:42 */
   if (!once_value_30) {
-    fra.me.REG[3] = BOX_NativeString("Do not show warnings");
-    REGB0 = TAG_Int(20);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_30 = fra.me.REG[3];
+    fra.me.REG[2] = BOX_NativeString("Only proceed to parse step of loaders");
+    REGB0 = TAG_Int(37);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_30 = fra.me.REG[2];
     register_static_object(&once_value_30);
-  } else fra.me.REG[3] = once_value_30;
-  fra.me.REG[3] = fra.me.REG[3];
-  REGB0 = TAG_Int(1);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  } else fra.me.REG[2] = once_value_30;
+  fra.me.REG[2] = fra.me.REG[2];
+  REGB0 = TAG_Int(0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_31) {
-    fra.me.REG[1] = BOX_NativeString("-q");
-    REGB0 = TAG_Int(2);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_31 = fra.me.REG[1];
+    fra.me.REG[3] = BOX_NativeString("--only-parse");
+    REGB0 = TAG_Int(12);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_31 = fra.me.REG[3];
     register_static_object(&once_value_31);
-  } else fra.me.REG[1] = once_value_31;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
+  } else fra.me.REG[3] = once_value_31;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_mmloader___ToolContext____opt_only_parse(fra.me.REG[0]) = fra.me.REG[1];
+  /* mmloader.nit:115 */
+  fra.me.REG[1] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
+  ATTR_mmloader___ToolContext____processing_modules(fra.me.REG[0]) = fra.me.REG[1];
+  /* mmloader.nit:182 */
+  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
+  ATTR_mmloader___ToolContext____path_dirs(fra.me.REG[0]) = fra.me.REG[1];
+  /* program.nit:26 */
+  REGB0 = TAG_Bool(0);
+  ATTR_program___ToolContext____global(fra.me.REG[0]) = REGB0;
+  /* program.nit:27 */
+  REGB0 = TAG_Bool(1);
+  ATTR_program___ToolContext____use_SFT_optimization(fra.me.REG[0]) = REGB0;
+  /* compiling/compiling_base.nit:27 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_compiling___compiling_base___ToolContext____compdir(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/compiling_base.nit:28 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_compiling___compiling_base___ToolContext____clibdir(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/compiling_base.nit:29 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_compiling___compiling_base___ToolContext____bindir(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/compiling_base.nit:30 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_compiling___compiling_base___ToolContext____output_file(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/compiling_base.nit:31 */
+  REGB0 = TAG_Bool(0);
+  ATTR_compiling___compiling_base___ToolContext____boost(fra.me.REG[0]) = REGB0;
+  /* compiling/compiling_base.nit:32 */
+  REGB0 = TAG_Bool(0);
+  ATTR_compiling___compiling_base___ToolContext____no_cc(fra.me.REG[0]) = REGB0;
+  /* compiling/compiling_base.nit:33 */
+  REGB0 = TAG_Bool(0);
+  ATTR_compiling___compiling_base___ToolContext____cc_link(fra.me.REG[0]) = REGB0;
+  /* compiling/compiling_base.nit:34 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_compiling___compiling_base___ToolContext____cc_libs(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/compiling_base.nit:35 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_compiling___compiling_base___ToolContext____cc_lib_paths(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/compiling_base.nit:36 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_compiling___compiling_base___ToolContext____cc_include_paths(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/compiling_base.nit:37 */
   if (!once_value_32) {
-    fra.me.REG[1] = BOX_NativeString("--quiet");
-    REGB0 = TAG_Int(7);
+    fra.me.REG[1] = BOX_NativeString("");
+    REGB0 = TAG_Int(0);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_32 = fra.me.REG[1];
     register_static_object(&once_value_32);
   } else fra.me.REG[1] = once_value_32;
   fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_toolcontext___ToolContext____opt_quiet(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:146 */
+  ATTR_compiling___compiling_base___ToolContext____ext_prefix(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/syntax.nit:100 */
+  REGB0 = TAG_Bool(0);
+  ATTR_syntax___ToolContext____keep_ast(fra.me.REG[0]) = REGB0;
+  /* separate_options.nit:29 */
+  fra.me.REG[1] = NEW_OptionContext_opts___OptionContext___init();
+  ATTR_separate_options___ToolContext_____atseparate_options(fra.me.REG[0]) = fra.me.REG[1];
+  /* separate_options.nit:30 */
   if (!once_value_33) {
-    fra.me.REG[2] = BOX_NativeString("Generate various log files");
-    REGB0 = TAG_Int(26);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_33 = fra.me.REG[2];
+    fra.me.REG[1] = BOX_NativeString("Path to libraries for C compiler");
+    REGB0 = TAG_Int(32);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_33 = fra.me.REG[1];
     register_static_object(&once_value_33);
-  } else fra.me.REG[2] = once_value_33;
-  fra.me.REG[2] = fra.me.REG[2];
+  } else fra.me.REG[1] = once_value_33;
+  fra.me.REG[1] = fra.me.REG[1];
   REGB0 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_34) {
-    fra.me.REG[1] = BOX_NativeString("--log");
-    REGB0 = TAG_Int(5);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_34 = fra.me.REG[1];
+    fra.me.REG[3] = BOX_NativeString("--cc-lib-path");
+    REGB0 = TAG_Int(13);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_34 = fra.me.REG[3];
     register_static_object(&once_value_34);
-  } else fra.me.REG[1] = once_value_34;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  fra.me.REG[3] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[3]);
-  ATTR_toolcontext___ToolContext____opt_log(fra.me.REG[0]) = fra.me.REG[3];
-  /* toolcontext.nit:149 */
+  } else fra.me.REG[3] = once_value_34;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionArray_opts___OptionArray___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_separate_options___ToolContext_____atopt_cc_lib_paths(fra.me.REG[0]) = fra.me.REG[2];
+  /* separate_options.nit:31 */
   if (!once_value_35) {
-    fra.me.REG[3] = BOX_NativeString("Directory where to generate log files");
+    fra.me.REG[2] = BOX_NativeString("Name of library to use for C compiler");
     REGB0 = TAG_Int(37);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_35 = fra.me.REG[3];
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_35 = fra.me.REG[2];
     register_static_object(&once_value_35);
-  } else fra.me.REG[3] = once_value_35;
-  fra.me.REG[3] = fra.me.REG[3];
+  } else fra.me.REG[2] = once_value_35;
+  fra.me.REG[2] = fra.me.REG[2];
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_36) {
-    fra.me.REG[1] = BOX_NativeString("--log-dir");
-    REGB0 = TAG_Int(9);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_36 = fra.me.REG[1];
+    fra.me.REG[3] = BOX_NativeString("--cc-lib-name");
+    REGB0 = TAG_Int(13);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_36 = fra.me.REG[3];
     register_static_object(&once_value_36);
-  } else fra.me.REG[1] = once_value_36;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionString_opts___OptionString___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_toolcontext___ToolContext____opt_log_dir(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:152 */
+  } else fra.me.REG[3] = once_value_36;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionArray_opts___OptionArray___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_separate_options___ToolContext_____atopt_cc_libs(fra.me.REG[0]) = fra.me.REG[1];
+  /* separate_options.nit:32 */
   if (!once_value_37) {
-    fra.me.REG[2] = BOX_NativeString("Show Help (This screen)");
-    REGB0 = TAG_Int(23);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_37 = fra.me.REG[2];
+    fra.me.REG[1] = BOX_NativeString("Path to .h files for C compiler");
+    REGB0 = TAG_Int(31);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_37 = fra.me.REG[1];
     register_static_object(&once_value_37);
-  } else fra.me.REG[2] = once_value_37;
-  fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(2);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  } else fra.me.REG[1] = once_value_37;
+  fra.me.REG[1] = fra.me.REG[1];
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_38) {
-    fra.me.REG[1] = BOX_NativeString("-h");
-    REGB0 = TAG_Int(2);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_38 = fra.me.REG[1];
+    fra.me.REG[3] = BOX_NativeString("--cc-header-path");
+    REGB0 = TAG_Int(16);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_38 = fra.me.REG[3];
     register_static_object(&once_value_38);
-  } else fra.me.REG[1] = once_value_38;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+  } else fra.me.REG[3] = once_value_38;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionArray_opts___OptionArray___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_separate_options___ToolContext_____atopt_cc_include_paths(fra.me.REG[0]) = fra.me.REG[2];
+  /* global/global.nit:44 */
   if (!once_value_39) {
-    fra.me.REG[1] = BOX_NativeString("-?");
-    REGB0 = TAG_Int(2);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_39 = fra.me.REG[1];
+    fra.me.REG[2] = BOX_NativeString("rta");
+    REGB0 = TAG_Int(3);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_39 = fra.me.REG[2];
     register_static_object(&once_value_39);
-  } else fra.me.REG[1] = once_value_39;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+  } else fra.me.REG[2] = once_value_39;
+  fra.me.REG[2] = fra.me.REG[2];
+  ATTR_global___ToolContext____global_callgraph(fra.me.REG[0]) = fra.me.REG[2];
+  /* global/global.nit:46 */
   if (!once_value_40) {
-    fra.me.REG[1] = BOX_NativeString("--help");
-    REGB0 = TAG_Int(6);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_40 = fra.me.REG[1];
+    fra.me.REG[2] = BOX_NativeString("Use global compilation");
+    REGB0 = TAG_Int(22);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_40 = fra.me.REG[2];
     register_static_object(&once_value_40);
-  } else fra.me.REG[1] = once_value_40;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  fra.me.REG[3] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[3]);
-  ATTR_toolcontext___ToolContext____opt_help(fra.me.REG[0]) = fra.me.REG[3];
-  /* toolcontext.nit:155 */
+  } else fra.me.REG[2] = once_value_40;
+  fra.me.REG[2] = fra.me.REG[2];
+  REGB0 = TAG_Int(0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_41) {
-    fra.me.REG[3] = BOX_NativeString("Show version and exit");
-    REGB0 = TAG_Int(21);
+    fra.me.REG[3] = BOX_NativeString("--global");
+    REGB0 = TAG_Int(8);
     fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
     once_value_41 = fra.me.REG[3];
     register_static_object(&once_value_41);
   } else fra.me.REG[3] = once_value_41;
   fra.me.REG[3] = fra.me.REG[3];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_global___ToolContext____opt_global(fra.me.REG[0]) = fra.me.REG[1];
+  /* global/global.nit:47 */
   if (!once_value_42) {
-    fra.me.REG[1] = BOX_NativeString("--version");
-    REGB0 = TAG_Int(9);
+    fra.me.REG[1] = BOX_NativeString("Do not use SFT optimization");
+    REGB0 = TAG_Int(27);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_42 = fra.me.REG[1];
     register_static_object(&once_value_42);
   } else fra.me.REG[1] = once_value_42;
   fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_toolcontext___ToolContext____opt_version(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:158 */
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_43) {
-    fra.me.REG[2] = BOX_NativeString("Verbose");
-    REGB0 = TAG_Int(7);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_43 = fra.me.REG[2];
+    fra.me.REG[3] = BOX_NativeString("--no-global-SFT-optimization");
+    REGB0 = TAG_Int(28);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_43 = fra.me.REG[3];
     register_static_object(&once_value_43);
-  } else fra.me.REG[2] = once_value_43;
-  fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(1);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  } else fra.me.REG[3] = once_value_43;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_global___ToolContext____opt_global_no_STF_opt(fra.me.REG[0]) = fra.me.REG[2];
+  /* global/global.nit:48 */
   if (!once_value_44) {
-    fra.me.REG[1] = BOX_NativeString("-v");
-    REGB0 = TAG_Int(2);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_44 = fra.me.REG[1];
+    fra.me.REG[2] = BOX_NativeString("Do not use dead method removal optimization");
+    REGB0 = TAG_Int(43);
+    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_44 = fra.me.REG[2];
     register_static_object(&once_value_44);
-  } else fra.me.REG[1] = once_value_44;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+  } else fra.me.REG[2] = once_value_44;
+  fra.me.REG[2] = fra.me.REG[2];
+  REGB0 = TAG_Int(0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_45) {
-    fra.me.REG[1] = BOX_NativeString("--verbose");
-    REGB0 = TAG_Int(9);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_45 = fra.me.REG[1];
+    fra.me.REG[3] = BOX_NativeString("--no-global-DMR-optimization");
+    REGB0 = TAG_Int(28);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_45 = fra.me.REG[3];
     register_static_object(&once_value_45);
-  } else fra.me.REG[1] = once_value_45;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  fra.me.REG[3] = NEW_OptionCount_opts___OptionCount___init(fra.me.REG[2], fra.me.REG[3]);
-  ATTR_toolcontext___ToolContext____opt_verbose(fra.me.REG[0]) = fra.me.REG[3];
-  /* toolcontext.nit:161 */
+  } else fra.me.REG[3] = once_value_45;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_global___ToolContext____opt_global_no_DMR_opt(fra.me.REG[0]) = fra.me.REG[1];
+  /* global/global.nit:49 */
   if (!once_value_46) {
-    fra.me.REG[3] = BOX_NativeString("Stop on first error");
-    REGB0 = TAG_Int(19);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_46 = fra.me.REG[3];
+    fra.me.REG[1] = BOX_NativeString("Do not automatically inline getters/setters");
+    REGB0 = TAG_Int(43);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_46 = fra.me.REG[1];
     register_static_object(&once_value_46);
-  } else fra.me.REG[3] = once_value_46;
-  fra.me.REG[3] = fra.me.REG[3];
+  } else fra.me.REG[1] = once_value_46;
+  fra.me.REG[1] = fra.me.REG[1];
   REGB0 = TAG_Int(0);
   fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_47) {
-    fra.me.REG[1] = BOX_NativeString("--stop-on-first-error");
-    REGB0 = TAG_Int(21);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_47 = fra.me.REG[1];
+    fra.me.REG[3] = BOX_NativeString("--no-global-get-set-inlining");
+    REGB0 = TAG_Int(28);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_47 = fra.me.REG[3];
     register_static_object(&once_value_47);
-  } else fra.me.REG[1] = once_value_47;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_toolcontext___ToolContext____opt_stop_on_first_error(fra.me.REG[0]) = fra.me.REG[2];
-  /* toolcontext.nit:164 */
+  } else fra.me.REG[3] = once_value_47;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_global___ToolContext____opt_global_no_inline_get_set(fra.me.REG[0]) = fra.me.REG[2];
+  /* global/global.nit:50 */
   if (!once_value_48) {
-    fra.me.REG[2] = BOX_NativeString("Do not use color to display errors and warnings");
-    REGB0 = TAG_Int(47);
+    fra.me.REG[2] = BOX_NativeString("Do not remove get tests outside object initialization");
+    REGB0 = TAG_Int(53);
     fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
     once_value_48 = fra.me.REG[2];
     register_static_object(&once_value_48);
   } else fra.me.REG[2] = once_value_48;
   fra.me.REG[2] = fra.me.REG[2];
   REGB0 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_49) {
-    fra.me.REG[1] = BOX_NativeString("--no-color");
-    REGB0 = TAG_Int(10);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_49 = fra.me.REG[1];
+    fra.me.REG[3] = BOX_NativeString("--no-global-OOIT-optimization");
+    REGB0 = TAG_Int(29);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_49 = fra.me.REG[3];
     register_static_object(&once_value_49);
-  } else fra.me.REG[1] = once_value_49;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  fra.me.REG[3] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[3]);
-  ATTR_toolcontext___ToolContext____opt_no_color(fra.me.REG[0]) = fra.me.REG[3];
-  /* toolcontext.nit:167 */
-  REGB0 = TAG_Int(0);
-  ATTR_toolcontext___ToolContext____verbose_level(fra.me.REG[0]) = REGB0;
-  /* metamodel/abstractmetamodel.nit:31 */
-  fra.me.REG[3] = NEW_PartialOrder_metamodel___partial_order___PartialOrder___init();
-  ATTR_metamodel___abstractmetamodel___MMContext____module_hierarchy(fra.me.REG[0]) = fra.me.REG[3];
-  /* metamodel/abstractmetamodel.nit:35 */
-  fra.me.REG[3] = NEW_PartialOrder_metamodel___partial_order___PartialOrder___init();
-  ATTR_metamodel___abstractmetamodel___MMContext____class_hierarchy(fra.me.REG[0]) = fra.me.REG[3];
-  /* metamodel/abstractmetamodel.nit:38 */
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_metamodel___abstractmetamodel___MMContext____global_classes(fra.me.REG[0]) = fra.me.REG[3];
-  /* metamodel/abstractmetamodel.nit:41 */
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_metamodel___abstractmetamodel___MMContext____modules(fra.me.REG[0]) = fra.me.REG[3];
-  /* program.nit:26 */
-  REGB0 = TAG_Bool(0);
-  ATTR_program___ToolContext____global(fra.me.REG[0]) = REGB0;
-  /* program.nit:27 */
-  REGB0 = TAG_Bool(1);
-  ATTR_program___ToolContext____use_SFT_optimization(fra.me.REG[0]) = REGB0;
-  /* separate_options.nit:29 */
-  fra.me.REG[3] = NEW_OptionContext_opts___OptionContext___init();
-  ATTR_separate_options___ToolContext_____atseparate_options(fra.me.REG[0]) = fra.me.REG[3];
-  /* separate_options.nit:30 */
+  } else fra.me.REG[3] = once_value_49;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  fra.me.REG[1] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[2], fra.me.REG[1]);
+  ATTR_global___ToolContext____opt_global_no_out_of_init_get_test_opt(fra.me.REG[0]) = fra.me.REG[1];
+  /* global/global.nit:51 */
   if (!once_value_50) {
-    fra.me.REG[3] = BOX_NativeString("Path to libraries for C compiler");
-    REGB0 = TAG_Int(32);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_50 = fra.me.REG[3];
+    fra.me.REG[1] = BOX_NativeString("Do not use a specialized algorithm to find reachable methods from initializers");
+    REGB0 = TAG_Int(78);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_50 = fra.me.REG[1];
     register_static_object(&once_value_50);
-  } else fra.me.REG[3] = once_value_50;
-  fra.me.REG[3] = fra.me.REG[3];
+  } else fra.me.REG[1] = once_value_50;
+  fra.me.REG[1] = fra.me.REG[1];
   REGB0 = TAG_Int(0);
   fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_51) {
-    fra.me.REG[1] = BOX_NativeString("--cc-lib-path");
-    REGB0 = TAG_Int(13);
-    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_51 = fra.me.REG[1];
+    fra.me.REG[3] = BOX_NativeString("--no-global-RFIM-analysis");
+    REGB0 = TAG_Int(25);
+    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_51 = fra.me.REG[3];
     register_static_object(&once_value_51);
-  } else fra.me.REG[1] = once_value_51;
-  fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionArray_opts___OptionArray___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_separate_options___ToolContext_____atopt_cc_lib_paths(fra.me.REG[0]) = fra.me.REG[2];
-  /* separate_options.nit:31 */
+  } else fra.me.REG[3] = once_value_51;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = NEW_OptionBool_opts___OptionBool___init(fra.me.REG[1], fra.me.REG[2]);
+  ATTR_global___ToolContext____opt_global_no_RFIMA(fra.me.REG[0]) = fra.me.REG[2];
+  /* global/global.nit:52 */
+  REGB0 = TAG_Int(3);
+  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_52) {
-    fra.me.REG[2] = BOX_NativeString("Name of library to use for C compiler");
-    REGB0 = TAG_Int(37);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_52 = fra.me.REG[2];
+    fra.me.REG[1] = BOX_NativeString("none");
+    REGB0 = TAG_Int(4);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_52 = fra.me.REG[1];
     register_static_object(&once_value_52);
-  } else fra.me.REG[2] = once_value_52;
-  fra.me.REG[2] = fra.me.REG[2];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  } else fra.me.REG[1] = once_value_52;
+  fra.me.REG[1] = fra.me.REG[1];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
   if (!once_value_53) {
-    fra.me.REG[1] = BOX_NativeString("--cc-lib-name");
-    REGB0 = TAG_Int(13);
+    fra.me.REG[1] = BOX_NativeString("cha");
+    REGB0 = TAG_Int(3);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_53 = fra.me.REG[1];
     register_static_object(&once_value_53);
   } else fra.me.REG[1] = once_value_53;
   fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  fra.me.REG[3] = NEW_OptionArray_opts___OptionArray___init(fra.me.REG[2], fra.me.REG[3]);
-  ATTR_separate_options___ToolContext_____atopt_cc_libs(fra.me.REG[0]) = fra.me.REG[3];
-  /* separate_options.nit:32 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
   if (!once_value_54) {
-    fra.me.REG[3] = BOX_NativeString("Path to .h files for C compiler");
-    REGB0 = TAG_Int(31);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_54 = fra.me.REG[3];
+    fra.me.REG[1] = BOX_NativeString("rta");
+    REGB0 = TAG_Int(3);
+    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
+    once_value_54 = fra.me.REG[1];
     register_static_object(&once_value_54);
-  } else fra.me.REG[3] = once_value_54;
-  fra.me.REG[3] = fra.me.REG[3];
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  } else fra.me.REG[1] = once_value_54;
+  fra.me.REG[1] = fra.me.REG[1];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
   if (!once_value_55) {
-    fra.me.REG[1] = BOX_NativeString("--cc-header-path");
-    REGB0 = TAG_Int(16);
+    fra.me.REG[1] = BOX_NativeString("The algorithm to use to build the callgraph");
+    REGB0 = TAG_Int(43);
     fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
     once_value_55 = fra.me.REG[1];
     register_static_object(&once_value_55);
   } else fra.me.REG[1] = once_value_55;
   fra.me.REG[1] = fra.me.REG[1];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[2] = NEW_OptionArray_opts___OptionArray___init(fra.me.REG[3], fra.me.REG[2]);
-  ATTR_separate_options___ToolContext_____atopt_cc_include_paths(fra.me.REG[0]) = fra.me.REG[2];
-  /* compiling/compiling_base.nit:27 */
-  fra.me.REG[2] = NIT_NULL;
-  ATTR_compiling___compiling_base___ToolContext____compdir(fra.me.REG[0]) = fra.me.REG[2];
-  /* compiling/compiling_base.nit:28 */
-  fra.me.REG[2] = NIT_NULL;
-  ATTR_compiling___compiling_base___ToolContext____clibdir(fra.me.REG[0]) = fra.me.REG[2];
-  /* compiling/compiling_base.nit:29 */
-  fra.me.REG[2] = NIT_NULL;
-  ATTR_compiling___compiling_base___ToolContext____bindir(fra.me.REG[0]) = fra.me.REG[2];
-  /* compiling/compiling_base.nit:30 */
-  fra.me.REG[2] = NIT_NULL;
-  ATTR_compiling___compiling_base___ToolContext____output_file(fra.me.REG[0]) = fra.me.REG[2];
-  /* compiling/compiling_base.nit:31 */
-  REGB0 = TAG_Bool(0);
-  ATTR_compiling___compiling_base___ToolContext____boost(fra.me.REG[0]) = REGB0;
-  /* compiling/compiling_base.nit:32 */
-  REGB0 = TAG_Bool(0);
-  ATTR_compiling___compiling_base___ToolContext____no_cc(fra.me.REG[0]) = REGB0;
-  /* compiling/compiling_base.nit:33 */
-  REGB0 = TAG_Bool(0);
-  ATTR_compiling___compiling_base___ToolContext____cc_link(fra.me.REG[0]) = REGB0;
-  /* compiling/compiling_base.nit:34 */
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_compiling___compiling_base___ToolContext____cc_libs(fra.me.REG[0]) = fra.me.REG[2];
-  /* compiling/compiling_base.nit:35 */
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_compiling___compiling_base___ToolContext____cc_lib_paths(fra.me.REG[0]) = fra.me.REG[2];
-  /* compiling/compiling_base.nit:36 */
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_compiling___compiling_base___ToolContext____cc_include_paths(fra.me.REG[0]) = fra.me.REG[2];
-  /* compiling/compiling_base.nit:37 */
+  REGB0 = TAG_Int(2);
+  REGB1 = TAG_Int(0);
+  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
   if (!once_value_56) {
-    fra.me.REG[2] = BOX_NativeString("");
-    REGB0 = TAG_Int(0);
-    fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_56 = fra.me.REG[2];
+    fra.me.REG[4] = BOX_NativeString("--global-callgraph");
+    REGB1 = TAG_Int(18);
+    fra.me.REG[4] = NEW_String_standard___string___String___with_native(fra.me.REG[4], REGB1);
+    once_value_56 = fra.me.REG[4];
     register_static_object(&once_value_56);
-  } else fra.me.REG[2] = once_value_56;
-  fra.me.REG[2] = fra.me.REG[2];
-  ATTR_compiling___compiling_base___ToolContext____ext_prefix(fra.me.REG[0]) = fra.me.REG[2];
+  } else fra.me.REG[4] = once_value_56;
+  fra.me.REG[4] = fra.me.REG[4];
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  fra.me.REG[3] = NEW_OptionEnum_opts___OptionEnum___init(fra.me.REG[2], fra.me.REG[1], REGB0, fra.me.REG[3]);
+  ATTR_global___ToolContext____opt_global_callgraph(fra.me.REG[0]) = fra.me.REG[3];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_toolcontext___ToolContext(void)
@@ -15490,7 +16957,7 @@ const classtable_elt_t VFT_standard___kernel___Bool[51] = {
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-const classtable_elt_t VFT_standard___kernel___Float[74] = {
+const classtable_elt_t VFT_standard___kernel___Float[75] = {
   {(bigint) -9 /* 0: Identity */},
   {(bigint) 2 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "Float" /* 2: Class Name */},
@@ -15542,7 +17009,8 @@ const classtable_elt_t VFT_standard___kernel___Float[74] = {
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
   {(bigint) standard___string___Float___to_precision},
-  {(bigint) 1 /* 51: Float < Float: superclass init_table position */},
+  {(bigint) standard___string___Float___to_precision_native},
+  {(bigint) 1 /* 52: Float < Float: superclass init_table position */},
   {(bigint) standard___kernel___Float_____leq},
   {(bigint) standard___kernel___Float_____l},
   {(bigint) standard___kernel___Float_____geq},
@@ -15576,14 +17044,14 @@ val_t BOX_Float(float val) {
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(box);
 }
-const classtable_elt_t VFT_standard___kernel___Int[93] = {
+const classtable_elt_t VFT_standard___kernel___Int[95] = {
   {(bigint) -29 /* 0: Identity */},
   {(bigint) 2 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "Int" /* 2: Class Name */},
   {(bigint) 3 /* 3: Int < Object: superclass typecheck marker */},
+  {(bigint) 3243 /* 4: Int < Discrete: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 275 /* 5: Int < Comparable: superclass typecheck marker */},
-  {(bigint) 2747 /* 6: Int < Discrete: superclass typecheck marker */},
+  {(bigint) 275 /* 6: Int < Comparable: superclass typecheck marker */},
   {(bigint) -29 /* 7: Int < Int: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -15632,9 +17100,11 @@ const classtable_elt_t VFT_standard___kernel___Int[93] = {
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 1 /* 55: Int < Comparable: superclass init_table position */},
-  {(bigint) -29 /* 56: VT Int::OTHER : id of Int */},
-  {(bigint) 7 /* 57: VT Int::OTHER : color of Int */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) 1 /* 57: Int < Comparable: superclass init_table position */},
+  {(bigint) -29 /* 58: VT Int::OTHER : id of Int */},
+  {(bigint) 7 /* 59: VT Int::OTHER : color of Int */},
   {(bigint) standard___kernel___Int_____l},
   {(bigint) standard___kernel___Int_____leq},
   {(bigint) standard___kernel___Int_____geq},
@@ -15643,7 +17113,7 @@ const classtable_elt_t VFT_standard___kernel___Int[93] = {
   {(bigint) standard___kernel___Int___is_between},
   {(bigint) standard___kernel___Int___max},
   {(bigint) standard___kernel___Int___min},
-  {(bigint) 0 /* 66: Int < Discrete: superclass init_table position */},
+  {(bigint) 0 /* 68: Int < Discrete: superclass init_table position */},
   {(bigint) standard___kernel___Int___succ},
   {(bigint) standard___kernel___Int___prec},
   {(bigint) standard___kernel___Int_____plus},
@@ -15652,7 +17122,7 @@ const classtable_elt_t VFT_standard___kernel___Int[93] = {
   {(bigint) standard___string___Int___fill_buffer},
   {(bigint) standard___string___Int___to_hex},
   {(bigint) standard___string___Int___to_base},
-  {(bigint) 3 /* 75: Int < Int: superclass init_table position */},
+  {(bigint) 3 /* 77: Int < Int: superclass init_table position */},
   {(bigint) standard___kernel___Int___unary__minus},
   {(bigint) standard___kernel___Int_____star},
   {(bigint) standard___kernel___Int_____slash},
@@ -15673,14 +17143,14 @@ const classtable_elt_t VFT_standard___kernel___Int[93] = {
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-const classtable_elt_t VFT_standard___kernel___Char[81] = {
+const classtable_elt_t VFT_standard___kernel___Char[86] = {
   {(bigint) -33 /* 0: Identity */},
   {(bigint) 2 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "Char" /* 2: Class Name */},
   {(bigint) 3 /* 3: Char < Object: superclass typecheck marker */},
-  {(bigint) 103 /* 4: Char < Pattern: superclass typecheck marker */},
-  {(bigint) 275 /* 5: Char < Comparable: superclass typecheck marker */},
-  {(bigint) 2747 /* 6: Char < Discrete: superclass typecheck marker */},
+  {(bigint) 3243 /* 4: Char < Discrete: superclass typecheck marker */},
+  {(bigint) 103 /* 5: Char < Pattern: superclass typecheck marker */},
+  {(bigint) 275 /* 6: Char < Comparable: superclass typecheck marker */},
   {(bigint) -33 /* 7: Char < Char: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -15724,14 +17194,16 @@ const classtable_elt_t VFT_standard___kernel___Char[81] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: Char < Pattern: superclass init_table position */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) 0 /* 52: Char < Pattern: superclass init_table position */},
   {(bigint) standard___string_search___Char___search_index_in},
   {(bigint) standard___string_search___Char___search_in},
   {(bigint) standard___string_search___Pattern___search_all_in},
   {(bigint) standard___string_search___Pattern___split_in},
-  {(bigint) 3 /* 55: Char < Comparable: superclass init_table position */},
-  {(bigint) -33 /* 56: VT Char::OTHER : id of Char */},
-  {(bigint) 7 /* 57: VT Char::OTHER : color of Char */},
+  {(bigint) 3 /* 57: Char < Comparable: superclass init_table position */},
+  {(bigint) -33 /* 58: VT Char::OTHER : id of Char */},
+  {(bigint) 7 /* 59: VT Char::OTHER : color of Char */},
   {(bigint) standard___kernel___Char_____l},
   {(bigint) standard___kernel___Char_____leq},
   {(bigint) standard___kernel___Char_____geq},
@@ -15740,13 +17212,16 @@ const classtable_elt_t VFT_standard___kernel___Char[81] = {
   {(bigint) standard___kernel___Comparable___is_between},
   {(bigint) standard___kernel___Comparable___max},
   {(bigint) standard___kernel___Comparable___min},
-  {(bigint) 2 /* 66: Char < Discrete: superclass init_table position */},
+  {(bigint) 2 /* 68: Char < Discrete: superclass init_table position */},
   {(bigint) standard___kernel___Char___succ},
   {(bigint) standard___kernel___Char___prec},
   {(bigint) standard___kernel___Char_____plus},
   {(bigint) standard___kernel___Char_____minus},
   {(bigint) standard___kernel___Char___distance},
-  {(bigint) 4 /* 72: Char < Char: superclass init_table position */},
+  {(bigint) standard___string___Char___is_numeric},
+  {(bigint) standard___string___Char___is_alpha},
+  {(bigint) standard___string___Char___is_alphanumeric},
+  {(bigint) 4 /* 77: Char < Char: superclass init_table position */},
   {(bigint) standard___kernel___Char___to_i},
   {(bigint) standard___kernel___Char___ascii},
   {(bigint) standard___kernel___Char___to_lower},
@@ -15821,16 +17296,16 @@ val_t BOX_Pointer(void * val) {
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(box);
 }
-const classtable_elt_t VFT_standard___collection___abstract_collection___Container[82] = {
-  {(bigint) 2775 /* 0: Identity */},
+const classtable_elt_t VFT_standard___collection___abstract_collection___Container[84] = {
+  {(bigint) 3267 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "Container" /* 2: Class Name */},
   {(bigint) 3 /* 3: Container < Object: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 283 /* 6: Container < Collection: superclass typecheck marker */},
-  {(bigint) 2775 /* 7: Container < Container: superclass typecheck marker */},
   {0} /* Class Hole :( */,
+  {(bigint) 283 /* 7: Container < Collection: superclass typecheck marker */},
+  {(bigint) 3267 /* 8: Container < Container: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -15888,9 +17363,11 @@ const classtable_elt_t VFT_standard___collection___abstract_collection___Contain
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
   {(bigint) standard___string___Collection___join},
   {(bigint) standard___collection___array___Collection___to_a},
-  {(bigint) 0 /* 68: Container < Collection: superclass init_table position */},
+  {(bigint) 0 /* 70: Container < Collection: superclass init_table position */},
   {(bigint) standard___collection___abstract_collection___Container___iterator},
   {(bigint) standard___collection___abstract_collection___Collection___iterate},
   {(bigint) standard___collection___abstract_collection___Container___is_empty},
@@ -15900,7 +17377,7 @@ const classtable_elt_t VFT_standard___collection___abstract_collection___Contain
   {(bigint) standard___collection___abstract_collection___Container___count},
   {(bigint) standard___collection___abstract_collection___Container___first},
   {(bigint) standard___math___Collection___rand},
-  {(bigint) 2 /* 78: Container < Container: superclass init_table position */},
+  {(bigint) 2 /* 80: Container < Container: superclass init_table position */},
   {(bigint) standard___collection___abstract_collection___Container___init},
   {(bigint) standard___collection___abstract_collection___Container___item},
   {(bigint) standard___collection___abstract_collection___Container___item__eq},
@@ -15967,12 +17444,12 @@ val_t NEW_Container_standard___collection___abstract_collection___Container___in
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_standard___collection___abstract_collection___ContainerIterator[57] = {
-  {(bigint) 2771 /* 0: Identity */},
+  {(bigint) 3271 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ContainerIterator" /* 2: Class Name */},
   {(bigint) 3 /* 3: ContainerIterator < Object: superclass typecheck marker */},
   {(bigint) 187 /* 4: ContainerIterator < Iterator: superclass typecheck marker */},
-  {(bigint) 2771 /* 5: ContainerIterator < ContainerIterator: superclass typecheck marker */},
+  {(bigint) 3271 /* 5: ContainerIterator < ContainerIterator: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -16107,12 +17584,12 @@ val_t NEW_ContainerIterator_standard___collection___abstract_collection___Contai
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_standard___collection___abstract_collection___MapKeysIterator[59] = {
-  {(bigint) 2583 /* 0: Identity */},
+  {(bigint) 3083 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MapKeysIterator" /* 2: Class Name */},
   {(bigint) 3 /* 3: MapKeysIterator < Object: superclass typecheck marker */},
   {(bigint) 187 /* 4: MapKeysIterator < Iterator: superclass typecheck marker */},
-  {(bigint) 2583 /* 5: MapKeysIterator < MapKeysIterator: superclass typecheck marker */},
+  {(bigint) 3083 /* 5: MapKeysIterator < MapKeysIterator: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -16236,12 +17713,12 @@ val_t NEW_MapKeysIterator_standard___collection___abstract_collection___MapKeysI
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_standard___collection___abstract_collection___MapValuesIterator[59] = {
-  {(bigint) 2579 /* 0: Identity */},
+  {(bigint) 3075 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MapValuesIterator" /* 2: Class Name */},
   {(bigint) 3 /* 3: MapValuesIterator < Object: superclass typecheck marker */},
   {(bigint) 187 /* 4: MapValuesIterator < Iterator: superclass typecheck marker */},
-  {(bigint) 2579 /* 5: MapValuesIterator < MapValuesIterator: superclass typecheck marker */},
+  {(bigint) 3075 /* 5: MapValuesIterator < MapValuesIterator: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -16365,12 +17842,12 @@ val_t NEW_MapValuesIterator_standard___collection___abstract_collection___MapVal
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_standard___collection___abstract_collection___CoupleMapIterator[57] = {
-  {(bigint) 2767 /* 0: Identity */},
+  {(bigint) 3263 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "CoupleMapIterator" /* 2: Class Name */},
   {(bigint) 3 /* 3: CoupleMapIterator < Object: superclass typecheck marker */},
   {(bigint) 139 /* 4: CoupleMapIterator < MapIterator: superclass typecheck marker */},
-  {(bigint) 2767 /* 5: CoupleMapIterator < CoupleMapIterator: superclass typecheck marker */},
+  {(bigint) 3263 /* 5: CoupleMapIterator < CoupleMapIterator: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -16614,16 +18091,16 @@ val_t NEW_Couple_standard___collection___abstract_collection___Couple___init(val
   stack_frame_head = fra.me.prev;
   return fra.me.REG[2];
 }
-const classtable_elt_t VFT_standard___collection___range___Range[83] = {
-  {(bigint) 2507 /* 0: Identity */},
+const classtable_elt_t VFT_standard___collection___range___Range[85] = {
+  {(bigint) 3003 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "Range" /* 2: Class Name */},
   {(bigint) 3 /* 3: Range < Object: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 283 /* 6: Range < Collection: superclass typecheck marker */},
-  {(bigint) 2507 /* 7: Range < Range: superclass typecheck marker */},
   {0} /* Class Hole :( */,
+  {(bigint) 283 /* 7: Range < Collection: superclass typecheck marker */},
+  {(bigint) 3003 /* 8: Range < Range: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -16681,9 +18158,11 @@ const classtable_elt_t VFT_standard___collection___range___Range[83] = {
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
   {(bigint) standard___string___Collection___join},
   {(bigint) standard___collection___array___Collection___to_a},
-  {(bigint) 0 /* 68: Range < Collection: superclass init_table position */},
+  {(bigint) 0 /* 70: Range < Collection: superclass init_table position */},
   {(bigint) standard___collection___range___Range___iterator},
   {(bigint) standard___collection___range___Range___iterate},
   {(bigint) standard___collection___range___Range___is_empty},
@@ -16693,7 +18172,7 @@ const classtable_elt_t VFT_standard___collection___range___Range[83] = {
   {(bigint) standard___collection___range___Range___count},
   {(bigint) standard___collection___range___Range___first},
   {(bigint) standard___math___Collection___rand},
-  {(bigint) 2 /* 78: Range < Range: superclass init_table position */},
+  {(bigint) 2 /* 80: Range < Range: superclass init_table position */},
   {(bigint) standard___collection___range___Range___last},
   {(bigint) standard___collection___range___Range___after},
   {(bigint) standard___collection___range___Range___init},
@@ -16808,12 +18287,12 @@ val_t NEW_Range_standard___collection___range___Range___without_last(val_t p0, v
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_standard___collection___range___IteratorRange[57] = {
-  {(bigint) 2655 /* 0: Identity */},
+  {(bigint) 3151 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IteratorRange" /* 2: Class Name */},
   {(bigint) 3 /* 3: IteratorRange < Object: superclass typecheck marker */},
   {(bigint) 187 /* 4: IteratorRange < Iterator: superclass typecheck marker */},
-  {(bigint) 2655 /* 5: IteratorRange < IteratorRange: superclass typecheck marker */},
+  {(bigint) 3151 /* 5: IteratorRange < IteratorRange: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -16941,21 +18420,21 @@ val_t NEW_IteratorRange_standard___collection___range___IteratorRange___init(val
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_standard___collection___list___List[111] = {
-  {(bigint) 4075 /* 0: Identity */},
+const classtable_elt_t VFT_standard___collection___list___List[120] = {
+  {(bigint) 4623 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "List" /* 2: Class Name */},
   {(bigint) 3 /* 3: List < Object: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 283 /* 6: List < Collection: superclass typecheck marker */},
-  {(bigint) 355 /* 7: List < SequenceRead: superclass typecheck marker */},
-  {(bigint) 375 /* 8: List < RemovableCollection: superclass typecheck marker */},
-  {(bigint) 2959 /* 9: List < SimpleCollection: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3687 /* 11: List < Sequence: superclass typecheck marker */},
-  {(bigint) 4075 /* 12: List < List: superclass typecheck marker */},
+  {(bigint) 283 /* 7: List < Collection: superclass typecheck marker */},
+  {(bigint) 355 /* 8: List < SequenceRead: superclass typecheck marker */},
+  {(bigint) 375 /* 9: List < RemovableCollection: superclass typecheck marker */},
+  {(bigint) 3459 /* 10: List < SimpleCollection: superclass typecheck marker */},
   {0} /* Class Hole :( */,
+  {(bigint) 4199 /* 12: List < Sequence: superclass typecheck marker */},
+  {(bigint) 4623 /* 13: List < List: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -16994,9 +18473,11 @@ const classtable_elt_t VFT_standard___collection___list___List[111] = {
   {(bigint) utils___Object___cmangle_table},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 2 /* 52: List < SimpleCollection: superclass init_table position */},
-  {(bigint) standard___collection___abstract_collection___Sequence___add},
-  {(bigint) standard___collection___abstract_collection___SimpleCollection___add_all},
+  {(bigint) 3 /* 52: List < RemovableCollection: superclass init_table position */},
+  {(bigint) standard___collection___list___List___clear},
+  {(bigint) standard___collection___list___List___remove},
+  {(bigint) standard___collection___abstract_collection___RemovableCollection___remove_all},
+  {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -17010,7 +18491,7 @@ const classtable_elt_t VFT_standard___collection___list___List[111] = {
   {0} /* Class Hole :( */,
   {(bigint) standard___string___Collection___join},
   {(bigint) standard___collection___array___Collection___to_a},
-  {(bigint) 4 /* 68: List < Collection: superclass init_table position */},
+  {(bigint) 4 /* 70: List < Collection: superclass init_table position */},
   {(bigint) standard___collection___list___List___iterator},
   {(bigint) standard___collection___abstract_collection___Collection___iterate},
   {(bigint) standard___collection___list___List___is_empty},
@@ -17020,14 +18501,19 @@ const classtable_elt_t VFT_standard___collection___list___List[111] = {
   {(bigint) standard___collection___list___List___count},
   {(bigint) standard___collection___list___List___first},
   {(bigint) standard___math___Collection___rand},
-  {(bigint) 1 /* 78: List < SequenceRead: superclass init_table position */},
+  {(bigint) 1 /* 80: List < SequenceRead: superclass init_table position */},
   {(bigint) standard___collection___list___List_____bra},
   {(bigint) standard___collection___list___List___last},
   {(bigint) standard___collection___abstract_collection___SequenceRead___index_of},
-  {(bigint) 3 /* 82: List < RemovableCollection: superclass init_table position */},
-  {(bigint) standard___collection___list___List___clear},
-  {(bigint) standard___collection___list___List___remove},
-  {(bigint) standard___collection___abstract_collection___RemovableCollection___remove_all},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) 2 /* 90: List < SimpleCollection: superclass init_table position */},
+  {(bigint) standard___collection___abstract_collection___Sequence___add},
+  {(bigint) standard___collection___abstract_collection___SimpleCollection___add_all},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -17035,7 +18521,8 @@ const classtable_elt_t VFT_standard___collection___list___List[111] = {
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 0 /* 93: List < Sequence: superclass init_table position */},
+  {(bigint) standard___collection___Sequence___subarray},
+  {(bigint) 0 /* 101: List < Sequence: superclass init_table position */},
   {(bigint) standard___collection___list___List___first__eq},
   {(bigint) standard___collection___list___List___last__eq},
   {(bigint) standard___collection___list___List___push},
@@ -17045,7 +18532,8 @@ const classtable_elt_t VFT_standard___collection___list___List[111] = {
   {(bigint) standard___collection___list___List___shift},
   {(bigint) standard___collection___list___List_____braeq},
   {(bigint) standard___collection___list___List___remove_at},
-  {(bigint) 6 /* 103: List < List: superclass init_table position */},
+  {(bigint) 6 /* 111: List < List: superclass init_table position */},
+  {(bigint) standard___collection___list___List___slice},
   {(bigint) standard___collection___list___List___link},
   {(bigint) standard___collection___list___List___init},
   {(bigint) standard___collection___list___List___from},
@@ -17100,13 +18588,13 @@ val_t NEW_List_standard___collection___list___List___init(void){
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 173;
+  fra.me.line = 185;
   fra.me.meth = LOCATE_NEW_List_standard___collection___list___List___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* ../lib/standard/collection/list.nit:173 */
+  /* ../lib/standard/collection/list.nit:185 */
   fra.me.REG[0] = NEW_standard___collection___list___List();
   INIT_ATTRIBUTES__standard___collection___list___List(fra.me.REG[0]);
   standard___collection___list___List___init(fra.me.REG[0], init_table);
@@ -17121,7 +18609,7 @@ val_t NEW_List_standard___collection___list___List___from(val_t p0){
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 176;
+  fra.me.line = 188;
   fra.me.meth = LOCATE_NEW_List_standard___collection___list___List___from;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17129,7 +18617,7 @@ val_t NEW_List_standard___collection___list___List___from(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/list.nit:176 */
+  /* ../lib/standard/collection/list.nit:188 */
   fra.me.REG[1] = NEW_standard___collection___list___List();
   INIT_ATTRIBUTES__standard___collection___list___List(fra.me.REG[1]);
   standard___collection___list___List___from(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -17138,13 +18626,13 @@ val_t NEW_List_standard___collection___list___List___from(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_standard___collection___list___ListIterator[62] = {
-  {(bigint) 3043 /* 0: Identity */},
+  {(bigint) 3543 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ListIterator" /* 2: Class Name */},
   {(bigint) 3 /* 3: ListIterator < Object: superclass typecheck marker */},
   {(bigint) 187 /* 4: ListIterator < Iterator: superclass typecheck marker */},
-  {(bigint) 2671 /* 5: ListIterator < IndexedIterator: superclass typecheck marker */},
-  {(bigint) 3043 /* 6: ListIterator < ListIterator: superclass typecheck marker */},
+  {(bigint) 3167 /* 5: ListIterator < IndexedIterator: superclass typecheck marker */},
+  {(bigint) 3543 /* 6: ListIterator < ListIterator: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -17261,7 +18749,7 @@ val_t NEW_ListIterator_standard___collection___list___ListIterator___init(val_t
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 256;
+  fra.me.line = 268;
   fra.me.meth = LOCATE_NEW_ListIterator_standard___collection___list___ListIterator___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17269,7 +18757,7 @@ val_t NEW_ListIterator_standard___collection___list___ListIterator___init(val_t
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/list.nit:256 */
+  /* ../lib/standard/collection/list.nit:268 */
   fra.me.REG[1] = NEW_standard___collection___list___ListIterator();
   INIT_ATTRIBUTES__standard___collection___list___ListIterator(fra.me.REG[1]);
   standard___collection___list___ListIterator___init(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -17277,17 +18765,17 @@ val_t NEW_ListIterator_standard___collection___list___ListIterator___init(val_t
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_standard___collection___list___ListNode[88] = {
-  {(bigint) 3039 /* 0: Identity */},
+const classtable_elt_t VFT_standard___collection___list___ListNode[90] = {
+  {(bigint) 3539 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ListNode" /* 2: Class Name */},
   {(bigint) 3 /* 3: ListNode < Object: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 283 /* 6: ListNode < Collection: superclass typecheck marker */},
-  {(bigint) 2775 /* 7: ListNode < Container: superclass typecheck marker */},
-  {(bigint) 3039 /* 8: ListNode < ListNode: superclass typecheck marker */},
   {0} /* Class Hole :( */,
+  {(bigint) 283 /* 7: ListNode < Collection: superclass typecheck marker */},
+  {(bigint) 3267 /* 8: ListNode < Container: superclass typecheck marker */},
+  {(bigint) 3539 /* 9: ListNode < ListNode: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -17344,9 +18832,11 @@ const classtable_elt_t VFT_standard___collection___list___ListNode[88] = {
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
   {(bigint) standard___string___Collection___join},
   {(bigint) standard___collection___array___Collection___to_a},
-  {(bigint) 0 /* 68: ListNode < Collection: superclass init_table position */},
+  {(bigint) 0 /* 70: ListNode < Collection: superclass init_table position */},
   {(bigint) standard___collection___abstract_collection___Container___iterator},
   {(bigint) standard___collection___abstract_collection___Collection___iterate},
   {(bigint) standard___collection___abstract_collection___Container___is_empty},
@@ -17356,11 +18846,11 @@ const classtable_elt_t VFT_standard___collection___list___ListNode[88] = {
   {(bigint) standard___collection___abstract_collection___Container___count},
   {(bigint) standard___collection___abstract_collection___Container___first},
   {(bigint) standard___math___Collection___rand},
-  {(bigint) 2 /* 78: ListNode < Container: superclass init_table position */},
+  {(bigint) 2 /* 80: ListNode < Container: superclass init_table position */},
   {(bigint) standard___collection___abstract_collection___Container___init},
   {(bigint) standard___collection___abstract_collection___Container___item},
   {(bigint) standard___collection___abstract_collection___Container___item__eq},
-  {(bigint) 3 /* 82: ListNode < ListNode: superclass init_table position */},
+  {(bigint) 3 /* 84: ListNode < ListNode: superclass init_table position */},
   {(bigint) standard___collection___list___ListNode___init},
   {(bigint) standard___collection___list___ListNode___next},
   {(bigint) standard___collection___list___ListNode___next__eq},
@@ -17414,7 +18904,7 @@ val_t NEW_ListNode_standard___collection___list___ListNode___init(val_t p0){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 289;
+  fra.me.line = 301;
   fra.me.meth = LOCATE_NEW_ListNode_standard___collection___list___ListNode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17422,7 +18912,7 @@ val_t NEW_ListNode_standard___collection___list___ListNode___init(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/list.nit:289 */
+  /* ../lib/standard/collection/list.nit:301 */
   fra.me.REG[1] = NEW_standard___collection___list___ListNode();
   INIT_ATTRIBUTES__standard___collection___list___ListNode(fra.me.REG[1]);
   standard___collection___list___ListNode___init(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -17430,22 +18920,22 @@ val_t NEW_ListNode_standard___collection___list___ListNode___init(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_standard___collection___array___Array[120] = {
-  {(bigint) 4271 /* 0: Identity */},
+const classtable_elt_t VFT_standard___collection___array___Array[121] = {
+  {(bigint) 4827 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "Array" /* 2: Class Name */},
   {(bigint) 3 /* 3: Array < Object: superclass typecheck marker */},
-  {(bigint) 4271 /* 4: Array < Array: superclass typecheck marker */},
+  {(bigint) 4827 /* 4: Array < Array: superclass typecheck marker */},
   {(bigint) 303 /* 5: Array < ArrayCapable: superclass typecheck marker */},
-  {(bigint) 283 /* 6: Array < Collection: superclass typecheck marker */},
-  {(bigint) 355 /* 7: Array < SequenceRead: superclass typecheck marker */},
-  {(bigint) 375 /* 8: Array < RemovableCollection: superclass typecheck marker */},
-  {(bigint) 2959 /* 9: Array < SimpleCollection: superclass typecheck marker */},
-  {(bigint) 3227 /* 10: Array < AbstractArrayRead: superclass typecheck marker */},
-  {(bigint) 3687 /* 11: Array < Sequence: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4087 /* 13: Array < AbstractArray: superclass typecheck marker */},
+  {(bigint) 283 /* 7: Array < Collection: superclass typecheck marker */},
+  {(bigint) 355 /* 8: Array < SequenceRead: superclass typecheck marker */},
+  {(bigint) 375 /* 9: Array < RemovableCollection: superclass typecheck marker */},
+  {(bigint) 3459 /* 10: Array < SimpleCollection: superclass typecheck marker */},
+  {(bigint) 3727 /* 11: Array < AbstractArrayRead: superclass typecheck marker */},
+  {(bigint) 4199 /* 12: Array < Sequence: superclass typecheck marker */},
   {0} /* Class Hole :( */,
+  {(bigint) 4635 /* 14: Array < AbstractArray: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
@@ -17483,10 +18973,10 @@ const classtable_elt_t VFT_standard___collection___array___Array[120] = {
   {(bigint) utils___Object___cmangle_table},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 4 /* 52: Array < SimpleCollection: superclass init_table position */},
-  {(bigint) standard___collection___array___Array___add},
-  {(bigint) standard___collection___abstract_collection___SimpleCollection___add_all},
-  {0} /* Class Hole :( */,
+  {(bigint) 5 /* 52: Array < RemovableCollection: superclass init_table position */},
+  {(bigint) standard___collection___array___AbstractArray___clear},
+  {(bigint) standard___collection___array___AbstractArray___remove},
+  {(bigint) standard___collection___array___AbstractArray___remove_all},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -17497,9 +18987,11 @@ const classtable_elt_t VFT_standard___collection___array___Array[120] = {
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
   {(bigint) standard___string___Collection___join},
   {(bigint) standard___collection___array___Collection___to_a},
-  {(bigint) 6 /* 68: Array < Collection: superclass init_table position */},
+  {(bigint) 6 /* 70: Array < Collection: superclass init_table position */},
   {(bigint) standard___collection___array___AbstractArrayRead___iterator},
   {(bigint) standard___collection___array___Array___iterate},
   {(bigint) standard___collection___array___AbstractArrayRead___is_empty},
@@ -17509,22 +19001,28 @@ const classtable_elt_t VFT_standard___collection___array___Array[120] = {
   {(bigint) standard___collection___array___AbstractArrayRead___count},
   {(bigint) standard___collection___abstract_collection___SequenceRead___first},
   {(bigint) standard___math___Collection___rand},
-  {(bigint) 3 /* 78: Array < SequenceRead: superclass init_table position */},
+  {(bigint) 3 /* 80: Array < SequenceRead: superclass init_table position */},
   {(bigint) standard___collection___array___Array_____bra},
   {(bigint) standard___collection___abstract_collection___SequenceRead___last},
   {(bigint) standard___collection___array___AbstractArrayRead___index_of},
-  {(bigint) 5 /* 82: Array < RemovableCollection: superclass init_table position */},
-  {(bigint) standard___collection___array___AbstractArray___clear},
-  {(bigint) standard___collection___array___AbstractArray___remove},
-  {(bigint) standard___collection___array___AbstractArray___remove_all},
-  {(bigint) 1 /* 86: Array < AbstractArrayRead: superclass init_table position */},
+  {(bigint) 0 /* 84: Array < AbstractArray: superclass init_table position */},
+  {(bigint) standard___collection___array___Array___enlarge},
+  {(bigint) standard___collection___array___AbstractArray___insert},
+  {(bigint) standard___collection___array___AbstractArray___swap_at},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) 4 /* 90: Array < SimpleCollection: superclass init_table position */},
+  {(bigint) standard___collection___array___Array___add},
+  {(bigint) standard___collection___abstract_collection___SimpleCollection___add_all},
+  {(bigint) 1 /* 93: Array < AbstractArrayRead: superclass init_table position */},
   {(bigint) standard___collection___array___AbstractArrayRead___last_index_of},
   {(bigint) standard___collection___array___AbstractArrayRead___index_of_from},
   {(bigint) standard___collection___array___AbstractArrayRead___last_index_of_from},
   {(bigint) standard___collection___array___AbstractArrayRead___reversed},
   {(bigint) standard___collection___array___AbstractArrayRead___copy_to},
   {(bigint) standard___collection___array___AbstractArrayRead___init},
-  {(bigint) 2 /* 93: Array < Sequence: superclass init_table position */},
+  {(bigint) standard___collection___Sequence___subarray},
+  {(bigint) 2 /* 101: Array < Sequence: superclass init_table position */},
   {(bigint) standard___collection___abstract_collection___Sequence___first__eq},
   {(bigint) standard___collection___abstract_collection___Sequence___last__eq},
   {(bigint) standard___collection___array___AbstractArray___push},
@@ -17534,8 +19032,9 @@ const classtable_elt_t VFT_standard___collection___array___Array[120] = {
   {(bigint) standard___collection___array___AbstractArray___shift},
   {(bigint) standard___collection___array___Array_____braeq},
   {(bigint) standard___collection___array___AbstractArray___remove_at},
-  {(bigint) 9 /* 103: Array < Array: superclass init_table position */},
+  {(bigint) 9 /* 111: Array < Array: superclass init_table position */},
   {(bigint) standard___collection___array___Array___init},
+  {(bigint) standard___collection___array___Array___from},
   {(bigint) standard___collection___array___Array___with_items},
   {(bigint) standard___collection___array___Array___with_capacity},
   {(bigint) standard___collection___array___Array___filled_with},
@@ -17543,14 +19042,6 @@ const classtable_elt_t VFT_standard___collection___array___Array[120] = {
   {(bigint) standard___collection___array___Array___intern_items},
   {(bigint) standard___collection___array___Array___sort},
   {(bigint) standard___collection___array___Array___sub_sort},
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {(bigint) 0 /* 116: Array < AbstractArray: superclass init_table position */},
-  {(bigint) standard___collection___array___Array___enlarge},
-  {(bigint) standard___collection___array___AbstractArray___insert},
-  {(bigint) standard___collection___array___AbstractArray___swap_at},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -17572,15 +19063,15 @@ void INIT_ATTRIBUTES__standard___collection___array___Array(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:364 */
+  /* ../lib/standard/collection/array.nit:24 */
+  REGB0 = TAG_Int(0);
+  ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]) = REGB0;
+  /* ../lib/standard/collection/array.nit:370 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_standard___collection___array___Array____items(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/collection/array.nit:372 */
+  /* ../lib/standard/collection/array.nit:378 */
   REGB0 = TAG_Int(0);
   ATTR_standard___collection___array___Array____capacity(fra.me.REG[0]) = REGB0;
-  /* ../lib/standard/collection/array.nit:24 */
-  REGB0 = TAG_Int(0);
-  ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_standard___collection___array___Array(void)
@@ -17606,15 +19097,15 @@ void CHECKNEW_standard___collection___array___Array(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_standard___collection___array___Array____capacity(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___collection___array___Array____capacity(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_length", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -17626,14 +19117,14 @@ val_t NEW_Array_standard___collection___array___Array___with_capacity(val_t p0){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 332;
+  fra.me.line = 338;
   fra.me.meth = LOCATE_NEW_Array_standard___collection___array___Array___with_capacity;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* ../lib/standard/collection/array.nit:332 */
+  /* ../lib/standard/collection/array.nit:338 */
   fra.me.REG[0] = NEW_standard___collection___array___Array();
   INIT_ATTRIBUTES__standard___collection___array___Array(fra.me.REG[0]);
   standard___collection___array___Array___with_capacity(fra.me.REG[0], REGB0, init_table);
@@ -17670,7 +19161,7 @@ val_t NEW_Array_standard___collection___array___Array___filled_with(val_t p0, va
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 341;
+  fra.me.line = 347;
   fra.me.meth = LOCATE_NEW_Array_standard___collection___array___Array___filled_with;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17679,7 +19170,7 @@ val_t NEW_Array_standard___collection___array___Array___filled_with(val_t p0, va
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/collection/array.nit:341 */
+  /* ../lib/standard/collection/array.nit:347 */
   fra.me.REG[1] = NEW_standard___collection___array___Array();
   INIT_ATTRIBUTES__standard___collection___array___Array(fra.me.REG[1]);
   standard___collection___array___Array___filled_with(fra.me.REG[1], fra.me.REG[0], REGB0, init_table);
@@ -17694,7 +19185,7 @@ val_t NEW_Array_standard___collection___array___Array___with_items(val_t p0){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 324;
+  fra.me.line = 330;
   fra.me.meth = LOCATE_NEW_Array_standard___collection___array___Array___with_items;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17702,7 +19193,7 @@ val_t NEW_Array_standard___collection___array___Array___with_items(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:324 */
+  /* ../lib/standard/collection/array.nit:330 */
   fra.me.REG[1] = NEW_standard___collection___array___Array();
   INIT_ATTRIBUTES__standard___collection___array___Array(fra.me.REG[1]);
   standard___collection___array___Array___with_items(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -17710,6 +19201,29 @@ val_t NEW_Array_standard___collection___array___Array___with_items(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
+static const char LOCATE_NEW_Array_standard___collection___array___Array___from[] = "new Array array::Array::from";
+val_t NEW_Array_standard___collection___array___Array___from(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 324;
+  fra.me.meth = LOCATE_NEW_Array_standard___collection___array___Array___from;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ../lib/standard/collection/array.nit:324 */
+  fra.me.REG[1] = NEW_standard___collection___array___Array();
+  INIT_ATTRIBUTES__standard___collection___array___Array(fra.me.REG[1]);
+  standard___collection___array___Array___from(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_standard___collection___array___Array(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
 static const char LOCATE_NEW_Array_standard___collection___array___Array___with_native[] = "new Array array::Array::with_native";
 val_t NEW_Array_standard___collection___array___Array___with_native(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -17718,7 +19232,7 @@ val_t NEW_Array_standard___collection___array___Array___with_native(val_t p0, va
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 355;
+  fra.me.line = 361;
   fra.me.meth = LOCATE_NEW_Array_standard___collection___array___Array___with_native;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17727,7 +19241,7 @@ val_t NEW_Array_standard___collection___array___Array___with_native(val_t p0, va
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/collection/array.nit:355 */
+  /* ../lib/standard/collection/array.nit:361 */
   fra.me.REG[1] = NEW_standard___collection___array___Array();
   INIT_ATTRIBUTES__standard___collection___array___Array(fra.me.REG[1]);
   standard___collection___array___Array___with_native(fra.me.REG[1], fra.me.REG[0], REGB0, init_table);
@@ -17736,13 +19250,13 @@ val_t NEW_Array_standard___collection___array___Array___with_native(val_t p0, va
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_standard___collection___array___ArrayIterator[59] = {
-  {(bigint) 3219 /* 0: Identity */},
+  {(bigint) 3719 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ArrayIterator" /* 2: Class Name */},
   {(bigint) 3 /* 3: ArrayIterator < Object: superclass typecheck marker */},
   {(bigint) 187 /* 4: ArrayIterator < Iterator: superclass typecheck marker */},
-  {(bigint) 2671 /* 5: ArrayIterator < IndexedIterator: superclass typecheck marker */},
-  {(bigint) 3219 /* 6: ArrayIterator < ArrayIterator: superclass typecheck marker */},
+  {(bigint) 3167 /* 5: ArrayIterator < IndexedIterator: superclass typecheck marker */},
+  {(bigint) 3719 /* 6: ArrayIterator < ArrayIterator: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -17814,7 +19328,7 @@ void INIT_ATTRIBUTES__standard___collection___array___ArrayIterator(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:445 */
+  /* ../lib/standard/collection/array.nit:451 */
   REGB0 = TAG_Int(0);
   ATTR_standard___collection___array___ArrayIterator____index(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -17861,7 +19375,7 @@ val_t NEW_ArrayIterator_standard___collection___array___ArrayIterator___init(val
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 439;
+  fra.me.line = 445;
   fra.me.meth = LOCATE_NEW_ArrayIterator_standard___collection___array___ArrayIterator___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17869,7 +19383,7 @@ val_t NEW_ArrayIterator_standard___collection___array___ArrayIterator___init(val
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:439 */
+  /* ../lib/standard/collection/array.nit:445 */
   fra.me.REG[1] = NEW_standard___collection___array___ArrayIterator();
   INIT_ATTRIBUTES__standard___collection___array___ArrayIterator(fra.me.REG[1]);
   standard___collection___array___ArrayIterator___init(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -17877,19 +19391,19 @@ val_t NEW_ArrayIterator_standard___collection___array___ArrayIterator___init(val
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_standard___collection___array___ArraySet[91] = {
-  {(bigint) 4083 /* 0: Identity */},
+const classtable_elt_t VFT_standard___collection___array___ArraySet[98] = {
+  {(bigint) 4631 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ArraySet" /* 2: Class Name */},
   {(bigint) 3 /* 3: ArraySet < Object: superclass typecheck marker */},
-  {(bigint) 3683 /* 4: ArraySet < Set: superclass typecheck marker */},
+  {(bigint) 4195 /* 4: ArraySet < Set: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 283 /* 6: ArraySet < Collection: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 375 /* 8: ArraySet < RemovableCollection: superclass typecheck marker */},
-  {(bigint) 2959 /* 9: ArraySet < SimpleCollection: superclass typecheck marker */},
-  {(bigint) 4083 /* 10: ArraySet < ArraySet: superclass typecheck marker */},
+  {(bigint) 283 /* 7: ArraySet < Collection: superclass typecheck marker */},
   {0} /* Class Hole :( */,
+  {(bigint) 375 /* 9: ArraySet < RemovableCollection: superclass typecheck marker */},
+  {(bigint) 3459 /* 10: ArraySet < SimpleCollection: superclass typecheck marker */},
+  {(bigint) 4631 /* 11: ArraySet < ArraySet: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -17930,9 +19444,11 @@ const classtable_elt_t VFT_standard___collection___array___ArraySet[91] = {
   {(bigint) utils___Object___cmangle_table},
   {(bigint) 0 /* 50: ArraySet < Set: superclass init_table position */},
   {0} /* Class Hole :( */,
-  {(bigint) 1 /* 52: ArraySet < SimpleCollection: superclass init_table position */},
-  {(bigint) standard___collection___array___ArraySet___add},
-  {(bigint) standard___collection___abstract_collection___SimpleCollection___add_all},
+  {(bigint) 2 /* 52: ArraySet < RemovableCollection: superclass init_table position */},
+  {(bigint) standard___collection___array___ArraySet___clear},
+  {(bigint) standard___collection___array___ArraySet___remove},
+  {(bigint) standard___collection___array___ArraySet___remove_all},
+  {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -17946,7 +19462,7 @@ const classtable_elt_t VFT_standard___collection___array___ArraySet[91] = {
   {0} /* Class Hole :( */,
   {(bigint) standard___string___Collection___join},
   {(bigint) standard___collection___array___Collection___to_a},
-  {(bigint) 3 /* 68: ArraySet < Collection: superclass init_table position */},
+  {(bigint) 3 /* 70: ArraySet < Collection: superclass init_table position */},
   {(bigint) standard___collection___array___ArraySet___iterator},
   {(bigint) standard___collection___abstract_collection___Collection___iterate},
   {(bigint) standard___collection___array___ArraySet___is_empty},
@@ -17960,11 +19476,16 @@ const classtable_elt_t VFT_standard___collection___array___ArraySet[91] = {
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 2 /* 82: ArraySet < RemovableCollection: superclass init_table position */},
-  {(bigint) standard___collection___array___ArraySet___clear},
-  {(bigint) standard___collection___array___ArraySet___remove},
-  {(bigint) standard___collection___array___ArraySet___remove_all},
-  {(bigint) 5 /* 86: ArraySet < ArraySet: superclass init_table position */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) 1 /* 90: ArraySet < SimpleCollection: superclass init_table position */},
+  {(bigint) standard___collection___array___ArraySet___add},
+  {(bigint) standard___collection___abstract_collection___SimpleCollection___add_all},
+  {(bigint) 5 /* 93: ArraySet < ArraySet: superclass init_table position */},
   {(bigint) standard___collection___array___ArraySet___enlarge},
   {(bigint) standard___collection___array___ArraySet___remove_at},
   {(bigint) standard___collection___array___ArraySet___init},
@@ -18023,13 +19544,13 @@ val_t NEW_ArraySet_standard___collection___array___ArraySet___init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 493;
+  fra.me.line = 499;
   fra.me.meth = LOCATE_NEW_ArraySet_standard___collection___array___ArraySet___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* ../lib/standard/collection/array.nit:493 */
+  /* ../lib/standard/collection/array.nit:499 */
   fra.me.REG[0] = NEW_standard___collection___array___ArraySet();
   INIT_ATTRIBUTES__standard___collection___array___ArraySet(fra.me.REG[0]);
   standard___collection___array___ArraySet___init(fra.me.REG[0], init_table);
@@ -18045,14 +19566,14 @@ val_t NEW_ArraySet_standard___collection___array___ArraySet___with_capacity(val_
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 496;
+  fra.me.line = 502;
   fra.me.meth = LOCATE_NEW_ArraySet_standard___collection___array___ArraySet___with_capacity;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* ../lib/standard/collection/array.nit:496 */
+  /* ../lib/standard/collection/array.nit:502 */
   fra.me.REG[0] = NEW_standard___collection___array___ArraySet();
   INIT_ATTRIBUTES__standard___collection___array___ArraySet(fra.me.REG[0]);
   standard___collection___array___ArraySet___with_capacity(fra.me.REG[0], REGB0, init_table);
@@ -18061,12 +19582,12 @@ val_t NEW_ArraySet_standard___collection___array___ArraySet___with_capacity(val_
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_standard___collection___array___ArraySetIterator[57] = {
-  {(bigint) 2815 /* 0: Identity */},
+  {(bigint) 3311 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ArraySetIterator" /* 2: Class Name */},
   {(bigint) 3 /* 3: ArraySetIterator < Object: superclass typecheck marker */},
   {(bigint) 187 /* 4: ArraySetIterator < Iterator: superclass typecheck marker */},
-  {(bigint) 2815 /* 5: ArraySetIterator < ArraySetIterator: superclass typecheck marker */},
+  {(bigint) 3311 /* 5: ArraySetIterator < ArraySetIterator: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -18172,7 +19693,7 @@ val_t NEW_ArraySetIterator_standard___collection___array___ArraySetIterator___in
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 510;
+  fra.me.line = 516;
   fra.me.meth = LOCATE_NEW_ArraySetIterator_standard___collection___array___ArraySetIterator___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18180,7 +19701,7 @@ val_t NEW_ArraySetIterator_standard___collection___array___ArraySetIterator___in
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:510 */
+  /* ../lib/standard/collection/array.nit:516 */
   fra.me.REG[1] = NEW_standard___collection___array___ArraySetIterator();
   INIT_ATTRIBUTES__standard___collection___array___ArraySetIterator(fra.me.REG[1]);
   standard___collection___array___ArraySetIterator___init(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -18189,15 +19710,15 @@ val_t NEW_ArraySetIterator_standard___collection___array___ArraySetIterator___in
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_standard___collection___array___ArrayMap[75] = {
-  {(bigint) 3739 /* 0: Identity */},
+  {(bigint) 4251 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ArrayMap" /* 2: Class Name */},
   {(bigint) 3 /* 3: ArrayMap < Object: superclass typecheck marker */},
   {(bigint) 135 /* 4: ArrayMap < MapRead: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 2587 /* 6: ArrayMap < Map: superclass typecheck marker */},
-  {(bigint) 3179 /* 7: ArrayMap < CoupleMap: superclass typecheck marker */},
-  {(bigint) 3739 /* 8: ArrayMap < ArrayMap: superclass typecheck marker */},
+  {(bigint) 3079 /* 6: ArrayMap < Map: superclass typecheck marker */},
+  {(bigint) 3679 /* 7: ArrayMap < CoupleMap: superclass typecheck marker */},
+  {(bigint) 4251 /* 8: ArrayMap < ArrayMap: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -18286,15 +19807,15 @@ void INIT_ATTRIBUTES__standard___collection___array___ArrayMap(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:542 */
+  /* ../lib/standard/collection/array.nit:548 */
   fra.me.REG[1] = fra.me.REG[0];
   fra.me.REG[1] = NEW_ArrayMapKeys_standard___collection___array___ArrayMapKeys___init(fra.me.REG[1]);
   ATTR_standard___collection___array___ArrayMap_____atkeys(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/collection/array.nit:543 */
+  /* ../lib/standard/collection/array.nit:549 */
   fra.me.REG[1] = fra.me.REG[0];
   fra.me.REG[1] = NEW_ArrayMapValues_standard___collection___array___ArrayMapValues___init(fra.me.REG[1]);
   ATTR_standard___collection___array___ArrayMap_____atvalues(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/collection/array.nit:578 */
+  /* ../lib/standard/collection/array.nit:584 */
   REGB0 = TAG_Int(0);
   ATTR_standard___collection___array___ArrayMap____last_index(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -18351,13 +19872,13 @@ val_t NEW_ArrayMap_standard___collection___array___ArrayMap___init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 598;
+  fra.me.line = 604;
   fra.me.meth = LOCATE_NEW_ArrayMap_standard___collection___array___ArrayMap___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* ../lib/standard/collection/array.nit:598 */
+  /* ../lib/standard/collection/array.nit:604 */
   fra.me.REG[0] = NEW_standard___collection___array___ArrayMap();
   INIT_ATTRIBUTES__standard___collection___array___ArrayMap(fra.me.REG[0]);
   standard___collection___array___ArrayMap___init(fra.me.REG[0], init_table);
@@ -18365,18 +19886,18 @@ val_t NEW_ArrayMap_standard___collection___array___ArrayMap___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_standard___collection___array___ArrayMapKeys[90] = {
-  {(bigint) 3215 /* 0: Identity */},
+const classtable_elt_t VFT_standard___collection___array___ArrayMapKeys[84] = {
+  {(bigint) 3715 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ArrayMapKeys" /* 2: Class Name */},
   {(bigint) 3 /* 3: ArrayMapKeys < Object: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 283 /* 6: ArrayMapKeys < Collection: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 375 /* 8: ArrayMapKeys < RemovableCollection: superclass typecheck marker */},
-  {(bigint) 3215 /* 9: ArrayMapKeys < ArrayMapKeys: superclass typecheck marker */},
+  {(bigint) 283 /* 7: ArrayMapKeys < Collection: superclass typecheck marker */},
   {0} /* Class Hole :( */,
+  {(bigint) 375 /* 9: ArrayMapKeys < RemovableCollection: superclass typecheck marker */},
+  {(bigint) 3715 /* 10: ArrayMapKeys < ArrayMapKeys: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -18418,8 +19939,10 @@ const classtable_elt_t VFT_standard___collection___array___ArrayMapKeys[90] = {
   {(bigint) utils___Object___cmangle_table},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
+  {(bigint) 0 /* 52: ArrayMapKeys < RemovableCollection: superclass init_table position */},
+  {(bigint) standard___collection___array___ArrayMapKeys___clear},
+  {(bigint) standard___collection___array___ArrayMapKeys___remove},
+  {(bigint) standard___collection___array___ArrayMapKeys___remove_all},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -18434,7 +19957,7 @@ const classtable_elt_t VFT_standard___collection___array___ArrayMapKeys[90] = {
   {0} /* Class Hole :( */,
   {(bigint) standard___string___Collection___join},
   {(bigint) standard___collection___array___Collection___to_a},
-  {(bigint) 1 /* 68: ArrayMapKeys < Collection: superclass init_table position */},
+  {(bigint) 1 /* 70: ArrayMapKeys < Collection: superclass init_table position */},
   {(bigint) standard___collection___array___ArrayMapKeys___iterator},
   {(bigint) standard___collection___abstract_collection___Collection___iterate},
   {(bigint) standard___collection___array___ArrayMapKeys___is_empty},
@@ -18444,15 +19967,7 @@ const classtable_elt_t VFT_standard___collection___array___ArrayMapKeys[90] = {
   {(bigint) standard___collection___array___ArrayMapKeys___count},
   {(bigint) standard___collection___array___ArrayMapKeys___first},
   {(bigint) standard___math___Collection___rand},
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {(bigint) 0 /* 82: ArrayMapKeys < RemovableCollection: superclass init_table position */},
-  {(bigint) standard___collection___array___ArrayMapKeys___clear},
-  {(bigint) standard___collection___array___ArrayMapKeys___remove},
-  {(bigint) standard___collection___array___ArrayMapKeys___remove_all},
-  {(bigint) 3 /* 86: ArrayMapKeys < ArrayMapKeys: superclass init_table position */},
+  {(bigint) 3 /* 80: ArrayMapKeys < ArrayMapKeys: superclass init_table position */},
   {(bigint) standard___collection___array___ArrayMapKeys___map},
   {(bigint) standard___collection___array___ArrayMapKeys___map__eq},
   {(bigint) standard___collection___array___ArrayMapKeys___init},
@@ -18525,18 +20040,18 @@ val_t NEW_ArrayMapKeys_standard___collection___array___ArrayMapKeys___init(val_t
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_standard___collection___array___ArrayMapValues[90] = {
-  {(bigint) 3211 /* 0: Identity */},
+const classtable_elt_t VFT_standard___collection___array___ArrayMapValues[84] = {
+  {(bigint) 3711 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ArrayMapValues" /* 2: Class Name */},
   {(bigint) 3 /* 3: ArrayMapValues < Object: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 283 /* 6: ArrayMapValues < Collection: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 375 /* 8: ArrayMapValues < RemovableCollection: superclass typecheck marker */},
-  {(bigint) 3211 /* 9: ArrayMapValues < ArrayMapValues: superclass typecheck marker */},
+  {(bigint) 283 /* 7: ArrayMapValues < Collection: superclass typecheck marker */},
   {0} /* Class Hole :( */,
+  {(bigint) 375 /* 9: ArrayMapValues < RemovableCollection: superclass typecheck marker */},
+  {(bigint) 3711 /* 10: ArrayMapValues < ArrayMapValues: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -18578,8 +20093,10 @@ const classtable_elt_t VFT_standard___collection___array___ArrayMapValues[90] =
   {(bigint) utils___Object___cmangle_table},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
+  {(bigint) 0 /* 52: ArrayMapValues < RemovableCollection: superclass init_table position */},
+  {(bigint) standard___collection___array___ArrayMapValues___clear},
+  {(bigint) standard___collection___array___ArrayMapValues___remove},
+  {(bigint) standard___collection___array___ArrayMapValues___remove_all},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -18594,7 +20111,7 @@ const classtable_elt_t VFT_standard___collection___array___ArrayMapValues[90] =
   {0} /* Class Hole :( */,
   {(bigint) standard___string___Collection___join},
   {(bigint) standard___collection___array___Collection___to_a},
-  {(bigint) 1 /* 68: ArrayMapValues < Collection: superclass init_table position */},
+  {(bigint) 1 /* 70: ArrayMapValues < Collection: superclass init_table position */},
   {(bigint) standard___collection___array___ArrayMapValues___iterator},
   {(bigint) standard___collection___abstract_collection___Collection___iterate},
   {(bigint) standard___collection___array___ArrayMapValues___is_empty},
@@ -18604,15 +20121,7 @@ const classtable_elt_t VFT_standard___collection___array___ArrayMapValues[90] =
   {(bigint) standard___collection___array___ArrayMapValues___count},
   {(bigint) standard___collection___array___ArrayMapValues___first},
   {(bigint) standard___math___Collection___rand},
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {(bigint) 0 /* 82: ArrayMapValues < RemovableCollection: superclass init_table position */},
-  {(bigint) standard___collection___array___ArrayMapValues___clear},
-  {(bigint) standard___collection___array___ArrayMapValues___remove},
-  {(bigint) standard___collection___array___ArrayMapValues___remove_all},
-  {(bigint) 3 /* 86: ArrayMapValues < ArrayMapValues: superclass init_table position */},
+  {(bigint) 3 /* 80: ArrayMapValues < ArrayMapValues: superclass init_table position */},
   {(bigint) standard___collection___array___ArrayMapValues___map},
   {(bigint) standard___collection___array___ArrayMapValues___map__eq},
   {(bigint) standard___collection___array___ArrayMapValues___init},
@@ -18753,12 +20262,12 @@ val_t NEW_NativeArray(size_t length, size_t size) {
   return OBJ2VAL(array);
 }
 const classtable_elt_t VFT_standard___collection___sorter___ComparableSorter[58] = {
-  {(bigint) 2787 /* 0: Identity */},
+  {(bigint) 3283 /* 0: Identity */},
   {(bigint) 2 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ComparableSorter" /* 2: Class Name */},
   {(bigint) 3 /* 3: ComparableSorter < Object: superclass typecheck marker */},
   {(bigint) 307 /* 4: ComparableSorter < AbstractSorter: superclass typecheck marker */},
-  {(bigint) 2787 /* 5: ComparableSorter < ComparableSorter: superclass typecheck marker */},
+  {(bigint) 3283 /* 5: ComparableSorter < ComparableSorter: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -18870,16 +20379,16 @@ val_t NEW_ComparableSorter_standard___collection___sorter___ComparableSorter___i
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_standard___collection___hash_collection___HashMap[96] = {
-  {(bigint) 3159 /* 0: Identity */},
+const classtable_elt_t VFT_standard___collection___hash_collection___HashMap[90] = {
+  {(bigint) 3651 /* 0: Identity */},
   {(bigint) 11 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "HashMap" /* 2: Class Name */},
   {(bigint) 3 /* 3: HashMap < Object: superclass typecheck marker */},
   {(bigint) 135 /* 4: HashMap < MapRead: superclass typecheck marker */},
   {(bigint) 303 /* 5: HashMap < ArrayCapable: superclass typecheck marker */},
-  {(bigint) 2587 /* 6: HashMap < Map: superclass typecheck marker */},
-  {(bigint) 2719 /* 7: HashMap < HashCollection: superclass typecheck marker */},
-  {(bigint) 3159 /* 8: HashMap < HashMap: superclass typecheck marker */},
+  {(bigint) 3079 /* 6: HashMap < Map: superclass typecheck marker */},
+  {(bigint) 3651 /* 7: HashMap < HashMap: superclass typecheck marker */},
+  {(bigint) 3215 /* 8: HashMap < HashCollection: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -18951,13 +20460,7 @@ const classtable_elt_t VFT_standard___collection___hash_collection___HashMap[96]
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {(bigint) 3 /* 86: HashMap < HashCollection: superclass init_table position */},
+  {(bigint) 3 /* 80: HashMap < HashCollection: superclass init_table position */},
   {(bigint) standard___collection___hash_collection___HashCollection___first_item},
   {(bigint) standard___collection___hash_collection___HashCollection___index_at},
   {(bigint) standard___collection___hash_collection___HashCollection___node_at},
@@ -18994,14 +20497,6 @@ void INIT_ATTRIBUTES__standard___collection___hash_collection___HashMap(val_t p0
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/hash_collection.nit:255 */
-  fra.me.REG[1] = fra.me.REG[0];
-  fra.me.REG[1] = NEW_HashMapKeys_standard___collection___hash_collection___HashMapKeys___init(fra.me.REG[1]);
-  ATTR_standard___collection___hash_collection___HashMap_____atkeys(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/collection/hash_collection.nit:256 */
-  fra.me.REG[1] = fra.me.REG[0];
-  fra.me.REG[1] = NEW_HashMapValues_standard___collection___hash_collection___HashMapValues___init(fra.me.REG[1]);
-  ATTR_standard___collection___hash_collection___HashMap_____atvalues(fra.me.REG[0]) = fra.me.REG[1];
   /* ../lib/standard/collection/hash_collection.nit:23 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_standard___collection___hash_collection___HashCollection____array(fra.me.REG[0]) = fra.me.REG[1];
@@ -19023,6 +20518,14 @@ void INIT_ATTRIBUTES__standard___collection___hash_collection___HashMap(val_t p0
   /* ../lib/standard/collection/hash_collection.nit:33 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_standard___collection___hash_collection___HashCollection____last_accessed_node(fra.me.REG[0]) = fra.me.REG[1];
+  /* ../lib/standard/collection/hash_collection.nit:255 */
+  fra.me.REG[1] = fra.me.REG[0];
+  fra.me.REG[1] = NEW_HashMapKeys_standard___collection___hash_collection___HashMapKeys___init(fra.me.REG[1]);
+  ATTR_standard___collection___hash_collection___HashMap_____atkeys(fra.me.REG[0]) = fra.me.REG[1];
+  /* ../lib/standard/collection/hash_collection.nit:256 */
+  fra.me.REG[1] = fra.me.REG[0];
+  fra.me.REG[1] = NEW_HashMapValues_standard___collection___hash_collection___HashMapValues___init(fra.me.REG[1]);
+  ATTR_standard___collection___hash_collection___HashMap_____atvalues(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_standard___collection___hash_collection___HashMap(void)
@@ -19048,25 +20551,25 @@ void CHECKNEW_standard___collection___hash_collection___HashMap(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_standard___collection___hash_collection___HashMap_____atkeys(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___collection___hash_collection___HashCollection____capacity(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "@keys", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_standard___collection___hash_collection___HashMap_____atvalues(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___collection___hash_collection___HashCollection____length(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "@values", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_standard___collection___hash_collection___HashCollection____capacity(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___collection___hash_collection___HashMap_____atkeys(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "@keys", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_standard___collection___hash_collection___HashCollection____length(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___collection___hash_collection___HashMap_____atvalues(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_length", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "@values", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -19091,18 +20594,18 @@ val_t NEW_HashMap_standard___collection___hash_collection___HashMap___init(void)
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_standard___collection___hash_collection___HashMapKeys[90] = {
-  {(bigint) 3155 /* 0: Identity */},
+const classtable_elt_t VFT_standard___collection___hash_collection___HashMapKeys[84] = {
+  {(bigint) 3659 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "HashMapKeys" /* 2: Class Name */},
   {(bigint) 3 /* 3: HashMapKeys < Object: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 283 /* 6: HashMapKeys < Collection: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 375 /* 8: HashMapKeys < RemovableCollection: superclass typecheck marker */},
-  {(bigint) 3155 /* 9: HashMapKeys < HashMapKeys: superclass typecheck marker */},
+  {(bigint) 283 /* 7: HashMapKeys < Collection: superclass typecheck marker */},
   {0} /* Class Hole :( */,
+  {(bigint) 375 /* 9: HashMapKeys < RemovableCollection: superclass typecheck marker */},
+  {(bigint) 3659 /* 10: HashMapKeys < HashMapKeys: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -19144,8 +20647,10 @@ const classtable_elt_t VFT_standard___collection___hash_collection___HashMapKeys
   {(bigint) utils___Object___cmangle_table},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
+  {(bigint) 0 /* 52: HashMapKeys < RemovableCollection: superclass init_table position */},
+  {(bigint) standard___collection___hash_collection___HashMapKeys___clear},
+  {(bigint) standard___collection___hash_collection___HashMapKeys___remove},
+  {(bigint) standard___collection___hash_collection___HashMapKeys___remove_all},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -19160,7 +20665,7 @@ const classtable_elt_t VFT_standard___collection___hash_collection___HashMapKeys
   {0} /* Class Hole :( */,
   {(bigint) standard___string___Collection___join},
   {(bigint) standard___collection___array___Collection___to_a},
-  {(bigint) 1 /* 68: HashMapKeys < Collection: superclass init_table position */},
+  {(bigint) 1 /* 70: HashMapKeys < Collection: superclass init_table position */},
   {(bigint) standard___collection___hash_collection___HashMapKeys___iterator},
   {(bigint) standard___collection___abstract_collection___Collection___iterate},
   {(bigint) standard___collection___hash_collection___HashMapKeys___is_empty},
@@ -19170,15 +20675,7 @@ const classtable_elt_t VFT_standard___collection___hash_collection___HashMapKeys
   {(bigint) standard___collection___hash_collection___HashMapKeys___count},
   {(bigint) standard___collection___hash_collection___HashMapKeys___first},
   {(bigint) standard___math___Collection___rand},
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {(bigint) 0 /* 82: HashMapKeys < RemovableCollection: superclass init_table position */},
-  {(bigint) standard___collection___hash_collection___HashMapKeys___clear},
-  {(bigint) standard___collection___hash_collection___HashMapKeys___remove},
-  {(bigint) standard___collection___hash_collection___HashMapKeys___remove_all},
-  {(bigint) 3 /* 86: HashMapKeys < HashMapKeys: superclass init_table position */},
+  {(bigint) 3 /* 80: HashMapKeys < HashMapKeys: superclass init_table position */},
   {(bigint) standard___collection___hash_collection___HashMapKeys___map},
   {(bigint) standard___collection___hash_collection___HashMapKeys___map__eq},
   {(bigint) standard___collection___hash_collection___HashMapKeys___init},
@@ -19251,18 +20748,18 @@ val_t NEW_HashMapKeys_standard___collection___hash_collection___HashMapKeys___in
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_standard___collection___hash_collection___HashMapValues[90] = {
-  {(bigint) 3151 /* 0: Identity */},
+const classtable_elt_t VFT_standard___collection___hash_collection___HashMapValues[84] = {
+  {(bigint) 3655 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "HashMapValues" /* 2: Class Name */},
   {(bigint) 3 /* 3: HashMapValues < Object: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 283 /* 6: HashMapValues < Collection: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 375 /* 8: HashMapValues < RemovableCollection: superclass typecheck marker */},
-  {(bigint) 3151 /* 9: HashMapValues < HashMapValues: superclass typecheck marker */},
+  {(bigint) 283 /* 7: HashMapValues < Collection: superclass typecheck marker */},
   {0} /* Class Hole :( */,
+  {(bigint) 375 /* 9: HashMapValues < RemovableCollection: superclass typecheck marker */},
+  {(bigint) 3655 /* 10: HashMapValues < HashMapValues: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -19304,8 +20801,10 @@ const classtable_elt_t VFT_standard___collection___hash_collection___HashMapValu
   {(bigint) utils___Object___cmangle_table},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
+  {(bigint) 0 /* 52: HashMapValues < RemovableCollection: superclass init_table position */},
+  {(bigint) standard___collection___hash_collection___HashMapValues___clear},
+  {(bigint) standard___collection___hash_collection___HashMapValues___remove},
+  {(bigint) standard___collection___hash_collection___HashMapValues___remove_all},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -19320,7 +20819,7 @@ const classtable_elt_t VFT_standard___collection___hash_collection___HashMapValu
   {0} /* Class Hole :( */,
   {(bigint) standard___string___Collection___join},
   {(bigint) standard___collection___array___Collection___to_a},
-  {(bigint) 1 /* 68: HashMapValues < Collection: superclass init_table position */},
+  {(bigint) 1 /* 70: HashMapValues < Collection: superclass init_table position */},
   {(bigint) standard___collection___hash_collection___HashMapValues___iterator},
   {(bigint) standard___collection___abstract_collection___Collection___iterate},
   {(bigint) standard___collection___hash_collection___HashMapValues___is_empty},
@@ -19330,15 +20829,7 @@ const classtable_elt_t VFT_standard___collection___hash_collection___HashMapValu
   {(bigint) standard___collection___hash_collection___HashMapValues___count},
   {(bigint) standard___collection___hash_collection___HashMapValues___first},
   {(bigint) standard___math___Collection___rand},
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {(bigint) 0 /* 82: HashMapValues < RemovableCollection: superclass init_table position */},
-  {(bigint) standard___collection___hash_collection___HashMapValues___clear},
-  {(bigint) standard___collection___hash_collection___HashMapValues___remove},
-  {(bigint) standard___collection___hash_collection___HashMapValues___remove_all},
-  {(bigint) 3 /* 86: HashMapValues < HashMapValues: superclass init_table position */},
+  {(bigint) 3 /* 80: HashMapValues < HashMapValues: superclass init_table position */},
   {(bigint) standard___collection___hash_collection___HashMapValues___map},
   {(bigint) standard___collection___hash_collection___HashMapValues___map__eq},
   {(bigint) standard___collection___hash_collection___HashMapValues___init},
@@ -19412,12 +20903,12 @@ val_t NEW_HashMapValues_standard___collection___hash_collection___HashMapValues_
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_standard___collection___hash_collection___HashMapNode[60] = {
-  {(bigint) 2711 /* 0: Identity */},
+  {(bigint) 3207 /* 0: Identity */},
   {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "HashMapNode" /* 2: Class Name */},
   {(bigint) 3 /* 3: HashMapNode < Object: superclass typecheck marker */},
   {(bigint) 239 /* 4: HashMapNode < HashNode: superclass typecheck marker */},
-  {(bigint) 2711 /* 5: HashMapNode < HashMapNode: superclass typecheck marker */},
+  {(bigint) 3207 /* 5: HashMapNode < HashMapNode: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -19463,7 +20954,7 @@ const classtable_elt_t VFT_standard___collection___hash_collection___HashMapNode
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
   {(bigint) 0 /* 50: HashMapNode < HashNode: superclass init_table position */},
-  {(bigint) 2711 /* 51: VT HashMapNode::N : id of HashMapNode */},
+  {(bigint) 3207 /* 51: VT HashMapNode::N : id of HashMapNode */},
   {(bigint) 5 /* 52: VT HashMapNode::N : color of HashMapNode */},
   {(bigint) standard___collection___hash_collection___HashNode___next_item},
   {(bigint) standard___collection___hash_collection___HashNode___next_item__eq},
@@ -19565,12 +21056,12 @@ val_t NEW_HashMapNode_standard___collection___hash_collection___HashMapNode___in
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_standard___collection___hash_collection___HashMapIterator[57] = {
-  {(bigint) 2715 /* 0: Identity */},
+  {(bigint) 3211 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "HashMapIterator" /* 2: Class Name */},
   {(bigint) 3 /* 3: HashMapIterator < Object: superclass typecheck marker */},
   {(bigint) 139 /* 4: HashMapIterator < MapIterator: superclass typecheck marker */},
-  {(bigint) 2715 /* 5: HashMapIterator < HashMapIterator: superclass typecheck marker */},
+  {(bigint) 3211 /* 5: HashMapIterator < HashMapIterator: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -19693,18 +21184,18 @@ val_t NEW_HashMapIterator_standard___collection___hash_collection___HashMapItera
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_standard___collection___hash_collection___HashSet[96] = {
-  {(bigint) 4079 /* 0: Identity */},
+const classtable_elt_t VFT_standard___collection___hash_collection___HashSet[93] = {
+  {(bigint) 4627 /* 0: Identity */},
   {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "HashSet" /* 2: Class Name */},
   {(bigint) 3 /* 3: HashSet < Object: superclass typecheck marker */},
-  {(bigint) 3683 /* 4: HashSet < Set: superclass typecheck marker */},
+  {(bigint) 4195 /* 4: HashSet < Set: superclass typecheck marker */},
   {(bigint) 303 /* 5: HashSet < ArrayCapable: superclass typecheck marker */},
-  {(bigint) 283 /* 6: HashSet < Collection: superclass typecheck marker */},
-  {(bigint) 2719 /* 7: HashSet < HashCollection: superclass typecheck marker */},
-  {(bigint) 375 /* 8: HashSet < RemovableCollection: superclass typecheck marker */},
-  {(bigint) 2959 /* 9: HashSet < SimpleCollection: superclass typecheck marker */},
-  {(bigint) 4079 /* 10: HashSet < HashSet: superclass typecheck marker */},
+  {(bigint) 4627 /* 6: HashSet < HashSet: superclass typecheck marker */},
+  {(bigint) 283 /* 7: HashSet < Collection: superclass typecheck marker */},
+  {(bigint) 3215 /* 8: HashSet < HashCollection: superclass typecheck marker */},
+  {(bigint) 375 /* 9: HashSet < RemovableCollection: superclass typecheck marker */},
+  {(bigint) 3459 /* 10: HashSet < SimpleCollection: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -19746,13 +21237,13 @@ const classtable_elt_t VFT_standard___collection___hash_collection___HashSet[96]
   {(bigint) utils___Object___cmangle_table},
   {(bigint) 0 /* 50: HashSet < Set: superclass init_table position */},
   {0} /* Class Hole :( */,
-  {(bigint) 1 /* 52: HashSet < SimpleCollection: superclass init_table position */},
-  {(bigint) standard___collection___hash_collection___HashSet___add},
-  {(bigint) standard___collection___abstract_collection___SimpleCollection___add_all},
-  {(bigint) 7 /* 55: HashSet < HashSet: superclass init_table position */},
+  {(bigint) 2 /* 52: HashSet < RemovableCollection: superclass init_table position */},
+  {(bigint) standard___collection___hash_collection___HashSet___clear},
+  {(bigint) standard___collection___hash_collection___HashSet___remove},
+  {(bigint) standard___collection___abstract_collection___Set___remove_all},
+  {(bigint) 7 /* 56: HashSet < HashSet: superclass init_table position */},
   {(bigint) standard___collection___hash_collection___HashSet___init},
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
+  {(bigint) standard___collection___hash_collection___HashSet___from},
   {(bigint) 6 /* 59: HashSet < ArrayCapable: superclass init_table position */},
   {(bigint) standard___collection___array___ArrayCapable___calloc_array},
   {0} /* Class Hole :( */,
@@ -19760,9 +21251,11 @@ const classtable_elt_t VFT_standard___collection___hash_collection___HashSet[96]
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
   {(bigint) standard___string___Collection___join},
   {(bigint) standard___collection___array___Collection___to_a},
-  {(bigint) 3 /* 68: HashSet < Collection: superclass init_table position */},
+  {(bigint) 3 /* 70: HashSet < Collection: superclass init_table position */},
   {(bigint) standard___collection___hash_collection___HashSet___iterator},
   {(bigint) standard___collection___abstract_collection___Collection___iterate},
   {(bigint) standard___collection___hash_collection___HashSet___is_empty},
@@ -19772,15 +21265,7 @@ const classtable_elt_t VFT_standard___collection___hash_collection___HashSet[96]
   {(bigint) standard___collection___abstract_collection___Set___count},
   {(bigint) standard___collection___hash_collection___HashSet___first},
   {(bigint) standard___math___Collection___rand},
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {(bigint) 2 /* 82: HashSet < RemovableCollection: superclass init_table position */},
-  {(bigint) standard___collection___hash_collection___HashSet___clear},
-  {(bigint) standard___collection___hash_collection___HashSet___remove},
-  {(bigint) standard___collection___abstract_collection___Set___remove_all},
-  {(bigint) 5 /* 86: HashSet < HashCollection: superclass init_table position */},
+  {(bigint) 5 /* 80: HashSet < HashCollection: superclass init_table position */},
   {(bigint) standard___collection___hash_collection___HashCollection___first_item},
   {(bigint) standard___collection___hash_collection___HashCollection___index_at},
   {(bigint) standard___collection___hash_collection___HashCollection___node_at},
@@ -19790,6 +21275,9 @@ const classtable_elt_t VFT_standard___collection___hash_collection___HashSet[96]
   {(bigint) standard___collection___hash_collection___HashCollection___raz},
   {(bigint) standard___collection___hash_collection___HashCollection___enlarge},
   {(bigint) standard___collection___hash_collection___HashCollection___init},
+  {(bigint) 1 /* 90: HashSet < SimpleCollection: superclass init_table position */},
+  {(bigint) standard___collection___hash_collection___HashSet___add},
+  {(bigint) standard___collection___abstract_collection___SimpleCollection___add_all},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -19894,13 +21382,36 @@ val_t NEW_HashSet_standard___collection___hash_collection___HashSet___init(void)
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
+static const char LOCATE_NEW_HashSet_standard___collection___hash_collection___HashSet___from[] = "new HashSet hash_collection::HashSet::from";
+val_t NEW_HashSet_standard___collection___hash_collection___HashSet___from(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[8] = {0, 0, 0, 0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 449;
+  fra.me.meth = LOCATE_NEW_HashSet_standard___collection___hash_collection___HashSet___from;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ../lib/standard/collection/hash_collection.nit:449 */
+  fra.me.REG[1] = NEW_standard___collection___hash_collection___HashSet();
+  INIT_ATTRIBUTES__standard___collection___hash_collection___HashSet(fra.me.REG[1]);
+  standard___collection___hash_collection___HashSet___from(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_standard___collection___hash_collection___HashSet(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
 const classtable_elt_t VFT_standard___collection___hash_collection___HashSetNode[60] = {
-  {(bigint) 2703 /* 0: Identity */},
+  {(bigint) 3199 /* 0: Identity */},
   {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "HashSetNode" /* 2: Class Name */},
   {(bigint) 3 /* 3: HashSetNode < Object: superclass typecheck marker */},
   {(bigint) 239 /* 4: HashSetNode < HashNode: superclass typecheck marker */},
-  {(bigint) 2703 /* 5: HashSetNode < HashSetNode: superclass typecheck marker */},
+  {(bigint) 3199 /* 5: HashSetNode < HashSetNode: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -19946,7 +21457,7 @@ const classtable_elt_t VFT_standard___collection___hash_collection___HashSetNode
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
   {(bigint) 0 /* 50: HashSetNode < HashNode: superclass init_table position */},
-  {(bigint) 2703 /* 51: VT HashSetNode::N : id of HashSetNode */},
+  {(bigint) 3199 /* 51: VT HashSetNode::N : id of HashSetNode */},
   {(bigint) 5 /* 52: VT HashSetNode::N : color of HashSetNode */},
   {(bigint) standard___collection___hash_collection___HashNode___next_item},
   {(bigint) standard___collection___hash_collection___HashNode___next_item__eq},
@@ -20028,7 +21539,7 @@ val_t NEW_HashSetNode_standard___collection___hash_collection___HashSetNode___in
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 454;
+  fra.me.line = 460;
   fra.me.meth = LOCATE_NEW_HashSetNode_standard___collection___hash_collection___HashSetNode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20036,7 +21547,7 @@ val_t NEW_HashSetNode_standard___collection___hash_collection___HashSetNode___in
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/hash_collection.nit:454 */
+  /* ../lib/standard/collection/hash_collection.nit:460 */
   fra.me.REG[1] = NEW_standard___collection___hash_collection___HashSetNode();
   INIT_ATTRIBUTES__standard___collection___hash_collection___HashSetNode(fra.me.REG[1]);
   standard___collection___hash_collection___HashSetNode___init(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -20045,12 +21556,12 @@ val_t NEW_HashSetNode_standard___collection___hash_collection___HashSetNode___in
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_standard___collection___hash_collection___HashSetIterator[57] = {
-  {(bigint) 2707 /* 0: Identity */},
+  {(bigint) 3203 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "HashSetIterator" /* 2: Class Name */},
   {(bigint) 3 /* 3: HashSetIterator < Object: superclass typecheck marker */},
   {(bigint) 187 /* 4: HashSetIterator < Iterator: superclass typecheck marker */},
-  {(bigint) 2707 /* 5: HashSetIterator < HashSetIterator: superclass typecheck marker */},
+  {(bigint) 3203 /* 5: HashSetIterator < HashSetIterator: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -20157,7 +21668,7 @@ val_t NEW_HashSetIterator_standard___collection___hash_collection___HashSetItera
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 482;
+  fra.me.line = 488;
   fra.me.meth = LOCATE_NEW_HashSetIterator_standard___collection___hash_collection___HashSetIterator___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20165,7 +21676,7 @@ val_t NEW_HashSetIterator_standard___collection___hash_collection___HashSetItera
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/hash_collection.nit:482 */
+  /* ../lib/standard/collection/hash_collection.nit:488 */
   fra.me.REG[1] = NEW_standard___collection___hash_collection___HashSetIterator();
   INIT_ATTRIBUTES__standard___collection___hash_collection___HashSetIterator(fra.me.REG[1]);
   standard___collection___hash_collection___HashSetIterator___init(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -20173,21 +21684,21 @@ val_t NEW_HashSetIterator_standard___collection___hash_collection___HashSetItera
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_standard___string___String[143] = {
-  {(bigint) 4055 /* 0: Identity */},
-  {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_standard___string___String[157] = {
+  {(bigint) 4603 /* 0: Identity */},
+  {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "String" /* 2: Class Name */},
   {(bigint) 3 /* 3: String < Object: superclass typecheck marker */},
-  {(bigint) 103 /* 4: String < Pattern: superclass typecheck marker */},
-  {(bigint) 275 /* 5: String < Comparable: superclass typecheck marker */},
-  {(bigint) 283 /* 6: String < Collection: superclass typecheck marker */},
-  {(bigint) 355 /* 7: String < SequenceRead: superclass typecheck marker */},
-  {(bigint) 4055 /* 8: String < String: superclass typecheck marker */},
+  {(bigint) 35 /* 4: String < StringCapable: superclass typecheck marker */},
+  {(bigint) 103 /* 5: String < Pattern: superclass typecheck marker */},
+  {(bigint) 275 /* 6: String < Comparable: superclass typecheck marker */},
+  {(bigint) 283 /* 7: String < Collection: superclass typecheck marker */},
+  {(bigint) 355 /* 8: String < SequenceRead: superclass typecheck marker */},
+  {(bigint) 4603 /* 9: String < String: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3227 /* 10: String < AbstractArrayRead: superclass typecheck marker */},
-  {0} /* Class Hole :( */,
-  {(bigint) 3743 /* 12: String < AbstractString: superclass typecheck marker */},
+  {(bigint) 3727 /* 11: String < AbstractArrayRead: superclass typecheck marker */},
   {0} /* Class Hole :( */,
+  {(bigint) 4255 /* 13: String < AbstractString: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -20198,7 +21709,7 @@ const classtable_elt_t VFT_standard___string___String[143] = {
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___string___String_____eqeq},
   {(bigint) standard___kernel___Object_____neq},
-  {(bigint) standard___string___AbstractString___output},
+  {(bigint) standard___string___String___output},
   {(bigint) standard___kernel___Object___output_class_name},
   {(bigint) standard___kernel___Object___exit},
   {(bigint) standard___kernel___Object___sys},
@@ -20224,14 +21735,16 @@ const classtable_elt_t VFT_standard___string___String[143] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 6 /* 50: String < Pattern: superclass init_table position */},
+  {(bigint) 6 /* 50: String < StringCapable: superclass init_table position */},
+  {(bigint) standard___string___StringCapable___calloc_string},
+  {(bigint) 7 /* 52: String < Pattern: superclass init_table position */},
   {(bigint) standard___string_search___String___search_index_in},
   {(bigint) standard___string_search___String___search_in},
   {(bigint) standard___string_search___Pattern___search_all_in},
   {(bigint) standard___string_search___Pattern___split_in},
-  {(bigint) 0 /* 55: String < Comparable: superclass init_table position */},
-  {(bigint) 4055 /* 56: VT String::OTHER : id of String */},
-  {(bigint) 8 /* 57: VT String::OTHER : color of String */},
+  {(bigint) 0 /* 57: String < Comparable: superclass init_table position */},
+  {(bigint) 4603 /* 58: VT String::OTHER : id of String */},
+  {(bigint) 9 /* 59: VT String::OTHER : color of String */},
   {(bigint) standard___string___String_____l},
   {(bigint) standard___kernel___Comparable_____leq},
   {(bigint) standard___kernel___Comparable_____geq},
@@ -20242,7 +21755,7 @@ const classtable_elt_t VFT_standard___string___String[143] = {
   {(bigint) standard___kernel___Comparable___min},
   {(bigint) standard___string___Collection___join},
   {(bigint) standard___collection___array___Collection___to_a},
-  {(bigint) 5 /* 68: String < Collection: superclass init_table position */},
+  {(bigint) 5 /* 70: String < Collection: superclass init_table position */},
   {(bigint) standard___collection___array___AbstractArrayRead___iterator},
   {(bigint) standard___collection___abstract_collection___Collection___iterate},
   {(bigint) standard___collection___array___AbstractArrayRead___is_empty},
@@ -20252,15 +21765,20 @@ const classtable_elt_t VFT_standard___string___String[143] = {
   {(bigint) standard___collection___array___AbstractArrayRead___count},
   {(bigint) standard___collection___abstract_collection___SequenceRead___first},
   {(bigint) standard___math___Collection___rand},
-  {(bigint) 4 /* 78: String < SequenceRead: superclass init_table position */},
-  {(bigint) standard___string___AbstractString_____bra},
+  {(bigint) 4 /* 80: String < SequenceRead: superclass init_table position */},
+  {(bigint) standard___string___String_____bra},
   {(bigint) standard___collection___abstract_collection___SequenceRead___last},
   {(bigint) standard___collection___array___AbstractArrayRead___index_of},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 3 /* 86: String < AbstractArrayRead: superclass init_table position */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) 3 /* 93: String < AbstractArrayRead: superclass init_table position */},
   {(bigint) standard___collection___array___AbstractArrayRead___last_index_of},
   {(bigint) standard___collection___array___AbstractArrayRead___index_of_from},
   {(bigint) standard___collection___array___AbstractArrayRead___last_index_of_from},
@@ -20277,25 +21795,32 @@ const classtable_elt_t VFT_standard___string___String[143] = {
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 2 /* 103: String < AbstractString: superclass init_table position */},
+  {0} /* Class Hole :( */,
+  {(bigint) 2 /* 111: String < AbstractString: superclass init_table position */},
   {(bigint) standard___string___AbstractString___items},
-  {(bigint) standard___string___AbstractString___substring},
-  {(bigint) standard___string___AbstractString___substring_from},
-  {(bigint) standard___string___AbstractString___has_substring},
+  {(bigint) standard___string___String___substring},
+  {(bigint) standard___string___String___substring_from},
+  {(bigint) standard___string___String___has_substring},
   {(bigint) standard___string___AbstractString___has_prefix},
   {(bigint) standard___string___AbstractString___has_suffix},
   {(bigint) standard___string___AbstractString___to_i},
   {(bigint) standard___string___AbstractString___to_f},
   {(bigint) standard___string___AbstractString___to_hex},
   {(bigint) standard___string___AbstractString___a_to},
-  {(bigint) standard___string___AbstractString___to_upper},
-  {(bigint) standard___string___AbstractString___to_lower},
+  {(bigint) standard___string___AbstractString___is_numeric},
+  {(bigint) standard___string___String___to_upper},
+  {(bigint) standard___string___String___to_lower},
+  {(bigint) standard___string___String___trim},
   {(bigint) symbol___String___to_symbol},
   {(bigint) standard___environ___String___environ},
   {(bigint) standard___environ___String___setenv},
-  {(bigint) 7 /* 119: String < String: superclass init_table position */},
+  {(bigint) 8 /* 129: String < String: superclass init_table position */},
+  {(bigint) standard___string___String___index_from},
+  {(bigint) standard___string___String___index_to},
+  {(bigint) standard___string___String___from_substring},
   {(bigint) standard___string___String___with_native},
   {(bigint) standard___string___String___from_cstring},
+  {(bigint) standard___string___String___copy_from_native},
   {(bigint) standard___string___String___to_cstring},
   {(bigint) standard___string___String_____plus},
   {(bigint) standard___string___String_____star},
@@ -20313,8 +21838,8 @@ const classtable_elt_t VFT_standard___string___String[143] = {
   {(bigint) standard___string_search___String___search},
   {(bigint) standard___string_search___String___search_from},
   {(bigint) standard___string_search___String___search_all},
-  {(bigint) standard___string_search___String___split_with},
   {(bigint) standard___string_search___String___split},
+  {(bigint) standard___string_search___String___split_with},
   {(bigint) standard___string_search___String___replace},
   {(bigint) standard___string_search___String___html_escape},
 };
@@ -20322,6 +21847,8 @@ const classtable_elt_t VFT_standard___string___String[143] = {
 /* 1: Object_id */
 /* 2: Attribute String::_length */
 /* 3: Attribute String::_items */
+/* 4: Attribute String::_index_from */
+/* 5: Attribute String::_index_to */
 static const char LOCATE_INIT_ATTRIBUTES__standard___string___String[] = "init var of String";
 void INIT_ATTRIBUTES__standard___string___String(val_t p0){
   struct {struct stack_frame_t me;} fra;
@@ -20344,7 +21871,7 @@ void INIT_ATTRIBUTES__standard___string___String(val_t p0){
 val_t NEW_standard___string___String(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 4);
+  obj = alloc(sizeof(val_t) * 6);
   obj->vft = (classtable_elt_t*)VFT_standard___string___String;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -20364,15 +21891,25 @@ void CHECKNEW_standard___string___String(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_items", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_length", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_standard___string___String____index_to(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_to", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -20381,10 +21918,10 @@ val_t NEW_String_standard___string___String___with_native(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  int init_table[8] = {0, 0, 0, 0, 0, 0, 0, 0};
+  int init_table[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 177;
+  fra.me.line = 401;
   fra.me.meth = LOCATE_NEW_String_standard___string___String___with_native;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20393,7 +21930,7 @@ val_t NEW_String_standard___string___String___with_native(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/string.nit:177 */
+  /* ../lib/standard/string.nit:401 */
   fra.me.REG[1] = NEW_standard___string___String();
   INIT_ATTRIBUTES__standard___string___String(fra.me.REG[1]);
   standard___string___String___with_native(fra.me.REG[1], fra.me.REG[0], REGB0, init_table);
@@ -20405,10 +21942,10 @@ static const char LOCATE_NEW_String_standard___string___String___from_cstring[]
 val_t NEW_String_standard___string___String___from_cstring(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  int init_table[8] = {0, 0, 0, 0, 0, 0, 0, 0};
+  int init_table[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 185;
+  fra.me.line = 411;
   fra.me.meth = LOCATE_NEW_String_standard___string___String___from_cstring;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20416,7 +21953,7 @@ val_t NEW_String_standard___string___String___from_cstring(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:185 */
+  /* ../lib/standard/string.nit:411 */
   fra.me.REG[1] = NEW_standard___string___String();
   INIT_ATTRIBUTES__standard___string___String(fra.me.REG[1]);
   standard___string___String___from_cstring(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -20424,22 +21961,72 @@ val_t NEW_String_standard___string___String___from_cstring(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_standard___string___Buffer[126] = {
-  {(bigint) 4267 /* 0: Identity */},
+static const char LOCATE_NEW_String_standard___string___String___from_substring[] = "new String string::String::from_substring";
+val_t NEW_String_standard___string___String___from_substring(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  int init_table[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 387;
+  fra.me.meth = LOCATE_NEW_String_standard___string___String___from_substring;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  REGB0 = p0;
+  REGB1 = p1;
+  fra.me.REG[0] = p2;
+  /* ../lib/standard/string.nit:387 */
+  fra.me.REG[1] = NEW_standard___string___String();
+  INIT_ATTRIBUTES__standard___string___String(fra.me.REG[1]);
+  standard___string___String___from_substring(fra.me.REG[1], REGB0, REGB1, fra.me.REG[0], init_table);
+  CHECKNEW_standard___string___String(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_NEW_String_standard___string___String___copy_from_native[] = "new String string::String::copy_from_native";
+val_t NEW_String_standard___string___String___copy_from_native(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 417;
+  fra.me.meth = LOCATE_NEW_String_standard___string___String___copy_from_native;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ../lib/standard/string.nit:417 */
+  fra.me.REG[1] = NEW_standard___string___String();
+  INIT_ATTRIBUTES__standard___string___String(fra.me.REG[1]);
+  standard___string___String___copy_from_native(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_standard___string___String(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+const classtable_elt_t VFT_standard___string___Buffer[132] = {
+  {(bigint) 4823 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "Buffer" /* 2: Class Name */},
   {(bigint) 3 /* 3: Buffer < Object: superclass typecheck marker */},
   {(bigint) 35 /* 4: Buffer < StringCapable: superclass typecheck marker */},
-  {(bigint) 275 /* 5: Buffer < Comparable: superclass typecheck marker */},
-  {(bigint) 283 /* 6: Buffer < Collection: superclass typecheck marker */},
-  {(bigint) 355 /* 7: Buffer < SequenceRead: superclass typecheck marker */},
-  {(bigint) 375 /* 8: Buffer < RemovableCollection: superclass typecheck marker */},
-  {(bigint) 2959 /* 9: Buffer < SimpleCollection: superclass typecheck marker */},
-  {(bigint) 3227 /* 10: Buffer < AbstractArrayRead: superclass typecheck marker */},
-  {(bigint) 3687 /* 11: Buffer < Sequence: superclass typecheck marker */},
-  {(bigint) 3743 /* 12: Buffer < AbstractString: superclass typecheck marker */},
-  {(bigint) 4087 /* 13: Buffer < AbstractArray: superclass typecheck marker */},
-  {(bigint) 4267 /* 14: Buffer < Buffer: superclass typecheck marker */},
+  {(bigint) 4823 /* 5: Buffer < Buffer: superclass typecheck marker */},
+  {(bigint) 275 /* 6: Buffer < Comparable: superclass typecheck marker */},
+  {(bigint) 283 /* 7: Buffer < Collection: superclass typecheck marker */},
+  {(bigint) 355 /* 8: Buffer < SequenceRead: superclass typecheck marker */},
+  {(bigint) 375 /* 9: Buffer < RemovableCollection: superclass typecheck marker */},
+  {(bigint) 3459 /* 10: Buffer < SimpleCollection: superclass typecheck marker */},
+  {(bigint) 3727 /* 11: Buffer < AbstractArrayRead: superclass typecheck marker */},
+  {(bigint) 4199 /* 12: Buffer < Sequence: superclass typecheck marker */},
+  {(bigint) 4255 /* 13: Buffer < AbstractString: superclass typecheck marker */},
+  {(bigint) 4635 /* 14: Buffer < AbstractArray: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
@@ -20477,12 +22064,14 @@ const classtable_elt_t VFT_standard___string___Buffer[126] = {
   {(bigint) utils___Object___cmangle_table},
   {(bigint) 6 /* 50: Buffer < StringCapable: superclass init_table position */},
   {(bigint) standard___string___StringCapable___calloc_string},
-  {(bigint) 9 /* 52: Buffer < SimpleCollection: superclass init_table position */},
-  {(bigint) standard___string___Buffer___add},
-  {(bigint) standard___collection___abstract_collection___SimpleCollection___add_all},
-  {(bigint) 5 /* 55: Buffer < Comparable: superclass init_table position */},
-  {(bigint) 4055 /* 56: VT Buffer::OTHER : id of String */},
-  {(bigint) 8 /* 57: VT Buffer::OTHER : color of String */},
+  {(bigint) 10 /* 52: Buffer < RemovableCollection: superclass init_table position */},
+  {(bigint) standard___collection___array___AbstractArray___clear},
+  {(bigint) standard___collection___array___AbstractArray___remove},
+  {(bigint) standard___collection___array___AbstractArray___remove_all},
+  {0} /* Class Hole :( */,
+  {(bigint) 5 /* 57: Buffer < Comparable: superclass init_table position */},
+  {(bigint) 4603 /* 58: VT Buffer::OTHER : id of String */},
+  {(bigint) 9 /* 59: VT Buffer::OTHER : color of String */},
   {(bigint) standard___string___Buffer_____l},
   {(bigint) standard___kernel___Comparable_____leq},
   {(bigint) standard___kernel___Comparable_____geq},
@@ -20493,7 +22082,7 @@ const classtable_elt_t VFT_standard___string___Buffer[126] = {
   {(bigint) standard___kernel___Comparable___min},
   {(bigint) standard___string___Collection___join},
   {(bigint) standard___collection___array___Collection___to_a},
-  {(bigint) 3 /* 68: Buffer < Collection: superclass init_table position */},
+  {(bigint) 3 /* 70: Buffer < Collection: superclass init_table position */},
   {(bigint) standard___collection___array___AbstractArrayRead___iterator},
   {(bigint) standard___collection___abstract_collection___Collection___iterate},
   {(bigint) standard___collection___array___AbstractArrayRead___is_empty},
@@ -20503,22 +22092,28 @@ const classtable_elt_t VFT_standard___string___Buffer[126] = {
   {(bigint) standard___collection___array___AbstractArrayRead___count},
   {(bigint) standard___collection___abstract_collection___SequenceRead___first},
   {(bigint) standard___math___Collection___rand},
-  {(bigint) 2 /* 78: Buffer < SequenceRead: superclass init_table position */},
+  {(bigint) 2 /* 80: Buffer < SequenceRead: superclass init_table position */},
   {(bigint) standard___string___AbstractString_____bra},
   {(bigint) standard___collection___abstract_collection___SequenceRead___last},
   {(bigint) standard___collection___array___AbstractArrayRead___index_of},
-  {(bigint) 10 /* 82: Buffer < RemovableCollection: superclass init_table position */},
-  {(bigint) standard___collection___array___AbstractArray___clear},
-  {(bigint) standard___collection___array___AbstractArray___remove},
-  {(bigint) standard___collection___array___AbstractArray___remove_all},
-  {(bigint) 1 /* 86: Buffer < AbstractArrayRead: superclass init_table position */},
+  {(bigint) 7 /* 84: Buffer < AbstractArray: superclass init_table position */},
+  {(bigint) standard___string___Buffer___enlarge},
+  {(bigint) standard___collection___array___AbstractArray___insert},
+  {(bigint) standard___collection___array___AbstractArray___swap_at},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) 9 /* 90: Buffer < SimpleCollection: superclass init_table position */},
+  {(bigint) standard___string___Buffer___add},
+  {(bigint) standard___collection___abstract_collection___SimpleCollection___add_all},
+  {(bigint) 1 /* 93: Buffer < AbstractArrayRead: superclass init_table position */},
   {(bigint) standard___collection___array___AbstractArrayRead___last_index_of},
   {(bigint) standard___collection___array___AbstractArrayRead___index_of_from},
   {(bigint) standard___collection___array___AbstractArrayRead___last_index_of_from},
   {(bigint) standard___collection___array___AbstractArrayRead___reversed},
   {(bigint) standard___collection___array___AbstractArrayRead___copy_to},
   {(bigint) standard___collection___array___AbstractArrayRead___init},
-  {(bigint) 8 /* 93: Buffer < Sequence: superclass init_table position */},
+  {(bigint) standard___collection___Sequence___subarray},
+  {(bigint) 8 /* 101: Buffer < Sequence: superclass init_table position */},
   {(bigint) standard___collection___abstract_collection___Sequence___first__eq},
   {(bigint) standard___collection___abstract_collection___Sequence___last__eq},
   {(bigint) standard___collection___array___AbstractArray___push},
@@ -20528,7 +22123,7 @@ const classtable_elt_t VFT_standard___string___Buffer[126] = {
   {(bigint) standard___collection___array___AbstractArray___shift},
   {(bigint) standard___string___Buffer_____braeq},
   {(bigint) standard___collection___array___AbstractArray___remove_at},
-  {(bigint) 0 /* 103: Buffer < AbstractString: superclass init_table position */},
+  {(bigint) 0 /* 111: Buffer < AbstractString: superclass init_table position */},
   {(bigint) standard___string___AbstractString___items},
   {(bigint) standard___string___AbstractString___substring},
   {(bigint) standard___string___AbstractString___substring_from},
@@ -20539,13 +22134,11 @@ const classtable_elt_t VFT_standard___string___Buffer[126] = {
   {(bigint) standard___string___AbstractString___to_f},
   {(bigint) standard___string___AbstractString___to_hex},
   {(bigint) standard___string___AbstractString___a_to},
+  {(bigint) standard___string___AbstractString___is_numeric},
   {(bigint) standard___string___AbstractString___to_upper},
   {(bigint) standard___string___AbstractString___to_lower},
-  {(bigint) 7 /* 116: Buffer < AbstractArray: superclass init_table position */},
-  {(bigint) standard___string___Buffer___enlarge},
-  {(bigint) standard___collection___array___AbstractArray___insert},
-  {(bigint) standard___collection___array___AbstractArray___swap_at},
-  {(bigint) 11 /* 120: Buffer < Buffer: superclass init_table position */},
+  {(bigint) standard___string___AbstractString___trim},
+  {(bigint) 11 /* 126: Buffer < Buffer: superclass init_table position */},
   {(bigint) standard___collection___abstract_collection___Sequence___append},
   {(bigint) standard___string___Buffer___init},
   {(bigint) standard___string___Buffer___from},
@@ -20599,20 +22192,20 @@ void CHECKNEW_standard___string___Buffer(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_standard___string___Buffer____capacity(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_items", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___string___Buffer____capacity(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_length", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -20623,13 +22216,13 @@ val_t NEW_Buffer_standard___string___Buffer___init(void){
   int init_table[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 359;
+  fra.me.line = 652;
   fra.me.meth = LOCATE_NEW_Buffer_standard___string___Buffer___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* ../lib/standard/string.nit:359 */
+  /* ../lib/standard/string.nit:652 */
   fra.me.REG[0] = NEW_standard___string___Buffer();
   INIT_ATTRIBUTES__standard___string___Buffer(fra.me.REG[0]);
   standard___string___Buffer___init(fra.me.REG[0], init_table);
@@ -20644,7 +22237,7 @@ val_t NEW_Buffer_standard___string___Buffer___from(val_t p0){
   int init_table[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 365;
+  fra.me.line = 658;
   fra.me.meth = LOCATE_NEW_Buffer_standard___string___Buffer___from;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20652,7 +22245,7 @@ val_t NEW_Buffer_standard___string___Buffer___from(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:365 */
+  /* ../lib/standard/string.nit:658 */
   fra.me.REG[1] = NEW_standard___string___Buffer();
   INIT_ATTRIBUTES__standard___string___Buffer(fra.me.REG[1]);
   standard___string___Buffer___from(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -20668,14 +22261,14 @@ val_t NEW_Buffer_standard___string___Buffer___with_capacity(val_t p0){
   int init_table[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 373;
+  fra.me.line = 666;
   fra.me.meth = LOCATE_NEW_Buffer_standard___string___Buffer___with_capacity;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* ../lib/standard/string.nit:373 */
+  /* ../lib/standard/string.nit:666 */
   fra.me.REG[0] = NEW_standard___string___Buffer();
   INIT_ATTRIBUTES__standard___string___Buffer(fra.me.REG[0]);
   standard___string___Buffer___with_capacity(fra.me.REG[0], REGB0, init_table);
@@ -20761,16 +22354,16 @@ val_t BOX_NativeString(char * val) {
   return OBJ2VAL(box);
 }
 const classtable_elt_t VFT_standard___stream___FDIStream[79] = {
-  {(bigint) 3167 /* 0: Identity */},
+  {(bigint) 3667 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "FDIStream" /* 2: Class Name */},
   {(bigint) 3 /* 3: FDIStream < Object: superclass typecheck marker */},
-  {(bigint) 2735 /* 4: FDIStream < FDStream: superclass typecheck marker */},
+  {(bigint) 3231 /* 4: FDIStream < FDStream: superclass typecheck marker */},
   {(bigint) 203 /* 5: FDIStream < IOS: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 2675 /* 7: FDIStream < IStream: superclass typecheck marker */},
+  {(bigint) 3171 /* 7: FDIStream < IStream: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3167 /* 9: FDIStream < FDIStream: superclass typecheck marker */},
+  {(bigint) 3667 /* 9: FDIStream < FDIStream: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -20888,15 +22481,15 @@ void CHECKNEW_standard___stream___FDIStream(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_standard___stream___FDIStream_____ateof(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___stream___FDStream_____atfd(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "@eof", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "@fd", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_standard___stream___FDStream_____atfd(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___stream___FDIStream_____ateof(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "@fd", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "@eof", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -20924,15 +22517,15 @@ val_t NEW_FDIStream_standard___stream___FDIStream___init(val_t p0){
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_standard___stream___FDOStream[76] = {
-  {(bigint) 3163 /* 0: Identity */},
+  {(bigint) 3663 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "FDOStream" /* 2: Class Name */},
   {(bigint) 3 /* 3: FDOStream < Object: superclass typecheck marker */},
-  {(bigint) 2735 /* 4: FDOStream < FDStream: superclass typecheck marker */},
+  {(bigint) 3231 /* 4: FDOStream < FDStream: superclass typecheck marker */},
   {(bigint) 203 /* 5: FDOStream < IOS: superclass typecheck marker */},
-  {(bigint) 2555 /* 6: FDOStream < OStream: superclass typecheck marker */},
+  {(bigint) 3051 /* 6: FDOStream < OStream: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3163 /* 8: FDOStream < FDOStream: superclass typecheck marker */},
+  {(bigint) 3663 /* 8: FDOStream < FDOStream: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -21041,15 +22634,15 @@ void CHECKNEW_standard___stream___FDOStream(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_standard___stream___FDOStream_____atis_writable(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___stream___FDStream_____atfd(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "@is_writable", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "@fd", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_standard___stream___FDStream_____atfd(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___stream___FDOStream_____atis_writable(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "@fd", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "@is_writable", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -21077,18 +22670,18 @@ val_t NEW_FDOStream_standard___stream___FDOStream___init(val_t p0){
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_standard___stream___FDIOStream[84] = {
-  {(bigint) 3735 /* 0: Identity */},
+  {(bigint) 4247 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "FDIOStream" /* 2: Class Name */},
   {(bigint) 3 /* 3: FDIOStream < Object: superclass typecheck marker */},
-  {(bigint) 2735 /* 4: FDIOStream < FDStream: superclass typecheck marker */},
+  {(bigint) 3231 /* 4: FDIOStream < FDStream: superclass typecheck marker */},
   {(bigint) 203 /* 5: FDIOStream < IOS: superclass typecheck marker */},
-  {(bigint) 2555 /* 6: FDIOStream < OStream: superclass typecheck marker */},
-  {(bigint) 2675 /* 7: FDIOStream < IStream: superclass typecheck marker */},
-  {(bigint) 3163 /* 8: FDIOStream < FDOStream: superclass typecheck marker */},
-  {(bigint) 3167 /* 9: FDIOStream < FDIStream: superclass typecheck marker */},
-  {(bigint) 3067 /* 10: FDIOStream < IOStream: superclass typecheck marker */},
-  {(bigint) 3735 /* 11: FDIOStream < FDIOStream: superclass typecheck marker */},
+  {(bigint) 3051 /* 6: FDIOStream < OStream: superclass typecheck marker */},
+  {(bigint) 3171 /* 7: FDIOStream < IStream: superclass typecheck marker */},
+  {(bigint) 3663 /* 8: FDIOStream < FDOStream: superclass typecheck marker */},
+  {(bigint) 3667 /* 9: FDIOStream < FDIStream: superclass typecheck marker */},
+  {(bigint) 3567 /* 10: FDIOStream < IOStream: superclass typecheck marker */},
+  {(bigint) 4247 /* 11: FDIOStream < FDIOStream: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -21209,11 +22802,6 @@ void CHECKNEW_standard___stream___FDIOStream(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_standard___stream___FDIStream_____ateof(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "@eof", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_standard___stream___FDStream_____atfd(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -21224,6 +22812,11 @@ void CHECKNEW_standard___stream___FDIOStream(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "@is_writable", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_standard___stream___FDIStream_____ateof(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "@eof", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_FDIOStream_standard___stream___FDIOStream___init[] = "new FDIOStream stream::FDIOStream::init";
@@ -21249,14 +22842,14 @@ val_t NEW_FDIOStream_standard___stream___FDIOStream___init(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_standard___string_search___BM_Pattern[61] = {
-  {(bigint) 2807 /* 0: Identity */},
+const classtable_elt_t VFT_standard___string_search___BM_Pattern[63] = {
+  {(bigint) 3303 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "BM_Pattern" /* 2: Class Name */},
   {(bigint) 3 /* 3: BM_Pattern < Object: superclass typecheck marker */},
-  {(bigint) 103 /* 4: BM_Pattern < Pattern: superclass typecheck marker */},
-  {(bigint) 2807 /* 5: BM_Pattern < BM_Pattern: superclass typecheck marker */},
   {0} /* Class Hole :( */,
+  {(bigint) 103 /* 5: BM_Pattern < Pattern: superclass typecheck marker */},
+  {(bigint) 3303 /* 6: BM_Pattern < BM_Pattern: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -21300,12 +22893,14 @@ const classtable_elt_t VFT_standard___string_search___BM_Pattern[61] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: BM_Pattern < Pattern: superclass init_table position */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) 0 /* 52: BM_Pattern < Pattern: superclass init_table position */},
   {(bigint) standard___string_search___BM_Pattern___search_index_in},
   {(bigint) standard___string_search___BM_Pattern___search_in},
   {(bigint) standard___string_search___Pattern___search_all_in},
   {(bigint) standard___string_search___Pattern___split_in},
-  {(bigint) 2 /* 55: BM_Pattern < BM_Pattern: superclass init_table position */},
+  {(bigint) 2 /* 57: BM_Pattern < BM_Pattern: superclass init_table position */},
   {(bigint) standard___string_search___BM_Pattern___init},
   {(bigint) standard___string_search___BM_Pattern___bc},
   {(bigint) standard___string_search___BM_Pattern___compute_bc},
@@ -21543,15 +23138,15 @@ val_t NEW_Match_standard___string_search___Match___init(val_t p0, val_t p1, val_
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_standard___file___IFStream[78] = {
-  {(bigint) 3727 /* 0: Identity */},
+  {(bigint) 4239 /* 0: Identity */},
   {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IFStream" /* 2: Class Name */},
   {(bigint) 3 /* 3: IFStream < Object: superclass typecheck marker */},
-  {(bigint) 2731 /* 4: IFStream < FStream: superclass typecheck marker */},
+  {(bigint) 3227 /* 4: IFStream < FStream: superclass typecheck marker */},
   {(bigint) 203 /* 5: IFStream < IOS: superclass typecheck marker */},
-  {(bigint) 3203 /* 6: IFStream < BufferedIStream: superclass typecheck marker */},
-  {(bigint) 2675 /* 7: IFStream < IStream: superclass typecheck marker */},
-  {(bigint) 3727 /* 8: IFStream < IFStream: superclass typecheck marker */},
+  {(bigint) 3703 /* 6: IFStream < BufferedIStream: superclass typecheck marker */},
+  {(bigint) 3171 /* 7: IFStream < IStream: superclass typecheck marker */},
+  {(bigint) 4239 /* 8: IFStream < IFStream: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -21644,21 +23239,21 @@ void INIT_ATTRIBUTES__standard___file___IFStream(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/file.nit:99 */
-  REGB0 = TAG_Bool(0);
-  ATTR_standard___file___IFStream____end_reached(fra.me.REG[0]) = REGB0;
-  /* ../lib/standard/file.nit:54 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_standard___file___FStream____path(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/file.nit:57 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_standard___file___FStream____file(fra.me.REG[0]) = fra.me.REG[1];
   /* ../lib/standard/stream.nit:186 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_standard___stream___BufferedIStream____buffer(fra.me.REG[0]) = fra.me.REG[1];
   /* ../lib/standard/stream.nit:190 */
   REGB0 = TAG_Int(0);
   ATTR_standard___stream___BufferedIStream____buffer_pos(fra.me.REG[0]) = REGB0;
+  /* ../lib/standard/file.nit:54 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_standard___file___FStream____path(fra.me.REG[0]) = fra.me.REG[1];
+  /* ../lib/standard/file.nit:57 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_standard___file___FStream____file(fra.me.REG[0]) = fra.me.REG[1];
+  /* ../lib/standard/file.nit:99 */
+  REGB0 = TAG_Bool(0);
+  ATTR_standard___file___IFStream____end_reached(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_standard___file___IFStream(void)
@@ -21684,15 +23279,15 @@ void CHECKNEW_standard___file___IFStream(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_standard___file___IFStream____end_reached(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___stream___BufferedIStream____buffer_pos(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_end_reached", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_buffer_pos", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_standard___stream___BufferedIStream____buffer_pos(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___file___IFStream____end_reached(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_buffer_pos", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_end_reached", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -21762,14 +23357,14 @@ val_t NEW_IFStream_standard___file___IFStream___without_file(void){
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_standard___file___OFStream[66] = {
-  {(bigint) 2991 /* 0: Identity */},
+  {(bigint) 3491 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "OFStream" /* 2: Class Name */},
   {(bigint) 3 /* 3: OFStream < Object: superclass typecheck marker */},
-  {(bigint) 2731 /* 4: OFStream < FStream: superclass typecheck marker */},
+  {(bigint) 3227 /* 4: OFStream < FStream: superclass typecheck marker */},
   {(bigint) 203 /* 5: OFStream < IOS: superclass typecheck marker */},
-  {(bigint) 2555 /* 6: OFStream < OStream: superclass typecheck marker */},
-  {(bigint) 2991 /* 7: OFStream < OFStream: superclass typecheck marker */},
+  {(bigint) 3051 /* 6: OFStream < OStream: superclass typecheck marker */},
+  {(bigint) 3491 /* 7: OFStream < OFStream: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -21952,16 +23547,16 @@ val_t NEW_OFStream_standard___file___OFStream___without_file(void){
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_standard___file___Stdin[81] = {
-  {(bigint) 4059 /* 0: Identity */},
+  {(bigint) 4607 /* 0: Identity */},
   {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "Stdin" /* 2: Class Name */},
   {(bigint) 3 /* 3: Stdin < Object: superclass typecheck marker */},
-  {(bigint) 2731 /* 4: Stdin < FStream: superclass typecheck marker */},
+  {(bigint) 3227 /* 4: Stdin < FStream: superclass typecheck marker */},
   {(bigint) 203 /* 5: Stdin < IOS: superclass typecheck marker */},
-  {(bigint) 3203 /* 6: Stdin < BufferedIStream: superclass typecheck marker */},
-  {(bigint) 2675 /* 7: Stdin < IStream: superclass typecheck marker */},
-  {(bigint) 3727 /* 8: Stdin < IFStream: superclass typecheck marker */},
-  {(bigint) 4059 /* 9: Stdin < Stdin: superclass typecheck marker */},
+  {(bigint) 3703 /* 6: Stdin < BufferedIStream: superclass typecheck marker */},
+  {(bigint) 3171 /* 7: Stdin < IStream: superclass typecheck marker */},
+  {(bigint) 4239 /* 8: Stdin < IFStream: superclass typecheck marker */},
+  {(bigint) 4607 /* 9: Stdin < Stdin: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -22056,21 +23651,21 @@ void INIT_ATTRIBUTES__standard___file___Stdin(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/file.nit:99 */
-  REGB0 = TAG_Bool(0);
-  ATTR_standard___file___IFStream____end_reached(fra.me.REG[0]) = REGB0;
-  /* ../lib/standard/file.nit:54 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_standard___file___FStream____path(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/file.nit:57 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_standard___file___FStream____file(fra.me.REG[0]) = fra.me.REG[1];
   /* ../lib/standard/stream.nit:186 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_standard___stream___BufferedIStream____buffer(fra.me.REG[0]) = fra.me.REG[1];
   /* ../lib/standard/stream.nit:190 */
   REGB0 = TAG_Int(0);
   ATTR_standard___stream___BufferedIStream____buffer_pos(fra.me.REG[0]) = REGB0;
+  /* ../lib/standard/file.nit:54 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_standard___file___FStream____path(fra.me.REG[0]) = fra.me.REG[1];
+  /* ../lib/standard/file.nit:57 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_standard___file___FStream____file(fra.me.REG[0]) = fra.me.REG[1];
+  /* ../lib/standard/file.nit:99 */
+  REGB0 = TAG_Bool(0);
+  ATTR_standard___file___IFStream____end_reached(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_standard___file___Stdin(void)
@@ -22096,15 +23691,15 @@ void CHECKNEW_standard___file___Stdin(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_standard___file___IFStream____end_reached(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___stream___BufferedIStream____buffer_pos(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_end_reached", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_buffer_pos", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_standard___stream___BufferedIStream____buffer_pos(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___file___IFStream____end_reached(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_buffer_pos", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_end_reached", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -22130,15 +23725,15 @@ val_t NEW_Stdin_standard___file___Stdin___init(void){
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_standard___file___Stdout[68] = {
-  {(bigint) 3675 /* 0: Identity */},
+  {(bigint) 4187 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "Stdout" /* 2: Class Name */},
   {(bigint) 3 /* 3: Stdout < Object: superclass typecheck marker */},
-  {(bigint) 2731 /* 4: Stdout < FStream: superclass typecheck marker */},
+  {(bigint) 3227 /* 4: Stdout < FStream: superclass typecheck marker */},
   {(bigint) 203 /* 5: Stdout < IOS: superclass typecheck marker */},
-  {(bigint) 2555 /* 6: Stdout < OStream: superclass typecheck marker */},
-  {(bigint) 2991 /* 7: Stdout < OFStream: superclass typecheck marker */},
-  {(bigint) 3675 /* 8: Stdout < Stdout: superclass typecheck marker */},
+  {(bigint) 3051 /* 6: Stdout < OStream: superclass typecheck marker */},
+  {(bigint) 3491 /* 7: Stdout < OFStream: superclass typecheck marker */},
+  {(bigint) 4187 /* 8: Stdout < Stdout: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -22278,15 +23873,15 @@ val_t NEW_Stdout_standard___file___Stdout___init(void){
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_standard___file___Stderr[68] = {
-  {(bigint) 3679 /* 0: Identity */},
+  {(bigint) 4191 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "Stderr" /* 2: Class Name */},
   {(bigint) 3 /* 3: Stderr < Object: superclass typecheck marker */},
-  {(bigint) 2731 /* 4: Stderr < FStream: superclass typecheck marker */},
+  {(bigint) 3227 /* 4: Stderr < FStream: superclass typecheck marker */},
   {(bigint) 203 /* 5: Stderr < IOS: superclass typecheck marker */},
-  {(bigint) 2555 /* 6: Stderr < OStream: superclass typecheck marker */},
-  {(bigint) 2991 /* 7: Stderr < OFStream: superclass typecheck marker */},
-  {(bigint) 3679 /* 8: Stderr < Stderr: superclass typecheck marker */},
+  {(bigint) 3051 /* 6: Stderr < OStream: superclass typecheck marker */},
+  {(bigint) 3491 /* 7: Stderr < OFStream: superclass typecheck marker */},
+  {(bigint) 4191 /* 8: Stderr < Stderr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -22752,16 +24347,16 @@ val_t NEW_Process_standard___exec___Process___execute(val_t p0, val_t p1, val_t
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_standard___exec___IProcess[83] = {
-  {(bigint) 3059 /* 0: Identity */},
+  {(bigint) 3559 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IProcess" /* 2: Class Name */},
   {(bigint) 3 /* 3: IProcess < Object: superclass typecheck marker */},
   {(bigint) 95 /* 4: IProcess < Process: superclass typecheck marker */},
   {(bigint) 203 /* 5: IProcess < IOS: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 2675 /* 7: IProcess < IStream: superclass typecheck marker */},
+  {(bigint) 3171 /* 7: IProcess < IStream: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3059 /* 9: IProcess < IProcess: superclass typecheck marker */},
+  {(bigint) 3559 /* 9: IProcess < IProcess: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -22877,15 +24472,15 @@ void CHECKNEW_standard___exec___IProcess(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_standard___exec___IProcess_____atstream_in(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___exec___Process_____atdata(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "@stream_in", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "@data", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_standard___exec___Process_____atdata(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___exec___IProcess_____atstream_in(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "@data", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "@stream_in", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -22938,15 +24533,15 @@ val_t NEW_IProcess_standard___exec___IProcess___init_(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_standard___exec___OProcess[78] = {
-  {(bigint) 2987 /* 0: Identity */},
+  {(bigint) 3487 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "OProcess" /* 2: Class Name */},
   {(bigint) 3 /* 3: OProcess < Object: superclass typecheck marker */},
   {(bigint) 95 /* 4: OProcess < Process: superclass typecheck marker */},
   {(bigint) 203 /* 5: OProcess < IOS: superclass typecheck marker */},
-  {(bigint) 2555 /* 6: OProcess < OStream: superclass typecheck marker */},
+  {(bigint) 3051 /* 6: OProcess < OStream: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 2987 /* 8: OProcess < OProcess: superclass typecheck marker */},
+  {(bigint) 3487 /* 8: OProcess < OProcess: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -23057,15 +24652,15 @@ void CHECKNEW_standard___exec___OProcess(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_standard___exec___OProcess_____atstream_out(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___exec___Process_____atdata(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "@stream_out", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "@data", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_standard___exec___Process_____atdata(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_standard___exec___OProcess_____atstream_out(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "@data", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "@stream_out", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -23118,18 +24713,18 @@ val_t NEW_OProcess_standard___exec___OProcess___init_(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_standard___exec___IOProcess[87] = {
-  {(bigint) 3715 /* 0: Identity */},
+  {(bigint) 4227 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IOProcess" /* 2: Class Name */},
   {(bigint) 3 /* 3: IOProcess < Object: superclass typecheck marker */},
   {(bigint) 95 /* 4: IOProcess < Process: superclass typecheck marker */},
   {(bigint) 203 /* 5: IOProcess < IOS: superclass typecheck marker */},
-  {(bigint) 2555 /* 6: IOProcess < OStream: superclass typecheck marker */},
-  {(bigint) 2675 /* 7: IOProcess < IStream: superclass typecheck marker */},
-  {(bigint) 2987 /* 8: IOProcess < OProcess: superclass typecheck marker */},
-  {(bigint) 3059 /* 9: IOProcess < IProcess: superclass typecheck marker */},
-  {(bigint) 3067 /* 10: IOProcess < IOStream: superclass typecheck marker */},
-  {(bigint) 3715 /* 11: IOProcess < IOProcess: superclass typecheck marker */},
+  {(bigint) 3051 /* 6: IOProcess < OStream: superclass typecheck marker */},
+  {(bigint) 3171 /* 7: IOProcess < IStream: superclass typecheck marker */},
+  {(bigint) 3487 /* 8: IOProcess < OProcess: superclass typecheck marker */},
+  {(bigint) 3559 /* 9: IOProcess < IProcess: superclass typecheck marker */},
+  {(bigint) 3567 /* 10: IOProcess < IOStream: superclass typecheck marker */},
+  {(bigint) 4227 /* 11: IOProcess < IOProcess: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -23247,11 +24842,6 @@ void CHECKNEW_standard___exec___IOProcess(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_standard___exec___IProcess_____atstream_in(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "@stream_in", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_standard___exec___Process_____atdata(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -23262,6 +24852,11 @@ void CHECKNEW_standard___exec___IOProcess(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "@stream_out", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_standard___exec___IProcess_____atstream_in(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "@stream_in", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_IOProcess_standard___exec___IOProcess___init[] = "new IOProcess exec::IOProcess::init";
@@ -23383,16 +24978,16 @@ val_t BOX_NativeProcess(void* val) {
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(box);
 }
-const classtable_elt_t VFT_metamodel___partial_order___PartialOrder[92] = {
-  {(bigint) 2527 /* 0: Identity */},
+const classtable_elt_t VFT_metamodel___partial_order___PartialOrder[94] = {
+  {(bigint) 3023 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "PartialOrder" /* 2: Class Name */},
   {(bigint) 3 /* 3: PartialOrder < Object: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 283 /* 6: PartialOrder < Collection: superclass typecheck marker */},
-  {(bigint) 2527 /* 7: PartialOrder < PartialOrder: superclass typecheck marker */},
   {0} /* Class Hole :( */,
+  {(bigint) 283 /* 7: PartialOrder < Collection: superclass typecheck marker */},
+  {(bigint) 3023 /* 8: PartialOrder < PartialOrder: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -23450,9 +25045,11 @@ const classtable_elt_t VFT_metamodel___partial_order___PartialOrder[92] = {
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
   {(bigint) standard___string___Collection___join},
   {(bigint) standard___collection___array___Collection___to_a},
-  {(bigint) 0 /* 68: PartialOrder < Collection: superclass init_table position */},
+  {(bigint) 0 /* 70: PartialOrder < Collection: superclass init_table position */},
   {(bigint) metamodel___partial_order___PartialOrder___iterator},
   {(bigint) standard___collection___abstract_collection___Collection___iterate},
   {(bigint) metamodel___partial_order___PartialOrder___is_empty},
@@ -23462,7 +25059,7 @@ const classtable_elt_t VFT_metamodel___partial_order___PartialOrder[92] = {
   {(bigint) metamodel___partial_order___PartialOrder___count},
   {(bigint) metamodel___partial_order___PartialOrder___first},
   {(bigint) standard___math___Collection___rand},
-  {(bigint) 2 /* 78: PartialOrder < PartialOrder: superclass init_table position */},
+  {(bigint) 2 /* 80: PartialOrder < PartialOrder: superclass init_table position */},
   {(bigint) metamodel___partial_order___PartialOrder___roots},
   {(bigint) metamodel___partial_order___PartialOrder_____bra},
   {(bigint) metamodel___partial_order___PartialOrder___to_dot},
@@ -23749,7 +25346,7 @@ val_t NEW_PartialOrderElement_metamodel___partial_order___PartialOrderElement___
   stack_frame_head = fra.me.prev;
   return fra.me.REG[3];
 }
-const classtable_elt_t VFT_location___SourceFile[58] = {
+const classtable_elt_t VFT_location___SourceFile[59] = {
   {(bigint) 43 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "SourceFile" /* 2: Class Name */},
@@ -23806,6 +25403,7 @@ const classtable_elt_t VFT_location___SourceFile[58] = {
   {(bigint) location___SourceFile___string},
   {(bigint) location___SourceFile___string__eq},
   {(bigint) location___SourceFile___init},
+  {(bigint) location___SourceFile___from_string},
   {(bigint) location___SourceFile___line_starts},
   {(bigint) location___SourceFile___line_starts__eq},
 };
@@ -23828,7 +25426,7 @@ void INIT_ATTRIBUTES__location___SourceFile(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* location.nit:37 */
+  /* location.nit:45 */
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
   ATTR_location___SourceFile_____atline_starts(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -23898,15 +25496,40 @@ val_t NEW_SourceFile_location___SourceFile___init(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[2];
 }
-const classtable_elt_t VFT_location___Location[81] = {
-  {(bigint) 2647 /* 0: Identity */},
+static const char LOCATE_NEW_SourceFile_location___SourceFile___from_string[] = "new SourceFile location::SourceFile::from_string";
+val_t NEW_SourceFile_location___SourceFile___from_string(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t tmp;
+  int init_table[2] = {0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 36;
+  fra.me.meth = LOCATE_NEW_SourceFile_location___SourceFile___from_string;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* location.nit:36 */
+  fra.me.REG[2] = NEW_location___SourceFile();
+  INIT_ATTRIBUTES__location___SourceFile(fra.me.REG[2]);
+  location___SourceFile___from_string(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_location___SourceFile(fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[2];
+}
+const classtable_elt_t VFT_location___Location[83] = {
+  {(bigint) 3143 /* 0: Identity */},
   {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "Location" /* 2: Class Name */},
   {(bigint) 3 /* 3: Location < Object: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 275 /* 5: Location < Comparable: superclass typecheck marker */},
-  {(bigint) 2647 /* 6: Location < Location: superclass typecheck marker */},
   {0} /* Class Hole :( */,
+  {(bigint) 275 /* 6: Location < Comparable: superclass typecheck marker */},
+  {(bigint) 3143 /* 7: Location < Location: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -23954,9 +25577,11 @@ const classtable_elt_t VFT_location___Location[81] = {
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 0 /* 55: Location < Comparable: superclass init_table position */},
-  {(bigint) 2647 /* 56: VT Location::OTHER : id of Location */},
-  {(bigint) 6 /* 57: VT Location::OTHER : color of Location */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) 0 /* 57: Location < Comparable: superclass init_table position */},
+  {(bigint) 3143 /* 58: VT Location::OTHER : id of Location */},
+  {(bigint) 7 /* 59: VT Location::OTHER : color of Location */},
   {(bigint) location___Location_____l},
   {(bigint) standard___kernel___Comparable_____leq},
   {(bigint) standard___kernel___Comparable_____geq},
@@ -23966,7 +25591,7 @@ const classtable_elt_t VFT_location___Location[81] = {
   {(bigint) standard___kernel___Comparable___max},
   {(bigint) standard___kernel___Comparable___min},
   {(bigint) ffi___c___Location___as_line_pragma},
-  {(bigint) 2 /* 67: Location < Location: superclass init_table position */},
+  {(bigint) 2 /* 69: Location < Location: superclass init_table position */},
   {(bigint) location___Location___file},
   {(bigint) location___Location___line_start},
   {(bigint) location___Location___line_end},
@@ -24058,7 +25683,7 @@ val_t NEW_Location_location___Location___init(val_t p0, val_t p1, val_t p2, val_
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 51;
+  fra.me.line = 59;
   fra.me.meth = LOCATE_NEW_Location_location___Location___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -24070,7 +25695,7 @@ val_t NEW_Location_location___Location___init(val_t p0, val_t p1, val_t p2, val_
   REGB1 = p2;
   REGB2 = p3;
   REGB3 = p4;
-  /* location.nit:51 */
+  /* location.nit:59 */
   fra.me.REG[1] = NEW_location___Location();
   INIT_ATTRIBUTES__location___Location(fra.me.REG[1]);
   location___Location___init(fra.me.REG[1], fra.me.REG[0], REGB0, REGB1, REGB2, REGB3, init_table);
@@ -24085,7 +25710,7 @@ val_t NEW_Location_location___Location___with_file(val_t p0){
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 74;
+  fra.me.line = 82;
   fra.me.meth = LOCATE_NEW_Location_location___Location___with_file;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -24093,7 +25718,7 @@ val_t NEW_Location_location___Location___with_file(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* location.nit:74 */
+  /* location.nit:82 */
   fra.me.REG[1] = NEW_location___Location();
   INIT_ATTRIBUTES__location___Location(fra.me.REG[1]);
   location___Location___with_file(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -24870,11 +26495,6 @@ void CHECKNEW_metamodel___abstractmetamodel___MMExplicitImport(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_metamodel___static_type___MMExplicitImport_____atsignature(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "@signature", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMExplicitImport_____atlocal_class(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -24885,6 +26505,11 @@ void CHECKNEW_metamodel___abstractmetamodel___MMExplicitImport(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "@method", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_metamodel___static_type___MMExplicitImport_____atsignature(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "@signature", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_MMExplicitImport_metamodel___abstractmetamodel___MMExplicitImport___init[] = "new MMExplicitImport static_type::MMExplicitImport::(abstractmetamodel::MMExplicitImport::init)";
@@ -24913,12 +26538,12 @@ val_t NEW_MMExplicitImport_metamodel___abstractmetamodel___MMExplicitImport___in
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_metamodel___static_type___MMParam[66] = {
-  {(bigint) 2619 /* 0: Identity */},
+  {(bigint) 3115 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMParam" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMParam < Object: superclass typecheck marker */},
   {(bigint) 119 /* 4: MMParam < NiVariable: superclass typecheck marker */},
-  {(bigint) 2619 /* 5: MMParam < MMParam: superclass typecheck marker */},
+  {(bigint) 3115 /* 5: MMParam < MMParam: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -25190,16 +26815,6 @@ void CHECKNEW_metamodel___static_type___MMSignature(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_native_interface___frontier___MMSignature_____atrecv_ni_variable(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "@recv_ni_variable", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_metamodel___vararg___MMSignature____vararg_rank(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_vararg_rank", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_metamodel___static_type___MMSignature____recv(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -25215,6 +26830,16 @@ void CHECKNEW_metamodel___static_type___MMSignature(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_closures", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_metamodel___vararg___MMSignature____vararg_rank(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_vararg_rank", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_native_interface___frontier___MMSignature_____atrecv_ni_variable(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "@recv_ni_variable", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_MMSignature_metamodel___static_type___MMSignature___init[] = "new MMSignature frontier::MMSignature::(static_type::MMSignature::init)";
@@ -25398,13 +27023,13 @@ val_t NEW_MMClosure_metamodel___static_type___MMClosure___init(val_t p0, val_t p
   stack_frame_head = fra.me.prev;
   return fra.me.REG[2];
 }
-const classtable_elt_t VFT_metamodel___static_type___MMNullableType[86] = {
-  {(bigint) 2623 /* 0: Identity */},
+const classtable_elt_t VFT_metamodel___static_type___MMNullableType[88] = {
+  {(bigint) 3119 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMNullableType" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMNullableType < Object: superclass typecheck marker */},
   {(bigint) 143 /* 4: MMNullableType < MMType: superclass typecheck marker */},
-  {(bigint) 2623 /* 5: MMNullableType < MMNullableType: superclass typecheck marker */},
+  {(bigint) 3119 /* 5: MMNullableType < MMNullableType: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -25469,7 +27094,8 @@ const classtable_elt_t VFT_metamodel___static_type___MMNullableType[86] = {
   {(bigint) primitive_info___MMType___unboxtype},
   {(bigint) metamodel___genericity___MMType___is_generic},
   {(bigint) metamodel___type_formal___MMType___direct_type},
-  {(bigint) 0 /* 70: MMNullableType < MMType: superclass init_table position */},
+  {(bigint) metamodel___type_formal___MMNullableType___has_formal},
+  {(bigint) 0 /* 71: MMNullableType < MMType: superclass init_table position */},
   {(bigint) metamodel___static_type___MMNullableType___mmmodule},
   {(bigint) metamodel___static_type___MMNullableType___local_class},
   {(bigint) metamodel___static_type___MMNullableType___is_valid},
@@ -25483,7 +27109,8 @@ const classtable_elt_t VFT_metamodel___static_type___MMNullableType[86] = {
   {(bigint) metamodel___static_type___MMNullableType___as_nullable},
   {(bigint) metamodel___static_type___MMNullableType___as_notnull},
   {(bigint) metamodel___static_type___MMType___init},
-  {(bigint) 2 /* 84: MMNullableType < MMNullableType: superclass init_table position */},
+  {(bigint) 2 /* 85: MMNullableType < MMNullableType: superclass init_table position */},
+  {(bigint) metamodel___static_type___MMNullableType___base_type},
   {(bigint) metamodel___static_type___MMNullableType___init},
 };
 /* 0: Pointer to the classtable */
@@ -25562,14 +27189,14 @@ val_t NEW_MMNullableType_metamodel___static_type___MMNullableType___init(val_t p
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_metamodel___static_type___MMTypeSimpleClass[88] = {
-  {(bigint) 3003 /* 0: Identity */},
+const classtable_elt_t VFT_metamodel___static_type___MMTypeSimpleClass[89] = {
+  {(bigint) 3503 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMTypeSimpleClass" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMTypeSimpleClass < Object: superclass typecheck marker */},
   {(bigint) 143 /* 4: MMTypeSimpleClass < MMType: superclass typecheck marker */},
-  {(bigint) 2603 /* 5: MMTypeSimpleClass < MMTypeClass: superclass typecheck marker */},
-  {(bigint) 3003 /* 6: MMTypeSimpleClass < MMTypeSimpleClass: superclass typecheck marker */},
+  {(bigint) 3099 /* 5: MMTypeSimpleClass < MMTypeClass: superclass typecheck marker */},
+  {(bigint) 3503 /* 6: MMTypeSimpleClass < MMTypeSimpleClass: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -25633,7 +27260,8 @@ const classtable_elt_t VFT_metamodel___static_type___MMTypeSimpleClass[88] = {
   {(bigint) primitive_info___MMType___unboxtype},
   {(bigint) metamodel___genericity___MMTypeSimpleClass___is_generic},
   {(bigint) metamodel___type_formal___MMType___direct_type},
-  {(bigint) 1 /* 70: MMTypeSimpleClass < MMType: superclass init_table position */},
+  {(bigint) metamodel___type_formal___MMType___has_formal},
+  {(bigint) 1 /* 71: MMTypeSimpleClass < MMType: superclass init_table position */},
   {(bigint) metamodel___static_type___MMTypeClass___mmmodule},
   {(bigint) metamodel___static_type___MMTypeClass___local_class},
   {(bigint) metamodel___static_type___MMType___is_valid},
@@ -25647,9 +27275,9 @@ const classtable_elt_t VFT_metamodel___static_type___MMTypeSimpleClass[88] = {
   {(bigint) metamodel___static_type___MMType___as_nullable},
   {(bigint) metamodel___static_type___MMType___as_notnull},
   {(bigint) metamodel___static_type___MMType___init},
-  {(bigint) 0 /* 84: MMTypeSimpleClass < MMTypeClass: superclass init_table position */},
+  {(bigint) 0 /* 85: MMTypeSimpleClass < MMTypeClass: superclass init_table position */},
   {(bigint) metamodel___static_type___MMTypeClass___init},
-  {(bigint) 3 /* 86: MMTypeSimpleClass < MMTypeSimpleClass: superclass init_table position */},
+  {(bigint) 3 /* 87: MMTypeSimpleClass < MMTypeSimpleClass: superclass init_table position */},
   {(bigint) metamodel___static_type___MMTypeSimpleClass___init},
 };
 /* 0: Pointer to the classtable */
@@ -25728,13 +27356,13 @@ val_t NEW_MMTypeSimpleClass_metamodel___static_type___MMTypeSimpleClass___init(v
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_metamodel___static_type___MMTypeNone[86] = {
-  {(bigint) 2595 /* 0: Identity */},
+const classtable_elt_t VFT_metamodel___static_type___MMTypeNone[87] = {
+  {(bigint) 3091 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMTypeNone" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMTypeNone < Object: superclass typecheck marker */},
   {(bigint) 143 /* 4: MMTypeNone < MMType: superclass typecheck marker */},
-  {(bigint) 2595 /* 5: MMTypeNone < MMTypeNone: superclass typecheck marker */},
+  {(bigint) 3091 /* 5: MMTypeNone < MMTypeNone: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -25799,7 +27427,8 @@ const classtable_elt_t VFT_metamodel___static_type___MMTypeNone[86] = {
   {(bigint) primitive_info___MMType___unboxtype},
   {(bigint) metamodel___genericity___MMTypeNone___is_generic},
   {(bigint) metamodel___type_formal___MMType___direct_type},
-  {(bigint) 0 /* 70: MMTypeNone < MMType: superclass init_table position */},
+  {(bigint) metamodel___type_formal___MMType___has_formal},
+  {(bigint) 0 /* 71: MMTypeNone < MMType: superclass init_table position */},
   {(bigint) metamodel___static_type___MMTypeNone___mmmodule},
   {(bigint) metamodel___static_type___MMTypeNone___local_class},
   {(bigint) metamodel___static_type___MMType___is_valid},
@@ -25813,7 +27442,7 @@ const classtable_elt_t VFT_metamodel___static_type___MMTypeNone[86] = {
   {(bigint) metamodel___static_type___MMTypeNone___as_nullable},
   {(bigint) metamodel___static_type___MMTypeNone___as_notnull},
   {(bigint) metamodel___static_type___MMType___init},
-  {(bigint) 2 /* 84: MMTypeNone < MMTypeNone: superclass init_table position */},
+  {(bigint) 2 /* 85: MMTypeNone < MMTypeNone: superclass init_table position */},
   {(bigint) metamodel___static_type___MMTypeNone___init},
 };
 /* 0: Pointer to the classtable */
@@ -26021,11 +27650,6 @@ void CHECKNEW_metamodel___static_type___MMImportedCast(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_native_interface___ni_metamodel___MMImportedCast_____atin_name(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "@in_name", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_metamodel___static_type___MMImportedCast____from(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -26036,6 +27660,11 @@ void CHECKNEW_metamodel___static_type___MMImportedCast(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_to", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_native_interface___ni_metamodel___MMImportedCast_____atin_name(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "@in_name", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_MMImportedCast_metamodel___static_type___MMImportedCast___init[] = "new MMImportedCast static_type::MMImportedCast::init";
@@ -26063,14 +27692,14 @@ val_t NEW_MMImportedCast_metamodel___static_type___MMImportedCast___init(val_t p
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_metamodel___inheritance___MMImplicitLocalClass[154] = {
-  {(bigint) 3031 /* 0: Identity */},
+  {(bigint) 3531 /* 0: Identity */},
   {(bigint) 28 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMImplicitLocalClass" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMImplicitLocalClass < Object: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {(bigint) 259 /* 5: MMImplicitLocalClass < FFIVisited: superclass typecheck marker */},
-  {(bigint) 2635 /* 6: MMImplicitLocalClass < MMLocalClass: superclass typecheck marker */},
-  {(bigint) 3031 /* 7: MMImplicitLocalClass < MMImplicitLocalClass: superclass typecheck marker */},
+  {(bigint) 3131 /* 6: MMImplicitLocalClass < MMLocalClass: superclass typecheck marker */},
+  {(bigint) 3531 /* 7: MMImplicitLocalClass < MMImplicitLocalClass: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -26261,15 +27890,6 @@ void INIT_ATTRIBUTES__metamodel___inheritance___MMImplicitLocalClass(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* metamodel/inheritance.nit:82 */
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_metamodel___inheritance___MMLocalClass____direct_parents(fra.me.REG[0]) = fra.me.REG[1];
-  /* metamodel/inheritance.nit:86 */
-  REGB0 = TAG_Bool(0);
-  ATTR_metamodel___inheritance___MMLocalClass____computing_super(fra.me.REG[0]) = REGB0;
-  /* metamodel/inheritance.nit:133 */
-  REGB0 = TAG_Bool(0);
-  ATTR_metamodel___inheritance___MMLocalClass____are_global_properties_inherited(fra.me.REG[0]) = REGB0;
   /* metamodel/abstractmetamodel.nit:365 */
   fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
   ATTR_metamodel___abstractmetamodel___MMLocalClass____local_property_by_global(fra.me.REG[0]) = fra.me.REG[1];
@@ -26282,36 +27902,45 @@ void INIT_ATTRIBUTES__metamodel___inheritance___MMImplicitLocalClass(val_t p0){
   /* metamodel/abstractmetamodel.nit:374 */
   fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
   ATTR_metamodel___abstractmetamodel___MMLocalClass____properties_by_name(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/extern_type_inheritance.nit:35 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_syntax___extern_type_inheritance___MMLocalClass_____atextern_type_origin_cache(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/extern_type_inheritance.nit:38 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_syntax___extern_type_inheritance___MMLocalClass_____atextern_type_cache(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/extern_inline.nit:38 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_syntax___extern_inline___MMLocalClass_____atextern_type(fra.me.REG[0]) = fra.me.REG[1];
-  /* primitive_info.nit:28 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_primitive_info___MMLocalClass____primitive_info_cache(fra.me.REG[0]) = fra.me.REG[1];
-  /* primitive_info.nit:32 */
+  /* metamodel/inheritance.nit:82 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_metamodel___inheritance___MMLocalClass____direct_parents(fra.me.REG[0]) = fra.me.REG[1];
+  /* metamodel/inheritance.nit:86 */
   REGB0 = TAG_Bool(0);
-  ATTR_primitive_info___MMLocalClass____primitive_info_b(fra.me.REG[0]) = REGB0;
+  ATTR_metamodel___inheritance___MMLocalClass____computing_super(fra.me.REG[0]) = REGB0;
+  /* metamodel/inheritance.nit:133 */
+  REGB0 = TAG_Bool(0);
+  ATTR_metamodel___inheritance___MMLocalClass____are_global_properties_inherited(fra.me.REG[0]) = REGB0;
   /* metamodel/genericity.nit:41 */
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
   ATTR_metamodel___genericity___MMLocalClass____types(fra.me.REG[0]) = fra.me.REG[1];
   /* metamodel/genericity.nit:55 */
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
   ATTR_metamodel___genericity___MMLocalClass____formals_types(fra.me.REG[0]) = fra.me.REG[1];
-  /* program.nit:227 */
+  /* primitive_info.nit:28 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_primitive_info___MMLocalClass____primitive_info_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* primitive_info.nit:32 */
+  REGB0 = TAG_Bool(0);
+  ATTR_primitive_info___MMLocalClass____primitive_info_b(fra.me.REG[0]) = REGB0;
+  /* program.nit:230 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_program___MMLocalClass____init_var_iroutine(fra.me.REG[0]) = fra.me.REG[1];
-  /* program.nit:229 */
+  /* program.nit:232 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_program___MMLocalClass____checknew_iroutine(fra.me.REG[0]) = fra.me.REG[1];
-  /* program.nit:234 */
+  /* program.nit:237 */
   fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
   ATTR_program___MMLocalClass____new_instance_iroutine(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/extern_inline.nit:38 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_syntax___extern_inline___MMLocalClass_____atextern_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/extern_type_inheritance.nit:35 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_syntax___extern_type_inheritance___MMLocalClass_____atextern_type_origin_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/extern_type_inheritance.nit:38 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_syntax___extern_type_inheritance___MMLocalClass_____atextern_type_cache(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_metamodel___inheritance___MMImplicitLocalClass(void)
@@ -26337,21 +27966,6 @@ void CHECKNEW_metamodel___inheritance___MMImplicitLocalClass(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_metamodel___inheritance___MMLocalClass____direct_parents(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_direct_parents", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_metamodel___inheritance___MMLocalClass____computing_super(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_computing_super", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_metamodel___inheritance___MMLocalClass____are_global_properties_inherited(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_are_global_properties_inherited", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMLocalClass____name(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -26387,10 +28001,20 @@ void CHECKNEW_metamodel___inheritance___MMImplicitLocalClass(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_properties_by_name", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_primitive_info___MMLocalClass____primitive_info_b(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_metamodel___inheritance___MMLocalClass____direct_parents(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_primitive_info_b", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_direct_parents", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_metamodel___inheritance___MMLocalClass____computing_super(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_computing_super", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_metamodel___inheritance___MMLocalClass____are_global_properties_inherited(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_are_global_properties_inherited", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_metamodel___genericity___MMLocalClass____types(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -26402,6 +28026,11 @@ void CHECKNEW_metamodel___inheritance___MMImplicitLocalClass(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_formals_types", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_primitive_info___MMLocalClass____primitive_info_b(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_primitive_info_b", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_program___MMLocalClass____new_instance_iroutine(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -26435,12 +28064,12 @@ val_t NEW_MMImplicitLocalClass_metamodel___inheritance___MMImplicitLocalClass___
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_metamodel___inheritance___MMRefineAncestor[62] = {
-  {(bigint) 2615 /* 0: Identity */},
+  {(bigint) 3111 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMRefineAncestor" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMRefineAncestor < Object: superclass typecheck marker */},
   {(bigint) 183 /* 4: MMRefineAncestor < MMAncestor: superclass typecheck marker */},
-  {(bigint) 2615 /* 5: MMRefineAncestor < MMRefineAncestor: superclass typecheck marker */},
+  {(bigint) 3111 /* 5: MMRefineAncestor < MMRefineAncestor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -26581,12 +28210,12 @@ val_t NEW_MMRefineAncestor_metamodel___inheritance___MMRefineAncestor___init(val
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_metamodel___inheritance___MMSpecAncestor[62] = {
-  {(bigint) 2611 /* 0: Identity */},
+  {(bigint) 3107 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMSpecAncestor" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMSpecAncestor < Object: superclass typecheck marker */},
   {(bigint) 183 /* 4: MMSpecAncestor < MMAncestor: superclass typecheck marker */},
-  {(bigint) 2611 /* 5: MMSpecAncestor < MMSpecAncestor: superclass typecheck marker */},
+  {(bigint) 3107 /* 5: MMSpecAncestor < MMSpecAncestor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -26718,12 +28347,12 @@ val_t NEW_MMSpecAncestor_metamodel___inheritance___MMSpecAncestor___init(val_t p
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_metamodel___inheritance___MMDefaultAncestor[62] = {
-  {(bigint) 2639 /* 0: Identity */},
+  {(bigint) 3135 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMDefaultAncestor" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMDefaultAncestor < Object: superclass typecheck marker */},
   {(bigint) 183 /* 4: MMDefaultAncestor < MMAncestor: superclass typecheck marker */},
-  {(bigint) 2639 /* 5: MMDefaultAncestor < MMDefaultAncestor: superclass typecheck marker */},
+  {(bigint) 3135 /* 5: MMDefaultAncestor < MMDefaultAncestor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -26854,14 +28483,14 @@ val_t NEW_MMDefaultAncestor_metamodel___inheritance___MMDefaultAncestor___init(v
   stack_frame_head = fra.me.prev;
   return fra.me.REG[2];
 }
-const classtable_elt_t VFT_metamodel___genericity___MMTypeGeneric[93] = {
-  {(bigint) 3007 /* 0: Identity */},
+const classtable_elt_t VFT_metamodel___genericity___MMTypeGeneric[94] = {
+  {(bigint) 3507 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMTypeGeneric" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMTypeGeneric < Object: superclass typecheck marker */},
   {(bigint) 143 /* 4: MMTypeGeneric < MMType: superclass typecheck marker */},
-  {(bigint) 2603 /* 5: MMTypeGeneric < MMTypeClass: superclass typecheck marker */},
-  {(bigint) 3007 /* 6: MMTypeGeneric < MMTypeGeneric: superclass typecheck marker */},
+  {(bigint) 3099 /* 5: MMTypeGeneric < MMTypeClass: superclass typecheck marker */},
+  {(bigint) 3507 /* 6: MMTypeGeneric < MMTypeGeneric: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -26925,7 +28554,8 @@ const classtable_elt_t VFT_metamodel___genericity___MMTypeGeneric[93] = {
   {(bigint) primitive_info___MMType___unboxtype},
   {(bigint) metamodel___genericity___MMTypeGeneric___is_generic},
   {(bigint) metamodel___type_formal___MMType___direct_type},
-  {(bigint) 1 /* 70: MMTypeGeneric < MMType: superclass init_table position */},
+  {(bigint) metamodel___genericity___MMTypeGeneric___has_formal},
+  {(bigint) 1 /* 71: MMTypeGeneric < MMType: superclass init_table position */},
   {(bigint) metamodel___static_type___MMTypeClass___mmmodule},
   {(bigint) metamodel___static_type___MMTypeClass___local_class},
   {(bigint) metamodel___static_type___MMType___is_valid},
@@ -26939,9 +28569,9 @@ const classtable_elt_t VFT_metamodel___genericity___MMTypeGeneric[93] = {
   {(bigint) metamodel___static_type___MMType___as_nullable},
   {(bigint) metamodel___static_type___MMType___as_notnull},
   {(bigint) metamodel___static_type___MMType___init},
-  {(bigint) 0 /* 84: MMTypeGeneric < MMTypeClass: superclass init_table position */},
+  {(bigint) 0 /* 85: MMTypeGeneric < MMTypeClass: superclass init_table position */},
   {(bigint) metamodel___static_type___MMTypeClass___init},
-  {(bigint) 3 /* 86: MMTypeGeneric < MMTypeGeneric: superclass init_table position */},
+  {(bigint) 3 /* 87: MMTypeGeneric < MMTypeGeneric: superclass init_table position */},
   {(bigint) metamodel___genericity___MMTypeGeneric___params},
   {(bigint) metamodel___static_type___MMTypeClass___upcast_for},
   {(bigint) metamodel___genericity___MMTypeGeneric___params_equals},
@@ -26996,15 +28626,15 @@ void CHECKNEW_metamodel___genericity___MMTypeGeneric(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_metamodel___genericity___MMTypeGeneric____params(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_metamodel___static_type___MMTypeClass____local_class(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_params", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_local_class", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_metamodel___static_type___MMTypeClass____local_class(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_metamodel___genericity___MMTypeGeneric____params(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_local_class", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_params", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -27015,7 +28645,7 @@ val_t NEW_MMTypeGeneric_metamodel___genericity___MMTypeGeneric___init(val_t p0,
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 189;
+  fra.me.line = 197;
   fra.me.meth = LOCATE_NEW_MMTypeGeneric_metamodel___genericity___MMTypeGeneric___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -27025,7 +28655,7 @@ val_t NEW_MMTypeGeneric_metamodel___genericity___MMTypeGeneric___init(val_t p0,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* metamodel/genericity.nit:189 */
+  /* metamodel/genericity.nit:197 */
   fra.me.REG[2] = NEW_metamodel___genericity___MMTypeGeneric();
   INIT_ATTRIBUTES__metamodel___genericity___MMTypeGeneric(fra.me.REG[2]);
   metamodel___genericity___MMTypeGeneric___init(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -27033,14 +28663,14 @@ val_t NEW_MMTypeGeneric_metamodel___genericity___MMTypeGeneric___init(val_t p0,
   stack_frame_head = fra.me.prev;
   return fra.me.REG[2];
 }
-const classtable_elt_t VFT_metamodel___genericity___MMTypeFormalParameter[94] = {
-  {(bigint) 3011 /* 0: Identity */},
+const classtable_elt_t VFT_metamodel___genericity___MMTypeFormalParameter[95] = {
+  {(bigint) 3511 /* 0: Identity */},
   {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMTypeFormalParameter" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMTypeFormalParameter < Object: superclass typecheck marker */},
   {(bigint) 143 /* 4: MMTypeFormalParameter < MMType: superclass typecheck marker */},
-  {(bigint) 2599 /* 5: MMTypeFormalParameter < MMTypeFormal: superclass typecheck marker */},
-  {(bigint) 3011 /* 6: MMTypeFormalParameter < MMTypeFormalParameter: superclass typecheck marker */},
+  {(bigint) 3095 /* 5: MMTypeFormalParameter < MMTypeFormal: superclass typecheck marker */},
+  {(bigint) 3511 /* 6: MMTypeFormalParameter < MMTypeFormalParameter: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -27104,7 +28734,8 @@ const classtable_elt_t VFT_metamodel___genericity___MMTypeFormalParameter[94] =
   {(bigint) primitive_info___MMType___unboxtype},
   {(bigint) metamodel___genericity___MMTypeFormal___is_generic},
   {(bigint) metamodel___type_formal___MMTypeFormal___direct_type},
-  {(bigint) 1 /* 70: MMTypeFormalParameter < MMType: superclass init_table position */},
+  {(bigint) metamodel___type_formal___MMTypeFormal___has_formal},
+  {(bigint) 1 /* 71: MMTypeFormalParameter < MMType: superclass init_table position */},
   {(bigint) metamodel___genericity___MMTypeFormalParameter___mmmodule},
   {(bigint) metamodel___type_formal___MMTypeFormal___local_class},
   {(bigint) metamodel___type_formal___MMTypeFormal___is_valid},
@@ -27118,11 +28749,11 @@ const classtable_elt_t VFT_metamodel___genericity___MMTypeFormalParameter[94] =
   {(bigint) metamodel___static_type___MMType___as_nullable},
   {(bigint) metamodel___static_type___MMType___as_notnull},
   {(bigint) metamodel___static_type___MMType___init},
-  {(bigint) 0 /* 84: MMTypeFormalParameter < MMTypeFormal: superclass init_table position */},
+  {(bigint) 0 /* 85: MMTypeFormalParameter < MMTypeFormal: superclass init_table position */},
   {(bigint) metamodel___type_formal___MMTypeFormal___name},
   {(bigint) metamodel___type_formal___MMTypeFormal___bound},
   {(bigint) metamodel___type_formal___MMTypeFormal___init},
-  {(bigint) 3 /* 88: MMTypeFormalParameter < MMTypeFormalParameter: superclass init_table position */},
+  {(bigint) 3 /* 89: MMTypeFormalParameter < MMTypeFormalParameter: superclass init_table position */},
   {(bigint) metamodel___genericity___MMTypeFormalParameter___def_class},
   {(bigint) metamodel___genericity___MMTypeFormalParameter___position},
   {(bigint) metamodel___genericity___MMTypeFormalParameter___bound__eq},
@@ -27178,6 +28809,11 @@ void CHECKNEW_metamodel___genericity___MMTypeFormalParameter(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_metamodel___type_formal___MMTypeFormal____name(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_name", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_metamodel___genericity___MMTypeFormalParameter____def_class(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -27188,11 +28824,6 @@ void CHECKNEW_metamodel___genericity___MMTypeFormalParameter(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_position", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_metamodel___type_formal___MMTypeFormal____name(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_name", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_MMTypeFormalParameter_metamodel___genericity___MMTypeFormalParameter___with_bound[] = "new MMTypeFormalParameter genericity::MMTypeFormalParameter::with_bound";
@@ -27203,7 +28834,7 @@ val_t NEW_MMTypeFormalParameter_metamodel___genericity___MMTypeFormalParameter__
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 236;
+  fra.me.line = 244;
   fra.me.meth = LOCATE_NEW_MMTypeFormalParameter_metamodel___genericity___MMTypeFormalParameter___with_bound;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27216,7 +28847,7 @@ val_t NEW_MMTypeFormalParameter_metamodel___genericity___MMTypeFormalParameter__
   REGB0 = p1;
   fra.me.REG[1] = p2;
   fra.me.REG[2] = p3;
-  /* metamodel/genericity.nit:236 */
+  /* metamodel/genericity.nit:244 */
   fra.me.REG[3] = NEW_metamodel___genericity___MMTypeFormalParameter();
   INIT_ATTRIBUTES__metamodel___genericity___MMTypeFormalParameter(fra.me.REG[3]);
   metamodel___genericity___MMTypeFormalParameter___with_bound(fra.me.REG[3], fra.me.REG[0], REGB0, fra.me.REG[1], fra.me.REG[2], init_table);
@@ -27232,7 +28863,7 @@ val_t NEW_MMTypeFormalParameter_metamodel___genericity___MMTypeFormalParameter__
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 242;
+  fra.me.line = 250;
   fra.me.meth = LOCATE_NEW_MMTypeFormalParameter_metamodel___genericity___MMTypeFormalParameter___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -27243,7 +28874,7 @@ val_t NEW_MMTypeFormalParameter_metamodel___genericity___MMTypeFormalParameter__
   fra.me.REG[0] = p0;
   REGB0 = p1;
   fra.me.REG[1] = p2;
-  /* metamodel/genericity.nit:242 */
+  /* metamodel/genericity.nit:250 */
   fra.me.REG[2] = NEW_metamodel___genericity___MMTypeFormalParameter();
   INIT_ATTRIBUTES__metamodel___genericity___MMTypeFormalParameter(fra.me.REG[2]);
   metamodel___genericity___MMTypeFormalParameter___init(fra.me.REG[2], fra.me.REG[0], REGB0, fra.me.REG[1], init_table);
@@ -27251,14 +28882,14 @@ val_t NEW_MMTypeFormalParameter_metamodel___genericity___MMTypeFormalParameter__
   stack_frame_head = fra.me.prev;
   return fra.me.REG[2];
 }
-const classtable_elt_t VFT_metamodel___virtualtype___MMVirtualType[92] = {
-  {(bigint) 2999 /* 0: Identity */},
+const classtable_elt_t VFT_metamodel___virtualtype___MMVirtualType[93] = {
+  {(bigint) 3499 /* 0: Identity */},
   {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMVirtualType" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMVirtualType < Object: superclass typecheck marker */},
   {(bigint) 143 /* 4: MMVirtualType < MMType: superclass typecheck marker */},
-  {(bigint) 2599 /* 5: MMVirtualType < MMTypeFormal: superclass typecheck marker */},
-  {(bigint) 2999 /* 6: MMVirtualType < MMVirtualType: superclass typecheck marker */},
+  {(bigint) 3095 /* 5: MMVirtualType < MMTypeFormal: superclass typecheck marker */},
+  {(bigint) 3499 /* 6: MMVirtualType < MMVirtualType: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -27322,7 +28953,8 @@ const classtable_elt_t VFT_metamodel___virtualtype___MMVirtualType[92] = {
   {(bigint) primitive_info___MMType___unboxtype},
   {(bigint) metamodel___genericity___MMTypeFormal___is_generic},
   {(bigint) metamodel___type_formal___MMTypeFormal___direct_type},
-  {(bigint) 1 /* 70: MMVirtualType < MMType: superclass init_table position */},
+  {(bigint) metamodel___type_formal___MMTypeFormal___has_formal},
+  {(bigint) 1 /* 71: MMVirtualType < MMType: superclass init_table position */},
   {(bigint) metamodel___virtualtype___MMVirtualType___mmmodule},
   {(bigint) metamodel___type_formal___MMTypeFormal___local_class},
   {(bigint) metamodel___type_formal___MMTypeFormal___is_valid},
@@ -27336,11 +28968,11 @@ const classtable_elt_t VFT_metamodel___virtualtype___MMVirtualType[92] = {
   {(bigint) metamodel___static_type___MMType___as_nullable},
   {(bigint) metamodel___static_type___MMType___as_notnull},
   {(bigint) metamodel___static_type___MMType___init},
-  {(bigint) 0 /* 84: MMVirtualType < MMTypeFormal: superclass init_table position */},
+  {(bigint) 0 /* 85: MMVirtualType < MMTypeFormal: superclass init_table position */},
   {(bigint) metamodel___type_formal___MMTypeFormal___name},
   {(bigint) metamodel___type_formal___MMTypeFormal___bound},
   {(bigint) metamodel___type_formal___MMTypeFormal___init},
-  {(bigint) 3 /* 88: MMVirtualType < MMVirtualType: superclass init_table position */},
+  {(bigint) 3 /* 89: MMVirtualType < MMVirtualType: superclass init_table position */},
   {(bigint) metamodel___virtualtype___MMVirtualType___property},
   {(bigint) metamodel___virtualtype___MMVirtualType___recv},
   {(bigint) metamodel___virtualtype___MMVirtualType___init},
@@ -27394,6 +29026,11 @@ void CHECKNEW_metamodel___virtualtype___MMVirtualType(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_metamodel___type_formal___MMTypeFormal____name(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_name", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_metamodel___virtualtype___MMVirtualType____property(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -27404,11 +29041,6 @@ void CHECKNEW_metamodel___virtualtype___MMVirtualType(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_recv", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_metamodel___type_formal___MMTypeFormal____name(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_name", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_MMVirtualType_metamodel___virtualtype___MMVirtualType___init[] = "new MMVirtualType virtualtype::MMVirtualType::init";
@@ -27564,6 +29196,11 @@ void CHECKNEW_icode___icode_base___IRegister(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___IRegister____stype(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_stype", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_analysis___allocate_iregister_slots___IRegister____is_local(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -27579,11 +29216,6 @@ void CHECKNEW_icode___icode_base___IRegister(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_born_rank", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___IRegister____stype(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_stype", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_IRegister_icode___icode_base___IRegister___init[] = "new IRegister icode_base::IRegister::init";
@@ -28051,12 +29683,12 @@ val_t NEW_IRoutine_icode___icode_base___IRoutine___init(val_t p0, val_t p1){
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_icode___icode_base___IClosureDef[74] = {
-  {(bigint) 2699 /* 0: Identity */},
+  {(bigint) 3195 /* 0: Identity */},
   {(bigint) 11 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IClosureDef" /* 2: Class Name */},
   {(bigint) 3 /* 3: IClosureDef < Object: superclass typecheck marker */},
   {(bigint) 195 /* 4: IClosureDef < IRoutine: superclass typecheck marker */},
-  {(bigint) 2699 /* 5: IClosureDef < IClosureDef: superclass typecheck marker */},
+  {(bigint) 3195 /* 5: IClosureDef < IClosureDef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -28256,13 +29888,13 @@ val_t NEW_IClosureDef_icode___icode_base___IClosureDef___init(val_t p0, val_t p1
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_icode___icode_base___ISeq[73] = {
-  {(bigint) 3055 /* 0: Identity */},
+  {(bigint) 3555 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ISeq" /* 2: Class Name */},
   {(bigint) 3 /* 3: ISeq < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: ISeq < ICode: superclass typecheck marker */},
-  {(bigint) 2695 /* 5: ISeq < ICode0: superclass typecheck marker */},
-  {(bigint) 3055 /* 6: ISeq < ISeq: superclass typecheck marker */},
+  {(bigint) 3191 /* 5: ISeq < ICode0: superclass typecheck marker */},
+  {(bigint) 3555 /* 6: ISeq < ISeq: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -28350,15 +29982,15 @@ void INIT_ATTRIBUTES__icode___icode_base___ISeq(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* icode/icode_base.nit:167 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_icode___icode_base___ISeq____icodes(fra.me.REG[0]) = fra.me.REG[1];
   /* icode/icode_base.nit:95 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____result(fra.me.REG[0]) = fra.me.REG[1];
   /* icode/icode_base.nit:98 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____location(fra.me.REG[0]) = fra.me.REG[1];
+  /* icode/icode_base.nit:167 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_icode___icode_base___ISeq____icodes(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_icode___icode_base___ISeq(void)
@@ -28413,14 +30045,14 @@ val_t NEW_ISeq_icode___icode_base___ISeq___init(void){
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_icode___icode_base___ILoop[75] = {
-  {(bigint) 3723 /* 0: Identity */},
+  {(bigint) 4235 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ILoop" /* 2: Class Name */},
   {(bigint) 3 /* 3: ILoop < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: ILoop < ICode: superclass typecheck marker */},
-  {(bigint) 2695 /* 5: ILoop < ICode0: superclass typecheck marker */},
-  {(bigint) 3055 /* 6: ILoop < ISeq: superclass typecheck marker */},
-  {(bigint) 3723 /* 7: ILoop < ILoop: superclass typecheck marker */},
+  {(bigint) 3191 /* 5: ILoop < ICode0: superclass typecheck marker */},
+  {(bigint) 3555 /* 6: ILoop < ISeq: superclass typecheck marker */},
+  {(bigint) 4235 /* 7: ILoop < ILoop: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -28509,15 +30141,15 @@ void INIT_ATTRIBUTES__icode___icode_base___ILoop(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* icode/icode_base.nit:167 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_icode___icode_base___ISeq____icodes(fra.me.REG[0]) = fra.me.REG[1];
   /* icode/icode_base.nit:95 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____result(fra.me.REG[0]) = fra.me.REG[1];
   /* icode/icode_base.nit:98 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____location(fra.me.REG[0]) = fra.me.REG[1];
+  /* icode/icode_base.nit:167 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_icode___icode_base___ISeq____icodes(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_icode___icode_base___ILoop(void)
@@ -28572,13 +30204,13 @@ val_t NEW_ILoop_icode___icode_base___ILoop___init(void){
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_icode___icode_base___IIf[73] = {
-  {(bigint) 3095 /* 0: Identity */},
+  {(bigint) 3595 /* 0: Identity */},
   {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IIf" /* 2: Class Name */},
   {(bigint) 3 /* 3: IIf < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IIf < ICode: superclass typecheck marker */},
-  {(bigint) 2691 /* 5: IIf < ICode1: superclass typecheck marker */},
-  {(bigint) 3095 /* 6: IIf < IIf: superclass typecheck marker */},
+  {(bigint) 3187 /* 5: IIf < ICode1: superclass typecheck marker */},
+  {(bigint) 3595 /* 6: IIf < IIf: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -28667,18 +30299,18 @@ void INIT_ATTRIBUTES__icode___icode_base___IIf(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* icode/icode_base.nit:187 */
-  fra.me.REG[1] = NEW_ISeq_icode___icode_base___ISeq___init();
-  ATTR_icode___icode_base___IIf____then_seq(fra.me.REG[0]) = fra.me.REG[1];
-  /* icode/icode_base.nit:189 */
-  fra.me.REG[1] = NEW_ISeq_icode___icode_base___ISeq___init();
-  ATTR_icode___icode_base___IIf____else_seq(fra.me.REG[0]) = fra.me.REG[1];
   /* icode/icode_base.nit:95 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____result(fra.me.REG[0]) = fra.me.REG[1];
   /* icode/icode_base.nit:98 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____location(fra.me.REG[0]) = fra.me.REG[1];
+  /* icode/icode_base.nit:187 */
+  fra.me.REG[1] = NEW_ISeq_icode___icode_base___ISeq___init();
+  ATTR_icode___icode_base___IIf____then_seq(fra.me.REG[0]) = fra.me.REG[1];
+  /* icode/icode_base.nit:189 */
+  fra.me.REG[1] = NEW_ISeq_icode___icode_base___ISeq___init();
+  ATTR_icode___icode_base___IIf____else_seq(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_icode___icode_base___IIf(void)
@@ -28704,6 +30336,11 @@ void CHECKNEW_icode___icode_base___IIf(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICode1____expr(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_expr", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_icode___icode_base___IIf____then_seq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -28714,11 +30351,6 @@ void CHECKNEW_icode___icode_base___IIf(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_else_seq", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICode1____expr(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_expr", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_IIf_icode___icode_base___IIf___init[] = "new IIf icode_base::IIf::init";
@@ -28745,13 +30377,13 @@ val_t NEW_IIf_icode___icode_base___IIf___init(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_icode___icode_base___IEscape[70] = {
-  {(bigint) 3107 /* 0: Identity */},
+  {(bigint) 3607 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IEscape" /* 2: Class Name */},
   {(bigint) 3 /* 3: IEscape < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IEscape < ICode: superclass typecheck marker */},
-  {(bigint) 2695 /* 5: IEscape < ICode0: superclass typecheck marker */},
-  {(bigint) 3107 /* 6: IEscape < IEscape: superclass typecheck marker */},
+  {(bigint) 3191 /* 5: IEscape < ICode0: superclass typecheck marker */},
+  {(bigint) 3607 /* 6: IEscape < IEscape: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -28897,13 +30529,13 @@ val_t NEW_IEscape_icode___icode_base___IEscape___init(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_icode___icode_base___IAbort[71] = {
-  {(bigint) 3147 /* 0: Identity */},
+  {(bigint) 3647 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IAbort" /* 2: Class Name */},
   {(bigint) 3 /* 3: IAbort < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IAbort < ICode: superclass typecheck marker */},
-  {(bigint) 2695 /* 5: IAbort < ICode0: superclass typecheck marker */},
-  {(bigint) 3147 /* 6: IAbort < IAbort: superclass typecheck marker */},
+  {(bigint) 3191 /* 5: IAbort < ICode0: superclass typecheck marker */},
+  {(bigint) 3647 /* 6: IAbort < IAbort: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -29058,14 +30690,14 @@ val_t NEW_IAbort_icode___icode_base___IAbort___init(val_t p0, val_t p1){
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_icode___icode_base___ICall[81] = {
-  {(bigint) 3731 /* 0: Identity */},
+  {(bigint) 4243 /* 0: Identity */},
   {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ICall" /* 2: Class Name */},
   {(bigint) 3 /* 3: ICall < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: ICall < ICode: superclass typecheck marker */},
-  {(bigint) 2683 /* 5: ICall < ICodeN: superclass typecheck marker */},
-  {(bigint) 3143 /* 6: ICall < IAbsCall: superclass typecheck marker */},
-  {(bigint) 3731 /* 7: ICall < ICall: superclass typecheck marker */},
+  {(bigint) 3179 /* 5: ICall < ICodeN: superclass typecheck marker */},
+  {(bigint) 3643 /* 6: ICall < IAbsCall: superclass typecheck marker */},
+  {(bigint) 4243 /* 7: ICall < ICall: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -29163,15 +30795,15 @@ void INIT_ATTRIBUTES__icode___icode_base___ICall(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* icode/icode_base.nit:226 */
-  REGB0 = TAG_Bool(0);
-  ATTR_icode___icode_base___IAbsCall_____atis_explicit_from_extern(fra.me.REG[0]) = REGB0;
   /* icode/icode_base.nit:95 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____result(fra.me.REG[0]) = fra.me.REG[1];
   /* icode/icode_base.nit:98 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____location(fra.me.REG[0]) = fra.me.REG[1];
+  /* icode/icode_base.nit:226 */
+  REGB0 = TAG_Bool(0);
+  ATTR_icode___icode_base___IAbsCall_____atis_explicit_from_extern(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_icode___icode_base___ICall(void)
@@ -29197,6 +30829,11 @@ void CHECKNEW_icode___icode_base___ICall(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICodeN____exprs(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_exprs", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_icode___icode_base___IAbsCall____property(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -29207,11 +30844,6 @@ void CHECKNEW_icode___icode_base___ICall(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "@is_explicit_from_extern", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICodeN____exprs(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_exprs", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_ICall_icode___icode_base___ICall___init[] = "new ICall icode_base::ICall::init";
@@ -29240,14 +30872,14 @@ val_t NEW_ICall_icode___icode_base___ICall___init(val_t p0, val_t p1){
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_icode___icode_base___ISuper[80] = {
-  {(bigint) 3707 /* 0: Identity */},
+  {(bigint) 4219 /* 0: Identity */},
   {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ISuper" /* 2: Class Name */},
   {(bigint) 3 /* 3: ISuper < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: ISuper < ICode: superclass typecheck marker */},
-  {(bigint) 2683 /* 5: ISuper < ICodeN: superclass typecheck marker */},
-  {(bigint) 3143 /* 6: ISuper < IAbsCall: superclass typecheck marker */},
-  {(bigint) 3707 /* 7: ISuper < ISuper: superclass typecheck marker */},
+  {(bigint) 3179 /* 5: ISuper < ICodeN: superclass typecheck marker */},
+  {(bigint) 3643 /* 6: ISuper < IAbsCall: superclass typecheck marker */},
+  {(bigint) 4219 /* 7: ISuper < ISuper: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -29344,15 +30976,15 @@ void INIT_ATTRIBUTES__icode___icode_base___ISuper(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* icode/icode_base.nit:226 */
-  REGB0 = TAG_Bool(0);
-  ATTR_icode___icode_base___IAbsCall_____atis_explicit_from_extern(fra.me.REG[0]) = REGB0;
   /* icode/icode_base.nit:95 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____result(fra.me.REG[0]) = fra.me.REG[1];
   /* icode/icode_base.nit:98 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____location(fra.me.REG[0]) = fra.me.REG[1];
+  /* icode/icode_base.nit:226 */
+  REGB0 = TAG_Bool(0);
+  ATTR_icode___icode_base___IAbsCall_____atis_explicit_from_extern(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_icode___icode_base___ISuper(void)
@@ -29378,6 +31010,11 @@ void CHECKNEW_icode___icode_base___ISuper(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICodeN____exprs(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_exprs", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_icode___icode_base___IAbsCall____property(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -29388,11 +31025,6 @@ void CHECKNEW_icode___icode_base___ISuper(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "@is_explicit_from_extern", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICodeN____exprs(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_exprs", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_ISuper_icode___icode_base___ISuper___init[] = "new ISuper icode_base::ISuper::init";
@@ -29421,14 +31053,14 @@ val_t NEW_ISuper_icode___icode_base___ISuper___init(val_t p0, val_t p1){
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_icode___icode_base___INew[81] = {
-  {(bigint) 3719 /* 0: Identity */},
+  {(bigint) 4231 /* 0: Identity */},
   {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "INew" /* 2: Class Name */},
   {(bigint) 3 /* 3: INew < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: INew < ICode: superclass typecheck marker */},
-  {(bigint) 2683 /* 5: INew < ICodeN: superclass typecheck marker */},
-  {(bigint) 3143 /* 6: INew < IAbsCall: superclass typecheck marker */},
-  {(bigint) 3719 /* 7: INew < INew: superclass typecheck marker */},
+  {(bigint) 3179 /* 5: INew < ICodeN: superclass typecheck marker */},
+  {(bigint) 3643 /* 6: INew < IAbsCall: superclass typecheck marker */},
+  {(bigint) 4231 /* 7: INew < INew: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -29527,15 +31159,15 @@ void INIT_ATTRIBUTES__icode___icode_base___INew(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* icode/icode_base.nit:226 */
-  REGB0 = TAG_Bool(0);
-  ATTR_icode___icode_base___IAbsCall_____atis_explicit_from_extern(fra.me.REG[0]) = REGB0;
   /* icode/icode_base.nit:95 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____result(fra.me.REG[0]) = fra.me.REG[1];
   /* icode/icode_base.nit:98 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____location(fra.me.REG[0]) = fra.me.REG[1];
+  /* icode/icode_base.nit:226 */
+  REGB0 = TAG_Bool(0);
+  ATTR_icode___icode_base___IAbsCall_____atis_explicit_from_extern(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_icode___icode_base___INew(void)
@@ -29561,10 +31193,10 @@ void CHECKNEW_icode___icode_base___INew(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___INew____stype(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICodeN____exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_stype", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_exprs", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_icode___icode_base___IAbsCall____property(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -29576,10 +31208,10 @@ void CHECKNEW_icode___icode_base___INew(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "@is_explicit_from_extern", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICodeN____exprs(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___INew____stype(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_exprs", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_stype", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -29611,13 +31243,13 @@ val_t NEW_INew_icode___icode_base___INew___init(val_t p0, val_t p1, val_t p2){
   return fra.me.REG[3];
 }
 const classtable_elt_t VFT_icode___icode_base___IAllocateInstance[70] = {
-  {(bigint) 3139 /* 0: Identity */},
+  {(bigint) 3639 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IAllocateInstance" /* 2: Class Name */},
   {(bigint) 3 /* 3: IAllocateInstance < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IAllocateInstance < ICode: superclass typecheck marker */},
-  {(bigint) 2695 /* 5: IAllocateInstance < ICode0: superclass typecheck marker */},
-  {(bigint) 3139 /* 6: IAllocateInstance < IAllocateInstance: superclass typecheck marker */},
+  {(bigint) 3191 /* 5: IAllocateInstance < ICode0: superclass typecheck marker */},
+  {(bigint) 3639 /* 6: IAllocateInstance < IAllocateInstance: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -29763,14 +31395,14 @@ val_t NEW_IAllocateInstance_icode___icode_base___IAllocateInstance___init(val_t
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_icode___icode_base___IStaticCall[80] = {
-  {(bigint) 3711 /* 0: Identity */},
+  {(bigint) 4223 /* 0: Identity */},
   {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IStaticCall" /* 2: Class Name */},
   {(bigint) 3 /* 3: IStaticCall < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IStaticCall < ICode: superclass typecheck marker */},
-  {(bigint) 2683 /* 5: IStaticCall < ICodeN: superclass typecheck marker */},
-  {(bigint) 3143 /* 6: IStaticCall < IAbsCall: superclass typecheck marker */},
-  {(bigint) 3711 /* 7: IStaticCall < IStaticCall: superclass typecheck marker */},
+  {(bigint) 3179 /* 5: IStaticCall < ICodeN: superclass typecheck marker */},
+  {(bigint) 3643 /* 6: IStaticCall < IAbsCall: superclass typecheck marker */},
+  {(bigint) 4223 /* 7: IStaticCall < IStaticCall: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -29867,15 +31499,15 @@ void INIT_ATTRIBUTES__icode___icode_base___IStaticCall(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* icode/icode_base.nit:226 */
-  REGB0 = TAG_Bool(0);
-  ATTR_icode___icode_base___IAbsCall_____atis_explicit_from_extern(fra.me.REG[0]) = REGB0;
   /* icode/icode_base.nit:95 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____result(fra.me.REG[0]) = fra.me.REG[1];
   /* icode/icode_base.nit:98 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____location(fra.me.REG[0]) = fra.me.REG[1];
+  /* icode/icode_base.nit:226 */
+  REGB0 = TAG_Bool(0);
+  ATTR_icode___icode_base___IAbsCall_____atis_explicit_from_extern(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_icode___icode_base___IStaticCall(void)
@@ -29901,6 +31533,11 @@ void CHECKNEW_icode___icode_base___IStaticCall(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICodeN____exprs(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_exprs", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_icode___icode_base___IAbsCall____property(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -29911,11 +31548,6 @@ void CHECKNEW_icode___icode_base___IStaticCall(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "@is_explicit_from_extern", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICodeN____exprs(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_exprs", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_IStaticCall_icode___icode_base___IStaticCall___init[] = "new IStaticCall icode_base::IStaticCall::init";
@@ -29944,13 +31576,13 @@ val_t NEW_IStaticCall_icode___icode_base___IStaticCall___init(val_t p0, val_t p1
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_icode___icode_base___ICheckInstance[72] = {
-  {(bigint) 3115 /* 0: Identity */},
+  {(bigint) 3615 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ICheckInstance" /* 2: Class Name */},
   {(bigint) 3 /* 3: ICheckInstance < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: ICheckInstance < ICode: superclass typecheck marker */},
-  {(bigint) 2691 /* 5: ICheckInstance < ICode1: superclass typecheck marker */},
-  {(bigint) 3115 /* 6: ICheckInstance < ICheckInstance: superclass typecheck marker */},
+  {(bigint) 3187 /* 5: ICheckInstance < ICode1: superclass typecheck marker */},
+  {(bigint) 3615 /* 6: ICheckInstance < ICheckInstance: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -30068,15 +31700,15 @@ void CHECKNEW_icode___icode_base___ICheckInstance(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICheckInstance____stype(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICode1____expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_stype", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_expr", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICode1____expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICheckInstance____stype(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_stype", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -30106,13 +31738,13 @@ val_t NEW_ICheckInstance_icode___icode_base___ICheckInstance___init(val_t p0, va
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_icode___icode_base___IInitAttributes[72] = {
-  {(bigint) 3091 /* 0: Identity */},
+  {(bigint) 3591 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IInitAttributes" /* 2: Class Name */},
   {(bigint) 3 /* 3: IInitAttributes < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IInitAttributes < ICode: superclass typecheck marker */},
-  {(bigint) 2691 /* 5: IInitAttributes < ICode1: superclass typecheck marker */},
-  {(bigint) 3091 /* 6: IInitAttributes < IInitAttributes: superclass typecheck marker */},
+  {(bigint) 3187 /* 5: IInitAttributes < ICode1: superclass typecheck marker */},
+  {(bigint) 3591 /* 6: IInitAttributes < IInitAttributes: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -30230,15 +31862,15 @@ void CHECKNEW_icode___icode_base___IInitAttributes(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___IInitAttributes____stype(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICode1____expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_stype", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_expr", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICode1____expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___IInitAttributes____stype(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_stype", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -30268,13 +31900,13 @@ val_t NEW_IInitAttributes_icode___icode_base___IInitAttributes___init(val_t p0,
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_icode___icode_base___IClosCall[78] = {
-  {(bigint) 3111 /* 0: Identity */},
+  {(bigint) 3611 /* 0: Identity */},
   {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IClosCall" /* 2: Class Name */},
   {(bigint) 3 /* 3: IClosCall < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IClosCall < ICode: superclass typecheck marker */},
-  {(bigint) 2683 /* 5: IClosCall < ICodeN: superclass typecheck marker */},
-  {(bigint) 3111 /* 6: IClosCall < IClosCall: superclass typecheck marker */},
+  {(bigint) 3179 /* 5: IClosCall < ICodeN: superclass typecheck marker */},
+  {(bigint) 3611 /* 6: IClosCall < IClosCall: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -30369,15 +32001,15 @@ void INIT_ATTRIBUTES__icode___icode_base___IClosCall(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* icode/icode_base.nit:317 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_icode___icode_base___IClosCall____break_seq(fra.me.REG[0]) = fra.me.REG[1];
   /* icode/icode_base.nit:95 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____result(fra.me.REG[0]) = fra.me.REG[1];
   /* icode/icode_base.nit:98 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____location(fra.me.REG[0]) = fra.me.REG[1];
+  /* icode/icode_base.nit:317 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_icode___icode_base___IClosCall____break_seq(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_icode___icode_base___IClosCall(void)
@@ -30403,15 +32035,15 @@ void CHECKNEW_icode___icode_base___IClosCall(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___IClosCall____closure_decl(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICodeN____exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_closure_decl", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_exprs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICodeN____exprs(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___IClosCall____closure_decl(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_exprs", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_closure_decl", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -30441,13 +32073,13 @@ val_t NEW_IClosCall_icode___icode_base___IClosCall___init(val_t p0, val_t p1){
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_icode___icode_base___INative[78] = {
-  {(bigint) 3075 /* 0: Identity */},
+  {(bigint) 3575 /* 0: Identity */},
   {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "INative" /* 2: Class Name */},
   {(bigint) 3 /* 3: INative < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: INative < ICode: superclass typecheck marker */},
-  {(bigint) 2683 /* 5: INative < ICodeN: superclass typecheck marker */},
-  {(bigint) 3075 /* 6: INative < INative: superclass typecheck marker */},
+  {(bigint) 3179 /* 5: INative < ICodeN: superclass typecheck marker */},
+  {(bigint) 3575 /* 6: INative < INative: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -30543,15 +32175,15 @@ void INIT_ATTRIBUTES__icode___icode_base___INative(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* icode/icode_base.nit:344 */
-  REGB0 = TAG_Bool(0);
-  ATTR_icode___icode_base___INative____is_pure(fra.me.REG[0]) = REGB0;
   /* icode/icode_base.nit:95 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____result(fra.me.REG[0]) = fra.me.REG[1];
   /* icode/icode_base.nit:98 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____location(fra.me.REG[0]) = fra.me.REG[1];
+  /* icode/icode_base.nit:344 */
+  REGB0 = TAG_Bool(0);
+  ATTR_icode___icode_base___INative____is_pure(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_icode___icode_base___INative(void)
@@ -30577,6 +32209,11 @@ void CHECKNEW_icode___icode_base___INative(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICodeN____exprs(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_exprs", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_icode___icode_base___INative____method(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -30587,11 +32224,6 @@ void CHECKNEW_icode___icode_base___INative(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_is_pure", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICodeN____exprs(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_exprs", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_INative_icode___icode_base___INative___init[] = "new INative icode_base::INative::init";
@@ -30620,13 +32252,13 @@ val_t NEW_INative_icode___icode_base___INative___init(val_t p0, val_t p1){
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_icode___icode_base___IIntValue[70] = {
-  {(bigint) 3087 /* 0: Identity */},
+  {(bigint) 3587 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IIntValue" /* 2: Class Name */},
   {(bigint) 3 /* 3: IIntValue < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IIntValue < ICode: superclass typecheck marker */},
-  {(bigint) 2695 /* 5: IIntValue < ICode0: superclass typecheck marker */},
-  {(bigint) 3087 /* 6: IIntValue < IIntValue: superclass typecheck marker */},
+  {(bigint) 3191 /* 5: IIntValue < ICode0: superclass typecheck marker */},
+  {(bigint) 3587 /* 6: IIntValue < IIntValue: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -30772,13 +32404,13 @@ val_t NEW_IIntValue_icode___icode_base___IIntValue___init(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_icode___icode_base___IBoolValue[70] = {
-  {(bigint) 3123 /* 0: Identity */},
+  {(bigint) 3623 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IBoolValue" /* 2: Class Name */},
   {(bigint) 3 /* 3: IBoolValue < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IBoolValue < ICode: superclass typecheck marker */},
-  {(bigint) 2695 /* 5: IBoolValue < ICode0: superclass typecheck marker */},
-  {(bigint) 3123 /* 6: IBoolValue < IBoolValue: superclass typecheck marker */},
+  {(bigint) 3191 /* 5: IBoolValue < ICode0: superclass typecheck marker */},
+  {(bigint) 3623 /* 6: IBoolValue < IBoolValue: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -30924,13 +32556,13 @@ val_t NEW_IBoolValue_icode___icode_base___IBoolValue___init(val_t p0){
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_icode___icode_base___IStringValue[70] = {
-  {(bigint) 3051 /* 0: Identity */},
+  {(bigint) 3551 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IStringValue" /* 2: Class Name */},
   {(bigint) 3 /* 3: IStringValue < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IStringValue < ICode: superclass typecheck marker */},
-  {(bigint) 2695 /* 5: IStringValue < ICode0: superclass typecheck marker */},
-  {(bigint) 3051 /* 6: IStringValue < IStringValue: superclass typecheck marker */},
+  {(bigint) 3191 /* 5: IStringValue < ICode0: superclass typecheck marker */},
+  {(bigint) 3551 /* 6: IStringValue < IStringValue: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -31076,13 +32708,13 @@ val_t NEW_IStringValue_icode___icode_base___IStringValue___init(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_icode___icode_base___IFloatValue[70] = {
-  {(bigint) 3103 /* 0: Identity */},
+  {(bigint) 3603 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IFloatValue" /* 2: Class Name */},
   {(bigint) 3 /* 3: IFloatValue < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IFloatValue < ICode: superclass typecheck marker */},
-  {(bigint) 2695 /* 5: IFloatValue < ICode0: superclass typecheck marker */},
-  {(bigint) 3103 /* 6: IFloatValue < IFloatValue: superclass typecheck marker */},
+  {(bigint) 3191 /* 5: IFloatValue < ICode0: superclass typecheck marker */},
+  {(bigint) 3603 /* 6: IFloatValue < IFloatValue: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -31228,13 +32860,13 @@ val_t NEW_IFloatValue_icode___icode_base___IFloatValue___init(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_icode___icode_base___ICharValue[70] = {
-  {(bigint) 3119 /* 0: Identity */},
+  {(bigint) 3619 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ICharValue" /* 2: Class Name */},
   {(bigint) 3 /* 3: ICharValue < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: ICharValue < ICode: superclass typecheck marker */},
-  {(bigint) 2695 /* 5: ICharValue < ICode0: superclass typecheck marker */},
-  {(bigint) 3119 /* 6: ICharValue < ICharValue: superclass typecheck marker */},
+  {(bigint) 3191 /* 5: ICharValue < ICode0: superclass typecheck marker */},
+  {(bigint) 3619 /* 6: ICharValue < ICharValue: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -31380,13 +33012,13 @@ val_t NEW_ICharValue_icode___icode_base___ICharValue___init(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_icode___icode_base___IMove[71] = {
-  {(bigint) 3079 /* 0: Identity */},
+  {(bigint) 3579 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IMove" /* 2: Class Name */},
   {(bigint) 3 /* 3: IMove < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IMove < ICode: superclass typecheck marker */},
-  {(bigint) 2691 /* 5: IMove < ICode1: superclass typecheck marker */},
-  {(bigint) 3079 /* 6: IMove < IMove: superclass typecheck marker */},
+  {(bigint) 3187 /* 5: IMove < ICode1: superclass typecheck marker */},
+  {(bigint) 3579 /* 6: IMove < IMove: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -31535,13 +33167,13 @@ val_t NEW_IMove_icode___icode_base___IMove___init(val_t p0, val_t p1){
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_icode___icode_base___IAttrRead[72] = {
-  {(bigint) 3131 /* 0: Identity */},
+  {(bigint) 3631 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IAttrRead" /* 2: Class Name */},
   {(bigint) 3 /* 3: IAttrRead < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IAttrRead < ICode: superclass typecheck marker */},
-  {(bigint) 2691 /* 5: IAttrRead < ICode1: superclass typecheck marker */},
-  {(bigint) 3131 /* 6: IAttrRead < IAttrRead: superclass typecheck marker */},
+  {(bigint) 3187 /* 5: IAttrRead < ICode1: superclass typecheck marker */},
+  {(bigint) 3631 /* 6: IAttrRead < IAttrRead: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -31659,15 +33291,15 @@ void CHECKNEW_icode___icode_base___IAttrRead(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___IAttrRead____property(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICode1____expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_property", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_expr", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICode1____expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___IAttrRead____property(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_property", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -31697,13 +33329,13 @@ val_t NEW_IAttrRead_icode___icode_base___IAttrRead___init(val_t p0, val_t p1){
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_icode___icode_base___IAttrWrite[73] = {
-  {(bigint) 3127 /* 0: Identity */},
+  {(bigint) 3627 /* 0: Identity */},
   {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IAttrWrite" /* 2: Class Name */},
   {(bigint) 3 /* 3: IAttrWrite < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IAttrWrite < ICode: superclass typecheck marker */},
-  {(bigint) 2687 /* 5: IAttrWrite < ICode2: superclass typecheck marker */},
-  {(bigint) 3127 /* 6: IAttrWrite < IAttrWrite: superclass typecheck marker */},
+  {(bigint) 3183 /* 5: IAttrWrite < ICode2: superclass typecheck marker */},
+  {(bigint) 3627 /* 6: IAttrWrite < IAttrWrite: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -31823,11 +33455,6 @@ void CHECKNEW_icode___icode_base___IAttrWrite(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___IAttrWrite____property(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_property", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_icode___icode_base___ICode2____expr1(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -31838,6 +33465,11 @@ void CHECKNEW_icode___icode_base___IAttrWrite(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_expr2", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___IAttrWrite____property(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_property", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_IAttrWrite_icode___icode_base___IAttrWrite___init[] = "new IAttrWrite icode_base::IAttrWrite::init";
@@ -31868,13 +33500,13 @@ val_t NEW_IAttrWrite_icode___icode_base___IAttrWrite___init(val_t p0, val_t p1,
   return fra.me.REG[3];
 }
 const classtable_elt_t VFT_icode___icode_base___IAttrIsset[72] = {
-  {(bigint) 3135 /* 0: Identity */},
+  {(bigint) 3635 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IAttrIsset" /* 2: Class Name */},
   {(bigint) 3 /* 3: IAttrIsset < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IAttrIsset < ICode: superclass typecheck marker */},
-  {(bigint) 2691 /* 5: IAttrIsset < ICode1: superclass typecheck marker */},
-  {(bigint) 3135 /* 6: IAttrIsset < IAttrIsset: superclass typecheck marker */},
+  {(bigint) 3187 /* 5: IAttrIsset < ICode1: superclass typecheck marker */},
+  {(bigint) 3635 /* 6: IAttrIsset < IAttrIsset: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -31992,15 +33624,15 @@ void CHECKNEW_icode___icode_base___IAttrIsset(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___IAttrIsset____property(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICode1____expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_property", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_expr", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___ICode1____expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___IAttrIsset____property(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_property", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -32030,13 +33662,13 @@ val_t NEW_IAttrIsset_icode___icode_base___IAttrIsset___init(val_t p0, val_t p1){
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_icode___icode_base___ITypeCheck[73] = {
-  {(bigint) 3047 /* 0: Identity */},
+  {(bigint) 3547 /* 0: Identity */},
   {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ITypeCheck" /* 2: Class Name */},
   {(bigint) 3 /* 3: ITypeCheck < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: ITypeCheck < ICode: superclass typecheck marker */},
-  {(bigint) 2687 /* 5: ITypeCheck < ICode2: superclass typecheck marker */},
-  {(bigint) 3047 /* 6: ITypeCheck < ITypeCheck: superclass typecheck marker */},
+  {(bigint) 3183 /* 5: ITypeCheck < ICode2: superclass typecheck marker */},
+  {(bigint) 3547 /* 6: ITypeCheck < ITypeCheck: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -32156,11 +33788,6 @@ void CHECKNEW_icode___icode_base___ITypeCheck(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_icode___icode_base___ITypeCheck____stype(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_stype", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_icode___icode_base___ICode2____expr1(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -32171,6 +33798,11 @@ void CHECKNEW_icode___icode_base___ITypeCheck(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_expr2", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_icode___icode_base___ITypeCheck____stype(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_stype", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_ITypeCheck_icode___icode_base___ITypeCheck___init[] = "new ITypeCheck icode_base::ITypeCheck::init";
@@ -32201,13 +33833,13 @@ val_t NEW_ITypeCheck_icode___icode_base___ITypeCheck___init(val_t p0, val_t p1,
   return fra.me.REG[3];
 }
 const classtable_elt_t VFT_icode___icode_base___IIs[72] = {
-  {(bigint) 3083 /* 0: Identity */},
+  {(bigint) 3583 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IIs" /* 2: Class Name */},
   {(bigint) 3 /* 3: IIs < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IIs < ICode: superclass typecheck marker */},
-  {(bigint) 2687 /* 5: IIs < ICode2: superclass typecheck marker */},
-  {(bigint) 3083 /* 6: IIs < IIs: superclass typecheck marker */},
+  {(bigint) 3183 /* 5: IIs < ICode2: superclass typecheck marker */},
+  {(bigint) 3583 /* 6: IIs < IIs: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -32363,13 +33995,13 @@ val_t NEW_IIs_icode___icode_base___IIs___init(val_t p0, val_t p1){
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_icode___icode_base___INot[71] = {
-  {(bigint) 3071 /* 0: Identity */},
+  {(bigint) 3571 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "INot" /* 2: Class Name */},
   {(bigint) 3 /* 3: INot < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: INot < ICode: superclass typecheck marker */},
-  {(bigint) 2691 /* 5: INot < ICode1: superclass typecheck marker */},
-  {(bigint) 3071 /* 6: INot < INot: superclass typecheck marker */},
+  {(bigint) 3187 /* 5: INot < ICode1: superclass typecheck marker */},
+  {(bigint) 3571 /* 6: INot < INot: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -32516,13 +34148,13 @@ val_t NEW_INot_icode___icode_base___INot___init(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_icode___icode_base___IOnce[70] = {
-  {(bigint) 3063 /* 0: Identity */},
+  {(bigint) 3563 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IOnce" /* 2: Class Name */},
   {(bigint) 3 /* 3: IOnce < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IOnce < ICode: superclass typecheck marker */},
-  {(bigint) 2695 /* 5: IOnce < ICode0: superclass typecheck marker */},
-  {(bigint) 3063 /* 6: IOnce < IOnce: superclass typecheck marker */},
+  {(bigint) 3191 /* 5: IOnce < ICode0: superclass typecheck marker */},
+  {(bigint) 3563 /* 6: IOnce < IOnce: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -32606,15 +34238,15 @@ void INIT_ATTRIBUTES__icode___icode_base___IOnce(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* icode/icode_base.nit:508 */
-  fra.me.REG[1] = NEW_ISeq_icode___icode_base___ISeq___init();
-  ATTR_icode___icode_base___IOnce____body(fra.me.REG[0]) = fra.me.REG[1];
   /* icode/icode_base.nit:95 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____result(fra.me.REG[0]) = fra.me.REG[1];
   /* icode/icode_base.nit:98 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_base___ICode____location(fra.me.REG[0]) = fra.me.REG[1];
+  /* icode/icode_base.nit:508 */
+  fra.me.REG[1] = NEW_ISeq_icode___icode_base___ISeq___init();
+  ATTR_icode___icode_base___IOnce____body(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_icode___icode_base___IOnce(void)
@@ -32669,13 +34301,13 @@ val_t NEW_IOnce_icode___icode_base___IOnce___init(void){
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_icode___icode_base___IHasClos[70] = {
-  {(bigint) 3099 /* 0: Identity */},
+  {(bigint) 3599 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IHasClos" /* 2: Class Name */},
   {(bigint) 3 /* 3: IHasClos < Object: superclass typecheck marker */},
   {(bigint) 227 /* 4: IHasClos < ICode: superclass typecheck marker */},
-  {(bigint) 2695 /* 5: IHasClos < ICode0: superclass typecheck marker */},
-  {(bigint) 3099 /* 6: IHasClos < IHasClos: superclass typecheck marker */},
+  {(bigint) 3191 /* 5: IHasClos < ICode0: superclass typecheck marker */},
+  {(bigint) 3599 /* 6: IHasClos < IHasClos: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -33142,14 +34774,14 @@ val_t NEW_ICodeDupContext_icode___icode_tools___ICodeDupContext___init(val_t p0)
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TEol[77] = {
-  {(bigint) 2907 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TEol[78] = {
+  {(bigint) 3403 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TEol" /* 2: Class Name */},
   {(bigint) 3 /* 3: TEol < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TEol < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TEol < Token: superclass typecheck marker */},
-  {(bigint) 2907 /* 6: TEol < TEol: superclass typecheck marker */},
+  {(bigint) 3403 /* 6: TEol < TEol: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -33218,8 +34850,9 @@ const classtable_elt_t VFT_parser___parser_nodes___TEol[77] = {
   {(bigint) parser___lexer___TEol___parser_index},
   {(bigint) 0 /* 73: TEol < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
+  {(bigint) parser___lexer___Token___text__eq},
   {(bigint) parser___lexer___TEol___init_tk},
-  {(bigint) 3 /* 76: TEol < TEol: superclass init_table position */},
+  {(bigint) 3 /* 77: TEol < TEol: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -33269,7 +34902,7 @@ val_t NEW_TEol_parser___lexer___TEol___init_tk(val_t p0){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 29;
+  fra.me.line = 34;
   fra.me.meth = LOCATE_NEW_TEol_parser___lexer___TEol___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -33277,7 +34910,7 @@ val_t NEW_TEol_parser___lexer___TEol___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:29 */
+  /* parser/lexer.nit:34 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TEol();
   INIT_ATTRIBUTES__parser___parser_nodes___TEol(fra.me.REG[1]);
   parser___lexer___TEol___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -33306,14 +34939,14 @@ val_t NEW_TEol_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TComment[77] = {
-  {(bigint) 2919 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TComment[78] = {
+  {(bigint) 3415 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TComment" /* 2: Class Name */},
   {(bigint) 3 /* 3: TComment < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TComment < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TComment < Token: superclass typecheck marker */},
-  {(bigint) 2919 /* 6: TComment < TComment: superclass typecheck marker */},
+  {(bigint) 3415 /* 6: TComment < TComment: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -33382,8 +35015,9 @@ const classtable_elt_t VFT_parser___parser_nodes___TComment[77] = {
   {(bigint) parser___lexer___TComment___parser_index},
   {(bigint) 0 /* 73: TComment < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
+  {(bigint) parser___lexer___Token___text__eq},
   {(bigint) parser___lexer___TComment___init_tk},
-  {(bigint) 3 /* 76: TComment < TComment: superclass init_table position */},
+  {(bigint) 3 /* 77: TComment < TComment: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -33433,7 +35067,7 @@ val_t NEW_TComment_parser___lexer___TComment___init_tk(val_t p0){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 41;
+  fra.me.line = 46;
   fra.me.meth = LOCATE_NEW_TComment_parser___lexer___TComment___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -33441,7 +35075,7 @@ val_t NEW_TComment_parser___lexer___TComment___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:41 */
+  /* parser/lexer.nit:46 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TComment();
   INIT_ATTRIBUTES__parser___parser_nodes___TComment(fra.me.REG[1]);
   parser___lexer___TComment___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -33470,15 +35104,15 @@ val_t NEW_TComment_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwmodule[78] = {
-  {(bigint) 3519 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwmodule[79] = {
+  {(bigint) 4031 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwmodule" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwmodule < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwmodule < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwmodule < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwmodule < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3519 /* 7: TKwmodule < TKwmodule: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwmodule < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4031 /* 7: TKwmodule < TKwmodule: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -33546,9 +35180,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwmodule[78] = {
   {(bigint) parser___lexer___TKwmodule___parser_index},
   {(bigint) 1 /* 73: TKwmodule < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwmodule < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwmodule < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwmodule___init_tk},
-  {(bigint) 4 /* 77: TKwmodule < TKwmodule: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwmodule < TKwmodule: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -33598,7 +35233,7 @@ val_t NEW_TKwmodule_parser___lexer___TKwmodule___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 53;
+  fra.me.line = 58;
   fra.me.meth = LOCATE_NEW_TKwmodule_parser___lexer___TKwmodule___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -33606,7 +35241,7 @@ val_t NEW_TKwmodule_parser___lexer___TKwmodule___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:53 */
+  /* parser/lexer.nit:58 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwmodule();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwmodule(fra.me.REG[1]);
   parser___lexer___TKwmodule___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -33635,15 +35270,15 @@ val_t NEW_TKwmodule_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwimport[78] = {
-  {(bigint) 3567 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwimport[79] = {
+  {(bigint) 4079 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwimport" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwimport < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwimport < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwimport < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwimport < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3567 /* 7: TKwimport < TKwimport: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwimport < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4079 /* 7: TKwimport < TKwimport: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -33711,9 +35346,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwimport[78] = {
   {(bigint) parser___lexer___TKwimport___parser_index},
   {(bigint) 1 /* 73: TKwimport < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwimport < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwimport < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwimport___init_tk},
-  {(bigint) 4 /* 77: TKwimport < TKwimport: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwimport < TKwimport: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -33763,7 +35399,7 @@ val_t NEW_TKwimport_parser___lexer___TKwimport___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 65;
+  fra.me.line = 70;
   fra.me.meth = LOCATE_NEW_TKwimport_parser___lexer___TKwimport___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -33771,7 +35407,7 @@ val_t NEW_TKwimport_parser___lexer___TKwimport___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:65 */
+  /* parser/lexer.nit:70 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwimport();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwimport(fra.me.REG[1]);
   parser___lexer___TKwimport___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -33800,15 +35436,15 @@ val_t NEW_TKwimport_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwclass[78] = {
-  {(bigint) 3607 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwclass[79] = {
+  {(bigint) 4119 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwclass" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwclass < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwclass < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwclass < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwclass < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3607 /* 7: TKwclass < TKwclass: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwclass < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4119 /* 7: TKwclass < TKwclass: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -33876,9 +35512,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwclass[78] = {
   {(bigint) parser___lexer___TKwclass___parser_index},
   {(bigint) 1 /* 73: TKwclass < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwclass < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwclass < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwclass___init_tk},
-  {(bigint) 4 /* 77: TKwclass < TKwclass: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwclass < TKwclass: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -33928,7 +35565,7 @@ val_t NEW_TKwclass_parser___lexer___TKwclass___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 77;
+  fra.me.line = 82;
   fra.me.meth = LOCATE_NEW_TKwclass_parser___lexer___TKwclass___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -33936,7 +35573,7 @@ val_t NEW_TKwclass_parser___lexer___TKwclass___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:77 */
+  /* parser/lexer.nit:82 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwclass();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwclass(fra.me.REG[1]);
   parser___lexer___TKwclass___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -33965,15 +35602,15 @@ val_t NEW_TKwclass_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwabstract[78] = {
-  {(bigint) 3627 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwabstract[79] = {
+  {(bigint) 4139 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwabstract" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwabstract < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwabstract < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwabstract < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwabstract < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3627 /* 7: TKwabstract < TKwabstract: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwabstract < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4139 /* 7: TKwabstract < TKwabstract: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -34041,9 +35678,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwabstract[78] = {
   {(bigint) parser___lexer___TKwabstract___parser_index},
   {(bigint) 1 /* 73: TKwabstract < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwabstract < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwabstract < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwabstract___init_tk},
-  {(bigint) 4 /* 77: TKwabstract < TKwabstract: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwabstract < TKwabstract: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -34093,7 +35731,7 @@ val_t NEW_TKwabstract_parser___lexer___TKwabstract___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 89;
+  fra.me.line = 94;
   fra.me.meth = LOCATE_NEW_TKwabstract_parser___lexer___TKwabstract___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34101,7 +35739,7 @@ val_t NEW_TKwabstract_parser___lexer___TKwabstract___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:89 */
+  /* parser/lexer.nit:94 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwabstract();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwabstract(fra.me.REG[1]);
   parser___lexer___TKwabstract___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -34130,15 +35768,15 @@ val_t NEW_TKwabstract_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwinterface[78] = {
-  {(bigint) 3555 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwinterface[79] = {
+  {(bigint) 4067 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwinterface" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwinterface < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwinterface < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwinterface < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwinterface < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3555 /* 7: TKwinterface < TKwinterface: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwinterface < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4067 /* 7: TKwinterface < TKwinterface: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -34206,9 +35844,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwinterface[78] = {
   {(bigint) parser___lexer___TKwinterface___parser_index},
   {(bigint) 1 /* 73: TKwinterface < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwinterface < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwinterface < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwinterface___init_tk},
-  {(bigint) 4 /* 77: TKwinterface < TKwinterface: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwinterface < TKwinterface: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -34258,7 +35897,7 @@ val_t NEW_TKwinterface_parser___lexer___TKwinterface___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 101;
+  fra.me.line = 106;
   fra.me.meth = LOCATE_NEW_TKwinterface_parser___lexer___TKwinterface___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34266,7 +35905,7 @@ val_t NEW_TKwinterface_parser___lexer___TKwinterface___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:101 */
+  /* parser/lexer.nit:106 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwinterface();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwinterface(fra.me.REG[1]);
   parser___lexer___TKwinterface___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -34295,15 +35934,15 @@ val_t NEW_TKwinterface_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwenum[78] = {
-  {(bigint) 3587 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwenum[79] = {
+  {(bigint) 4099 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwenum" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwenum < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwenum < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwenum < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwenum < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3587 /* 7: TKwenum < TKwenum: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwenum < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4099 /* 7: TKwenum < TKwenum: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -34371,9 +36010,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwenum[78] = {
   {(bigint) parser___lexer___TKwenum___parser_index},
   {(bigint) 1 /* 73: TKwenum < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwenum < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwenum < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwenum___init_tk},
-  {(bigint) 4 /* 77: TKwenum < TKwenum: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwenum < TKwenum: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -34423,7 +36063,7 @@ val_t NEW_TKwenum_parser___lexer___TKwenum___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 113;
+  fra.me.line = 118;
   fra.me.meth = LOCATE_NEW_TKwenum_parser___lexer___TKwenum___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34431,7 +36071,7 @@ val_t NEW_TKwenum_parser___lexer___TKwenum___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:113 */
+  /* parser/lexer.nit:118 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwenum();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwenum(fra.me.REG[1]);
   parser___lexer___TKwenum___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -34460,15 +36100,15 @@ val_t NEW_TKwenum_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwspecial[78] = {
-  {(bigint) 3467 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwend[79] = {
+  {(bigint) 4103 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TKwspecial" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TKwspecial < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TKwspecial < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TKwspecial < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwspecial < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3467 /* 7: TKwspecial < TKwspecial: superclass typecheck marker */},
+  {(bigint) "TKwend" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TKwend < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TKwend < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TKwend < Token: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwend < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4103 /* 7: TKwend < TKwend: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -34480,7 +36120,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwspecial[78] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 3 /* 19: TKwspecial < Object: superclass init_table position */},
+  {(bigint) 3 /* 19: TKwend < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -34524,7 +36164,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwspecial[78] = {
   {(bigint) parser___parser_prod___Token___replace_child},
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) parser___parser_prod___Token___visit_all},
-  {(bigint) 2 /* 63: TKwspecial < ANode: superclass init_table position */},
+  {(bigint) 2 /* 63: TKwend < ANode: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANode___location},
   {(bigint) parser___parser_nodes___ANode___hot_location},
   {(bigint) parser___parser_nodes___ANode___init},
@@ -34533,107 +36173,108 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwspecial[78] = {
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) syntax___syntax_base___Token___to_symbol},
-  {(bigint) parser___lexer___TKwspecial___parser_index},
-  {(bigint) 1 /* 73: TKwspecial < Token: superclass init_table position */},
+  {(bigint) parser___lexer___TKwend___parser_index},
+  {(bigint) 1 /* 73: TKwend < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwspecial < TokenKeyword: superclass init_table position */},
-  {(bigint) parser___lexer___TKwspecial___init_tk},
-  {(bigint) 4 /* 77: TKwspecial < TKwspecial: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwend < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___TKwend___init_tk},
+  {(bigint) 4 /* 78: TKwend < TKwend: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute TKwspecial::_parent */
-/* 3: Attribute TKwspecial::_location */
-/* 4: Attribute TKwspecial::_symbol_cache */
-/* 5: Attribute TKwspecial::_text */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TKwspecial[] = "init var of TKwspecial";
-void INIT_ATTRIBUTES__parser___parser_nodes___TKwspecial(val_t p0){
+/* 2: Attribute TKwend::_parent */
+/* 3: Attribute TKwend::_location */
+/* 4: Attribute TKwend::_symbol_cache */
+/* 5: Attribute TKwend::_text */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TKwend[] = "init var of TKwend";
+void INIT_ATTRIBUTES__parser___parser_nodes___TKwend(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TKwspecial;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TKwend;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___TKwspecial(void)
+val_t NEW_parser___parser_nodes___TKwend(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 6);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TKwspecial;
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TKwend;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___TKwspecial[] = "check new TKwspecial";
-void CHECKNEW_parser___parser_nodes___TKwspecial(val_t p0){
+static const char LOCATE_CHECKNEW_parser___parser_nodes___TKwend[] = "check new TKwend";
+void CHECKNEW_parser___parser_nodes___TKwend(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TKwspecial;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TKwend;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_TKwspecial_parser___lexer___TKwspecial___init_tk[] = "new TKwspecial lexer::TKwspecial::init_tk";
-val_t NEW_TKwspecial_parser___lexer___TKwspecial___init_tk(val_t p0){
+static const char LOCATE_NEW_TKwend_parser___lexer___TKwend___init_tk[] = "new TKwend lexer::TKwend::init_tk";
+val_t NEW_TKwend_parser___lexer___TKwend___init_tk(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 125;
-  fra.me.meth = LOCATE_NEW_TKwspecial_parser___lexer___TKwspecial___init_tk;
+  fra.me.line = 130;
+  fra.me.meth = LOCATE_NEW_TKwend_parser___lexer___TKwend___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:125 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___TKwspecial();
-  INIT_ATTRIBUTES__parser___parser_nodes___TKwspecial(fra.me.REG[1]);
-  parser___lexer___TKwspecial___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TKwspecial(fra.me.REG[1]);
+  /* parser/lexer.nit:130 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___TKwend();
+  INIT_ATTRIBUTES__parser___parser_nodes___TKwend(fra.me.REG[1]);
+  parser___lexer___TKwend___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___TKwend(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_NEW_TKwspecial_parser___parser_nodes___ANode___init[] = "new TKwspecial parser_nodes::ANode::init";
-val_t NEW_TKwspecial_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_TKwend_parser___parser_nodes___ANode___init[] = "new TKwend parser_nodes::ANode::init";
+val_t NEW_TKwend_parser___parser_nodes___ANode___init(void){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_TKwspecial_parser___parser_nodes___ANode___init;
+  fra.me.meth = LOCATE_NEW_TKwend_parser___parser_nodes___ANode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___TKwspecial();
-  INIT_ATTRIBUTES__parser___parser_nodes___TKwspecial(fra.me.REG[0]);
+  fra.me.REG[0] = NEW_parser___parser_nodes___TKwend();
+  INIT_ATTRIBUTES__parser___parser_nodes___TKwend(fra.me.REG[0]);
   parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TKwspecial(fra.me.REG[0]);
+  CHECKNEW_parser___parser_nodes___TKwend(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwend[78] = {
-  {(bigint) 3591 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwmeth[79] = {
+  {(bigint) 4035 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TKwend" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TKwend < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TKwend < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TKwend < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwend < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3591 /* 7: TKwend < TKwend: superclass typecheck marker */},
+  {(bigint) "TKwmeth" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TKwmeth < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TKwmeth < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TKwmeth < Token: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwmeth < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4035 /* 7: TKwmeth < TKwmeth: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -34645,7 +36286,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwend[78] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 3 /* 19: TKwend < Object: superclass init_table position */},
+  {(bigint) 3 /* 19: TKwmeth < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -34689,7 +36330,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwend[78] = {
   {(bigint) parser___parser_prod___Token___replace_child},
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) parser___parser_prod___Token___visit_all},
-  {(bigint) 2 /* 63: TKwend < ANode: superclass init_table position */},
+  {(bigint) 2 /* 63: TKwmeth < ANode: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANode___location},
   {(bigint) parser___parser_nodes___ANode___hot_location},
   {(bigint) parser___parser_nodes___ANode___init},
@@ -34698,107 +36339,108 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwend[78] = {
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) syntax___syntax_base___Token___to_symbol},
-  {(bigint) parser___lexer___TKwend___parser_index},
-  {(bigint) 1 /* 73: TKwend < Token: superclass init_table position */},
+  {(bigint) parser___lexer___TKwmeth___parser_index},
+  {(bigint) 1 /* 73: TKwmeth < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwend < TokenKeyword: superclass init_table position */},
-  {(bigint) parser___lexer___TKwend___init_tk},
-  {(bigint) 4 /* 77: TKwend < TKwend: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwmeth < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___TKwmeth___init_tk},
+  {(bigint) 4 /* 78: TKwmeth < TKwmeth: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute TKwend::_parent */
-/* 3: Attribute TKwend::_location */
-/* 4: Attribute TKwend::_symbol_cache */
-/* 5: Attribute TKwend::_text */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TKwend[] = "init var of TKwend";
-void INIT_ATTRIBUTES__parser___parser_nodes___TKwend(val_t p0){
+/* 2: Attribute TKwmeth::_parent */
+/* 3: Attribute TKwmeth::_location */
+/* 4: Attribute TKwmeth::_symbol_cache */
+/* 5: Attribute TKwmeth::_text */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TKwmeth[] = "init var of TKwmeth";
+void INIT_ATTRIBUTES__parser___parser_nodes___TKwmeth(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TKwend;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TKwmeth;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___TKwend(void)
+val_t NEW_parser___parser_nodes___TKwmeth(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 6);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TKwend;
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TKwmeth;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___TKwend[] = "check new TKwend";
-void CHECKNEW_parser___parser_nodes___TKwend(val_t p0){
+static const char LOCATE_CHECKNEW_parser___parser_nodes___TKwmeth[] = "check new TKwmeth";
+void CHECKNEW_parser___parser_nodes___TKwmeth(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TKwend;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TKwmeth;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_TKwend_parser___lexer___TKwend___init_tk[] = "new TKwend lexer::TKwend::init_tk";
-val_t NEW_TKwend_parser___lexer___TKwend___init_tk(val_t p0){
+static const char LOCATE_NEW_TKwmeth_parser___lexer___TKwmeth___init_tk[] = "new TKwmeth lexer::TKwmeth::init_tk";
+val_t NEW_TKwmeth_parser___lexer___TKwmeth___init_tk(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 137;
-  fra.me.meth = LOCATE_NEW_TKwend_parser___lexer___TKwend___init_tk;
+  fra.me.line = 142;
+  fra.me.meth = LOCATE_NEW_TKwmeth_parser___lexer___TKwmeth___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:137 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___TKwend();
-  INIT_ATTRIBUTES__parser___parser_nodes___TKwend(fra.me.REG[1]);
-  parser___lexer___TKwend___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TKwend(fra.me.REG[1]);
+  /* parser/lexer.nit:142 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___TKwmeth();
+  INIT_ATTRIBUTES__parser___parser_nodes___TKwmeth(fra.me.REG[1]);
+  parser___lexer___TKwmeth___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___TKwmeth(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_NEW_TKwend_parser___parser_nodes___ANode___init[] = "new TKwend parser_nodes::ANode::init";
-val_t NEW_TKwend_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_TKwmeth_parser___parser_nodes___ANode___init[] = "new TKwmeth parser_nodes::ANode::init";
+val_t NEW_TKwmeth_parser___parser_nodes___ANode___init(void){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_TKwend_parser___parser_nodes___ANode___init;
+  fra.me.meth = LOCATE_NEW_TKwmeth_parser___parser_nodes___ANode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___TKwend();
-  INIT_ATTRIBUTES__parser___parser_nodes___TKwend(fra.me.REG[0]);
+  fra.me.REG[0] = NEW_parser___parser_nodes___TKwmeth();
+  INIT_ATTRIBUTES__parser___parser_nodes___TKwmeth(fra.me.REG[0]);
   parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TKwend(fra.me.REG[0]);
+  CHECKNEW_parser___parser_nodes___TKwmeth(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwmeth[78] = {
-  {(bigint) 3523 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwtype[79] = {
+  {(bigint) 3967 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TKwmeth" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TKwmeth < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TKwmeth < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TKwmeth < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwmeth < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3523 /* 7: TKwmeth < TKwmeth: superclass typecheck marker */},
+  {(bigint) "TKwtype" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TKwtype < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TKwtype < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TKwtype < Token: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwtype < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 3967 /* 7: TKwtype < TKwtype: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -34810,172 +36452,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwmeth[78] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 3 /* 19: TKwmeth < Object: superclass init_table position */},
-  {(bigint) standard___kernel___Object___object_id},
-  {(bigint) standard___kernel___Object___is_same_type},
-  {(bigint) standard___kernel___Object_____eqeq},
-  {(bigint) standard___kernel___Object_____neq},
-  {(bigint) standard___kernel___Object___output},
-  {(bigint) standard___kernel___Object___output_class_name},
-  {(bigint) standard___kernel___Object___exit},
-  {(bigint) standard___kernel___Object___sys},
-  {(bigint) standard___file___Object___printn},
-  {(bigint) standard___file___Object___print},
-  {(bigint) standard___file___Object___getc},
-  {(bigint) standard___file___Object___gets},
-  {(bigint) standard___file___Object___stdin},
-  {(bigint) standard___file___Object___stdout},
-  {(bigint) standard___file___Object___stderr},
-  {(bigint) standard___stream___Object___poll},
-  {(bigint) standard___stream___Object___intern_poll},
-  {(bigint) parser___parser_nodes___TokenKeyword___to_s},
-  {(bigint) standard___string___Object___native_class_name},
-  {(bigint) standard___string___Object___class_name},
-  {(bigint) standard___string___Object___inspect},
-  {(bigint) standard___string___Object___inspect_head},
-  {(bigint) standard___string___Object___args},
-  {(bigint) standard___hash___Object___hash},
-  {(bigint) standard___math___Object___atan2},
-  {(bigint) standard___math___Object___pi},
-  {(bigint) standard___math___Object___srand_from},
-  {(bigint) standard___math___Object___srand},
-  {(bigint) utils___Object___cmangle},
-  {(bigint) utils___Object___cmangle_table},
-  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
-  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
-  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
-  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
-  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
-  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
-  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
-  {(bigint) parser___parser_prod___ANode___parent},
-  {(bigint) parser___parser_prod___ANode___parent__eq},
-  {(bigint) parser___parser_prod___ANode___remove_child},
-  {(bigint) parser___parser_prod___Token___replace_child},
-  {(bigint) parser___parser_prod___ANode___replace_with},
-  {(bigint) parser___parser_prod___Token___visit_all},
-  {(bigint) 2 /* 63: TKwmeth < ANode: superclass init_table position */},
-  {(bigint) parser___parser_nodes___ANode___location},
-  {(bigint) parser___parser_nodes___ANode___hot_location},
-  {(bigint) parser___parser_nodes___ANode___init},
-  {(bigint) parser___parser_nodes___ANode___debug},
-  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
-  {(bigint) syntax___typing___ANode___accept_typing},
-  {(bigint) syntax___typing___ANode___after_typing},
-  {(bigint) syntax___syntax_base___Token___to_symbol},
-  {(bigint) parser___lexer___TKwmeth___parser_index},
-  {(bigint) 1 /* 73: TKwmeth < Token: superclass init_table position */},
-  {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwmeth < TokenKeyword: superclass init_table position */},
-  {(bigint) parser___lexer___TKwmeth___init_tk},
-  {(bigint) 4 /* 77: TKwmeth < TKwmeth: superclass init_table position */},
-};
-/* 0: Pointer to the classtable */
-/* 1: Object_id */
-/* 2: Attribute TKwmeth::_parent */
-/* 3: Attribute TKwmeth::_location */
-/* 4: Attribute TKwmeth::_symbol_cache */
-/* 5: Attribute TKwmeth::_text */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TKwmeth[] = "init var of TKwmeth";
-void INIT_ATTRIBUTES__parser___parser_nodes___TKwmeth(val_t p0){
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_nitc;
-  fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TKwmeth;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
-  fra.me.nitni_local_ref_head = NULL;
-  stack_frame_head = fra.me.prev;
-}
-val_t NEW_parser___parser_nodes___TKwmeth(void)
-{
-  obj_t obj;
-  obj = alloc(sizeof(val_t) * 6);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TKwmeth;
-  obj[1].object_id = object_id_counter;
-  object_id_counter = object_id_counter + 1;
-  return OBJ2VAL(obj);
-}
-static const char LOCATE_CHECKNEW_parser___parser_nodes___TKwmeth[] = "check new TKwmeth";
-void CHECKNEW_parser___parser_nodes___TKwmeth(val_t p0){
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_nitc;
-  fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TKwmeth;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
-  fra.me.nitni_local_ref_head = NULL;
-  stack_frame_head = fra.me.prev;
-}
-static const char LOCATE_NEW_TKwmeth_parser___lexer___TKwmeth___init_tk[] = "new TKwmeth lexer::TKwmeth::init_tk";
-val_t NEW_TKwmeth_parser___lexer___TKwmeth___init_tk(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  int init_table[5] = {0, 0, 0, 0, 0};
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_nitc;
-  fra.me.line = 149;
-  fra.me.meth = LOCATE_NEW_TKwmeth_parser___lexer___TKwmeth___init_tk;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* parser/lexer.nit:149 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___TKwmeth();
-  INIT_ATTRIBUTES__parser___parser_nodes___TKwmeth(fra.me.REG[1]);
-  parser___lexer___TKwmeth___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TKwmeth(fra.me.REG[1]);
-  stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
-}
-static const char LOCATE_NEW_TKwmeth_parser___parser_nodes___ANode___init[] = "new TKwmeth parser_nodes::ANode::init";
-val_t NEW_TKwmeth_parser___parser_nodes___ANode___init(void){
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  int init_table[5] = {0, 0, 0, 0, 0};
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_nitc;
-  fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_TKwmeth_parser___parser_nodes___ANode___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___TKwmeth();
-  INIT_ATTRIBUTES__parser___parser_nodes___TKwmeth(fra.me.REG[0]);
-  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TKwmeth(fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return fra.me.REG[0];
-}
-const classtable_elt_t VFT_parser___parser_nodes___TKwtype[78] = {
-  {(bigint) 3451 /* 0: Identity */},
-  {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TKwtype" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TKwtype < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TKwtype < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TKwtype < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwtype < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3451 /* 7: TKwtype < TKwtype: superclass typecheck marker */},
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {0} /* Class Hole :( */,
-  {(bigint) nit_version___Object___nit_version},
-  {(bigint) standard___time___Object___get_time},
-  {(bigint) 3 /* 19: TKwtype < Object: superclass init_table position */},
+  {(bigint) 3 /* 19: TKwtype < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -35031,9 +36508,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwtype[78] = {
   {(bigint) parser___lexer___TKwtype___parser_index},
   {(bigint) 1 /* 73: TKwtype < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwtype < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwtype < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwtype___init_tk},
-  {(bigint) 4 /* 77: TKwtype < TKwtype: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwtype < TKwtype: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -35083,7 +36561,7 @@ val_t NEW_TKwtype_parser___lexer___TKwtype___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 161;
+  fra.me.line = 154;
   fra.me.meth = LOCATE_NEW_TKwtype_parser___lexer___TKwtype___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35091,7 +36569,7 @@ val_t NEW_TKwtype_parser___lexer___TKwtype___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:161 */
+  /* parser/lexer.nit:154 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwtype();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwtype(fra.me.REG[1]);
   parser___lexer___TKwtype___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -35120,15 +36598,15 @@ val_t NEW_TKwtype_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwinit[78] = {
-  {(bigint) 3559 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwinit[79] = {
+  {(bigint) 4071 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwinit" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwinit < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwinit < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwinit < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwinit < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3559 /* 7: TKwinit < TKwinit: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwinit < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4071 /* 7: TKwinit < TKwinit: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -35196,9 +36674,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwinit[78] = {
   {(bigint) parser___lexer___TKwinit___parser_index},
   {(bigint) 1 /* 73: TKwinit < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwinit < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwinit < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwinit___init_tk},
-  {(bigint) 4 /* 77: TKwinit < TKwinit: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwinit < TKwinit: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -35248,7 +36727,7 @@ val_t NEW_TKwinit_parser___lexer___TKwinit___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 173;
+  fra.me.line = 166;
   fra.me.meth = LOCATE_NEW_TKwinit_parser___lexer___TKwinit___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35256,7 +36735,7 @@ val_t NEW_TKwinit_parser___lexer___TKwinit___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:173 */
+  /* parser/lexer.nit:166 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwinit();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwinit(fra.me.REG[1]);
   parser___lexer___TKwinit___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -35285,15 +36764,15 @@ val_t NEW_TKwinit_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwredef[78] = {
-  {(bigint) 3479 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwredef[79] = {
+  {(bigint) 3991 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwredef" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwredef < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwredef < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwredef < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwredef < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3479 /* 7: TKwredef < TKwredef: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwredef < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 3991 /* 7: TKwredef < TKwredef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -35361,9 +36840,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwredef[78] = {
   {(bigint) parser___lexer___TKwredef___parser_index},
   {(bigint) 1 /* 73: TKwredef < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwredef < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwredef < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwredef___init_tk},
-  {(bigint) 4 /* 77: TKwredef < TKwredef: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwredef < TKwredef: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -35413,7 +36893,7 @@ val_t NEW_TKwredef_parser___lexer___TKwredef___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 185;
+  fra.me.line = 178;
   fra.me.meth = LOCATE_NEW_TKwredef_parser___lexer___TKwredef___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35421,7 +36901,7 @@ val_t NEW_TKwredef_parser___lexer___TKwredef___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:185 */
+  /* parser/lexer.nit:178 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwredef();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwredef(fra.me.REG[1]);
   parser___lexer___TKwredef___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -35450,15 +36930,15 @@ val_t NEW_TKwredef_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwis[78] = {
-  {(bigint) 3543 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwis[79] = {
+  {(bigint) 4055 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwis" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwis < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwis < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwis < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwis < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3543 /* 7: TKwis < TKwis: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwis < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4055 /* 7: TKwis < TKwis: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -35526,9 +37006,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwis[78] = {
   {(bigint) parser___lexer___TKwis___parser_index},
   {(bigint) 1 /* 73: TKwis < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwis < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwis < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwis___init_tk},
-  {(bigint) 4 /* 77: TKwis < TKwis: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwis < TKwis: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -35578,7 +37059,7 @@ val_t NEW_TKwis_parser___lexer___TKwis___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 197;
+  fra.me.line = 190;
   fra.me.meth = LOCATE_NEW_TKwis_parser___lexer___TKwis___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35586,7 +37067,7 @@ val_t NEW_TKwis_parser___lexer___TKwis___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:197 */
+  /* parser/lexer.nit:190 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwis();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwis(fra.me.REG[1]);
   parser___lexer___TKwis___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -35615,15 +37096,15 @@ val_t NEW_TKwis_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwdo[78] = {
-  {(bigint) 3599 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwdo[79] = {
+  {(bigint) 4111 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwdo" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwdo < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwdo < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwdo < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwdo < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3599 /* 7: TKwdo < TKwdo: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwdo < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4111 /* 7: TKwdo < TKwdo: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -35691,9 +37172,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwdo[78] = {
   {(bigint) parser___lexer___TKwdo___parser_index},
   {(bigint) 1 /* 73: TKwdo < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwdo < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwdo < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwdo___init_tk},
-  {(bigint) 4 /* 77: TKwdo < TKwdo: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwdo < TKwdo: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -35743,7 +37225,7 @@ val_t NEW_TKwdo_parser___lexer___TKwdo___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 209;
+  fra.me.line = 202;
   fra.me.meth = LOCATE_NEW_TKwdo_parser___lexer___TKwdo___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35751,7 +37233,7 @@ val_t NEW_TKwdo_parser___lexer___TKwdo___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:209 */
+  /* parser/lexer.nit:202 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwdo();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwdo(fra.me.REG[1]);
   parser___lexer___TKwdo___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -35780,15 +37262,15 @@ val_t NEW_TKwdo_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwreadable[78] = {
-  {(bigint) 3483 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwreadable[79] = {
+  {(bigint) 3995 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwreadable" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwreadable < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwreadable < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwreadable < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwreadable < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3483 /* 7: TKwreadable < TKwreadable: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwreadable < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 3995 /* 7: TKwreadable < TKwreadable: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -35856,9 +37338,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwreadable[78] = {
   {(bigint) parser___lexer___TKwreadable___parser_index},
   {(bigint) 1 /* 73: TKwreadable < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwreadable < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwreadable < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwreadable___init_tk},
-  {(bigint) 4 /* 77: TKwreadable < TKwreadable: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwreadable < TKwreadable: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -35908,7 +37391,7 @@ val_t NEW_TKwreadable_parser___lexer___TKwreadable___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 221;
+  fra.me.line = 214;
   fra.me.meth = LOCATE_NEW_TKwreadable_parser___lexer___TKwreadable___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35916,7 +37399,7 @@ val_t NEW_TKwreadable_parser___lexer___TKwreadable___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:221 */
+  /* parser/lexer.nit:214 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwreadable();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwreadable(fra.me.REG[1]);
   parser___lexer___TKwreadable___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -35945,15 +37428,15 @@ val_t NEW_TKwreadable_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwwritable[78] = {
-  {(bigint) 3439 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwwritable[79] = {
+  {(bigint) 3955 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwwritable" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwwritable < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwwritable < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwwritable < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwwritable < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3439 /* 7: TKwwritable < TKwwritable: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwwritable < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 3955 /* 7: TKwwritable < TKwwritable: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -36021,9 +37504,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwwritable[78] = {
   {(bigint) parser___lexer___TKwwritable___parser_index},
   {(bigint) 1 /* 73: TKwwritable < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwwritable < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwwritable < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwwritable___init_tk},
-  {(bigint) 4 /* 77: TKwwritable < TKwwritable: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwwritable < TKwwritable: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -36073,7 +37557,7 @@ val_t NEW_TKwwritable_parser___lexer___TKwwritable___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 233;
+  fra.me.line = 226;
   fra.me.meth = LOCATE_NEW_TKwwritable_parser___lexer___TKwwritable___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36081,7 +37565,7 @@ val_t NEW_TKwwritable_parser___lexer___TKwwritable___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:233 */
+  /* parser/lexer.nit:226 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwwritable();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwwritable(fra.me.REG[1]);
   parser___lexer___TKwwritable___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -36110,15 +37594,15 @@ val_t NEW_TKwwritable_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwvar[78] = {
-  {(bigint) 3447 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwvar[79] = {
+  {(bigint) 3963 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwvar" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwvar < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwvar < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwvar < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwvar < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3447 /* 7: TKwvar < TKwvar: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwvar < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 3963 /* 7: TKwvar < TKwvar: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -36186,9 +37670,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwvar[78] = {
   {(bigint) parser___lexer___TKwvar___parser_index},
   {(bigint) 1 /* 73: TKwvar < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwvar < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwvar < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwvar___init_tk},
-  {(bigint) 4 /* 77: TKwvar < TKwvar: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwvar < TKwvar: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -36238,7 +37723,7 @@ val_t NEW_TKwvar_parser___lexer___TKwvar___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 245;
+  fra.me.line = 238;
   fra.me.meth = LOCATE_NEW_TKwvar_parser___lexer___TKwvar___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36246,7 +37731,7 @@ val_t NEW_TKwvar_parser___lexer___TKwvar___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:245 */
+  /* parser/lexer.nit:238 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwvar();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwvar(fra.me.REG[1]);
   parser___lexer___TKwvar___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -36275,15 +37760,15 @@ val_t NEW_TKwvar_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwintern[78] = {
-  {(bigint) 3551 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwintern[79] = {
+  {(bigint) 4063 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwintern" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwintern < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwintern < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwintern < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwintern < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3551 /* 7: TKwintern < TKwintern: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwintern < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4063 /* 7: TKwintern < TKwintern: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -36351,9 +37836,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwintern[78] = {
   {(bigint) parser___lexer___TKwintern___parser_index},
   {(bigint) 1 /* 73: TKwintern < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwintern < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwintern < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwintern___init_tk},
-  {(bigint) 4 /* 77: TKwintern < TKwintern: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwintern < TKwintern: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -36403,7 +37889,7 @@ val_t NEW_TKwintern_parser___lexer___TKwintern___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 257;
+  fra.me.line = 250;
   fra.me.meth = LOCATE_NEW_TKwintern_parser___lexer___TKwintern___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36411,7 +37897,7 @@ val_t NEW_TKwintern_parser___lexer___TKwintern___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:257 */
+  /* parser/lexer.nit:250 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwintern();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwintern(fra.me.REG[1]);
   parser___lexer___TKwintern___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -36440,15 +37926,15 @@ val_t NEW_TKwintern_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwextern[78] = {
-  {(bigint) 3583 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwextern[79] = {
+  {(bigint) 4095 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwextern" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwextern < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwextern < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwextern < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwextern < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3583 /* 7: TKwextern < TKwextern: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwextern < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4095 /* 7: TKwextern < TKwextern: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -36516,9 +38002,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwextern[78] = {
   {(bigint) parser___lexer___TKwextern___parser_index},
   {(bigint) 1 /* 73: TKwextern < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwextern < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwextern < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwextern___init_tk},
-  {(bigint) 4 /* 77: TKwextern < TKwextern: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwextern < TKwextern: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -36568,7 +38055,7 @@ val_t NEW_TKwextern_parser___lexer___TKwextern___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 269;
+  fra.me.line = 262;
   fra.me.meth = LOCATE_NEW_TKwextern_parser___lexer___TKwextern___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36576,7 +38063,7 @@ val_t NEW_TKwextern_parser___lexer___TKwextern___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:269 */
+  /* parser/lexer.nit:262 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwextern();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwextern(fra.me.REG[1]);
   parser___lexer___TKwextern___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -36605,15 +38092,15 @@ val_t NEW_TKwextern_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwprotected[78] = {
-  {(bigint) 3487 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwprotected[79] = {
+  {(bigint) 3999 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwprotected" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwprotected < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwprotected < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwprotected < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwprotected < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3487 /* 7: TKwprotected < TKwprotected: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwprotected < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 3999 /* 7: TKwprotected < TKwprotected: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -36681,9 +38168,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwprotected[78] = {
   {(bigint) parser___lexer___TKwprotected___parser_index},
   {(bigint) 1 /* 73: TKwprotected < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwprotected < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwprotected < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwprotected___init_tk},
-  {(bigint) 4 /* 77: TKwprotected < TKwprotected: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwprotected < TKwprotected: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -36733,7 +38221,7 @@ val_t NEW_TKwprotected_parser___lexer___TKwprotected___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 281;
+  fra.me.line = 274;
   fra.me.meth = LOCATE_NEW_TKwprotected_parser___lexer___TKwprotected___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36741,7 +38229,7 @@ val_t NEW_TKwprotected_parser___lexer___TKwprotected___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:281 */
+  /* parser/lexer.nit:274 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwprotected();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwprotected(fra.me.REG[1]);
   parser___lexer___TKwprotected___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -36770,15 +38258,15 @@ val_t NEW_TKwprotected_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwprivate[78] = {
-  {(bigint) 3491 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwprivate[79] = {
+  {(bigint) 4003 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwprivate" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwprivate < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwprivate < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwprivate < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwprivate < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3491 /* 7: TKwprivate < TKwprivate: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwprivate < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4003 /* 7: TKwprivate < TKwprivate: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -36846,9 +38334,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwprivate[78] = {
   {(bigint) parser___lexer___TKwprivate___parser_index},
   {(bigint) 1 /* 73: TKwprivate < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwprivate < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwprivate < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwprivate___init_tk},
-  {(bigint) 4 /* 77: TKwprivate < TKwprivate: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwprivate < TKwprivate: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -36898,7 +38387,7 @@ val_t NEW_TKwprivate_parser___lexer___TKwprivate___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 293;
+  fra.me.line = 286;
   fra.me.meth = LOCATE_NEW_TKwprivate_parser___lexer___TKwprivate___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36906,7 +38395,7 @@ val_t NEW_TKwprivate_parser___lexer___TKwprivate___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:293 */
+  /* parser/lexer.nit:286 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwprivate();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwprivate(fra.me.REG[1]);
   parser___lexer___TKwprivate___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -36935,15 +38424,15 @@ val_t NEW_TKwprivate_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwintrude[78] = {
-  {(bigint) 3547 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwintrude[79] = {
+  {(bigint) 4059 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwintrude" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwintrude < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwintrude < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwintrude < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwintrude < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3547 /* 7: TKwintrude < TKwintrude: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwintrude < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4059 /* 7: TKwintrude < TKwintrude: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -37011,9 +38500,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwintrude[78] = {
   {(bigint) parser___lexer___TKwintrude___parser_index},
   {(bigint) 1 /* 73: TKwintrude < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwintrude < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwintrude < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwintrude___init_tk},
-  {(bigint) 4 /* 77: TKwintrude < TKwintrude: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwintrude < TKwintrude: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -37063,7 +38553,7 @@ val_t NEW_TKwintrude_parser___lexer___TKwintrude___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 305;
+  fra.me.line = 298;
   fra.me.meth = LOCATE_NEW_TKwintrude_parser___lexer___TKwintrude___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -37071,7 +38561,7 @@ val_t NEW_TKwintrude_parser___lexer___TKwintrude___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:305 */
+  /* parser/lexer.nit:298 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwintrude();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwintrude(fra.me.REG[1]);
   parser___lexer___TKwintrude___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -37100,15 +38590,15 @@ val_t NEW_TKwintrude_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwif[78] = {
-  {(bigint) 3571 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwif[79] = {
+  {(bigint) 4083 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwif" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwif < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwif < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwif < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwif < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3571 /* 7: TKwif < TKwif: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwif < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4083 /* 7: TKwif < TKwif: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -37176,9 +38666,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwif[78] = {
   {(bigint) parser___lexer___TKwif___parser_index},
   {(bigint) 1 /* 73: TKwif < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwif < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwif < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwif___init_tk},
-  {(bigint) 4 /* 77: TKwif < TKwif: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwif < TKwif: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -37228,7 +38719,7 @@ val_t NEW_TKwif_parser___lexer___TKwif___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 317;
+  fra.me.line = 310;
   fra.me.meth = LOCATE_NEW_TKwif_parser___lexer___TKwif___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -37236,7 +38727,7 @@ val_t NEW_TKwif_parser___lexer___TKwif___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:317 */
+  /* parser/lexer.nit:310 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwif();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwif(fra.me.REG[1]);
   parser___lexer___TKwif___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -37265,15 +38756,15 @@ val_t NEW_TKwif_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwthen[78] = {
-  {(bigint) 3459 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwthen[79] = {
+  {(bigint) 3975 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwthen" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwthen < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwthen < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwthen < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwthen < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3459 /* 7: TKwthen < TKwthen: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwthen < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 3975 /* 7: TKwthen < TKwthen: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -37341,9 +38832,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwthen[78] = {
   {(bigint) parser___lexer___TKwthen___parser_index},
   {(bigint) 1 /* 73: TKwthen < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwthen < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwthen < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwthen___init_tk},
-  {(bigint) 4 /* 77: TKwthen < TKwthen: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwthen < TKwthen: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -37393,7 +38885,7 @@ val_t NEW_TKwthen_parser___lexer___TKwthen___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 329;
+  fra.me.line = 322;
   fra.me.meth = LOCATE_NEW_TKwthen_parser___lexer___TKwthen___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -37401,7 +38893,7 @@ val_t NEW_TKwthen_parser___lexer___TKwthen___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:329 */
+  /* parser/lexer.nit:322 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwthen();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwthen(fra.me.REG[1]);
   parser___lexer___TKwthen___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -37430,15 +38922,15 @@ val_t NEW_TKwthen_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwelse[78] = {
-  {(bigint) 3595 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwelse[79] = {
+  {(bigint) 4107 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwelse" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwelse < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwelse < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwelse < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwelse < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3595 /* 7: TKwelse < TKwelse: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwelse < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4107 /* 7: TKwelse < TKwelse: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -37506,9 +38998,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwelse[78] = {
   {(bigint) parser___lexer___TKwelse___parser_index},
   {(bigint) 1 /* 73: TKwelse < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwelse < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwelse < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwelse___init_tk},
-  {(bigint) 4 /* 77: TKwelse < TKwelse: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwelse < TKwelse: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -37558,7 +39051,7 @@ val_t NEW_TKwelse_parser___lexer___TKwelse___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 341;
+  fra.me.line = 334;
   fra.me.meth = LOCATE_NEW_TKwelse_parser___lexer___TKwelse___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -37566,7 +39059,7 @@ val_t NEW_TKwelse_parser___lexer___TKwelse___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:341 */
+  /* parser/lexer.nit:334 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwelse();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwelse(fra.me.REG[1]);
   parser___lexer___TKwelse___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -37595,15 +39088,15 @@ val_t NEW_TKwelse_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwwhile[78] = {
-  {(bigint) 3443 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwwhile[79] = {
+  {(bigint) 3959 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwwhile" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwwhile < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwwhile < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwwhile < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwwhile < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3443 /* 7: TKwwhile < TKwwhile: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwwhile < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 3959 /* 7: TKwwhile < TKwwhile: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -37671,9 +39164,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwwhile[78] = {
   {(bigint) parser___lexer___TKwwhile___parser_index},
   {(bigint) 1 /* 73: TKwwhile < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwwhile < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwwhile < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwwhile___init_tk},
-  {(bigint) 4 /* 77: TKwwhile < TKwwhile: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwwhile < TKwwhile: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -37723,7 +39217,7 @@ val_t NEW_TKwwhile_parser___lexer___TKwwhile___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 353;
+  fra.me.line = 346;
   fra.me.meth = LOCATE_NEW_TKwwhile_parser___lexer___TKwwhile___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -37731,7 +39225,7 @@ val_t NEW_TKwwhile_parser___lexer___TKwwhile___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:353 */
+  /* parser/lexer.nit:346 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwwhile();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwwhile(fra.me.REG[1]);
   parser___lexer___TKwwhile___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -37760,15 +39254,15 @@ val_t NEW_TKwwhile_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwloop[78] = {
-  {(bigint) 3527 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwloop[79] = {
+  {(bigint) 4039 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwloop" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwloop < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwloop < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwloop < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwloop < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3527 /* 7: TKwloop < TKwloop: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwloop < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4039 /* 7: TKwloop < TKwloop: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -37836,9 +39330,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwloop[78] = {
   {(bigint) parser___lexer___TKwloop___parser_index},
   {(bigint) 1 /* 73: TKwloop < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwloop < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwloop < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwloop___init_tk},
-  {(bigint) 4 /* 77: TKwloop < TKwloop: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwloop < TKwloop: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -37888,7 +39383,7 @@ val_t NEW_TKwloop_parser___lexer___TKwloop___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 365;
+  fra.me.line = 358;
   fra.me.meth = LOCATE_NEW_TKwloop_parser___lexer___TKwloop___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -37896,7 +39391,7 @@ val_t NEW_TKwloop_parser___lexer___TKwloop___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:365 */
+  /* parser/lexer.nit:358 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwloop();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwloop(fra.me.REG[1]);
   parser___lexer___TKwloop___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -37925,15 +39420,15 @@ val_t NEW_TKwloop_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwfor[78] = {
-  {(bigint) 3575 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwfor[79] = {
+  {(bigint) 4087 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwfor" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwfor < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwfor < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwfor < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwfor < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3575 /* 7: TKwfor < TKwfor: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwfor < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4087 /* 7: TKwfor < TKwfor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -38001,9 +39496,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwfor[78] = {
   {(bigint) parser___lexer___TKwfor___parser_index},
   {(bigint) 1 /* 73: TKwfor < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwfor < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwfor < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwfor___init_tk},
-  {(bigint) 4 /* 77: TKwfor < TKwfor: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwfor < TKwfor: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -38053,7 +39549,7 @@ val_t NEW_TKwfor_parser___lexer___TKwfor___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 377;
+  fra.me.line = 370;
   fra.me.meth = LOCATE_NEW_TKwfor_parser___lexer___TKwfor___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38061,7 +39557,7 @@ val_t NEW_TKwfor_parser___lexer___TKwfor___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:377 */
+  /* parser/lexer.nit:370 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwfor();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwfor(fra.me.REG[1]);
   parser___lexer___TKwfor___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -38090,15 +39586,15 @@ val_t NEW_TKwfor_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwin[78] = {
-  {(bigint) 3563 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwin[79] = {
+  {(bigint) 4075 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwin" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwin < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwin < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwin < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwin < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3563 /* 7: TKwin < TKwin: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwin < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4075 /* 7: TKwin < TKwin: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -38166,9 +39662,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwin[78] = {
   {(bigint) parser___lexer___TKwin___parser_index},
   {(bigint) 1 /* 73: TKwin < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwin < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwin < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwin___init_tk},
-  {(bigint) 4 /* 77: TKwin < TKwin: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwin < TKwin: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -38218,7 +39715,7 @@ val_t NEW_TKwin_parser___lexer___TKwin___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 389;
+  fra.me.line = 382;
   fra.me.meth = LOCATE_NEW_TKwin_parser___lexer___TKwin___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38226,7 +39723,7 @@ val_t NEW_TKwin_parser___lexer___TKwin___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:389 */
+  /* parser/lexer.nit:382 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwin();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwin(fra.me.REG[1]);
   parser___lexer___TKwin___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -38255,15 +39752,15 @@ val_t NEW_TKwin_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwand[78] = {
-  {(bigint) 3623 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwand[79] = {
+  {(bigint) 4135 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwand" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwand < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwand < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwand < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwand < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3623 /* 7: TKwand < TKwand: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwand < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4135 /* 7: TKwand < TKwand: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -38331,9 +39828,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwand[78] = {
   {(bigint) parser___lexer___TKwand___parser_index},
   {(bigint) 1 /* 73: TKwand < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwand < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwand < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwand___init_tk},
-  {(bigint) 4 /* 77: TKwand < TKwand: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwand < TKwand: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -38383,7 +39881,7 @@ val_t NEW_TKwand_parser___lexer___TKwand___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 401;
+  fra.me.line = 394;
   fra.me.meth = LOCATE_NEW_TKwand_parser___lexer___TKwand___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38391,7 +39889,7 @@ val_t NEW_TKwand_parser___lexer___TKwand___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:401 */
+  /* parser/lexer.nit:394 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwand();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwand(fra.me.REG[1]);
   parser___lexer___TKwand___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -38420,15 +39918,15 @@ val_t NEW_TKwand_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwor[78] = {
-  {(bigint) 3495 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwor[79] = {
+  {(bigint) 4007 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwor" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwor < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwor < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwor < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwor < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3495 /* 7: TKwor < TKwor: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwor < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4007 /* 7: TKwor < TKwor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -38496,9 +39994,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwor[78] = {
   {(bigint) parser___lexer___TKwor___parser_index},
   {(bigint) 1 /* 73: TKwor < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwor < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwor < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwor___init_tk},
-  {(bigint) 4 /* 77: TKwor < TKwor: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwor < TKwor: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -38548,7 +40047,7 @@ val_t NEW_TKwor_parser___lexer___TKwor___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 413;
+  fra.me.line = 406;
   fra.me.meth = LOCATE_NEW_TKwor_parser___lexer___TKwor___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38556,7 +40055,7 @@ val_t NEW_TKwor_parser___lexer___TKwor___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:413 */
+  /* parser/lexer.nit:406 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwor();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwor(fra.me.REG[1]);
   parser___lexer___TKwor___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -38585,15 +40084,15 @@ val_t NEW_TKwor_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwnot[78] = {
-  {(bigint) 3511 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwnot[79] = {
+  {(bigint) 4023 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwnot" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwnot < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwnot < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwnot < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwnot < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3511 /* 7: TKwnot < TKwnot: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwnot < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4023 /* 7: TKwnot < TKwnot: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -38661,9 +40160,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwnot[78] = {
   {(bigint) parser___lexer___TKwnot___parser_index},
   {(bigint) 1 /* 73: TKwnot < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwnot < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwnot < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwnot___init_tk},
-  {(bigint) 4 /* 77: TKwnot < TKwnot: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwnot < TKwnot: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -38713,7 +40213,7 @@ val_t NEW_TKwnot_parser___lexer___TKwnot___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 425;
+  fra.me.line = 418;
   fra.me.meth = LOCATE_NEW_TKwnot_parser___lexer___TKwnot___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38721,7 +40221,7 @@ val_t NEW_TKwnot_parser___lexer___TKwnot___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:425 */
+  /* parser/lexer.nit:418 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwnot();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwnot(fra.me.REG[1]);
   parser___lexer___TKwnot___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -38750,15 +40250,15 @@ val_t NEW_TKwnot_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwreturn[78] = {
-  {(bigint) 3475 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwreturn[79] = {
+  {(bigint) 3987 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwreturn" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwreturn < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwreturn < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwreturn < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwreturn < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3475 /* 7: TKwreturn < TKwreturn: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwreturn < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 3987 /* 7: TKwreturn < TKwreturn: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -38826,9 +40326,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwreturn[78] = {
   {(bigint) parser___lexer___TKwreturn___parser_index},
   {(bigint) 1 /* 73: TKwreturn < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwreturn < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwreturn < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwreturn___init_tk},
-  {(bigint) 4 /* 77: TKwreturn < TKwreturn: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwreturn < TKwreturn: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -38878,7 +40379,7 @@ val_t NEW_TKwreturn_parser___lexer___TKwreturn___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 437;
+  fra.me.line = 430;
   fra.me.meth = LOCATE_NEW_TKwreturn_parser___lexer___TKwreturn___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38886,7 +40387,7 @@ val_t NEW_TKwreturn_parser___lexer___TKwreturn___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:437 */
+  /* parser/lexer.nit:430 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwreturn();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwreturn(fra.me.REG[1]);
   parser___lexer___TKwreturn___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -38915,15 +40416,15 @@ val_t NEW_TKwreturn_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwcontinue[78] = {
-  {(bigint) 3603 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwcontinue[79] = {
+  {(bigint) 4115 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwcontinue" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwcontinue < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwcontinue < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwcontinue < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwcontinue < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3603 /* 7: TKwcontinue < TKwcontinue: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwcontinue < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4115 /* 7: TKwcontinue < TKwcontinue: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -38991,9 +40492,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwcontinue[78] = {
   {(bigint) parser___lexer___TKwcontinue___parser_index},
   {(bigint) 1 /* 73: TKwcontinue < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwcontinue < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwcontinue < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwcontinue___init_tk},
-  {(bigint) 4 /* 77: TKwcontinue < TKwcontinue: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwcontinue < TKwcontinue: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -39043,7 +40545,7 @@ val_t NEW_TKwcontinue_parser___lexer___TKwcontinue___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 449;
+  fra.me.line = 442;
   fra.me.meth = LOCATE_NEW_TKwcontinue_parser___lexer___TKwcontinue___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39051,7 +40553,7 @@ val_t NEW_TKwcontinue_parser___lexer___TKwcontinue___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:449 */
+  /* parser/lexer.nit:442 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwcontinue();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwcontinue(fra.me.REG[1]);
   parser___lexer___TKwcontinue___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -39080,15 +40582,15 @@ val_t NEW_TKwcontinue_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwbreak[78] = {
-  {(bigint) 3611 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwbreak[79] = {
+  {(bigint) 4123 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwbreak" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwbreak < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwbreak < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwbreak < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwbreak < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3611 /* 7: TKwbreak < TKwbreak: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwbreak < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4123 /* 7: TKwbreak < TKwbreak: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -39156,9 +40658,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwbreak[78] = {
   {(bigint) parser___lexer___TKwbreak___parser_index},
   {(bigint) 1 /* 73: TKwbreak < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwbreak < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwbreak < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwbreak___init_tk},
-  {(bigint) 4 /* 77: TKwbreak < TKwbreak: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwbreak < TKwbreak: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -39208,7 +40711,7 @@ val_t NEW_TKwbreak_parser___lexer___TKwbreak___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 461;
+  fra.me.line = 454;
   fra.me.meth = LOCATE_NEW_TKwbreak_parser___lexer___TKwbreak___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39216,7 +40719,7 @@ val_t NEW_TKwbreak_parser___lexer___TKwbreak___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:461 */
+  /* parser/lexer.nit:454 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwbreak();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwbreak(fra.me.REG[1]);
   parser___lexer___TKwbreak___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -39245,15 +40748,15 @@ val_t NEW_TKwbreak_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwabort[78] = {
-  {(bigint) 3631 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwabort[79] = {
+  {(bigint) 4143 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwabort" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwabort < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwabort < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwabort < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwabort < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3631 /* 7: TKwabort < TKwabort: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwabort < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4143 /* 7: TKwabort < TKwabort: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -39321,9 +40824,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwabort[78] = {
   {(bigint) parser___lexer___TKwabort___parser_index},
   {(bigint) 1 /* 73: TKwabort < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwabort < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwabort < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwabort___init_tk},
-  {(bigint) 4 /* 77: TKwabort < TKwabort: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwabort < TKwabort: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -39373,7 +40877,7 @@ val_t NEW_TKwabort_parser___lexer___TKwabort___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 473;
+  fra.me.line = 466;
   fra.me.meth = LOCATE_NEW_TKwabort_parser___lexer___TKwabort___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39381,7 +40885,7 @@ val_t NEW_TKwabort_parser___lexer___TKwabort___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:473 */
+  /* parser/lexer.nit:466 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwabort();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwabort(fra.me.REG[1]);
   parser___lexer___TKwabort___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -39410,15 +40914,15 @@ val_t NEW_TKwabort_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwassert[78] = {
-  {(bigint) 3615 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwassert[79] = {
+  {(bigint) 4127 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwassert" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwassert < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwassert < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwassert < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwassert < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3615 /* 7: TKwassert < TKwassert: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwassert < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4127 /* 7: TKwassert < TKwassert: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -39486,9 +40990,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwassert[78] = {
   {(bigint) parser___lexer___TKwassert___parser_index},
   {(bigint) 1 /* 73: TKwassert < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwassert < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwassert < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwassert___init_tk},
-  {(bigint) 4 /* 77: TKwassert < TKwassert: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwassert < TKwassert: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -39538,7 +41043,7 @@ val_t NEW_TKwassert_parser___lexer___TKwassert___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 485;
+  fra.me.line = 478;
   fra.me.meth = LOCATE_NEW_TKwassert_parser___lexer___TKwassert___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39546,7 +41051,7 @@ val_t NEW_TKwassert_parser___lexer___TKwassert___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:485 */
+  /* parser/lexer.nit:478 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwassert();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwassert(fra.me.REG[1]);
   parser___lexer___TKwassert___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -39575,15 +41080,15 @@ val_t NEW_TKwassert_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwnew[78] = {
-  {(bigint) 3515 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwnew[79] = {
+  {(bigint) 4027 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwnew" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwnew < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwnew < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwnew < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwnew < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3515 /* 7: TKwnew < TKwnew: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwnew < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4027 /* 7: TKwnew < TKwnew: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -39651,9 +41156,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwnew[78] = {
   {(bigint) parser___lexer___TKwnew___parser_index},
   {(bigint) 1 /* 73: TKwnew < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwnew < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwnew < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwnew___init_tk},
-  {(bigint) 4 /* 77: TKwnew < TKwnew: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwnew < TKwnew: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -39703,7 +41209,7 @@ val_t NEW_TKwnew_parser___lexer___TKwnew___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 497;
+  fra.me.line = 490;
   fra.me.meth = LOCATE_NEW_TKwnew_parser___lexer___TKwnew___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39711,7 +41217,7 @@ val_t NEW_TKwnew_parser___lexer___TKwnew___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:497 */
+  /* parser/lexer.nit:490 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwnew();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwnew(fra.me.REG[1]);
   parser___lexer___TKwnew___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -39740,15 +41246,15 @@ val_t NEW_TKwnew_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwisa[78] = {
-  {(bigint) 3539 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwisa[79] = {
+  {(bigint) 4051 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwisa" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwisa < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwisa < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwisa < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwisa < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3539 /* 7: TKwisa < TKwisa: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwisa < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4051 /* 7: TKwisa < TKwisa: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -39816,9 +41322,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwisa[78] = {
   {(bigint) parser___lexer___TKwisa___parser_index},
   {(bigint) 1 /* 73: TKwisa < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwisa < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwisa < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwisa___init_tk},
-  {(bigint) 4 /* 77: TKwisa < TKwisa: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwisa < TKwisa: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -39868,7 +41375,7 @@ val_t NEW_TKwisa_parser___lexer___TKwisa___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 509;
+  fra.me.line = 502;
   fra.me.meth = LOCATE_NEW_TKwisa_parser___lexer___TKwisa___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39876,7 +41383,7 @@ val_t NEW_TKwisa_parser___lexer___TKwisa___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:509 */
+  /* parser/lexer.nit:502 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwisa();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwisa(fra.me.REG[1]);
   parser___lexer___TKwisa___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -39905,15 +41412,15 @@ val_t NEW_TKwisa_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwonce[78] = {
-  {(bigint) 3499 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwonce[79] = {
+  {(bigint) 4011 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwonce" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwonce < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwonce < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwonce < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwonce < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3499 /* 7: TKwonce < TKwonce: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwonce < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4011 /* 7: TKwonce < TKwonce: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -39981,9 +41488,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwonce[78] = {
   {(bigint) parser___lexer___TKwonce___parser_index},
   {(bigint) 1 /* 73: TKwonce < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwonce < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwonce < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwonce___init_tk},
-  {(bigint) 4 /* 77: TKwonce < TKwonce: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwonce < TKwonce: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -40033,7 +41541,7 @@ val_t NEW_TKwonce_parser___lexer___TKwonce___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 521;
+  fra.me.line = 514;
   fra.me.meth = LOCATE_NEW_TKwonce_parser___lexer___TKwonce___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40041,7 +41549,7 @@ val_t NEW_TKwonce_parser___lexer___TKwonce___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:521 */
+  /* parser/lexer.nit:514 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwonce();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwonce(fra.me.REG[1]);
   parser___lexer___TKwonce___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -40070,15 +41578,15 @@ val_t NEW_TKwonce_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwsuper[78] = {
-  {(bigint) 3463 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwsuper[79] = {
+  {(bigint) 3979 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwsuper" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwsuper < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwsuper < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwsuper < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwsuper < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3463 /* 7: TKwsuper < TKwsuper: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwsuper < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 3979 /* 7: TKwsuper < TKwsuper: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -40146,9 +41654,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwsuper[78] = {
   {(bigint) parser___lexer___TKwsuper___parser_index},
   {(bigint) 1 /* 73: TKwsuper < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwsuper < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwsuper < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwsuper___init_tk},
-  {(bigint) 4 /* 77: TKwsuper < TKwsuper: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwsuper < TKwsuper: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -40198,7 +41707,7 @@ val_t NEW_TKwsuper_parser___lexer___TKwsuper___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 533;
+  fra.me.line = 526;
   fra.me.meth = LOCATE_NEW_TKwsuper_parser___lexer___TKwsuper___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40206,7 +41715,7 @@ val_t NEW_TKwsuper_parser___lexer___TKwsuper___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:533 */
+  /* parser/lexer.nit:526 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwsuper();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwsuper(fra.me.REG[1]);
   parser___lexer___TKwsuper___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -40235,15 +41744,15 @@ val_t NEW_TKwsuper_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwself[78] = {
-  {(bigint) 3471 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwself[79] = {
+  {(bigint) 3983 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwself" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwself < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwself < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwself < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwself < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3471 /* 7: TKwself < TKwself: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwself < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 3983 /* 7: TKwself < TKwself: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -40311,9 +41820,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwself[78] = {
   {(bigint) parser___lexer___TKwself___parser_index},
   {(bigint) 1 /* 73: TKwself < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwself < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwself < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwself___init_tk},
-  {(bigint) 4 /* 77: TKwself < TKwself: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwself < TKwself: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -40363,7 +41873,7 @@ val_t NEW_TKwself_parser___lexer___TKwself___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 545;
+  fra.me.line = 538;
   fra.me.meth = LOCATE_NEW_TKwself_parser___lexer___TKwself___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40371,7 +41881,7 @@ val_t NEW_TKwself_parser___lexer___TKwself___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:545 */
+  /* parser/lexer.nit:538 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwself();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwself(fra.me.REG[1]);
   parser___lexer___TKwself___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -40400,15 +41910,15 @@ val_t NEW_TKwself_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwtrue[78] = {
-  {(bigint) 3455 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwtrue[79] = {
+  {(bigint) 3971 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwtrue" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwtrue < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwtrue < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwtrue < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwtrue < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3455 /* 7: TKwtrue < TKwtrue: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwtrue < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 3971 /* 7: TKwtrue < TKwtrue: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -40476,9 +41986,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwtrue[78] = {
   {(bigint) parser___lexer___TKwtrue___parser_index},
   {(bigint) 1 /* 73: TKwtrue < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwtrue < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwtrue < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwtrue___init_tk},
-  {(bigint) 4 /* 77: TKwtrue < TKwtrue: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwtrue < TKwtrue: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -40528,7 +42039,7 @@ val_t NEW_TKwtrue_parser___lexer___TKwtrue___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 557;
+  fra.me.line = 550;
   fra.me.meth = LOCATE_NEW_TKwtrue_parser___lexer___TKwtrue___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40536,7 +42047,7 @@ val_t NEW_TKwtrue_parser___lexer___TKwtrue___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:557 */
+  /* parser/lexer.nit:550 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwtrue();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwtrue(fra.me.REG[1]);
   parser___lexer___TKwtrue___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -40565,15 +42076,15 @@ val_t NEW_TKwtrue_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwfalse[78] = {
-  {(bigint) 3579 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwfalse[79] = {
+  {(bigint) 4091 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwfalse" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwfalse < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwfalse < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwfalse < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwfalse < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3579 /* 7: TKwfalse < TKwfalse: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwfalse < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4091 /* 7: TKwfalse < TKwfalse: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -40641,9 +42152,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwfalse[78] = {
   {(bigint) parser___lexer___TKwfalse___parser_index},
   {(bigint) 1 /* 73: TKwfalse < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwfalse < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwfalse < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwfalse___init_tk},
-  {(bigint) 4 /* 77: TKwfalse < TKwfalse: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwfalse < TKwfalse: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -40693,7 +42205,7 @@ val_t NEW_TKwfalse_parser___lexer___TKwfalse___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 569;
+  fra.me.line = 562;
   fra.me.meth = LOCATE_NEW_TKwfalse_parser___lexer___TKwfalse___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40701,7 +42213,7 @@ val_t NEW_TKwfalse_parser___lexer___TKwfalse___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:569 */
+  /* parser/lexer.nit:562 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwfalse();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwfalse(fra.me.REG[1]);
   parser___lexer___TKwfalse___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -40730,15 +42242,15 @@ val_t NEW_TKwfalse_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwnull[78] = {
-  {(bigint) 3507 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwnull[79] = {
+  {(bigint) 4019 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwnull" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwnull < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwnull < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwnull < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwnull < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3507 /* 7: TKwnull < TKwnull: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwnull < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4019 /* 7: TKwnull < TKwnull: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -40806,9 +42318,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwnull[78] = {
   {(bigint) parser___lexer___TKwnull___parser_index},
   {(bigint) 1 /* 73: TKwnull < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwnull < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwnull < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwnull___init_tk},
-  {(bigint) 4 /* 77: TKwnull < TKwnull: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwnull < TKwnull: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -40858,7 +42371,7 @@ val_t NEW_TKwnull_parser___lexer___TKwnull___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 581;
+  fra.me.line = 574;
   fra.me.meth = LOCATE_NEW_TKwnull_parser___lexer___TKwnull___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40866,7 +42379,7 @@ val_t NEW_TKwnull_parser___lexer___TKwnull___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:581 */
+  /* parser/lexer.nit:574 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwnull();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwnull(fra.me.REG[1]);
   parser___lexer___TKwnull___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -40895,15 +42408,15 @@ val_t NEW_TKwnull_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwas[78] = {
-  {(bigint) 3619 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwas[79] = {
+  {(bigint) 4131 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwas" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwas < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwas < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwas < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwas < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3619 /* 7: TKwas < TKwas: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwas < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4131 /* 7: TKwas < TKwas: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -40971,9 +42484,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwas[78] = {
   {(bigint) parser___lexer___TKwas___parser_index},
   {(bigint) 1 /* 73: TKwas < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwas < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwas < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwas___init_tk},
-  {(bigint) 4 /* 77: TKwas < TKwas: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwas < TKwas: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -41023,7 +42537,7 @@ val_t NEW_TKwas_parser___lexer___TKwas___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 593;
+  fra.me.line = 586;
   fra.me.meth = LOCATE_NEW_TKwas_parser___lexer___TKwas___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -41031,7 +42545,7 @@ val_t NEW_TKwas_parser___lexer___TKwas___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:593 */
+  /* parser/lexer.nit:586 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwas();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwas(fra.me.REG[1]);
   parser___lexer___TKwas___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -41060,15 +42574,15 @@ val_t NEW_TKwas_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwnullable[78] = {
-  {(bigint) 3503 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwnullable[79] = {
+  {(bigint) 4015 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwnullable" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwnullable < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwnullable < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwnullable < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwnullable < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3503 /* 7: TKwnullable < TKwnullable: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwnullable < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4015 /* 7: TKwnullable < TKwnullable: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -41136,9 +42650,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwnullable[78] = {
   {(bigint) parser___lexer___TKwnullable___parser_index},
   {(bigint) 1 /* 73: TKwnullable < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwnullable < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwnullable < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwnullable___init_tk},
-  {(bigint) 4 /* 77: TKwnullable < TKwnullable: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwnullable < TKwnullable: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -41188,7 +42703,7 @@ val_t NEW_TKwnullable_parser___lexer___TKwnullable___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 605;
+  fra.me.line = 598;
   fra.me.meth = LOCATE_NEW_TKwnullable_parser___lexer___TKwnullable___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -41196,7 +42711,7 @@ val_t NEW_TKwnullable_parser___lexer___TKwnullable___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:605 */
+  /* parser/lexer.nit:598 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwnullable();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwnullable(fra.me.REG[1]);
   parser___lexer___TKwnullable___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -41225,15 +42740,15 @@ val_t NEW_TKwnullable_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwisset[78] = {
-  {(bigint) 3535 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwisset[79] = {
+  {(bigint) 4047 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwisset" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwisset < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwisset < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwisset < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwisset < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3535 /* 7: TKwisset < TKwisset: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwisset < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4047 /* 7: TKwisset < TKwisset: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -41301,9 +42816,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwisset[78] = {
   {(bigint) parser___lexer___TKwisset___parser_index},
   {(bigint) 1 /* 73: TKwisset < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwisset < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwisset < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwisset___init_tk},
-  {(bigint) 4 /* 77: TKwisset < TKwisset: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwisset < TKwisset: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -41353,7 +42869,7 @@ val_t NEW_TKwisset_parser___lexer___TKwisset___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 617;
+  fra.me.line = 610;
   fra.me.meth = LOCATE_NEW_TKwisset_parser___lexer___TKwisset___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -41361,7 +42877,7 @@ val_t NEW_TKwisset_parser___lexer___TKwisset___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:617 */
+  /* parser/lexer.nit:610 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwisset();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwisset(fra.me.REG[1]);
   parser___lexer___TKwisset___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -41390,15 +42906,15 @@ val_t NEW_TKwisset_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwlabel[78] = {
-  {(bigint) 3531 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwlabel[79] = {
+  {(bigint) 4043 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwlabel" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwlabel < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwlabel < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwlabel < Token: superclass typecheck marker */},
-  {(bigint) 2843 /* 6: TKwlabel < TokenKeyword: superclass typecheck marker */},
-  {(bigint) 3531 /* 7: TKwlabel < TKwlabel: superclass typecheck marker */},
+  {(bigint) 3339 /* 6: TKwlabel < TokenKeyword: superclass typecheck marker */},
+  {(bigint) 4043 /* 7: TKwlabel < TKwlabel: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -41466,9 +42982,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwlabel[78] = {
   {(bigint) parser___lexer___TKwlabel___parser_index},
   {(bigint) 1 /* 73: TKwlabel < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TKwlabel < TokenKeyword: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TKwlabel < TokenKeyword: superclass init_table position */},
   {(bigint) parser___lexer___TKwlabel___init_tk},
-  {(bigint) 4 /* 77: TKwlabel < TKwlabel: superclass init_table position */},
+  {(bigint) 4 /* 78: TKwlabel < TKwlabel: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -41518,7 +43035,7 @@ val_t NEW_TKwlabel_parser___lexer___TKwlabel___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 629;
+  fra.me.line = 622;
   fra.me.meth = LOCATE_NEW_TKwlabel_parser___lexer___TKwlabel___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -41526,7 +43043,7 @@ val_t NEW_TKwlabel_parser___lexer___TKwlabel___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:629 */
+  /* parser/lexer.nit:622 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwlabel();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwlabel(fra.me.REG[1]);
   parser___lexer___TKwlabel___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -41555,14 +43072,14 @@ val_t NEW_TKwlabel_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TKwdebug[77] = {
-  {(bigint) 2895 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TKwdebug[78] = {
+  {(bigint) 3391 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TKwdebug" /* 2: Class Name */},
   {(bigint) 3 /* 3: TKwdebug < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TKwdebug < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TKwdebug < Token: superclass typecheck marker */},
-  {(bigint) 2895 /* 6: TKwdebug < TKwdebug: superclass typecheck marker */},
+  {(bigint) 3391 /* 6: TKwdebug < TKwdebug: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -41631,8 +43148,9 @@ const classtable_elt_t VFT_parser___parser_nodes___TKwdebug[77] = {
   {(bigint) parser___lexer___TKwdebug___parser_index},
   {(bigint) 0 /* 73: TKwdebug < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
+  {(bigint) parser___lexer___Token___text__eq},
   {(bigint) parser___lexer___TKwdebug___init_tk},
-  {(bigint) 3 /* 76: TKwdebug < TKwdebug: superclass init_table position */},
+  {(bigint) 3 /* 77: TKwdebug < TKwdebug: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -41682,7 +43200,7 @@ val_t NEW_TKwdebug_parser___lexer___TKwdebug___init_tk(val_t p0){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 641;
+  fra.me.line = 634;
   fra.me.meth = LOCATE_NEW_TKwdebug_parser___lexer___TKwdebug___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -41690,7 +43208,7 @@ val_t NEW_TKwdebug_parser___lexer___TKwdebug___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:641 */
+  /* parser/lexer.nit:634 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TKwdebug();
   INIT_ATTRIBUTES__parser___parser_nodes___TKwdebug(fra.me.REG[1]);
   parser___lexer___TKwdebug___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -41719,14 +43237,14 @@ val_t NEW_TKwdebug_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TOpar[77] = {
-  {(bigint) 2887 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TOpar[78] = {
+  {(bigint) 3383 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TOpar" /* 2: Class Name */},
   {(bigint) 3 /* 3: TOpar < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TOpar < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TOpar < Token: superclass typecheck marker */},
-  {(bigint) 2887 /* 6: TOpar < TOpar: superclass typecheck marker */},
+  {(bigint) 3383 /* 6: TOpar < TOpar: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -41795,8 +43313,9 @@ const classtable_elt_t VFT_parser___parser_nodes___TOpar[77] = {
   {(bigint) parser___lexer___TOpar___parser_index},
   {(bigint) 0 /* 73: TOpar < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
+  {(bigint) parser___lexer___Token___text__eq},
   {(bigint) parser___lexer___TOpar___init_tk},
-  {(bigint) 3 /* 76: TOpar < TOpar: superclass init_table position */},
+  {(bigint) 3 /* 77: TOpar < TOpar: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -41846,7 +43365,7 @@ val_t NEW_TOpar_parser___lexer___TOpar___init_tk(val_t p0){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 653;
+  fra.me.line = 646;
   fra.me.meth = LOCATE_NEW_TOpar_parser___lexer___TOpar___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -41854,7 +43373,7 @@ val_t NEW_TOpar_parser___lexer___TOpar___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:653 */
+  /* parser/lexer.nit:646 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TOpar();
   INIT_ATTRIBUTES__parser___parser_nodes___TOpar(fra.me.REG[1]);
   parser___lexer___TOpar___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -41883,14 +43402,14 @@ val_t NEW_TOpar_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TCpar[77] = {
-  {(bigint) 2915 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TCpar[78] = {
+  {(bigint) 3411 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TCpar" /* 2: Class Name */},
   {(bigint) 3 /* 3: TCpar < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TCpar < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TCpar < Token: superclass typecheck marker */},
-  {(bigint) 2915 /* 6: TCpar < TCpar: superclass typecheck marker */},
+  {(bigint) 3411 /* 6: TCpar < TCpar: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -41959,8 +43478,9 @@ const classtable_elt_t VFT_parser___parser_nodes___TCpar[77] = {
   {(bigint) parser___lexer___TCpar___parser_index},
   {(bigint) 0 /* 73: TCpar < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
+  {(bigint) parser___lexer___Token___text__eq},
   {(bigint) parser___lexer___TCpar___init_tk},
-  {(bigint) 3 /* 76: TCpar < TCpar: superclass init_table position */},
+  {(bigint) 3 /* 77: TCpar < TCpar: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -42010,7 +43530,7 @@ val_t NEW_TCpar_parser___lexer___TCpar___init_tk(val_t p0){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 665;
+  fra.me.line = 658;
   fra.me.meth = LOCATE_NEW_TCpar_parser___lexer___TCpar___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -42018,7 +43538,7 @@ val_t NEW_TCpar_parser___lexer___TCpar___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:665 */
+  /* parser/lexer.nit:658 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TCpar();
   INIT_ATTRIBUTES__parser___parser_nodes___TCpar(fra.me.REG[1]);
   parser___lexer___TCpar___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -42047,14 +43567,14 @@ val_t NEW_TCpar_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TObra[77] = {
-  {(bigint) 2891 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TObra[78] = {
+  {(bigint) 3387 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TObra" /* 2: Class Name */},
   {(bigint) 3 /* 3: TObra < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TObra < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TObra < Token: superclass typecheck marker */},
-  {(bigint) 2891 /* 6: TObra < TObra: superclass typecheck marker */},
+  {(bigint) 3387 /* 6: TObra < TObra: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -42123,8 +43643,9 @@ const classtable_elt_t VFT_parser___parser_nodes___TObra[77] = {
   {(bigint) parser___lexer___TObra___parser_index},
   {(bigint) 0 /* 73: TObra < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
+  {(bigint) parser___lexer___Token___text__eq},
   {(bigint) parser___lexer___TObra___init_tk},
-  {(bigint) 3 /* 76: TObra < TObra: superclass init_table position */},
+  {(bigint) 3 /* 77: TObra < TObra: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -42174,7 +43695,7 @@ val_t NEW_TObra_parser___lexer___TObra___init_tk(val_t p0){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 677;
+  fra.me.line = 670;
   fra.me.meth = LOCATE_NEW_TObra_parser___lexer___TObra___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -42182,7 +43703,7 @@ val_t NEW_TObra_parser___lexer___TObra___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:677 */
+  /* parser/lexer.nit:670 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TObra();
   INIT_ATTRIBUTES__parser___parser_nodes___TObra(fra.me.REG[1]);
   parser___lexer___TObra___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -42211,14 +43732,14 @@ val_t NEW_TObra_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TCbra[77] = {
-  {(bigint) 2935 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TCbra[78] = {
+  {(bigint) 3431 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TCbra" /* 2: Class Name */},
   {(bigint) 3 /* 3: TCbra < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TCbra < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TCbra < Token: superclass typecheck marker */},
-  {(bigint) 2935 /* 6: TCbra < TCbra: superclass typecheck marker */},
+  {(bigint) 3431 /* 6: TCbra < TCbra: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -42287,8 +43808,9 @@ const classtable_elt_t VFT_parser___parser_nodes___TCbra[77] = {
   {(bigint) parser___lexer___TCbra___parser_index},
   {(bigint) 0 /* 73: TCbra < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
+  {(bigint) parser___lexer___Token___text__eq},
   {(bigint) parser___lexer___TCbra___init_tk},
-  {(bigint) 3 /* 76: TCbra < TCbra: superclass init_table position */},
+  {(bigint) 3 /* 77: TCbra < TCbra: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -42338,7 +43860,7 @@ val_t NEW_TCbra_parser___lexer___TCbra___init_tk(val_t p0){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 689;
+  fra.me.line = 682;
   fra.me.meth = LOCATE_NEW_TCbra_parser___lexer___TCbra___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -42346,7 +43868,7 @@ val_t NEW_TCbra_parser___lexer___TCbra___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:689 */
+  /* parser/lexer.nit:682 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TCbra();
   INIT_ATTRIBUTES__parser___parser_nodes___TCbra(fra.me.REG[1]);
   parser___lexer___TCbra___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -42375,14 +43897,14 @@ val_t NEW_TCbra_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TComma[77] = {
-  {(bigint) 2923 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TComma[78] = {
+  {(bigint) 3419 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TComma" /* 2: Class Name */},
   {(bigint) 3 /* 3: TComma < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TComma < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TComma < Token: superclass typecheck marker */},
-  {(bigint) 2923 /* 6: TComma < TComma: superclass typecheck marker */},
+  {(bigint) 3419 /* 6: TComma < TComma: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -42451,8 +43973,9 @@ const classtable_elt_t VFT_parser___parser_nodes___TComma[77] = {
   {(bigint) parser___lexer___TComma___parser_index},
   {(bigint) 0 /* 73: TComma < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
+  {(bigint) parser___lexer___Token___text__eq},
   {(bigint) parser___lexer___TComma___init_tk},
-  {(bigint) 3 /* 76: TComma < TComma: superclass init_table position */},
+  {(bigint) 3 /* 77: TComma < TComma: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -42502,7 +44025,7 @@ val_t NEW_TComma_parser___lexer___TComma___init_tk(val_t p0){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 701;
+  fra.me.line = 694;
   fra.me.meth = LOCATE_NEW_TComma_parser___lexer___TComma___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -42510,7 +44033,7 @@ val_t NEW_TComma_parser___lexer___TComma___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:701 */
+  /* parser/lexer.nit:694 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TComma();
   INIT_ATTRIBUTES__parser___parser_nodes___TComma(fra.me.REG[1]);
   parser___lexer___TComma___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -42539,14 +44062,14 @@ val_t NEW_TComma_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TColumn[77] = {
-  {(bigint) 2927 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TColumn[78] = {
+  {(bigint) 3423 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TColumn" /* 2: Class Name */},
   {(bigint) 3 /* 3: TColumn < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TColumn < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TColumn < Token: superclass typecheck marker */},
-  {(bigint) 2927 /* 6: TColumn < TColumn: superclass typecheck marker */},
+  {(bigint) 3423 /* 6: TColumn < TColumn: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -42615,8 +44138,9 @@ const classtable_elt_t VFT_parser___parser_nodes___TColumn[77] = {
   {(bigint) parser___lexer___TColumn___parser_index},
   {(bigint) 0 /* 73: TColumn < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
+  {(bigint) parser___lexer___Token___text__eq},
   {(bigint) parser___lexer___TColumn___init_tk},
-  {(bigint) 3 /* 76: TColumn < TColumn: superclass init_table position */},
+  {(bigint) 3 /* 77: TColumn < TColumn: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -42666,7 +44190,7 @@ val_t NEW_TColumn_parser___lexer___TColumn___init_tk(val_t p0){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 713;
+  fra.me.line = 706;
   fra.me.meth = LOCATE_NEW_TColumn_parser___lexer___TColumn___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -42674,7 +44198,7 @@ val_t NEW_TColumn_parser___lexer___TColumn___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:713 */
+  /* parser/lexer.nit:706 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TColumn();
   INIT_ATTRIBUTES__parser___parser_nodes___TColumn(fra.me.REG[1]);
   parser___lexer___TColumn___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -42703,14 +44227,14 @@ val_t NEW_TColumn_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TQuad[77] = {
-  {(bigint) 2883 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TQuad[78] = {
+  {(bigint) 3379 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TQuad" /* 2: Class Name */},
   {(bigint) 3 /* 3: TQuad < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TQuad < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TQuad < Token: superclass typecheck marker */},
-  {(bigint) 2883 /* 6: TQuad < TQuad: superclass typecheck marker */},
+  {(bigint) 3379 /* 6: TQuad < TQuad: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -42779,8 +44303,9 @@ const classtable_elt_t VFT_parser___parser_nodes___TQuad[77] = {
   {(bigint) parser___lexer___TQuad___parser_index},
   {(bigint) 0 /* 73: TQuad < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
+  {(bigint) parser___lexer___Token___text__eq},
   {(bigint) parser___lexer___TQuad___init_tk},
-  {(bigint) 3 /* 76: TQuad < TQuad: superclass init_table position */},
+  {(bigint) 3 /* 77: TQuad < TQuad: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -42830,7 +44355,7 @@ val_t NEW_TQuad_parser___lexer___TQuad___init_tk(val_t p0){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 725;
+  fra.me.line = 718;
   fra.me.meth = LOCATE_NEW_TQuad_parser___lexer___TQuad___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -42838,7 +44363,7 @@ val_t NEW_TQuad_parser___lexer___TQuad___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:725 */
+  /* parser/lexer.nit:718 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TQuad();
   INIT_ATTRIBUTES__parser___parser_nodes___TQuad(fra.me.REG[1]);
   parser___lexer___TQuad___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -42867,14 +44392,14 @@ val_t NEW_TQuad_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TAssign[77] = {
-  {(bigint) 2951 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TAssign[78] = {
+  {(bigint) 3451 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TAssign" /* 2: Class Name */},
   {(bigint) 3 /* 3: TAssign < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TAssign < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TAssign < Token: superclass typecheck marker */},
-  {(bigint) 2951 /* 6: TAssign < TAssign: superclass typecheck marker */},
+  {(bigint) 3451 /* 6: TAssign < TAssign: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -42943,8 +44468,9 @@ const classtable_elt_t VFT_parser___parser_nodes___TAssign[77] = {
   {(bigint) parser___lexer___TAssign___parser_index},
   {(bigint) 0 /* 73: TAssign < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
+  {(bigint) parser___lexer___Token___text__eq},
   {(bigint) parser___lexer___TAssign___init_tk},
-  {(bigint) 3 /* 76: TAssign < TAssign: superclass init_table position */},
+  {(bigint) 3 /* 77: TAssign < TAssign: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -42994,7 +44520,7 @@ val_t NEW_TAssign_parser___lexer___TAssign___init_tk(val_t p0){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 737;
+  fra.me.line = 730;
   fra.me.meth = LOCATE_NEW_TAssign_parser___lexer___TAssign___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -43002,7 +44528,7 @@ val_t NEW_TAssign_parser___lexer___TAssign___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:737 */
+  /* parser/lexer.nit:730 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TAssign();
   INIT_ATTRIBUTES__parser___parser_nodes___TAssign(fra.me.REG[1]);
   parser___lexer___TAssign___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -43031,15 +44557,15 @@ val_t NEW_TAssign_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TPluseq[78] = {
-  {(bigint) 3395 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TPluseq[79] = {
+  {(bigint) 3911 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TPluseq" /* 2: Class Name */},
   {(bigint) 3 /* 3: TPluseq < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TPluseq < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TPluseq < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TPluseq < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3395 /* 7: TPluseq < TPluseq: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TPluseq < TokenOperator: superclass typecheck marker */},
+  {(bigint) 3911 /* 7: TPluseq < TPluseq: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -43107,9 +44633,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TPluseq[78] = {
   {(bigint) parser___lexer___TPluseq___parser_index},
   {(bigint) 1 /* 73: TPluseq < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TPluseq < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TPluseq < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TPluseq___init_tk},
-  {(bigint) 4 /* 77: TPluseq < TPluseq: superclass init_table position */},
+  {(bigint) 4 /* 78: TPluseq < TPluseq: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -43159,7 +44686,7 @@ val_t NEW_TPluseq_parser___lexer___TPluseq___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 749;
+  fra.me.line = 742;
   fra.me.meth = LOCATE_NEW_TPluseq_parser___lexer___TPluseq___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -43167,7 +44694,7 @@ val_t NEW_TPluseq_parser___lexer___TPluseq___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:749 */
+  /* parser/lexer.nit:742 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TPluseq();
   INIT_ATTRIBUTES__parser___parser_nodes___TPluseq(fra.me.REG[1]);
   parser___lexer___TPluseq___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -43196,15 +44723,15 @@ val_t NEW_TPluseq_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TMinuseq[78] = {
-  {(bigint) 3415 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TMinuseq[79] = {
+  {(bigint) 3931 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TMinuseq" /* 2: Class Name */},
   {(bigint) 3 /* 3: TMinuseq < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TMinuseq < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TMinuseq < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TMinuseq < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3415 /* 7: TMinuseq < TMinuseq: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TMinuseq < TokenOperator: superclass typecheck marker */},
+  {(bigint) 3931 /* 7: TMinuseq < TMinuseq: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -43272,9 +44799,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TMinuseq[78] = {
   {(bigint) parser___lexer___TMinuseq___parser_index},
   {(bigint) 1 /* 73: TMinuseq < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TMinuseq < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TMinuseq < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TMinuseq___init_tk},
-  {(bigint) 4 /* 77: TMinuseq < TMinuseq: superclass init_table position */},
+  {(bigint) 4 /* 78: TMinuseq < TMinuseq: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -43324,7 +44852,7 @@ val_t NEW_TMinuseq_parser___lexer___TMinuseq___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 761;
+  fra.me.line = 754;
   fra.me.meth = LOCATE_NEW_TMinuseq_parser___lexer___TMinuseq___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -43332,7 +44860,7 @@ val_t NEW_TMinuseq_parser___lexer___TMinuseq___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:761 */
+  /* parser/lexer.nit:754 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TMinuseq();
   INIT_ATTRIBUTES__parser___parser_nodes___TMinuseq(fra.me.REG[1]);
   parser___lexer___TMinuseq___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -43361,15 +44889,15 @@ val_t NEW_TMinuseq_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TDotdotdot[78] = {
-  {(bigint) 3655 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TDotdotdot[79] = {
+  {(bigint) 4167 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TDotdotdot" /* 2: Class Name */},
   {(bigint) 3 /* 3: TDotdotdot < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TDotdotdot < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TDotdotdot < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TDotdotdot < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3655 /* 7: TDotdotdot < TDotdotdot: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TDotdotdot < TokenOperator: superclass typecheck marker */},
+  {(bigint) 4167 /* 7: TDotdotdot < TDotdotdot: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -43437,9 +44965,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TDotdotdot[78] = {
   {(bigint) parser___lexer___TDotdotdot___parser_index},
   {(bigint) 1 /* 73: TDotdotdot < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TDotdotdot < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TDotdotdot < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TDotdotdot___init_tk},
-  {(bigint) 4 /* 77: TDotdotdot < TDotdotdot: superclass init_table position */},
+  {(bigint) 4 /* 78: TDotdotdot < TDotdotdot: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -43489,7 +45018,7 @@ val_t NEW_TDotdotdot_parser___lexer___TDotdotdot___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 773;
+  fra.me.line = 766;
   fra.me.meth = LOCATE_NEW_TDotdotdot_parser___lexer___TDotdotdot___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -43497,7 +45026,7 @@ val_t NEW_TDotdotdot_parser___lexer___TDotdotdot___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:773 */
+  /* parser/lexer.nit:766 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TDotdotdot();
   INIT_ATTRIBUTES__parser___parser_nodes___TDotdotdot(fra.me.REG[1]);
   parser___lexer___TDotdotdot___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -43526,15 +45055,15 @@ val_t NEW_TDotdotdot_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TDotdot[78] = {
-  {(bigint) 3659 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TDotdot[79] = {
+  {(bigint) 4171 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TDotdot" /* 2: Class Name */},
   {(bigint) 3 /* 3: TDotdot < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TDotdot < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TDotdot < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TDotdot < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3659 /* 7: TDotdot < TDotdot: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TDotdot < TokenOperator: superclass typecheck marker */},
+  {(bigint) 4171 /* 7: TDotdot < TDotdot: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -43602,9 +45131,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TDotdot[78] = {
   {(bigint) parser___lexer___TDotdot___parser_index},
   {(bigint) 1 /* 73: TDotdot < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TDotdot < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TDotdot < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TDotdot___init_tk},
-  {(bigint) 4 /* 77: TDotdot < TDotdot: superclass init_table position */},
+  {(bigint) 4 /* 78: TDotdot < TDotdot: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -43654,7 +45184,7 @@ val_t NEW_TDotdot_parser___lexer___TDotdot___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 785;
+  fra.me.line = 778;
   fra.me.meth = LOCATE_NEW_TDotdot_parser___lexer___TDotdot___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -43662,7 +45192,7 @@ val_t NEW_TDotdot_parser___lexer___TDotdot___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:785 */
+  /* parser/lexer.nit:778 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TDotdot();
   INIT_ATTRIBUTES__parser___parser_nodes___TDotdot(fra.me.REG[1]);
   parser___lexer___TDotdot___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -43691,15 +45221,15 @@ val_t NEW_TDotdot_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TDot[78] = {
-  {(bigint) 3663 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TDot[79] = {
+  {(bigint) 4175 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TDot" /* 2: Class Name */},
   {(bigint) 3 /* 3: TDot < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TDot < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TDot < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TDot < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3663 /* 7: TDot < TDot: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TDot < TokenOperator: superclass typecheck marker */},
+  {(bigint) 4175 /* 7: TDot < TDot: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -43767,9 +45297,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TDot[78] = {
   {(bigint) parser___lexer___TDot___parser_index},
   {(bigint) 1 /* 73: TDot < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TDot < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TDot < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TDot___init_tk},
-  {(bigint) 4 /* 77: TDot < TDot: superclass init_table position */},
+  {(bigint) 4 /* 78: TDot < TDot: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -43819,7 +45350,7 @@ val_t NEW_TDot_parser___lexer___TDot___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 797;
+  fra.me.line = 790;
   fra.me.meth = LOCATE_NEW_TDot_parser___lexer___TDot___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -43827,7 +45358,7 @@ val_t NEW_TDot_parser___lexer___TDot___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:797 */
+  /* parser/lexer.nit:790 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TDot();
   INIT_ATTRIBUTES__parser___parser_nodes___TDot(fra.me.REG[1]);
   parser___lexer___TDot___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -43856,15 +45387,15 @@ val_t NEW_TDot_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TPlus[78] = {
-  {(bigint) 3399 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TPlus[79] = {
+  {(bigint) 3915 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TPlus" /* 2: Class Name */},
   {(bigint) 3 /* 3: TPlus < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TPlus < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TPlus < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TPlus < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3399 /* 7: TPlus < TPlus: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TPlus < TokenOperator: superclass typecheck marker */},
+  {(bigint) 3915 /* 7: TPlus < TPlus: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -43932,9 +45463,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TPlus[78] = {
   {(bigint) parser___lexer___TPlus___parser_index},
   {(bigint) 1 /* 73: TPlus < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TPlus < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TPlus < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TPlus___init_tk},
-  {(bigint) 4 /* 77: TPlus < TPlus: superclass init_table position */},
+  {(bigint) 4 /* 78: TPlus < TPlus: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -43984,7 +45516,7 @@ val_t NEW_TPlus_parser___lexer___TPlus___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 809;
+  fra.me.line = 802;
   fra.me.meth = LOCATE_NEW_TPlus_parser___lexer___TPlus___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -43992,7 +45524,7 @@ val_t NEW_TPlus_parser___lexer___TPlus___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:809 */
+  /* parser/lexer.nit:802 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TPlus();
   INIT_ATTRIBUTES__parser___parser_nodes___TPlus(fra.me.REG[1]);
   parser___lexer___TPlus___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -44021,15 +45553,15 @@ val_t NEW_TPlus_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TMinus[78] = {
-  {(bigint) 3419 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TMinus[79] = {
+  {(bigint) 3935 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TMinus" /* 2: Class Name */},
   {(bigint) 3 /* 3: TMinus < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TMinus < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TMinus < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TMinus < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3419 /* 7: TMinus < TMinus: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TMinus < TokenOperator: superclass typecheck marker */},
+  {(bigint) 3935 /* 7: TMinus < TMinus: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -44097,9 +45629,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TMinus[78] = {
   {(bigint) parser___lexer___TMinus___parser_index},
   {(bigint) 1 /* 73: TMinus < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TMinus < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TMinus < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TMinus___init_tk},
-  {(bigint) 4 /* 77: TMinus < TMinus: superclass init_table position */},
+  {(bigint) 4 /* 78: TMinus < TMinus: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -44149,7 +45682,7 @@ val_t NEW_TMinus_parser___lexer___TMinus___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 821;
+  fra.me.line = 814;
   fra.me.meth = LOCATE_NEW_TMinus_parser___lexer___TMinus___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -44157,7 +45690,7 @@ val_t NEW_TMinus_parser___lexer___TMinus___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:821 */
+  /* parser/lexer.nit:814 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TMinus();
   INIT_ATTRIBUTES__parser___parser_nodes___TMinus(fra.me.REG[1]);
   parser___lexer___TMinus___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -44186,15 +45719,15 @@ val_t NEW_TMinus_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TStar[78] = {
-  {(bigint) 3387 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TStar[79] = {
+  {(bigint) 3903 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TStar" /* 2: Class Name */},
   {(bigint) 3 /* 3: TStar < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TStar < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TStar < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TStar < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3387 /* 7: TStar < TStar: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TStar < TokenOperator: superclass typecheck marker */},
+  {(bigint) 3903 /* 7: TStar < TStar: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -44262,9 +45795,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TStar[78] = {
   {(bigint) parser___lexer___TStar___parser_index},
   {(bigint) 1 /* 73: TStar < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TStar < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TStar < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TStar___init_tk},
-  {(bigint) 4 /* 77: TStar < TStar: superclass init_table position */},
+  {(bigint) 4 /* 78: TStar < TStar: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -44314,7 +45848,7 @@ val_t NEW_TStar_parser___lexer___TStar___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 833;
+  fra.me.line = 826;
   fra.me.meth = LOCATE_NEW_TStar_parser___lexer___TStar___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -44322,7 +45856,7 @@ val_t NEW_TStar_parser___lexer___TStar___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:833 */
+  /* parser/lexer.nit:826 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TStar();
   INIT_ATTRIBUTES__parser___parser_nodes___TStar(fra.me.REG[1]);
   parser___lexer___TStar___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -44351,15 +45885,15 @@ val_t NEW_TStar_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TSlash[78] = {
-  {(bigint) 3391 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TSlash[79] = {
+  {(bigint) 3907 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TSlash" /* 2: Class Name */},
   {(bigint) 3 /* 3: TSlash < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TSlash < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TSlash < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TSlash < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3391 /* 7: TSlash < TSlash: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TSlash < TokenOperator: superclass typecheck marker */},
+  {(bigint) 3907 /* 7: TSlash < TSlash: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -44427,9 +45961,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TSlash[78] = {
   {(bigint) parser___lexer___TSlash___parser_index},
   {(bigint) 1 /* 73: TSlash < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TSlash < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TSlash < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TSlash___init_tk},
-  {(bigint) 4 /* 77: TSlash < TSlash: superclass init_table position */},
+  {(bigint) 4 /* 78: TSlash < TSlash: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -44479,7 +46014,7 @@ val_t NEW_TSlash_parser___lexer___TSlash___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 845;
+  fra.me.line = 838;
   fra.me.meth = LOCATE_NEW_TSlash_parser___lexer___TSlash___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -44487,7 +46022,7 @@ val_t NEW_TSlash_parser___lexer___TSlash___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:845 */
+  /* parser/lexer.nit:838 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TSlash();
   INIT_ATTRIBUTES__parser___parser_nodes___TSlash(fra.me.REG[1]);
   parser___lexer___TSlash___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -44516,15 +46051,15 @@ val_t NEW_TSlash_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TPercent[78] = {
-  {(bigint) 3403 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TPercent[79] = {
+  {(bigint) 3919 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TPercent" /* 2: Class Name */},
   {(bigint) 3 /* 3: TPercent < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TPercent < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TPercent < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TPercent < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3403 /* 7: TPercent < TPercent: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TPercent < TokenOperator: superclass typecheck marker */},
+  {(bigint) 3919 /* 7: TPercent < TPercent: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -44592,9 +46127,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TPercent[78] = {
   {(bigint) parser___lexer___TPercent___parser_index},
   {(bigint) 1 /* 73: TPercent < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TPercent < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TPercent < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TPercent___init_tk},
-  {(bigint) 4 /* 77: TPercent < TPercent: superclass init_table position */},
+  {(bigint) 4 /* 78: TPercent < TPercent: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -44644,7 +46180,7 @@ val_t NEW_TPercent_parser___lexer___TPercent___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 857;
+  fra.me.line = 850;
   fra.me.meth = LOCATE_NEW_TPercent_parser___lexer___TPercent___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -44652,7 +46188,7 @@ val_t NEW_TPercent_parser___lexer___TPercent___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:857 */
+  /* parser/lexer.nit:850 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TPercent();
   INIT_ATTRIBUTES__parser___parser_nodes___TPercent(fra.me.REG[1]);
   parser___lexer___TPercent___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -44681,15 +46217,15 @@ val_t NEW_TPercent_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TEq[78] = {
-  {(bigint) 3651 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TEq[79] = {
+  {(bigint) 4163 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TEq" /* 2: Class Name */},
   {(bigint) 3 /* 3: TEq < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TEq < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TEq < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TEq < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3651 /* 7: TEq < TEq: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TEq < TokenOperator: superclass typecheck marker */},
+  {(bigint) 4163 /* 7: TEq < TEq: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -44757,9 +46293,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TEq[78] = {
   {(bigint) parser___lexer___TEq___parser_index},
   {(bigint) 1 /* 73: TEq < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TEq < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TEq < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TEq___init_tk},
-  {(bigint) 4 /* 77: TEq < TEq: superclass init_table position */},
+  {(bigint) 4 /* 78: TEq < TEq: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -44809,7 +46346,7 @@ val_t NEW_TEq_parser___lexer___TEq___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 869;
+  fra.me.line = 862;
   fra.me.meth = LOCATE_NEW_TEq_parser___lexer___TEq___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -44817,7 +46354,7 @@ val_t NEW_TEq_parser___lexer___TEq___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:869 */
+  /* parser/lexer.nit:862 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TEq();
   INIT_ATTRIBUTES__parser___parser_nodes___TEq(fra.me.REG[1]);
   parser___lexer___TEq___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -44846,15 +46383,15 @@ val_t NEW_TEq_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TNe[78] = {
-  {(bigint) 3411 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TNe[79] = {
+  {(bigint) 3927 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TNe" /* 2: Class Name */},
   {(bigint) 3 /* 3: TNe < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TNe < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TNe < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TNe < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3411 /* 7: TNe < TNe: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TNe < TokenOperator: superclass typecheck marker */},
+  {(bigint) 3927 /* 7: TNe < TNe: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -44922,9 +46459,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TNe[78] = {
   {(bigint) parser___lexer___TNe___parser_index},
   {(bigint) 1 /* 73: TNe < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TNe < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TNe < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TNe___init_tk},
-  {(bigint) 4 /* 77: TNe < TNe: superclass init_table position */},
+  {(bigint) 4 /* 78: TNe < TNe: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -44974,7 +46512,7 @@ val_t NEW_TNe_parser___lexer___TNe___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 881;
+  fra.me.line = 874;
   fra.me.meth = LOCATE_NEW_TNe_parser___lexer___TNe___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -44982,7 +46520,7 @@ val_t NEW_TNe_parser___lexer___TNe___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:881 */
+  /* parser/lexer.nit:874 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TNe();
   INIT_ATTRIBUTES__parser___parser_nodes___TNe(fra.me.REG[1]);
   parser___lexer___TNe___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -45011,15 +46549,15 @@ val_t NEW_TNe_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TLt[78] = {
-  {(bigint) 3427 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TLt[79] = {
+  {(bigint) 3943 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TLt" /* 2: Class Name */},
   {(bigint) 3 /* 3: TLt < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TLt < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TLt < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TLt < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3427 /* 7: TLt < TLt: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TLt < TokenOperator: superclass typecheck marker */},
+  {(bigint) 3943 /* 7: TLt < TLt: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -45087,9 +46625,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TLt[78] = {
   {(bigint) parser___lexer___TLt___parser_index},
   {(bigint) 1 /* 73: TLt < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TLt < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TLt < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TLt___init_tk},
-  {(bigint) 4 /* 77: TLt < TLt: superclass init_table position */},
+  {(bigint) 4 /* 78: TLt < TLt: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -45139,7 +46678,7 @@ val_t NEW_TLt_parser___lexer___TLt___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 893;
+  fra.me.line = 886;
   fra.me.meth = LOCATE_NEW_TLt_parser___lexer___TLt___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -45147,7 +46686,7 @@ val_t NEW_TLt_parser___lexer___TLt___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:893 */
+  /* parser/lexer.nit:886 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TLt();
   INIT_ATTRIBUTES__parser___parser_nodes___TLt(fra.me.REG[1]);
   parser___lexer___TLt___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -45176,15 +46715,15 @@ val_t NEW_TLt_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TLe[78] = {
-  {(bigint) 3435 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TLe[79] = {
+  {(bigint) 3951 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TLe" /* 2: Class Name */},
   {(bigint) 3 /* 3: TLe < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TLe < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TLe < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TLe < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3435 /* 7: TLe < TLe: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TLe < TokenOperator: superclass typecheck marker */},
+  {(bigint) 3951 /* 7: TLe < TLe: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -45252,9 +46791,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TLe[78] = {
   {(bigint) parser___lexer___TLe___parser_index},
   {(bigint) 1 /* 73: TLe < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TLe < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TLe < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TLe___init_tk},
-  {(bigint) 4 /* 77: TLe < TLe: superclass init_table position */},
+  {(bigint) 4 /* 78: TLe < TLe: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -45304,7 +46844,7 @@ val_t NEW_TLe_parser___lexer___TLe___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 905;
+  fra.me.line = 898;
   fra.me.meth = LOCATE_NEW_TLe_parser___lexer___TLe___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -45312,7 +46852,7 @@ val_t NEW_TLe_parser___lexer___TLe___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:905 */
+  /* parser/lexer.nit:898 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TLe();
   INIT_ATTRIBUTES__parser___parser_nodes___TLe(fra.me.REG[1]);
   parser___lexer___TLe___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -45341,15 +46881,15 @@ val_t NEW_TLe_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TLl[78] = {
-  {(bigint) 3431 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TLl[79] = {
+  {(bigint) 3947 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TLl" /* 2: Class Name */},
   {(bigint) 3 /* 3: TLl < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TLl < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TLl < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TLl < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3431 /* 7: TLl < TLl: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TLl < TokenOperator: superclass typecheck marker */},
+  {(bigint) 3947 /* 7: TLl < TLl: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -45417,9 +46957,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TLl[78] = {
   {(bigint) parser___lexer___TLl___parser_index},
   {(bigint) 1 /* 73: TLl < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TLl < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TLl < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TLl___init_tk},
-  {(bigint) 4 /* 77: TLl < TLl: superclass init_table position */},
+  {(bigint) 4 /* 78: TLl < TLl: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -45469,7 +47010,7 @@ val_t NEW_TLl_parser___lexer___TLl___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 917;
+  fra.me.line = 910;
   fra.me.meth = LOCATE_NEW_TLl_parser___lexer___TLl___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -45477,7 +47018,7 @@ val_t NEW_TLl_parser___lexer___TLl___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:917 */
+  /* parser/lexer.nit:910 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TLl();
   INIT_ATTRIBUTES__parser___parser_nodes___TLl(fra.me.REG[1]);
   parser___lexer___TLl___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -45506,15 +47047,15 @@ val_t NEW_TLl_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TGt[78] = {
-  {(bigint) 3635 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TGt[79] = {
+  {(bigint) 4147 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TGt" /* 2: Class Name */},
   {(bigint) 3 /* 3: TGt < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TGt < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TGt < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TGt < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3635 /* 7: TGt < TGt: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TGt < TokenOperator: superclass typecheck marker */},
+  {(bigint) 4147 /* 7: TGt < TGt: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -45582,9 +47123,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TGt[78] = {
   {(bigint) parser___lexer___TGt___parser_index},
   {(bigint) 1 /* 73: TGt < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TGt < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TGt < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TGt___init_tk},
-  {(bigint) 4 /* 77: TGt < TGt: superclass init_table position */},
+  {(bigint) 4 /* 78: TGt < TGt: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -45634,7 +47176,7 @@ val_t NEW_TGt_parser___lexer___TGt___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 929;
+  fra.me.line = 922;
   fra.me.meth = LOCATE_NEW_TGt_parser___lexer___TGt___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -45642,7 +47184,7 @@ val_t NEW_TGt_parser___lexer___TGt___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:929 */
+  /* parser/lexer.nit:922 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TGt();
   INIT_ATTRIBUTES__parser___parser_nodes___TGt(fra.me.REG[1]);
   parser___lexer___TGt___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -45671,15 +47213,15 @@ val_t NEW_TGt_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TGe[78] = {
-  {(bigint) 3643 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TGe[79] = {
+  {(bigint) 4155 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TGe" /* 2: Class Name */},
   {(bigint) 3 /* 3: TGe < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TGe < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TGe < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TGe < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3643 /* 7: TGe < TGe: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TGe < TokenOperator: superclass typecheck marker */},
+  {(bigint) 4155 /* 7: TGe < TGe: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -45747,9 +47289,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TGe[78] = {
   {(bigint) parser___lexer___TGe___parser_index},
   {(bigint) 1 /* 73: TGe < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TGe < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TGe < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TGe___init_tk},
-  {(bigint) 4 /* 77: TGe < TGe: superclass init_table position */},
+  {(bigint) 4 /* 78: TGe < TGe: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -45799,7 +47342,7 @@ val_t NEW_TGe_parser___lexer___TGe___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 941;
+  fra.me.line = 934;
   fra.me.meth = LOCATE_NEW_TGe_parser___lexer___TGe___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -45807,7 +47350,7 @@ val_t NEW_TGe_parser___lexer___TGe___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:941 */
+  /* parser/lexer.nit:934 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TGe();
   INIT_ATTRIBUTES__parser___parser_nodes___TGe(fra.me.REG[1]);
   parser___lexer___TGe___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -45836,15 +47379,15 @@ val_t NEW_TGe_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TGg[78] = {
-  {(bigint) 3639 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TGg[79] = {
+  {(bigint) 4151 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TGg" /* 2: Class Name */},
   {(bigint) 3 /* 3: TGg < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TGg < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TGg < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TGg < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3639 /* 7: TGg < TGg: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TGg < TokenOperator: superclass typecheck marker */},
+  {(bigint) 4151 /* 7: TGg < TGg: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -45912,9 +47455,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TGg[78] = {
   {(bigint) parser___lexer___TGg___parser_index},
   {(bigint) 1 /* 73: TGg < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TGg < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TGg < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TGg___init_tk},
-  {(bigint) 4 /* 77: TGg < TGg: superclass init_table position */},
+  {(bigint) 4 /* 78: TGg < TGg: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -45964,7 +47508,7 @@ val_t NEW_TGg_parser___lexer___TGg___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 953;
+  fra.me.line = 946;
   fra.me.meth = LOCATE_NEW_TGg_parser___lexer___TGg___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -45972,7 +47516,7 @@ val_t NEW_TGg_parser___lexer___TGg___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:953 */
+  /* parser/lexer.nit:946 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TGg();
   INIT_ATTRIBUTES__parser___parser_nodes___TGg(fra.me.REG[1]);
   parser___lexer___TGg___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -46001,15 +47545,15 @@ val_t NEW_TGg_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TStarship[78] = {
-  {(bigint) 3383 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TStarship[79] = {
+  {(bigint) 3899 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TStarship" /* 2: Class Name */},
   {(bigint) 3 /* 3: TStarship < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TStarship < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TStarship < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TStarship < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3383 /* 7: TStarship < TStarship: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TStarship < TokenOperator: superclass typecheck marker */},
+  {(bigint) 3899 /* 7: TStarship < TStarship: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -46077,9 +47621,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TStarship[78] = {
   {(bigint) parser___lexer___TStarship___parser_index},
   {(bigint) 1 /* 73: TStarship < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TStarship < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TStarship < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TStarship___init_tk},
-  {(bigint) 4 /* 77: TStarship < TStarship: superclass init_table position */},
+  {(bigint) 4 /* 78: TStarship < TStarship: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -46129,7 +47674,7 @@ val_t NEW_TStarship_parser___lexer___TStarship___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 965;
+  fra.me.line = 958;
   fra.me.meth = LOCATE_NEW_TStarship_parser___lexer___TStarship___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -46137,7 +47682,7 @@ val_t NEW_TStarship_parser___lexer___TStarship___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:965 */
+  /* parser/lexer.nit:958 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TStarship();
   INIT_ATTRIBUTES__parser___parser_nodes___TStarship(fra.me.REG[1]);
   parser___lexer___TStarship___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -46166,15 +47711,15 @@ val_t NEW_TStarship_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TBang[78] = {
-  {(bigint) 3671 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TBang[79] = {
+  {(bigint) 4183 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TBang" /* 2: Class Name */},
   {(bigint) 3 /* 3: TBang < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: TBang < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: TBang < Token: superclass typecheck marker */},
-  {(bigint) 2835 /* 6: TBang < TokenOperator: superclass typecheck marker */},
-  {(bigint) 3671 /* 7: TBang < TBang: superclass typecheck marker */},
+  {(bigint) 3331 /* 6: TBang < TokenOperator: superclass typecheck marker */},
+  {(bigint) 4183 /* 7: TBang < TBang: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -46242,9 +47787,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TBang[78] = {
   {(bigint) parser___lexer___TBang___parser_index},
   {(bigint) 1 /* 73: TBang < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TBang < TokenOperator: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TBang < TokenOperator: superclass init_table position */},
   {(bigint) parser___lexer___TBang___init_tk},
-  {(bigint) 4 /* 77: TBang < TBang: superclass init_table position */},
+  {(bigint) 4 /* 78: TBang < TBang: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -46294,7 +47840,7 @@ val_t NEW_TBang_parser___lexer___TBang___init_tk(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 977;
+  fra.me.line = 970;
   fra.me.meth = LOCATE_NEW_TBang_parser___lexer___TBang___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -46302,7 +47848,7 @@ val_t NEW_TBang_parser___lexer___TBang___init_tk(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:977 */
+  /* parser/lexer.nit:970 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TBang();
   INIT_ATTRIBUTES__parser___parser_nodes___TBang(fra.me.REG[1]);
   parser___lexer___TBang___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -46331,14 +47877,14 @@ val_t NEW_TBang_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TClassid[77] = {
-  {(bigint) 2931 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TAt[78] = {
+  {(bigint) 3447 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TClassid" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TClassid < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TClassid < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TClassid < Token: superclass typecheck marker */},
-  {(bigint) 2931 /* 6: TClassid < TClassid: superclass typecheck marker */},
+  {(bigint) "TAt" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TAt < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TAt < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TAt < Token: superclass typecheck marker */},
+  {(bigint) 3447 /* 6: TAt < TAt: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -46351,7 +47897,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TClassid[77] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 2 /* 19: TClassid < Object: superclass init_table position */},
+  {(bigint) 2 /* 19: TAt < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -46369,7 +47915,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TClassid[77] = {
   {(bigint) standard___file___Object___stderr},
   {(bigint) standard___stream___Object___poll},
   {(bigint) standard___stream___Object___intern_poll},
-  {(bigint) parser___parser_nodes___TClassid___to_s},
+  {(bigint) parser___parser_nodes___Token___to_s},
   {(bigint) standard___string___Object___native_class_name},
   {(bigint) standard___string___Object___class_name},
   {(bigint) standard___string___Object___inspect},
@@ -46395,7 +47941,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TClassid[77] = {
   {(bigint) parser___parser_prod___Token___replace_child},
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) parser___parser_prod___Token___visit_all},
-  {(bigint) 1 /* 63: TClassid < ANode: superclass init_table position */},
+  {(bigint) 1 /* 63: TAt < ANode: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANode___location},
   {(bigint) parser___parser_nodes___ANode___hot_location},
   {(bigint) parser___parser_nodes___ANode___init},
@@ -46404,105 +47950,106 @@ const classtable_elt_t VFT_parser___parser_nodes___TClassid[77] = {
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) syntax___syntax_base___Token___to_symbol},
-  {(bigint) parser___lexer___TClassid___parser_index},
-  {(bigint) 0 /* 73: TClassid < Token: superclass init_table position */},
+  {(bigint) parser___lexer___TAt___parser_index},
+  {(bigint) 0 /* 73: TAt < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) parser___lexer___TClassid___init_tk},
-  {(bigint) 3 /* 76: TClassid < TClassid: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) parser___lexer___TAt___init_tk},
+  {(bigint) 3 /* 77: TAt < TAt: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute TClassid::_parent */
-/* 3: Attribute TClassid::_location */
-/* 4: Attribute TClassid::_symbol_cache */
-/* 5: Attribute TClassid::_text */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TClassid[] = "init var of TClassid";
-void INIT_ATTRIBUTES__parser___parser_nodes___TClassid(val_t p0){
+/* 2: Attribute TAt::_parent */
+/* 3: Attribute TAt::_location */
+/* 4: Attribute TAt::_symbol_cache */
+/* 5: Attribute TAt::_text */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TAt[] = "init var of TAt";
+void INIT_ATTRIBUTES__parser___parser_nodes___TAt(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TClassid;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TAt;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___TClassid(void)
+val_t NEW_parser___parser_nodes___TAt(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 6);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TClassid;
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TAt;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___TClassid[] = "check new TClassid";
-void CHECKNEW_parser___parser_nodes___TClassid(val_t p0){
+static const char LOCATE_CHECKNEW_parser___parser_nodes___TAt[] = "check new TAt";
+void CHECKNEW_parser___parser_nodes___TAt(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TClassid;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TAt;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_TClassid_parser___lexer___TClassid___init_tk[] = "new TClassid lexer::TClassid::init_tk";
-val_t NEW_TClassid_parser___lexer___TClassid___init_tk(val_t p0){
+static const char LOCATE_NEW_TAt_parser___lexer___TAt___init_tk[] = "new TAt lexer::TAt::init_tk";
+val_t NEW_TAt_parser___lexer___TAt___init_tk(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 989;
-  fra.me.meth = LOCATE_NEW_TClassid_parser___lexer___TClassid___init_tk;
+  fra.me.line = 982;
+  fra.me.meth = LOCATE_NEW_TAt_parser___lexer___TAt___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:989 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___TClassid();
-  INIT_ATTRIBUTES__parser___parser_nodes___TClassid(fra.me.REG[1]);
-  parser___lexer___TClassid___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TClassid(fra.me.REG[1]);
+  /* parser/lexer.nit:982 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___TAt();
+  INIT_ATTRIBUTES__parser___parser_nodes___TAt(fra.me.REG[1]);
+  parser___lexer___TAt___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___TAt(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_NEW_TClassid_parser___parser_nodes___ANode___init[] = "new TClassid parser_nodes::ANode::init";
-val_t NEW_TClassid_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_TAt_parser___parser_nodes___ANode___init[] = "new TAt parser_nodes::ANode::init";
+val_t NEW_TAt_parser___parser_nodes___ANode___init(void){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_TClassid_parser___parser_nodes___ANode___init;
+  fra.me.meth = LOCATE_NEW_TAt_parser___parser_nodes___ANode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___TClassid();
-  INIT_ATTRIBUTES__parser___parser_nodes___TClassid(fra.me.REG[0]);
+  fra.me.REG[0] = NEW_parser___parser_nodes___TAt();
+  INIT_ATTRIBUTES__parser___parser_nodes___TAt(fra.me.REG[0]);
   parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TClassid(fra.me.REG[0]);
+  CHECKNEW_parser___parser_nodes___TAt(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TId[77] = {
-  {(bigint) 2899 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TClassid[78] = {
+  {(bigint) 3427 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TId" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TId < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TId < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TId < Token: superclass typecheck marker */},
-  {(bigint) 2899 /* 6: TId < TId: superclass typecheck marker */},
+  {(bigint) "TClassid" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TClassid < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TClassid < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TClassid < Token: superclass typecheck marker */},
+  {(bigint) 3427 /* 6: TClassid < TClassid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -46515,7 +48062,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TId[77] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 2 /* 19: TId < Object: superclass init_table position */},
+  {(bigint) 2 /* 19: TClassid < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -46533,7 +48080,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TId[77] = {
   {(bigint) standard___file___Object___stderr},
   {(bigint) standard___stream___Object___poll},
   {(bigint) standard___stream___Object___intern_poll},
-  {(bigint) parser___parser_nodes___TId___to_s},
+  {(bigint) parser___parser_nodes___TClassid___to_s},
   {(bigint) standard___string___Object___native_class_name},
   {(bigint) standard___string___Object___class_name},
   {(bigint) standard___string___Object___inspect},
@@ -46559,7 +48106,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TId[77] = {
   {(bigint) parser___parser_prod___Token___replace_child},
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) parser___parser_prod___Token___visit_all},
-  {(bigint) 1 /* 63: TId < ANode: superclass init_table position */},
+  {(bigint) 1 /* 63: TClassid < ANode: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANode___location},
   {(bigint) parser___parser_nodes___ANode___hot_location},
   {(bigint) parser___parser_nodes___ANode___init},
@@ -46568,105 +48115,106 @@ const classtable_elt_t VFT_parser___parser_nodes___TId[77] = {
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) syntax___syntax_base___Token___to_symbol},
-  {(bigint) parser___lexer___TId___parser_index},
-  {(bigint) 0 /* 73: TId < Token: superclass init_table position */},
+  {(bigint) parser___lexer___TClassid___parser_index},
+  {(bigint) 0 /* 73: TClassid < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) parser___lexer___TId___init_tk},
-  {(bigint) 3 /* 76: TId < TId: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) parser___lexer___TClassid___init_tk},
+  {(bigint) 3 /* 77: TClassid < TClassid: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute TId::_parent */
-/* 3: Attribute TId::_location */
-/* 4: Attribute TId::_symbol_cache */
-/* 5: Attribute TId::_text */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TId[] = "init var of TId";
-void INIT_ATTRIBUTES__parser___parser_nodes___TId(val_t p0){
+/* 2: Attribute TClassid::_parent */
+/* 3: Attribute TClassid::_location */
+/* 4: Attribute TClassid::_symbol_cache */
+/* 5: Attribute TClassid::_text */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TClassid[] = "init var of TClassid";
+void INIT_ATTRIBUTES__parser___parser_nodes___TClassid(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TId;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TClassid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___TId(void)
+val_t NEW_parser___parser_nodes___TClassid(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 6);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TId;
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TClassid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___TId[] = "check new TId";
-void CHECKNEW_parser___parser_nodes___TId(val_t p0){
+static const char LOCATE_CHECKNEW_parser___parser_nodes___TClassid[] = "check new TClassid";
+void CHECKNEW_parser___parser_nodes___TClassid(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TId;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TClassid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_TId_parser___lexer___TId___init_tk[] = "new TId lexer::TId::init_tk";
-val_t NEW_TId_parser___lexer___TId___init_tk(val_t p0){
+static const char LOCATE_NEW_TClassid_parser___lexer___TClassid___init_tk[] = "new TClassid lexer::TClassid::init_tk";
+val_t NEW_TClassid_parser___lexer___TClassid___init_tk(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1001;
-  fra.me.meth = LOCATE_NEW_TId_parser___lexer___TId___init_tk;
+  fra.me.line = 994;
+  fra.me.meth = LOCATE_NEW_TClassid_parser___lexer___TClassid___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1001 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___TId();
-  INIT_ATTRIBUTES__parser___parser_nodes___TId(fra.me.REG[1]);
-  parser___lexer___TId___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TId(fra.me.REG[1]);
+  /* parser/lexer.nit:994 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___TClassid();
+  INIT_ATTRIBUTES__parser___parser_nodes___TClassid(fra.me.REG[1]);
+  parser___lexer___TClassid___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___TClassid(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_NEW_TId_parser___parser_nodes___ANode___init[] = "new TId parser_nodes::ANode::init";
-val_t NEW_TId_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_TClassid_parser___parser_nodes___ANode___init[] = "new TClassid parser_nodes::ANode::init";
+val_t NEW_TClassid_parser___parser_nodes___ANode___init(void){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_TId_parser___parser_nodes___ANode___init;
+  fra.me.meth = LOCATE_NEW_TClassid_parser___parser_nodes___ANode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___TId();
-  INIT_ATTRIBUTES__parser___parser_nodes___TId(fra.me.REG[0]);
+  fra.me.REG[0] = NEW_parser___parser_nodes___TClassid();
+  INIT_ATTRIBUTES__parser___parser_nodes___TClassid(fra.me.REG[0]);
   parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TId(fra.me.REG[0]);
+  CHECKNEW_parser___parser_nodes___TClassid(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TAttrid[77] = {
-  {(bigint) 2947 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TId[78] = {
+  {(bigint) 3395 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TAttrid" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TAttrid < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TAttrid < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TAttrid < Token: superclass typecheck marker */},
-  {(bigint) 2947 /* 6: TAttrid < TAttrid: superclass typecheck marker */},
+  {(bigint) "TId" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TId < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TId < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TId < Token: superclass typecheck marker */},
+  {(bigint) 3395 /* 6: TId < TId: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -46679,7 +48227,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TAttrid[77] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 2 /* 19: TAttrid < Object: superclass init_table position */},
+  {(bigint) 2 /* 19: TId < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -46697,7 +48245,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TAttrid[77] = {
   {(bigint) standard___file___Object___stderr},
   {(bigint) standard___stream___Object___poll},
   {(bigint) standard___stream___Object___intern_poll},
-  {(bigint) parser___parser_nodes___TAttrid___to_s},
+  {(bigint) parser___parser_nodes___TId___to_s},
   {(bigint) standard___string___Object___native_class_name},
   {(bigint) standard___string___Object___class_name},
   {(bigint) standard___string___Object___inspect},
@@ -46723,7 +48271,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TAttrid[77] = {
   {(bigint) parser___parser_prod___Token___replace_child},
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) parser___parser_prod___Token___visit_all},
-  {(bigint) 1 /* 63: TAttrid < ANode: superclass init_table position */},
+  {(bigint) 1 /* 63: TId < ANode: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANode___location},
   {(bigint) parser___parser_nodes___ANode___hot_location},
   {(bigint) parser___parser_nodes___ANode___init},
@@ -46732,106 +48280,107 @@ const classtable_elt_t VFT_parser___parser_nodes___TAttrid[77] = {
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) syntax___syntax_base___Token___to_symbol},
-  {(bigint) parser___lexer___TAttrid___parser_index},
-  {(bigint) 0 /* 73: TAttrid < Token: superclass init_table position */},
+  {(bigint) parser___lexer___TId___parser_index},
+  {(bigint) 0 /* 73: TId < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) parser___lexer___TAttrid___init_tk},
-  {(bigint) 3 /* 76: TAttrid < TAttrid: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) parser___lexer___TId___init_tk},
+  {(bigint) 3 /* 77: TId < TId: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute TAttrid::_parent */
-/* 3: Attribute TAttrid::_location */
-/* 4: Attribute TAttrid::_symbol_cache */
-/* 5: Attribute TAttrid::_text */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TAttrid[] = "init var of TAttrid";
-void INIT_ATTRIBUTES__parser___parser_nodes___TAttrid(val_t p0){
+/* 2: Attribute TId::_parent */
+/* 3: Attribute TId::_location */
+/* 4: Attribute TId::_symbol_cache */
+/* 5: Attribute TId::_text */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TId[] = "init var of TId";
+void INIT_ATTRIBUTES__parser___parser_nodes___TId(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TAttrid;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TId;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___TAttrid(void)
+val_t NEW_parser___parser_nodes___TId(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 6);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TAttrid;
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TId;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___TAttrid[] = "check new TAttrid";
-void CHECKNEW_parser___parser_nodes___TAttrid(val_t p0){
+static const char LOCATE_CHECKNEW_parser___parser_nodes___TId[] = "check new TId";
+void CHECKNEW_parser___parser_nodes___TId(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TAttrid;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TId;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_TAttrid_parser___lexer___TAttrid___init_tk[] = "new TAttrid lexer::TAttrid::init_tk";
-val_t NEW_TAttrid_parser___lexer___TAttrid___init_tk(val_t p0){
+static const char LOCATE_NEW_TId_parser___lexer___TId___init_tk[] = "new TId lexer::TId::init_tk";
+val_t NEW_TId_parser___lexer___TId___init_tk(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1013;
-  fra.me.meth = LOCATE_NEW_TAttrid_parser___lexer___TAttrid___init_tk;
+  fra.me.line = 1006;
+  fra.me.meth = LOCATE_NEW_TId_parser___lexer___TId___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1013 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___TAttrid();
-  INIT_ATTRIBUTES__parser___parser_nodes___TAttrid(fra.me.REG[1]);
-  parser___lexer___TAttrid___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TAttrid(fra.me.REG[1]);
+  /* parser/lexer.nit:1006 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___TId();
+  INIT_ATTRIBUTES__parser___parser_nodes___TId(fra.me.REG[1]);
+  parser___lexer___TId___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___TId(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_NEW_TAttrid_parser___parser_nodes___ANode___init[] = "new TAttrid parser_nodes::ANode::init";
-val_t NEW_TAttrid_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_TId_parser___parser_nodes___ANode___init[] = "new TId parser_nodes::ANode::init";
+val_t NEW_TId_parser___parser_nodes___ANode___init(void){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_TAttrid_parser___parser_nodes___ANode___init;
+  fra.me.meth = LOCATE_NEW_TId_parser___parser_nodes___ANode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___TAttrid();
-  INIT_ATTRIBUTES__parser___parser_nodes___TAttrid(fra.me.REG[0]);
+  fra.me.REG[0] = NEW_parser___parser_nodes___TId();
+  INIT_ATTRIBUTES__parser___parser_nodes___TId(fra.me.REG[0]);
   parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TAttrid(fra.me.REG[0]);
+  CHECKNEW_parser___parser_nodes___TId(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TNumber[78] = {
-  {(bigint) 3407 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TAttrid[78] = {
+  {(bigint) 3443 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TNumber" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TNumber < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TNumber < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TNumber < Token: superclass typecheck marker */},
-  {(bigint) 2839 /* 6: TNumber < TokenLiteral: superclass typecheck marker */},
-  {(bigint) 3407 /* 7: TNumber < TNumber: superclass typecheck marker */},
+  {(bigint) "TAttrid" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TAttrid < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TAttrid < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TAttrid < Token: superclass typecheck marker */},
+  {(bigint) 3443 /* 6: TAttrid < TAttrid: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -46843,7 +48392,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TNumber[78] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 3 /* 19: TNumber < Object: superclass init_table position */},
+  {(bigint) 2 /* 19: TAttrid < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -46861,7 +48410,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TNumber[78] = {
   {(bigint) standard___file___Object___stderr},
   {(bigint) standard___stream___Object___poll},
   {(bigint) standard___stream___Object___intern_poll},
-  {(bigint) parser___parser_nodes___TokenLiteral___to_s},
+  {(bigint) parser___parser_nodes___TAttrid___to_s},
   {(bigint) standard___string___Object___native_class_name},
   {(bigint) standard___string___Object___class_name},
   {(bigint) standard___string___Object___inspect},
@@ -46887,7 +48436,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TNumber[78] = {
   {(bigint) parser___parser_prod___Token___replace_child},
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) parser___parser_prod___Token___visit_all},
-  {(bigint) 2 /* 63: TNumber < ANode: superclass init_table position */},
+  {(bigint) 1 /* 63: TAttrid < ANode: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANode___location},
   {(bigint) parser___parser_nodes___ANode___hot_location},
   {(bigint) parser___parser_nodes___ANode___init},
@@ -46896,107 +48445,107 @@ const classtable_elt_t VFT_parser___parser_nodes___TNumber[78] = {
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) syntax___syntax_base___Token___to_symbol},
-  {(bigint) parser___lexer___TNumber___parser_index},
-  {(bigint) 1 /* 73: TNumber < Token: superclass init_table position */},
+  {(bigint) parser___lexer___TAttrid___parser_index},
+  {(bigint) 0 /* 73: TAttrid < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TNumber < TokenLiteral: superclass init_table position */},
-  {(bigint) parser___lexer___TNumber___init_tk},
-  {(bigint) 4 /* 77: TNumber < TNumber: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) parser___lexer___TAttrid___init_tk},
+  {(bigint) 3 /* 77: TAttrid < TAttrid: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute TNumber::_parent */
-/* 3: Attribute TNumber::_location */
-/* 4: Attribute TNumber::_symbol_cache */
-/* 5: Attribute TNumber::_text */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TNumber[] = "init var of TNumber";
-void INIT_ATTRIBUTES__parser___parser_nodes___TNumber(val_t p0){
+/* 2: Attribute TAttrid::_parent */
+/* 3: Attribute TAttrid::_location */
+/* 4: Attribute TAttrid::_symbol_cache */
+/* 5: Attribute TAttrid::_text */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TAttrid[] = "init var of TAttrid";
+void INIT_ATTRIBUTES__parser___parser_nodes___TAttrid(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TNumber;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TAttrid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___TNumber(void)
+val_t NEW_parser___parser_nodes___TAttrid(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 6);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TNumber;
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TAttrid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___TNumber[] = "check new TNumber";
-void CHECKNEW_parser___parser_nodes___TNumber(val_t p0){
+static const char LOCATE_CHECKNEW_parser___parser_nodes___TAttrid[] = "check new TAttrid";
+void CHECKNEW_parser___parser_nodes___TAttrid(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TNumber;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TAttrid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_TNumber_parser___lexer___TNumber___init_tk[] = "new TNumber lexer::TNumber::init_tk";
-val_t NEW_TNumber_parser___lexer___TNumber___init_tk(val_t p0){
+static const char LOCATE_NEW_TAttrid_parser___lexer___TAttrid___init_tk[] = "new TAttrid lexer::TAttrid::init_tk";
+val_t NEW_TAttrid_parser___lexer___TAttrid___init_tk(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  int init_table[5] = {0, 0, 0, 0, 0};
+  int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1025;
-  fra.me.meth = LOCATE_NEW_TNumber_parser___lexer___TNumber___init_tk;
+  fra.me.line = 1018;
+  fra.me.meth = LOCATE_NEW_TAttrid_parser___lexer___TAttrid___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1025 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___TNumber();
-  INIT_ATTRIBUTES__parser___parser_nodes___TNumber(fra.me.REG[1]);
-  parser___lexer___TNumber___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TNumber(fra.me.REG[1]);
+  /* parser/lexer.nit:1018 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___TAttrid();
+  INIT_ATTRIBUTES__parser___parser_nodes___TAttrid(fra.me.REG[1]);
+  parser___lexer___TAttrid___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___TAttrid(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_NEW_TNumber_parser___parser_nodes___ANode___init[] = "new TNumber parser_nodes::ANode::init";
-val_t NEW_TNumber_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_TAttrid_parser___parser_nodes___ANode___init[] = "new TAttrid parser_nodes::ANode::init";
+val_t NEW_TAttrid_parser___parser_nodes___ANode___init(void){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  int init_table[5] = {0, 0, 0, 0, 0};
+  int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_TNumber_parser___parser_nodes___ANode___init;
+  fra.me.meth = LOCATE_NEW_TAttrid_parser___parser_nodes___ANode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___TNumber();
-  INIT_ATTRIBUTES__parser___parser_nodes___TNumber(fra.me.REG[0]);
+  fra.me.REG[0] = NEW_parser___parser_nodes___TAttrid();
+  INIT_ATTRIBUTES__parser___parser_nodes___TAttrid(fra.me.REG[0]);
   parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TNumber(fra.me.REG[0]);
+  CHECKNEW_parser___parser_nodes___TAttrid(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TFloat[78] = {
-  {(bigint) 3647 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TNumber[79] = {
+  {(bigint) 3923 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TFloat" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TFloat < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TFloat < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TFloat < Token: superclass typecheck marker */},
-  {(bigint) 2839 /* 6: TFloat < TokenLiteral: superclass typecheck marker */},
-  {(bigint) 3647 /* 7: TFloat < TFloat: superclass typecheck marker */},
+  {(bigint) "TNumber" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TNumber < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TNumber < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TNumber < Token: superclass typecheck marker */},
+  {(bigint) 3335 /* 6: TNumber < TokenLiteral: superclass typecheck marker */},
+  {(bigint) 3923 /* 7: TNumber < TNumber: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -47008,7 +48557,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TFloat[78] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 3 /* 19: TFloat < Object: superclass init_table position */},
+  {(bigint) 3 /* 19: TNumber < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -47052,7 +48601,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TFloat[78] = {
   {(bigint) parser___parser_prod___Token___replace_child},
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) parser___parser_prod___Token___visit_all},
-  {(bigint) 2 /* 63: TFloat < ANode: superclass init_table position */},
+  {(bigint) 2 /* 63: TNumber < ANode: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANode___location},
   {(bigint) parser___parser_nodes___ANode___hot_location},
   {(bigint) parser___parser_nodes___ANode___init},
@@ -47061,107 +48610,108 @@ const classtable_elt_t VFT_parser___parser_nodes___TFloat[78] = {
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) syntax___syntax_base___Token___to_symbol},
-  {(bigint) parser___lexer___TFloat___parser_index},
-  {(bigint) 1 /* 73: TFloat < Token: superclass init_table position */},
+  {(bigint) parser___lexer___TNumber___parser_index},
+  {(bigint) 1 /* 73: TNumber < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TFloat < TokenLiteral: superclass init_table position */},
-  {(bigint) parser___lexer___TFloat___init_tk},
-  {(bigint) 4 /* 77: TFloat < TFloat: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TNumber < TokenLiteral: superclass init_table position */},
+  {(bigint) parser___lexer___TNumber___init_tk},
+  {(bigint) 4 /* 78: TNumber < TNumber: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute TFloat::_parent */
-/* 3: Attribute TFloat::_location */
-/* 4: Attribute TFloat::_symbol_cache */
-/* 5: Attribute TFloat::_text */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TFloat[] = "init var of TFloat";
-void INIT_ATTRIBUTES__parser___parser_nodes___TFloat(val_t p0){
+/* 2: Attribute TNumber::_parent */
+/* 3: Attribute TNumber::_location */
+/* 4: Attribute TNumber::_symbol_cache */
+/* 5: Attribute TNumber::_text */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TNumber[] = "init var of TNumber";
+void INIT_ATTRIBUTES__parser___parser_nodes___TNumber(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TFloat;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TNumber;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___TFloat(void)
+val_t NEW_parser___parser_nodes___TNumber(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 6);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TFloat;
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TNumber;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___TFloat[] = "check new TFloat";
-void CHECKNEW_parser___parser_nodes___TFloat(val_t p0){
+static const char LOCATE_CHECKNEW_parser___parser_nodes___TNumber[] = "check new TNumber";
+void CHECKNEW_parser___parser_nodes___TNumber(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TFloat;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TNumber;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_TFloat_parser___lexer___TFloat___init_tk[] = "new TFloat lexer::TFloat::init_tk";
-val_t NEW_TFloat_parser___lexer___TFloat___init_tk(val_t p0){
+static const char LOCATE_NEW_TNumber_parser___lexer___TNumber___init_tk[] = "new TNumber lexer::TNumber::init_tk";
+val_t NEW_TNumber_parser___lexer___TNumber___init_tk(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1037;
-  fra.me.meth = LOCATE_NEW_TFloat_parser___lexer___TFloat___init_tk;
+  fra.me.line = 1030;
+  fra.me.meth = LOCATE_NEW_TNumber_parser___lexer___TNumber___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1037 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___TFloat();
-  INIT_ATTRIBUTES__parser___parser_nodes___TFloat(fra.me.REG[1]);
-  parser___lexer___TFloat___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TFloat(fra.me.REG[1]);
+  /* parser/lexer.nit:1030 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___TNumber();
+  INIT_ATTRIBUTES__parser___parser_nodes___TNumber(fra.me.REG[1]);
+  parser___lexer___TNumber___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___TNumber(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_NEW_TFloat_parser___parser_nodes___ANode___init[] = "new TFloat parser_nodes::ANode::init";
-val_t NEW_TFloat_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_TNumber_parser___parser_nodes___ANode___init[] = "new TNumber parser_nodes::ANode::init";
+val_t NEW_TNumber_parser___parser_nodes___ANode___init(void){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_TFloat_parser___parser_nodes___ANode___init;
+  fra.me.meth = LOCATE_NEW_TNumber_parser___parser_nodes___ANode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___TFloat();
-  INIT_ATTRIBUTES__parser___parser_nodes___TFloat(fra.me.REG[0]);
+  fra.me.REG[0] = NEW_parser___parser_nodes___TNumber();
+  INIT_ATTRIBUTES__parser___parser_nodes___TNumber(fra.me.REG[0]);
   parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TFloat(fra.me.REG[0]);
+  CHECKNEW_parser___parser_nodes___TNumber(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TChar[78] = {
-  {(bigint) 3667 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TFloat[79] = {
+  {(bigint) 4159 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TChar" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TChar < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TChar < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TChar < Token: superclass typecheck marker */},
-  {(bigint) 2839 /* 6: TChar < TokenLiteral: superclass typecheck marker */},
-  {(bigint) 3667 /* 7: TChar < TChar: superclass typecheck marker */},
+  {(bigint) "TFloat" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TFloat < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TFloat < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TFloat < Token: superclass typecheck marker */},
+  {(bigint) 3335 /* 6: TFloat < TokenLiteral: superclass typecheck marker */},
+  {(bigint) 4159 /* 7: TFloat < TFloat: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -47173,7 +48723,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TChar[78] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 3 /* 19: TChar < Object: superclass init_table position */},
+  {(bigint) 3 /* 19: TFloat < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -47217,7 +48767,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TChar[78] = {
   {(bigint) parser___parser_prod___Token___replace_child},
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) parser___parser_prod___Token___visit_all},
-  {(bigint) 2 /* 63: TChar < ANode: superclass init_table position */},
+  {(bigint) 2 /* 63: TFloat < ANode: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANode___location},
   {(bigint) parser___parser_nodes___ANode___hot_location},
   {(bigint) parser___parser_nodes___ANode___init},
@@ -47226,107 +48776,108 @@ const classtable_elt_t VFT_parser___parser_nodes___TChar[78] = {
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) syntax___syntax_base___Token___to_symbol},
-  {(bigint) parser___lexer___TChar___parser_index},
-  {(bigint) 1 /* 73: TChar < Token: superclass init_table position */},
+  {(bigint) parser___lexer___TFloat___parser_index},
+  {(bigint) 1 /* 73: TFloat < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TChar < TokenLiteral: superclass init_table position */},
-  {(bigint) parser___lexer___TChar___init_tk},
-  {(bigint) 4 /* 77: TChar < TChar: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TFloat < TokenLiteral: superclass init_table position */},
+  {(bigint) parser___lexer___TFloat___init_tk},
+  {(bigint) 4 /* 78: TFloat < TFloat: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute TChar::_parent */
-/* 3: Attribute TChar::_location */
-/* 4: Attribute TChar::_symbol_cache */
-/* 5: Attribute TChar::_text */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TChar[] = "init var of TChar";
-void INIT_ATTRIBUTES__parser___parser_nodes___TChar(val_t p0){
+/* 2: Attribute TFloat::_parent */
+/* 3: Attribute TFloat::_location */
+/* 4: Attribute TFloat::_symbol_cache */
+/* 5: Attribute TFloat::_text */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TFloat[] = "init var of TFloat";
+void INIT_ATTRIBUTES__parser___parser_nodes___TFloat(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TChar;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TFloat;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___TChar(void)
+val_t NEW_parser___parser_nodes___TFloat(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 6);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TChar;
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TFloat;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___TChar[] = "check new TChar";
-void CHECKNEW_parser___parser_nodes___TChar(val_t p0){
+static const char LOCATE_CHECKNEW_parser___parser_nodes___TFloat[] = "check new TFloat";
+void CHECKNEW_parser___parser_nodes___TFloat(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TChar;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TFloat;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_TChar_parser___lexer___TChar___init_tk[] = "new TChar lexer::TChar::init_tk";
-val_t NEW_TChar_parser___lexer___TChar___init_tk(val_t p0){
+static const char LOCATE_NEW_TFloat_parser___lexer___TFloat___init_tk[] = "new TFloat lexer::TFloat::init_tk";
+val_t NEW_TFloat_parser___lexer___TFloat___init_tk(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1049;
-  fra.me.meth = LOCATE_NEW_TChar_parser___lexer___TChar___init_tk;
+  fra.me.line = 1042;
+  fra.me.meth = LOCATE_NEW_TFloat_parser___lexer___TFloat___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1049 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___TChar();
-  INIT_ATTRIBUTES__parser___parser_nodes___TChar(fra.me.REG[1]);
-  parser___lexer___TChar___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TChar(fra.me.REG[1]);
+  /* parser/lexer.nit:1042 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___TFloat();
+  INIT_ATTRIBUTES__parser___parser_nodes___TFloat(fra.me.REG[1]);
+  parser___lexer___TFloat___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___TFloat(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_NEW_TChar_parser___parser_nodes___ANode___init[] = "new TChar parser_nodes::ANode::init";
-val_t NEW_TChar_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_TFloat_parser___parser_nodes___ANode___init[] = "new TFloat parser_nodes::ANode::init";
+val_t NEW_TFloat_parser___parser_nodes___ANode___init(void){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_TChar_parser___parser_nodes___ANode___init;
+  fra.me.meth = LOCATE_NEW_TFloat_parser___parser_nodes___ANode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___TChar();
-  INIT_ATTRIBUTES__parser___parser_nodes___TChar(fra.me.REG[0]);
+  fra.me.REG[0] = NEW_parser___parser_nodes___TFloat();
+  INIT_ATTRIBUTES__parser___parser_nodes___TFloat(fra.me.REG[0]);
   parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TChar(fra.me.REG[0]);
+  CHECKNEW_parser___parser_nodes___TFloat(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TString[78] = {
-  {(bigint) 3375 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TChar[79] = {
+  {(bigint) 4179 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TString" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TString < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TString < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TString < Token: superclass typecheck marker */},
-  {(bigint) 2839 /* 6: TString < TokenLiteral: superclass typecheck marker */},
-  {(bigint) 3375 /* 7: TString < TString: superclass typecheck marker */},
+  {(bigint) "TChar" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TChar < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TChar < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TChar < Token: superclass typecheck marker */},
+  {(bigint) 3335 /* 6: TChar < TokenLiteral: superclass typecheck marker */},
+  {(bigint) 4179 /* 7: TChar < TChar: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -47338,7 +48889,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TString[78] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 3 /* 19: TString < Object: superclass init_table position */},
+  {(bigint) 3 /* 19: TChar < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -47382,7 +48933,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TString[78] = {
   {(bigint) parser___parser_prod___Token___replace_child},
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) parser___parser_prod___Token___visit_all},
-  {(bigint) 2 /* 63: TString < ANode: superclass init_table position */},
+  {(bigint) 2 /* 63: TChar < ANode: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANode___location},
   {(bigint) parser___parser_nodes___ANode___hot_location},
   {(bigint) parser___parser_nodes___ANode___init},
@@ -47391,107 +48942,108 @@ const classtable_elt_t VFT_parser___parser_nodes___TString[78] = {
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) syntax___syntax_base___Token___to_symbol},
-  {(bigint) parser___lexer___TString___parser_index},
-  {(bigint) 1 /* 73: TString < Token: superclass init_table position */},
+  {(bigint) parser___lexer___TChar___parser_index},
+  {(bigint) 1 /* 73: TChar < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TString < TokenLiteral: superclass init_table position */},
-  {(bigint) parser___lexer___TString___init_tk},
-  {(bigint) 4 /* 77: TString < TString: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TChar < TokenLiteral: superclass init_table position */},
+  {(bigint) parser___lexer___TChar___init_tk},
+  {(bigint) 4 /* 78: TChar < TChar: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute TString::_parent */
-/* 3: Attribute TString::_location */
-/* 4: Attribute TString::_symbol_cache */
-/* 5: Attribute TString::_text */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TString[] = "init var of TString";
-void INIT_ATTRIBUTES__parser___parser_nodes___TString(val_t p0){
+/* 2: Attribute TChar::_parent */
+/* 3: Attribute TChar::_location */
+/* 4: Attribute TChar::_symbol_cache */
+/* 5: Attribute TChar::_text */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TChar[] = "init var of TChar";
+void INIT_ATTRIBUTES__parser___parser_nodes___TChar(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TString;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TChar;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___TString(void)
+val_t NEW_parser___parser_nodes___TChar(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 6);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TString;
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TChar;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___TString[] = "check new TString";
-void CHECKNEW_parser___parser_nodes___TString(val_t p0){
+static const char LOCATE_CHECKNEW_parser___parser_nodes___TChar[] = "check new TChar";
+void CHECKNEW_parser___parser_nodes___TChar(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TString;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TChar;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_TString_parser___lexer___TString___init_tk[] = "new TString lexer::TString::init_tk";
-val_t NEW_TString_parser___lexer___TString___init_tk(val_t p0){
+static const char LOCATE_NEW_TChar_parser___lexer___TChar___init_tk[] = "new TChar lexer::TChar::init_tk";
+val_t NEW_TChar_parser___lexer___TChar___init_tk(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1061;
-  fra.me.meth = LOCATE_NEW_TString_parser___lexer___TString___init_tk;
+  fra.me.line = 1102;
+  fra.me.meth = LOCATE_NEW_TChar_parser___lexer___TChar___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1061 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___TString();
-  INIT_ATTRIBUTES__parser___parser_nodes___TString(fra.me.REG[1]);
-  parser___lexer___TString___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TString(fra.me.REG[1]);
+  /* parser/lexer.nit:1102 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___TChar();
+  INIT_ATTRIBUTES__parser___parser_nodes___TChar(fra.me.REG[1]);
+  parser___lexer___TChar___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___TChar(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_NEW_TString_parser___parser_nodes___ANode___init[] = "new TString parser_nodes::ANode::init";
-val_t NEW_TString_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_TChar_parser___parser_nodes___ANode___init[] = "new TChar parser_nodes::ANode::init";
+val_t NEW_TChar_parser___parser_nodes___ANode___init(void){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_TString_parser___parser_nodes___ANode___init;
+  fra.me.meth = LOCATE_NEW_TChar_parser___parser_nodes___ANode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___TString();
-  INIT_ATTRIBUTES__parser___parser_nodes___TString(fra.me.REG[0]);
+  fra.me.REG[0] = NEW_parser___parser_nodes___TChar();
+  INIT_ATTRIBUTES__parser___parser_nodes___TChar(fra.me.REG[0]);
   parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TString(fra.me.REG[0]);
+  CHECKNEW_parser___parser_nodes___TChar(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TStartString[78] = {
-  {(bigint) 3379 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TString[79] = {
+  {(bigint) 3891 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TStartString" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TStartString < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TStartString < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TStartString < Token: superclass typecheck marker */},
-  {(bigint) 2839 /* 6: TStartString < TokenLiteral: superclass typecheck marker */},
-  {(bigint) 3379 /* 7: TStartString < TStartString: superclass typecheck marker */},
+  {(bigint) "TString" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TString < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TString < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TString < Token: superclass typecheck marker */},
+  {(bigint) 3335 /* 6: TString < TokenLiteral: superclass typecheck marker */},
+  {(bigint) 3891 /* 7: TString < TString: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -47503,7 +49055,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TStartString[78] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 3 /* 19: TStartString < Object: superclass init_table position */},
+  {(bigint) 3 /* 19: TString < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -47547,7 +49099,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TStartString[78] = {
   {(bigint) parser___parser_prod___Token___replace_child},
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) parser___parser_prod___Token___visit_all},
-  {(bigint) 2 /* 63: TStartString < ANode: superclass init_table position */},
+  {(bigint) 2 /* 63: TString < ANode: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANode___location},
   {(bigint) parser___parser_nodes___ANode___hot_location},
   {(bigint) parser___parser_nodes___ANode___init},
@@ -47556,107 +49108,108 @@ const classtable_elt_t VFT_parser___parser_nodes___TStartString[78] = {
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) syntax___syntax_base___Token___to_symbol},
-  {(bigint) parser___lexer___TStartString___parser_index},
-  {(bigint) 1 /* 73: TStartString < Token: superclass init_table position */},
+  {(bigint) parser___lexer___TString___parser_index},
+  {(bigint) 1 /* 73: TString < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TStartString < TokenLiteral: superclass init_table position */},
-  {(bigint) parser___lexer___TStartString___init_tk},
-  {(bigint) 4 /* 77: TStartString < TStartString: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TString < TokenLiteral: superclass init_table position */},
+  {(bigint) parser___lexer___TString___init_tk},
+  {(bigint) 4 /* 78: TString < TString: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute TStartString::_parent */
-/* 3: Attribute TStartString::_location */
-/* 4: Attribute TStartString::_symbol_cache */
-/* 5: Attribute TStartString::_text */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TStartString[] = "init var of TStartString";
-void INIT_ATTRIBUTES__parser___parser_nodes___TStartString(val_t p0){
+/* 2: Attribute TString::_parent */
+/* 3: Attribute TString::_location */
+/* 4: Attribute TString::_symbol_cache */
+/* 5: Attribute TString::_text */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TString[] = "init var of TString";
+void INIT_ATTRIBUTES__parser___parser_nodes___TString(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TStartString;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TString;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___TStartString(void)
+val_t NEW_parser___parser_nodes___TString(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 6);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TStartString;
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TString;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___TStartString[] = "check new TStartString";
-void CHECKNEW_parser___parser_nodes___TStartString(val_t p0){
+static const char LOCATE_CHECKNEW_parser___parser_nodes___TString[] = "check new TString";
+void CHECKNEW_parser___parser_nodes___TString(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TStartString;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TString;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_TStartString_parser___lexer___TStartString___init_tk[] = "new TStartString lexer::TStartString::init_tk";
-val_t NEW_TStartString_parser___lexer___TStartString___init_tk(val_t p0){
+static const char LOCATE_NEW_TString_parser___lexer___TString___init_tk[] = "new TString lexer::TString::init_tk";
+val_t NEW_TString_parser___lexer___TString___init_tk(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1073;
-  fra.me.meth = LOCATE_NEW_TStartString_parser___lexer___TStartString___init_tk;
+  fra.me.line = 1054;
+  fra.me.meth = LOCATE_NEW_TString_parser___lexer___TString___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1073 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___TStartString();
-  INIT_ATTRIBUTES__parser___parser_nodes___TStartString(fra.me.REG[1]);
-  parser___lexer___TStartString___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TStartString(fra.me.REG[1]);
+  /* parser/lexer.nit:1054 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___TString();
+  INIT_ATTRIBUTES__parser___parser_nodes___TString(fra.me.REG[1]);
+  parser___lexer___TString___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___TString(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_NEW_TStartString_parser___parser_nodes___ANode___init[] = "new TStartString parser_nodes::ANode::init";
-val_t NEW_TStartString_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_TString_parser___parser_nodes___ANode___init[] = "new TString parser_nodes::ANode::init";
+val_t NEW_TString_parser___parser_nodes___ANode___init(void){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_TStartString_parser___parser_nodes___ANode___init;
+  fra.me.meth = LOCATE_NEW_TString_parser___parser_nodes___ANode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___TStartString();
-  INIT_ATTRIBUTES__parser___parser_nodes___TStartString(fra.me.REG[0]);
+  fra.me.REG[0] = NEW_parser___parser_nodes___TString();
+  INIT_ATTRIBUTES__parser___parser_nodes___TString(fra.me.REG[0]);
   parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TStartString(fra.me.REG[0]);
+  CHECKNEW_parser___parser_nodes___TString(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TMidString[78] = {
-  {(bigint) 3423 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TStartString[79] = {
+  {(bigint) 3895 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TMidString" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TMidString < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TMidString < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TMidString < Token: superclass typecheck marker */},
-  {(bigint) 2839 /* 6: TMidString < TokenLiteral: superclass typecheck marker */},
-  {(bigint) 3423 /* 7: TMidString < TMidString: superclass typecheck marker */},
+  {(bigint) "TStartString" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TStartString < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TStartString < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TStartString < Token: superclass typecheck marker */},
+  {(bigint) 3335 /* 6: TStartString < TokenLiteral: superclass typecheck marker */},
+  {(bigint) 3895 /* 7: TStartString < TStartString: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -47668,7 +49221,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TMidString[78] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 3 /* 19: TMidString < Object: superclass init_table position */},
+  {(bigint) 3 /* 19: TStartString < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -47712,7 +49265,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TMidString[78] = {
   {(bigint) parser___parser_prod___Token___replace_child},
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) parser___parser_prod___Token___visit_all},
-  {(bigint) 2 /* 63: TMidString < ANode: superclass init_table position */},
+  {(bigint) 2 /* 63: TStartString < ANode: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANode___location},
   {(bigint) parser___parser_nodes___ANode___hot_location},
   {(bigint) parser___parser_nodes___ANode___init},
@@ -47721,107 +49274,108 @@ const classtable_elt_t VFT_parser___parser_nodes___TMidString[78] = {
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) syntax___syntax_base___Token___to_symbol},
-  {(bigint) parser___lexer___TMidString___parser_index},
-  {(bigint) 1 /* 73: TMidString < Token: superclass init_table position */},
+  {(bigint) parser___lexer___TStartString___parser_index},
+  {(bigint) 1 /* 73: TStartString < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) 0 /* 75: TMidString < TokenLiteral: superclass init_table position */},
-  {(bigint) parser___lexer___TMidString___init_tk},
-  {(bigint) 4 /* 77: TMidString < TMidString: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TStartString < TokenLiteral: superclass init_table position */},
+  {(bigint) parser___lexer___TStartString___init_tk},
+  {(bigint) 4 /* 78: TStartString < TStartString: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute TMidString::_parent */
-/* 3: Attribute TMidString::_location */
-/* 4: Attribute TMidString::_symbol_cache */
-/* 5: Attribute TMidString::_text */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TMidString[] = "init var of TMidString";
-void INIT_ATTRIBUTES__parser___parser_nodes___TMidString(val_t p0){
+/* 2: Attribute TStartString::_parent */
+/* 3: Attribute TStartString::_location */
+/* 4: Attribute TStartString::_symbol_cache */
+/* 5: Attribute TStartString::_text */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TStartString[] = "init var of TStartString";
+void INIT_ATTRIBUTES__parser___parser_nodes___TStartString(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TMidString;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TStartString;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___TMidString(void)
+val_t NEW_parser___parser_nodes___TStartString(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 6);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TMidString;
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TStartString;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___TMidString[] = "check new TMidString";
-void CHECKNEW_parser___parser_nodes___TMidString(val_t p0){
+static const char LOCATE_CHECKNEW_parser___parser_nodes___TStartString[] = "check new TStartString";
+void CHECKNEW_parser___parser_nodes___TStartString(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TMidString;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TStartString;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_TMidString_parser___lexer___TMidString___init_tk[] = "new TMidString lexer::TMidString::init_tk";
-val_t NEW_TMidString_parser___lexer___TMidString___init_tk(val_t p0){
+static const char LOCATE_NEW_TStartString_parser___lexer___TStartString___init_tk[] = "new TStartString lexer::TStartString::init_tk";
+val_t NEW_TStartString_parser___lexer___TStartString___init_tk(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1085;
-  fra.me.meth = LOCATE_NEW_TMidString_parser___lexer___TMidString___init_tk;
+  fra.me.line = 1066;
+  fra.me.meth = LOCATE_NEW_TStartString_parser___lexer___TStartString___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1085 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___TMidString();
-  INIT_ATTRIBUTES__parser___parser_nodes___TMidString(fra.me.REG[1]);
-  parser___lexer___TMidString___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TMidString(fra.me.REG[1]);
+  /* parser/lexer.nit:1066 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___TStartString();
+  INIT_ATTRIBUTES__parser___parser_nodes___TStartString(fra.me.REG[1]);
+  parser___lexer___TStartString___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___TStartString(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_NEW_TMidString_parser___parser_nodes___ANode___init[] = "new TMidString parser_nodes::ANode::init";
-val_t NEW_TMidString_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_TStartString_parser___parser_nodes___ANode___init[] = "new TStartString parser_nodes::ANode::init";
+val_t NEW_TStartString_parser___parser_nodes___ANode___init(void){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_TMidString_parser___parser_nodes___ANode___init;
+  fra.me.meth = LOCATE_NEW_TStartString_parser___parser_nodes___ANode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___TMidString();
-  INIT_ATTRIBUTES__parser___parser_nodes___TMidString(fra.me.REG[0]);
+  fra.me.REG[0] = NEW_parser___parser_nodes___TStartString();
+  INIT_ATTRIBUTES__parser___parser_nodes___TStartString(fra.me.REG[0]);
   parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TMidString(fra.me.REG[0]);
+  CHECKNEW_parser___parser_nodes___TStartString(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TEndString[77] = {
-  {(bigint) 2911 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TMidString[79] = {
+  {(bigint) 3939 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TEndString" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TEndString < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TEndString < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TEndString < Token: superclass typecheck marker */},
-  {(bigint) 2911 /* 6: TEndString < TEndString: superclass typecheck marker */},
-  {0} /* Class Hole :( */,
+  {(bigint) "TMidString" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TMidString < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TMidString < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TMidString < Token: superclass typecheck marker */},
+  {(bigint) 3335 /* 6: TMidString < TokenLiteral: superclass typecheck marker */},
+  {(bigint) 3939 /* 7: TMidString < TMidString: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -47833,7 +49387,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TEndString[77] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 2 /* 19: TEndString < Object: superclass init_table position */},
+  {(bigint) 3 /* 19: TMidString < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -47851,7 +49405,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TEndString[77] = {
   {(bigint) standard___file___Object___stderr},
   {(bigint) standard___stream___Object___poll},
   {(bigint) standard___stream___Object___intern_poll},
-  {(bigint) parser___parser_nodes___Token___to_s},
+  {(bigint) parser___parser_nodes___TokenLiteral___to_s},
   {(bigint) standard___string___Object___native_class_name},
   {(bigint) standard___string___Object___class_name},
   {(bigint) standard___string___Object___inspect},
@@ -47877,7 +49431,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TEndString[77] = {
   {(bigint) parser___parser_prod___Token___replace_child},
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) parser___parser_prod___Token___visit_all},
-  {(bigint) 1 /* 63: TEndString < ANode: superclass init_table position */},
+  {(bigint) 2 /* 63: TMidString < ANode: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANode___location},
   {(bigint) parser___parser_nodes___ANode___hot_location},
   {(bigint) parser___parser_nodes___ANode___init},
@@ -47886,105 +49440,107 @@ const classtable_elt_t VFT_parser___parser_nodes___TEndString[77] = {
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) syntax___syntax_base___Token___to_symbol},
-  {(bigint) parser___lexer___TEndString___parser_index},
-  {(bigint) 0 /* 73: TEndString < Token: superclass init_table position */},
+  {(bigint) parser___lexer___TMidString___parser_index},
+  {(bigint) 1 /* 73: TMidString < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) parser___lexer___TEndString___init_tk},
-  {(bigint) 3 /* 76: TEndString < TEndString: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) 0 /* 76: TMidString < TokenLiteral: superclass init_table position */},
+  {(bigint) parser___lexer___TMidString___init_tk},
+  {(bigint) 4 /* 78: TMidString < TMidString: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute TEndString::_parent */
-/* 3: Attribute TEndString::_location */
-/* 4: Attribute TEndString::_symbol_cache */
-/* 5: Attribute TEndString::_text */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TEndString[] = "init var of TEndString";
-void INIT_ATTRIBUTES__parser___parser_nodes___TEndString(val_t p0){
+/* 2: Attribute TMidString::_parent */
+/* 3: Attribute TMidString::_location */
+/* 4: Attribute TMidString::_symbol_cache */
+/* 5: Attribute TMidString::_text */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TMidString[] = "init var of TMidString";
+void INIT_ATTRIBUTES__parser___parser_nodes___TMidString(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TEndString;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TMidString;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___TEndString(void)
+val_t NEW_parser___parser_nodes___TMidString(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 6);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TEndString;
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TMidString;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___TEndString[] = "check new TEndString";
-void CHECKNEW_parser___parser_nodes___TEndString(val_t p0){
+static const char LOCATE_CHECKNEW_parser___parser_nodes___TMidString[] = "check new TMidString";
+void CHECKNEW_parser___parser_nodes___TMidString(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TEndString;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TMidString;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_TEndString_parser___lexer___TEndString___init_tk[] = "new TEndString lexer::TEndString::init_tk";
-val_t NEW_TEndString_parser___lexer___TEndString___init_tk(val_t p0){
+static const char LOCATE_NEW_TMidString_parser___lexer___TMidString___init_tk[] = "new TMidString lexer::TMidString::init_tk";
+val_t NEW_TMidString_parser___lexer___TMidString___init_tk(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  int init_table[4] = {0, 0, 0, 0};
+  int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1097;
-  fra.me.meth = LOCATE_NEW_TEndString_parser___lexer___TEndString___init_tk;
+  fra.me.line = 1078;
+  fra.me.meth = LOCATE_NEW_TMidString_parser___lexer___TMidString___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1097 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___TEndString();
-  INIT_ATTRIBUTES__parser___parser_nodes___TEndString(fra.me.REG[1]);
-  parser___lexer___TEndString___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TEndString(fra.me.REG[1]);
+  /* parser/lexer.nit:1078 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___TMidString();
+  INIT_ATTRIBUTES__parser___parser_nodes___TMidString(fra.me.REG[1]);
+  parser___lexer___TMidString___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___TMidString(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_NEW_TEndString_parser___parser_nodes___ANode___init[] = "new TEndString parser_nodes::ANode::init";
-val_t NEW_TEndString_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_TMidString_parser___parser_nodes___ANode___init[] = "new TMidString parser_nodes::ANode::init";
+val_t NEW_TMidString_parser___parser_nodes___ANode___init(void){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  int init_table[4] = {0, 0, 0, 0};
+  int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_TEndString_parser___parser_nodes___ANode___init;
+  fra.me.meth = LOCATE_NEW_TMidString_parser___parser_nodes___ANode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___TEndString();
-  INIT_ATTRIBUTES__parser___parser_nodes___TEndString(fra.me.REG[0]);
+  fra.me.REG[0] = NEW_parser___parser_nodes___TMidString();
+  INIT_ATTRIBUTES__parser___parser_nodes___TMidString(fra.me.REG[0]);
   parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TEndString(fra.me.REG[0]);
+  CHECKNEW_parser___parser_nodes___TMidString(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TBadString[77] = {
-  {(bigint) 2939 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TEndString[78] = {
+  {(bigint) 3407 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TBadString" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TBadString < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TBadString < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TBadString < Token: superclass typecheck marker */},
-  {(bigint) 2939 /* 6: TBadString < TBadString: superclass typecheck marker */},
+  {(bigint) "TEndString" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TEndString < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TEndString < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TEndString < Token: superclass typecheck marker */},
+  {(bigint) 3407 /* 6: TEndString < TEndString: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -47997,7 +49553,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TBadString[77] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 2 /* 19: TBadString < Object: superclass init_table position */},
+  {(bigint) 2 /* 19: TEndString < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -48015,7 +49571,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TBadString[77] = {
   {(bigint) standard___file___Object___stderr},
   {(bigint) standard___stream___Object___poll},
   {(bigint) standard___stream___Object___intern_poll},
-  {(bigint) parser___parser_nodes___TBadString___to_s},
+  {(bigint) parser___parser_nodes___Token___to_s},
   {(bigint) standard___string___Object___native_class_name},
   {(bigint) standard___string___Object___class_name},
   {(bigint) standard___string___Object___inspect},
@@ -48041,7 +49597,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TBadString[77] = {
   {(bigint) parser___parser_prod___Token___replace_child},
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) parser___parser_prod___Token___visit_all},
-  {(bigint) 1 /* 63: TBadString < ANode: superclass init_table position */},
+  {(bigint) 1 /* 63: TEndString < ANode: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANode___location},
   {(bigint) parser___parser_nodes___ANode___hot_location},
   {(bigint) parser___parser_nodes___ANode___init},
@@ -48050,105 +49606,106 @@ const classtable_elt_t VFT_parser___parser_nodes___TBadString[77] = {
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) syntax___syntax_base___Token___to_symbol},
-  {(bigint) parser___lexer___TBadString___parser_index},
-  {(bigint) 0 /* 73: TBadString < Token: superclass init_table position */},
+  {(bigint) parser___lexer___TEndString___parser_index},
+  {(bigint) 0 /* 73: TEndString < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) parser___lexer___TBadString___init_tk},
-  {(bigint) 3 /* 76: TBadString < TBadString: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) parser___lexer___TEndString___init_tk},
+  {(bigint) 3 /* 77: TEndString < TEndString: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute TBadString::_parent */
-/* 3: Attribute TBadString::_location */
-/* 4: Attribute TBadString::_symbol_cache */
-/* 5: Attribute TBadString::_text */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TBadString[] = "init var of TBadString";
-void INIT_ATTRIBUTES__parser___parser_nodes___TBadString(val_t p0){
+/* 2: Attribute TEndString::_parent */
+/* 3: Attribute TEndString::_location */
+/* 4: Attribute TEndString::_symbol_cache */
+/* 5: Attribute TEndString::_text */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TEndString[] = "init var of TEndString";
+void INIT_ATTRIBUTES__parser___parser_nodes___TEndString(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TBadString;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TEndString;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___TBadString(void)
+val_t NEW_parser___parser_nodes___TEndString(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 6);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TBadString;
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TEndString;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___TBadString[] = "check new TBadString";
-void CHECKNEW_parser___parser_nodes___TBadString(val_t p0){
+static const char LOCATE_CHECKNEW_parser___parser_nodes___TEndString[] = "check new TEndString";
+void CHECKNEW_parser___parser_nodes___TEndString(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TBadString;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TEndString;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_TBadString_parser___lexer___TBadString___init_tk[] = "new TBadString lexer::TBadString::init_tk";
-val_t NEW_TBadString_parser___lexer___TBadString___init_tk(val_t p0){
+static const char LOCATE_NEW_TEndString_parser___lexer___TEndString___init_tk[] = "new TEndString lexer::TEndString::init_tk";
+val_t NEW_TEndString_parser___lexer___TEndString___init_tk(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1121;
-  fra.me.meth = LOCATE_NEW_TBadString_parser___lexer___TBadString___init_tk;
+  fra.me.line = 1090;
+  fra.me.meth = LOCATE_NEW_TEndString_parser___lexer___TEndString___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1121 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___TBadString();
-  INIT_ATTRIBUTES__parser___parser_nodes___TBadString(fra.me.REG[1]);
-  parser___lexer___TBadString___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TBadString(fra.me.REG[1]);
+  /* parser/lexer.nit:1090 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___TEndString();
+  INIT_ATTRIBUTES__parser___parser_nodes___TEndString(fra.me.REG[1]);
+  parser___lexer___TEndString___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___TEndString(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_NEW_TBadString_parser___parser_nodes___ANode___init[] = "new TBadString parser_nodes::ANode::init";
-val_t NEW_TBadString_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_TEndString_parser___parser_nodes___ANode___init[] = "new TEndString parser_nodes::ANode::init";
+val_t NEW_TEndString_parser___parser_nodes___ANode___init(void){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_TBadString_parser___parser_nodes___ANode___init;
+  fra.me.meth = LOCATE_NEW_TEndString_parser___parser_nodes___ANode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___TBadString();
-  INIT_ATTRIBUTES__parser___parser_nodes___TBadString(fra.me.REG[0]);
+  fra.me.REG[0] = NEW_parser___parser_nodes___TEndString();
+  INIT_ATTRIBUTES__parser___parser_nodes___TEndString(fra.me.REG[0]);
   parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TBadString(fra.me.REG[0]);
+  CHECKNEW_parser___parser_nodes___TEndString(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TBadChar[77] = {
-  {(bigint) 2943 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TBadString[78] = {
+  {(bigint) 3435 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TBadChar" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TBadChar < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TBadChar < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TBadChar < Token: superclass typecheck marker */},
-  {(bigint) 2943 /* 6: TBadChar < TBadChar: superclass typecheck marker */},
+  {(bigint) "TBadString" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TBadString < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TBadString < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TBadString < Token: superclass typecheck marker */},
+  {(bigint) 3435 /* 6: TBadString < TBadString: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -48161,7 +49718,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TBadChar[77] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 2 /* 19: TBadChar < Object: superclass init_table position */},
+  {(bigint) 2 /* 19: TBadString < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -48179,7 +49736,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TBadChar[77] = {
   {(bigint) standard___file___Object___stderr},
   {(bigint) standard___stream___Object___poll},
   {(bigint) standard___stream___Object___intern_poll},
-  {(bigint) parser___parser_nodes___TBadChar___to_s},
+  {(bigint) parser___parser_nodes___TBadString___to_s},
   {(bigint) standard___string___Object___native_class_name},
   {(bigint) standard___string___Object___class_name},
   {(bigint) standard___string___Object___inspect},
@@ -48205,7 +49762,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TBadChar[77] = {
   {(bigint) parser___parser_prod___Token___replace_child},
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) parser___parser_prod___Token___visit_all},
-  {(bigint) 1 /* 63: TBadChar < ANode: superclass init_table position */},
+  {(bigint) 1 /* 63: TBadString < ANode: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANode___location},
   {(bigint) parser___parser_nodes___ANode___hot_location},
   {(bigint) parser___parser_nodes___ANode___init},
@@ -48214,105 +49771,106 @@ const classtable_elt_t VFT_parser___parser_nodes___TBadChar[77] = {
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) syntax___syntax_base___Token___to_symbol},
-  {(bigint) parser___lexer___TBadChar___parser_index},
-  {(bigint) 0 /* 73: TBadChar < Token: superclass init_table position */},
+  {(bigint) parser___lexer___TBadString___parser_index},
+  {(bigint) 0 /* 73: TBadString < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) parser___lexer___TBadChar___init_tk},
-  {(bigint) 3 /* 76: TBadChar < TBadChar: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) parser___lexer___TBadString___init_tk},
+  {(bigint) 3 /* 77: TBadString < TBadString: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute TBadChar::_parent */
-/* 3: Attribute TBadChar::_location */
-/* 4: Attribute TBadChar::_symbol_cache */
-/* 5: Attribute TBadChar::_text */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TBadChar[] = "init var of TBadChar";
-void INIT_ATTRIBUTES__parser___parser_nodes___TBadChar(val_t p0){
+/* 2: Attribute TBadString::_parent */
+/* 3: Attribute TBadString::_location */
+/* 4: Attribute TBadString::_symbol_cache */
+/* 5: Attribute TBadString::_text */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TBadString[] = "init var of TBadString";
+void INIT_ATTRIBUTES__parser___parser_nodes___TBadString(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TBadChar;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TBadString;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___TBadChar(void)
+val_t NEW_parser___parser_nodes___TBadString(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 6);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TBadChar;
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TBadString;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___TBadChar[] = "check new TBadChar";
-void CHECKNEW_parser___parser_nodes___TBadChar(val_t p0){
+static const char LOCATE_CHECKNEW_parser___parser_nodes___TBadString[] = "check new TBadString";
+void CHECKNEW_parser___parser_nodes___TBadString(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TBadChar;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TBadString;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_TBadChar_parser___lexer___TBadChar___init_tk[] = "new TBadChar lexer::TBadChar::init_tk";
-val_t NEW_TBadChar_parser___lexer___TBadChar___init_tk(val_t p0){
+static const char LOCATE_NEW_TBadString_parser___lexer___TBadString___init_tk[] = "new TBadString lexer::TBadString::init_tk";
+val_t NEW_TBadString_parser___lexer___TBadString___init_tk(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1109;
-  fra.me.meth = LOCATE_NEW_TBadChar_parser___lexer___TBadChar___init_tk;
+  fra.me.line = 1114;
+  fra.me.meth = LOCATE_NEW_TBadString_parser___lexer___TBadString___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1109 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___TBadChar();
-  INIT_ATTRIBUTES__parser___parser_nodes___TBadChar(fra.me.REG[1]);
-  parser___lexer___TBadChar___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TBadChar(fra.me.REG[1]);
+  /* parser/lexer.nit:1114 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___TBadString();
+  INIT_ATTRIBUTES__parser___parser_nodes___TBadString(fra.me.REG[1]);
+  parser___lexer___TBadString___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___TBadString(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_NEW_TBadChar_parser___parser_nodes___ANode___init[] = "new TBadChar parser_nodes::ANode::init";
-val_t NEW_TBadChar_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_TBadString_parser___parser_nodes___ANode___init[] = "new TBadString parser_nodes::ANode::init";
+val_t NEW_TBadString_parser___parser_nodes___ANode___init(void){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_TBadChar_parser___parser_nodes___ANode___init;
+  fra.me.meth = LOCATE_NEW_TBadString_parser___parser_nodes___ANode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___TBadChar();
-  INIT_ATTRIBUTES__parser___parser_nodes___TBadChar(fra.me.REG[0]);
+  fra.me.REG[0] = NEW_parser___parser_nodes___TBadString();
+  INIT_ATTRIBUTES__parser___parser_nodes___TBadString(fra.me.REG[0]);
   parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___TBadChar(fra.me.REG[0]);
+  CHECKNEW_parser___parser_nodes___TBadString(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___TExternCodeSegment[78] = {
-  {(bigint) 2903 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___TBadChar[78] = {
+  {(bigint) 3439 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "TExternCodeSegment" /* 2: Class Name */},
-  {(bigint) 3 /* 3: TExternCodeSegment < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: TExternCodeSegment < ANode: superclass typecheck marker */},
-  {(bigint) 335 /* 5: TExternCodeSegment < Token: superclass typecheck marker */},
-  {(bigint) 2903 /* 6: TExternCodeSegment < TExternCodeSegment: superclass typecheck marker */},
+  {(bigint) "TBadChar" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TBadChar < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TBadChar < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TBadChar < Token: superclass typecheck marker */},
+  {(bigint) 3439 /* 6: TBadChar < TBadChar: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -48325,7 +49883,7 @@ const classtable_elt_t VFT_parser___parser_nodes___TExternCodeSegment[78] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 2 /* 19: TExternCodeSegment < Object: superclass init_table position */},
+  {(bigint) 2 /* 19: TBadChar < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -48343,7 +49901,172 @@ const classtable_elt_t VFT_parser___parser_nodes___TExternCodeSegment[78] = {
   {(bigint) standard___file___Object___stderr},
   {(bigint) standard___stream___Object___poll},
   {(bigint) standard___stream___Object___intern_poll},
-  {(bigint) parser___parser_nodes___Token___to_s},
+  {(bigint) parser___parser_nodes___TBadChar___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___Token___replace_child},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) parser___parser_prod___Token___visit_all},
+  {(bigint) 1 /* 63: TBadChar < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) syntax___syntax_base___Token___to_symbol},
+  {(bigint) parser___lexer___TBadChar___parser_index},
+  {(bigint) 0 /* 73: TBadChar < Token: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) parser___lexer___TBadChar___init_tk},
+  {(bigint) 3 /* 77: TBadChar < TBadChar: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute TBadChar::_parent */
+/* 3: Attribute TBadChar::_location */
+/* 4: Attribute TBadChar::_symbol_cache */
+/* 5: Attribute TBadChar::_text */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TBadChar[] = "init var of TBadChar";
+void INIT_ATTRIBUTES__parser___parser_nodes___TBadChar(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___TBadChar;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___TBadChar(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 6);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___TBadChar;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___TBadChar[] = "check new TBadChar";
+void CHECKNEW_parser___parser_nodes___TBadChar(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___TBadChar;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_TBadChar_parser___lexer___TBadChar___init_tk[] = "new TBadChar lexer::TBadChar::init_tk";
+val_t NEW_TBadChar_parser___lexer___TBadChar___init_tk(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1126;
+  fra.me.meth = LOCATE_NEW_TBadChar_parser___lexer___TBadChar___init_tk;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/lexer.nit:1126 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___TBadChar();
+  INIT_ATTRIBUTES__parser___parser_nodes___TBadChar(fra.me.REG[1]);
+  parser___lexer___TBadChar___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___TBadChar(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_NEW_TBadChar_parser___parser_nodes___ANode___init[] = "new TBadChar parser_nodes::ANode::init";
+val_t NEW_TBadChar_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_TBadChar_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___TBadChar();
+  INIT_ATTRIBUTES__parser___parser_nodes___TBadChar(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___TBadChar(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___parser_nodes___TExternCodeSegment[79] = {
+  {(bigint) 3399 /* 0: Identity */},
+  {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "TExternCodeSegment" /* 2: Class Name */},
+  {(bigint) 3 /* 3: TExternCodeSegment < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: TExternCodeSegment < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: TExternCodeSegment < Token: superclass typecheck marker */},
+  {(bigint) 3399 /* 6: TExternCodeSegment < TExternCodeSegment: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 2 /* 19: TExternCodeSegment < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) parser___parser_nodes___Token___to_s},
   {(bigint) standard___string___Object___native_class_name},
   {(bigint) standard___string___Object___class_name},
   {(bigint) standard___string___Object___inspect},
@@ -48381,9 +50104,10 @@ const classtable_elt_t VFT_parser___parser_nodes___TExternCodeSegment[78] = {
   {(bigint) parser___lexer___TExternCodeSegment___parser_index},
   {(bigint) 0 /* 73: TExternCodeSegment < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
+  {(bigint) parser___lexer___Token___text__eq},
   {(bigint) syntax___extern_inline___TExternCodeSegment___code},
   {(bigint) parser___lexer___TExternCodeSegment___init_tk},
-  {(bigint) 3 /* 77: TExternCodeSegment < TExternCodeSegment: superclass init_table position */},
+  {(bigint) 3 /* 78: TExternCodeSegment < TExternCodeSegment: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -48433,7 +50157,7 @@ val_t NEW_TExternCodeSegment_parser___lexer___TExternCodeSegment___init_tk(val_t
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1133;
+  fra.me.line = 1138;
   fra.me.meth = LOCATE_NEW_TExternCodeSegment_parser___lexer___TExternCodeSegment___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -48441,7 +50165,7 @@ val_t NEW_TExternCodeSegment_parser___lexer___TExternCodeSegment___init_tk(val_t
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1133 */
+  /* parser/lexer.nit:1138 */
   fra.me.REG[1] = NEW_parser___parser_nodes___TExternCodeSegment();
   INIT_ATTRIBUTES__parser___parser_nodes___TExternCodeSegment(fra.me.REG[1]);
   parser___lexer___TExternCodeSegment___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -48471,13 +50195,13 @@ val_t NEW_TExternCodeSegment_parser___parser_nodes___ANode___init(void){
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_parser___parser_nodes___EOF[78] = {
-  {(bigint) 3175 /* 0: Identity */},
+  {(bigint) 3675 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "EOF" /* 2: Class Name */},
   {(bigint) 3 /* 3: EOF < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: EOF < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: EOF < Token: superclass typecheck marker */},
-  {(bigint) 3175 /* 6: EOF < EOF: superclass typecheck marker */},
+  {(bigint) 3675 /* 6: EOF < EOF: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -48546,9 +50270,9 @@ const classtable_elt_t VFT_parser___parser_nodes___EOF[78] = {
   {(bigint) parser___lexer___EOF___parser_index},
   {(bigint) 0 /* 73: EOF < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) parser___lexer___EOF___init},
-  {(bigint) 3 /* 76: EOF < EOF: superclass init_table position */},
-  {(bigint) parser___parser_nodes___EOF___noinit},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) parser___lexer___EOF___init_tk},
+  {(bigint) 3 /* 77: EOF < EOF: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -48591,59 +50315,59 @@ void CHECKNEW_parser___parser_nodes___EOF(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_EOF_parser___lexer___EOF___init[] = "new EOF lexer::EOF::init";
-val_t NEW_EOF_parser___lexer___EOF___init(val_t p0){
+static const char LOCATE_NEW_EOF_parser___lexer___EOF___init_tk[] = "new EOF lexer::EOF::init_tk";
+val_t NEW_EOF_parser___lexer___EOF___init_tk(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1146;
-  fra.me.meth = LOCATE_NEW_EOF_parser___lexer___EOF___init;
+  fra.me.line = 1151;
+  fra.me.meth = LOCATE_NEW_EOF_parser___lexer___EOF___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1146 */
+  /* parser/lexer.nit:1151 */
   fra.me.REG[1] = NEW_parser___parser_nodes___EOF();
   INIT_ATTRIBUTES__parser___parser_nodes___EOF(fra.me.REG[1]);
-  parser___lexer___EOF___init(fra.me.REG[1], fra.me.REG[0], init_table);
+  parser___lexer___EOF___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
   CHECKNEW_parser___parser_nodes___EOF(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_NEW_EOF_parser___parser_nodes___EOF___noinit[] = "new EOF parser_nodes::EOF::noinit";
-val_t NEW_EOF_parser___parser_nodes___EOF___noinit(void){
+static const char LOCATE_NEW_EOF_parser___parser_nodes___ANode___init[] = "new EOF parser_nodes::ANode::init";
+val_t NEW_EOF_parser___parser_nodes___ANode___init(void){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 382;
-  fra.me.meth = LOCATE_NEW_EOF_parser___parser_nodes___EOF___noinit;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_EOF_parser___parser_nodes___ANode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_nodes.nit:382 */
+  /* parser/parser_nodes.nit:32 */
   fra.me.REG[0] = NEW_parser___parser_nodes___EOF();
   INIT_ATTRIBUTES__parser___parser_nodes___EOF(fra.me.REG[0]);
-  parser___parser_nodes___EOF___noinit(fra.me.REG[0], init_table);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
   CHECKNEW_parser___parser_nodes___EOF(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AError[82] = {
-  {(bigint) 3955 /* 0: Identity */},
+const classtable_elt_t VFT_parser___parser_nodes___AError[81] = {
+  {(bigint) 4499 /* 0: Identity */},
   {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AError" /* 2: Class Name */},
   {(bigint) 3 /* 3: AError < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AError < ANode: superclass typecheck marker */},
   {(bigint) 335 /* 5: AError < Token: superclass typecheck marker */},
-  {(bigint) 3175 /* 6: AError < EOF: superclass typecheck marker */},
-  {(bigint) 3955 /* 7: AError < AError: superclass typecheck marker */},
+  {(bigint) 3675 /* 6: AError < EOF: superclass typecheck marker */},
+  {(bigint) 4499 /* 7: AError < AError: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -48711,13 +50435,12 @@ const classtable_elt_t VFT_parser___parser_nodes___AError[82] = {
   {(bigint) parser___lexer___EOF___parser_index},
   {(bigint) 0 /* 73: AError < Token: superclass init_table position */},
   {(bigint) parser___lexer___Token___text},
-  {(bigint) parser___lexer___EOF___init},
-  {(bigint) 3 /* 76: AError < EOF: superclass init_table position */},
-  {(bigint) parser___parser_nodes___EOF___noinit},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) parser___lexer___EOF___init_tk},
+  {(bigint) 3 /* 77: AError < EOF: superclass init_table position */},
   {(bigint) parser___lexer___AError___message},
   {(bigint) parser___lexer___AError___init_error},
   {(bigint) 4 /* 80: AError < AError: superclass init_table position */},
-  {(bigint) parser___parser_nodes___AError___noinit},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -48776,7 +50499,7 @@ val_t NEW_AError_parser___lexer___AError___init_error(val_t p0, val_t p1){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1156;
+  fra.me.line = 1161;
   fra.me.meth = LOCATE_NEW_AError_parser___lexer___AError___init_error;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -48786,7 +50509,7 @@ val_t NEW_AError_parser___lexer___AError___init_error(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:1156 */
+  /* parser/lexer.nit:1161 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AError();
   INIT_ATTRIBUTES__parser___parser_nodes___AError(fra.me.REG[2]);
   parser___lexer___AError___init_error(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -48794,35 +50517,534 @@ val_t NEW_AError_parser___lexer___AError___init_error(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[2];
 }
-static const char LOCATE_NEW_AError_parser___parser_nodes___AError___noinit[] = "new AError parser_nodes::AError::noinit";
-val_t NEW_AError_parser___parser_nodes___AError___noinit(void){
+static const char LOCATE_NEW_AError_parser___lexer___EOF___init_tk[] = "new AError lexer::EOF::init_tk";
+val_t NEW_AError_parser___lexer___EOF___init_tk(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1151;
+  fra.me.meth = LOCATE_NEW_AError_parser___lexer___EOF___init_tk;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/lexer.nit:1151 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___AError();
+  INIT_ATTRIBUTES__parser___parser_nodes___AError(fra.me.REG[1]);
+  parser___lexer___EOF___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AError(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_NEW_AError_parser___parser_nodes___ANode___init[] = "new AError parser_nodes::ANode::init";
+val_t NEW_AError_parser___parser_nodes___ANode___init(void){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 390;
-  fra.me.meth = LOCATE_NEW_AError_parser___parser_nodes___AError___noinit;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_AError_parser___parser_nodes___ANode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_nodes.nit:390 */
+  /* parser/parser_nodes.nit:32 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AError();
   INIT_ATTRIBUTES__parser___parser_nodes___AError(fra.me.REG[0]);
-  parser___parser_nodes___AError___noinit(fra.me.REG[0], init_table);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
   CHECKNEW_parser___parser_nodes___AError(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AModule[82] = {
-  {(bigint) 3267 /* 0: Identity */},
-  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ALexerError[84] = {
+  {(bigint) 4707 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ALexerError" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ALexerError < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: ALexerError < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: ALexerError < Token: superclass typecheck marker */},
+  {(bigint) 3675 /* 6: ALexerError < EOF: superclass typecheck marker */},
+  {(bigint) 4499 /* 7: ALexerError < AError: superclass typecheck marker */},
+  {(bigint) 4707 /* 8: ALexerError < ALexerError: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 2 /* 19: ALexerError < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) parser___parser_nodes___EOF___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___Token___replace_child},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) parser___parser_prod___Token___visit_all},
+  {(bigint) 1 /* 63: ALexerError < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) syntax___syntax_base___Token___to_symbol},
+  {(bigint) parser___lexer___EOF___parser_index},
+  {(bigint) 0 /* 73: ALexerError < Token: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) parser___lexer___EOF___init_tk},
+  {(bigint) 3 /* 77: ALexerError < EOF: superclass init_table position */},
+  {(bigint) parser___lexer___AError___message},
+  {(bigint) parser___lexer___AError___init_error},
+  {(bigint) 4 /* 80: ALexerError < AError: superclass init_table position */},
+  {(bigint) parser___lexer___ALexerError___string},
+  {(bigint) parser___lexer___ALexerError___init_lexer_error},
+  {(bigint) 5 /* 83: ALexerError < ALexerError: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ALexerError::_parent */
+/* 3: Attribute ALexerError::_location */
+/* 4: Attribute ALexerError::_symbol_cache */
+/* 5: Attribute ALexerError::_text */
+/* 6: Attribute ALexerError::_message */
+/* 7: Attribute ALexerError::_string */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ALexerError[] = "init var of ALexerError";
+void INIT_ATTRIBUTES__parser___parser_nodes___ALexerError(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ALexerError;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___ALexerError(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 8);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ALexerError;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___ALexerError[] = "check new ALexerError";
+void CHECKNEW_parser___parser_nodes___ALexerError(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___ALexerError;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___lexer___AError____message(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_message", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_parser___lexer___ALexerError____string(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_string", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ALexerError_parser___lexer___ALexerError___init_lexer_error[] = "new ALexerError lexer::ALexerError::init_lexer_error";
+val_t NEW_ALexerError_parser___lexer___ALexerError___init_lexer_error(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t tmp;
+  int init_table[6] = {0, 0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1171;
+  fra.me.meth = LOCATE_NEW_ALexerError_parser___lexer___ALexerError___init_lexer_error;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/lexer.nit:1171 */
+  fra.me.REG[3] = NEW_parser___parser_nodes___ALexerError();
+  INIT_ATTRIBUTES__parser___parser_nodes___ALexerError(fra.me.REG[3]);
+  parser___lexer___ALexerError___init_lexer_error(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
+  CHECKNEW_parser___parser_nodes___ALexerError(fra.me.REG[3]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[3];
+}
+static const char LOCATE_NEW_ALexerError_parser___lexer___AError___init_error[] = "new ALexerError lexer::AError::init_error";
+val_t NEW_ALexerError_parser___lexer___AError___init_error(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t tmp;
+  int init_table[6] = {0, 0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1161;
+  fra.me.meth = LOCATE_NEW_ALexerError_parser___lexer___AError___init_error;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/lexer.nit:1161 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___ALexerError();
+  INIT_ATTRIBUTES__parser___parser_nodes___ALexerError(fra.me.REG[2]);
+  parser___lexer___AError___init_error(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___ALexerError(fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[2];
+}
+static const char LOCATE_NEW_ALexerError_parser___parser_nodes___ANode___init[] = "new ALexerError parser_nodes::ANode::init";
+val_t NEW_ALexerError_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[6] = {0, 0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_ALexerError_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___ALexerError();
+  INIT_ATTRIBUTES__parser___parser_nodes___ALexerError(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___ALexerError(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_NEW_ALexerError_parser___lexer___EOF___init_tk[] = "new ALexerError lexer::EOF::init_tk";
+val_t NEW_ALexerError_parser___lexer___EOF___init_tk(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[6] = {0, 0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1151;
+  fra.me.meth = LOCATE_NEW_ALexerError_parser___lexer___EOF___init_tk;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/lexer.nit:1151 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___ALexerError();
+  INIT_ATTRIBUTES__parser___parser_nodes___ALexerError(fra.me.REG[1]);
+  parser___lexer___EOF___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___ALexerError(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+const classtable_elt_t VFT_parser___parser_nodes___AParserError[84] = {
+  {(bigint) 4667 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "AParserError" /* 2: Class Name */},
+  {(bigint) 3 /* 3: AParserError < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: AParserError < ANode: superclass typecheck marker */},
+  {(bigint) 335 /* 5: AParserError < Token: superclass typecheck marker */},
+  {(bigint) 3675 /* 6: AParserError < EOF: superclass typecheck marker */},
+  {(bigint) 4499 /* 7: AParserError < AError: superclass typecheck marker */},
+  {(bigint) 4667 /* 8: AParserError < AParserError: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 2 /* 19: AParserError < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) parser___parser_nodes___EOF___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___Token___replace_child},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) parser___parser_prod___Token___visit_all},
+  {(bigint) 1 /* 63: AParserError < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) syntax___syntax_base___Token___to_symbol},
+  {(bigint) parser___lexer___EOF___parser_index},
+  {(bigint) 0 /* 73: AParserError < Token: superclass init_table position */},
+  {(bigint) parser___lexer___Token___text},
+  {(bigint) parser___lexer___Token___text__eq},
+  {(bigint) parser___lexer___EOF___init_tk},
+  {(bigint) 3 /* 77: AParserError < EOF: superclass init_table position */},
+  {(bigint) parser___lexer___AError___message},
+  {(bigint) parser___lexer___AError___init_error},
+  {(bigint) 4 /* 80: AParserError < AError: superclass init_table position */},
+  {(bigint) parser___lexer___AParserError___token},
+  {(bigint) parser___lexer___AParserError___init_parser_error},
+  {(bigint) 5 /* 83: AParserError < AParserError: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute AParserError::_parent */
+/* 3: Attribute AParserError::_location */
+/* 4: Attribute AParserError::_symbol_cache */
+/* 5: Attribute AParserError::_text */
+/* 6: Attribute AParserError::_message */
+/* 7: Attribute AParserError::_token */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AParserError[] = "init var of AParserError";
+void INIT_ATTRIBUTES__parser___parser_nodes___AParserError(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AParserError;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___AParserError(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 8);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AParserError;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___AParserError[] = "check new AParserError";
+void CHECKNEW_parser___parser_nodes___AParserError(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___AParserError;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___lexer___AError____message(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_message", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_parser___lexer___AParserError____token(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_token", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_AParserError_parser___lexer___AParserError___init_parser_error[] = "new AParserError lexer::AParserError::init_parser_error";
+val_t NEW_AParserError_parser___lexer___AParserError___init_parser_error(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t tmp;
+  int init_table[6] = {0, 0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1181;
+  fra.me.meth = LOCATE_NEW_AParserError_parser___lexer___AParserError___init_parser_error;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/lexer.nit:1181 */
+  fra.me.REG[3] = NEW_parser___parser_nodes___AParserError();
+  INIT_ATTRIBUTES__parser___parser_nodes___AParserError(fra.me.REG[3]);
+  parser___lexer___AParserError___init_parser_error(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
+  CHECKNEW_parser___parser_nodes___AParserError(fra.me.REG[3]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[3];
+}
+static const char LOCATE_NEW_AParserError_parser___lexer___AError___init_error[] = "new AParserError lexer::AError::init_error";
+val_t NEW_AParserError_parser___lexer___AError___init_error(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t tmp;
+  int init_table[6] = {0, 0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1161;
+  fra.me.meth = LOCATE_NEW_AParserError_parser___lexer___AError___init_error;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/lexer.nit:1161 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___AParserError();
+  INIT_ATTRIBUTES__parser___parser_nodes___AParserError(fra.me.REG[2]);
+  parser___lexer___AError___init_error(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___AParserError(fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[2];
+}
+static const char LOCATE_NEW_AParserError_parser___parser_nodes___ANode___init[] = "new AParserError parser_nodes::ANode::init";
+val_t NEW_AParserError_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[6] = {0, 0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_AParserError_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AParserError();
+  INIT_ATTRIBUTES__parser___parser_nodes___AParserError(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AParserError(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_NEW_AParserError_parser___lexer___EOF___init_tk[] = "new AParserError lexer::EOF::init_tk";
+val_t NEW_AParserError_parser___lexer___EOF___init_tk(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[6] = {0, 0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1151;
+  fra.me.meth = LOCATE_NEW_AParserError_parser___lexer___EOF___init_tk;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/lexer.nit:1151 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___AParserError();
+  INIT_ATTRIBUTES__parser___parser_nodes___AParserError(fra.me.REG[1]);
+  parser___lexer___EOF___init_tk(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AParserError(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+const classtable_elt_t VFT_parser___parser_nodes___AModule[83] = {
+  {(bigint) 3767 /* 0: Identity */},
+  {(bigint) 11 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AModule" /* 2: Class Name */},
   {(bigint) 3 /* 3: AModule < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AModule < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AModule < Prod: superclass typecheck marker */},
-  {(bigint) 3267 /* 6: AModule < AModule: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AModule < Prod: superclass typecheck marker */},
+  {(bigint) 3767 /* 6: AModule < AModule: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -48890,10 +51112,11 @@ const classtable_elt_t VFT_parser___parser_nodes___AModule[82] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 0 /* 72: AModule < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___AModule___import_super_modules},
   {(bigint) parser___parser_prod___AModule___empty_init},
   {(bigint) parser___parser_prod___AModule___init_amodule},
-  {(bigint) 3 /* 77: AModule < AModule: superclass init_table position */},
+  {(bigint) 3 /* 78: AModule < AModule: superclass init_table position */},
   {(bigint) parser___parser_nodes___AModule___n_moduledecl},
   {(bigint) parser___parser_nodes___AModule___n_imports},
   {(bigint) parser___parser_nodes___AModule___n_extern_code_blocks},
@@ -48905,10 +51128,11 @@ const classtable_elt_t VFT_parser___parser_nodes___AModule[82] = {
 /* 3: Attribute AModule::_location */
 /* 4: Attribute AModule::_first_location */
 /* 5: Attribute AModule::_last_location */
-/* 6: Attribute AModule::_n_moduledecl */
-/* 7: Attribute AModule::_n_imports */
-/* 8: Attribute AModule::_n_extern_code_blocks */
-/* 9: Attribute AModule::_n_classdefs */
+/* 6: Attribute AModule::_n_annotations */
+/* 7: Attribute AModule::_n_moduledecl */
+/* 8: Attribute AModule::_n_imports */
+/* 9: Attribute AModule::_n_extern_code_blocks */
+/* 10: Attribute AModule::_n_classdefs */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AModule[] = "init var of AModule";
 void INIT_ATTRIBUTES__parser___parser_nodes___AModule(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -48923,16 +51147,19 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AModule(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:395 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:401 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AModule____n_moduledecl(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:396 */
+  /* parser/parser_nodes.nit:402 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___AModule____n_imports(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:397 */
+  /* parser/parser_nodes.nit:403 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:398 */
+  /* parser/parser_nodes.nit:404 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___AModule____n_classdefs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -48940,7 +51167,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AModule(val_t p0){
 val_t NEW_parser___parser_nodes___AModule(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 10);
+  obj = alloc(sizeof(val_t) * 11);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AModule;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -49048,14 +51275,14 @@ val_t NEW_AModule_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AModuledecl[80] = {
-  {(bigint) 3259 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AModuledecl[81] = {
+  {(bigint) 3759 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AModuledecl" /* 2: Class Name */},
   {(bigint) 3 /* 3: AModuledecl < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AModuledecl < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AModuledecl < Prod: superclass typecheck marker */},
-  {(bigint) 3259 /* 6: AModuledecl < AModuledecl: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AModuledecl < Prod: superclass typecheck marker */},
+  {(bigint) 3759 /* 6: AModuledecl < AModuledecl: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -49123,9 +51350,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AModuledecl[80] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 0 /* 72: AModuledecl < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) parser___parser_prod___AModuledecl___empty_init},
   {(bigint) parser___parser_prod___AModuledecl___init_amoduledecl},
-  {(bigint) 3 /* 76: AModuledecl < AModuledecl: superclass init_table position */},
+  {(bigint) 3 /* 77: AModuledecl < AModuledecl: superclass init_table position */},
   {(bigint) parser___parser_nodes___AModuledecl___n_doc},
   {(bigint) parser___parser_nodes___AModuledecl___n_kwmodule},
   {(bigint) parser___parser_nodes___AModuledecl___n_name},
@@ -49136,9 +51364,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AModuledecl[80] = {
 /* 3: Attribute AModuledecl::_location */
 /* 4: Attribute AModuledecl::_first_location */
 /* 5: Attribute AModuledecl::_last_location */
-/* 6: Attribute AModuledecl::_n_doc */
-/* 7: Attribute AModuledecl::_n_kwmodule */
-/* 8: Attribute AModuledecl::_n_name */
+/* 6: Attribute AModuledecl::_n_annotations */
+/* 7: Attribute AModuledecl::_n_doc */
+/* 8: Attribute AModuledecl::_n_kwmodule */
+/* 9: Attribute AModuledecl::_n_name */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AModuledecl[] = "init var of AModuledecl";
 void INIT_ATTRIBUTES__parser___parser_nodes___AModuledecl(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -49153,7 +51382,10 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AModuledecl(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:402 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:408 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -49161,7 +51393,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AModuledecl(val_t p0){
 val_t NEW_parser___parser_nodes___AModuledecl(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
+  obj = alloc(sizeof(val_t) * 10);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AModuledecl;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -49215,8 +51447,8 @@ val_t NEW_AModuledecl_parser___parser_prod___AModuledecl___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl[] = "new AModuledecl parser_prod::AModuledecl::init_amoduledecl";
-val_t NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+val_t NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, val_t p2, val_t p3){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t tmp;
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -49224,22 +51456,24 @@ val_t NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl(val_
   fra.me.line = 171;
   fra.me.meth = LOCATE_NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
   /* parser/parser_prod.nit:171 */
-  fra.me.REG[3] = NEW_parser___parser_nodes___AModuledecl();
-  INIT_ATTRIBUTES__parser___parser_nodes___AModuledecl(fra.me.REG[3]);
-  parser___parser_prod___AModuledecl___init_amoduledecl(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
-  CHECKNEW_parser___parser_nodes___AModuledecl(fra.me.REG[3]);
+  fra.me.REG[4] = NEW_parser___parser_nodes___AModuledecl();
+  INIT_ATTRIBUTES__parser___parser_nodes___AModuledecl(fra.me.REG[4]);
+  parser___parser_prod___AModuledecl___init_amoduledecl(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
+  CHECKNEW_parser___parser_nodes___AModuledecl(fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[3];
+  return fra.me.REG[4];
 }
 static const char LOCATE_NEW_AModuledecl_parser___parser_nodes___ANode___init[] = "new AModuledecl parser_nodes::ANode::init";
 val_t NEW_AModuledecl_parser___parser_nodes___ANode___init(void){
@@ -49262,15 +51496,15 @@ val_t NEW_AModuledecl_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AStdImport[83] = {
-  {(bigint) 3783 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AStdImport[84] = {
+  {(bigint) 4299 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AStdImport" /* 2: Class Name */},
   {(bigint) 3 /* 3: AStdImport < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AStdImport < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AStdImport < Prod: superclass typecheck marker */},
-  {(bigint) 3287 /* 6: AStdImport < AImport: superclass typecheck marker */},
-  {(bigint) 3783 /* 7: AStdImport < AStdImport: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AStdImport < Prod: superclass typecheck marker */},
+  {(bigint) 3787 /* 6: AStdImport < AImport: superclass typecheck marker */},
+  {(bigint) 4299 /* 7: AStdImport < AStdImport: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -49337,12 +51571,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AStdImport[83] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AStdImport < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___AStdImport___module_name},
   {(bigint) syntax___mmbuilder___AStdImport___visibility_level},
-  {(bigint) 0 /* 76: AStdImport < AImport: superclass init_table position */},
+  {(bigint) 0 /* 77: AStdImport < AImport: superclass init_table position */},
   {(bigint) parser___parser_prod___AStdImport___empty_init},
   {(bigint) parser___parser_prod___AStdImport___init_astdimport},
-  {(bigint) 4 /* 79: AStdImport < AStdImport: superclass init_table position */},
+  {(bigint) 4 /* 80: AStdImport < AStdImport: superclass init_table position */},
   {(bigint) parser___parser_nodes___AStdImport___n_visibility},
   {(bigint) parser___parser_nodes___AStdImport___n_kwimport},
   {(bigint) parser___parser_nodes___AStdImport___n_name},
@@ -49353,26 +51588,33 @@ const classtable_elt_t VFT_parser___parser_nodes___AStdImport[83] = {
 /* 3: Attribute AStdImport::_location */
 /* 4: Attribute AStdImport::_first_location */
 /* 5: Attribute AStdImport::_last_location */
-/* 6: Attribute AStdImport::_n_visibility */
-/* 7: Attribute AStdImport::_n_kwimport */
-/* 8: Attribute AStdImport::_n_name */
+/* 6: Attribute AStdImport::_n_annotations */
+/* 7: Attribute AStdImport::_n_visibility */
+/* 8: Attribute AStdImport::_n_kwimport */
+/* 9: Attribute AStdImport::_n_name */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AStdImport[] = "init var of AStdImport";
 void INIT_ATTRIBUTES__parser___parser_nodes___AStdImport(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AStdImport;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AStdImport(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
+  obj = alloc(sizeof(val_t) * 10);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AStdImport;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -49416,13 +51658,13 @@ val_t NEW_AStdImport_parser___parser_prod___AStdImport___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 232;
+  fra.me.line = 250;
   fra.me.meth = LOCATE_NEW_AStdImport_parser___parser_prod___AStdImport___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:232 */
+  /* parser/parser_prod.nit:250 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AStdImport();
   INIT_ATTRIBUTES__parser___parser_nodes___AStdImport(fra.me.REG[0]);
   parser___parser_prod___AStdImport___empty_init(fra.me.REG[0], init_table);
@@ -49431,31 +51673,33 @@ val_t NEW_AStdImport_parser___parser_prod___AStdImport___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport[] = "new AStdImport parser_prod::AStdImport::init_astdimport";
-val_t NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+val_t NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val_t p2, val_t p3){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 234;
+  fra.me.line = 252;
   fra.me.meth = LOCATE_NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:234 */
-  fra.me.REG[3] = NEW_parser___parser_nodes___AStdImport();
-  INIT_ATTRIBUTES__parser___parser_nodes___AStdImport(fra.me.REG[3]);
-  parser___parser_prod___AStdImport___init_astdimport(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
-  CHECKNEW_parser___parser_nodes___AStdImport(fra.me.REG[3]);
+  fra.me.REG[3] = p3;
+  /* parser/parser_prod.nit:252 */
+  fra.me.REG[4] = NEW_parser___parser_nodes___AStdImport();
+  INIT_ATTRIBUTES__parser___parser_nodes___AStdImport(fra.me.REG[4]);
+  parser___parser_prod___AStdImport___init_astdimport(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
+  CHECKNEW_parser___parser_nodes___AStdImport(fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[3];
+  return fra.me.REG[4];
 }
 static const char LOCATE_NEW_AStdImport_parser___parser_nodes___ANode___init[] = "new AStdImport parser_nodes::ANode::init";
 val_t NEW_AStdImport_parser___parser_nodes___ANode___init(void){
@@ -49478,15 +51722,15 @@ val_t NEW_AStdImport_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ANoImport[83] = {
-  {(bigint) 3867 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ANoImport[84] = {
+  {(bigint) 4383 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ANoImport" /* 2: Class Name */},
   {(bigint) 3 /* 3: ANoImport < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ANoImport < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ANoImport < Prod: superclass typecheck marker */},
-  {(bigint) 3287 /* 6: ANoImport < AImport: superclass typecheck marker */},
-  {(bigint) 3867 /* 7: ANoImport < ANoImport: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ANoImport < Prod: superclass typecheck marker */},
+  {(bigint) 3787 /* 6: ANoImport < AImport: superclass typecheck marker */},
+  {(bigint) 4383 /* 7: ANoImport < ANoImport: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -49553,12 +51797,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ANoImport[83] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ANoImport < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANoImport___module_name},
   {(bigint) syntax___mmbuilder___AImport___visibility_level},
-  {(bigint) 0 /* 76: ANoImport < AImport: superclass init_table position */},
+  {(bigint) 0 /* 77: ANoImport < AImport: superclass init_table position */},
   {(bigint) parser___parser_prod___ANoImport___empty_init},
   {(bigint) parser___parser_prod___ANoImport___init_anoimport},
-  {(bigint) 4 /* 79: ANoImport < ANoImport: superclass init_table position */},
+  {(bigint) 4 /* 80: ANoImport < ANoImport: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANoImport___n_visibility},
   {(bigint) parser___parser_nodes___ANoImport___n_kwimport},
   {(bigint) parser___parser_nodes___ANoImport___n_kwend},
@@ -49569,26 +51814,33 @@ const classtable_elt_t VFT_parser___parser_nodes___ANoImport[83] = {
 /* 3: Attribute ANoImport::_location */
 /* 4: Attribute ANoImport::_first_location */
 /* 5: Attribute ANoImport::_last_location */
-/* 6: Attribute ANoImport::_n_visibility */
-/* 7: Attribute ANoImport::_n_kwimport */
-/* 8: Attribute ANoImport::_n_kwend */
+/* 6: Attribute ANoImport::_n_annotations */
+/* 7: Attribute ANoImport::_n_visibility */
+/* 8: Attribute ANoImport::_n_kwimport */
+/* 9: Attribute ANoImport::_n_kwend */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ANoImport[] = "init var of ANoImport";
 void INIT_ATTRIBUTES__parser___parser_nodes___ANoImport(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ANoImport;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ANoImport(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
+  obj = alloc(sizeof(val_t) * 10);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ANoImport;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -49632,13 +51884,13 @@ val_t NEW_ANoImport_parser___parser_prod___ANoImport___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 291;
+  fra.me.line = 327;
   fra.me.meth = LOCATE_NEW_ANoImport_parser___parser_prod___ANoImport___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:291 */
+  /* parser/parser_prod.nit:327 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ANoImport();
   INIT_ATTRIBUTES__parser___parser_nodes___ANoImport(fra.me.REG[0]);
   parser___parser_prod___ANoImport___empty_init(fra.me.REG[0], init_table);
@@ -49653,7 +51905,7 @@ val_t NEW_ANoImport_parser___parser_prod___ANoImport___init_anoimport(val_t p0,
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 293;
+  fra.me.line = 329;
   fra.me.meth = LOCATE_NEW_ANoImport_parser___parser_prod___ANoImport___init_anoimport;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -49665,7 +51917,7 @@ val_t NEW_ANoImport_parser___parser_prod___ANoImport___init_anoimport(val_t p0,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:293 */
+  /* parser/parser_prod.nit:329 */
   fra.me.REG[3] = NEW_parser___parser_nodes___ANoImport();
   INIT_ATTRIBUTES__parser___parser_nodes___ANoImport(fra.me.REG[3]);
   parser___parser_prod___ANoImport___init_anoimport(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -49694,15 +51946,15 @@ val_t NEW_ANoImport_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___APublicVisibility[79] = {
-  {(bigint) 3827 /* 0: Identity */},
-  {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___APublicVisibility[80] = {
+  {(bigint) 4343 /* 0: Identity */},
+  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "APublicVisibility" /* 2: Class Name */},
   {(bigint) 3 /* 3: APublicVisibility < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: APublicVisibility < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: APublicVisibility < Prod: superclass typecheck marker */},
-  {(bigint) 3231 /* 6: APublicVisibility < AVisibility: superclass typecheck marker */},
-  {(bigint) 3827 /* 7: APublicVisibility < APublicVisibility: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: APublicVisibility < Prod: superclass typecheck marker */},
+  {(bigint) 3731 /* 6: APublicVisibility < AVisibility: superclass typecheck marker */},
+  {(bigint) 4343 /* 7: APublicVisibility < APublicVisibility: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -49769,11 +52021,12 @@ const classtable_elt_t VFT_parser___parser_nodes___APublicVisibility[79] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: APublicVisibility < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___APublicVisibility___level},
-  {(bigint) 0 /* 75: APublicVisibility < AVisibility: superclass init_table position */},
+  {(bigint) 0 /* 76: APublicVisibility < AVisibility: superclass init_table position */},
   {(bigint) parser___parser_prod___APublicVisibility___empty_init},
   {(bigint) parser___parser_prod___APublicVisibility___init_apublicvisibility},
-  {(bigint) 4 /* 78: APublicVisibility < APublicVisibility: superclass init_table position */},
+  {(bigint) 4 /* 79: APublicVisibility < APublicVisibility: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -49781,23 +52034,30 @@ const classtable_elt_t VFT_parser___parser_nodes___APublicVisibility[79] = {
 /* 3: Attribute APublicVisibility::_location */
 /* 4: Attribute APublicVisibility::_first_location */
 /* 5: Attribute APublicVisibility::_last_location */
+/* 6: Attribute APublicVisibility::_n_annotations */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___APublicVisibility[] = "init var of APublicVisibility";
 void INIT_ATTRIBUTES__parser___parser_nodes___APublicVisibility(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___APublicVisibility;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___APublicVisibility(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 6);
+  obj = alloc(sizeof(val_t) * 7);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___APublicVisibility;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -49823,13 +52083,13 @@ val_t NEW_APublicVisibility_parser___parser_prod___APublicVisibility___empty_ini
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 350;
+  fra.me.line = 386;
   fra.me.meth = LOCATE_NEW_APublicVisibility_parser___parser_prod___APublicVisibility___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:350 */
+  /* parser/parser_prod.nit:386 */
   fra.me.REG[0] = NEW_parser___parser_nodes___APublicVisibility();
   INIT_ATTRIBUTES__parser___parser_nodes___APublicVisibility(fra.me.REG[0]);
   parser___parser_prod___APublicVisibility___empty_init(fra.me.REG[0], init_table);
@@ -49844,13 +52104,13 @@ val_t NEW_APublicVisibility_parser___parser_prod___APublicVisibility___init_apub
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 352;
+  fra.me.line = 388;
   fra.me.meth = LOCATE_NEW_APublicVisibility_parser___parser_prod___APublicVisibility___init_apublicvisibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:352 */
+  /* parser/parser_prod.nit:388 */
   fra.me.REG[0] = NEW_parser___parser_nodes___APublicVisibility();
   INIT_ATTRIBUTES__parser___parser_nodes___APublicVisibility(fra.me.REG[0]);
   parser___parser_prod___APublicVisibility___init_apublicvisibility(fra.me.REG[0], init_table);
@@ -49879,15 +52139,15 @@ val_t NEW_APublicVisibility_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___APrivateVisibility[80] = {
-  {(bigint) 3843 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___APrivateVisibility[81] = {
+  {(bigint) 4359 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "APrivateVisibility" /* 2: Class Name */},
   {(bigint) 3 /* 3: APrivateVisibility < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: APrivateVisibility < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: APrivateVisibility < Prod: superclass typecheck marker */},
-  {(bigint) 3231 /* 6: APrivateVisibility < AVisibility: superclass typecheck marker */},
-  {(bigint) 3843 /* 7: APrivateVisibility < APrivateVisibility: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: APrivateVisibility < Prod: superclass typecheck marker */},
+  {(bigint) 3731 /* 6: APrivateVisibility < AVisibility: superclass typecheck marker */},
+  {(bigint) 4359 /* 7: APrivateVisibility < APrivateVisibility: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -49954,11 +52214,12 @@ const classtable_elt_t VFT_parser___parser_nodes___APrivateVisibility[80] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: APrivateVisibility < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___APrivateVisibility___level},
-  {(bigint) 0 /* 75: APrivateVisibility < AVisibility: superclass init_table position */},
+  {(bigint) 0 /* 76: APrivateVisibility < AVisibility: superclass init_table position */},
   {(bigint) parser___parser_prod___APrivateVisibility___empty_init},
   {(bigint) parser___parser_prod___APrivateVisibility___init_aprivatevisibility},
-  {(bigint) 4 /* 78: APrivateVisibility < APrivateVisibility: superclass init_table position */},
+  {(bigint) 4 /* 79: APrivateVisibility < APrivateVisibility: superclass init_table position */},
   {(bigint) parser___parser_nodes___APrivateVisibility___n_kwprivate},
 };
 /* 0: Pointer to the classtable */
@@ -49967,24 +52228,31 @@ const classtable_elt_t VFT_parser___parser_nodes___APrivateVisibility[80] = {
 /* 3: Attribute APrivateVisibility::_location */
 /* 4: Attribute APrivateVisibility::_first_location */
 /* 5: Attribute APrivateVisibility::_last_location */
-/* 6: Attribute APrivateVisibility::_n_kwprivate */
+/* 6: Attribute APrivateVisibility::_n_annotations */
+/* 7: Attribute APrivateVisibility::_n_kwprivate */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___APrivateVisibility[] = "init var of APrivateVisibility";
 void INIT_ATTRIBUTES__parser___parser_nodes___APrivateVisibility(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___APrivateVisibility;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___APrivateVisibility(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
+  obj = alloc(sizeof(val_t) * 8);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___APrivateVisibility;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -50018,13 +52286,13 @@ val_t NEW_APrivateVisibility_parser___parser_prod___APrivateVisibility___empty_i
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 366;
+  fra.me.line = 402;
   fra.me.meth = LOCATE_NEW_APrivateVisibility_parser___parser_prod___APrivateVisibility___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:366 */
+  /* parser/parser_prod.nit:402 */
   fra.me.REG[0] = NEW_parser___parser_nodes___APrivateVisibility();
   INIT_ATTRIBUTES__parser___parser_nodes___APrivateVisibility(fra.me.REG[0]);
   parser___parser_prod___APrivateVisibility___empty_init(fra.me.REG[0], init_table);
@@ -50039,7 +52307,7 @@ val_t NEW_APrivateVisibility_parser___parser_prod___APrivateVisibility___init_ap
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 368;
+  fra.me.line = 404;
   fra.me.meth = LOCATE_NEW_APrivateVisibility_parser___parser_prod___APrivateVisibility___init_aprivatevisibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -50047,7 +52315,7 @@ val_t NEW_APrivateVisibility_parser___parser_prod___APrivateVisibility___init_ap
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:368 */
+  /* parser/parser_prod.nit:404 */
   fra.me.REG[1] = NEW_parser___parser_nodes___APrivateVisibility();
   INIT_ATTRIBUTES__parser___parser_nodes___APrivateVisibility(fra.me.REG[1]);
   parser___parser_prod___APrivateVisibility___init_aprivatevisibility(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -50076,15 +52344,15 @@ val_t NEW_APrivateVisibility_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AProtectedVisibility[80] = {
-  {(bigint) 3835 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AProtectedVisibility[81] = {
+  {(bigint) 4351 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AProtectedVisibility" /* 2: Class Name */},
   {(bigint) 3 /* 3: AProtectedVisibility < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AProtectedVisibility < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AProtectedVisibility < Prod: superclass typecheck marker */},
-  {(bigint) 3231 /* 6: AProtectedVisibility < AVisibility: superclass typecheck marker */},
-  {(bigint) 3835 /* 7: AProtectedVisibility < AProtectedVisibility: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AProtectedVisibility < Prod: superclass typecheck marker */},
+  {(bigint) 3731 /* 6: AProtectedVisibility < AVisibility: superclass typecheck marker */},
+  {(bigint) 4351 /* 7: AProtectedVisibility < AProtectedVisibility: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -50151,11 +52419,12 @@ const classtable_elt_t VFT_parser___parser_nodes___AProtectedVisibility[80] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AProtectedVisibility < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___AProtectedVisibility___level},
-  {(bigint) 0 /* 75: AProtectedVisibility < AVisibility: superclass init_table position */},
+  {(bigint) 0 /* 76: AProtectedVisibility < AVisibility: superclass init_table position */},
   {(bigint) parser___parser_prod___AProtectedVisibility___empty_init},
   {(bigint) parser___parser_prod___AProtectedVisibility___init_aprotectedvisibility},
-  {(bigint) 4 /* 78: AProtectedVisibility < AProtectedVisibility: superclass init_table position */},
+  {(bigint) 4 /* 79: AProtectedVisibility < AProtectedVisibility: superclass init_table position */},
   {(bigint) parser___parser_nodes___AProtectedVisibility___n_kwprotected},
 };
 /* 0: Pointer to the classtable */
@@ -50164,24 +52433,31 @@ const classtable_elt_t VFT_parser___parser_nodes___AProtectedVisibility[80] = {
 /* 3: Attribute AProtectedVisibility::_location */
 /* 4: Attribute AProtectedVisibility::_first_location */
 /* 5: Attribute AProtectedVisibility::_last_location */
-/* 6: Attribute AProtectedVisibility::_n_kwprotected */
+/* 6: Attribute AProtectedVisibility::_n_annotations */
+/* 7: Attribute AProtectedVisibility::_n_kwprotected */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AProtectedVisibility[] = "init var of AProtectedVisibility";
 void INIT_ATTRIBUTES__parser___parser_nodes___AProtectedVisibility(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AProtectedVisibility;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AProtectedVisibility(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
+  obj = alloc(sizeof(val_t) * 8);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AProtectedVisibility;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -50215,13 +52491,13 @@ val_t NEW_AProtectedVisibility_parser___parser_prod___AProtectedVisibility___emp
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 397;
+  fra.me.line = 433;
   fra.me.meth = LOCATE_NEW_AProtectedVisibility_parser___parser_prod___AProtectedVisibility___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:397 */
+  /* parser/parser_prod.nit:433 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AProtectedVisibility();
   INIT_ATTRIBUTES__parser___parser_nodes___AProtectedVisibility(fra.me.REG[0]);
   parser___parser_prod___AProtectedVisibility___empty_init(fra.me.REG[0], init_table);
@@ -50236,7 +52512,7 @@ val_t NEW_AProtectedVisibility_parser___parser_prod___AProtectedVisibility___ini
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 399;
+  fra.me.line = 435;
   fra.me.meth = LOCATE_NEW_AProtectedVisibility_parser___parser_prod___AProtectedVisibility___init_aprotectedvisibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -50244,7 +52520,7 @@ val_t NEW_AProtectedVisibility_parser___parser_prod___AProtectedVisibility___ini
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:399 */
+  /* parser/parser_prod.nit:435 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AProtectedVisibility();
   INIT_ATTRIBUTES__parser___parser_nodes___AProtectedVisibility(fra.me.REG[1]);
   parser___parser_prod___AProtectedVisibility___init_aprotectedvisibility(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -50273,15 +52549,15 @@ val_t NEW_AProtectedVisibility_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AIntrudeVisibility[80] = {
-  {(bigint) 3907 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AIntrudeVisibility[81] = {
+  {(bigint) 4443 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AIntrudeVisibility" /* 2: Class Name */},
   {(bigint) 3 /* 3: AIntrudeVisibility < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AIntrudeVisibility < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AIntrudeVisibility < Prod: superclass typecheck marker */},
-  {(bigint) 3231 /* 6: AIntrudeVisibility < AVisibility: superclass typecheck marker */},
-  {(bigint) 3907 /* 7: AIntrudeVisibility < AIntrudeVisibility: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AIntrudeVisibility < Prod: superclass typecheck marker */},
+  {(bigint) 3731 /* 6: AIntrudeVisibility < AVisibility: superclass typecheck marker */},
+  {(bigint) 4443 /* 7: AIntrudeVisibility < AIntrudeVisibility: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -50348,11 +52624,12 @@ const classtable_elt_t VFT_parser___parser_nodes___AIntrudeVisibility[80] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AIntrudeVisibility < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___AIntrudeVisibility___level},
-  {(bigint) 0 /* 75: AIntrudeVisibility < AVisibility: superclass init_table position */},
+  {(bigint) 0 /* 76: AIntrudeVisibility < AVisibility: superclass init_table position */},
   {(bigint) parser___parser_prod___AIntrudeVisibility___empty_init},
   {(bigint) parser___parser_prod___AIntrudeVisibility___init_aintrudevisibility},
-  {(bigint) 4 /* 78: AIntrudeVisibility < AIntrudeVisibility: superclass init_table position */},
+  {(bigint) 4 /* 79: AIntrudeVisibility < AIntrudeVisibility: superclass init_table position */},
   {(bigint) parser___parser_nodes___AIntrudeVisibility___n_kwintrude},
 };
 /* 0: Pointer to the classtable */
@@ -50361,24 +52638,31 @@ const classtable_elt_t VFT_parser___parser_nodes___AIntrudeVisibility[80] = {
 /* 3: Attribute AIntrudeVisibility::_location */
 /* 4: Attribute AIntrudeVisibility::_first_location */
 /* 5: Attribute AIntrudeVisibility::_last_location */
-/* 6: Attribute AIntrudeVisibility::_n_kwintrude */
+/* 6: Attribute AIntrudeVisibility::_n_annotations */
+/* 7: Attribute AIntrudeVisibility::_n_kwintrude */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AIntrudeVisibility[] = "init var of AIntrudeVisibility";
 void INIT_ATTRIBUTES__parser___parser_nodes___AIntrudeVisibility(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AIntrudeVisibility;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AIntrudeVisibility(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
+  obj = alloc(sizeof(val_t) * 8);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AIntrudeVisibility;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -50412,13 +52696,13 @@ val_t NEW_AIntrudeVisibility_parser___parser_prod___AIntrudeVisibility___empty_i
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 428;
+  fra.me.line = 464;
   fra.me.meth = LOCATE_NEW_AIntrudeVisibility_parser___parser_prod___AIntrudeVisibility___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:428 */
+  /* parser/parser_prod.nit:464 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AIntrudeVisibility();
   INIT_ATTRIBUTES__parser___parser_nodes___AIntrudeVisibility(fra.me.REG[0]);
   parser___parser_prod___AIntrudeVisibility___empty_init(fra.me.REG[0], init_table);
@@ -50433,7 +52717,7 @@ val_t NEW_AIntrudeVisibility_parser___parser_prod___AIntrudeVisibility___init_ai
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 430;
+  fra.me.line = 466;
   fra.me.meth = LOCATE_NEW_AIntrudeVisibility_parser___parser_prod___AIntrudeVisibility___init_aintrudevisibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -50441,7 +52725,7 @@ val_t NEW_AIntrudeVisibility_parser___parser_prod___AIntrudeVisibility___init_ai
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:430 */
+  /* parser/parser_prod.nit:466 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AIntrudeVisibility();
   INIT_ATTRIBUTES__parser___parser_nodes___AIntrudeVisibility(fra.me.REG[1]);
   parser___parser_prod___AIntrudeVisibility___init_aintrudevisibility(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -50470,15 +52754,15 @@ val_t NEW_AIntrudeVisibility_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AStdClassdef[103] = {
-  {(bigint) 3787 /* 0: Identity */},
-  {(bigint) 18 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AStdClassdef[104] = {
+  {(bigint) 4303 /* 0: Identity */},
+  {(bigint) 19 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AStdClassdef" /* 2: Class Name */},
   {(bigint) 3 /* 3: AStdClassdef < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AStdClassdef < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AStdClassdef < Prod: superclass typecheck marker */},
-  {(bigint) 3331 /* 6: AStdClassdef < AClassdef: superclass typecheck marker */},
-  {(bigint) 3787 /* 7: AStdClassdef < AStdClassdef: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AStdClassdef < Prod: superclass typecheck marker */},
+  {(bigint) 3831 /* 6: AStdClassdef < AClassdef: superclass typecheck marker */},
+  {(bigint) 4303 /* 7: AStdClassdef < AStdClassdef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -50545,6 +52829,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AStdClassdef[103] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AStdClassdef < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___AStdClassdef___name},
   {(bigint) syntax___mmbuilder___AStdClassdef___arity},
   {(bigint) syntax___mmbuilder___AStdClassdef___visibility_level},
@@ -50556,7 +52841,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AStdClassdef[103] = {
   {(bigint) syntax___mmbuilder___AClassdef___local_class},
   {(bigint) syntax___syntax_base___AClassdef___next_node},
   {(bigint) syntax___syntax_base___AClassdef___next_node__eq},
-  {(bigint) 0 /* 85: AStdClassdef < AClassdef: superclass init_table position */},
+  {(bigint) 0 /* 86: AStdClassdef < AClassdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AClassdef___n_propdefs},
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
@@ -50564,7 +52849,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AStdClassdef[103] = {
   {(bigint) syntax___mmbuilder___AClassdef___accept_class_verifier},
   {(bigint) parser___parser_prod___AStdClassdef___empty_init},
   {(bigint) parser___parser_prod___AStdClassdef___init_astdclassdef},
-  {(bigint) 4 /* 93: AStdClassdef < AStdClassdef: superclass init_table position */},
+  {(bigint) 4 /* 94: AStdClassdef < AStdClassdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AStdClassdef___n_doc},
   {(bigint) parser___parser_nodes___AStdClassdef___n_kwredef},
   {(bigint) parser___parser_nodes___AStdClassdef___n_visibility},
@@ -50581,18 +52866,19 @@ const classtable_elt_t VFT_parser___parser_nodes___AStdClassdef[103] = {
 /* 3: Attribute AStdClassdef::_location */
 /* 4: Attribute AStdClassdef::_first_location */
 /* 5: Attribute AStdClassdef::_last_location */
-/* 6: Attribute AStdClassdef::_local_class */
-/* 7: Attribute AStdClassdef::_next_node */
-/* 8: Attribute AStdClassdef::_n_propdefs */
-/* 9: Attribute AStdClassdef::_n_doc */
-/* 10: Attribute AStdClassdef::_n_kwredef */
-/* 11: Attribute AStdClassdef::_n_visibility */
-/* 12: Attribute AStdClassdef::_n_classkind */
-/* 13: Attribute AStdClassdef::_n_id */
-/* 14: Attribute AStdClassdef::_n_formaldefs */
-/* 15: Attribute AStdClassdef::_n_extern_code_block */
-/* 16: Attribute AStdClassdef::_n_superclasses */
-/* 17: Attribute AStdClassdef::_n_kwend */
+/* 6: Attribute AStdClassdef::_n_annotations */
+/* 7: Attribute AStdClassdef::_local_class */
+/* 8: Attribute AStdClassdef::_next_node */
+/* 9: Attribute AStdClassdef::_n_propdefs */
+/* 10: Attribute AStdClassdef::_n_doc */
+/* 11: Attribute AStdClassdef::_n_kwredef */
+/* 12: Attribute AStdClassdef::_n_visibility */
+/* 13: Attribute AStdClassdef::_n_classkind */
+/* 14: Attribute AStdClassdef::_n_id */
+/* 15: Attribute AStdClassdef::_n_formaldefs */
+/* 16: Attribute AStdClassdef::_n_extern_code_block */
+/* 17: Attribute AStdClassdef::_n_superclasses */
+/* 18: Attribute AStdClassdef::_n_kwend */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AStdClassdef[] = "init var of AStdClassdef";
 void INIT_ATTRIBUTES__parser___parser_nodes___AStdClassdef(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -50607,36 +52893,39 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AStdClassdef(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:440 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:442 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/syntax_base.nit:533 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_syntax___syntax_base___AClassdef____next_node(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:446 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:441 */
+  /* parser/parser_nodes.nit:447 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:444 */
+  /* parser/parser_nodes.nit:450 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:445 */
+  /* parser/parser_nodes.nit:451 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:446 */
+  /* parser/parser_nodes.nit:452 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:447 */
+  /* parser/parser_nodes.nit:453 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:436 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/syntax_base.nit:533 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_syntax___syntax_base___AClassdef____next_node(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AStdClassdef(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 18);
+  obj = alloc(sizeof(val_t) * 19);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AStdClassdef;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -50656,6 +52945,11 @@ void CHECKNEW_parser___parser_nodes___AStdClassdef(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -50676,11 +52970,6 @@ void CHECKNEW_parser___parser_nodes___AStdClassdef(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -50695,13 +52984,13 @@ val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 459;
+  fra.me.line = 495;
   fra.me.meth = LOCATE_NEW_AStdClassdef_parser___parser_prod___AStdClassdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:459 */
+  /* parser/parser_prod.nit:495 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AStdClassdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AStdClassdef(fra.me.REG[0]);
   parser___parser_prod___AStdClassdef___empty_init(fra.me.REG[0], init_table);
@@ -50710,16 +52999,16 @@ val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef[] = "new AStdClassdef parser_prod::AStdClassdef::init_astdclassdef";
-val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10){
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 461;
+  fra.me.line = 497;
   fra.me.meth = LOCATE_NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 12;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -50732,6 +53021,7 @@ val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(v
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -50742,13 +53032,14 @@ val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(v
   fra.me.REG[7] = p7;
   fra.me.REG[8] = p8;
   fra.me.REG[9] = p9;
-  /* parser/parser_prod.nit:461 */
-  fra.me.REG[10] = NEW_parser___parser_nodes___AStdClassdef();
-  INIT_ATTRIBUTES__parser___parser_nodes___AStdClassdef(fra.me.REG[10]);
-  parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9], init_table);
-  CHECKNEW_parser___parser_nodes___AStdClassdef(fra.me.REG[10]);
+  fra.me.REG[10] = p10;
+  /* parser/parser_prod.nit:497 */
+  fra.me.REG[11] = NEW_parser___parser_nodes___AStdClassdef();
+  INIT_ATTRIBUTES__parser___parser_nodes___AStdClassdef(fra.me.REG[11]);
+  parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10], init_table);
+  CHECKNEW_parser___parser_nodes___AStdClassdef(fra.me.REG[11]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[10];
+  return fra.me.REG[11];
 }
 static const char LOCATE_NEW_AStdClassdef_parser___parser_nodes___ANode___init[] = "new AStdClassdef parser_nodes::ANode::init";
 val_t NEW_AStdClassdef_parser___parser_nodes___ANode___init(void){
@@ -50771,15 +53062,15 @@ val_t NEW_AStdClassdef_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ATopClassdef[91] = {
-  {(bigint) 3767 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ATopClassdef[92] = {
+  {(bigint) 4283 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ATopClassdef" /* 2: Class Name */},
   {(bigint) 3 /* 3: ATopClassdef < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ATopClassdef < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ATopClassdef < Prod: superclass typecheck marker */},
-  {(bigint) 3331 /* 6: ATopClassdef < AClassdef: superclass typecheck marker */},
-  {(bigint) 3767 /* 7: ATopClassdef < ATopClassdef: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ATopClassdef < Prod: superclass typecheck marker */},
+  {(bigint) 3831 /* 6: ATopClassdef < AClassdef: superclass typecheck marker */},
+  {(bigint) 4283 /* 7: ATopClassdef < ATopClassdef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -50846,6 +53137,7 @@ const classtable_elt_t VFT_parser___parser_nodes___ATopClassdef[91] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ATopClassdef < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ATopClassdef___name},
   {(bigint) syntax___mmbuilder___AClassdef___arity},
   {(bigint) syntax___mmbuilder___AClassdef___visibility_level},
@@ -50857,12 +53149,12 @@ const classtable_elt_t VFT_parser___parser_nodes___ATopClassdef[91] = {
   {(bigint) syntax___mmbuilder___AClassdef___local_class},
   {(bigint) syntax___syntax_base___AClassdef___next_node},
   {(bigint) syntax___syntax_base___AClassdef___next_node__eq},
-  {(bigint) 0 /* 85: ATopClassdef < AClassdef: superclass init_table position */},
+  {(bigint) 0 /* 86: ATopClassdef < AClassdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AClassdef___n_propdefs},
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) parser___parser_prod___ATopClassdef___empty_init},
   {(bigint) parser___parser_prod___ATopClassdef___init_atopclassdef},
-  {(bigint) 4 /* 90: ATopClassdef < ATopClassdef: superclass init_table position */},
+  {(bigint) 4 /* 91: ATopClassdef < ATopClassdef: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -50870,9 +53162,10 @@ const classtable_elt_t VFT_parser___parser_nodes___ATopClassdef[91] = {
 /* 3: Attribute ATopClassdef::_location */
 /* 4: Attribute ATopClassdef::_first_location */
 /* 5: Attribute ATopClassdef::_last_location */
-/* 6: Attribute ATopClassdef::_local_class */
-/* 7: Attribute ATopClassdef::_next_node */
-/* 8: Attribute ATopClassdef::_n_propdefs */
+/* 6: Attribute ATopClassdef::_n_annotations */
+/* 7: Attribute ATopClassdef::_local_class */
+/* 8: Attribute ATopClassdef::_next_node */
+/* 9: Attribute ATopClassdef::_n_propdefs */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ATopClassdef[] = "init var of ATopClassdef";
 void INIT_ATTRIBUTES__parser___parser_nodes___ATopClassdef(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -50887,7 +53180,10 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ATopClassdef(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:436 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:442 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/syntax_base.nit:533 */
@@ -50898,7 +53194,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ATopClassdef(val_t p0){
 val_t NEW_parser___parser_nodes___ATopClassdef(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
+  obj = alloc(sizeof(val_t) * 10);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ATopClassdef;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -50932,13 +53228,13 @@ val_t NEW_ATopClassdef_parser___parser_prod___ATopClassdef___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 653;
+  fra.me.line = 707;
   fra.me.meth = LOCATE_NEW_ATopClassdef_parser___parser_prod___ATopClassdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:653 */
+  /* parser/parser_prod.nit:707 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ATopClassdef();
   INIT_ATTRIBUTES__parser___parser_nodes___ATopClassdef(fra.me.REG[0]);
   parser___parser_prod___ATopClassdef___empty_init(fra.me.REG[0], init_table);
@@ -50953,7 +53249,7 @@ val_t NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(v
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 655;
+  fra.me.line = 709;
   fra.me.meth = LOCATE_NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -50961,7 +53257,7 @@ val_t NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(v
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:655 */
+  /* parser/parser_prod.nit:709 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ATopClassdef();
   INIT_ATTRIBUTES__parser___parser_nodes___ATopClassdef(fra.me.REG[1]);
   parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -50990,15 +53286,15 @@ val_t NEW_ATopClassdef_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AMainClassdef[91] = {
-  {(bigint) 3887 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AMainClassdef[92] = {
+  {(bigint) 4403 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AMainClassdef" /* 2: Class Name */},
   {(bigint) 3 /* 3: AMainClassdef < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AMainClassdef < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AMainClassdef < Prod: superclass typecheck marker */},
-  {(bigint) 3331 /* 6: AMainClassdef < AClassdef: superclass typecheck marker */},
-  {(bigint) 3887 /* 7: AMainClassdef < AMainClassdef: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AMainClassdef < Prod: superclass typecheck marker */},
+  {(bigint) 3831 /* 6: AMainClassdef < AClassdef: superclass typecheck marker */},
+  {(bigint) 4403 /* 7: AMainClassdef < AMainClassdef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -51065,6 +53361,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AMainClassdef[91] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AMainClassdef < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___AMainClassdef___name},
   {(bigint) syntax___mmbuilder___AClassdef___arity},
   {(bigint) syntax___mmbuilder___AClassdef___visibility_level},
@@ -51076,12 +53373,12 @@ const classtable_elt_t VFT_parser___parser_nodes___AMainClassdef[91] = {
   {(bigint) syntax___mmbuilder___AClassdef___local_class},
   {(bigint) syntax___syntax_base___AClassdef___next_node},
   {(bigint) syntax___syntax_base___AClassdef___next_node__eq},
-  {(bigint) 0 /* 85: AMainClassdef < AClassdef: superclass init_table position */},
+  {(bigint) 0 /* 86: AMainClassdef < AClassdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AClassdef___n_propdefs},
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) parser___parser_prod___AMainClassdef___empty_init},
   {(bigint) parser___parser_prod___AMainClassdef___init_amainclassdef},
-  {(bigint) 4 /* 90: AMainClassdef < AMainClassdef: superclass init_table position */},
+  {(bigint) 4 /* 91: AMainClassdef < AMainClassdef: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -51089,9 +53386,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AMainClassdef[91] = {
 /* 3: Attribute AMainClassdef::_location */
 /* 4: Attribute AMainClassdef::_first_location */
 /* 5: Attribute AMainClassdef::_last_location */
-/* 6: Attribute AMainClassdef::_local_class */
-/* 7: Attribute AMainClassdef::_next_node */
-/* 8: Attribute AMainClassdef::_n_propdefs */
+/* 6: Attribute AMainClassdef::_n_annotations */
+/* 7: Attribute AMainClassdef::_local_class */
+/* 8: Attribute AMainClassdef::_next_node */
+/* 9: Attribute AMainClassdef::_n_propdefs */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AMainClassdef[] = "init var of AMainClassdef";
 void INIT_ATTRIBUTES__parser___parser_nodes___AMainClassdef(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -51106,7 +53404,10 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AMainClassdef(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:436 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:442 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/syntax_base.nit:533 */
@@ -51117,7 +53418,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AMainClassdef(val_t p0){
 val_t NEW_parser___parser_nodes___AMainClassdef(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
+  obj = alloc(sizeof(val_t) * 10);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AMainClassdef;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -51151,13 +53452,13 @@ val_t NEW_AMainClassdef_parser___parser_prod___AMainClassdef___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 691;
+  fra.me.line = 745;
   fra.me.meth = LOCATE_NEW_AMainClassdef_parser___parser_prod___AMainClassdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:691 */
+  /* parser/parser_prod.nit:745 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AMainClassdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AMainClassdef(fra.me.REG[0]);
   parser___parser_prod___AMainClassdef___empty_init(fra.me.REG[0], init_table);
@@ -51172,7 +53473,7 @@ val_t NEW_AMainClassdef_parser___parser_prod___AMainClassdef___init_amainclassde
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 693;
+  fra.me.line = 747;
   fra.me.meth = LOCATE_NEW_AMainClassdef_parser___parser_prod___AMainClassdef___init_amainclassdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -51180,7 +53481,7 @@ val_t NEW_AMainClassdef_parser___parser_prod___AMainClassdef___init_amainclassde
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:693 */
+  /* parser/parser_prod.nit:747 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AMainClassdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AMainClassdef(fra.me.REG[1]);
   parser___parser_prod___AMainClassdef___init_amainclassdef(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -51209,15 +53510,15 @@ val_t NEW_AMainClassdef_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AConcreteClasskind[83] = {
-  {(bigint) 3971 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AConcreteClasskind[84] = {
+  {(bigint) 4515 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AConcreteClasskind" /* 2: Class Name */},
   {(bigint) 3 /* 3: AConcreteClasskind < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AConcreteClasskind < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AConcreteClasskind < Prod: superclass typecheck marker */},
-  {(bigint) 3327 /* 6: AConcreteClasskind < AClasskind: superclass typecheck marker */},
-  {(bigint) 3971 /* 7: AConcreteClasskind < AConcreteClasskind: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AConcreteClasskind < Prod: superclass typecheck marker */},
+  {(bigint) 3827 /* 6: AConcreteClasskind < AClasskind: superclass typecheck marker */},
+  {(bigint) 4515 /* 7: AConcreteClasskind < AConcreteClasskind: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -51284,14 +53585,15 @@ const classtable_elt_t VFT_parser___parser_nodes___AConcreteClasskind[83] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AConcreteClasskind < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___AClasskind___is_interface},
   {(bigint) syntax___mmbuilder___AClasskind___is_enum},
   {(bigint) syntax___mmbuilder___AClasskind___is_abstract},
   {(bigint) syntax___mmbuilder___AClasskind___is_extern},
-  {(bigint) 0 /* 78: AConcreteClasskind < AClasskind: superclass init_table position */},
+  {(bigint) 0 /* 79: AConcreteClasskind < AClasskind: superclass init_table position */},
   {(bigint) parser___parser_prod___AConcreteClasskind___empty_init},
   {(bigint) parser___parser_prod___AConcreteClasskind___init_aconcreteclasskind},
-  {(bigint) 4 /* 81: AConcreteClasskind < AConcreteClasskind: superclass init_table position */},
+  {(bigint) 4 /* 82: AConcreteClasskind < AConcreteClasskind: superclass init_table position */},
   {(bigint) parser___parser_nodes___AConcreteClasskind___n_kwclass},
 };
 /* 0: Pointer to the classtable */
@@ -51300,24 +53602,31 @@ const classtable_elt_t VFT_parser___parser_nodes___AConcreteClasskind[83] = {
 /* 3: Attribute AConcreteClasskind::_location */
 /* 4: Attribute AConcreteClasskind::_first_location */
 /* 5: Attribute AConcreteClasskind::_last_location */
-/* 6: Attribute AConcreteClasskind::_n_kwclass */
+/* 6: Attribute AConcreteClasskind::_n_annotations */
+/* 7: Attribute AConcreteClasskind::_n_kwclass */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AConcreteClasskind[] = "init var of AConcreteClasskind";
 void INIT_ATTRIBUTES__parser___parser_nodes___AConcreteClasskind(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AConcreteClasskind;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AConcreteClasskind(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
+  obj = alloc(sizeof(val_t) * 8);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AConcreteClasskind;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -51351,13 +53660,13 @@ val_t NEW_AConcreteClasskind_parser___parser_prod___AConcreteClasskind___empty_i
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 729;
+  fra.me.line = 783;
   fra.me.meth = LOCATE_NEW_AConcreteClasskind_parser___parser_prod___AConcreteClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:729 */
+  /* parser/parser_prod.nit:783 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AConcreteClasskind();
   INIT_ATTRIBUTES__parser___parser_nodes___AConcreteClasskind(fra.me.REG[0]);
   parser___parser_prod___AConcreteClasskind___empty_init(fra.me.REG[0], init_table);
@@ -51372,7 +53681,7 @@ val_t NEW_AConcreteClasskind_parser___parser_prod___AConcreteClasskind___init_ac
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 731;
+  fra.me.line = 785;
   fra.me.meth = LOCATE_NEW_AConcreteClasskind_parser___parser_prod___AConcreteClasskind___init_aconcreteclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -51380,7 +53689,7 @@ val_t NEW_AConcreteClasskind_parser___parser_prod___AConcreteClasskind___init_ac
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:731 */
+  /* parser/parser_prod.nit:785 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AConcreteClasskind();
   INIT_ATTRIBUTES__parser___parser_nodes___AConcreteClasskind(fra.me.REG[1]);
   parser___parser_prod___AConcreteClasskind___init_aconcreteclasskind(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -51409,15 +53718,15 @@ val_t NEW_AConcreteClasskind_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AAbstractClasskind[84] = {
-  {(bigint) 4039 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AAbstractClasskind[85] = {
+  {(bigint) 4587 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AAbstractClasskind" /* 2: Class Name */},
   {(bigint) 3 /* 3: AAbstractClasskind < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AAbstractClasskind < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AAbstractClasskind < Prod: superclass typecheck marker */},
-  {(bigint) 3327 /* 6: AAbstractClasskind < AClasskind: superclass typecheck marker */},
-  {(bigint) 4039 /* 7: AAbstractClasskind < AAbstractClasskind: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AAbstractClasskind < Prod: superclass typecheck marker */},
+  {(bigint) 3827 /* 6: AAbstractClasskind < AClasskind: superclass typecheck marker */},
+  {(bigint) 4587 /* 7: AAbstractClasskind < AAbstractClasskind: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -51484,14 +53793,15 @@ const classtable_elt_t VFT_parser___parser_nodes___AAbstractClasskind[84] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AAbstractClasskind < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___AClasskind___is_interface},
   {(bigint) syntax___mmbuilder___AClasskind___is_enum},
   {(bigint) syntax___mmbuilder___AAbstractClasskind___is_abstract},
   {(bigint) syntax___mmbuilder___AClasskind___is_extern},
-  {(bigint) 0 /* 78: AAbstractClasskind < AClasskind: superclass init_table position */},
+  {(bigint) 0 /* 79: AAbstractClasskind < AClasskind: superclass init_table position */},
   {(bigint) parser___parser_prod___AAbstractClasskind___empty_init},
   {(bigint) parser___parser_prod___AAbstractClasskind___init_aabstractclasskind},
-  {(bigint) 4 /* 81: AAbstractClasskind < AAbstractClasskind: superclass init_table position */},
+  {(bigint) 4 /* 82: AAbstractClasskind < AAbstractClasskind: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAbstractClasskind___n_kwabstract},
   {(bigint) parser___parser_nodes___AAbstractClasskind___n_kwclass},
 };
@@ -51501,25 +53811,32 @@ const classtable_elt_t VFT_parser___parser_nodes___AAbstractClasskind[84] = {
 /* 3: Attribute AAbstractClasskind::_location */
 /* 4: Attribute AAbstractClasskind::_first_location */
 /* 5: Attribute AAbstractClasskind::_last_location */
-/* 6: Attribute AAbstractClasskind::_n_kwabstract */
-/* 7: Attribute AAbstractClasskind::_n_kwclass */
+/* 6: Attribute AAbstractClasskind::_n_annotations */
+/* 7: Attribute AAbstractClasskind::_n_kwabstract */
+/* 8: Attribute AAbstractClasskind::_n_kwclass */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAbstractClasskind[] = "init var of AAbstractClasskind";
 void INIT_ATTRIBUTES__parser___parser_nodes___AAbstractClasskind(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAbstractClasskind;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AAbstractClasskind(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AAbstractClasskind;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -51558,13 +53875,13 @@ val_t NEW_AAbstractClasskind_parser___parser_prod___AAbstractClasskind___empty_i
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 760;
+  fra.me.line = 814;
   fra.me.meth = LOCATE_NEW_AAbstractClasskind_parser___parser_prod___AAbstractClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:760 */
+  /* parser/parser_prod.nit:814 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAbstractClasskind();
   INIT_ATTRIBUTES__parser___parser_nodes___AAbstractClasskind(fra.me.REG[0]);
   parser___parser_prod___AAbstractClasskind___empty_init(fra.me.REG[0], init_table);
@@ -51579,7 +53896,7 @@ val_t NEW_AAbstractClasskind_parser___parser_prod___AAbstractClasskind___init_aa
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 762;
+  fra.me.line = 816;
   fra.me.meth = LOCATE_NEW_AAbstractClasskind_parser___parser_prod___AAbstractClasskind___init_aabstractclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -51589,7 +53906,7 @@ val_t NEW_AAbstractClasskind_parser___parser_prod___AAbstractClasskind___init_aa
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:762 */
+  /* parser/parser_prod.nit:816 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AAbstractClasskind();
   INIT_ATTRIBUTES__parser___parser_nodes___AAbstractClasskind(fra.me.REG[2]);
   parser___parser_prod___AAbstractClasskind___init_aabstractclasskind(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -51618,15 +53935,15 @@ val_t NEW_AAbstractClasskind_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AInterfaceClasskind[83] = {
-  {(bigint) 3911 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AInterfaceClasskind[84] = {
+  {(bigint) 4447 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AInterfaceClasskind" /* 2: Class Name */},
   {(bigint) 3 /* 3: AInterfaceClasskind < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AInterfaceClasskind < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AInterfaceClasskind < Prod: superclass typecheck marker */},
-  {(bigint) 3327 /* 6: AInterfaceClasskind < AClasskind: superclass typecheck marker */},
-  {(bigint) 3911 /* 7: AInterfaceClasskind < AInterfaceClasskind: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AInterfaceClasskind < Prod: superclass typecheck marker */},
+  {(bigint) 3827 /* 6: AInterfaceClasskind < AClasskind: superclass typecheck marker */},
+  {(bigint) 4447 /* 7: AInterfaceClasskind < AInterfaceClasskind: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -51693,14 +54010,15 @@ const classtable_elt_t VFT_parser___parser_nodes___AInterfaceClasskind[83] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AInterfaceClasskind < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___AInterfaceClasskind___is_interface},
   {(bigint) syntax___mmbuilder___AClasskind___is_enum},
   {(bigint) syntax___mmbuilder___AClasskind___is_abstract},
   {(bigint) syntax___mmbuilder___AClasskind___is_extern},
-  {(bigint) 0 /* 78: AInterfaceClasskind < AClasskind: superclass init_table position */},
+  {(bigint) 0 /* 79: AInterfaceClasskind < AClasskind: superclass init_table position */},
   {(bigint) parser___parser_prod___AInterfaceClasskind___empty_init},
   {(bigint) parser___parser_prod___AInterfaceClasskind___init_ainterfaceclasskind},
-  {(bigint) 4 /* 81: AInterfaceClasskind < AInterfaceClasskind: superclass init_table position */},
+  {(bigint) 4 /* 82: AInterfaceClasskind < AInterfaceClasskind: superclass init_table position */},
   {(bigint) parser___parser_nodes___AInterfaceClasskind___n_kwinterface},
 };
 /* 0: Pointer to the classtable */
@@ -51709,24 +54027,31 @@ const classtable_elt_t VFT_parser___parser_nodes___AInterfaceClasskind[83] = {
 /* 3: Attribute AInterfaceClasskind::_location */
 /* 4: Attribute AInterfaceClasskind::_first_location */
 /* 5: Attribute AInterfaceClasskind::_last_location */
-/* 6: Attribute AInterfaceClasskind::_n_kwinterface */
+/* 6: Attribute AInterfaceClasskind::_n_annotations */
+/* 7: Attribute AInterfaceClasskind::_n_kwinterface */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AInterfaceClasskind[] = "init var of AInterfaceClasskind";
 void INIT_ATTRIBUTES__parser___parser_nodes___AInterfaceClasskind(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AInterfaceClasskind;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AInterfaceClasskind(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
+  obj = alloc(sizeof(val_t) * 8);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AInterfaceClasskind;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -51760,13 +54085,13 @@ val_t NEW_AInterfaceClasskind_parser___parser_prod___AInterfaceClasskind___empty
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 805;
+  fra.me.line = 859;
   fra.me.meth = LOCATE_NEW_AInterfaceClasskind_parser___parser_prod___AInterfaceClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:805 */
+  /* parser/parser_prod.nit:859 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AInterfaceClasskind();
   INIT_ATTRIBUTES__parser___parser_nodes___AInterfaceClasskind(fra.me.REG[0]);
   parser___parser_prod___AInterfaceClasskind___empty_init(fra.me.REG[0], init_table);
@@ -51781,7 +54106,7 @@ val_t NEW_AInterfaceClasskind_parser___parser_prod___AInterfaceClasskind___init_
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 807;
+  fra.me.line = 861;
   fra.me.meth = LOCATE_NEW_AInterfaceClasskind_parser___parser_prod___AInterfaceClasskind___init_ainterfaceclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -51789,7 +54114,7 @@ val_t NEW_AInterfaceClasskind_parser___parser_prod___AInterfaceClasskind___init_
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:807 */
+  /* parser/parser_prod.nit:861 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AInterfaceClasskind();
   INIT_ATTRIBUTES__parser___parser_nodes___AInterfaceClasskind(fra.me.REG[1]);
   parser___parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -51818,15 +54143,15 @@ val_t NEW_AInterfaceClasskind_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AEnumClasskind[83] = {
-  {(bigint) 3963 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AEnumClasskind[84] = {
+  {(bigint) 4507 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AEnumClasskind" /* 2: Class Name */},
   {(bigint) 3 /* 3: AEnumClasskind < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AEnumClasskind < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AEnumClasskind < Prod: superclass typecheck marker */},
-  {(bigint) 3327 /* 6: AEnumClasskind < AClasskind: superclass typecheck marker */},
-  {(bigint) 3963 /* 7: AEnumClasskind < AEnumClasskind: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AEnumClasskind < Prod: superclass typecheck marker */},
+  {(bigint) 3827 /* 6: AEnumClasskind < AClasskind: superclass typecheck marker */},
+  {(bigint) 4507 /* 7: AEnumClasskind < AEnumClasskind: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -51893,14 +54218,15 @@ const classtable_elt_t VFT_parser___parser_nodes___AEnumClasskind[83] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AEnumClasskind < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___AClasskind___is_interface},
   {(bigint) syntax___mmbuilder___AEnumClasskind___is_enum},
   {(bigint) syntax___mmbuilder___AClasskind___is_abstract},
   {(bigint) syntax___mmbuilder___AClasskind___is_extern},
-  {(bigint) 0 /* 78: AEnumClasskind < AClasskind: superclass init_table position */},
+  {(bigint) 0 /* 79: AEnumClasskind < AClasskind: superclass init_table position */},
   {(bigint) parser___parser_prod___AEnumClasskind___empty_init},
   {(bigint) parser___parser_prod___AEnumClasskind___init_aenumclasskind},
-  {(bigint) 4 /* 81: AEnumClasskind < AEnumClasskind: superclass init_table position */},
+  {(bigint) 4 /* 82: AEnumClasskind < AEnumClasskind: superclass init_table position */},
   {(bigint) parser___parser_nodes___AEnumClasskind___n_kwenum},
 };
 /* 0: Pointer to the classtable */
@@ -51909,24 +54235,31 @@ const classtable_elt_t VFT_parser___parser_nodes___AEnumClasskind[83] = {
 /* 3: Attribute AEnumClasskind::_location */
 /* 4: Attribute AEnumClasskind::_first_location */
 /* 5: Attribute AEnumClasskind::_last_location */
-/* 6: Attribute AEnumClasskind::_n_kwenum */
+/* 6: Attribute AEnumClasskind::_n_annotations */
+/* 7: Attribute AEnumClasskind::_n_kwenum */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AEnumClasskind[] = "init var of AEnumClasskind";
 void INIT_ATTRIBUTES__parser___parser_nodes___AEnumClasskind(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AEnumClasskind;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AEnumClasskind(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
+  obj = alloc(sizeof(val_t) * 8);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AEnumClasskind;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -51960,13 +54293,13 @@ val_t NEW_AEnumClasskind_parser___parser_prod___AEnumClasskind___empty_init(void
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 836;
+  fra.me.line = 890;
   fra.me.meth = LOCATE_NEW_AEnumClasskind_parser___parser_prod___AEnumClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:836 */
+  /* parser/parser_prod.nit:890 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AEnumClasskind();
   INIT_ATTRIBUTES__parser___parser_nodes___AEnumClasskind(fra.me.REG[0]);
   parser___parser_prod___AEnumClasskind___empty_init(fra.me.REG[0], init_table);
@@ -51981,7 +54314,7 @@ val_t NEW_AEnumClasskind_parser___parser_prod___AEnumClasskind___init_aenumclass
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 838;
+  fra.me.line = 892;
   fra.me.meth = LOCATE_NEW_AEnumClasskind_parser___parser_prod___AEnumClasskind___init_aenumclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -51989,7 +54322,7 @@ val_t NEW_AEnumClasskind_parser___parser_prod___AEnumClasskind___init_aenumclass
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:838 */
+  /* parser/parser_prod.nit:892 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AEnumClasskind();
   INIT_ATTRIBUTES__parser___parser_nodes___AEnumClasskind(fra.me.REG[1]);
   parser___parser_prod___AEnumClasskind___init_aenumclasskind(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -52018,15 +54351,15 @@ val_t NEW_AEnumClasskind_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AExternClasskind[83] = {
-  {(bigint) 3947 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AExternClasskind[85] = {
+  {(bigint) 4487 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AExternClasskind" /* 2: Class Name */},
   {(bigint) 3 /* 3: AExternClasskind < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AExternClasskind < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AExternClasskind < Prod: superclass typecheck marker */},
-  {(bigint) 3327 /* 6: AExternClasskind < AClasskind: superclass typecheck marker */},
-  {(bigint) 3947 /* 7: AExternClasskind < AExternClasskind: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AExternClasskind < Prod: superclass typecheck marker */},
+  {(bigint) 3827 /* 6: AExternClasskind < AClasskind: superclass typecheck marker */},
+  {(bigint) 4487 /* 7: AExternClasskind < AExternClasskind: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -52093,15 +54426,17 @@ const classtable_elt_t VFT_parser___parser_nodes___AExternClasskind[83] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AExternClasskind < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___AClasskind___is_interface},
   {(bigint) syntax___mmbuilder___AClasskind___is_enum},
   {(bigint) syntax___mmbuilder___AClasskind___is_abstract},
   {(bigint) syntax___mmbuilder___AExternClasskind___is_extern},
-  {(bigint) 0 /* 78: AExternClasskind < AClasskind: superclass init_table position */},
+  {(bigint) 0 /* 79: AExternClasskind < AClasskind: superclass init_table position */},
   {(bigint) parser___parser_prod___AExternClasskind___empty_init},
   {(bigint) parser___parser_prod___AExternClasskind___init_aexternclasskind},
-  {(bigint) 4 /* 81: AExternClasskind < AExternClasskind: superclass init_table position */},
+  {(bigint) 4 /* 82: AExternClasskind < AExternClasskind: superclass init_table position */},
   {(bigint) parser___parser_nodes___AExternClasskind___n_kwextern},
+  {(bigint) parser___parser_nodes___AExternClasskind___n_kwclass},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -52109,24 +54444,35 @@ const classtable_elt_t VFT_parser___parser_nodes___AExternClasskind[83] = {
 /* 3: Attribute AExternClasskind::_location */
 /* 4: Attribute AExternClasskind::_first_location */
 /* 5: Attribute AExternClasskind::_last_location */
-/* 6: Attribute AExternClasskind::_n_kwextern */
+/* 6: Attribute AExternClasskind::_n_annotations */
+/* 7: Attribute AExternClasskind::_n_kwextern */
+/* 8: Attribute AExternClasskind::_n_kwclass */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AExternClasskind[] = "init var of AExternClasskind";
 void INIT_ATTRIBUTES__parser___parser_nodes___AExternClasskind(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AExternClasskind;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:484 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AExternClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AExternClasskind(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AExternClasskind;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -52160,13 +54506,13 @@ val_t NEW_AExternClasskind_parser___parser_prod___AExternClasskind___empty_init(
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 867;
+  fra.me.line = 921;
   fra.me.meth = LOCATE_NEW_AExternClasskind_parser___parser_prod___AExternClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:867 */
+  /* parser/parser_prod.nit:921 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AExternClasskind();
   INIT_ATTRIBUTES__parser___parser_nodes___AExternClasskind(fra.me.REG[0]);
   parser___parser_prod___AExternClasskind___empty_init(fra.me.REG[0], init_table);
@@ -52175,27 +54521,29 @@ val_t NEW_AExternClasskind_parser___parser_prod___AExternClasskind___empty_init(
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind[] = "new AExternClasskind parser_prod::AExternClasskind::init_aexternclasskind";
-val_t NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+val_t NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 869;
+  fra.me.line = 923;
   fra.me.meth = LOCATE_NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:869 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___AExternClasskind();
-  INIT_ATTRIBUTES__parser___parser_nodes___AExternClasskind(fra.me.REG[1]);
-  parser___parser_prod___AExternClasskind___init_aexternclasskind(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___AExternClasskind(fra.me.REG[1]);
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:923 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___AExternClasskind();
+  INIT_ATTRIBUTES__parser___parser_nodes___AExternClasskind(fra.me.REG[2]);
+  parser___parser_prod___AExternClasskind___init_aexternclasskind(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___AExternClasskind(fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return fra.me.REG[2];
 }
 static const char LOCATE_NEW_AExternClasskind_parser___parser_nodes___ANode___init[] = "new AExternClasskind parser_nodes::ANode::init";
 val_t NEW_AExternClasskind_parser___parser_nodes___ANode___init(void){
@@ -52218,14 +54566,14 @@ val_t NEW_AExternClasskind_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AFormaldef[81] = {
-  {(bigint) 3291 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AFormaldef[82] = {
+  {(bigint) 3791 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AFormaldef" /* 2: Class Name */},
   {(bigint) 3 /* 3: AFormaldef < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AFormaldef < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AFormaldef < Prod: superclass typecheck marker */},
-  {(bigint) 3291 /* 6: AFormaldef < AFormaldef: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AFormaldef < Prod: superclass typecheck marker */},
+  {(bigint) 3791 /* 6: AFormaldef < AFormaldef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -52293,11 +54641,12 @@ const classtable_elt_t VFT_parser___parser_nodes___AFormaldef[81] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 0 /* 72: AFormaldef < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
   {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
   {(bigint) parser___parser_prod___AFormaldef___empty_init},
   {(bigint) parser___parser_prod___AFormaldef___init_aformaldef},
-  {(bigint) 3 /* 78: AFormaldef < AFormaldef: superclass init_table position */},
+  {(bigint) 3 /* 79: AFormaldef < AFormaldef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AFormaldef___n_id},
   {(bigint) parser___parser_nodes___AFormaldef___n_type},
 };
@@ -52307,9 +54656,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AFormaldef[81] = {
 /* 3: Attribute AFormaldef::_location */
 /* 4: Attribute AFormaldef::_first_location */
 /* 5: Attribute AFormaldef::_last_location */
-/* 6: Attribute AFormaldef::_formal */
-/* 7: Attribute AFormaldef::_n_id */
-/* 8: Attribute AFormaldef::_n_type */
+/* 6: Attribute AFormaldef::_n_annotations */
+/* 7: Attribute AFormaldef::_formal */
+/* 8: Attribute AFormaldef::_n_id */
+/* 9: Attribute AFormaldef::_n_type */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AFormaldef[] = "init var of AFormaldef";
 void INIT_ATTRIBUTES__parser___parser_nodes___AFormaldef(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -52324,7 +54674,10 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AFormaldef(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:482 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:489 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -52332,7 +54685,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AFormaldef(val_t p0){
 val_t NEW_parser___parser_nodes___AFormaldef(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
+  obj = alloc(sizeof(val_t) * 10);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AFormaldef;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -52366,13 +54719,13 @@ val_t NEW_AFormaldef_parser___parser_prod___AFormaldef___empty_init(void){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 898;
+  fra.me.line = 970;
   fra.me.meth = LOCATE_NEW_AFormaldef_parser___parser_prod___AFormaldef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:898 */
+  /* parser/parser_prod.nit:970 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AFormaldef();
   INIT_ATTRIBUTES__parser___parser_nodes___AFormaldef(fra.me.REG[0]);
   parser___parser_prod___AFormaldef___empty_init(fra.me.REG[0], init_table);
@@ -52381,29 +54734,31 @@ val_t NEW_AFormaldef_parser___parser_prod___AFormaldef___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef[] = "new AFormaldef parser_prod::AFormaldef::init_aformaldef";
-val_t NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+val_t NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t tmp;
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 900;
+  fra.me.line = 972;
   fra.me.meth = LOCATE_NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:900 */
-  fra.me.REG[2] = NEW_parser___parser_nodes___AFormaldef();
-  INIT_ATTRIBUTES__parser___parser_nodes___AFormaldef(fra.me.REG[2]);
-  parser___parser_prod___AFormaldef___init_aformaldef(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
-  CHECKNEW_parser___parser_nodes___AFormaldef(fra.me.REG[2]);
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:972 */
+  fra.me.REG[3] = NEW_parser___parser_nodes___AFormaldef();
+  INIT_ATTRIBUTES__parser___parser_nodes___AFormaldef(fra.me.REG[3]);
+  parser___parser_prod___AFormaldef___init_aformaldef(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
+  CHECKNEW_parser___parser_nodes___AFormaldef(fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[2];
+  return fra.me.REG[3];
 }
 static const char LOCATE_NEW_AFormaldef_parser___parser_nodes___ANode___init[] = "new AFormaldef parser_nodes::ANode::init";
 val_t NEW_AFormaldef_parser___parser_nodes___ANode___init(void){
@@ -52427,13 +54782,13 @@ val_t NEW_AFormaldef_parser___parser_nodes___ANode___init(void){
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_parser___parser_nodes___ASuperclass[84] = {
-  {(bigint) 3239 /* 0: Identity */},
+  {(bigint) 3739 /* 0: Identity */},
   {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ASuperclass" /* 2: Class Name */},
   {(bigint) 3 /* 3: ASuperclass < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ASuperclass < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ASuperclass < Prod: superclass typecheck marker */},
-  {(bigint) 3239 /* 6: ASuperclass < ASuperclass: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ASuperclass < Prod: superclass typecheck marker */},
+  {(bigint) 3739 /* 6: ASuperclass < ASuperclass: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -52501,14 +54856,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ASuperclass[84] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 0 /* 72: ASuperclass < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ASuperclass___ancestor},
   {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
   {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
   {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
   {(bigint) parser___parser_prod___ASuperclass___empty_init},
   {(bigint) parser___parser_prod___ASuperclass___init_asuperclass},
-  {(bigint) 3 /* 80: ASuperclass < ASuperclass: superclass init_table position */},
-  {(bigint) parser___parser_nodes___ASuperclass___n_kwspecial},
+  {(bigint) 3 /* 81: ASuperclass < ASuperclass: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASuperclass___n_kwsuper},
   {(bigint) parser___parser_nodes___ASuperclass___n_type},
 };
@@ -52518,8 +54873,8 @@ const classtable_elt_t VFT_parser___parser_nodes___ASuperclass[84] = {
 /* 3: Attribute ASuperclass::_location */
 /* 4: Attribute ASuperclass::_first_location */
 /* 5: Attribute ASuperclass::_last_location */
-/* 6: Attribute ASuperclass::_ancestor */
-/* 7: Attribute ASuperclass::_n_kwspecial */
+/* 6: Attribute ASuperclass::_n_annotations */
+/* 7: Attribute ASuperclass::_ancestor */
 /* 8: Attribute ASuperclass::_n_kwsuper */
 /* 9: Attribute ASuperclass::_n_type */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ASuperclass[] = "init var of ASuperclass";
@@ -52536,12 +54891,9 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ASuperclass(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:486 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:487 */
+  /* parser/parser_nodes.nit:56 */
   fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ASuperclass(void)
@@ -52567,6 +54919,11 @@ void CHECKNEW_parser___parser_nodes___ASuperclass(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -52581,13 +54938,13 @@ val_t NEW_ASuperclass_parser___parser_prod___ASuperclass___empty_init(void){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 947;
+  fra.me.line = 1037;
   fra.me.meth = LOCATE_NEW_ASuperclass_parser___parser_prod___ASuperclass___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:947 */
+  /* parser/parser_prod.nit:1037 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ASuperclass();
   INIT_ATTRIBUTES__parser___parser_nodes___ASuperclass(fra.me.REG[0]);
   parser___parser_prod___ASuperclass___empty_init(fra.me.REG[0], init_table);
@@ -52602,7 +54959,7 @@ val_t NEW_ASuperclass_parser___parser_prod___ASuperclass___init_asuperclass(val_
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 949;
+  fra.me.line = 1039;
   fra.me.meth = LOCATE_NEW_ASuperclass_parser___parser_prod___ASuperclass___init_asuperclass;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -52614,7 +54971,7 @@ val_t NEW_ASuperclass_parser___parser_prod___ASuperclass___init_asuperclass(val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:949 */
+  /* parser/parser_prod.nit:1039 */
   fra.me.REG[3] = NEW_parser___parser_nodes___ASuperclass();
   INIT_ATTRIBUTES__parser___parser_nodes___ASuperclass(fra.me.REG[3]);
   parser___parser_prod___ASuperclass___init_asuperclass(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -52643,15 +55000,15 @@ val_t NEW_ASuperclass_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AAttrPropdef[101] = {
-  {(bigint) 4011 /* 0: Identity */},
-  {(bigint) 20 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AAttrPropdef[102] = {
+  {(bigint) 4555 /* 0: Identity */},
+  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AAttrPropdef" /* 2: Class Name */},
   {(bigint) 3 /* 3: AAttrPropdef < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AAttrPropdef < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AAttrPropdef < Prod: superclass typecheck marker */},
-  {(bigint) 3251 /* 6: AAttrPropdef < APropdef: superclass typecheck marker */},
-  {(bigint) 4011 /* 7: AAttrPropdef < AAttrPropdef: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AAttrPropdef < Prod: superclass typecheck marker */},
+  {(bigint) 3751 /* 6: AAttrPropdef < APropdef: superclass typecheck marker */},
+  {(bigint) 4555 /* 7: AAttrPropdef < AAttrPropdef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -52718,12 +55075,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AAttrPropdef[101] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AAttrPropdef < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___APropdef___process_and_check},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_intro},
   {(bigint) syntax___mmbuilder___APropdef___inherit_signature},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_redef},
   {(bigint) syntax___typing___APropdef___self_var},
-  {(bigint) 0 /* 79: AAttrPropdef < APropdef: superclass init_table position */},
+  {(bigint) 0 /* 80: AAttrPropdef < APropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___APropdef___n_doc},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
@@ -52733,7 +55091,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AAttrPropdef[101] = {
   {(bigint) syntax___mmbuilder___AAttrPropdef___writemethod},
   {(bigint) parser___parser_prod___AAttrPropdef___empty_init},
   {(bigint) parser___parser_prod___AAttrPropdef___init_aattrpropdef},
-  {(bigint) 4 /* 89: AAttrPropdef < AAttrPropdef: superclass init_table position */},
+  {(bigint) 4 /* 90: AAttrPropdef < AAttrPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAttrPropdef___n_kwredef},
   {(bigint) parser___parser_nodes___AAttrPropdef___n_visibility},
   {(bigint) parser___parser_nodes___AAttrPropdef___n_kwvar},
@@ -52752,20 +55110,21 @@ const classtable_elt_t VFT_parser___parser_nodes___AAttrPropdef[101] = {
 /* 3: Attribute AAttrPropdef::_location */
 /* 4: Attribute AAttrPropdef::_first_location */
 /* 5: Attribute AAttrPropdef::_last_location */
-/* 6: Attribute AAttrPropdef::_n_doc */
-/* 7: Attribute AAttrPropdef::_self_var */
-/* 8: Attribute AAttrPropdef::_readmethod */
-/* 9: Attribute AAttrPropdef::_writemethod */
-/* 10: Attribute AAttrPropdef::_prop */
-/* 11: Attribute AAttrPropdef::_n_kwredef */
-/* 12: Attribute AAttrPropdef::_n_visibility */
-/* 13: Attribute AAttrPropdef::_n_kwvar */
-/* 14: Attribute AAttrPropdef::_n_id */
-/* 15: Attribute AAttrPropdef::_n_id2 */
-/* 16: Attribute AAttrPropdef::_n_type */
-/* 17: Attribute AAttrPropdef::_n_readable */
-/* 18: Attribute AAttrPropdef::_n_writable */
-/* 19: Attribute AAttrPropdef::_n_expr */
+/* 6: Attribute AAttrPropdef::_n_annotations */
+/* 7: Attribute AAttrPropdef::_n_doc */
+/* 8: Attribute AAttrPropdef::_self_var */
+/* 9: Attribute AAttrPropdef::_readmethod */
+/* 10: Attribute AAttrPropdef::_writemethod */
+/* 11: Attribute AAttrPropdef::_prop */
+/* 12: Attribute AAttrPropdef::_n_kwredef */
+/* 13: Attribute AAttrPropdef::_n_visibility */
+/* 14: Attribute AAttrPropdef::_n_kwvar */
+/* 15: Attribute AAttrPropdef::_n_id */
+/* 16: Attribute AAttrPropdef::_n_id2 */
+/* 17: Attribute AAttrPropdef::_n_type */
+/* 18: Attribute AAttrPropdef::_n_readable */
+/* 19: Attribute AAttrPropdef::_n_writable */
+/* 20: Attribute AAttrPropdef::_n_expr */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAttrPropdef[] = "init var of AAttrPropdef";
 void INIT_ATTRIBUTES__parser___parser_nodes___AAttrPropdef(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -52780,22 +55139,25 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAttrPropdef(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:491 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:497 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
   /* parser/parser_nodes.nit:501 */
   fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:502 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:495 */
-  fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:500 */
+  /* parser/parser_nodes.nit:506 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:503 */
+  /* parser/parser_nodes.nit:507 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:508 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:509 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -52803,7 +55165,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAttrPropdef(val_t p0){
 val_t NEW_parser___parser_nodes___AAttrPropdef(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 20);
+  obj = alloc(sizeof(val_t) * 21);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AAttrPropdef;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -52842,13 +55204,13 @@ val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1014;
+  fra.me.line = 1100;
   fra.me.meth = LOCATE_NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:1014 */
+  /* parser/parser_prod.nit:1100 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAttrPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AAttrPropdef(fra.me.REG[0]);
   parser___parser_prod___AAttrPropdef___empty_init(fra.me.REG[0], init_table);
@@ -52857,16 +55219,16 @@ val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef[] = "new AAttrPropdef parser_prod::AAttrPropdef::init_aattrpropdef";
-val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10){
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1016;
+  fra.me.line = 1102;
   fra.me.meth = LOCATE_NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 12;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -52879,6 +55241,7 @@ val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(v
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -52889,13 +55252,14 @@ val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(v
   fra.me.REG[7] = p7;
   fra.me.REG[8] = p8;
   fra.me.REG[9] = p9;
-  /* parser/parser_prod.nit:1016 */
-  fra.me.REG[10] = NEW_parser___parser_nodes___AAttrPropdef();
-  INIT_ATTRIBUTES__parser___parser_nodes___AAttrPropdef(fra.me.REG[10]);
-  parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9], init_table);
-  CHECKNEW_parser___parser_nodes___AAttrPropdef(fra.me.REG[10]);
+  fra.me.REG[10] = p10;
+  /* parser/parser_prod.nit:1102 */
+  fra.me.REG[11] = NEW_parser___parser_nodes___AAttrPropdef();
+  INIT_ATTRIBUTES__parser___parser_nodes___AAttrPropdef(fra.me.REG[11]);
+  parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[11], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10], init_table);
+  CHECKNEW_parser___parser_nodes___AAttrPropdef(fra.me.REG[11]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[10];
+  return fra.me.REG[11];
 }
 static const char LOCATE_NEW_AAttrPropdef_parser___parser_nodes___ANode___init[] = "new AAttrPropdef parser_nodes::ANode::init";
 val_t NEW_AAttrPropdef_parser___parser_nodes___ANode___init(void){
@@ -52918,16 +55282,16 @@ val_t NEW_AAttrPropdef_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ADeferredMethPropdef[100] = {
-  {(bigint) 4207 /* 0: Identity */},
-  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ADeferredMethPropdef[101] = {
+  {(bigint) 4763 /* 0: Identity */},
+  {(bigint) 16 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ADeferredMethPropdef" /* 2: Class Name */},
   {(bigint) 3 /* 3: ADeferredMethPropdef < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ADeferredMethPropdef < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ADeferredMethPropdef < Prod: superclass typecheck marker */},
-  {(bigint) 3251 /* 6: ADeferredMethPropdef < APropdef: superclass typecheck marker */},
-  {(bigint) 3883 /* 7: ADeferredMethPropdef < AMethPropdef: superclass typecheck marker */},
-  {(bigint) 4207 /* 8: ADeferredMethPropdef < ADeferredMethPropdef: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ADeferredMethPropdef < Prod: superclass typecheck marker */},
+  {(bigint) 3751 /* 6: ADeferredMethPropdef < APropdef: superclass typecheck marker */},
+  {(bigint) 4399 /* 7: ADeferredMethPropdef < AMethPropdef: superclass typecheck marker */},
+  {(bigint) 4763 /* 8: ADeferredMethPropdef < ADeferredMethPropdef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -52993,12 +55357,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ADeferredMethPropdef[100] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: ADeferredMethPropdef < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___APropdef___process_and_check},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_intro},
   {(bigint) syntax___mmbuilder___APropdef___inherit_signature},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_redef},
   {(bigint) syntax___typing___APropdef___self_var},
-  {(bigint) 1 /* 79: ADeferredMethPropdef < APropdef: superclass init_table position */},
+  {(bigint) 1 /* 80: ADeferredMethPropdef < APropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___APropdef___n_doc},
   {(bigint) syntax___mmbuilder___AMethPropdef___name},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
@@ -53007,7 +55372,7 @@ const classtable_elt_t VFT_parser___parser_nodes___ADeferredMethPropdef[100] = {
   {(bigint) syntax___mmbuilder___AMethPropdef___method},
   {(bigint) parser___parser_prod___AMethPropdef___empty_init},
   {(bigint) parser___parser_prod___AMethPropdef___init_amethpropdef},
-  {(bigint) 0 /* 88: ADeferredMethPropdef < AMethPropdef: superclass init_table position */},
+  {(bigint) 0 /* 89: ADeferredMethPropdef < AMethPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AMethPropdef___n_kwredef},
   {(bigint) parser___parser_nodes___AMethPropdef___n_visibility},
   {(bigint) parser___parser_nodes___AMethPropdef___n_methid},
@@ -53017,7 +55382,7 @@ const classtable_elt_t VFT_parser___parser_nodes___ADeferredMethPropdef[100] = {
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) parser___parser_prod___ADeferredMethPropdef___empty_init},
   {(bigint) parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef},
-  {(bigint) 5 /* 98: ADeferredMethPropdef < ADeferredMethPropdef: superclass init_table position */},
+  {(bigint) 5 /* 99: ADeferredMethPropdef < ADeferredMethPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___ADeferredMethPropdef___n_kwmeth},
 };
 /* 0: Pointer to the classtable */
@@ -53026,15 +55391,16 @@ const classtable_elt_t VFT_parser___parser_nodes___ADeferredMethPropdef[100] = {
 /* 3: Attribute ADeferredMethPropdef::_location */
 /* 4: Attribute ADeferredMethPropdef::_first_location */
 /* 5: Attribute ADeferredMethPropdef::_last_location */
-/* 6: Attribute ADeferredMethPropdef::_n_doc */
-/* 7: Attribute ADeferredMethPropdef::_self_var */
-/* 8: Attribute ADeferredMethPropdef::_name */
-/* 9: Attribute ADeferredMethPropdef::_method */
-/* 10: Attribute ADeferredMethPropdef::_n_kwredef */
-/* 11: Attribute ADeferredMethPropdef::_n_visibility */
-/* 12: Attribute ADeferredMethPropdef::_n_methid */
-/* 13: Attribute ADeferredMethPropdef::_n_signature */
-/* 14: Attribute ADeferredMethPropdef::_n_kwmeth */
+/* 6: Attribute ADeferredMethPropdef::_n_annotations */
+/* 7: Attribute ADeferredMethPropdef::_n_doc */
+/* 8: Attribute ADeferredMethPropdef::_self_var */
+/* 9: Attribute ADeferredMethPropdef::_name */
+/* 10: Attribute ADeferredMethPropdef::_method */
+/* 11: Attribute ADeferredMethPropdef::_n_kwredef */
+/* 12: Attribute ADeferredMethPropdef::_n_visibility */
+/* 13: Attribute ADeferredMethPropdef::_n_methid */
+/* 14: Attribute ADeferredMethPropdef::_n_signature */
+/* 15: Attribute ADeferredMethPropdef::_n_kwmeth */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ADeferredMethPropdef[] = "init var of ADeferredMethPropdef";
 void INIT_ATTRIBUTES__parser___parser_nodes___ADeferredMethPropdef(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -53049,13 +55415,16 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ADeferredMethPropdef(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:491 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:497 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:511 */
+  /* parser/parser_nodes.nit:517 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:513 */
+  /* parser/parser_nodes.nit:519 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -53063,7 +55432,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ADeferredMethPropdef(val_t p0){
 val_t NEW_parser___parser_nodes___ADeferredMethPropdef(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 15);
+  obj = alloc(sizeof(val_t) * 16);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ADeferredMethPropdef;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -53097,13 +55466,13 @@ val_t NEW_ADeferredMethPropdef_parser___parser_prod___AMethPropdef___empty_init(
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1203;
+  fra.me.line = 1307;
   fra.me.meth = LOCATE_NEW_ADeferredMethPropdef_parser___parser_prod___AMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:1203 */
+  /* parser/parser_prod.nit:1307 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ADeferredMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___ADeferredMethPropdef(fra.me.REG[0]);
   parser___parser_prod___AMethPropdef___empty_init(fra.me.REG[0], init_table);
@@ -53118,13 +55487,13 @@ val_t NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___emp
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1298;
+  fra.me.line = 1402;
   fra.me.meth = LOCATE_NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:1298 */
+  /* parser/parser_prod.nit:1402 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ADeferredMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___ADeferredMethPropdef(fra.me.REG[0]);
   parser___parser_prod___ADeferredMethPropdef___empty_init(fra.me.REG[0], init_table);
@@ -53133,16 +55502,16 @@ val_t NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___emp
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef[] = "new ADeferredMethPropdef parser_prod::ADeferredMethPropdef::init_adeferredmethpropdef";
-val_t NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+val_t NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t tmp;
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1300;
+  fra.me.line = 1404;
   fra.me.meth = LOCATE_NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -53151,19 +55520,21 @@ val_t NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___ini
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:1300 */
-  fra.me.REG[6] = NEW_parser___parser_nodes___ADeferredMethPropdef();
-  INIT_ATTRIBUTES__parser___parser_nodes___ADeferredMethPropdef(fra.me.REG[6]);
-  parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[6], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], init_table);
-  CHECKNEW_parser___parser_nodes___ADeferredMethPropdef(fra.me.REG[6]);
+  fra.me.REG[6] = p6;
+  /* parser/parser_prod.nit:1404 */
+  fra.me.REG[7] = NEW_parser___parser_nodes___ADeferredMethPropdef();
+  INIT_ATTRIBUTES__parser___parser_nodes___ADeferredMethPropdef(fra.me.REG[7]);
+  parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], init_table);
+  CHECKNEW_parser___parser_nodes___ADeferredMethPropdef(fra.me.REG[7]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[6];
+  return fra.me.REG[7];
 }
 static const char LOCATE_NEW_ADeferredMethPropdef_parser___parser_nodes___ANode___init[] = "new ADeferredMethPropdef parser_nodes::ANode::init";
 val_t NEW_ADeferredMethPropdef_parser___parser_nodes___ANode___init(void){
@@ -53193,7 +55564,7 @@ val_t NEW_ADeferredMethPropdef_parser___parser_prod___AMethPropdef___init_amethp
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1205;
+  fra.me.line = 1309;
   fra.me.meth = LOCATE_NEW_ADeferredMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -53209,7 +55580,7 @@ val_t NEW_ADeferredMethPropdef_parser___parser_prod___AMethPropdef___init_amethp
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:1205 */
+  /* parser/parser_prod.nit:1309 */
   fra.me.REG[5] = NEW_parser___parser_nodes___ADeferredMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___ADeferredMethPropdef(fra.me.REG[5]);
   parser___parser_prod___AMethPropdef___init_amethpropdef(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
@@ -53217,16 +55588,16 @@ val_t NEW_ADeferredMethPropdef_parser___parser_prod___AMethPropdef___init_amethp
   stack_frame_head = fra.me.prev;
   return fra.me.REG[5];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AInternMethPropdef[100] = {
-  {(bigint) 4163 /* 0: Identity */},
-  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AInternMethPropdef[101] = {
+  {(bigint) 4719 /* 0: Identity */},
+  {(bigint) 16 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AInternMethPropdef" /* 2: Class Name */},
   {(bigint) 3 /* 3: AInternMethPropdef < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AInternMethPropdef < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AInternMethPropdef < Prod: superclass typecheck marker */},
-  {(bigint) 3251 /* 6: AInternMethPropdef < APropdef: superclass typecheck marker */},
-  {(bigint) 3883 /* 7: AInternMethPropdef < AMethPropdef: superclass typecheck marker */},
-  {(bigint) 4163 /* 8: AInternMethPropdef < AInternMethPropdef: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AInternMethPropdef < Prod: superclass typecheck marker */},
+  {(bigint) 3751 /* 6: AInternMethPropdef < APropdef: superclass typecheck marker */},
+  {(bigint) 4399 /* 7: AInternMethPropdef < AMethPropdef: superclass typecheck marker */},
+  {(bigint) 4719 /* 8: AInternMethPropdef < AInternMethPropdef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -53292,12 +55663,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AInternMethPropdef[100] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AInternMethPropdef < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___APropdef___process_and_check},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_intro},
   {(bigint) syntax___mmbuilder___APropdef___inherit_signature},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_redef},
   {(bigint) syntax___typing___APropdef___self_var},
-  {(bigint) 1 /* 79: AInternMethPropdef < APropdef: superclass init_table position */},
+  {(bigint) 1 /* 80: AInternMethPropdef < APropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___APropdef___n_doc},
   {(bigint) syntax___mmbuilder___AMethPropdef___name},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
@@ -53306,7 +55678,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AInternMethPropdef[100] = {
   {(bigint) syntax___mmbuilder___AMethPropdef___method},
   {(bigint) parser___parser_prod___AMethPropdef___empty_init},
   {(bigint) parser___parser_prod___AMethPropdef___init_amethpropdef},
-  {(bigint) 0 /* 88: AInternMethPropdef < AMethPropdef: superclass init_table position */},
+  {(bigint) 0 /* 89: AInternMethPropdef < AMethPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AMethPropdef___n_kwredef},
   {(bigint) parser___parser_nodes___AMethPropdef___n_visibility},
   {(bigint) parser___parser_nodes___AMethPropdef___n_methid},
@@ -53316,7 +55688,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AInternMethPropdef[100] = {
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) parser___parser_prod___AInternMethPropdef___empty_init},
   {(bigint) parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef},
-  {(bigint) 5 /* 98: AInternMethPropdef < AInternMethPropdef: superclass init_table position */},
+  {(bigint) 5 /* 99: AInternMethPropdef < AInternMethPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AInternMethPropdef___n_kwmeth},
 };
 /* 0: Pointer to the classtable */
@@ -53325,15 +55697,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AInternMethPropdef[100] = {
 /* 3: Attribute AInternMethPropdef::_location */
 /* 4: Attribute AInternMethPropdef::_first_location */
 /* 5: Attribute AInternMethPropdef::_last_location */
-/* 6: Attribute AInternMethPropdef::_n_doc */
-/* 7: Attribute AInternMethPropdef::_self_var */
-/* 8: Attribute AInternMethPropdef::_name */
-/* 9: Attribute AInternMethPropdef::_method */
-/* 10: Attribute AInternMethPropdef::_n_kwredef */
-/* 11: Attribute AInternMethPropdef::_n_visibility */
-/* 12: Attribute AInternMethPropdef::_n_methid */
-/* 13: Attribute AInternMethPropdef::_n_signature */
-/* 14: Attribute AInternMethPropdef::_n_kwmeth */
+/* 6: Attribute AInternMethPropdef::_n_annotations */
+/* 7: Attribute AInternMethPropdef::_n_doc */
+/* 8: Attribute AInternMethPropdef::_self_var */
+/* 9: Attribute AInternMethPropdef::_name */
+/* 10: Attribute AInternMethPropdef::_method */
+/* 11: Attribute AInternMethPropdef::_n_kwredef */
+/* 12: Attribute AInternMethPropdef::_n_visibility */
+/* 13: Attribute AInternMethPropdef::_n_methid */
+/* 14: Attribute AInternMethPropdef::_n_signature */
+/* 15: Attribute AInternMethPropdef::_n_kwmeth */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AInternMethPropdef[] = "init var of AInternMethPropdef";
 void INIT_ATTRIBUTES__parser___parser_nodes___AInternMethPropdef(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -53348,13 +55721,16 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AInternMethPropdef(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:491 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:497 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:511 */
+  /* parser/parser_nodes.nit:517 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:513 */
+  /* parser/parser_nodes.nit:519 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -53362,7 +55738,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AInternMethPropdef(val_t p0){
 val_t NEW_parser___parser_nodes___AInternMethPropdef(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 15);
+  obj = alloc(sizeof(val_t) * 16);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AInternMethPropdef;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -53396,13 +55772,13 @@ val_t NEW_AInternMethPropdef_parser___parser_prod___AMethPropdef___empty_init(vo
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1203;
+  fra.me.line = 1307;
   fra.me.meth = LOCATE_NEW_AInternMethPropdef_parser___parser_prod___AMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:1203 */
+  /* parser/parser_prod.nit:1307 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AInternMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AInternMethPropdef(fra.me.REG[0]);
   parser___parser_prod___AMethPropdef___empty_init(fra.me.REG[0], init_table);
@@ -53417,13 +55793,13 @@ val_t NEW_AInternMethPropdef_parser___parser_prod___AInternMethPropdef___empty_i
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1407;
+  fra.me.line = 1529;
   fra.me.meth = LOCATE_NEW_AInternMethPropdef_parser___parser_prod___AInternMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:1407 */
+  /* parser/parser_prod.nit:1529 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AInternMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AInternMethPropdef(fra.me.REG[0]);
   parser___parser_prod___AInternMethPropdef___empty_init(fra.me.REG[0], init_table);
@@ -53438,7 +55814,7 @@ val_t NEW_AInternMethPropdef_parser___parser_prod___AInternMethPropdef___init_ai
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1409;
+  fra.me.line = 1531;
   fra.me.meth = LOCATE_NEW_AInternMethPropdef_parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -53456,7 +55832,7 @@ val_t NEW_AInternMethPropdef_parser___parser_prod___AInternMethPropdef___init_ai
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:1409 */
+  /* parser/parser_prod.nit:1531 */
   fra.me.REG[6] = NEW_parser___parser_nodes___AInternMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AInternMethPropdef(fra.me.REG[6]);
   parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[6], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], init_table);
@@ -53492,7 +55868,7 @@ val_t NEW_AInternMethPropdef_parser___parser_prod___AMethPropdef___init_amethpro
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1205;
+  fra.me.line = 1309;
   fra.me.meth = LOCATE_NEW_AInternMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -53508,7 +55884,7 @@ val_t NEW_AInternMethPropdef_parser___parser_prod___AMethPropdef___init_amethpro
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:1205 */
+  /* parser/parser_prod.nit:1309 */
   fra.me.REG[5] = NEW_parser___parser_nodes___AInternMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AInternMethPropdef(fra.me.REG[5]);
   parser___parser_prod___AMethPropdef___init_amethpropdef(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
@@ -53516,18 +55892,18 @@ val_t NEW_AInternMethPropdef_parser___parser_prod___AMethPropdef___init_amethpro
   stack_frame_head = fra.me.prev;
   return fra.me.REG[5];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AExternMethPropdef[108] = {
-  {(bigint) 4287 /* 0: Identity */},
-  {(bigint) 18 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AExternMethPropdef[109] = {
+  {(bigint) 4843 /* 0: Identity */},
+  {(bigint) 19 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AExternMethPropdef" /* 2: Class Name */},
   {(bigint) 3 /* 3: AExternMethPropdef < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AExternMethPropdef < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AExternMethPropdef < Prod: superclass typecheck marker */},
-  {(bigint) 3251 /* 6: AExternMethPropdef < APropdef: superclass typecheck marker */},
-  {(bigint) 3883 /* 7: AExternMethPropdef < AMethPropdef: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AExternMethPropdef < Prod: superclass typecheck marker */},
+  {(bigint) 3751 /* 6: AExternMethPropdef < APropdef: superclass typecheck marker */},
+  {(bigint) 4399 /* 7: AExternMethPropdef < AMethPropdef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4191 /* 9: AExternMethPropdef < AExternPropdef: superclass typecheck marker */},
-  {(bigint) 4287 /* 10: AExternMethPropdef < AExternMethPropdef: superclass typecheck marker */},
+  {(bigint) 4747 /* 9: AExternMethPropdef < AExternPropdef: superclass typecheck marker */},
+  {(bigint) 4843 /* 10: AExternMethPropdef < AExternMethPropdef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -53591,12 +55967,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AExternMethPropdef[108] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 3 /* 72: AExternMethPropdef < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___APropdef___process_and_check},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_intro},
   {(bigint) syntax___mmbuilder___APropdef___inherit_signature},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_redef},
   {(bigint) syntax___typing___APropdef___self_var},
-  {(bigint) 2 /* 79: AExternMethPropdef < APropdef: superclass init_table position */},
+  {(bigint) 2 /* 80: AExternMethPropdef < APropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___APropdef___n_doc},
   {(bigint) syntax___mmbuilder___AMethPropdef___name},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
@@ -53605,7 +55982,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AExternMethPropdef[108] = {
   {(bigint) syntax___mmbuilder___AMethPropdef___method},
   {(bigint) parser___parser_prod___AMethPropdef___empty_init},
   {(bigint) parser___parser_prod___AMethPropdef___init_amethpropdef},
-  {(bigint) 1 /* 88: AExternMethPropdef < AMethPropdef: superclass init_table position */},
+  {(bigint) 1 /* 89: AExternMethPropdef < AMethPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AMethPropdef___n_kwredef},
   {(bigint) parser___parser_nodes___AMethPropdef___n_visibility},
   {(bigint) parser___parser_nodes___AMethPropdef___n_methid},
@@ -53614,7 +55991,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AExternMethPropdef[108] = {
   {(bigint) syntax___icode_generation___AExternMethPropdef___fill_iroutine},
   {(bigint) syntax___typing___ANode___accept_typing},
   {0} /* Class Hole :( */,
-  {(bigint) 0 /* 97: AExternMethPropdef < AExternPropdef: superclass init_table position */},
+  {(bigint) 0 /* 98: AExternMethPropdef < AExternPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AExternPropdef___n_extern},
   {(bigint) parser___parser_nodes___AExternPropdef___n_extern_calls},
   {(bigint) parser___parser_nodes___AExternPropdef___n_extern_code_block},
@@ -53623,7 +56000,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AExternMethPropdef[108] = {
   {(bigint) syntax___icode_generation___AExternPropdef___fill_iroutine},
   {(bigint) parser___parser_prod___AExternMethPropdef___empty_init},
   {(bigint) parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef},
-  {(bigint) 6 /* 106: AExternMethPropdef < AExternMethPropdef: superclass init_table position */},
+  {(bigint) 6 /* 107: AExternMethPropdef < AExternMethPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AExternMethPropdef___n_kwmeth},
 };
 /* 0: Pointer to the classtable */
@@ -53632,18 +56009,19 @@ const classtable_elt_t VFT_parser___parser_nodes___AExternMethPropdef[108] = {
 /* 3: Attribute AExternMethPropdef::_location */
 /* 4: Attribute AExternMethPropdef::_first_location */
 /* 5: Attribute AExternMethPropdef::_last_location */
-/* 6: Attribute AExternMethPropdef::_n_doc */
-/* 7: Attribute AExternMethPropdef::_self_var */
-/* 8: Attribute AExternMethPropdef::_name */
-/* 9: Attribute AExternMethPropdef::_method */
-/* 10: Attribute AExternMethPropdef::_n_kwredef */
-/* 11: Attribute AExternMethPropdef::_n_visibility */
-/* 12: Attribute AExternMethPropdef::_n_methid */
-/* 13: Attribute AExternMethPropdef::_n_signature */
-/* 14: Attribute AExternMethPropdef::_n_extern */
-/* 15: Attribute AExternMethPropdef::_n_extern_calls */
-/* 16: Attribute AExternMethPropdef::_n_extern_code_block */
-/* 17: Attribute AExternMethPropdef::_n_kwmeth */
+/* 6: Attribute AExternMethPropdef::_n_annotations */
+/* 7: Attribute AExternMethPropdef::_n_doc */
+/* 8: Attribute AExternMethPropdef::_self_var */
+/* 9: Attribute AExternMethPropdef::_name */
+/* 10: Attribute AExternMethPropdef::_method */
+/* 11: Attribute AExternMethPropdef::_n_kwredef */
+/* 12: Attribute AExternMethPropdef::_n_visibility */
+/* 13: Attribute AExternMethPropdef::_n_methid */
+/* 14: Attribute AExternMethPropdef::_n_signature */
+/* 15: Attribute AExternMethPropdef::_n_extern */
+/* 16: Attribute AExternMethPropdef::_n_extern_calls */
+/* 17: Attribute AExternMethPropdef::_n_extern_code_block */
+/* 18: Attribute AExternMethPropdef::_n_kwmeth */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AExternMethPropdef[] = "init var of AExternMethPropdef";
 void INIT_ATTRIBUTES__parser___parser_nodes___AExternMethPropdef(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -53658,22 +56036,25 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AExternMethPropdef(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:491 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:497 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:511 */
+  /* parser/parser_nodes.nit:517 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:513 */
+  /* parser/parser_nodes.nit:519 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:534 */
+  /* parser/parser_nodes.nit:540 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:535 */
+  /* parser/parser_nodes.nit:541 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:536 */
+  /* parser/parser_nodes.nit:542 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -53681,7 +56062,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AExternMethPropdef(val_t p0){
 val_t NEW_parser___parser_nodes___AExternMethPropdef(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 18);
+  obj = alloc(sizeof(val_t) * 19);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AExternMethPropdef;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -53715,13 +56096,13 @@ val_t NEW_AExternMethPropdef_parser___parser_prod___AMethPropdef___empty_init(vo
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1203;
+  fra.me.line = 1307;
   fra.me.meth = LOCATE_NEW_AExternMethPropdef_parser___parser_prod___AMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:1203 */
+  /* parser/parser_prod.nit:1307 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AExternMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AExternMethPropdef(fra.me.REG[0]);
   parser___parser_prod___AMethPropdef___empty_init(fra.me.REG[0], init_table);
@@ -53736,13 +56117,13 @@ val_t NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___empty_i
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1516;
+  fra.me.line = 1638;
   fra.me.meth = LOCATE_NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:1516 */
+  /* parser/parser_prod.nit:1638 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AExternMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AExternMethPropdef(fra.me.REG[0]);
   parser___parser_prod___AExternMethPropdef___empty_init(fra.me.REG[0], init_table);
@@ -53757,7 +56138,7 @@ val_t NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_ae
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1518;
+  fra.me.line = 1640;
   fra.me.meth = LOCATE_NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -53781,7 +56162,7 @@ val_t NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_ae
   fra.me.REG[6] = p6;
   fra.me.REG[7] = p7;
   fra.me.REG[8] = p8;
-  /* parser/parser_prod.nit:1518 */
+  /* parser/parser_prod.nit:1640 */
   fra.me.REG[9] = NEW_parser___parser_nodes___AExternMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AExternMethPropdef(fra.me.REG[9]);
   parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], init_table);
@@ -53817,7 +56198,7 @@ val_t NEW_AExternMethPropdef_parser___parser_prod___AMethPropdef___init_amethpro
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1205;
+  fra.me.line = 1309;
   fra.me.meth = LOCATE_NEW_AExternMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -53833,7 +56214,7 @@ val_t NEW_AExternMethPropdef_parser___parser_prod___AMethPropdef___init_amethpro
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:1205 */
+  /* parser/parser_prod.nit:1309 */
   fra.me.REG[5] = NEW_parser___parser_nodes___AExternMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AExternMethPropdef(fra.me.REG[5]);
   parser___parser_prod___AMethPropdef___init_amethpropdef(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
@@ -53841,17 +56222,17 @@ val_t NEW_AExternMethPropdef_parser___parser_prod___AMethPropdef___init_amethpro
   stack_frame_head = fra.me.prev;
   return fra.me.REG[5];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AConcreteMethPropdef[103] = {
-  {(bigint) 4219 /* 0: Identity */},
-  {(bigint) 16 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AConcreteMethPropdef[104] = {
+  {(bigint) 4775 /* 0: Identity */},
+  {(bigint) 17 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AConcreteMethPropdef" /* 2: Class Name */},
   {(bigint) 3 /* 3: AConcreteMethPropdef < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AConcreteMethPropdef < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AConcreteMethPropdef < Prod: superclass typecheck marker */},
-  {(bigint) 3251 /* 6: AConcreteMethPropdef < APropdef: superclass typecheck marker */},
-  {(bigint) 3883 /* 7: AConcreteMethPropdef < AMethPropdef: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AConcreteMethPropdef < Prod: superclass typecheck marker */},
+  {(bigint) 3751 /* 6: AConcreteMethPropdef < APropdef: superclass typecheck marker */},
+  {(bigint) 4399 /* 7: AConcreteMethPropdef < AMethPropdef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4219 /* 9: AConcreteMethPropdef < AConcreteMethPropdef: superclass typecheck marker */},
+  {(bigint) 4775 /* 9: AConcreteMethPropdef < AConcreteMethPropdef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -53916,12 +56297,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AConcreteMethPropdef[103] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AConcreteMethPropdef < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___APropdef___process_and_check},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_intro},
   {(bigint) syntax___mmbuilder___APropdef___inherit_signature},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_redef},
   {(bigint) syntax___typing___APropdef___self_var},
-  {(bigint) 1 /* 79: AConcreteMethPropdef < APropdef: superclass init_table position */},
+  {(bigint) 1 /* 80: AConcreteMethPropdef < APropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___APropdef___n_doc},
   {(bigint) syntax___mmbuilder___AMethPropdef___name},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
@@ -53930,7 +56312,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AConcreteMethPropdef[103] = {
   {(bigint) syntax___mmbuilder___AMethPropdef___method},
   {(bigint) parser___parser_prod___AMethPropdef___empty_init},
   {(bigint) parser___parser_prod___AMethPropdef___init_amethpropdef},
-  {(bigint) 0 /* 88: AConcreteMethPropdef < AMethPropdef: superclass init_table position */},
+  {(bigint) 0 /* 89: AConcreteMethPropdef < AMethPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AMethPropdef___n_kwredef},
   {(bigint) parser___parser_nodes___AMethPropdef___n_visibility},
   {(bigint) parser___parser_nodes___AMethPropdef___n_methid},
@@ -53942,7 +56324,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AConcreteMethPropdef[103] = {
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) parser___parser_prod___AConcreteMethPropdef___empty_init},
   {(bigint) parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef},
-  {(bigint) 5 /* 100: AConcreteMethPropdef < AConcreteMethPropdef: superclass init_table position */},
+  {(bigint) 5 /* 101: AConcreteMethPropdef < AConcreteMethPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AConcreteMethPropdef___n_kwmeth},
   {(bigint) parser___parser_nodes___AConcreteMethPropdef___n_block},
 };
@@ -53952,16 +56334,17 @@ const classtable_elt_t VFT_parser___parser_nodes___AConcreteMethPropdef[103] = {
 /* 3: Attribute AConcreteMethPropdef::_location */
 /* 4: Attribute AConcreteMethPropdef::_first_location */
 /* 5: Attribute AConcreteMethPropdef::_last_location */
-/* 6: Attribute AConcreteMethPropdef::_n_doc */
-/* 7: Attribute AConcreteMethPropdef::_self_var */
-/* 8: Attribute AConcreteMethPropdef::_name */
-/* 9: Attribute AConcreteMethPropdef::_method */
-/* 10: Attribute AConcreteMethPropdef::_n_kwredef */
-/* 11: Attribute AConcreteMethPropdef::_n_visibility */
-/* 12: Attribute AConcreteMethPropdef::_n_methid */
-/* 13: Attribute AConcreteMethPropdef::_n_signature */
-/* 14: Attribute AConcreteMethPropdef::_n_kwmeth */
-/* 15: Attribute AConcreteMethPropdef::_n_block */
+/* 6: Attribute AConcreteMethPropdef::_n_annotations */
+/* 7: Attribute AConcreteMethPropdef::_n_doc */
+/* 8: Attribute AConcreteMethPropdef::_self_var */
+/* 9: Attribute AConcreteMethPropdef::_name */
+/* 10: Attribute AConcreteMethPropdef::_method */
+/* 11: Attribute AConcreteMethPropdef::_n_kwredef */
+/* 12: Attribute AConcreteMethPropdef::_n_visibility */
+/* 13: Attribute AConcreteMethPropdef::_n_methid */
+/* 14: Attribute AConcreteMethPropdef::_n_signature */
+/* 15: Attribute AConcreteMethPropdef::_n_kwmeth */
+/* 16: Attribute AConcreteMethPropdef::_n_block */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AConcreteMethPropdef[] = "init var of AConcreteMethPropdef";
 void INIT_ATTRIBUTES__parser___parser_nodes___AConcreteMethPropdef(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -53976,16 +56359,19 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AConcreteMethPropdef(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:491 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:497 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:511 */
+  /* parser/parser_nodes.nit:517 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:513 */
+  /* parser/parser_nodes.nit:519 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:546 */
+  /* parser/parser_nodes.nit:552 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -53993,7 +56379,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AConcreteMethPropdef(val_t p0){
 val_t NEW_parser___parser_nodes___AConcreteMethPropdef(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 16);
+  obj = alloc(sizeof(val_t) * 17);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AConcreteMethPropdef;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -54019,13 +56405,13 @@ val_t NEW_AConcreteMethPropdef_parser___parser_prod___AMethPropdef___empty_init(
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1203;
+  fra.me.line = 1307;
   fra.me.meth = LOCATE_NEW_AConcreteMethPropdef_parser___parser_prod___AMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:1203 */
+  /* parser/parser_prod.nit:1307 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AConcreteMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AConcreteMethPropdef(fra.me.REG[0]);
   parser___parser_prod___AMethPropdef___empty_init(fra.me.REG[0], init_table);
@@ -54040,13 +56426,13 @@ val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___emp
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1679;
+  fra.me.line = 1801;
   fra.me.meth = LOCATE_NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:1679 */
+  /* parser/parser_prod.nit:1801 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AConcreteMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AConcreteMethPropdef(fra.me.REG[0]);
   parser___parser_prod___AConcreteMethPropdef___empty_init(fra.me.REG[0], init_table);
@@ -54055,16 +56441,16 @@ val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___emp
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef[] = "new AConcreteMethPropdef parser_prod::AConcreteMethPropdef::init_aconcretemethpropdef";
-val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t tmp;
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1681;
+  fra.me.line = 1803;
   fra.me.meth = LOCATE_NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -54074,6 +56460,7 @@ val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___ini
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -54081,13 +56468,14 @@ val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___ini
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* parser/parser_prod.nit:1681 */
-  fra.me.REG[7] = NEW_parser___parser_nodes___AConcreteMethPropdef();
-  INIT_ATTRIBUTES__parser___parser_nodes___AConcreteMethPropdef(fra.me.REG[7]);
-  parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], init_table);
-  CHECKNEW_parser___parser_nodes___AConcreteMethPropdef(fra.me.REG[7]);
+  fra.me.REG[7] = p7;
+  /* parser/parser_prod.nit:1803 */
+  fra.me.REG[8] = NEW_parser___parser_nodes___AConcreteMethPropdef();
+  INIT_ATTRIBUTES__parser___parser_nodes___AConcreteMethPropdef(fra.me.REG[8]);
+  parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], init_table);
+  CHECKNEW_parser___parser_nodes___AConcreteMethPropdef(fra.me.REG[8]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[7];
+  return fra.me.REG[8];
 }
 static const char LOCATE_NEW_AConcreteMethPropdef_parser___parser_nodes___ANode___init[] = "new AConcreteMethPropdef parser_nodes::ANode::init";
 val_t NEW_AConcreteMethPropdef_parser___parser_nodes___ANode___init(void){
@@ -54117,7 +56505,7 @@ val_t NEW_AConcreteMethPropdef_parser___parser_prod___AMethPropdef___init_amethp
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1205;
+  fra.me.line = 1309;
   fra.me.meth = LOCATE_NEW_AConcreteMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -54133,7 +56521,7 @@ val_t NEW_AConcreteMethPropdef_parser___parser_prod___AMethPropdef___init_amethp
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:1205 */
+  /* parser/parser_prod.nit:1309 */
   fra.me.REG[5] = NEW_parser___parser_nodes___AConcreteMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AConcreteMethPropdef(fra.me.REG[5]);
   parser___parser_prod___AMethPropdef___init_amethpropdef(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
@@ -54141,18 +56529,18 @@ val_t NEW_AConcreteMethPropdef_parser___parser_prod___AMethPropdef___init_amethp
   stack_frame_head = fra.me.prev;
   return fra.me.REG[5];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AConcreteInitPropdef[111] = {
-  {(bigint) 4295 /* 0: Identity */},
-  {(bigint) 19 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AConcreteInitPropdef[112] = {
+  {(bigint) 4851 /* 0: Identity */},
+  {(bigint) 20 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AConcreteInitPropdef" /* 2: Class Name */},
   {(bigint) 3 /* 3: AConcreteInitPropdef < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AConcreteInitPropdef < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AConcreteInitPropdef < Prod: superclass typecheck marker */},
-  {(bigint) 3251 /* 6: AConcreteInitPropdef < APropdef: superclass typecheck marker */},
-  {(bigint) 3883 /* 7: AConcreteInitPropdef < AMethPropdef: superclass typecheck marker */},
-  {(bigint) 4167 /* 8: AConcreteInitPropdef < AInitPropdef: superclass typecheck marker */},
-  {(bigint) 4219 /* 9: AConcreteInitPropdef < AConcreteMethPropdef: superclass typecheck marker */},
-  {(bigint) 4295 /* 10: AConcreteInitPropdef < AConcreteInitPropdef: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AConcreteInitPropdef < Prod: superclass typecheck marker */},
+  {(bigint) 3751 /* 6: AConcreteInitPropdef < APropdef: superclass typecheck marker */},
+  {(bigint) 4399 /* 7: AConcreteInitPropdef < AMethPropdef: superclass typecheck marker */},
+  {(bigint) 4723 /* 8: AConcreteInitPropdef < AInitPropdef: superclass typecheck marker */},
+  {(bigint) 4775 /* 9: AConcreteInitPropdef < AConcreteMethPropdef: superclass typecheck marker */},
+  {(bigint) 4851 /* 10: AConcreteInitPropdef < AConcreteInitPropdef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -54216,12 +56604,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AConcreteInitPropdef[111] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AConcreteInitPropdef < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___APropdef___process_and_check},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_intro},
   {(bigint) syntax___mmbuilder___APropdef___inherit_signature},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_redef},
   {(bigint) syntax___typing___APropdef___self_var},
-  {(bigint) 1 /* 79: AConcreteInitPropdef < APropdef: superclass init_table position */},
+  {(bigint) 1 /* 80: AConcreteInitPropdef < APropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___APropdef___n_doc},
   {(bigint) syntax___mmbuilder___AMethPropdef___name},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
@@ -54230,7 +56619,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AConcreteInitPropdef[111] = {
   {(bigint) syntax___mmbuilder___AMethPropdef___method},
   {(bigint) parser___parser_prod___AMethPropdef___empty_init},
   {(bigint) parser___parser_prod___AMethPropdef___init_amethpropdef},
-  {(bigint) 0 /* 88: AConcreteInitPropdef < AMethPropdef: superclass init_table position */},
+  {(bigint) 0 /* 89: AConcreteInitPropdef < AMethPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AMethPropdef___n_kwredef},
   {(bigint) parser___parser_nodes___AMethPropdef___n_visibility},
   {(bigint) parser___parser_nodes___AMethPropdef___n_methid},
@@ -54238,11 +56627,11 @@ const classtable_elt_t VFT_parser___parser_nodes___AConcreteInitPropdef[111] = {
   {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
   {(bigint) syntax___icode_generation___AConcreteMethPropdef___fill_iroutine},
   {(bigint) syntax___typing___ANode___accept_typing},
-  {(bigint) 6 /* 96: AConcreteInitPropdef < AInitPropdef: superclass init_table position */},
+  {(bigint) 6 /* 97: AConcreteInitPropdef < AInitPropdef: superclass init_table position */},
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) parser___parser_prod___AConcreteMethPropdef___empty_init},
   {(bigint) parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef},
-  {(bigint) 5 /* 100: AConcreteInitPropdef < AConcreteMethPropdef: superclass init_table position */},
+  {(bigint) 5 /* 101: AConcreteInitPropdef < AConcreteMethPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AConcreteMethPropdef___n_kwmeth},
   {(bigint) parser___parser_nodes___AConcreteMethPropdef___n_block},
   {(bigint) syntax___typing___AMethPropdef___accept_typing},
@@ -54251,7 +56640,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AConcreteInitPropdef[111] = {
   {(bigint) syntax___syntax_base___AConcreteInitPropdef___explicit_super_init_calls},
   {(bigint) parser___parser_prod___AConcreteInitPropdef___empty_init},
   {(bigint) parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef},
-  {(bigint) 7 /* 109: AConcreteInitPropdef < AConcreteInitPropdef: superclass init_table position */},
+  {(bigint) 7 /* 110: AConcreteInitPropdef < AConcreteInitPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AConcreteInitPropdef___n_kwinit},
 };
 /* 0: Pointer to the classtable */
@@ -54260,19 +56649,20 @@ const classtable_elt_t VFT_parser___parser_nodes___AConcreteInitPropdef[111] = {
 /* 3: Attribute AConcreteInitPropdef::_location */
 /* 4: Attribute AConcreteInitPropdef::_first_location */
 /* 5: Attribute AConcreteInitPropdef::_last_location */
-/* 6: Attribute AConcreteInitPropdef::_n_doc */
-/* 7: Attribute AConcreteInitPropdef::_self_var */
-/* 8: Attribute AConcreteInitPropdef::_name */
-/* 9: Attribute AConcreteInitPropdef::_method */
-/* 10: Attribute AConcreteInitPropdef::_n_kwredef */
-/* 11: Attribute AConcreteInitPropdef::_n_visibility */
-/* 12: Attribute AConcreteInitPropdef::_n_methid */
-/* 13: Attribute AConcreteInitPropdef::_n_signature */
-/* 14: Attribute AConcreteInitPropdef::_n_kwmeth */
-/* 15: Attribute AConcreteInitPropdef::_n_block */
-/* 16: Attribute AConcreteInitPropdef::_super_init_calls */
-/* 17: Attribute AConcreteInitPropdef::_explicit_super_init_calls */
-/* 18: Attribute AConcreteInitPropdef::_n_kwinit */
+/* 6: Attribute AConcreteInitPropdef::_n_annotations */
+/* 7: Attribute AConcreteInitPropdef::_n_doc */
+/* 8: Attribute AConcreteInitPropdef::_self_var */
+/* 9: Attribute AConcreteInitPropdef::_name */
+/* 10: Attribute AConcreteInitPropdef::_method */
+/* 11: Attribute AConcreteInitPropdef::_n_kwredef */
+/* 12: Attribute AConcreteInitPropdef::_n_visibility */
+/* 13: Attribute AConcreteInitPropdef::_n_methid */
+/* 14: Attribute AConcreteInitPropdef::_n_signature */
+/* 15: Attribute AConcreteInitPropdef::_n_kwmeth */
+/* 16: Attribute AConcreteInitPropdef::_n_block */
+/* 17: Attribute AConcreteInitPropdef::_super_init_calls */
+/* 18: Attribute AConcreteInitPropdef::_explicit_super_init_calls */
+/* 19: Attribute AConcreteInitPropdef::_n_kwinit */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AConcreteInitPropdef[] = "init var of AConcreteInitPropdef";
 void INIT_ATTRIBUTES__parser___parser_nodes___AConcreteInitPropdef(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -54287,30 +56677,33 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AConcreteInitPropdef(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/syntax_base.nit:554 */
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_syntax___syntax_base___AConcreteInitPropdef____super_init_calls(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/syntax_base.nit:555 */
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_syntax___syntax_base___AConcreteInitPropdef____explicit_super_init_calls(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:491 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:497 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:511 */
+  /* parser/parser_nodes.nit:517 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:513 */
+  /* parser/parser_nodes.nit:519 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:546 */
+  /* parser/parser_nodes.nit:552 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/syntax_base.nit:554 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_syntax___syntax_base___AConcreteInitPropdef____super_init_calls(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/syntax_base.nit:555 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_syntax___syntax_base___AConcreteInitPropdef____explicit_super_init_calls(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AConcreteInitPropdef(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 19);
+  obj = alloc(sizeof(val_t) * 20);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AConcreteInitPropdef;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -54330,6 +56723,11 @@ void CHECKNEW_parser___parser_nodes___AConcreteInitPropdef(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_syntax___syntax_base___AConcreteInitPropdef____super_init_calls(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -54340,11 +56738,6 @@ void CHECKNEW_parser___parser_nodes___AConcreteInitPropdef(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_explicit_super_init_calls", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___empty_init[] = "new AConcreteInitPropdef parser_prod::AConcreteMethPropdef::empty_init";
@@ -54354,13 +56747,13 @@ val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___emp
   int init_table[8] = {0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1679;
+  fra.me.line = 1801;
   fra.me.meth = LOCATE_NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:1679 */
+  /* parser/parser_prod.nit:1801 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AConcreteInitPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AConcreteInitPropdef(fra.me.REG[0]);
   parser___parser_prod___AConcreteMethPropdef___empty_init(fra.me.REG[0], init_table);
@@ -54375,13 +56768,13 @@ val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___emp
   int init_table[8] = {0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1806;
+  fra.me.line = 1946;
   fra.me.meth = LOCATE_NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:1806 */
+  /* parser/parser_prod.nit:1946 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AConcreteInitPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AConcreteInitPropdef(fra.me.REG[0]);
   parser___parser_prod___AConcreteInitPropdef___empty_init(fra.me.REG[0], init_table);
@@ -54390,16 +56783,16 @@ val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___emp
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef[] = "new AConcreteInitPropdef parser_prod::AConcreteInitPropdef::init_aconcreteinitpropdef";
-val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t tmp;
   int init_table[8] = {0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1808;
+  fra.me.line = 1948;
   fra.me.meth = LOCATE_NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -54409,6 +56802,7 @@ val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___ini
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -54416,13 +56810,14 @@ val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___ini
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* parser/parser_prod.nit:1808 */
-  fra.me.REG[7] = NEW_parser___parser_nodes___AConcreteInitPropdef();
-  INIT_ATTRIBUTES__parser___parser_nodes___AConcreteInitPropdef(fra.me.REG[7]);
-  parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], init_table);
-  CHECKNEW_parser___parser_nodes___AConcreteInitPropdef(fra.me.REG[7]);
+  fra.me.REG[7] = p7;
+  /* parser/parser_prod.nit:1948 */
+  fra.me.REG[8] = NEW_parser___parser_nodes___AConcreteInitPropdef();
+  INIT_ATTRIBUTES__parser___parser_nodes___AConcreteInitPropdef(fra.me.REG[8]);
+  parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], init_table);
+  CHECKNEW_parser___parser_nodes___AConcreteInitPropdef(fra.me.REG[8]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[7];
+  return fra.me.REG[8];
 }
 static const char LOCATE_NEW_AConcreteInitPropdef_parser___parser_nodes___ANode___init[] = "new AConcreteInitPropdef parser_nodes::ANode::init";
 val_t NEW_AConcreteInitPropdef_parser___parser_nodes___ANode___init(void){
@@ -54452,13 +56847,13 @@ val_t NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___empty_init(
   int init_table[8] = {0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1203;
+  fra.me.line = 1307;
   fra.me.meth = LOCATE_NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:1203 */
+  /* parser/parser_prod.nit:1307 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AConcreteInitPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AConcreteInitPropdef(fra.me.REG[0]);
   parser___parser_prod___AMethPropdef___empty_init(fra.me.REG[0], init_table);
@@ -54467,16 +56862,16 @@ val_t NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___empty_init(
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef[] = "new AConcreteInitPropdef parser_prod::AConcreteMethPropdef::init_aconcretemethpropdef";
-val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t tmp;
   int init_table[8] = {0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1681;
+  fra.me.line = 1803;
   fra.me.meth = LOCATE_NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -54486,6 +56881,7 @@ val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___ini
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -54493,13 +56889,14 @@ val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___ini
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* parser/parser_prod.nit:1681 */
-  fra.me.REG[7] = NEW_parser___parser_nodes___AConcreteInitPropdef();
-  INIT_ATTRIBUTES__parser___parser_nodes___AConcreteInitPropdef(fra.me.REG[7]);
-  parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], init_table);
-  CHECKNEW_parser___parser_nodes___AConcreteInitPropdef(fra.me.REG[7]);
+  fra.me.REG[7] = p7;
+  /* parser/parser_prod.nit:1803 */
+  fra.me.REG[8] = NEW_parser___parser_nodes___AConcreteInitPropdef();
+  INIT_ATTRIBUTES__parser___parser_nodes___AConcreteInitPropdef(fra.me.REG[8]);
+  parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], init_table);
+  CHECKNEW_parser___parser_nodes___AConcreteInitPropdef(fra.me.REG[8]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[7];
+  return fra.me.REG[8];
 }
 static const char LOCATE_NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef[] = "new AConcreteInitPropdef parser_prod::AMethPropdef::init_amethpropdef";
 val_t NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4){
@@ -54508,7 +56905,7 @@ val_t NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___init_amethp
   int init_table[8] = {0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1205;
+  fra.me.line = 1309;
   fra.me.meth = LOCATE_NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -54524,7 +56921,7 @@ val_t NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___init_amethp
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:1205 */
+  /* parser/parser_prod.nit:1309 */
   fra.me.REG[5] = NEW_parser___parser_nodes___AConcreteInitPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AConcreteInitPropdef(fra.me.REG[5]);
   parser___parser_prod___AMethPropdef___init_amethpropdef(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
@@ -54532,18 +56929,18 @@ val_t NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___init_amethp
   stack_frame_head = fra.me.prev;
   return fra.me.REG[5];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AExternInitPropdef[110] = {
-  {(bigint) 4291 /* 0: Identity */},
-  {(bigint) 18 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AExternInitPropdef[111] = {
+  {(bigint) 4847 /* 0: Identity */},
+  {(bigint) 19 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AExternInitPropdef" /* 2: Class Name */},
   {(bigint) 3 /* 3: AExternInitPropdef < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AExternInitPropdef < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AExternInitPropdef < Prod: superclass typecheck marker */},
-  {(bigint) 3251 /* 6: AExternInitPropdef < APropdef: superclass typecheck marker */},
-  {(bigint) 3883 /* 7: AExternInitPropdef < AMethPropdef: superclass typecheck marker */},
-  {(bigint) 4167 /* 8: AExternInitPropdef < AInitPropdef: superclass typecheck marker */},
-  {(bigint) 4191 /* 9: AExternInitPropdef < AExternPropdef: superclass typecheck marker */},
-  {(bigint) 4291 /* 10: AExternInitPropdef < AExternInitPropdef: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AExternInitPropdef < Prod: superclass typecheck marker */},
+  {(bigint) 3751 /* 6: AExternInitPropdef < APropdef: superclass typecheck marker */},
+  {(bigint) 4399 /* 7: AExternInitPropdef < AMethPropdef: superclass typecheck marker */},
+  {(bigint) 4723 /* 8: AExternInitPropdef < AInitPropdef: superclass typecheck marker */},
+  {(bigint) 4747 /* 9: AExternInitPropdef < AExternPropdef: superclass typecheck marker */},
+  {(bigint) 4847 /* 10: AExternInitPropdef < AExternInitPropdef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -54607,12 +57004,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AExternInitPropdef[110] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 3 /* 72: AExternInitPropdef < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___APropdef___process_and_check},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_intro},
   {(bigint) syntax___mmbuilder___APropdef___inherit_signature},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_redef},
   {(bigint) syntax___typing___APropdef___self_var},
-  {(bigint) 2 /* 79: AExternInitPropdef < APropdef: superclass init_table position */},
+  {(bigint) 2 /* 80: AExternInitPropdef < APropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___APropdef___n_doc},
   {(bigint) syntax___mmbuilder___AMethPropdef___name},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
@@ -54621,7 +57019,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AExternInitPropdef[110] = {
   {(bigint) syntax___mmbuilder___AMethPropdef___method},
   {(bigint) parser___parser_prod___AMethPropdef___empty_init},
   {(bigint) parser___parser_prod___AMethPropdef___init_amethpropdef},
-  {(bigint) 1 /* 88: AExternInitPropdef < AMethPropdef: superclass init_table position */},
+  {(bigint) 1 /* 89: AExternInitPropdef < AMethPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AMethPropdef___n_kwredef},
   {(bigint) parser___parser_nodes___AMethPropdef___n_visibility},
   {(bigint) parser___parser_nodes___AMethPropdef___n_methid},
@@ -54629,8 +57027,8 @@ const classtable_elt_t VFT_parser___parser_nodes___AExternInitPropdef[110] = {
   {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
   {(bigint) syntax___icode_generation___AExternInitPropdef___fill_iroutine},
   {(bigint) syntax___typing___ANode___accept_typing},
-  {(bigint) 6 /* 96: AExternInitPropdef < AInitPropdef: superclass init_table position */},
-  {(bigint) 0 /* 97: AExternInitPropdef < AExternPropdef: superclass init_table position */},
+  {(bigint) 6 /* 97: AExternInitPropdef < AInitPropdef: superclass init_table position */},
+  {(bigint) 0 /* 98: AExternInitPropdef < AExternPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AExternPropdef___n_extern},
   {(bigint) parser___parser_nodes___AExternPropdef___n_extern_calls},
   {(bigint) parser___parser_nodes___AExternPropdef___n_extern_code_block},
@@ -54641,7 +57039,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AExternInitPropdef[110] = {
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) parser___parser_prod___AExternInitPropdef___empty_init},
   {(bigint) parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef},
-  {(bigint) 7 /* 108: AExternInitPropdef < AExternInitPropdef: superclass init_table position */},
+  {(bigint) 7 /* 109: AExternInitPropdef < AExternInitPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AExternInitPropdef___n_kwnew},
 };
 /* 0: Pointer to the classtable */
@@ -54650,18 +57048,19 @@ const classtable_elt_t VFT_parser___parser_nodes___AExternInitPropdef[110] = {
 /* 3: Attribute AExternInitPropdef::_location */
 /* 4: Attribute AExternInitPropdef::_first_location */
 /* 5: Attribute AExternInitPropdef::_last_location */
-/* 6: Attribute AExternInitPropdef::_n_doc */
-/* 7: Attribute AExternInitPropdef::_self_var */
-/* 8: Attribute AExternInitPropdef::_name */
-/* 9: Attribute AExternInitPropdef::_method */
-/* 10: Attribute AExternInitPropdef::_n_kwredef */
-/* 11: Attribute AExternInitPropdef::_n_visibility */
-/* 12: Attribute AExternInitPropdef::_n_methid */
-/* 13: Attribute AExternInitPropdef::_n_signature */
-/* 14: Attribute AExternInitPropdef::_n_extern */
-/* 15: Attribute AExternInitPropdef::_n_extern_calls */
-/* 16: Attribute AExternInitPropdef::_n_extern_code_block */
-/* 17: Attribute AExternInitPropdef::_n_kwnew */
+/* 6: Attribute AExternInitPropdef::_n_annotations */
+/* 7: Attribute AExternInitPropdef::_n_doc */
+/* 8: Attribute AExternInitPropdef::_self_var */
+/* 9: Attribute AExternInitPropdef::_name */
+/* 10: Attribute AExternInitPropdef::_method */
+/* 11: Attribute AExternInitPropdef::_n_kwredef */
+/* 12: Attribute AExternInitPropdef::_n_visibility */
+/* 13: Attribute AExternInitPropdef::_n_methid */
+/* 14: Attribute AExternInitPropdef::_n_signature */
+/* 15: Attribute AExternInitPropdef::_n_extern */
+/* 16: Attribute AExternInitPropdef::_n_extern_calls */
+/* 17: Attribute AExternInitPropdef::_n_extern_code_block */
+/* 18: Attribute AExternInitPropdef::_n_kwnew */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AExternInitPropdef[] = "init var of AExternInitPropdef";
 void INIT_ATTRIBUTES__parser___parser_nodes___AExternInitPropdef(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -54676,22 +57075,25 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AExternInitPropdef(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:491 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:497 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:511 */
+  /* parser/parser_nodes.nit:517 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:513 */
+  /* parser/parser_nodes.nit:519 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:534 */
+  /* parser/parser_nodes.nit:540 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:535 */
+  /* parser/parser_nodes.nit:541 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:536 */
+  /* parser/parser_nodes.nit:542 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -54699,7 +57101,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AExternInitPropdef(val_t p0){
 val_t NEW_parser___parser_nodes___AExternInitPropdef(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 18);
+  obj = alloc(sizeof(val_t) * 19);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AExternInitPropdef;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -54733,13 +57135,13 @@ val_t NEW_AExternInitPropdef_parser___parser_prod___AMethPropdef___empty_init(vo
   int init_table[8] = {0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1203;
+  fra.me.line = 1307;
   fra.me.meth = LOCATE_NEW_AExternInitPropdef_parser___parser_prod___AMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:1203 */
+  /* parser/parser_prod.nit:1307 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AExternInitPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AExternInitPropdef(fra.me.REG[0]);
   parser___parser_prod___AMethPropdef___empty_init(fra.me.REG[0], init_table);
@@ -54754,13 +57156,13 @@ val_t NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___empty_i
   int init_table[8] = {0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1937;
+  fra.me.line = 2095;
   fra.me.meth = LOCATE_NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:1937 */
+  /* parser/parser_prod.nit:2095 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AExternInitPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AExternInitPropdef(fra.me.REG[0]);
   parser___parser_prod___AExternInitPropdef___empty_init(fra.me.REG[0], init_table);
@@ -54775,7 +57177,7 @@ val_t NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_ae
   int init_table[8] = {0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1939;
+  fra.me.line = 2097;
   fra.me.meth = LOCATE_NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -54799,7 +57201,7 @@ val_t NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_ae
   fra.me.REG[6] = p6;
   fra.me.REG[7] = p7;
   fra.me.REG[8] = p8;
-  /* parser/parser_prod.nit:1939 */
+  /* parser/parser_prod.nit:2097 */
   fra.me.REG[9] = NEW_parser___parser_nodes___AExternInitPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AExternInitPropdef(fra.me.REG[9]);
   parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], init_table);
@@ -54835,7 +57237,7 @@ val_t NEW_AExternInitPropdef_parser___parser_prod___AMethPropdef___init_amethpro
   int init_table[8] = {0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1205;
+  fra.me.line = 1309;
   fra.me.meth = LOCATE_NEW_AExternInitPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -54851,7 +57253,7 @@ val_t NEW_AExternInitPropdef_parser___parser_prod___AMethPropdef___init_amethpro
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:1205 */
+  /* parser/parser_prod.nit:1309 */
   fra.me.REG[5] = NEW_parser___parser_nodes___AExternInitPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AExternInitPropdef(fra.me.REG[5]);
   parser___parser_prod___AMethPropdef___init_amethpropdef(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
@@ -54859,18 +57261,18 @@ val_t NEW_AExternInitPropdef_parser___parser_prod___AMethPropdef___init_amethpro
   stack_frame_head = fra.me.prev;
   return fra.me.REG[5];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AMainMethPropdef[106] = {
-  {(bigint) 4283 /* 0: Identity */},
-  {(bigint) 16 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AMainMethPropdef[107] = {
+  {(bigint) 4839 /* 0: Identity */},
+  {(bigint) 17 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AMainMethPropdef" /* 2: Class Name */},
   {(bigint) 3 /* 3: AMainMethPropdef < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AMainMethPropdef < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AMainMethPropdef < Prod: superclass typecheck marker */},
-  {(bigint) 3251 /* 6: AMainMethPropdef < APropdef: superclass typecheck marker */},
-  {(bigint) 3883 /* 7: AMainMethPropdef < AMethPropdef: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AMainMethPropdef < Prod: superclass typecheck marker */},
+  {(bigint) 3751 /* 6: AMainMethPropdef < APropdef: superclass typecheck marker */},
+  {(bigint) 4399 /* 7: AMainMethPropdef < AMethPropdef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4219 /* 9: AMainMethPropdef < AConcreteMethPropdef: superclass typecheck marker */},
-  {(bigint) 4283 /* 10: AMainMethPropdef < AMainMethPropdef: superclass typecheck marker */},
+  {(bigint) 4775 /* 9: AMainMethPropdef < AConcreteMethPropdef: superclass typecheck marker */},
+  {(bigint) 4839 /* 10: AMainMethPropdef < AMainMethPropdef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -54934,12 +57336,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AMainMethPropdef[106] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AMainMethPropdef < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___AMainMethPropdef___process_and_check},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_intro},
   {(bigint) syntax___mmbuilder___APropdef___inherit_signature},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_redef},
   {(bigint) syntax___typing___APropdef___self_var},
-  {(bigint) 1 /* 79: AMainMethPropdef < APropdef: superclass init_table position */},
+  {(bigint) 1 /* 80: AMainMethPropdef < APropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___APropdef___n_doc},
   {(bigint) syntax___mmbuilder___AMethPropdef___name},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
@@ -54948,7 +57351,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AMainMethPropdef[106] = {
   {(bigint) syntax___mmbuilder___AMethPropdef___method},
   {(bigint) parser___parser_prod___AMethPropdef___empty_init},
   {(bigint) parser___parser_prod___AMethPropdef___init_amethpropdef},
-  {(bigint) 0 /* 88: AMainMethPropdef < AMethPropdef: superclass init_table position */},
+  {(bigint) 0 /* 89: AMainMethPropdef < AMethPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AMethPropdef___n_kwredef},
   {(bigint) parser___parser_nodes___AMethPropdef___n_visibility},
   {(bigint) parser___parser_nodes___AMethPropdef___n_methid},
@@ -54960,12 +57363,12 @@ const classtable_elt_t VFT_parser___parser_nodes___AMainMethPropdef[106] = {
   {(bigint) syntax___typing___ANode___after_typing},
   {(bigint) parser___parser_prod___AConcreteMethPropdef___empty_init},
   {(bigint) parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef},
-  {(bigint) 5 /* 100: AMainMethPropdef < AConcreteMethPropdef: superclass init_table position */},
+  {(bigint) 5 /* 101: AMainMethPropdef < AConcreteMethPropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AConcreteMethPropdef___n_kwmeth},
   {(bigint) parser___parser_nodes___AConcreteMethPropdef___n_block},
   {(bigint) parser___parser_prod___AMainMethPropdef___empty_init},
   {(bigint) parser___parser_prod___AMainMethPropdef___init_amainmethpropdef},
-  {(bigint) 6 /* 105: AMainMethPropdef < AMainMethPropdef: superclass init_table position */},
+  {(bigint) 6 /* 106: AMainMethPropdef < AMainMethPropdef: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -54973,16 +57376,17 @@ const classtable_elt_t VFT_parser___parser_nodes___AMainMethPropdef[106] = {
 /* 3: Attribute AMainMethPropdef::_location */
 /* 4: Attribute AMainMethPropdef::_first_location */
 /* 5: Attribute AMainMethPropdef::_last_location */
-/* 6: Attribute AMainMethPropdef::_n_doc */
-/* 7: Attribute AMainMethPropdef::_self_var */
-/* 8: Attribute AMainMethPropdef::_name */
-/* 9: Attribute AMainMethPropdef::_method */
-/* 10: Attribute AMainMethPropdef::_n_kwredef */
-/* 11: Attribute AMainMethPropdef::_n_visibility */
-/* 12: Attribute AMainMethPropdef::_n_methid */
-/* 13: Attribute AMainMethPropdef::_n_signature */
-/* 14: Attribute AMainMethPropdef::_n_kwmeth */
-/* 15: Attribute AMainMethPropdef::_n_block */
+/* 6: Attribute AMainMethPropdef::_n_annotations */
+/* 7: Attribute AMainMethPropdef::_n_doc */
+/* 8: Attribute AMainMethPropdef::_self_var */
+/* 9: Attribute AMainMethPropdef::_name */
+/* 10: Attribute AMainMethPropdef::_method */
+/* 11: Attribute AMainMethPropdef::_n_kwredef */
+/* 12: Attribute AMainMethPropdef::_n_visibility */
+/* 13: Attribute AMainMethPropdef::_n_methid */
+/* 14: Attribute AMainMethPropdef::_n_signature */
+/* 15: Attribute AMainMethPropdef::_n_kwmeth */
+/* 16: Attribute AMainMethPropdef::_n_block */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AMainMethPropdef[] = "init var of AMainMethPropdef";
 void INIT_ATTRIBUTES__parser___parser_nodes___AMainMethPropdef(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -54997,24 +57401,27 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AMainMethPropdef(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:511 */
+  /* parser/parser_nodes.nit:56 */
   fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:546 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:497 */
   fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:513 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:517 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:519 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:491 */
+  /* parser/parser_nodes.nit:552 */
   fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AMainMethPropdef(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 16);
+  obj = alloc(sizeof(val_t) * 17);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AMainMethPropdef;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -55040,13 +57447,13 @@ val_t NEW_AMainMethPropdef_parser___parser_prod___AConcreteMethPropdef___empty_i
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1679;
+  fra.me.line = 1801;
   fra.me.meth = LOCATE_NEW_AMainMethPropdef_parser___parser_prod___AConcreteMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:1679 */
+  /* parser/parser_prod.nit:1801 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AMainMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AMainMethPropdef(fra.me.REG[0]);
   parser___parser_prod___AConcreteMethPropdef___empty_init(fra.me.REG[0], init_table);
@@ -55061,13 +57468,13 @@ val_t NEW_AMainMethPropdef_parser___parser_prod___AMainMethPropdef___empty_init(
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2104;
+  fra.me.line = 2262;
   fra.me.meth = LOCATE_NEW_AMainMethPropdef_parser___parser_prod___AMainMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2104 */
+  /* parser/parser_prod.nit:2262 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AMainMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AMainMethPropdef(fra.me.REG[0]);
   parser___parser_prod___AMainMethPropdef___empty_init(fra.me.REG[0], init_table);
@@ -55082,7 +57489,7 @@ val_t NEW_AMainMethPropdef_parser___parser_prod___AMainMethPropdef___init_amainm
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2106;
+  fra.me.line = 2264;
   fra.me.meth = LOCATE_NEW_AMainMethPropdef_parser___parser_prod___AMainMethPropdef___init_amainmethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -55092,7 +57499,7 @@ val_t NEW_AMainMethPropdef_parser___parser_prod___AMainMethPropdef___init_amainm
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2106 */
+  /* parser/parser_prod.nit:2264 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AMainMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AMainMethPropdef(fra.me.REG[2]);
   parser___parser_prod___AMainMethPropdef___init_amainmethpropdef(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -55128,13 +57535,13 @@ val_t NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___empty_init(void
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1203;
+  fra.me.line = 1307;
   fra.me.meth = LOCATE_NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:1203 */
+  /* parser/parser_prod.nit:1307 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AMainMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AMainMethPropdef(fra.me.REG[0]);
   parser___parser_prod___AMethPropdef___empty_init(fra.me.REG[0], init_table);
@@ -55143,16 +57550,16 @@ val_t NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___empty_init(void
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AMainMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef[] = "new AMainMethPropdef parser_prod::AConcreteMethPropdef::init_aconcretemethpropdef";
-val_t NEW_AMainMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+val_t NEW_AMainMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t tmp;
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1681;
+  fra.me.line = 1803;
   fra.me.meth = LOCATE_NEW_AMainMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -55162,6 +57569,7 @@ val_t NEW_AMainMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_ac
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -55169,13 +57577,14 @@ val_t NEW_AMainMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_ac
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* parser/parser_prod.nit:1681 */
-  fra.me.REG[7] = NEW_parser___parser_nodes___AMainMethPropdef();
-  INIT_ATTRIBUTES__parser___parser_nodes___AMainMethPropdef(fra.me.REG[7]);
-  parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[7], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], init_table);
-  CHECKNEW_parser___parser_nodes___AMainMethPropdef(fra.me.REG[7]);
+  fra.me.REG[7] = p7;
+  /* parser/parser_prod.nit:1803 */
+  fra.me.REG[8] = NEW_parser___parser_nodes___AMainMethPropdef();
+  INIT_ATTRIBUTES__parser___parser_nodes___AMainMethPropdef(fra.me.REG[8]);
+  parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], init_table);
+  CHECKNEW_parser___parser_nodes___AMainMethPropdef(fra.me.REG[8]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[7];
+  return fra.me.REG[8];
 }
 static const char LOCATE_NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef[] = "new AMainMethPropdef parser_prod::AMethPropdef::init_amethpropdef";
 val_t NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4){
@@ -55184,7 +57593,7 @@ val_t NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropd
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1205;
+  fra.me.line = 1309;
   fra.me.meth = LOCATE_NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -55200,7 +57609,7 @@ val_t NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropd
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:1205 */
+  /* parser/parser_prod.nit:1309 */
   fra.me.REG[5] = NEW_parser___parser_nodes___AMainMethPropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___AMainMethPropdef(fra.me.REG[5]);
   parser___parser_prod___AMethPropdef___init_amethpropdef(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
@@ -55208,14 +57617,14 @@ val_t NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropd
   stack_frame_head = fra.me.prev;
   return fra.me.REG[5];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AExternCalls[79] = {
-  {(bigint) 3299 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AExternCalls[80] = {
+  {(bigint) 3799 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AExternCalls" /* 2: Class Name */},
   {(bigint) 3 /* 3: AExternCalls < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AExternCalls < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AExternCalls < Prod: superclass typecheck marker */},
-  {(bigint) 3299 /* 6: AExternCalls < AExternCalls: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AExternCalls < Prod: superclass typecheck marker */},
+  {(bigint) 3799 /* 6: AExternCalls < AExternCalls: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -55283,9 +57692,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AExternCalls[79] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 0 /* 72: AExternCalls < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) parser___parser_prod___AExternCalls___empty_init},
   {(bigint) parser___parser_prod___AExternCalls___init_aexterncalls},
-  {(bigint) 3 /* 76: AExternCalls < AExternCalls: superclass init_table position */},
+  {(bigint) 3 /* 77: AExternCalls < AExternCalls: superclass init_table position */},
   {(bigint) parser___parser_nodes___AExternCalls___n_kwimport},
   {(bigint) parser___parser_nodes___AExternCalls___n_extern_calls},
 };
@@ -55295,8 +57705,9 @@ const classtable_elt_t VFT_parser___parser_nodes___AExternCalls[79] = {
 /* 3: Attribute AExternCalls::_location */
 /* 4: Attribute AExternCalls::_first_location */
 /* 5: Attribute AExternCalls::_last_location */
-/* 6: Attribute AExternCalls::_n_kwimport */
-/* 7: Attribute AExternCalls::_n_extern_calls */
+/* 6: Attribute AExternCalls::_n_annotations */
+/* 7: Attribute AExternCalls::_n_kwimport */
+/* 8: Attribute AExternCalls::_n_extern_calls */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AExternCalls[] = "init var of AExternCalls";
 void INIT_ATTRIBUTES__parser___parser_nodes___AExternCalls(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -55311,7 +57722,10 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AExternCalls(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:568 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:574 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -55319,7 +57733,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AExternCalls(val_t p0){
 val_t NEW_parser___parser_nodes___AExternCalls(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AExternCalls;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -55358,13 +57772,13 @@ val_t NEW_AExternCalls_parser___parser_prod___AExternCalls___empty_init(void){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7988;
+  fra.me.line = 8470;
   fra.me.meth = LOCATE_NEW_AExternCalls_parser___parser_prod___AExternCalls___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7988 */
+  /* parser/parser_prod.nit:8470 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AExternCalls();
   INIT_ATTRIBUTES__parser___parser_nodes___AExternCalls(fra.me.REG[0]);
   parser___parser_prod___AExternCalls___empty_init(fra.me.REG[0], init_table);
@@ -55379,7 +57793,7 @@ val_t NEW_AExternCalls_parser___parser_prod___AExternCalls___init_aexterncalls(v
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7990;
+  fra.me.line = 8472;
   fra.me.meth = LOCATE_NEW_AExternCalls_parser___parser_prod___AExternCalls___init_aexterncalls;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -55389,7 +57803,7 @@ val_t NEW_AExternCalls_parser___parser_prod___AExternCalls___init_aexterncalls(v
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7990 */
+  /* parser/parser_prod.nit:8472 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AExternCalls();
   INIT_ATTRIBUTES__parser___parser_nodes___AExternCalls(fra.me.REG[2]);
   parser___parser_prod___AExternCalls___init_aexterncalls(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -55418,16 +57832,16 @@ val_t NEW_AExternCalls_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ALocalPropExternCall[84] = {
-  {(bigint) 4151 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ALocalPropExternCall[85] = {
+  {(bigint) 4703 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ALocalPropExternCall" /* 2: Class Name */},
   {(bigint) 3 /* 3: ALocalPropExternCall < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ALocalPropExternCall < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ALocalPropExternCall < Prod: superclass typecheck marker */},
-  {(bigint) 3303 /* 6: ALocalPropExternCall < AExternCall: superclass typecheck marker */},
-  {(bigint) 3839 /* 7: ALocalPropExternCall < APropExternCall: superclass typecheck marker */},
-  {(bigint) 4151 /* 8: ALocalPropExternCall < ALocalPropExternCall: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ALocalPropExternCall < Prod: superclass typecheck marker */},
+  {(bigint) 3803 /* 6: ALocalPropExternCall < AExternCall: superclass typecheck marker */},
+  {(bigint) 4355 /* 7: ALocalPropExternCall < APropExternCall: superclass typecheck marker */},
+  {(bigint) 4703 /* 8: ALocalPropExternCall < ALocalPropExternCall: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -55493,15 +57907,16 @@ const classtable_elt_t VFT_parser___parser_nodes___ALocalPropExternCall[84] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: ALocalPropExternCall < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ALocalPropExternCall___target_class_name},
   {(bigint) syntax___typing___ALocalPropExternCall___target_method_name},
   {(bigint) parser___parser_prod___AExternCall___empty_init},
   {(bigint) parser___parser_prod___AExternCall___init_aexterncall},
-  {(bigint) 1 /* 78: ALocalPropExternCall < AExternCall: superclass init_table position */},
-  {(bigint) 0 /* 79: ALocalPropExternCall < APropExternCall: superclass init_table position */},
+  {(bigint) 1 /* 79: ALocalPropExternCall < AExternCall: superclass init_table position */},
+  {(bigint) 0 /* 80: ALocalPropExternCall < APropExternCall: superclass init_table position */},
   {(bigint) parser___parser_prod___ALocalPropExternCall___empty_init},
   {(bigint) parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall},
-  {(bigint) 5 /* 82: ALocalPropExternCall < ALocalPropExternCall: superclass init_table position */},
+  {(bigint) 5 /* 83: ALocalPropExternCall < ALocalPropExternCall: superclass init_table position */},
   {(bigint) parser___parser_nodes___ALocalPropExternCall___n_methid},
 };
 /* 0: Pointer to the classtable */
@@ -55510,24 +57925,31 @@ const classtable_elt_t VFT_parser___parser_nodes___ALocalPropExternCall[84] = {
 /* 3: Attribute ALocalPropExternCall::_location */
 /* 4: Attribute ALocalPropExternCall::_first_location */
 /* 5: Attribute ALocalPropExternCall::_last_location */
-/* 6: Attribute ALocalPropExternCall::_n_methid */
+/* 6: Attribute ALocalPropExternCall::_n_annotations */
+/* 7: Attribute ALocalPropExternCall::_n_methid */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ALocalPropExternCall[] = "init var of ALocalPropExternCall";
 void INIT_ATTRIBUTES__parser___parser_nodes___ALocalPropExternCall(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ALocalPropExternCall;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ALocalPropExternCall(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
+  obj = alloc(sizeof(val_t) * 8);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ALocalPropExternCall;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -55561,13 +57983,13 @@ val_t NEW_ALocalPropExternCall_parser___parser_prod___AExternCall___empty_init(v
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8040;
+  fra.me.line = 8522;
   fra.me.meth = LOCATE_NEW_ALocalPropExternCall_parser___parser_prod___AExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8040 */
+  /* parser/parser_prod.nit:8522 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALocalPropExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___ALocalPropExternCall(fra.me.REG[0]);
   parser___parser_prod___AExternCall___empty_init(fra.me.REG[0], init_table);
@@ -55582,13 +58004,13 @@ val_t NEW_ALocalPropExternCall_parser___parser_prod___ALocalPropExternCall___emp
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8087;
+  fra.me.line = 8569;
   fra.me.meth = LOCATE_NEW_ALocalPropExternCall_parser___parser_prod___ALocalPropExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8087 */
+  /* parser/parser_prod.nit:8569 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALocalPropExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___ALocalPropExternCall(fra.me.REG[0]);
   parser___parser_prod___ALocalPropExternCall___empty_init(fra.me.REG[0], init_table);
@@ -55603,7 +58025,7 @@ val_t NEW_ALocalPropExternCall_parser___parser_prod___ALocalPropExternCall___ini
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8089;
+  fra.me.line = 8571;
   fra.me.meth = LOCATE_NEW_ALocalPropExternCall_parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -55611,7 +58033,7 @@ val_t NEW_ALocalPropExternCall_parser___parser_prod___ALocalPropExternCall___ini
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:8089 */
+  /* parser/parser_prod.nit:8571 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ALocalPropExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___ALocalPropExternCall(fra.me.REG[1]);
   parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -55647,13 +58069,13 @@ val_t NEW_ALocalPropExternCall_parser___parser_prod___AExternCall___init_aextern
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8042;
+  fra.me.line = 8524;
   fra.me.meth = LOCATE_NEW_ALocalPropExternCall_parser___parser_prod___AExternCall___init_aexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8042 */
+  /* parser/parser_prod.nit:8524 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALocalPropExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___ALocalPropExternCall(fra.me.REG[0]);
   parser___parser_prod___AExternCall___init_aexterncall(fra.me.REG[0], init_table);
@@ -55661,16 +58083,16 @@ val_t NEW_ALocalPropExternCall_parser___parser_prod___AExternCall___init_aextern
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AFullPropExternCall[86] = {
-  {(bigint) 4179 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AFullPropExternCall[87] = {
+  {(bigint) 4735 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AFullPropExternCall" /* 2: Class Name */},
   {(bigint) 3 /* 3: AFullPropExternCall < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AFullPropExternCall < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AFullPropExternCall < Prod: superclass typecheck marker */},
-  {(bigint) 3303 /* 6: AFullPropExternCall < AExternCall: superclass typecheck marker */},
-  {(bigint) 3839 /* 7: AFullPropExternCall < APropExternCall: superclass typecheck marker */},
-  {(bigint) 4179 /* 8: AFullPropExternCall < AFullPropExternCall: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AFullPropExternCall < Prod: superclass typecheck marker */},
+  {(bigint) 3803 /* 6: AFullPropExternCall < AExternCall: superclass typecheck marker */},
+  {(bigint) 4355 /* 7: AFullPropExternCall < APropExternCall: superclass typecheck marker */},
+  {(bigint) 4735 /* 8: AFullPropExternCall < AFullPropExternCall: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -55736,15 +58158,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AFullPropExternCall[86] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AFullPropExternCall < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___AFullPropExternCall___target_class_name},
   {(bigint) syntax___typing___AFullPropExternCall___target_method_name},
   {(bigint) parser___parser_prod___AExternCall___empty_init},
   {(bigint) parser___parser_prod___AExternCall___init_aexterncall},
-  {(bigint) 1 /* 78: AFullPropExternCall < AExternCall: superclass init_table position */},
-  {(bigint) 0 /* 79: AFullPropExternCall < APropExternCall: superclass init_table position */},
+  {(bigint) 1 /* 79: AFullPropExternCall < AExternCall: superclass init_table position */},
+  {(bigint) 0 /* 80: AFullPropExternCall < APropExternCall: superclass init_table position */},
   {(bigint) parser___parser_prod___AFullPropExternCall___empty_init},
   {(bigint) parser___parser_prod___AFullPropExternCall___init_afullpropexterncall},
-  {(bigint) 5 /* 82: AFullPropExternCall < AFullPropExternCall: superclass init_table position */},
+  {(bigint) 5 /* 83: AFullPropExternCall < AFullPropExternCall: superclass init_table position */},
   {(bigint) parser___parser_nodes___AFullPropExternCall___n_classid},
   {(bigint) parser___parser_nodes___AFullPropExternCall___n_quad},
   {(bigint) parser___parser_nodes___AFullPropExternCall___n_methid},
@@ -55755,9 +58178,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AFullPropExternCall[86] = {
 /* 3: Attribute AFullPropExternCall::_location */
 /* 4: Attribute AFullPropExternCall::_first_location */
 /* 5: Attribute AFullPropExternCall::_last_location */
-/* 6: Attribute AFullPropExternCall::_n_classid */
-/* 7: Attribute AFullPropExternCall::_n_quad */
-/* 8: Attribute AFullPropExternCall::_n_methid */
+/* 6: Attribute AFullPropExternCall::_n_annotations */
+/* 7: Attribute AFullPropExternCall::_n_classid */
+/* 8: Attribute AFullPropExternCall::_n_quad */
+/* 9: Attribute AFullPropExternCall::_n_methid */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AFullPropExternCall[] = "init var of AFullPropExternCall";
 void INIT_ATTRIBUTES__parser___parser_nodes___AFullPropExternCall(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -55772,7 +58196,10 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AFullPropExternCall(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:583 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:589 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -55780,7 +58207,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AFullPropExternCall(val_t p0){
 val_t NEW_parser___parser_nodes___AFullPropExternCall(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
+  obj = alloc(sizeof(val_t) * 10);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AFullPropExternCall;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -55819,13 +58246,13 @@ val_t NEW_AFullPropExternCall_parser___parser_prod___AExternCall___empty_init(vo
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8040;
+  fra.me.line = 8522;
   fra.me.meth = LOCATE_NEW_AFullPropExternCall_parser___parser_prod___AExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8040 */
+  /* parser/parser_prod.nit:8522 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AFullPropExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___AFullPropExternCall(fra.me.REG[0]);
   parser___parser_prod___AExternCall___empty_init(fra.me.REG[0], init_table);
@@ -55840,13 +58267,13 @@ val_t NEW_AFullPropExternCall_parser___parser_prod___AFullPropExternCall___empty
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8118;
+  fra.me.line = 8600;
   fra.me.meth = LOCATE_NEW_AFullPropExternCall_parser___parser_prod___AFullPropExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8118 */
+  /* parser/parser_prod.nit:8600 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AFullPropExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___AFullPropExternCall(fra.me.REG[0]);
   parser___parser_prod___AFullPropExternCall___empty_init(fra.me.REG[0], init_table);
@@ -55861,7 +58288,7 @@ val_t NEW_AFullPropExternCall_parser___parser_prod___AFullPropExternCall___init_
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8120;
+  fra.me.line = 8602;
   fra.me.meth = LOCATE_NEW_AFullPropExternCall_parser___parser_prod___AFullPropExternCall___init_afullpropexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -55873,7 +58300,7 @@ val_t NEW_AFullPropExternCall_parser___parser_prod___AFullPropExternCall___init_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8120 */
+  /* parser/parser_prod.nit:8602 */
   fra.me.REG[3] = NEW_parser___parser_nodes___AFullPropExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___AFullPropExternCall(fra.me.REG[3]);
   parser___parser_prod___AFullPropExternCall___init_afullpropexterncall(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -55909,13 +58336,13 @@ val_t NEW_AFullPropExternCall_parser___parser_prod___AExternCall___init_aexternc
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8042;
+  fra.me.line = 8524;
   fra.me.meth = LOCATE_NEW_AFullPropExternCall_parser___parser_prod___AExternCall___init_aexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8042 */
+  /* parser/parser_prod.nit:8524 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AFullPropExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___AFullPropExternCall(fra.me.REG[0]);
   parser___parser_prod___AExternCall___init_aexterncall(fra.me.REG[0], init_table);
@@ -55923,16 +58350,16 @@ val_t NEW_AFullPropExternCall_parser___parser_prod___AExternCall___init_aexternc
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AInitPropExternCall[84] = {
-  {(bigint) 4171 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AInitPropExternCall[85] = {
+  {(bigint) 4727 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AInitPropExternCall" /* 2: Class Name */},
   {(bigint) 3 /* 3: AInitPropExternCall < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AInitPropExternCall < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AInitPropExternCall < Prod: superclass typecheck marker */},
-  {(bigint) 3303 /* 6: AInitPropExternCall < AExternCall: superclass typecheck marker */},
-  {(bigint) 3839 /* 7: AInitPropExternCall < APropExternCall: superclass typecheck marker */},
-  {(bigint) 4171 /* 8: AInitPropExternCall < AInitPropExternCall: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AInitPropExternCall < Prod: superclass typecheck marker */},
+  {(bigint) 3803 /* 6: AInitPropExternCall < AExternCall: superclass typecheck marker */},
+  {(bigint) 4355 /* 7: AInitPropExternCall < APropExternCall: superclass typecheck marker */},
+  {(bigint) 4727 /* 8: AInitPropExternCall < AInitPropExternCall: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -55998,15 +58425,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AInitPropExternCall[84] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AInitPropExternCall < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___AInitPropExternCall___target_class_name},
   {(bigint) syntax___typing___AInitPropExternCall___target_method_name},
   {(bigint) parser___parser_prod___AExternCall___empty_init},
   {(bigint) parser___parser_prod___AExternCall___init_aexterncall},
-  {(bigint) 1 /* 78: AInitPropExternCall < AExternCall: superclass init_table position */},
-  {(bigint) 0 /* 79: AInitPropExternCall < APropExternCall: superclass init_table position */},
+  {(bigint) 1 /* 79: AInitPropExternCall < AExternCall: superclass init_table position */},
+  {(bigint) 0 /* 80: AInitPropExternCall < APropExternCall: superclass init_table position */},
   {(bigint) parser___parser_prod___AInitPropExternCall___empty_init},
   {(bigint) parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall},
-  {(bigint) 5 /* 82: AInitPropExternCall < AInitPropExternCall: superclass init_table position */},
+  {(bigint) 5 /* 83: AInitPropExternCall < AInitPropExternCall: superclass init_table position */},
   {(bigint) parser___parser_nodes___AInitPropExternCall___n_classid},
 };
 /* 0: Pointer to the classtable */
@@ -56015,24 +58443,31 @@ const classtable_elt_t VFT_parser___parser_nodes___AInitPropExternCall[84] = {
 /* 3: Attribute AInitPropExternCall::_location */
 /* 4: Attribute AInitPropExternCall::_first_location */
 /* 5: Attribute AInitPropExternCall::_last_location */
-/* 6: Attribute AInitPropExternCall::_n_classid */
+/* 6: Attribute AInitPropExternCall::_n_annotations */
+/* 7: Attribute AInitPropExternCall::_n_classid */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AInitPropExternCall[] = "init var of AInitPropExternCall";
 void INIT_ATTRIBUTES__parser___parser_nodes___AInitPropExternCall(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AInitPropExternCall;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AInitPropExternCall(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
+  obj = alloc(sizeof(val_t) * 8);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AInitPropExternCall;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -56066,13 +58501,13 @@ val_t NEW_AInitPropExternCall_parser___parser_prod___AExternCall___empty_init(vo
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8040;
+  fra.me.line = 8522;
   fra.me.meth = LOCATE_NEW_AInitPropExternCall_parser___parser_prod___AExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8040 */
+  /* parser/parser_prod.nit:8522 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AInitPropExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___AInitPropExternCall(fra.me.REG[0]);
   parser___parser_prod___AExternCall___empty_init(fra.me.REG[0], init_table);
@@ -56087,13 +58522,13 @@ val_t NEW_AInitPropExternCall_parser___parser_prod___AInitPropExternCall___empty
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8181;
+  fra.me.line = 8663;
   fra.me.meth = LOCATE_NEW_AInitPropExternCall_parser___parser_prod___AInitPropExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8181 */
+  /* parser/parser_prod.nit:8663 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AInitPropExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___AInitPropExternCall(fra.me.REG[0]);
   parser___parser_prod___AInitPropExternCall___empty_init(fra.me.REG[0], init_table);
@@ -56108,7 +58543,7 @@ val_t NEW_AInitPropExternCall_parser___parser_prod___AInitPropExternCall___init_
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8183;
+  fra.me.line = 8665;
   fra.me.meth = LOCATE_NEW_AInitPropExternCall_parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -56116,7 +58551,7 @@ val_t NEW_AInitPropExternCall_parser___parser_prod___AInitPropExternCall___init_
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:8183 */
+  /* parser/parser_prod.nit:8665 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AInitPropExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___AInitPropExternCall(fra.me.REG[1]);
   parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -56152,13 +58587,13 @@ val_t NEW_AInitPropExternCall_parser___parser_prod___AExternCall___init_aexternc
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8042;
+  fra.me.line = 8524;
   fra.me.meth = LOCATE_NEW_AInitPropExternCall_parser___parser_prod___AExternCall___init_aexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8042 */
+  /* parser/parser_prod.nit:8524 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AInitPropExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___AInitPropExternCall(fra.me.REG[0]);
   parser___parser_prod___AExternCall___init_aexterncall(fra.me.REG[0], init_table);
@@ -56166,15 +58601,15 @@ val_t NEW_AInitPropExternCall_parser___parser_prod___AExternCall___init_aexternc
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ASuperExternCall[83] = {
-  {(bigint) 3775 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ASuperExternCall[84] = {
+  {(bigint) 4291 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ASuperExternCall" /* 2: Class Name */},
   {(bigint) 3 /* 3: ASuperExternCall < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ASuperExternCall < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ASuperExternCall < Prod: superclass typecheck marker */},
-  {(bigint) 3303 /* 6: ASuperExternCall < AExternCall: superclass typecheck marker */},
-  {(bigint) 3775 /* 7: ASuperExternCall < ASuperExternCall: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ASuperExternCall < Prod: superclass typecheck marker */},
+  {(bigint) 3803 /* 6: ASuperExternCall < AExternCall: superclass typecheck marker */},
+  {(bigint) 4291 /* 7: ASuperExternCall < ASuperExternCall: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -56241,14 +58676,15 @@ const classtable_elt_t VFT_parser___parser_nodes___ASuperExternCall[83] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ASuperExternCall < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___AExternCall___target_class_name},
   {(bigint) syntax___typing___AExternCall___target_method_name},
   {(bigint) parser___parser_prod___AExternCall___empty_init},
   {(bigint) parser___parser_prod___AExternCall___init_aexterncall},
-  {(bigint) 0 /* 78: ASuperExternCall < AExternCall: superclass init_table position */},
+  {(bigint) 0 /* 79: ASuperExternCall < AExternCall: superclass init_table position */},
   {(bigint) parser___parser_prod___ASuperExternCall___empty_init},
   {(bigint) parser___parser_prod___ASuperExternCall___init_asuperexterncall},
-  {(bigint) 4 /* 81: ASuperExternCall < ASuperExternCall: superclass init_table position */},
+  {(bigint) 4 /* 82: ASuperExternCall < ASuperExternCall: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASuperExternCall___n_kwsuper},
 };
 /* 0: Pointer to the classtable */
@@ -56257,24 +58693,31 @@ const classtable_elt_t VFT_parser___parser_nodes___ASuperExternCall[83] = {
 /* 3: Attribute ASuperExternCall::_location */
 /* 4: Attribute ASuperExternCall::_first_location */
 /* 5: Attribute ASuperExternCall::_last_location */
-/* 6: Attribute ASuperExternCall::_n_kwsuper */
+/* 6: Attribute ASuperExternCall::_n_annotations */
+/* 7: Attribute ASuperExternCall::_n_kwsuper */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ASuperExternCall[] = "init var of ASuperExternCall";
 void INIT_ATTRIBUTES__parser___parser_nodes___ASuperExternCall(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ASuperExternCall;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ASuperExternCall(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
+  obj = alloc(sizeof(val_t) * 8);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ASuperExternCall;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -56308,13 +58751,13 @@ val_t NEW_ASuperExternCall_parser___parser_prod___AExternCall___empty_init(void)
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8040;
+  fra.me.line = 8522;
   fra.me.meth = LOCATE_NEW_ASuperExternCall_parser___parser_prod___AExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8040 */
+  /* parser/parser_prod.nit:8522 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ASuperExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___ASuperExternCall(fra.me.REG[0]);
   parser___parser_prod___AExternCall___empty_init(fra.me.REG[0], init_table);
@@ -56329,13 +58772,13 @@ val_t NEW_ASuperExternCall_parser___parser_prod___ASuperExternCall___empty_init(
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8056;
+  fra.me.line = 8538;
   fra.me.meth = LOCATE_NEW_ASuperExternCall_parser___parser_prod___ASuperExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8056 */
+  /* parser/parser_prod.nit:8538 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ASuperExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___ASuperExternCall(fra.me.REG[0]);
   parser___parser_prod___ASuperExternCall___empty_init(fra.me.REG[0], init_table);
@@ -56350,7 +58793,7 @@ val_t NEW_ASuperExternCall_parser___parser_prod___ASuperExternCall___init_asuper
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8058;
+  fra.me.line = 8540;
   fra.me.meth = LOCATE_NEW_ASuperExternCall_parser___parser_prod___ASuperExternCall___init_asuperexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -56358,7 +58801,7 @@ val_t NEW_ASuperExternCall_parser___parser_prod___ASuperExternCall___init_asuper
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:8058 */
+  /* parser/parser_prod.nit:8540 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ASuperExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___ASuperExternCall(fra.me.REG[1]);
   parser___parser_prod___ASuperExternCall___init_asuperexterncall(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -56394,13 +58837,13 @@ val_t NEW_ASuperExternCall_parser___parser_prod___AExternCall___init_aexterncall
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8042;
+  fra.me.line = 8524;
   fra.me.meth = LOCATE_NEW_ASuperExternCall_parser___parser_prod___AExternCall___init_aexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8042 */
+  /* parser/parser_prod.nit:8524 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ASuperExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___ASuperExternCall(fra.me.REG[0]);
   parser___parser_prod___AExternCall___init_aexterncall(fra.me.REG[0], init_table);
@@ -56408,16 +58851,16 @@ val_t NEW_ASuperExternCall_parser___parser_prod___AExternCall___init_aexterncall
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ACastAsExternCall[88] = {
-  {(bigint) 4227 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ACastAsExternCall[89] = {
+  {(bigint) 4783 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ACastAsExternCall" /* 2: Class Name */},
   {(bigint) 3 /* 3: ACastAsExternCall < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ACastAsExternCall < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ACastAsExternCall < Prod: superclass typecheck marker */},
-  {(bigint) 3303 /* 6: ACastAsExternCall < AExternCall: superclass typecheck marker */},
-  {(bigint) 3983 /* 7: ACastAsExternCall < ACastExternCall: superclass typecheck marker */},
-  {(bigint) 4227 /* 8: ACastAsExternCall < ACastAsExternCall: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ACastAsExternCall < Prod: superclass typecheck marker */},
+  {(bigint) 3803 /* 6: ACastAsExternCall < AExternCall: superclass typecheck marker */},
+  {(bigint) 4527 /* 7: ACastAsExternCall < ACastExternCall: superclass typecheck marker */},
+  {(bigint) 4783 /* 8: ACastAsExternCall < ACastAsExternCall: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -56483,17 +58926,18 @@ const classtable_elt_t VFT_parser___parser_nodes___ACastAsExternCall[88] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: ACastAsExternCall < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___AExternCall___target_class_name},
   {(bigint) syntax___typing___AExternCall___target_method_name},
   {(bigint) parser___parser_prod___AExternCall___empty_init},
   {(bigint) parser___parser_prod___AExternCall___init_aexterncall},
-  {(bigint) 1 /* 78: ACastAsExternCall < AExternCall: superclass init_table position */},
+  {(bigint) 1 /* 79: ACastAsExternCall < AExternCall: superclass init_table position */},
   {(bigint) syntax___typing___ACastAsExternCall___from_type},
   {(bigint) syntax___typing___ACastAsExternCall___to_type},
-  {(bigint) 0 /* 81: ACastAsExternCall < ACastExternCall: superclass init_table position */},
+  {(bigint) 0 /* 82: ACastAsExternCall < ACastExternCall: superclass init_table position */},
   {(bigint) parser___parser_prod___ACastAsExternCall___empty_init},
   {(bigint) parser___parser_prod___ACastAsExternCall___init_acastasexterncall},
-  {(bigint) 5 /* 84: ACastAsExternCall < ACastAsExternCall: superclass init_table position */},
+  {(bigint) 5 /* 85: ACastAsExternCall < ACastAsExternCall: superclass init_table position */},
   {(bigint) parser___parser_nodes___ACastAsExternCall___n_from_type},
   {(bigint) parser___parser_nodes___ACastAsExternCall___n_kwas},
   {(bigint) parser___parser_nodes___ACastAsExternCall___n_to_type},
@@ -56504,26 +58948,33 @@ const classtable_elt_t VFT_parser___parser_nodes___ACastAsExternCall[88] = {
 /* 3: Attribute ACastAsExternCall::_location */
 /* 4: Attribute ACastAsExternCall::_first_location */
 /* 5: Attribute ACastAsExternCall::_last_location */
-/* 6: Attribute ACastAsExternCall::_n_from_type */
-/* 7: Attribute ACastAsExternCall::_n_kwas */
-/* 8: Attribute ACastAsExternCall::_n_to_type */
+/* 6: Attribute ACastAsExternCall::_n_annotations */
+/* 7: Attribute ACastAsExternCall::_n_from_type */
+/* 8: Attribute ACastAsExternCall::_n_kwas */
+/* 9: Attribute ACastAsExternCall::_n_to_type */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ACastAsExternCall[] = "init var of ACastAsExternCall";
 void INIT_ATTRIBUTES__parser___parser_nodes___ACastAsExternCall(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ACastAsExternCall;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ACastAsExternCall(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
+  obj = alloc(sizeof(val_t) * 10);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ACastAsExternCall;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -56567,13 +59018,13 @@ val_t NEW_ACastAsExternCall_parser___parser_prod___AExternCall___empty_init(void
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8040;
+  fra.me.line = 8522;
   fra.me.meth = LOCATE_NEW_ACastAsExternCall_parser___parser_prod___AExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8040 */
+  /* parser/parser_prod.nit:8522 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ACastAsExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___ACastAsExternCall(fra.me.REG[0]);
   parser___parser_prod___AExternCall___empty_init(fra.me.REG[0], init_table);
@@ -56588,13 +59039,13 @@ val_t NEW_ACastAsExternCall_parser___parser_prod___ACastAsExternCall___empty_ini
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8212;
+  fra.me.line = 8694;
   fra.me.meth = LOCATE_NEW_ACastAsExternCall_parser___parser_prod___ACastAsExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8212 */
+  /* parser/parser_prod.nit:8694 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ACastAsExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___ACastAsExternCall(fra.me.REG[0]);
   parser___parser_prod___ACastAsExternCall___empty_init(fra.me.REG[0], init_table);
@@ -56609,7 +59060,7 @@ val_t NEW_ACastAsExternCall_parser___parser_prod___ACastAsExternCall___init_acas
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8214;
+  fra.me.line = 8696;
   fra.me.meth = LOCATE_NEW_ACastAsExternCall_parser___parser_prod___ACastAsExternCall___init_acastasexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -56621,7 +59072,7 @@ val_t NEW_ACastAsExternCall_parser___parser_prod___ACastAsExternCall___init_acas
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8214 */
+  /* parser/parser_prod.nit:8696 */
   fra.me.REG[3] = NEW_parser___parser_nodes___ACastAsExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___ACastAsExternCall(fra.me.REG[3]);
   parser___parser_prod___ACastAsExternCall___init_acastasexterncall(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -56657,13 +59108,13 @@ val_t NEW_ACastAsExternCall_parser___parser_prod___AExternCall___init_aexterncal
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8042;
+  fra.me.line = 8524;
   fra.me.meth = LOCATE_NEW_ACastAsExternCall_parser___parser_prod___AExternCall___init_aexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8042 */
+  /* parser/parser_prod.nit:8524 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ACastAsExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___ACastAsExternCall(fra.me.REG[0]);
   parser___parser_prod___AExternCall___init_aexterncall(fra.me.REG[0], init_table);
@@ -56671,16 +59122,16 @@ val_t NEW_ACastAsExternCall_parser___parser_prod___AExternCall___init_aexterncal
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AAsNullableExternCall[88] = {
-  {(bigint) 4247 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AAsNullableExternCall[89] = {
+  {(bigint) 4803 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AAsNullableExternCall" /* 2: Class Name */},
   {(bigint) 3 /* 3: AAsNullableExternCall < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AAsNullableExternCall < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AAsNullableExternCall < Prod: superclass typecheck marker */},
-  {(bigint) 3303 /* 6: AAsNullableExternCall < AExternCall: superclass typecheck marker */},
-  {(bigint) 3983 /* 7: AAsNullableExternCall < ACastExternCall: superclass typecheck marker */},
-  {(bigint) 4247 /* 8: AAsNullableExternCall < AAsNullableExternCall: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AAsNullableExternCall < Prod: superclass typecheck marker */},
+  {(bigint) 3803 /* 6: AAsNullableExternCall < AExternCall: superclass typecheck marker */},
+  {(bigint) 4527 /* 7: AAsNullableExternCall < ACastExternCall: superclass typecheck marker */},
+  {(bigint) 4803 /* 8: AAsNullableExternCall < AAsNullableExternCall: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -56746,17 +59197,18 @@ const classtable_elt_t VFT_parser___parser_nodes___AAsNullableExternCall[88] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AAsNullableExternCall < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___AExternCall___target_class_name},
   {(bigint) syntax___typing___AExternCall___target_method_name},
   {(bigint) parser___parser_prod___AExternCall___empty_init},
   {(bigint) parser___parser_prod___AExternCall___init_aexterncall},
-  {(bigint) 1 /* 78: AAsNullableExternCall < AExternCall: superclass init_table position */},
+  {(bigint) 1 /* 79: AAsNullableExternCall < AExternCall: superclass init_table position */},
   {(bigint) syntax___typing___AAsNullableExternCall___from_type},
   {(bigint) syntax___typing___AAsNullableExternCall___to_type},
-  {(bigint) 0 /* 81: AAsNullableExternCall < ACastExternCall: superclass init_table position */},
+  {(bigint) 0 /* 82: AAsNullableExternCall < ACastExternCall: superclass init_table position */},
   {(bigint) parser___parser_prod___AAsNullableExternCall___empty_init},
   {(bigint) parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall},
-  {(bigint) 5 /* 84: AAsNullableExternCall < AAsNullableExternCall: superclass init_table position */},
+  {(bigint) 5 /* 85: AAsNullableExternCall < AAsNullableExternCall: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAsNullableExternCall___n_type},
   {(bigint) parser___parser_nodes___AAsNullableExternCall___n_kwas},
   {(bigint) parser___parser_nodes___AAsNullableExternCall___n_kwnullable},
@@ -56767,26 +59219,33 @@ const classtable_elt_t VFT_parser___parser_nodes___AAsNullableExternCall[88] = {
 /* 3: Attribute AAsNullableExternCall::_location */
 /* 4: Attribute AAsNullableExternCall::_first_location */
 /* 5: Attribute AAsNullableExternCall::_last_location */
-/* 6: Attribute AAsNullableExternCall::_n_type */
-/* 7: Attribute AAsNullableExternCall::_n_kwas */
-/* 8: Attribute AAsNullableExternCall::_n_kwnullable */
+/* 6: Attribute AAsNullableExternCall::_n_annotations */
+/* 7: Attribute AAsNullableExternCall::_n_type */
+/* 8: Attribute AAsNullableExternCall::_n_kwas */
+/* 9: Attribute AAsNullableExternCall::_n_kwnullable */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAsNullableExternCall[] = "init var of AAsNullableExternCall";
 void INIT_ATTRIBUTES__parser___parser_nodes___AAsNullableExternCall(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAsNullableExternCall;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AAsNullableExternCall(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
+  obj = alloc(sizeof(val_t) * 10);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AAsNullableExternCall;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -56830,13 +59289,13 @@ val_t NEW_AAsNullableExternCall_parser___parser_prod___AExternCall___empty_init(
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8040;
+  fra.me.line = 8522;
   fra.me.meth = LOCATE_NEW_AAsNullableExternCall_parser___parser_prod___AExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8040 */
+  /* parser/parser_prod.nit:8522 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAsNullableExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___AAsNullableExternCall(fra.me.REG[0]);
   parser___parser_prod___AExternCall___empty_init(fra.me.REG[0], init_table);
@@ -56851,13 +59310,13 @@ val_t NEW_AAsNullableExternCall_parser___parser_prod___AAsNullableExternCall___e
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8271;
+  fra.me.line = 8753;
   fra.me.meth = LOCATE_NEW_AAsNullableExternCall_parser___parser_prod___AAsNullableExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8271 */
+  /* parser/parser_prod.nit:8753 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAsNullableExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___AAsNullableExternCall(fra.me.REG[0]);
   parser___parser_prod___AAsNullableExternCall___empty_init(fra.me.REG[0], init_table);
@@ -56872,7 +59331,7 @@ val_t NEW_AAsNullableExternCall_parser___parser_prod___AAsNullableExternCall___i
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8273;
+  fra.me.line = 8755;
   fra.me.meth = LOCATE_NEW_AAsNullableExternCall_parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -56884,7 +59343,7 @@ val_t NEW_AAsNullableExternCall_parser___parser_prod___AAsNullableExternCall___i
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8273 */
+  /* parser/parser_prod.nit:8755 */
   fra.me.REG[3] = NEW_parser___parser_nodes___AAsNullableExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___AAsNullableExternCall(fra.me.REG[3]);
   parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -56920,13 +59379,13 @@ val_t NEW_AAsNullableExternCall_parser___parser_prod___AExternCall___init_aexter
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8042;
+  fra.me.line = 8524;
   fra.me.meth = LOCATE_NEW_AAsNullableExternCall_parser___parser_prod___AExternCall___init_aexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8042 */
+  /* parser/parser_prod.nit:8524 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAsNullableExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___AAsNullableExternCall(fra.me.REG[0]);
   parser___parser_prod___AExternCall___init_aexterncall(fra.me.REG[0], init_table);
@@ -56934,16 +59393,16 @@ val_t NEW_AAsNullableExternCall_parser___parser_prod___AExternCall___init_aexter
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AAsNotNullableExternCall[89] = {
-  {(bigint) 4251 /* 0: Identity */},
-  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AAsNotNullableExternCall[90] = {
+  {(bigint) 4807 /* 0: Identity */},
+  {(bigint) 11 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AAsNotNullableExternCall" /* 2: Class Name */},
   {(bigint) 3 /* 3: AAsNotNullableExternCall < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AAsNotNullableExternCall < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AAsNotNullableExternCall < Prod: superclass typecheck marker */},
-  {(bigint) 3303 /* 6: AAsNotNullableExternCall < AExternCall: superclass typecheck marker */},
-  {(bigint) 3983 /* 7: AAsNotNullableExternCall < ACastExternCall: superclass typecheck marker */},
-  {(bigint) 4251 /* 8: AAsNotNullableExternCall < AAsNotNullableExternCall: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AAsNotNullableExternCall < Prod: superclass typecheck marker */},
+  {(bigint) 3803 /* 6: AAsNotNullableExternCall < AExternCall: superclass typecheck marker */},
+  {(bigint) 4527 /* 7: AAsNotNullableExternCall < ACastExternCall: superclass typecheck marker */},
+  {(bigint) 4807 /* 8: AAsNotNullableExternCall < AAsNotNullableExternCall: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -57009,17 +59468,18 @@ const classtable_elt_t VFT_parser___parser_nodes___AAsNotNullableExternCall[89]
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AAsNotNullableExternCall < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___AExternCall___target_class_name},
   {(bigint) syntax___typing___AExternCall___target_method_name},
   {(bigint) parser___parser_prod___AExternCall___empty_init},
   {(bigint) parser___parser_prod___AExternCall___init_aexterncall},
-  {(bigint) 1 /* 78: AAsNotNullableExternCall < AExternCall: superclass init_table position */},
+  {(bigint) 1 /* 79: AAsNotNullableExternCall < AExternCall: superclass init_table position */},
   {(bigint) syntax___typing___AAsNotNullableExternCall___from_type},
   {(bigint) syntax___typing___AAsNotNullableExternCall___to_type},
-  {(bigint) 0 /* 81: AAsNotNullableExternCall < ACastExternCall: superclass init_table position */},
+  {(bigint) 0 /* 82: AAsNotNullableExternCall < ACastExternCall: superclass init_table position */},
   {(bigint) parser___parser_prod___AAsNotNullableExternCall___empty_init},
   {(bigint) parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall},
-  {(bigint) 5 /* 84: AAsNotNullableExternCall < AAsNotNullableExternCall: superclass init_table position */},
+  {(bigint) 5 /* 85: AAsNotNullableExternCall < AAsNotNullableExternCall: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAsNotNullableExternCall___n_type},
   {(bigint) parser___parser_nodes___AAsNotNullableExternCall___n_kwas},
   {(bigint) parser___parser_nodes___AAsNotNullableExternCall___n_kwnot},
@@ -57031,27 +59491,34 @@ const classtable_elt_t VFT_parser___parser_nodes___AAsNotNullableExternCall[89]
 /* 3: Attribute AAsNotNullableExternCall::_location */
 /* 4: Attribute AAsNotNullableExternCall::_first_location */
 /* 5: Attribute AAsNotNullableExternCall::_last_location */
-/* 6: Attribute AAsNotNullableExternCall::_n_type */
-/* 7: Attribute AAsNotNullableExternCall::_n_kwas */
-/* 8: Attribute AAsNotNullableExternCall::_n_kwnot */
-/* 9: Attribute AAsNotNullableExternCall::_n_kwnullable */
+/* 6: Attribute AAsNotNullableExternCall::_n_annotations */
+/* 7: Attribute AAsNotNullableExternCall::_n_type */
+/* 8: Attribute AAsNotNullableExternCall::_n_kwas */
+/* 9: Attribute AAsNotNullableExternCall::_n_kwnot */
+/* 10: Attribute AAsNotNullableExternCall::_n_kwnullable */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAsNotNullableExternCall[] = "init var of AAsNotNullableExternCall";
 void INIT_ATTRIBUTES__parser___parser_nodes___AAsNotNullableExternCall(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAsNotNullableExternCall;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AAsNotNullableExternCall(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 10);
+  obj = alloc(sizeof(val_t) * 11);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AAsNotNullableExternCall;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -57100,13 +59567,13 @@ val_t NEW_AAsNotNullableExternCall_parser___parser_prod___AExternCall___empty_in
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8040;
+  fra.me.line = 8522;
   fra.me.meth = LOCATE_NEW_AAsNotNullableExternCall_parser___parser_prod___AExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8040 */
+  /* parser/parser_prod.nit:8522 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAsNotNullableExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___AAsNotNullableExternCall(fra.me.REG[0]);
   parser___parser_prod___AExternCall___empty_init(fra.me.REG[0], init_table);
@@ -57121,13 +59588,13 @@ val_t NEW_AAsNotNullableExternCall_parser___parser_prod___AAsNotNullableExternCa
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8330;
+  fra.me.line = 8812;
   fra.me.meth = LOCATE_NEW_AAsNotNullableExternCall_parser___parser_prod___AAsNotNullableExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8330 */
+  /* parser/parser_prod.nit:8812 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAsNotNullableExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___AAsNotNullableExternCall(fra.me.REG[0]);
   parser___parser_prod___AAsNotNullableExternCall___empty_init(fra.me.REG[0], init_table);
@@ -57142,7 +59609,7 @@ val_t NEW_AAsNotNullableExternCall_parser___parser_prod___AAsNotNullableExternCa
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8332;
+  fra.me.line = 8814;
   fra.me.meth = LOCATE_NEW_AAsNotNullableExternCall_parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -57156,7 +59623,7 @@ val_t NEW_AAsNotNullableExternCall_parser___parser_prod___AAsNotNullableExternCa
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:8332 */
+  /* parser/parser_prod.nit:8814 */
   fra.me.REG[4] = NEW_parser___parser_nodes___AAsNotNullableExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___AAsNotNullableExternCall(fra.me.REG[4]);
   parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
@@ -57192,13 +59659,13 @@ val_t NEW_AAsNotNullableExternCall_parser___parser_prod___AExternCall___init_aex
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8042;
+  fra.me.line = 8524;
   fra.me.meth = LOCATE_NEW_AAsNotNullableExternCall_parser___parser_prod___AExternCall___init_aexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8042 */
+  /* parser/parser_prod.nit:8524 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAsNotNullableExternCall();
   INIT_ATTRIBUTES__parser___parser_nodes___AAsNotNullableExternCall(fra.me.REG[0]);
   parser___parser_prod___AExternCall___init_aexterncall(fra.me.REG[0], init_table);
@@ -57206,15 +59673,15 @@ val_t NEW_AAsNotNullableExternCall_parser___parser_prod___AExternCall___init_aex
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ATypePropdef[93] = {
-  {(bigint) 3759 /* 0: Identity */},
-  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ATypePropdef[94] = {
+  {(bigint) 4271 /* 0: Identity */},
+  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ATypePropdef" /* 2: Class Name */},
   {(bigint) 3 /* 3: ATypePropdef < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ATypePropdef < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ATypePropdef < Prod: superclass typecheck marker */},
-  {(bigint) 3251 /* 6: ATypePropdef < APropdef: superclass typecheck marker */},
-  {(bigint) 3759 /* 7: ATypePropdef < ATypePropdef: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ATypePropdef < Prod: superclass typecheck marker */},
+  {(bigint) 3751 /* 6: ATypePropdef < APropdef: superclass typecheck marker */},
+  {(bigint) 4271 /* 7: ATypePropdef < ATypePropdef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -57281,12 +59748,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ATypePropdef[93] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ATypePropdef < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___APropdef___process_and_check},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_intro},
   {(bigint) syntax___mmbuilder___APropdef___inherit_signature},
   {(bigint) syntax___mmbuilder___APropdef___do_and_check_redef},
   {(bigint) syntax___typing___APropdef___self_var},
-  {(bigint) 0 /* 79: ATypePropdef < APropdef: superclass init_table position */},
+  {(bigint) 0 /* 80: ATypePropdef < APropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___APropdef___n_doc},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
@@ -57294,7 +59762,7 @@ const classtable_elt_t VFT_parser___parser_nodes___ATypePropdef[93] = {
   {(bigint) syntax___mmbuilder___ATypePropdef___prop},
   {(bigint) parser___parser_prod___ATypePropdef___empty_init},
   {(bigint) parser___parser_prod___ATypePropdef___init_atypepropdef},
-  {(bigint) 4 /* 87: ATypePropdef < ATypePropdef: superclass init_table position */},
+  {(bigint) 4 /* 88: ATypePropdef < ATypePropdef: superclass init_table position */},
   {(bigint) parser___parser_nodes___ATypePropdef___n_kwredef},
   {(bigint) parser___parser_nodes___ATypePropdef___n_visibility},
   {(bigint) parser___parser_nodes___ATypePropdef___n_kwtype},
@@ -57307,14 +59775,15 @@ const classtable_elt_t VFT_parser___parser_nodes___ATypePropdef[93] = {
 /* 3: Attribute ATypePropdef::_location */
 /* 4: Attribute ATypePropdef::_first_location */
 /* 5: Attribute ATypePropdef::_last_location */
-/* 6: Attribute ATypePropdef::_n_doc */
-/* 7: Attribute ATypePropdef::_self_var */
-/* 8: Attribute ATypePropdef::_prop */
-/* 9: Attribute ATypePropdef::_n_kwredef */
-/* 10: Attribute ATypePropdef::_n_visibility */
-/* 11: Attribute ATypePropdef::_n_kwtype */
-/* 12: Attribute ATypePropdef::_n_id */
-/* 13: Attribute ATypePropdef::_n_type */
+/* 6: Attribute ATypePropdef::_n_annotations */
+/* 7: Attribute ATypePropdef::_n_doc */
+/* 8: Attribute ATypePropdef::_self_var */
+/* 9: Attribute ATypePropdef::_prop */
+/* 10: Attribute ATypePropdef::_n_kwredef */
+/* 11: Attribute ATypePropdef::_n_visibility */
+/* 12: Attribute ATypePropdef::_n_kwtype */
+/* 13: Attribute ATypePropdef::_n_id */
+/* 14: Attribute ATypePropdef::_n_type */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ATypePropdef[] = "init var of ATypePropdef";
 void INIT_ATTRIBUTES__parser___parser_nodes___ATypePropdef(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -57329,10 +59798,13 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ATypePropdef(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:491 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:497 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:618 */
+  /* parser/parser_nodes.nit:624 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -57340,7 +59812,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ATypePropdef(val_t p0){
 val_t NEW_parser___parser_nodes___ATypePropdef(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 14);
+  obj = alloc(sizeof(val_t) * 15);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ATypePropdef;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -57389,13 +59861,13 @@ val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2157;
+  fra.me.line = 2315;
   fra.me.meth = LOCATE_NEW_ATypePropdef_parser___parser_prod___ATypePropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2157 */
+  /* parser/parser_prod.nit:2315 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ATypePropdef();
   INIT_ATTRIBUTES__parser___parser_nodes___ATypePropdef(fra.me.REG[0]);
   parser___parser_prod___ATypePropdef___empty_init(fra.me.REG[0], init_table);
@@ -57404,16 +59876,16 @@ val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef[] = "new ATypePropdef parser_prod::ATypePropdef::init_atypepropdef";
-val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2159;
+  fra.me.line = 2317;
   fra.me.meth = LOCATE_NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -57422,19 +59894,21 @@ val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(v
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:2159 */
-  fra.me.REG[6] = NEW_parser___parser_nodes___ATypePropdef();
-  INIT_ATTRIBUTES__parser___parser_nodes___ATypePropdef(fra.me.REG[6]);
-  parser___parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[6], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], init_table);
-  CHECKNEW_parser___parser_nodes___ATypePropdef(fra.me.REG[6]);
+  fra.me.REG[6] = p6;
+  /* parser/parser_prod.nit:2317 */
+  fra.me.REG[7] = NEW_parser___parser_nodes___ATypePropdef();
+  INIT_ATTRIBUTES__parser___parser_nodes___ATypePropdef(fra.me.REG[7]);
+  parser___parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[7], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], init_table);
+  CHECKNEW_parser___parser_nodes___ATypePropdef(fra.me.REG[7]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[6];
+  return fra.me.REG[7];
 }
 static const char LOCATE_NEW_ATypePropdef_parser___parser_nodes___ANode___init[] = "new ATypePropdef parser_nodes::ANode::init";
 val_t NEW_ATypePropdef_parser___parser_nodes___ANode___init(void){
@@ -57457,15 +59931,15 @@ val_t NEW_ATypePropdef_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AReadAble[81] = {
-  {(bigint) 3819 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AReadAble[82] = {
+  {(bigint) 4335 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AReadAble" /* 2: Class Name */},
   {(bigint) 3 /* 3: AReadAble < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AReadAble < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AReadAble < Prod: superclass typecheck marker */},
-  {(bigint) 3339 /* 6: AReadAble < AAble: superclass typecheck marker */},
-  {(bigint) 3819 /* 7: AReadAble < AReadAble: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AReadAble < Prod: superclass typecheck marker */},
+  {(bigint) 3855 /* 6: AReadAble < AAble: superclass typecheck marker */},
+  {(bigint) 4335 /* 7: AReadAble < AReadAble: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -57532,12 +60006,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AReadAble[81] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AReadAble < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
-  {(bigint) 0 /* 74: AReadAble < AAble: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 0 /* 75: AReadAble < AAble: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAble___n_visibility},
   {(bigint) parser___parser_nodes___AAble___n_kwredef},
   {(bigint) parser___parser_prod___AReadAble___empty_init},
   {(bigint) parser___parser_prod___AReadAble___init_areadable},
-  {(bigint) 4 /* 79: AReadAble < AReadAble: superclass init_table position */},
+  {(bigint) 4 /* 80: AReadAble < AReadAble: superclass init_table position */},
   {(bigint) parser___parser_nodes___AReadAble___n_kwreadable},
 };
 /* 0: Pointer to the classtable */
@@ -57546,9 +60021,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AReadAble[81] = {
 /* 3: Attribute AReadAble::_location */
 /* 4: Attribute AReadAble::_first_location */
 /* 5: Attribute AReadAble::_last_location */
-/* 6: Attribute AReadAble::_n_visibility */
-/* 7: Attribute AReadAble::_n_kwredef */
-/* 8: Attribute AReadAble::_n_kwreadable */
+/* 6: Attribute AReadAble::_n_annotations */
+/* 7: Attribute AReadAble::_n_visibility */
+/* 8: Attribute AReadAble::_n_kwredef */
+/* 9: Attribute AReadAble::_n_kwreadable */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AReadAble[] = "init var of AReadAble";
 void INIT_ATTRIBUTES__parser___parser_nodes___AReadAble(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -57563,18 +60039,21 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AReadAble(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:626 */
+  /* parser/parser_nodes.nit:56 */
   fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:625 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:631 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:632 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AReadAble(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
+  obj = alloc(sizeof(val_t) * 10);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AReadAble;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -57608,13 +60087,13 @@ val_t NEW_AReadAble_parser___parser_prod___AReadAble___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2266;
+  fra.me.line = 2442;
   fra.me.meth = LOCATE_NEW_AReadAble_parser___parser_prod___AReadAble___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2266 */
+  /* parser/parser_prod.nit:2442 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AReadAble();
   INIT_ATTRIBUTES__parser___parser_nodes___AReadAble(fra.me.REG[0]);
   parser___parser_prod___AReadAble___empty_init(fra.me.REG[0], init_table);
@@ -57629,7 +60108,7 @@ val_t NEW_AReadAble_parser___parser_prod___AReadAble___init_areadable(val_t p0,
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2268;
+  fra.me.line = 2444;
   fra.me.meth = LOCATE_NEW_AReadAble_parser___parser_prod___AReadAble___init_areadable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -57639,7 +60118,7 @@ val_t NEW_AReadAble_parser___parser_prod___AReadAble___init_areadable(val_t p0,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2268 */
+  /* parser/parser_prod.nit:2444 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AReadAble();
   INIT_ATTRIBUTES__parser___parser_nodes___AReadAble(fra.me.REG[2]);
   parser___parser_prod___AReadAble___init_areadable(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -57668,15 +60147,15 @@ val_t NEW_AReadAble_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AWriteAble[81] = {
-  {(bigint) 3747 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AWriteAble[82] = {
+  {(bigint) 4259 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AWriteAble" /* 2: Class Name */},
   {(bigint) 3 /* 3: AWriteAble < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AWriteAble < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AWriteAble < Prod: superclass typecheck marker */},
-  {(bigint) 3339 /* 6: AWriteAble < AAble: superclass typecheck marker */},
-  {(bigint) 3747 /* 7: AWriteAble < AWriteAble: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AWriteAble < Prod: superclass typecheck marker */},
+  {(bigint) 3855 /* 6: AWriteAble < AAble: superclass typecheck marker */},
+  {(bigint) 4259 /* 7: AWriteAble < AWriteAble: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -57743,12 +60222,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AWriteAble[81] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AWriteAble < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
-  {(bigint) 0 /* 74: AWriteAble < AAble: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 0 /* 75: AWriteAble < AAble: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAble___n_visibility},
   {(bigint) parser___parser_nodes___AAble___n_kwredef},
   {(bigint) parser___parser_prod___AWriteAble___empty_init},
   {(bigint) parser___parser_prod___AWriteAble___init_awriteable},
-  {(bigint) 4 /* 79: AWriteAble < AWriteAble: superclass init_table position */},
+  {(bigint) 4 /* 80: AWriteAble < AWriteAble: superclass init_table position */},
   {(bigint) parser___parser_nodes___AWriteAble___n_kwwritable},
 };
 /* 0: Pointer to the classtable */
@@ -57757,9 +60237,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AWriteAble[81] = {
 /* 3: Attribute AWriteAble::_location */
 /* 4: Attribute AWriteAble::_first_location */
 /* 5: Attribute AWriteAble::_last_location */
-/* 6: Attribute AWriteAble::_n_visibility */
-/* 7: Attribute AWriteAble::_n_kwredef */
-/* 8: Attribute AWriteAble::_n_kwwritable */
+/* 6: Attribute AWriteAble::_n_annotations */
+/* 7: Attribute AWriteAble::_n_visibility */
+/* 8: Attribute AWriteAble::_n_kwredef */
+/* 9: Attribute AWriteAble::_n_kwwritable */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AWriteAble[] = "init var of AWriteAble";
 void INIT_ATTRIBUTES__parser___parser_nodes___AWriteAble(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -57774,18 +60255,21 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AWriteAble(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:626 */
+  /* parser/parser_nodes.nit:56 */
   fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:625 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:631 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:632 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AWriteAble(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
+  obj = alloc(sizeof(val_t) * 10);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AWriteAble;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -57819,13 +60303,13 @@ val_t NEW_AWriteAble_parser___parser_prod___AWriteAble___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2315;
+  fra.me.line = 2491;
   fra.me.meth = LOCATE_NEW_AWriteAble_parser___parser_prod___AWriteAble___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2315 */
+  /* parser/parser_prod.nit:2491 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AWriteAble();
   INIT_ATTRIBUTES__parser___parser_nodes___AWriteAble(fra.me.REG[0]);
   parser___parser_prod___AWriteAble___empty_init(fra.me.REG[0], init_table);
@@ -57840,7 +60324,7 @@ val_t NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(val_t p
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2317;
+  fra.me.line = 2493;
   fra.me.meth = LOCATE_NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -57852,7 +60336,7 @@ val_t NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2317 */
+  /* parser/parser_prod.nit:2493 */
   fra.me.REG[3] = NEW_parser___parser_nodes___AWriteAble();
   INIT_ATTRIBUTES__parser___parser_nodes___AWriteAble(fra.me.REG[3]);
   parser___parser_prod___AWriteAble___init_awriteable(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -57881,15 +60365,15 @@ val_t NEW_AWriteAble_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AIdMethid[81] = {
-  {(bigint) 3927 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AIdMethid[82] = {
+  {(bigint) 4463 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AIdMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: AIdMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AIdMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AIdMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: AIdMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3927 /* 7: AIdMethid < AIdMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AIdMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: AIdMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4463 /* 7: AIdMethid < AIdMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -57956,12 +60440,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AIdMethid[81] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AIdMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: AIdMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: AIdMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___AIdMethid___empty_init},
   {(bigint) parser___parser_prod___AIdMethid___init_aidmethid},
-  {(bigint) 4 /* 79: AIdMethid < AIdMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: AIdMethid < AIdMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___AIdMethid___n_id},
 };
 /* 0: Pointer to the classtable */
@@ -57970,25 +60455,32 @@ const classtable_elt_t VFT_parser___parser_nodes___AIdMethid[81] = {
 /* 3: Attribute AIdMethid::_location */
 /* 4: Attribute AIdMethid::_first_location */
 /* 5: Attribute AIdMethid::_last_location */
-/* 6: Attribute AIdMethid::_name */
-/* 7: Attribute AIdMethid::_n_id */
+/* 6: Attribute AIdMethid::_n_annotations */
+/* 7: Attribute AIdMethid::_name */
+/* 8: Attribute AIdMethid::_n_id */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AIdMethid[] = "init var of AIdMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___AIdMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AIdMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AIdMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AIdMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -58022,13 +60514,13 @@ val_t NEW_AIdMethid_parser___parser_prod___AIdMethid___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2382;
+  fra.me.line = 2558;
   fra.me.meth = LOCATE_NEW_AIdMethid_parser___parser_prod___AIdMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2382 */
+  /* parser/parser_prod.nit:2558 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AIdMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AIdMethid(fra.me.REG[0]);
   parser___parser_prod___AIdMethid___empty_init(fra.me.REG[0], init_table);
@@ -58043,7 +60535,7 @@ val_t NEW_AIdMethid_parser___parser_prod___AIdMethid___init_aidmethid(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2384;
+  fra.me.line = 2560;
   fra.me.meth = LOCATE_NEW_AIdMethid_parser___parser_prod___AIdMethid___init_aidmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -58051,7 +60543,7 @@ val_t NEW_AIdMethid_parser___parser_prod___AIdMethid___init_aidmethid(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:2384 */
+  /* parser/parser_prod.nit:2560 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AIdMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AIdMethid(fra.me.REG[1]);
   parser___parser_prod___AIdMethid___init_aidmethid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -58080,15 +60572,15 @@ val_t NEW_AIdMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___APlusMethid[81] = {
-  {(bigint) 3847 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___APlusMethid[82] = {
+  {(bigint) 4363 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "APlusMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: APlusMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: APlusMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: APlusMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: APlusMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3847 /* 7: APlusMethid < APlusMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: APlusMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: APlusMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4363 /* 7: APlusMethid < APlusMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -58155,12 +60647,13 @@ const classtable_elt_t VFT_parser___parser_nodes___APlusMethid[81] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: APlusMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: APlusMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: APlusMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___APlusMethid___empty_init},
   {(bigint) parser___parser_prod___APlusMethid___init_aplusmethid},
-  {(bigint) 4 /* 79: APlusMethid < APlusMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: APlusMethid < APlusMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___APlusMethid___n_plus},
 };
 /* 0: Pointer to the classtable */
@@ -58169,25 +60662,32 @@ const classtable_elt_t VFT_parser___parser_nodes___APlusMethid[81] = {
 /* 3: Attribute APlusMethid::_location */
 /* 4: Attribute APlusMethid::_first_location */
 /* 5: Attribute APlusMethid::_last_location */
-/* 6: Attribute APlusMethid::_name */
-/* 7: Attribute APlusMethid::_n_plus */
+/* 6: Attribute APlusMethid::_n_annotations */
+/* 7: Attribute APlusMethid::_name */
+/* 8: Attribute APlusMethid::_n_plus */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___APlusMethid[] = "init var of APlusMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___APlusMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___APlusMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___APlusMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___APlusMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -58221,13 +60721,13 @@ val_t NEW_APlusMethid_parser___parser_prod___APlusMethid___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2413;
+  fra.me.line = 2589;
   fra.me.meth = LOCATE_NEW_APlusMethid_parser___parser_prod___APlusMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2413 */
+  /* parser/parser_prod.nit:2589 */
   fra.me.REG[0] = NEW_parser___parser_nodes___APlusMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___APlusMethid(fra.me.REG[0]);
   parser___parser_prod___APlusMethid___empty_init(fra.me.REG[0], init_table);
@@ -58242,7 +60742,7 @@ val_t NEW_APlusMethid_parser___parser_prod___APlusMethid___init_aplusmethid(val_
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2415;
+  fra.me.line = 2591;
   fra.me.meth = LOCATE_NEW_APlusMethid_parser___parser_prod___APlusMethid___init_aplusmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -58250,7 +60750,7 @@ val_t NEW_APlusMethid_parser___parser_prod___APlusMethid___init_aplusmethid(val_
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:2415 */
+  /* parser/parser_prod.nit:2591 */
   fra.me.REG[1] = NEW_parser___parser_nodes___APlusMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___APlusMethid(fra.me.REG[1]);
   parser___parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -58279,15 +60779,15 @@ val_t NEW_APlusMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AMinusMethid[81] = {
-  {(bigint) 3875 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AMinusMethid[82] = {
+  {(bigint) 4391 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AMinusMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: AMinusMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AMinusMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AMinusMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: AMinusMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3875 /* 7: AMinusMethid < AMinusMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AMinusMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: AMinusMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4391 /* 7: AMinusMethid < AMinusMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -58354,12 +60854,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AMinusMethid[81] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AMinusMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: AMinusMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: AMinusMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___AMinusMethid___empty_init},
   {(bigint) parser___parser_prod___AMinusMethid___init_aminusmethid},
-  {(bigint) 4 /* 79: AMinusMethid < AMinusMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: AMinusMethid < AMinusMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___AMinusMethid___n_minus},
 };
 /* 0: Pointer to the classtable */
@@ -58368,25 +60869,32 @@ const classtable_elt_t VFT_parser___parser_nodes___AMinusMethid[81] = {
 /* 3: Attribute AMinusMethid::_location */
 /* 4: Attribute AMinusMethid::_first_location */
 /* 5: Attribute AMinusMethid::_last_location */
-/* 6: Attribute AMinusMethid::_name */
-/* 7: Attribute AMinusMethid::_n_minus */
+/* 6: Attribute AMinusMethid::_n_annotations */
+/* 7: Attribute AMinusMethid::_name */
+/* 8: Attribute AMinusMethid::_n_minus */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AMinusMethid[] = "init var of AMinusMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___AMinusMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AMinusMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AMinusMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AMinusMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -58420,13 +60928,13 @@ val_t NEW_AMinusMethid_parser___parser_prod___AMinusMethid___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2444;
+  fra.me.line = 2620;
   fra.me.meth = LOCATE_NEW_AMinusMethid_parser___parser_prod___AMinusMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2444 */
+  /* parser/parser_prod.nit:2620 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AMinusMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AMinusMethid(fra.me.REG[0]);
   parser___parser_prod___AMinusMethid___empty_init(fra.me.REG[0], init_table);
@@ -58441,7 +60949,7 @@ val_t NEW_AMinusMethid_parser___parser_prod___AMinusMethid___init_aminusmethid(v
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2446;
+  fra.me.line = 2622;
   fra.me.meth = LOCATE_NEW_AMinusMethid_parser___parser_prod___AMinusMethid___init_aminusmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -58449,7 +60957,7 @@ val_t NEW_AMinusMethid_parser___parser_prod___AMinusMethid___init_aminusmethid(v
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:2446 */
+  /* parser/parser_prod.nit:2622 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AMinusMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AMinusMethid(fra.me.REG[1]);
   parser___parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -58478,15 +60986,15 @@ val_t NEW_AMinusMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AStarMethid[81] = {
-  {(bigint) 3795 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AStarMethid[82] = {
+  {(bigint) 4311 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AStarMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: AStarMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AStarMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AStarMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: AStarMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3795 /* 7: AStarMethid < AStarMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AStarMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: AStarMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4311 /* 7: AStarMethid < AStarMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -58553,12 +61061,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AStarMethid[81] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AStarMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: AStarMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: AStarMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___AStarMethid___empty_init},
   {(bigint) parser___parser_prod___AStarMethid___init_astarmethid},
-  {(bigint) 4 /* 79: AStarMethid < AStarMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: AStarMethid < AStarMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___AStarMethid___n_star},
 };
 /* 0: Pointer to the classtable */
@@ -58567,25 +61076,32 @@ const classtable_elt_t VFT_parser___parser_nodes___AStarMethid[81] = {
 /* 3: Attribute AStarMethid::_location */
 /* 4: Attribute AStarMethid::_first_location */
 /* 5: Attribute AStarMethid::_last_location */
-/* 6: Attribute AStarMethid::_name */
-/* 7: Attribute AStarMethid::_n_star */
+/* 6: Attribute AStarMethid::_n_annotations */
+/* 7: Attribute AStarMethid::_name */
+/* 8: Attribute AStarMethid::_n_star */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AStarMethid[] = "init var of AStarMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___AStarMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AStarMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AStarMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AStarMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -58619,13 +61135,13 @@ val_t NEW_AStarMethid_parser___parser_prod___AStarMethid___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2475;
+  fra.me.line = 2651;
   fra.me.meth = LOCATE_NEW_AStarMethid_parser___parser_prod___AStarMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2475 */
+  /* parser/parser_prod.nit:2651 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AStarMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AStarMethid(fra.me.REG[0]);
   parser___parser_prod___AStarMethid___empty_init(fra.me.REG[0], init_table);
@@ -58640,7 +61156,7 @@ val_t NEW_AStarMethid_parser___parser_prod___AStarMethid___init_astarmethid(val_
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2477;
+  fra.me.line = 2653;
   fra.me.meth = LOCATE_NEW_AStarMethid_parser___parser_prod___AStarMethid___init_astarmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -58648,7 +61164,7 @@ val_t NEW_AStarMethid_parser___parser_prod___AStarMethid___init_astarmethid(val_
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:2477 */
+  /* parser/parser_prod.nit:2653 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AStarMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AStarMethid(fra.me.REG[1]);
   parser___parser_prod___AStarMethid___init_astarmethid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -58677,15 +61193,15 @@ val_t NEW_AStarMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ASlashMethid[81] = {
-  {(bigint) 3799 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ASlashMethid[82] = {
+  {(bigint) 4315 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ASlashMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: ASlashMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ASlashMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ASlashMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: ASlashMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3799 /* 7: ASlashMethid < ASlashMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ASlashMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: ASlashMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4315 /* 7: ASlashMethid < ASlashMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -58752,12 +61268,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ASlashMethid[81] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ASlashMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: ASlashMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: ASlashMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___ASlashMethid___empty_init},
   {(bigint) parser___parser_prod___ASlashMethid___init_aslashmethid},
-  {(bigint) 4 /* 79: ASlashMethid < ASlashMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: ASlashMethid < ASlashMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASlashMethid___n_slash},
 };
 /* 0: Pointer to the classtable */
@@ -58766,25 +61283,32 @@ const classtable_elt_t VFT_parser___parser_nodes___ASlashMethid[81] = {
 /* 3: Attribute ASlashMethid::_location */
 /* 4: Attribute ASlashMethid::_first_location */
 /* 5: Attribute ASlashMethid::_last_location */
-/* 6: Attribute ASlashMethid::_name */
-/* 7: Attribute ASlashMethid::_n_slash */
+/* 6: Attribute ASlashMethid::_n_annotations */
+/* 7: Attribute ASlashMethid::_name */
+/* 8: Attribute ASlashMethid::_n_slash */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ASlashMethid[] = "init var of ASlashMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___ASlashMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ASlashMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ASlashMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ASlashMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -58818,13 +61342,13 @@ val_t NEW_ASlashMethid_parser___parser_prod___ASlashMethid___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2506;
+  fra.me.line = 2682;
   fra.me.meth = LOCATE_NEW_ASlashMethid_parser___parser_prod___ASlashMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2506 */
+  /* parser/parser_prod.nit:2682 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ASlashMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___ASlashMethid(fra.me.REG[0]);
   parser___parser_prod___ASlashMethid___empty_init(fra.me.REG[0], init_table);
@@ -58839,7 +61363,7 @@ val_t NEW_ASlashMethid_parser___parser_prod___ASlashMethid___init_aslashmethid(v
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2508;
+  fra.me.line = 2684;
   fra.me.meth = LOCATE_NEW_ASlashMethid_parser___parser_prod___ASlashMethid___init_aslashmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -58847,7 +61371,7 @@ val_t NEW_ASlashMethid_parser___parser_prod___ASlashMethid___init_aslashmethid(v
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:2508 */
+  /* parser/parser_prod.nit:2684 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ASlashMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___ASlashMethid(fra.me.REG[1]);
   parser___parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -58876,15 +61400,15 @@ val_t NEW_ASlashMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___APercentMethid[81] = {
-  {(bigint) 3855 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___APercentMethid[82] = {
+  {(bigint) 4371 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "APercentMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: APercentMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: APercentMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: APercentMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: APercentMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3855 /* 7: APercentMethid < APercentMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: APercentMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: APercentMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4371 /* 7: APercentMethid < APercentMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -58951,12 +61475,13 @@ const classtable_elt_t VFT_parser___parser_nodes___APercentMethid[81] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: APercentMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: APercentMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: APercentMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___APercentMethid___empty_init},
   {(bigint) parser___parser_prod___APercentMethid___init_apercentmethid},
-  {(bigint) 4 /* 79: APercentMethid < APercentMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: APercentMethid < APercentMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___APercentMethid___n_percent},
 };
 /* 0: Pointer to the classtable */
@@ -58965,25 +61490,32 @@ const classtable_elt_t VFT_parser___parser_nodes___APercentMethid[81] = {
 /* 3: Attribute APercentMethid::_location */
 /* 4: Attribute APercentMethid::_first_location */
 /* 5: Attribute APercentMethid::_last_location */
-/* 6: Attribute APercentMethid::_name */
-/* 7: Attribute APercentMethid::_n_percent */
+/* 6: Attribute APercentMethid::_n_annotations */
+/* 7: Attribute APercentMethid::_name */
+/* 8: Attribute APercentMethid::_n_percent */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___APercentMethid[] = "init var of APercentMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___APercentMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___APercentMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___APercentMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___APercentMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -59017,13 +61549,13 @@ val_t NEW_APercentMethid_parser___parser_prod___APercentMethid___empty_init(void
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2537;
+  fra.me.line = 2713;
   fra.me.meth = LOCATE_NEW_APercentMethid_parser___parser_prod___APercentMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2537 */
+  /* parser/parser_prod.nit:2713 */
   fra.me.REG[0] = NEW_parser___parser_nodes___APercentMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___APercentMethid(fra.me.REG[0]);
   parser___parser_prod___APercentMethid___empty_init(fra.me.REG[0], init_table);
@@ -59038,7 +61570,7 @@ val_t NEW_APercentMethid_parser___parser_prod___APercentMethid___init_apercentme
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2539;
+  fra.me.line = 2715;
   fra.me.meth = LOCATE_NEW_APercentMethid_parser___parser_prod___APercentMethid___init_apercentmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -59046,7 +61578,7 @@ val_t NEW_APercentMethid_parser___parser_prod___APercentMethid___init_apercentme
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:2539 */
+  /* parser/parser_prod.nit:2715 */
   fra.me.REG[1] = NEW_parser___parser_nodes___APercentMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___APercentMethid(fra.me.REG[1]);
   parser___parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -59075,15 +61607,15 @@ val_t NEW_APercentMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AEqMethid[81] = {
-  {(bigint) 3959 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AEqMethid[82] = {
+  {(bigint) 4503 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AEqMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: AEqMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AEqMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AEqMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: AEqMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3959 /* 7: AEqMethid < AEqMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AEqMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: AEqMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4503 /* 7: AEqMethid < AEqMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -59150,12 +61682,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AEqMethid[81] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AEqMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: AEqMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: AEqMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___AEqMethid___empty_init},
   {(bigint) parser___parser_prod___AEqMethid___init_aeqmethid},
-  {(bigint) 4 /* 79: AEqMethid < AEqMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: AEqMethid < AEqMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___AEqMethid___n_eq},
 };
 /* 0: Pointer to the classtable */
@@ -59164,25 +61697,32 @@ const classtable_elt_t VFT_parser___parser_nodes___AEqMethid[81] = {
 /* 3: Attribute AEqMethid::_location */
 /* 4: Attribute AEqMethid::_first_location */
 /* 5: Attribute AEqMethid::_last_location */
-/* 6: Attribute AEqMethid::_name */
-/* 7: Attribute AEqMethid::_n_eq */
+/* 6: Attribute AEqMethid::_n_annotations */
+/* 7: Attribute AEqMethid::_name */
+/* 8: Attribute AEqMethid::_n_eq */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AEqMethid[] = "init var of AEqMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___AEqMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AEqMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AEqMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AEqMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -59216,13 +61756,13 @@ val_t NEW_AEqMethid_parser___parser_prod___AEqMethid___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2568;
+  fra.me.line = 2744;
   fra.me.meth = LOCATE_NEW_AEqMethid_parser___parser_prod___AEqMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2568 */
+  /* parser/parser_prod.nit:2744 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AEqMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AEqMethid(fra.me.REG[0]);
   parser___parser_prod___AEqMethid___empty_init(fra.me.REG[0], init_table);
@@ -59237,7 +61777,7 @@ val_t NEW_AEqMethid_parser___parser_prod___AEqMethid___init_aeqmethid(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2570;
+  fra.me.line = 2746;
   fra.me.meth = LOCATE_NEW_AEqMethid_parser___parser_prod___AEqMethid___init_aeqmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -59245,7 +61785,7 @@ val_t NEW_AEqMethid_parser___parser_prod___AEqMethid___init_aeqmethid(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:2570 */
+  /* parser/parser_prod.nit:2746 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AEqMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AEqMethid(fra.me.REG[1]);
   parser___parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -59274,15 +61814,15 @@ val_t NEW_AEqMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ANeMethid[81] = {
-  {(bigint) 3871 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ANeMethid[82] = {
+  {(bigint) 4387 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ANeMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: ANeMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ANeMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ANeMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: ANeMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3871 /* 7: ANeMethid < ANeMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ANeMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: ANeMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4387 /* 7: ANeMethid < ANeMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -59349,12 +61889,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ANeMethid[81] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ANeMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: ANeMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: ANeMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___ANeMethid___empty_init},
   {(bigint) parser___parser_prod___ANeMethid___init_anemethid},
-  {(bigint) 4 /* 79: ANeMethid < ANeMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: ANeMethid < ANeMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANeMethid___n_ne},
 };
 /* 0: Pointer to the classtable */
@@ -59363,25 +61904,32 @@ const classtable_elt_t VFT_parser___parser_nodes___ANeMethid[81] = {
 /* 3: Attribute ANeMethid::_location */
 /* 4: Attribute ANeMethid::_first_location */
 /* 5: Attribute ANeMethid::_last_location */
-/* 6: Attribute ANeMethid::_name */
-/* 7: Attribute ANeMethid::_n_ne */
+/* 6: Attribute ANeMethid::_n_annotations */
+/* 7: Attribute ANeMethid::_name */
+/* 8: Attribute ANeMethid::_n_ne */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ANeMethid[] = "init var of ANeMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___ANeMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ANeMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ANeMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ANeMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -59415,13 +61963,13 @@ val_t NEW_ANeMethid_parser___parser_prod___ANeMethid___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2599;
+  fra.me.line = 2775;
   fra.me.meth = LOCATE_NEW_ANeMethid_parser___parser_prod___ANeMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2599 */
+  /* parser/parser_prod.nit:2775 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ANeMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___ANeMethid(fra.me.REG[0]);
   parser___parser_prod___ANeMethid___empty_init(fra.me.REG[0], init_table);
@@ -59436,7 +61984,7 @@ val_t NEW_ANeMethid_parser___parser_prod___ANeMethid___init_anemethid(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2601;
+  fra.me.line = 2777;
   fra.me.meth = LOCATE_NEW_ANeMethid_parser___parser_prod___ANeMethid___init_anemethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -59444,7 +61992,7 @@ val_t NEW_ANeMethid_parser___parser_prod___ANeMethid___init_anemethid(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:2601 */
+  /* parser/parser_prod.nit:2777 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ANeMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___ANeMethid(fra.me.REG[1]);
   parser___parser_prod___ANeMethid___init_anemethid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -59473,15 +62021,15 @@ val_t NEW_ANeMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ALeMethid[81] = {
-  {(bigint) 3903 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ALeMethid[82] = {
+  {(bigint) 4419 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ALeMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: ALeMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ALeMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ALeMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: ALeMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3903 /* 7: ALeMethid < ALeMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ALeMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: ALeMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4419 /* 7: ALeMethid < ALeMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -59548,12 +62096,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ALeMethid[81] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ALeMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: ALeMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: ALeMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___ALeMethid___empty_init},
   {(bigint) parser___parser_prod___ALeMethid___init_alemethid},
-  {(bigint) 4 /* 79: ALeMethid < ALeMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: ALeMethid < ALeMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___ALeMethid___n_le},
 };
 /* 0: Pointer to the classtable */
@@ -59562,25 +62111,32 @@ const classtable_elt_t VFT_parser___parser_nodes___ALeMethid[81] = {
 /* 3: Attribute ALeMethid::_location */
 /* 4: Attribute ALeMethid::_first_location */
 /* 5: Attribute ALeMethid::_last_location */
-/* 6: Attribute ALeMethid::_name */
-/* 7: Attribute ALeMethid::_n_le */
+/* 6: Attribute ALeMethid::_n_annotations */
+/* 7: Attribute ALeMethid::_name */
+/* 8: Attribute ALeMethid::_n_le */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ALeMethid[] = "init var of ALeMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___ALeMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ALeMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ALeMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ALeMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -59614,13 +62170,13 @@ val_t NEW_ALeMethid_parser___parser_prod___ALeMethid___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2630;
+  fra.me.line = 2806;
   fra.me.meth = LOCATE_NEW_ALeMethid_parser___parser_prod___ALeMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2630 */
+  /* parser/parser_prod.nit:2806 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALeMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___ALeMethid(fra.me.REG[0]);
   parser___parser_prod___ALeMethid___empty_init(fra.me.REG[0], init_table);
@@ -59635,7 +62191,7 @@ val_t NEW_ALeMethid_parser___parser_prod___ALeMethid___init_alemethid(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2632;
+  fra.me.line = 2808;
   fra.me.meth = LOCATE_NEW_ALeMethid_parser___parser_prod___ALeMethid___init_alemethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -59643,7 +62199,7 @@ val_t NEW_ALeMethid_parser___parser_prod___ALeMethid___init_alemethid(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:2632 */
+  /* parser/parser_prod.nit:2808 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ALeMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___ALeMethid(fra.me.REG[1]);
   parser___parser_prod___ALeMethid___init_alemethid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -59672,15 +62228,15 @@ val_t NEW_ALeMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AGeMethid[81] = {
-  {(bigint) 3939 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AGeMethid[82] = {
+  {(bigint) 4479 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AGeMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: AGeMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AGeMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AGeMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: AGeMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3939 /* 7: AGeMethid < AGeMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AGeMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: AGeMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4479 /* 7: AGeMethid < AGeMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -59747,12 +62303,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AGeMethid[81] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AGeMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: AGeMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: AGeMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___AGeMethid___empty_init},
   {(bigint) parser___parser_prod___AGeMethid___init_agemethid},
-  {(bigint) 4 /* 79: AGeMethid < AGeMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: AGeMethid < AGeMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___AGeMethid___n_ge},
 };
 /* 0: Pointer to the classtable */
@@ -59761,25 +62318,32 @@ const classtable_elt_t VFT_parser___parser_nodes___AGeMethid[81] = {
 /* 3: Attribute AGeMethid::_location */
 /* 4: Attribute AGeMethid::_first_location */
 /* 5: Attribute AGeMethid::_last_location */
-/* 6: Attribute AGeMethid::_name */
-/* 7: Attribute AGeMethid::_n_ge */
+/* 6: Attribute AGeMethid::_n_annotations */
+/* 7: Attribute AGeMethid::_name */
+/* 8: Attribute AGeMethid::_n_ge */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AGeMethid[] = "init var of AGeMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___AGeMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AGeMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AGeMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AGeMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -59813,13 +62377,13 @@ val_t NEW_AGeMethid_parser___parser_prod___AGeMethid___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2661;
+  fra.me.line = 2837;
   fra.me.meth = LOCATE_NEW_AGeMethid_parser___parser_prod___AGeMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2661 */
+  /* parser/parser_prod.nit:2837 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AGeMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AGeMethid(fra.me.REG[0]);
   parser___parser_prod___AGeMethid___empty_init(fra.me.REG[0], init_table);
@@ -59834,7 +62398,7 @@ val_t NEW_AGeMethid_parser___parser_prod___AGeMethid___init_agemethid(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2663;
+  fra.me.line = 2839;
   fra.me.meth = LOCATE_NEW_AGeMethid_parser___parser_prod___AGeMethid___init_agemethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -59842,7 +62406,7 @@ val_t NEW_AGeMethid_parser___parser_prod___AGeMethid___init_agemethid(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:2663 */
+  /* parser/parser_prod.nit:2839 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AGeMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AGeMethid(fra.me.REG[1]);
   parser___parser_prod___AGeMethid___init_agemethid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -59871,15 +62435,15 @@ val_t NEW_AGeMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ALtMethid[81] = {
-  {(bigint) 3891 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ALtMethid[82] = {
+  {(bigint) 4407 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ALtMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: ALtMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ALtMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ALtMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: ALtMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3891 /* 7: ALtMethid < ALtMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ALtMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: ALtMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4407 /* 7: ALtMethid < ALtMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -59946,12 +62510,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ALtMethid[81] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ALtMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: ALtMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: ALtMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___ALtMethid___empty_init},
   {(bigint) parser___parser_prod___ALtMethid___init_altmethid},
-  {(bigint) 4 /* 79: ALtMethid < ALtMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: ALtMethid < ALtMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___ALtMethid___n_lt},
 };
 /* 0: Pointer to the classtable */
@@ -59960,25 +62525,32 @@ const classtable_elt_t VFT_parser___parser_nodes___ALtMethid[81] = {
 /* 3: Attribute ALtMethid::_location */
 /* 4: Attribute ALtMethid::_first_location */
 /* 5: Attribute ALtMethid::_last_location */
-/* 6: Attribute ALtMethid::_name */
-/* 7: Attribute ALtMethid::_n_lt */
+/* 6: Attribute ALtMethid::_n_annotations */
+/* 7: Attribute ALtMethid::_name */
+/* 8: Attribute ALtMethid::_n_lt */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ALtMethid[] = "init var of ALtMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___ALtMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ALtMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ALtMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ALtMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -60012,13 +62584,13 @@ val_t NEW_ALtMethid_parser___parser_prod___ALtMethid___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2692;
+  fra.me.line = 2868;
   fra.me.meth = LOCATE_NEW_ALtMethid_parser___parser_prod___ALtMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2692 */
+  /* parser/parser_prod.nit:2868 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALtMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___ALtMethid(fra.me.REG[0]);
   parser___parser_prod___ALtMethid___empty_init(fra.me.REG[0], init_table);
@@ -60033,7 +62605,7 @@ val_t NEW_ALtMethid_parser___parser_prod___ALtMethid___init_altmethid(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2694;
+  fra.me.line = 2870;
   fra.me.meth = LOCATE_NEW_ALtMethid_parser___parser_prod___ALtMethid___init_altmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -60041,7 +62613,7 @@ val_t NEW_ALtMethid_parser___parser_prod___ALtMethid___init_altmethid(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:2694 */
+  /* parser/parser_prod.nit:2870 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ALtMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___ALtMethid(fra.me.REG[1]);
   parser___parser_prod___ALtMethid___init_altmethid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -60070,15 +62642,15 @@ val_t NEW_ALtMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AGtMethid[81] = {
-  {(bigint) 3931 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AGtMethid[82] = {
+  {(bigint) 4471 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AGtMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: AGtMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AGtMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AGtMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: AGtMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3931 /* 7: AGtMethid < AGtMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AGtMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: AGtMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4471 /* 7: AGtMethid < AGtMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -60145,12 +62717,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AGtMethid[81] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AGtMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: AGtMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: AGtMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___AGtMethid___empty_init},
   {(bigint) parser___parser_prod___AGtMethid___init_agtmethid},
-  {(bigint) 4 /* 79: AGtMethid < AGtMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: AGtMethid < AGtMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___AGtMethid___n_gt},
 };
 /* 0: Pointer to the classtable */
@@ -60159,25 +62732,32 @@ const classtable_elt_t VFT_parser___parser_nodes___AGtMethid[81] = {
 /* 3: Attribute AGtMethid::_location */
 /* 4: Attribute AGtMethid::_first_location */
 /* 5: Attribute AGtMethid::_last_location */
-/* 6: Attribute AGtMethid::_name */
-/* 7: Attribute AGtMethid::_n_gt */
+/* 6: Attribute AGtMethid::_n_annotations */
+/* 7: Attribute AGtMethid::_name */
+/* 8: Attribute AGtMethid::_n_gt */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AGtMethid[] = "init var of AGtMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___AGtMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AGtMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AGtMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AGtMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -60211,13 +62791,13 @@ val_t NEW_AGtMethid_parser___parser_prod___AGtMethid___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2723;
+  fra.me.line = 2899;
   fra.me.meth = LOCATE_NEW_AGtMethid_parser___parser_prod___AGtMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2723 */
+  /* parser/parser_prod.nit:2899 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AGtMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AGtMethid(fra.me.REG[0]);
   parser___parser_prod___AGtMethid___empty_init(fra.me.REG[0], init_table);
@@ -60232,7 +62812,7 @@ val_t NEW_AGtMethid_parser___parser_prod___AGtMethid___init_agtmethid(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2725;
+  fra.me.line = 2901;
   fra.me.meth = LOCATE_NEW_AGtMethid_parser___parser_prod___AGtMethid___init_agtmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -60240,7 +62820,7 @@ val_t NEW_AGtMethid_parser___parser_prod___AGtMethid___init_agtmethid(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:2725 */
+  /* parser/parser_prod.nit:2901 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AGtMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AGtMethid(fra.me.REG[1]);
   parser___parser_prod___AGtMethid___init_agtmethid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -60269,15 +62849,15 @@ val_t NEW_AGtMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ALlMethid[82] = {
-  {(bigint) 3895 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ALlMethid[83] = {
+  {(bigint) 4411 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ALlMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: ALlMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ALlMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ALlMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: ALlMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3895 /* 7: ALlMethid < ALlMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ALlMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: ALlMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4411 /* 7: ALlMethid < ALlMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -60344,12 +62924,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ALlMethid[82] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ALlMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: ALlMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: ALlMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___ALlMethid___empty_init},
   {(bigint) parser___parser_prod___ALlMethid___init_allmethid},
-  {(bigint) 4 /* 79: ALlMethid < ALlMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: ALlMethid < ALlMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___ALlMethid___n_ll},
   {(bigint) parser___parser_nodes___ALlMethid___n_ll__eq},
 };
@@ -60359,25 +62940,32 @@ const classtable_elt_t VFT_parser___parser_nodes___ALlMethid[82] = {
 /* 3: Attribute ALlMethid::_location */
 /* 4: Attribute ALlMethid::_first_location */
 /* 5: Attribute ALlMethid::_last_location */
-/* 6: Attribute ALlMethid::_name */
-/* 7: Attribute ALlMethid::_n_ll */
+/* 6: Attribute ALlMethid::_n_annotations */
+/* 7: Attribute ALlMethid::_name */
+/* 8: Attribute ALlMethid::_n_ll */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ALlMethid[] = "init var of ALlMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___ALlMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ALlMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ALlMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ALlMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -60411,13 +62999,13 @@ val_t NEW_ALlMethid_parser___parser_prod___ALlMethid___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2754;
+  fra.me.line = 2930;
   fra.me.meth = LOCATE_NEW_ALlMethid_parser___parser_prod___ALlMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2754 */
+  /* parser/parser_prod.nit:2930 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALlMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___ALlMethid(fra.me.REG[0]);
   parser___parser_prod___ALlMethid___empty_init(fra.me.REG[0], init_table);
@@ -60432,7 +63020,7 @@ val_t NEW_ALlMethid_parser___parser_prod___ALlMethid___init_allmethid(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2756;
+  fra.me.line = 2932;
   fra.me.meth = LOCATE_NEW_ALlMethid_parser___parser_prod___ALlMethid___init_allmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -60440,7 +63028,7 @@ val_t NEW_ALlMethid_parser___parser_prod___ALlMethid___init_allmethid(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:2756 */
+  /* parser/parser_prod.nit:2932 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ALlMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___ALlMethid(fra.me.REG[1]);
   parser___parser_prod___ALlMethid___init_allmethid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -60469,15 +63057,15 @@ val_t NEW_ALlMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AGgMethid[82] = {
-  {(bigint) 3935 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AGgMethid[83] = {
+  {(bigint) 4475 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AGgMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: AGgMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AGgMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AGgMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: AGgMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3935 /* 7: AGgMethid < AGgMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AGgMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: AGgMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4475 /* 7: AGgMethid < AGgMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -60544,12 +63132,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AGgMethid[82] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AGgMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: AGgMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: AGgMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___AGgMethid___empty_init},
   {(bigint) parser___parser_prod___AGgMethid___init_aggmethid},
-  {(bigint) 4 /* 79: AGgMethid < AGgMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: AGgMethid < AGgMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___AGgMethid___n_gg},
   {(bigint) parser___parser_nodes___AGgMethid___n_gg__eq},
 };
@@ -60559,25 +63148,32 @@ const classtable_elt_t VFT_parser___parser_nodes___AGgMethid[82] = {
 /* 3: Attribute AGgMethid::_location */
 /* 4: Attribute AGgMethid::_first_location */
 /* 5: Attribute AGgMethid::_last_location */
-/* 6: Attribute AGgMethid::_name */
-/* 7: Attribute AGgMethid::_n_gg */
+/* 6: Attribute AGgMethid::_n_annotations */
+/* 7: Attribute AGgMethid::_name */
+/* 8: Attribute AGgMethid::_n_gg */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AGgMethid[] = "init var of AGgMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___AGgMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AGgMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AGgMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AGgMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -60611,13 +63207,13 @@ val_t NEW_AGgMethid_parser___parser_prod___AGgMethid___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2785;
+  fra.me.line = 2961;
   fra.me.meth = LOCATE_NEW_AGgMethid_parser___parser_prod___AGgMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2785 */
+  /* parser/parser_prod.nit:2961 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AGgMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AGgMethid(fra.me.REG[0]);
   parser___parser_prod___AGgMethid___empty_init(fra.me.REG[0], init_table);
@@ -60632,7 +63228,7 @@ val_t NEW_AGgMethid_parser___parser_prod___AGgMethid___init_aggmethid(val_t p0){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2787;
+  fra.me.line = 2963;
   fra.me.meth = LOCATE_NEW_AGgMethid_parser___parser_prod___AGgMethid___init_aggmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -60640,7 +63236,7 @@ val_t NEW_AGgMethid_parser___parser_prod___AGgMethid___init_aggmethid(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:2787 */
+  /* parser/parser_prod.nit:2963 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AGgMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AGgMethid(fra.me.REG[1]);
   parser___parser_prod___AGgMethid___init_aggmethid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -60669,15 +63265,15 @@ val_t NEW_AGgMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ABraMethid[82] = {
-  {(bigint) 3995 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ABraMethid[83] = {
+  {(bigint) 4539 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ABraMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: ABraMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ABraMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ABraMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: ABraMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3995 /* 7: ABraMethid < ABraMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ABraMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: ABraMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4539 /* 7: ABraMethid < ABraMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -60744,12 +63340,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraMethid[82] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ABraMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: ABraMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: ABraMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___ABraMethid___empty_init},
   {(bigint) parser___parser_prod___ABraMethid___init_abramethid},
-  {(bigint) 4 /* 79: ABraMethid < ABraMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: ABraMethid < ABraMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABraMethid___n_obra},
   {(bigint) parser___parser_nodes___ABraMethid___n_cbra},
 };
@@ -60759,26 +63356,33 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraMethid[82] = {
 /* 3: Attribute ABraMethid::_location */
 /* 4: Attribute ABraMethid::_first_location */
 /* 5: Attribute ABraMethid::_last_location */
-/* 6: Attribute ABraMethid::_name */
-/* 7: Attribute ABraMethid::_n_obra */
-/* 8: Attribute ABraMethid::_n_cbra */
+/* 6: Attribute ABraMethid::_n_annotations */
+/* 7: Attribute ABraMethid::_name */
+/* 8: Attribute ABraMethid::_n_obra */
+/* 9: Attribute ABraMethid::_n_cbra */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ABraMethid[] = "init var of ABraMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___ABraMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ABraMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ABraMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
+  obj = alloc(sizeof(val_t) * 10);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ABraMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -60817,13 +63421,13 @@ val_t NEW_ABraMethid_parser___parser_prod___ABraMethid___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2816;
+  fra.me.line = 2992;
   fra.me.meth = LOCATE_NEW_ABraMethid_parser___parser_prod___ABraMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2816 */
+  /* parser/parser_prod.nit:2992 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ABraMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraMethid(fra.me.REG[0]);
   parser___parser_prod___ABraMethid___empty_init(fra.me.REG[0], init_table);
@@ -60838,7 +63442,7 @@ val_t NEW_ABraMethid_parser___parser_prod___ABraMethid___init_abramethid(val_t p
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2818;
+  fra.me.line = 2994;
   fra.me.meth = LOCATE_NEW_ABraMethid_parser___parser_prod___ABraMethid___init_abramethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -60848,7 +63452,7 @@ val_t NEW_ABraMethid_parser___parser_prod___ABraMethid___init_abramethid(val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2818 */
+  /* parser/parser_prod.nit:2994 */
   fra.me.REG[2] = NEW_parser___parser_nodes___ABraMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraMethid(fra.me.REG[2]);
   parser___parser_prod___ABraMethid___init_abramethid(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -60877,15 +63481,15 @@ val_t NEW_ABraMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AStarshipMethid[81] = {
-  {(bigint) 3791 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AStarshipMethid[82] = {
+  {(bigint) 4307 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AStarshipMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: AStarshipMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AStarshipMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AStarshipMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: AStarshipMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3791 /* 7: AStarshipMethid < AStarshipMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AStarshipMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: AStarshipMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4307 /* 7: AStarshipMethid < AStarshipMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -60952,12 +63556,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AStarshipMethid[81] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AStarshipMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: AStarshipMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: AStarshipMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___AStarshipMethid___empty_init},
   {(bigint) parser___parser_prod___AStarshipMethid___init_astarshipmethid},
-  {(bigint) 4 /* 79: AStarshipMethid < AStarshipMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: AStarshipMethid < AStarshipMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___AStarshipMethid___n_starship},
 };
 /* 0: Pointer to the classtable */
@@ -60966,25 +63571,32 @@ const classtable_elt_t VFT_parser___parser_nodes___AStarshipMethid[81] = {
 /* 3: Attribute AStarshipMethid::_location */
 /* 4: Attribute AStarshipMethid::_first_location */
 /* 5: Attribute AStarshipMethid::_last_location */
-/* 6: Attribute AStarshipMethid::_name */
-/* 7: Attribute AStarshipMethid::_n_starship */
+/* 6: Attribute AStarshipMethid::_n_annotations */
+/* 7: Attribute AStarshipMethid::_name */
+/* 8: Attribute AStarshipMethid::_n_starship */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AStarshipMethid[] = "init var of AStarshipMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___AStarshipMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AStarshipMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AStarshipMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AStarshipMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -61018,13 +63630,13 @@ val_t NEW_AStarshipMethid_parser___parser_prod___AStarshipMethid___empty_init(vo
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2861;
+  fra.me.line = 3037;
   fra.me.meth = LOCATE_NEW_AStarshipMethid_parser___parser_prod___AStarshipMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2861 */
+  /* parser/parser_prod.nit:3037 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AStarshipMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AStarshipMethid(fra.me.REG[0]);
   parser___parser_prod___AStarshipMethid___empty_init(fra.me.REG[0], init_table);
@@ -61039,7 +63651,7 @@ val_t NEW_AStarshipMethid_parser___parser_prod___AStarshipMethid___init_astarshi
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2863;
+  fra.me.line = 3039;
   fra.me.meth = LOCATE_NEW_AStarshipMethid_parser___parser_prod___AStarshipMethid___init_astarshipmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -61047,7 +63659,7 @@ val_t NEW_AStarshipMethid_parser___parser_prod___AStarshipMethid___init_astarshi
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:2863 */
+  /* parser/parser_prod.nit:3039 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AStarshipMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AStarshipMethid(fra.me.REG[1]);
   parser___parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -61076,15 +63688,15 @@ val_t NEW_AStarshipMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AAssignMethid[82] = {
-  {(bigint) 4019 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AAssignMethid[83] = {
+  {(bigint) 4567 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AAssignMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: AAssignMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AAssignMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AAssignMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: AAssignMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 4019 /* 7: AAssignMethid < AAssignMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AAssignMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: AAssignMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4567 /* 7: AAssignMethid < AAssignMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -61151,12 +63763,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AAssignMethid[82] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AAssignMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: AAssignMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: AAssignMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___AAssignMethid___empty_init},
   {(bigint) parser___parser_prod___AAssignMethid___init_aassignmethid},
-  {(bigint) 4 /* 79: AAssignMethid < AAssignMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: AAssignMethid < AAssignMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAssignMethid___n_id},
   {(bigint) parser___parser_nodes___AAssignMethid___n_assign},
 };
@@ -61166,26 +63779,33 @@ const classtable_elt_t VFT_parser___parser_nodes___AAssignMethid[82] = {
 /* 3: Attribute AAssignMethid::_location */
 /* 4: Attribute AAssignMethid::_first_location */
 /* 5: Attribute AAssignMethid::_last_location */
-/* 6: Attribute AAssignMethid::_name */
-/* 7: Attribute AAssignMethid::_n_id */
-/* 8: Attribute AAssignMethid::_n_assign */
+/* 6: Attribute AAssignMethid::_n_annotations */
+/* 7: Attribute AAssignMethid::_name */
+/* 8: Attribute AAssignMethid::_n_id */
+/* 9: Attribute AAssignMethid::_n_assign */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAssignMethid[] = "init var of AAssignMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___AAssignMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAssignMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AAssignMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
+  obj = alloc(sizeof(val_t) * 10);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AAssignMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -61224,13 +63844,13 @@ val_t NEW_AAssignMethid_parser___parser_prod___AAssignMethid___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2892;
+  fra.me.line = 3068;
   fra.me.meth = LOCATE_NEW_AAssignMethid_parser___parser_prod___AAssignMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2892 */
+  /* parser/parser_prod.nit:3068 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAssignMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AAssignMethid(fra.me.REG[0]);
   parser___parser_prod___AAssignMethid___empty_init(fra.me.REG[0], init_table);
@@ -61245,7 +63865,7 @@ val_t NEW_AAssignMethid_parser___parser_prod___AAssignMethid___init_aassignmethi
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2894;
+  fra.me.line = 3070;
   fra.me.meth = LOCATE_NEW_AAssignMethid_parser___parser_prod___AAssignMethid___init_aassignmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -61255,7 +63875,7 @@ val_t NEW_AAssignMethid_parser___parser_prod___AAssignMethid___init_aassignmethi
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2894 */
+  /* parser/parser_prod.nit:3070 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AAssignMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___AAssignMethid(fra.me.REG[2]);
   parser___parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -61284,15 +63904,15 @@ val_t NEW_AAssignMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ABraassignMethid[83] = {
-  {(bigint) 3991 /* 0: Identity */},
-  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ABraassignMethid[84] = {
+  {(bigint) 4535 /* 0: Identity */},
+  {(bigint) 11 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ABraassignMethid" /* 2: Class Name */},
   {(bigint) 3 /* 3: ABraassignMethid < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ABraassignMethid < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ABraassignMethid < Prod: superclass typecheck marker */},
-  {(bigint) 3271 /* 6: ABraassignMethid < AMethid: superclass typecheck marker */},
-  {(bigint) 3991 /* 7: ABraassignMethid < ABraassignMethid: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ABraassignMethid < Prod: superclass typecheck marker */},
+  {(bigint) 3771 /* 6: ABraassignMethid < AMethid: superclass typecheck marker */},
+  {(bigint) 4535 /* 7: ABraassignMethid < ABraassignMethid: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -61359,12 +63979,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraassignMethid[83] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ABraassignMethid < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
   {(bigint) syntax___mmbuilder___AMethid___name},
-  {(bigint) 0 /* 76: ABraassignMethid < AMethid: superclass init_table position */},
+  {(bigint) 0 /* 77: ABraassignMethid < AMethid: superclass init_table position */},
   {(bigint) parser___parser_prod___ABraassignMethid___empty_init},
   {(bigint) parser___parser_prod___ABraassignMethid___init_abraassignmethid},
-  {(bigint) 4 /* 79: ABraassignMethid < ABraassignMethid: superclass init_table position */},
+  {(bigint) 4 /* 80: ABraassignMethid < ABraassignMethid: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABraassignMethid___n_obra},
   {(bigint) parser___parser_nodes___ABraassignMethid___n_cbra},
   {(bigint) parser___parser_nodes___ABraassignMethid___n_assign},
@@ -61375,27 +63996,34 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraassignMethid[83] = {
 /* 3: Attribute ABraassignMethid::_location */
 /* 4: Attribute ABraassignMethid::_first_location */
 /* 5: Attribute ABraassignMethid::_last_location */
-/* 6: Attribute ABraassignMethid::_name */
-/* 7: Attribute ABraassignMethid::_n_obra */
-/* 8: Attribute ABraassignMethid::_n_cbra */
-/* 9: Attribute ABraassignMethid::_n_assign */
+/* 6: Attribute ABraassignMethid::_n_annotations */
+/* 7: Attribute ABraassignMethid::_name */
+/* 8: Attribute ABraassignMethid::_n_obra */
+/* 9: Attribute ABraassignMethid::_n_cbra */
+/* 10: Attribute ABraassignMethid::_n_assign */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ABraassignMethid[] = "init var of ABraassignMethid";
 void INIT_ATTRIBUTES__parser___parser_nodes___ABraassignMethid(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ABraassignMethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ABraassignMethid(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 10);
+  obj = alloc(sizeof(val_t) * 11);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ABraassignMethid;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -61439,13 +64067,13 @@ val_t NEW_ABraassignMethid_parser___parser_prod___ABraassignMethid___empty_init(
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2937;
+  fra.me.line = 3113;
   fra.me.meth = LOCATE_NEW_ABraassignMethid_parser___parser_prod___ABraassignMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2937 */
+  /* parser/parser_prod.nit:3113 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ABraassignMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraassignMethid(fra.me.REG[0]);
   parser___parser_prod___ABraassignMethid___empty_init(fra.me.REG[0], init_table);
@@ -61460,7 +64088,7 @@ val_t NEW_ABraassignMethid_parser___parser_prod___ABraassignMethid___init_abraas
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2939;
+  fra.me.line = 3115;
   fra.me.meth = LOCATE_NEW_ABraassignMethid_parser___parser_prod___ABraassignMethid___init_abraassignmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -61472,7 +64100,7 @@ val_t NEW_ABraassignMethid_parser___parser_prod___ABraassignMethid___init_abraas
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2939 */
+  /* parser/parser_prod.nit:3115 */
   fra.me.REG[3] = NEW_parser___parser_nodes___ABraassignMethid();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraassignMethid(fra.me.REG[3]);
   parser___parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -61501,14 +64129,14 @@ val_t NEW_ABraassignMethid_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ASignature[85] = {
-  {(bigint) 3243 /* 0: Identity */},
-  {(bigint) 11 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ASignature[86] = {
+  {(bigint) 3743 /* 0: Identity */},
+  {(bigint) 12 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ASignature" /* 2: Class Name */},
   {(bigint) 3 /* 3: ASignature < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ASignature < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ASignature < Prod: superclass typecheck marker */},
-  {(bigint) 3243 /* 6: ASignature < ASignature: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ASignature < Prod: superclass typecheck marker */},
+  {(bigint) 3743 /* 6: ASignature < ASignature: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -61576,11 +64204,12 @@ const classtable_elt_t VFT_parser___parser_nodes___ASignature[85] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 0 /* 72: ASignature < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
   {(bigint) syntax___mmbuilder___ASignature___check_visibility},
   {(bigint) parser___parser_prod___ASignature___empty_init},
   {(bigint) parser___parser_prod___ASignature___init_asignature},
-  {(bigint) 3 /* 78: ASignature < ASignature: superclass init_table position */},
+  {(bigint) 3 /* 79: ASignature < ASignature: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASignature___n_opar},
   {(bigint) parser___parser_nodes___ASignature___n_params},
   {(bigint) parser___parser_nodes___ASignature___n_cpar},
@@ -61594,11 +64223,12 @@ const classtable_elt_t VFT_parser___parser_nodes___ASignature[85] = {
 /* 3: Attribute ASignature::_location */
 /* 4: Attribute ASignature::_first_location */
 /* 5: Attribute ASignature::_last_location */
-/* 6: Attribute ASignature::_n_opar */
-/* 7: Attribute ASignature::_n_params */
-/* 8: Attribute ASignature::_n_cpar */
-/* 9: Attribute ASignature::_n_type */
-/* 10: Attribute ASignature::_n_closure_decls */
+/* 6: Attribute ASignature::_n_annotations */
+/* 7: Attribute ASignature::_n_opar */
+/* 8: Attribute ASignature::_n_params */
+/* 9: Attribute ASignature::_n_cpar */
+/* 10: Attribute ASignature::_n_type */
+/* 11: Attribute ASignature::_n_closure_decls */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ASignature[] = "init var of ASignature";
 void INIT_ATTRIBUTES__parser___parser_nodes___ASignature(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -61613,19 +64243,22 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ASignature(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:715 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:721 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:716 */
+  /* parser/parser_nodes.nit:722 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:717 */
+  /* parser/parser_nodes.nit:723 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:718 */
+  /* parser/parser_nodes.nit:724 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:719 */
+  /* parser/parser_nodes.nit:725 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -61633,7 +64266,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ASignature(val_t p0){
 val_t NEW_parser___parser_nodes___ASignature(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 11);
+  obj = alloc(sizeof(val_t) * 12);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ASignature;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -61672,13 +64305,13 @@ val_t NEW_ASignature_parser___parser_prod___ASignature___empty_init(void){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2996;
+  fra.me.line = 3172;
   fra.me.meth = LOCATE_NEW_ASignature_parser___parser_prod___ASignature___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:2996 */
+  /* parser/parser_prod.nit:3172 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ASignature();
   INIT_ATTRIBUTES__parser___parser_nodes___ASignature(fra.me.REG[0]);
   parser___parser_prod___ASignature___empty_init(fra.me.REG[0], init_table);
@@ -61693,7 +64326,7 @@ val_t NEW_ASignature_parser___parser_prod___ASignature___init_asignature(val_t p
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 2998;
+  fra.me.line = 3174;
   fra.me.meth = LOCATE_NEW_ASignature_parser___parser_prod___ASignature___init_asignature;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -61709,7 +64342,7 @@ val_t NEW_ASignature_parser___parser_prod___ASignature___init_asignature(val_t p
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:2998 */
+  /* parser/parser_prod.nit:3174 */
   fra.me.REG[5] = NEW_parser___parser_nodes___ASignature();
   INIT_ATTRIBUTES__parser___parser_nodes___ASignature(fra.me.REG[5]);
   parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
@@ -61738,14 +64371,14 @@ val_t NEW_ASignature_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AParam[86] = {
-  {(bigint) 3255 /* 0: Identity */},
-  {(bigint) 12 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AParam[87] = {
+  {(bigint) 3755 /* 0: Identity */},
+  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AParam" /* 2: Class Name */},
   {(bigint) 3 /* 3: AParam < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AParam < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AParam < Prod: superclass typecheck marker */},
-  {(bigint) 3255 /* 6: AParam < AParam: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AParam < Prod: superclass typecheck marker */},
+  {(bigint) 3755 /* 6: AParam < AParam: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -61813,6 +64446,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AParam[86] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 0 /* 72: AParam < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___AParam___stype},
   {(bigint) syntax___mmbuilder___AParam___stype__eq},
   {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
@@ -61821,7 +64455,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AParam[86] = {
   {(bigint) syntax___mmbuilder___AParam___variable},
   {(bigint) parser___parser_prod___AParam___empty_init},
   {(bigint) parser___parser_prod___AParam___init_aparam},
-  {(bigint) 3 /* 82: AParam < AParam: superclass init_table position */},
+  {(bigint) 3 /* 83: AParam < AParam: superclass init_table position */},
   {(bigint) parser___parser_nodes___AParam___n_id},
   {(bigint) parser___parser_nodes___AParam___n_type},
   {(bigint) parser___parser_nodes___AParam___n_dotdotdot},
@@ -61832,12 +64466,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AParam[86] = {
 /* 3: Attribute AParam::_location */
 /* 4: Attribute AParam::_first_location */
 /* 5: Attribute AParam::_last_location */
-/* 6: Attribute AParam::_position */
-/* 7: Attribute AParam::_variable */
-/* 8: Attribute AParam::_stype */
-/* 9: Attribute AParam::_n_id */
-/* 10: Attribute AParam::_n_type */
-/* 11: Attribute AParam::_n_dotdotdot */
+/* 6: Attribute AParam::_n_annotations */
+/* 7: Attribute AParam::_position */
+/* 8: Attribute AParam::_variable */
+/* 9: Attribute AParam::_stype */
+/* 10: Attribute AParam::_n_id */
+/* 11: Attribute AParam::_n_type */
+/* 12: Attribute AParam::_n_dotdotdot */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AParam[] = "init var of AParam";
 void INIT_ATTRIBUTES__parser___parser_nodes___AParam(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -61853,21 +64488,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AParam(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/mmbuilder.nit:1323 */
-  REGB0 = TAG_Int(0);
-  ATTR_syntax___mmbuilder___AParam____position(fra.me.REG[0]) = REGB0;
-  /* parser/parser_nodes.nit:724 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:730 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:725 */
+  /* parser/parser_nodes.nit:731 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/mmbuilder.nit:1323 */
+  REGB0 = TAG_Int(0);
+  ATTR_syntax___mmbuilder___AParam____position(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AParam(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 12);
+  obj = alloc(sizeof(val_t) * 13);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AParam;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -61887,15 +64525,15 @@ void CHECKNEW_parser___parser_nodes___AParam(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___mmbuilder___AParam____position(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_position", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___mmbuilder___AParam____position(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_position", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -61906,13 +64544,13 @@ val_t NEW_AParam_parser___parser_prod___AParam___empty_init(void){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3109;
+  fra.me.line = 3285;
   fra.me.meth = LOCATE_NEW_AParam_parser___parser_prod___AParam___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:3109 */
+  /* parser/parser_prod.nit:3285 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AParam();
   INIT_ATTRIBUTES__parser___parser_nodes___AParam(fra.me.REG[0]);
   parser___parser_prod___AParam___empty_init(fra.me.REG[0], init_table);
@@ -61921,31 +64559,33 @@ val_t NEW_AParam_parser___parser_prod___AParam___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AParam_parser___parser_prod___AParam___init_aparam[] = "new AParam parser_prod::AParam::init_aparam";
-val_t NEW_AParam_parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+val_t NEW_AParam_parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, val_t p3){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t tmp;
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3111;
+  fra.me.line = 3287;
   fra.me.meth = LOCATE_NEW_AParam_parser___parser_prod___AParam___init_aparam;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3111 */
-  fra.me.REG[3] = NEW_parser___parser_nodes___AParam();
-  INIT_ATTRIBUTES__parser___parser_nodes___AParam(fra.me.REG[3]);
-  parser___parser_prod___AParam___init_aparam(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
-  CHECKNEW_parser___parser_nodes___AParam(fra.me.REG[3]);
+  fra.me.REG[3] = p3;
+  /* parser/parser_prod.nit:3287 */
+  fra.me.REG[4] = NEW_parser___parser_nodes___AParam();
+  INIT_ATTRIBUTES__parser___parser_nodes___AParam(fra.me.REG[4]);
+  parser___parser_prod___AParam___init_aparam(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
+  CHECKNEW_parser___parser_nodes___AParam(fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[3];
+  return fra.me.REG[4];
 }
 static const char LOCATE_NEW_AParam_parser___parser_nodes___ANode___init[] = "new AParam parser_nodes::ANode::init";
 val_t NEW_AParam_parser___parser_nodes___ANode___init(void){
@@ -61968,14 +64608,14 @@ val_t NEW_AParam_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AClosureDecl[87] = {
-  {(bigint) 3323 /* 0: Identity */},
-  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AClosureDecl[88] = {
+  {(bigint) 3823 /* 0: Identity */},
+  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AClosureDecl" /* 2: Class Name */},
   {(bigint) 3 /* 3: AClosureDecl < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AClosureDecl < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AClosureDecl < Prod: superclass typecheck marker */},
-  {(bigint) 3323 /* 6: AClosureDecl < AClosureDecl: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AClosureDecl < Prod: superclass typecheck marker */},
+  {(bigint) 3823 /* 6: AClosureDecl < AClosureDecl: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -62043,12 +64683,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AClosureDecl[87] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 0 /* 72: AClosureDecl < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
   {(bigint) syntax___mmbuilder___AClosureDecl___position},
   {(bigint) syntax___mmbuilder___AClosureDecl___variable},
   {(bigint) parser___parser_prod___AClosureDecl___empty_init},
   {(bigint) parser___parser_prod___AClosureDecl___init_aclosuredecl},
-  {(bigint) 3 /* 79: AClosureDecl < AClosureDecl: superclass init_table position */},
+  {(bigint) 3 /* 80: AClosureDecl < AClosureDecl: superclass init_table position */},
   {(bigint) parser___parser_nodes___AClosureDecl___n_kwbreak},
   {(bigint) parser___parser_nodes___AClosureDecl___n_bang},
   {(bigint) parser___parser_nodes___AClosureDecl___n_id},
@@ -62063,14 +64704,15 @@ const classtable_elt_t VFT_parser___parser_nodes___AClosureDecl[87] = {
 /* 3: Attribute AClosureDecl::_location */
 /* 4: Attribute AClosureDecl::_first_location */
 /* 5: Attribute AClosureDecl::_last_location */
-/* 6: Attribute AClosureDecl::_position */
-/* 7: Attribute AClosureDecl::_variable */
-/* 8: Attribute AClosureDecl::_n_kwbreak */
-/* 9: Attribute AClosureDecl::_n_bang */
-/* 10: Attribute AClosureDecl::_n_id */
-/* 11: Attribute AClosureDecl::_n_signature */
-/* 12: Attribute AClosureDecl::_n_expr */
-/* 13: Attribute AClosureDecl::_escapable */
+/* 6: Attribute AClosureDecl::_n_annotations */
+/* 7: Attribute AClosureDecl::_position */
+/* 8: Attribute AClosureDecl::_variable */
+/* 9: Attribute AClosureDecl::_n_kwbreak */
+/* 10: Attribute AClosureDecl::_n_bang */
+/* 11: Attribute AClosureDecl::_n_id */
+/* 12: Attribute AClosureDecl::_n_signature */
+/* 13: Attribute AClosureDecl::_n_expr */
+/* 14: Attribute AClosureDecl::_escapable */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AClosureDecl[] = "init var of AClosureDecl";
 void INIT_ATTRIBUTES__parser___parser_nodes___AClosureDecl(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -62086,21 +64728,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AClosureDecl(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/mmbuilder.nit:1364 */
-  REGB0 = TAG_Int(0);
-  ATTR_syntax___mmbuilder___AClosureDecl____position(fra.me.REG[0]) = REGB0;
-  /* parser/parser_nodes.nit:729 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:735 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:733 */
+  /* parser/parser_nodes.nit:739 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/mmbuilder.nit:1364 */
+  REGB0 = TAG_Int(0);
+  ATTR_syntax___mmbuilder___AClosureDecl____position(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AClosureDecl(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 14);
+  obj = alloc(sizeof(val_t) * 15);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AClosureDecl;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -62120,11 +64765,6 @@ void CHECKNEW_parser___parser_nodes___AClosureDecl(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___mmbuilder___AClosureDecl____position(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_position", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -62140,6 +64780,11 @@ void CHECKNEW_parser___parser_nodes___AClosureDecl(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_syntax___mmbuilder___AClosureDecl____position(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_position", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_AClosureDecl_parser___parser_prod___AClosureDecl___empty_init[] = "new AClosureDecl parser_prod::AClosureDecl::empty_init";
@@ -62149,13 +64794,13 @@ val_t NEW_AClosureDecl_parser___parser_prod___AClosureDecl___empty_init(void){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3176;
+  fra.me.line = 3370;
   fra.me.meth = LOCATE_NEW_AClosureDecl_parser___parser_prod___AClosureDecl___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:3176 */
+  /* parser/parser_prod.nit:3370 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AClosureDecl();
   INIT_ATTRIBUTES__parser___parser_nodes___AClosureDecl(fra.me.REG[0]);
   parser___parser_prod___AClosureDecl___empty_init(fra.me.REG[0], init_table);
@@ -62170,7 +64815,7 @@ val_t NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(v
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3178;
+  fra.me.line = 3372;
   fra.me.meth = LOCATE_NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -62186,7 +64831,7 @@ val_t NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(v
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:3178 */
+  /* parser/parser_prod.nit:3372 */
   fra.me.REG[5] = NEW_parser___parser_nodes___AClosureDecl();
   INIT_ATTRIBUTES__parser___parser_nodes___AClosureDecl(fra.me.REG[5]);
   parser___parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
@@ -62215,14 +64860,14 @@ val_t NEW_AClosureDecl_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AType[87] = {
-  {(bigint) 3235 /* 0: Identity */},
-  {(bigint) 12 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AType[88] = {
+  {(bigint) 3735 /* 0: Identity */},
+  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AType" /* 2: Class Name */},
   {(bigint) 3 /* 3: AType < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AType < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AType < Prod: superclass typecheck marker */},
-  {(bigint) 3235 /* 6: AType < AType: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AType < Prod: superclass typecheck marker */},
+  {(bigint) 3735 /* 6: AType < AType: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -62290,6 +64935,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AType[87] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 0 /* 72: AType < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___mmbuilder___AType___check_visibility},
   {(bigint) syntax___typing___AType___is_typed},
   {(bigint) syntax___typing___AType___stype},
@@ -62299,7 +64945,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AType[87] = {
   {(bigint) syntax___syntax_base___AType___check_conform},
   {(bigint) parser___parser_prod___AType___empty_init},
   {(bigint) parser___parser_prod___AType___init_atype},
-  {(bigint) 3 /* 83: AType < AType: superclass init_table position */},
+  {(bigint) 3 /* 84: AType < AType: superclass init_table position */},
   {(bigint) parser___parser_nodes___AType___n_kwnullable},
   {(bigint) parser___parser_nodes___AType___n_id},
   {(bigint) parser___parser_nodes___AType___n_types},
@@ -62310,12 +64956,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AType[87] = {
 /* 3: Attribute AType::_location */
 /* 4: Attribute AType::_first_location */
 /* 5: Attribute AType::_last_location */
-/* 6: Attribute AType::_stype_cache */
-/* 7: Attribute AType::_stype_cached */
-/* 8: Attribute AType::_n_kwnullable */
-/* 9: Attribute AType::_n_id */
-/* 10: Attribute AType::_n_types */
-/* 11: Attribute AType::_stype */
+/* 6: Attribute AType::_n_annotations */
+/* 7: Attribute AType::_stype_cache */
+/* 8: Attribute AType::_stype_cached */
+/* 9: Attribute AType::_n_kwnullable */
+/* 10: Attribute AType::_n_id */
+/* 11: Attribute AType::_n_types */
+/* 12: Attribute AType::_stype */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AType[] = "init var of AType";
 void INIT_ATTRIBUTES__parser___parser_nodes___AType(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -62331,24 +64978,27 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AType(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:743 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:745 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/syntax_base.nit:593 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___syntax_base___AType____stype_cache(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/syntax_base.nit:594 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___syntax_base___AType____stype_cached(fra.me.REG[0]) = REGB0;
-  /* parser/parser_nodes.nit:737 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:739 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AType(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 12);
+  obj = alloc(sizeof(val_t) * 13);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AType;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -62368,11 +65018,6 @@ void CHECKNEW_parser___parser_nodes___AType(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___AType____stype_cached(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_stype_cached", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -62383,6 +65028,11 @@ void CHECKNEW_parser___parser_nodes___AType(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___AType____stype_cached(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_stype_cached", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_AType_parser___parser_prod___AType___empty_init[] = "new AType parser_prod::AType::empty_init";
@@ -62392,13 +65042,13 @@ val_t NEW_AType_parser___parser_prod___AType___empty_init(void){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3271;
+  fra.me.line = 3465;
   fra.me.meth = LOCATE_NEW_AType_parser___parser_prod___AType___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:3271 */
+  /* parser/parser_prod.nit:3465 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AType();
   INIT_ATTRIBUTES__parser___parser_nodes___AType(fra.me.REG[0]);
   parser___parser_prod___AType___empty_init(fra.me.REG[0], init_table);
@@ -62407,31 +65057,33 @@ val_t NEW_AType_parser___parser_prod___AType___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AType_parser___parser_prod___AType___init_atype[] = "new AType parser_prod::AType::init_atype";
-val_t NEW_AType_parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+val_t NEW_AType_parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t tmp;
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3273;
+  fra.me.line = 3467;
   fra.me.meth = LOCATE_NEW_AType_parser___parser_prod___AType___init_atype;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3273 */
-  fra.me.REG[3] = NEW_parser___parser_nodes___AType();
-  INIT_ATTRIBUTES__parser___parser_nodes___AType(fra.me.REG[3]);
-  parser___parser_prod___AType___init_atype(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
-  CHECKNEW_parser___parser_nodes___AType(fra.me.REG[3]);
+  fra.me.REG[3] = p3;
+  /* parser/parser_prod.nit:3467 */
+  fra.me.REG[4] = NEW_parser___parser_nodes___AType();
+  INIT_ATTRIBUTES__parser___parser_nodes___AType(fra.me.REG[4]);
+  parser___parser_prod___AType___init_atype(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
+  CHECKNEW_parser___parser_nodes___AType(fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[3];
+  return fra.me.REG[4];
 }
 static const char LOCATE_NEW_AType_parser___parser_nodes___ANode___init[] = "new AType parser_nodes::ANode::init";
 val_t NEW_AType_parser___parser_nodes___ANode___init(void){
@@ -62454,14 +65106,14 @@ val_t NEW_AType_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ALabel[79] = {
-  {(bigint) 3279 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ALabel[80] = {
+  {(bigint) 3779 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ALabel" /* 2: Class Name */},
   {(bigint) 3 /* 3: ALabel < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ALabel < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ALabel < Prod: superclass typecheck marker */},
-  {(bigint) 3279 /* 6: ALabel < ALabel: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ALabel < Prod: superclass typecheck marker */},
+  {(bigint) 3779 /* 6: ALabel < ALabel: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -62529,9 +65181,10 @@ const classtable_elt_t VFT_parser___parser_nodes___ALabel[79] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 0 /* 72: ALabel < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) parser___parser_prod___ALabel___empty_init},
   {(bigint) parser___parser_prod___ALabel___init_alabel},
-  {(bigint) 3 /* 76: ALabel < ALabel: superclass init_table position */},
+  {(bigint) 3 /* 77: ALabel < ALabel: superclass init_table position */},
   {(bigint) parser___parser_nodes___ALabel___n_kwlabel},
   {(bigint) parser___parser_nodes___ALabel___n_id},
 };
@@ -62541,25 +65194,32 @@ const classtable_elt_t VFT_parser___parser_nodes___ALabel[79] = {
 /* 3: Attribute ALabel::_location */
 /* 4: Attribute ALabel::_first_location */
 /* 5: Attribute ALabel::_last_location */
-/* 6: Attribute ALabel::_n_kwlabel */
-/* 7: Attribute ALabel::_n_id */
+/* 6: Attribute ALabel::_n_annotations */
+/* 7: Attribute ALabel::_n_kwlabel */
+/* 8: Attribute ALabel::_n_id */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ALabel[] = "init var of ALabel";
 void INIT_ATTRIBUTES__parser___parser_nodes___ALabel(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ALabel;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ALabel(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ALabel;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -62598,13 +65258,13 @@ val_t NEW_ALabel_parser___parser_prod___ALabel___empty_init(void){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3341;
+  fra.me.line = 3553;
   fra.me.meth = LOCATE_NEW_ALabel_parser___parser_prod___ALabel___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:3341 */
+  /* parser/parser_prod.nit:3553 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALabel();
   INIT_ATTRIBUTES__parser___parser_nodes___ALabel(fra.me.REG[0]);
   parser___parser_prod___ALabel___empty_init(fra.me.REG[0], init_table);
@@ -62619,7 +65279,7 @@ val_t NEW_ALabel_parser___parser_prod___ALabel___init_alabel(val_t p0, val_t p1)
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3343;
+  fra.me.line = 3555;
   fra.me.meth = LOCATE_NEW_ALabel_parser___parser_prod___ALabel___init_alabel;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -62629,7 +65289,7 @@ val_t NEW_ALabel_parser___parser_prod___ALabel___init_alabel(val_t p0, val_t p1)
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3343 */
+  /* parser/parser_prod.nit:3555 */
   fra.me.REG[2] = NEW_parser___parser_nodes___ALabel();
   INIT_ATTRIBUTES__parser___parser_nodes___ALabel(fra.me.REG[2]);
   parser___parser_prod___ALabel___init_alabel(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -62658,16 +65318,16 @@ val_t NEW_ALabel_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ABlockExpr[93] = {
-  {(bigint) 4007 /* 0: Identity */},
-  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ABlockExpr[94] = {
+  {(bigint) 4551 /* 0: Identity */},
+  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ABlockExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ABlockExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ABlockExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ABlockExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ABlockExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: ABlockExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4007 /* 8: ABlockExpr < ABlockExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ABlockExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4551 /* 8: ABlockExpr < ABlockExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -62733,13 +65393,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ABlockExpr[93] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ABlockExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: ABlockExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: ABlockExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ABlockExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -62749,7 +65410,7 @@ const classtable_elt_t VFT_parser___parser_nodes___ABlockExpr[93] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___ABlockExpr___empty_init},
   {(bigint) parser___parser_prod___ABlockExpr___init_ablockexpr},
-  {(bigint) 4 /* 90: ABlockExpr < ABlockExpr: superclass init_table position */},
+  {(bigint) 4 /* 91: ABlockExpr < ABlockExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABlockExpr___n_expr},
   {(bigint) parser___parser_nodes___ABlockExpr___n_kwend},
 };
@@ -62759,13 +65420,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ABlockExpr[93] = {
 /* 3: Attribute ABlockExpr::_location */
 /* 4: Attribute ABlockExpr::_first_location */
 /* 5: Attribute ABlockExpr::_last_location */
+/* 6: Attribute ABlockExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ABlockExpr::_is_typed */
-/* 8: Attribute ABlockExpr::_stype */
-/* 9: Attribute ABlockExpr::_if_true_flow_ctx */
-/* 10: Attribute ABlockExpr::_if_false_flow_ctx */
-/* 11: Attribute ABlockExpr::_n_expr */
-/* 12: Attribute ABlockExpr::_n_kwend */
+/* 8: Attribute ABlockExpr::_is_typed */
+/* 9: Attribute ABlockExpr::_stype */
+/* 10: Attribute ABlockExpr::_if_true_flow_ctx */
+/* 11: Attribute ABlockExpr::_if_false_flow_ctx */
+/* 12: Attribute ABlockExpr::_n_expr */
+/* 13: Attribute ABlockExpr::_n_kwend */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ABlockExpr[] = "init var of ABlockExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ABlockExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -62781,13 +65443,16 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ABlockExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* parser/parser_nodes.nit:749 */
+  /* parser/parser_nodes.nit:755 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:750 */
+  /* parser/parser_nodes.nit:756 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -62795,7 +65460,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ABlockExpr(val_t p0){
 val_t NEW_parser___parser_nodes___ABlockExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 13);
+  obj = alloc(sizeof(val_t) * 14);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ABlockExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -62834,13 +65499,13 @@ val_t NEW_ABlockExpr_parser___parser_prod___ABlockExpr___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3386;
+  fra.me.line = 3598;
   fra.me.meth = LOCATE_NEW_ABlockExpr_parser___parser_prod___ABlockExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:3386 */
+  /* parser/parser_prod.nit:3598 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ABlockExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ABlockExpr(fra.me.REG[0]);
   parser___parser_prod___ABlockExpr___empty_init(fra.me.REG[0], init_table);
@@ -62855,7 +65520,7 @@ val_t NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(val_t p
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3388;
+  fra.me.line = 3600;
   fra.me.meth = LOCATE_NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -62865,7 +65530,7 @@ val_t NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3388 */
+  /* parser/parser_prod.nit:3600 */
   fra.me.REG[2] = NEW_parser___parser_nodes___ABlockExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ABlockExpr(fra.me.REG[2]);
   parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -62894,16 +65559,16 @@ val_t NEW_ABlockExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AVardeclExpr[97] = {
-  {(bigint) 3751 /* 0: Identity */},
-  {(bigint) 17 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AVardeclExpr[98] = {
+  {(bigint) 4263 /* 0: Identity */},
+  {(bigint) 18 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AVardeclExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AVardeclExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AVardeclExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AVardeclExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AVardeclExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AVardeclExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3751 /* 8: AVardeclExpr < AVardeclExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AVardeclExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4263 /* 8: AVardeclExpr < AVardeclExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -62969,13 +65634,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AVardeclExpr[97] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AVardeclExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: AVardeclExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: AVardeclExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AVardeclExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -62986,7 +65652,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AVardeclExpr[97] = {
   {(bigint) syntax___typing___AVardeclExpr___variable},
   {(bigint) parser___parser_prod___AVardeclExpr___empty_init},
   {(bigint) parser___parser_prod___AVardeclExpr___init_avardeclexpr},
-  {(bigint) 4 /* 91: AVardeclExpr < AVardeclExpr: superclass init_table position */},
+  {(bigint) 4 /* 92: AVardeclExpr < AVardeclExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AVardeclExpr___n_kwvar},
   {(bigint) parser___parser_nodes___AVardeclExpr___n_id},
   {(bigint) parser___parser_nodes___AVardeclExpr___n_type},
@@ -62999,17 +65665,18 @@ const classtable_elt_t VFT_parser___parser_nodes___AVardeclExpr[97] = {
 /* 3: Attribute AVardeclExpr::_location */
 /* 4: Attribute AVardeclExpr::_first_location */
 /* 5: Attribute AVardeclExpr::_last_location */
+/* 6: Attribute AVardeclExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AVardeclExpr::_is_typed */
-/* 8: Attribute AVardeclExpr::_stype */
-/* 9: Attribute AVardeclExpr::_if_true_flow_ctx */
-/* 10: Attribute AVardeclExpr::_if_false_flow_ctx */
-/* 11: Attribute AVardeclExpr::_variable */
-/* 12: Attribute AVardeclExpr::_n_kwvar */
-/* 13: Attribute AVardeclExpr::_n_id */
-/* 14: Attribute AVardeclExpr::_n_type */
-/* 15: Attribute AVardeclExpr::_n_assign */
-/* 16: Attribute AVardeclExpr::_n_expr */
+/* 8: Attribute AVardeclExpr::_is_typed */
+/* 9: Attribute AVardeclExpr::_stype */
+/* 10: Attribute AVardeclExpr::_if_true_flow_ctx */
+/* 11: Attribute AVardeclExpr::_if_false_flow_ctx */
+/* 12: Attribute AVardeclExpr::_variable */
+/* 13: Attribute AVardeclExpr::_n_kwvar */
+/* 14: Attribute AVardeclExpr::_n_id */
+/* 15: Attribute AVardeclExpr::_n_type */
+/* 16: Attribute AVardeclExpr::_n_assign */
+/* 17: Attribute AVardeclExpr::_n_expr */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AVardeclExpr[] = "init var of AVardeclExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AVardeclExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -63025,16 +65692,19 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AVardeclExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* parser/parser_nodes.nit:756 */
+  /* parser/parser_nodes.nit:762 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:757 */
+  /* parser/parser_nodes.nit:763 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:758 */
+  /* parser/parser_nodes.nit:764 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -63042,7 +65712,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AVardeclExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AVardeclExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 17);
+  obj = alloc(sizeof(val_t) * 18);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AVardeclExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -63086,13 +65756,13 @@ val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3442;
+  fra.me.line = 3654;
   fra.me.meth = LOCATE_NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:3442 */
+  /* parser/parser_prod.nit:3654 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AVardeclExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AVardeclExpr(fra.me.REG[0]);
   parser___parser_prod___AVardeclExpr___empty_init(fra.me.REG[0], init_table);
@@ -63101,16 +65771,16 @@ val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr[] = "new AVardeclExpr parser_prod::AVardeclExpr::init_avardeclexpr";
-val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3444;
+  fra.me.line = 3656;
   fra.me.meth = LOCATE_NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -63118,18 +65788,20 @@ val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(v
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:3444 */
-  fra.me.REG[5] = NEW_parser___parser_nodes___AVardeclExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___AVardeclExpr(fra.me.REG[5]);
-  parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
-  CHECKNEW_parser___parser_nodes___AVardeclExpr(fra.me.REG[5]);
+  fra.me.REG[5] = p5;
+  /* parser/parser_prod.nit:3656 */
+  fra.me.REG[6] = NEW_parser___parser_nodes___AVardeclExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___AVardeclExpr(fra.me.REG[6]);
+  parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[6], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], init_table);
+  CHECKNEW_parser___parser_nodes___AVardeclExpr(fra.me.REG[6]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[5];
+  return fra.me.REG[6];
 }
 static const char LOCATE_NEW_AVardeclExpr_parser___parser_nodes___ANode___init[] = "new AVardeclExpr parser_nodes::ANode::init";
 val_t NEW_AVardeclExpr_parser___parser_nodes___ANode___init(void){
@@ -63152,16 +65824,16 @@ val_t NEW_AVardeclExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AReturnExpr[93] = {
-  {(bigint) 3811 /* 0: Identity */},
-  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AReturnExpr[94] = {
+  {(bigint) 4327 /* 0: Identity */},
+  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AReturnExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AReturnExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AReturnExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AReturnExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AReturnExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AReturnExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3811 /* 8: AReturnExpr < AReturnExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AReturnExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4327 /* 8: AReturnExpr < AReturnExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -63227,13 +65899,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AReturnExpr[93] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AReturnExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: AReturnExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: AReturnExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AReturnExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -63243,7 +65916,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AReturnExpr[93] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___AReturnExpr___empty_init},
   {(bigint) parser___parser_prod___AReturnExpr___init_areturnexpr},
-  {(bigint) 4 /* 90: AReturnExpr < AReturnExpr: superclass init_table position */},
+  {(bigint) 4 /* 91: AReturnExpr < AReturnExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AReturnExpr___n_kwreturn},
   {(bigint) parser___parser_nodes___AReturnExpr___n_expr},
 };
@@ -63253,13 +65926,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AReturnExpr[93] = {
 /* 3: Attribute AReturnExpr::_location */
 /* 4: Attribute AReturnExpr::_first_location */
 /* 5: Attribute AReturnExpr::_last_location */
+/* 6: Attribute AReturnExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AReturnExpr::_is_typed */
-/* 8: Attribute AReturnExpr::_stype */
-/* 9: Attribute AReturnExpr::_if_true_flow_ctx */
-/* 10: Attribute AReturnExpr::_if_false_flow_ctx */
-/* 11: Attribute AReturnExpr::_n_kwreturn */
-/* 12: Attribute AReturnExpr::_n_expr */
+/* 8: Attribute AReturnExpr::_is_typed */
+/* 9: Attribute AReturnExpr::_stype */
+/* 10: Attribute AReturnExpr::_if_true_flow_ctx */
+/* 11: Attribute AReturnExpr::_if_false_flow_ctx */
+/* 12: Attribute AReturnExpr::_n_kwreturn */
+/* 13: Attribute AReturnExpr::_n_expr */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AReturnExpr[] = "init var of AReturnExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AReturnExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -63275,13 +65949,16 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AReturnExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* parser/parser_nodes.nit:762 */
+  /* parser/parser_nodes.nit:768 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:763 */
+  /* parser/parser_nodes.nit:769 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -63289,7 +65966,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AReturnExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AReturnExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 13);
+  obj = alloc(sizeof(val_t) * 14);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AReturnExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -63323,13 +66000,13 @@ val_t NEW_AReturnExpr_parser___parser_prod___AReturnExpr___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3541;
+  fra.me.line = 3771;
   fra.me.meth = LOCATE_NEW_AReturnExpr_parser___parser_prod___AReturnExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:3541 */
+  /* parser/parser_prod.nit:3771 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AReturnExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AReturnExpr(fra.me.REG[0]);
   parser___parser_prod___AReturnExpr___empty_init(fra.me.REG[0], init_table);
@@ -63344,7 +66021,7 @@ val_t NEW_AReturnExpr_parser___parser_prod___AReturnExpr___init_areturnexpr(val_
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3543;
+  fra.me.line = 3773;
   fra.me.meth = LOCATE_NEW_AReturnExpr_parser___parser_prod___AReturnExpr___init_areturnexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -63354,7 +66031,7 @@ val_t NEW_AReturnExpr_parser___parser_prod___AReturnExpr___init_areturnexpr(val_
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3543 */
+  /* parser/parser_prod.nit:3773 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AReturnExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AReturnExpr(fra.me.REG[2]);
   parser___parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -63383,17 +66060,17 @@ val_t NEW_AReturnExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ABreakExpr[97] = {
-  {(bigint) 4231 /* 0: Identity */},
-  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ABreakExpr[98] = {
+  {(bigint) 4787 /* 0: Identity */},
+  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ABreakExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ABreakExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ABreakExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ABreakExpr < Prod: superclass typecheck marker */},
-  {(bigint) 3275 /* 6: ABreakExpr < ALabelable: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: ABreakExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3951 /* 8: ABreakExpr < AEscapeExpr: superclass typecheck marker */},
-  {(bigint) 4231 /* 9: ABreakExpr < ABreakExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ABreakExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3775 /* 6: ABreakExpr < ALabelable: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ABreakExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4495 /* 8: ABreakExpr < AEscapeExpr: superclass typecheck marker */},
+  {(bigint) 4787 /* 9: ABreakExpr < ABreakExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -63458,13 +66135,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ABreakExpr[97] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: ABreakExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
-  {(bigint) 1 /* 74: ABreakExpr < ALabelable: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 1 /* 75: ABreakExpr < ALabelable: superclass init_table position */},
   {(bigint) parser___parser_nodes___ALabelable___n_label},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: ABreakExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: ABreakExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ABreakExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -63472,13 +66150,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ABreakExpr[97] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 0 /* 88: ABreakExpr < AEscapeExpr: superclass init_table position */},
+  {(bigint) 0 /* 89: ABreakExpr < AEscapeExpr: superclass init_table position */},
   {(bigint) syntax___scope___AEscapeExpr___escapable},
   {(bigint) syntax___scope___ABreakExpr___kwname},
   {(bigint) syntax___scope___AEscapeExpr___compute_escapable_block},
   {(bigint) parser___parser_prod___ABreakExpr___empty_init},
   {(bigint) parser___parser_prod___ABreakExpr___init_abreakexpr},
-  {(bigint) 6 /* 94: ABreakExpr < ABreakExpr: superclass init_table position */},
+  {(bigint) 6 /* 95: ABreakExpr < ABreakExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABreakExpr___n_kwbreak},
   {(bigint) parser___parser_nodes___ABreakExpr___n_expr},
 };
@@ -63488,14 +66166,15 @@ const classtable_elt_t VFT_parser___parser_nodes___ABreakExpr[97] = {
 /* 3: Attribute ABreakExpr::_location */
 /* 4: Attribute ABreakExpr::_first_location */
 /* 5: Attribute ABreakExpr::_last_location */
-/* 6: Attribute ABreakExpr::_n_label */
-/* 7: Attribute ABreakExpr::_is_typed */
-/* 8: Attribute ABreakExpr::_stype */
-/* 9: Attribute ABreakExpr::_if_true_flow_ctx */
-/* 10: Attribute ABreakExpr::_if_false_flow_ctx */
-/* 11: Attribute ABreakExpr::_escapable */
-/* 12: Attribute ABreakExpr::_n_kwbreak */
-/* 13: Attribute ABreakExpr::_n_expr */
+/* 6: Attribute ABreakExpr::_n_annotations */
+/* 7: Attribute ABreakExpr::_n_label */
+/* 8: Attribute ABreakExpr::_is_typed */
+/* 9: Attribute ABreakExpr::_stype */
+/* 10: Attribute ABreakExpr::_if_true_flow_ctx */
+/* 11: Attribute ABreakExpr::_if_false_flow_ctx */
+/* 12: Attribute ABreakExpr::_escapable */
+/* 13: Attribute ABreakExpr::_n_kwbreak */
+/* 14: Attribute ABreakExpr::_n_expr */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ABreakExpr[] = "init var of ABreakExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ABreakExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -63511,13 +66190,16 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ABreakExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* parser/parser_nodes.nit:767 */
+  /* parser/parser_nodes.nit:773 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:773 */
+  /* parser/parser_nodes.nit:779 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -63525,7 +66207,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ABreakExpr(val_t p0){
 val_t NEW_parser___parser_nodes___ABreakExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 14);
+  obj = alloc(sizeof(val_t) * 15);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ABreakExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -63564,13 +66246,13 @@ val_t NEW_ABreakExpr_parser___parser_prod___ABreakExpr___empty_init(void){
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3594;
+  fra.me.line = 3824;
   fra.me.meth = LOCATE_NEW_ABreakExpr_parser___parser_prod___ABreakExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:3594 */
+  /* parser/parser_prod.nit:3824 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ABreakExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ABreakExpr(fra.me.REG[0]);
   parser___parser_prod___ABreakExpr___empty_init(fra.me.REG[0], init_table);
@@ -63585,7 +66267,7 @@ val_t NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(val_t p
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3596;
+  fra.me.line = 3826;
   fra.me.meth = LOCATE_NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -63597,7 +66279,7 @@ val_t NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3596 */
+  /* parser/parser_prod.nit:3826 */
   fra.me.REG[3] = NEW_parser___parser_nodes___ABreakExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ABreakExpr(fra.me.REG[3]);
   parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -63626,16 +66308,16 @@ val_t NEW_ABreakExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AAbortExpr[92] = {
-  {(bigint) 4051 /* 0: Identity */},
-  {(bigint) 12 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AAbortExpr[93] = {
+  {(bigint) 4599 /* 0: Identity */},
+  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AAbortExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AAbortExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AAbortExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AAbortExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AAbortExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AAbortExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4051 /* 8: AAbortExpr < AAbortExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AAbortExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4599 /* 8: AAbortExpr < AAbortExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -63701,13 +66383,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AAbortExpr[92] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AAbortExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: AAbortExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: AAbortExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AAbortExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -63717,7 +66400,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AAbortExpr[92] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___AAbortExpr___empty_init},
   {(bigint) parser___parser_prod___AAbortExpr___init_aabortexpr},
-  {(bigint) 4 /* 90: AAbortExpr < AAbortExpr: superclass init_table position */},
+  {(bigint) 4 /* 91: AAbortExpr < AAbortExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAbortExpr___n_kwabort},
 };
 /* 0: Pointer to the classtable */
@@ -63726,15 +66409,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AAbortExpr[92] = {
 /* 3: Attribute AAbortExpr::_location */
 /* 4: Attribute AAbortExpr::_first_location */
 /* 5: Attribute AAbortExpr::_last_location */
+/* 6: Attribute AAbortExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AAbortExpr::_is_typed */
-/* 8: Attribute AAbortExpr::_stype */
-/* 9: Attribute AAbortExpr::_if_true_flow_ctx */
-/* 10: Attribute AAbortExpr::_if_false_flow_ctx */
-/* 11: Attribute AAbortExpr::_n_kwabort */
+/* 8: Attribute AAbortExpr::_is_typed */
+/* 9: Attribute AAbortExpr::_stype */
+/* 10: Attribute AAbortExpr::_if_true_flow_ctx */
+/* 11: Attribute AAbortExpr::_if_false_flow_ctx */
+/* 12: Attribute AAbortExpr::_n_kwabort */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAbortExpr[] = "init var of AAbortExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AAbortExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -63742,10 +66426,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAbortExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAbortExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -63754,7 +66442,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAbortExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AAbortExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 12);
+  obj = alloc(sizeof(val_t) * 13);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AAbortExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -63793,13 +66481,13 @@ val_t NEW_AAbortExpr_parser___parser_prod___AAbortExpr___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3661;
+  fra.me.line = 3891;
   fra.me.meth = LOCATE_NEW_AAbortExpr_parser___parser_prod___AAbortExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:3661 */
+  /* parser/parser_prod.nit:3891 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAbortExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AAbortExpr(fra.me.REG[0]);
   parser___parser_prod___AAbortExpr___empty_init(fra.me.REG[0], init_table);
@@ -63814,7 +66502,7 @@ val_t NEW_AAbortExpr_parser___parser_prod___AAbortExpr___init_aabortexpr(val_t p
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3663;
+  fra.me.line = 3893;
   fra.me.meth = LOCATE_NEW_AAbortExpr_parser___parser_prod___AAbortExpr___init_aabortexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -63822,7 +66510,7 @@ val_t NEW_AAbortExpr_parser___parser_prod___AAbortExpr___init_aabortexpr(val_t p
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:3663 */
+  /* parser/parser_prod.nit:3893 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AAbortExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AAbortExpr(fra.me.REG[1]);
   parser___parser_prod___AAbortExpr___init_aabortexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -63851,17 +66539,17 @@ val_t NEW_AAbortExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AContinueExpr[97] = {
-  {(bigint) 4215 /* 0: Identity */},
-  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AContinueExpr[98] = {
+  {(bigint) 4771 /* 0: Identity */},
+  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AContinueExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AContinueExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AContinueExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AContinueExpr < Prod: superclass typecheck marker */},
-  {(bigint) 3275 /* 6: AContinueExpr < ALabelable: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AContinueExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3951 /* 8: AContinueExpr < AEscapeExpr: superclass typecheck marker */},
-  {(bigint) 4215 /* 9: AContinueExpr < AContinueExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AContinueExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3775 /* 6: AContinueExpr < ALabelable: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AContinueExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4495 /* 8: AContinueExpr < AEscapeExpr: superclass typecheck marker */},
+  {(bigint) 4771 /* 9: AContinueExpr < AContinueExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -63926,13 +66614,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AContinueExpr[97] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AContinueExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
-  {(bigint) 1 /* 74: AContinueExpr < ALabelable: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 1 /* 75: AContinueExpr < ALabelable: superclass init_table position */},
   {(bigint) parser___parser_nodes___ALabelable___n_label},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: AContinueExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: AContinueExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AContinueExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -63940,13 +66629,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AContinueExpr[97] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 0 /* 88: AContinueExpr < AEscapeExpr: superclass init_table position */},
+  {(bigint) 0 /* 89: AContinueExpr < AEscapeExpr: superclass init_table position */},
   {(bigint) syntax___scope___AEscapeExpr___escapable},
   {(bigint) syntax___scope___AContinueExpr___kwname},
   {(bigint) syntax___scope___AEscapeExpr___compute_escapable_block},
   {(bigint) parser___parser_prod___AContinueExpr___empty_init},
   {(bigint) parser___parser_prod___AContinueExpr___init_acontinueexpr},
-  {(bigint) 6 /* 94: AContinueExpr < AContinueExpr: superclass init_table position */},
+  {(bigint) 6 /* 95: AContinueExpr < AContinueExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AContinueExpr___n_kwcontinue},
   {(bigint) parser___parser_nodes___AContinueExpr___n_expr},
 };
@@ -63956,14 +66645,15 @@ const classtable_elt_t VFT_parser___parser_nodes___AContinueExpr[97] = {
 /* 3: Attribute AContinueExpr::_location */
 /* 4: Attribute AContinueExpr::_first_location */
 /* 5: Attribute AContinueExpr::_last_location */
-/* 6: Attribute AContinueExpr::_n_label */
-/* 7: Attribute AContinueExpr::_is_typed */
-/* 8: Attribute AContinueExpr::_stype */
-/* 9: Attribute AContinueExpr::_if_true_flow_ctx */
-/* 10: Attribute AContinueExpr::_if_false_flow_ctx */
-/* 11: Attribute AContinueExpr::_escapable */
-/* 12: Attribute AContinueExpr::_n_kwcontinue */
-/* 13: Attribute AContinueExpr::_n_expr */
+/* 6: Attribute AContinueExpr::_n_annotations */
+/* 7: Attribute AContinueExpr::_n_label */
+/* 8: Attribute AContinueExpr::_is_typed */
+/* 9: Attribute AContinueExpr::_stype */
+/* 10: Attribute AContinueExpr::_if_true_flow_ctx */
+/* 11: Attribute AContinueExpr::_if_false_flow_ctx */
+/* 12: Attribute AContinueExpr::_escapable */
+/* 13: Attribute AContinueExpr::_n_kwcontinue */
+/* 14: Attribute AContinueExpr::_n_expr */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AContinueExpr[] = "init var of AContinueExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AContinueExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -63979,16 +66669,19 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AContinueExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* parser/parser_nodes.nit:782 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:767 */
+  /* parser/parser_nodes.nit:773 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:783 */
+  /* parser/parser_nodes.nit:788 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:789 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -63996,7 +66689,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AContinueExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AContinueExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 14);
+  obj = alloc(sizeof(val_t) * 15);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AContinueExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -64030,13 +66723,13 @@ val_t NEW_AContinueExpr_parser___parser_prod___AContinueExpr___empty_init(void){
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3692;
+  fra.me.line = 3922;
   fra.me.meth = LOCATE_NEW_AContinueExpr_parser___parser_prod___AContinueExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:3692 */
+  /* parser/parser_prod.nit:3922 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AContinueExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AContinueExpr(fra.me.REG[0]);
   parser___parser_prod___AContinueExpr___empty_init(fra.me.REG[0], init_table);
@@ -64051,7 +66744,7 @@ val_t NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexp
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3694;
+  fra.me.line = 3924;
   fra.me.meth = LOCATE_NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -64063,7 +66756,7 @@ val_t NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexp
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3694 */
+  /* parser/parser_prod.nit:3924 */
   fra.me.REG[3] = NEW_parser___parser_nodes___AContinueExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AContinueExpr(fra.me.REG[3]);
   parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -64092,17 +66785,17 @@ val_t NEW_AContinueExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ADoExpr[97] = {
-  {(bigint) 4203 /* 0: Identity */},
-  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ADoExpr[98] = {
+  {(bigint) 4759 /* 0: Identity */},
+  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ADoExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ADoExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ADoExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ADoExpr < Prod: superclass typecheck marker */},
-  {(bigint) 3275 /* 6: ADoExpr < ALabelable: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: ADoExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4043 /* 8: ADoExpr < AAbsControl: superclass typecheck marker */},
-  {(bigint) 4203 /* 9: ADoExpr < ADoExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ADoExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3775 /* 6: ADoExpr < ALabelable: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ADoExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4591 /* 8: ADoExpr < AAbsControl: superclass typecheck marker */},
+  {(bigint) 4759 /* 9: ADoExpr < ADoExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -64167,13 +66860,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ADoExpr[97] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: ADoExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
-  {(bigint) 5 /* 74: ADoExpr < ALabelable: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 5 /* 75: ADoExpr < ALabelable: superclass init_table position */},
   {(bigint) parser___parser_nodes___ALabelable___n_label},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: ADoExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: ADoExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ADoExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -64181,13 +66875,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ADoExpr[97] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 0 /* 88: ADoExpr < AAbsControl: superclass init_table position */},
+  {(bigint) 0 /* 89: ADoExpr < AAbsControl: superclass init_table position */},
   {(bigint) syntax___typing___AAbsControl___escapable},
   {(bigint) syntax___typing___AAbsControl___process_control},
   {(bigint) syntax___typing___ADoExpr___process_control_inside},
   {(bigint) parser___parser_prod___ADoExpr___empty_init},
   {(bigint) parser___parser_prod___ADoExpr___init_adoexpr},
-  {(bigint) 6 /* 94: ADoExpr < ADoExpr: superclass init_table position */},
+  {(bigint) 6 /* 95: ADoExpr < ADoExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ADoExpr___n_kwdo},
   {(bigint) parser___parser_nodes___ADoExpr___n_block},
 };
@@ -64197,14 +66891,15 @@ const classtable_elt_t VFT_parser___parser_nodes___ADoExpr[97] = {
 /* 3: Attribute ADoExpr::_location */
 /* 4: Attribute ADoExpr::_first_location */
 /* 5: Attribute ADoExpr::_last_location */
-/* 6: Attribute ADoExpr::_n_label */
-/* 7: Attribute ADoExpr::_is_typed */
-/* 8: Attribute ADoExpr::_stype */
-/* 9: Attribute ADoExpr::_if_true_flow_ctx */
-/* 10: Attribute ADoExpr::_if_false_flow_ctx */
-/* 11: Attribute ADoExpr::_escapable */
-/* 12: Attribute ADoExpr::_n_kwdo */
-/* 13: Attribute ADoExpr::_n_block */
+/* 6: Attribute ADoExpr::_n_annotations */
+/* 7: Attribute ADoExpr::_n_label */
+/* 8: Attribute ADoExpr::_is_typed */
+/* 9: Attribute ADoExpr::_stype */
+/* 10: Attribute ADoExpr::_if_true_flow_ctx */
+/* 11: Attribute ADoExpr::_if_false_flow_ctx */
+/* 12: Attribute ADoExpr::_escapable */
+/* 13: Attribute ADoExpr::_n_kwdo */
+/* 14: Attribute ADoExpr::_n_block */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ADoExpr[] = "init var of ADoExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ADoExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -64220,21 +66915,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ADoExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:789 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:767 */
+  /* parser/parser_nodes.nit:56 */
   fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
+  /* parser/parser_nodes.nit:773 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:795 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ADoExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 14);
+  obj = alloc(sizeof(val_t) * 15);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ADoExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -64254,15 +66952,15 @@ void CHECKNEW_parser___parser_nodes___ADoExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -64273,13 +66971,13 @@ val_t NEW_ADoExpr_parser___parser_prod___ADoExpr___empty_init(void){
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3763;
+  fra.me.line = 3993;
   fra.me.meth = LOCATE_NEW_ADoExpr_parser___parser_prod___ADoExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:3763 */
+  /* parser/parser_prod.nit:3993 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ADoExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ADoExpr(fra.me.REG[0]);
   parser___parser_prod___ADoExpr___empty_init(fra.me.REG[0], init_table);
@@ -64294,7 +66992,7 @@ val_t NEW_ADoExpr_parser___parser_prod___ADoExpr___init_adoexpr(val_t p0, val_t
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3765;
+  fra.me.line = 3995;
   fra.me.meth = LOCATE_NEW_ADoExpr_parser___parser_prod___ADoExpr___init_adoexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -64306,7 +67004,7 @@ val_t NEW_ADoExpr_parser___parser_prod___ADoExpr___init_adoexpr(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3765 */
+  /* parser/parser_prod.nit:3995 */
   fra.me.REG[3] = NEW_parser___parser_nodes___ADoExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ADoExpr(fra.me.REG[3]);
   parser___parser_prod___ADoExpr___init_adoexpr(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -64335,16 +67033,16 @@ val_t NEW_ADoExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AIfExpr[95] = {
-  {(bigint) 3923 /* 0: Identity */},
-  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AIfExpr[96] = {
+  {(bigint) 4459 /* 0: Identity */},
+  {(bigint) 16 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AIfExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AIfExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AIfExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AIfExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AIfExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AIfExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3923 /* 8: AIfExpr < AIfExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AIfExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4459 /* 8: AIfExpr < AIfExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -64410,13 +67108,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AIfExpr[95] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AIfExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: AIfExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: AIfExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AIfExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -64426,7 +67125,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AIfExpr[95] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___AIfExpr___empty_init},
   {(bigint) parser___parser_prod___AIfExpr___init_aifexpr},
-  {(bigint) 4 /* 90: AIfExpr < AIfExpr: superclass init_table position */},
+  {(bigint) 4 /* 91: AIfExpr < AIfExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AIfExpr___n_kwif},
   {(bigint) parser___parser_nodes___AIfExpr___n_expr},
   {(bigint) parser___parser_nodes___AIfExpr___n_then},
@@ -64438,15 +67137,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AIfExpr[95] = {
 /* 3: Attribute AIfExpr::_location */
 /* 4: Attribute AIfExpr::_first_location */
 /* 5: Attribute AIfExpr::_last_location */
+/* 6: Attribute AIfExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AIfExpr::_is_typed */
-/* 8: Attribute AIfExpr::_stype */
-/* 9: Attribute AIfExpr::_if_true_flow_ctx */
-/* 10: Attribute AIfExpr::_if_false_flow_ctx */
-/* 11: Attribute AIfExpr::_n_kwif */
-/* 12: Attribute AIfExpr::_n_expr */
-/* 13: Attribute AIfExpr::_n_then */
-/* 14: Attribute AIfExpr::_n_else */
+/* 8: Attribute AIfExpr::_is_typed */
+/* 9: Attribute AIfExpr::_stype */
+/* 10: Attribute AIfExpr::_if_true_flow_ctx */
+/* 11: Attribute AIfExpr::_if_false_flow_ctx */
+/* 12: Attribute AIfExpr::_n_kwif */
+/* 13: Attribute AIfExpr::_n_expr */
+/* 14: Attribute AIfExpr::_n_then */
+/* 15: Attribute AIfExpr::_n_else */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AIfExpr[] = "init var of AIfExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AIfExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -64462,13 +67162,16 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AIfExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* parser/parser_nodes.nit:795 */
+  /* parser/parser_nodes.nit:801 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:796 */
+  /* parser/parser_nodes.nit:802 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -64476,7 +67179,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AIfExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AIfExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 15);
+  obj = alloc(sizeof(val_t) * 16);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AIfExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -64520,13 +67223,13 @@ val_t NEW_AIfExpr_parser___parser_prod___AIfExpr___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3830;
+  fra.me.line = 4060;
   fra.me.meth = LOCATE_NEW_AIfExpr_parser___parser_prod___AIfExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:3830 */
+  /* parser/parser_prod.nit:4060 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AIfExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AIfExpr(fra.me.REG[0]);
   parser___parser_prod___AIfExpr___empty_init(fra.me.REG[0], init_table);
@@ -64541,7 +67244,7 @@ val_t NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(val_t p0, val_t
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3832;
+  fra.me.line = 4062;
   fra.me.meth = LOCATE_NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -64555,7 +67258,7 @@ val_t NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(val_t p0, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:3832 */
+  /* parser/parser_prod.nit:4062 */
   fra.me.REG[4] = NEW_parser___parser_nodes___AIfExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AIfExpr(fra.me.REG[4]);
   parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
@@ -64584,16 +67287,16 @@ val_t NEW_AIfExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AIfexprExpr[97] = {
-  {(bigint) 3919 /* 0: Identity */},
-  {(bigint) 17 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AIfexprExpr[98] = {
+  {(bigint) 4455 /* 0: Identity */},
+  {(bigint) 18 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AIfexprExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AIfexprExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AIfexprExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AIfexprExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AIfexprExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AIfexprExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3919 /* 8: AIfexprExpr < AIfexprExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AIfexprExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4455 /* 8: AIfexprExpr < AIfexprExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -64659,13 +67362,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AIfexprExpr[97] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AIfexprExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: AIfexprExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: AIfexprExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AIfexprExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -64675,7 +67379,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AIfexprExpr[97] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___AIfexprExpr___empty_init},
   {(bigint) parser___parser_prod___AIfexprExpr___init_aifexprexpr},
-  {(bigint) 4 /* 90: AIfexprExpr < AIfexprExpr: superclass init_table position */},
+  {(bigint) 4 /* 91: AIfexprExpr < AIfexprExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AIfexprExpr___n_kwif},
   {(bigint) parser___parser_nodes___AIfexprExpr___n_expr},
   {(bigint) parser___parser_nodes___AIfexprExpr___n_kwthen},
@@ -64689,20 +67393,21 @@ const classtable_elt_t VFT_parser___parser_nodes___AIfexprExpr[97] = {
 /* 3: Attribute AIfexprExpr::_location */
 /* 4: Attribute AIfexprExpr::_first_location */
 /* 5: Attribute AIfexprExpr::_last_location */
+/* 6: Attribute AIfexprExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AIfexprExpr::_is_typed */
-/* 8: Attribute AIfexprExpr::_stype */
-/* 9: Attribute AIfexprExpr::_if_true_flow_ctx */
-/* 10: Attribute AIfexprExpr::_if_false_flow_ctx */
-/* 11: Attribute AIfexprExpr::_n_kwif */
-/* 12: Attribute AIfexprExpr::_n_expr */
-/* 13: Attribute AIfexprExpr::_n_kwthen */
-/* 14: Attribute AIfexprExpr::_n_then */
-/* 15: Attribute AIfexprExpr::_n_kwelse */
-/* 16: Attribute AIfexprExpr::_n_else */
+/* 8: Attribute AIfexprExpr::_is_typed */
+/* 9: Attribute AIfexprExpr::_stype */
+/* 10: Attribute AIfexprExpr::_if_true_flow_ctx */
+/* 11: Attribute AIfexprExpr::_if_false_flow_ctx */
+/* 12: Attribute AIfexprExpr::_n_kwif */
+/* 13: Attribute AIfexprExpr::_n_expr */
+/* 14: Attribute AIfexprExpr::_n_kwthen */
+/* 15: Attribute AIfexprExpr::_n_then */
+/* 16: Attribute AIfexprExpr::_n_kwelse */
+/* 17: Attribute AIfexprExpr::_n_else */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AIfexprExpr[] = "init var of AIfexprExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AIfexprExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -64710,10 +67415,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AIfexprExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AIfexprExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -64722,7 +67431,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AIfexprExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AIfexprExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 17);
+  obj = alloc(sizeof(val_t) * 18);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AIfexprExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -64786,13 +67495,13 @@ val_t NEW_AIfexprExpr_parser___parser_prod___AIfexprExpr___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3911;
+  fra.me.line = 4141;
   fra.me.meth = LOCATE_NEW_AIfexprExpr_parser___parser_prod___AIfexprExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:3911 */
+  /* parser/parser_prod.nit:4141 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AIfexprExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AIfexprExpr(fra.me.REG[0]);
   parser___parser_prod___AIfexprExpr___empty_init(fra.me.REG[0], init_table);
@@ -64807,7 +67516,7 @@ val_t NEW_AIfexprExpr_parser___parser_prod___AIfexprExpr___init_aifexprexpr(val_
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 3913;
+  fra.me.line = 4143;
   fra.me.meth = LOCATE_NEW_AIfexprExpr_parser___parser_prod___AIfexprExpr___init_aifexprexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -64825,7 +67534,7 @@ val_t NEW_AIfexprExpr_parser___parser_prod___AIfexprExpr___init_aifexprexpr(val_
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:3913 */
+  /* parser/parser_prod.nit:4143 */
   fra.me.REG[6] = NEW_parser___parser_nodes___AIfexprExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AIfexprExpr(fra.me.REG[6]);
   parser___parser_prod___AIfexprExpr___init_aifexprexpr(fra.me.REG[6], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], init_table);
@@ -64854,17 +67563,17 @@ val_t NEW_AIfexprExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AWhileExpr[99] = {
-  {(bigint) 4091 /* 0: Identity */},
-  {(bigint) 16 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AWhileExpr[100] = {
+  {(bigint) 4639 /* 0: Identity */},
+  {(bigint) 17 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AWhileExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AWhileExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AWhileExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AWhileExpr < Prod: superclass typecheck marker */},
-  {(bigint) 3275 /* 6: AWhileExpr < ALabelable: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AWhileExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4043 /* 8: AWhileExpr < AAbsControl: superclass typecheck marker */},
-  {(bigint) 4091 /* 9: AWhileExpr < AWhileExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AWhileExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3775 /* 6: AWhileExpr < ALabelable: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AWhileExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4591 /* 8: AWhileExpr < AAbsControl: superclass typecheck marker */},
+  {(bigint) 4639 /* 9: AWhileExpr < AWhileExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -64929,13 +67638,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AWhileExpr[99] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AWhileExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
-  {(bigint) 5 /* 74: AWhileExpr < ALabelable: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 5 /* 75: AWhileExpr < ALabelable: superclass init_table position */},
   {(bigint) parser___parser_nodes___ALabelable___n_label},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AWhileExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AWhileExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AWhileExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -64943,13 +67653,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AWhileExpr[99] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 0 /* 88: AWhileExpr < AAbsControl: superclass init_table position */},
+  {(bigint) 0 /* 89: AWhileExpr < AAbsControl: superclass init_table position */},
   {(bigint) syntax___typing___AAbsControl___escapable},
   {(bigint) syntax___typing___AAbsControl___process_control},
   {(bigint) syntax___typing___AWhileExpr___process_control_inside},
   {(bigint) parser___parser_prod___AWhileExpr___empty_init},
   {(bigint) parser___parser_prod___AWhileExpr___init_awhileexpr},
-  {(bigint) 6 /* 94: AWhileExpr < AWhileExpr: superclass init_table position */},
+  {(bigint) 6 /* 95: AWhileExpr < AWhileExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AWhileExpr___n_kwwhile},
   {(bigint) parser___parser_nodes___AWhileExpr___n_expr},
   {(bigint) parser___parser_nodes___AWhileExpr___n_kwdo},
@@ -64961,16 +67671,17 @@ const classtable_elt_t VFT_parser___parser_nodes___AWhileExpr[99] = {
 /* 3: Attribute AWhileExpr::_location */
 /* 4: Attribute AWhileExpr::_first_location */
 /* 5: Attribute AWhileExpr::_last_location */
-/* 6: Attribute AWhileExpr::_n_label */
-/* 7: Attribute AWhileExpr::_is_typed */
-/* 8: Attribute AWhileExpr::_stype */
-/* 9: Attribute AWhileExpr::_if_true_flow_ctx */
-/* 10: Attribute AWhileExpr::_if_false_flow_ctx */
-/* 11: Attribute AWhileExpr::_escapable */
-/* 12: Attribute AWhileExpr::_n_kwwhile */
-/* 13: Attribute AWhileExpr::_n_expr */
-/* 14: Attribute AWhileExpr::_n_kwdo */
-/* 15: Attribute AWhileExpr::_n_block */
+/* 6: Attribute AWhileExpr::_n_annotations */
+/* 7: Attribute AWhileExpr::_n_label */
+/* 8: Attribute AWhileExpr::_is_typed */
+/* 9: Attribute AWhileExpr::_stype */
+/* 10: Attribute AWhileExpr::_if_true_flow_ctx */
+/* 11: Attribute AWhileExpr::_if_false_flow_ctx */
+/* 12: Attribute AWhileExpr::_escapable */
+/* 13: Attribute AWhileExpr::_n_kwwhile */
+/* 14: Attribute AWhileExpr::_n_expr */
+/* 15: Attribute AWhileExpr::_n_kwdo */
+/* 16: Attribute AWhileExpr::_n_block */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AWhileExpr[] = "init var of AWhileExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AWhileExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -64986,21 +67697,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AWhileExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:813 */
+  /* parser/parser_nodes.nit:56 */
   fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:767 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
+  /* parser/parser_nodes.nit:773 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:819 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AWhileExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 16);
+  obj = alloc(sizeof(val_t) * 17);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AWhileExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -65020,6 +67734,11 @@ void CHECKNEW_parser___parser_nodes___AWhileExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -65035,11 +67754,6 @@ void CHECKNEW_parser___parser_nodes___AWhileExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_AWhileExpr_parser___parser_prod___AWhileExpr___empty_init[] = "new AWhileExpr parser_prod::AWhileExpr::empty_init";
@@ -65049,13 +67763,13 @@ val_t NEW_AWhileExpr_parser___parser_prod___AWhileExpr___empty_init(void){
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4012;
+  fra.me.line = 4242;
   fra.me.meth = LOCATE_NEW_AWhileExpr_parser___parser_prod___AWhileExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4012 */
+  /* parser/parser_prod.nit:4242 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AWhileExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AWhileExpr(fra.me.REG[0]);
   parser___parser_prod___AWhileExpr___empty_init(fra.me.REG[0], init_table);
@@ -65070,7 +67784,7 @@ val_t NEW_AWhileExpr_parser___parser_prod___AWhileExpr___init_awhileexpr(val_t p
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4014;
+  fra.me.line = 4244;
   fra.me.meth = LOCATE_NEW_AWhileExpr_parser___parser_prod___AWhileExpr___init_awhileexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -65086,7 +67800,7 @@ val_t NEW_AWhileExpr_parser___parser_prod___AWhileExpr___init_awhileexpr(val_t p
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:4014 */
+  /* parser/parser_prod.nit:4244 */
   fra.me.REG[5] = NEW_parser___parser_nodes___AWhileExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AWhileExpr(fra.me.REG[5]);
   parser___parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
@@ -65115,17 +67829,17 @@ val_t NEW_AWhileExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ALoopExpr[97] = {
-  {(bigint) 4147 /* 0: Identity */},
-  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ALoopExpr[98] = {
+  {(bigint) 4699 /* 0: Identity */},
+  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ALoopExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ALoopExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ALoopExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ALoopExpr < Prod: superclass typecheck marker */},
-  {(bigint) 3275 /* 6: ALoopExpr < ALabelable: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: ALoopExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4043 /* 8: ALoopExpr < AAbsControl: superclass typecheck marker */},
-  {(bigint) 4147 /* 9: ALoopExpr < ALoopExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ALoopExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3775 /* 6: ALoopExpr < ALabelable: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ALoopExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4591 /* 8: ALoopExpr < AAbsControl: superclass typecheck marker */},
+  {(bigint) 4699 /* 9: ALoopExpr < ALoopExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -65190,13 +67904,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ALoopExpr[97] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: ALoopExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
-  {(bigint) 5 /* 74: ALoopExpr < ALabelable: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 5 /* 75: ALoopExpr < ALabelable: superclass init_table position */},
   {(bigint) parser___parser_nodes___ALabelable___n_label},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: ALoopExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: ALoopExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ALoopExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -65204,13 +67919,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ALoopExpr[97] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 0 /* 88: ALoopExpr < AAbsControl: superclass init_table position */},
+  {(bigint) 0 /* 89: ALoopExpr < AAbsControl: superclass init_table position */},
   {(bigint) syntax___typing___AAbsControl___escapable},
   {(bigint) syntax___typing___AAbsControl___process_control},
   {(bigint) syntax___typing___ALoopExpr___process_control_inside},
   {(bigint) parser___parser_prod___ALoopExpr___empty_init},
   {(bigint) parser___parser_prod___ALoopExpr___init_aloopexpr},
-  {(bigint) 6 /* 94: ALoopExpr < ALoopExpr: superclass init_table position */},
+  {(bigint) 6 /* 95: ALoopExpr < ALoopExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ALoopExpr___n_kwloop},
   {(bigint) parser___parser_nodes___ALoopExpr___n_block},
 };
@@ -65220,14 +67935,15 @@ const classtable_elt_t VFT_parser___parser_nodes___ALoopExpr[97] = {
 /* 3: Attribute ALoopExpr::_location */
 /* 4: Attribute ALoopExpr::_first_location */
 /* 5: Attribute ALoopExpr::_last_location */
-/* 6: Attribute ALoopExpr::_n_label */
-/* 7: Attribute ALoopExpr::_is_typed */
-/* 8: Attribute ALoopExpr::_stype */
-/* 9: Attribute ALoopExpr::_if_true_flow_ctx */
-/* 10: Attribute ALoopExpr::_if_false_flow_ctx */
-/* 11: Attribute ALoopExpr::_escapable */
-/* 12: Attribute ALoopExpr::_n_kwloop */
-/* 13: Attribute ALoopExpr::_n_block */
+/* 6: Attribute ALoopExpr::_n_annotations */
+/* 7: Attribute ALoopExpr::_n_label */
+/* 8: Attribute ALoopExpr::_is_typed */
+/* 9: Attribute ALoopExpr::_stype */
+/* 10: Attribute ALoopExpr::_if_true_flow_ctx */
+/* 11: Attribute ALoopExpr::_if_false_flow_ctx */
+/* 12: Attribute ALoopExpr::_escapable */
+/* 13: Attribute ALoopExpr::_n_kwloop */
+/* 14: Attribute ALoopExpr::_n_block */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ALoopExpr[] = "init var of ALoopExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ALoopExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -65243,21 +67959,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ALoopExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:819 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:767 */
+  /* parser/parser_nodes.nit:56 */
   fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
+  /* parser/parser_nodes.nit:773 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:825 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ALoopExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 14);
+  obj = alloc(sizeof(val_t) * 15);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ALoopExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -65277,15 +67996,15 @@ void CHECKNEW_parser___parser_nodes___ALoopExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -65296,13 +68015,13 @@ val_t NEW_ALoopExpr_parser___parser_prod___ALoopExpr___empty_init(void){
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4107;
+  fra.me.line = 4337;
   fra.me.meth = LOCATE_NEW_ALoopExpr_parser___parser_prod___ALoopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4107 */
+  /* parser/parser_prod.nit:4337 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALoopExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALoopExpr(fra.me.REG[0]);
   parser___parser_prod___ALoopExpr___empty_init(fra.me.REG[0], init_table);
@@ -65317,7 +68036,7 @@ val_t NEW_ALoopExpr_parser___parser_prod___ALoopExpr___init_aloopexpr(val_t p0,
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4109;
+  fra.me.line = 4339;
   fra.me.meth = LOCATE_NEW_ALoopExpr_parser___parser_prod___ALoopExpr___init_aloopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -65329,7 +68048,7 @@ val_t NEW_ALoopExpr_parser___parser_prod___ALoopExpr___init_aloopexpr(val_t p0,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:4109 */
+  /* parser/parser_prod.nit:4339 */
   fra.me.REG[3] = NEW_parser___parser_nodes___ALoopExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALoopExpr(fra.me.REG[3]);
   parser___parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -65358,17 +68077,17 @@ val_t NEW_ALoopExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AForExpr[102] = {
-  {(bigint) 4183 /* 0: Identity */},
-  {(bigint) 18 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AForExpr[103] = {
+  {(bigint) 4739 /* 0: Identity */},
+  {(bigint) 19 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AForExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AForExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AForExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AForExpr < Prod: superclass typecheck marker */},
-  {(bigint) 3275 /* 6: AForExpr < ALabelable: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AForExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4043 /* 8: AForExpr < AAbsControl: superclass typecheck marker */},
-  {(bigint) 4183 /* 9: AForExpr < AForExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AForExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3775 /* 6: AForExpr < ALabelable: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AForExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4591 /* 8: AForExpr < AAbsControl: superclass typecheck marker */},
+  {(bigint) 4739 /* 9: AForExpr < AForExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -65433,13 +68152,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AForExpr[102] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AForExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
-  {(bigint) 5 /* 74: AForExpr < ALabelable: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 5 /* 75: AForExpr < ALabelable: superclass init_table position */},
   {(bigint) parser___parser_nodes___ALabelable___n_label},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AForExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AForExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AForExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -65447,7 +68167,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AForExpr[102] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 0 /* 88: AForExpr < AAbsControl: superclass init_table position */},
+  {(bigint) 0 /* 89: AForExpr < AAbsControl: superclass init_table position */},
   {(bigint) syntax___typing___AAbsControl___escapable},
   {(bigint) syntax___typing___AAbsControl___process_control},
   {(bigint) syntax___typing___AForExpr___process_control_inside},
@@ -65455,7 +68175,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AForExpr[102] = {
   {(bigint) syntax___typing___AForExpr___variables},
   {(bigint) parser___parser_prod___AForExpr___empty_init},
   {(bigint) parser___parser_prod___AForExpr___init_aforexpr},
-  {(bigint) 6 /* 96: AForExpr < AForExpr: superclass init_table position */},
+  {(bigint) 6 /* 97: AForExpr < AForExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AForExpr___n_kwfor},
   {(bigint) parser___parser_nodes___AForExpr___n_ids},
   {(bigint) parser___parser_nodes___AForExpr___n_expr},
@@ -65468,18 +68188,19 @@ const classtable_elt_t VFT_parser___parser_nodes___AForExpr[102] = {
 /* 3: Attribute AForExpr::_location */
 /* 4: Attribute AForExpr::_first_location */
 /* 5: Attribute AForExpr::_last_location */
-/* 6: Attribute AForExpr::_n_label */
-/* 7: Attribute AForExpr::_is_typed */
-/* 8: Attribute AForExpr::_stype */
-/* 9: Attribute AForExpr::_if_true_flow_ctx */
-/* 10: Attribute AForExpr::_if_false_flow_ctx */
-/* 11: Attribute AForExpr::_escapable */
-/* 12: Attribute AForExpr::_variables */
-/* 13: Attribute AForExpr::_n_kwfor */
-/* 14: Attribute AForExpr::_n_ids */
-/* 15: Attribute AForExpr::_n_expr */
-/* 16: Attribute AForExpr::_n_kwdo */
-/* 17: Attribute AForExpr::_n_block */
+/* 6: Attribute AForExpr::_n_annotations */
+/* 7: Attribute AForExpr::_n_label */
+/* 8: Attribute AForExpr::_is_typed */
+/* 9: Attribute AForExpr::_stype */
+/* 10: Attribute AForExpr::_if_true_flow_ctx */
+/* 11: Attribute AForExpr::_if_false_flow_ctx */
+/* 12: Attribute AForExpr::_escapable */
+/* 13: Attribute AForExpr::_variables */
+/* 14: Attribute AForExpr::_n_kwfor */
+/* 15: Attribute AForExpr::_n_ids */
+/* 16: Attribute AForExpr::_n_expr */
+/* 17: Attribute AForExpr::_n_kwdo */
+/* 18: Attribute AForExpr::_n_block */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AForExpr[] = "init var of AForExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AForExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -65495,24 +68216,27 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AForExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:825 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:828 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:767 */
+  /* parser/parser_nodes.nit:56 */
   fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
+  /* parser/parser_nodes.nit:773 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:831 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:834 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AForExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 18);
+  obj = alloc(sizeof(val_t) * 19);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AForExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -65532,6 +68256,11 @@ void CHECKNEW_parser___parser_nodes___AForExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -65552,11 +68281,6 @@ void CHECKNEW_parser___parser_nodes___AForExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_AForExpr_parser___parser_prod___AForExpr___empty_init[] = "new AForExpr parser_prod::AForExpr::empty_init";
@@ -65566,13 +68290,13 @@ val_t NEW_AForExpr_parser___parser_prod___AForExpr___empty_init(void){
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4174;
+  fra.me.line = 4404;
   fra.me.meth = LOCATE_NEW_AForExpr_parser___parser_prod___AForExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4174 */
+  /* parser/parser_prod.nit:4404 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AForExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AForExpr(fra.me.REG[0]);
   parser___parser_prod___AForExpr___empty_init(fra.me.REG[0], init_table);
@@ -65587,7 +68311,7 @@ val_t NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(val_t p0, val
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4176;
+  fra.me.line = 4406;
   fra.me.meth = LOCATE_NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -65605,7 +68329,7 @@ val_t NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(val_t p0, val
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:4176 */
+  /* parser/parser_prod.nit:4406 */
   fra.me.REG[6] = NEW_parser___parser_nodes___AForExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AForExpr(fra.me.REG[6]);
   parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[6], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], init_table);
@@ -65634,16 +68358,16 @@ val_t NEW_AForExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AAssertExpr[95] = {
-  {(bigint) 4027 /* 0: Identity */},
-  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AAssertExpr[96] = {
+  {(bigint) 4575 /* 0: Identity */},
+  {(bigint) 16 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AAssertExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AAssertExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AAssertExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AAssertExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AAssertExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AAssertExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4027 /* 8: AAssertExpr < AAssertExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AAssertExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4575 /* 8: AAssertExpr < AAssertExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -65709,13 +68433,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AAssertExpr[95] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AAssertExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: AAssertExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: AAssertExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AAssertExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -65725,7 +68450,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AAssertExpr[95] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___AAssertExpr___empty_init},
   {(bigint) parser___parser_prod___AAssertExpr___init_aassertexpr},
-  {(bigint) 4 /* 90: AAssertExpr < AAssertExpr: superclass init_table position */},
+  {(bigint) 4 /* 91: AAssertExpr < AAssertExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAssertExpr___n_kwassert},
   {(bigint) parser___parser_nodes___AAssertExpr___n_id},
   {(bigint) parser___parser_nodes___AAssertExpr___n_expr},
@@ -65737,15 +68462,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AAssertExpr[95] = {
 /* 3: Attribute AAssertExpr::_location */
 /* 4: Attribute AAssertExpr::_first_location */
 /* 5: Attribute AAssertExpr::_last_location */
+/* 6: Attribute AAssertExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AAssertExpr::_is_typed */
-/* 8: Attribute AAssertExpr::_stype */
-/* 9: Attribute AAssertExpr::_if_true_flow_ctx */
-/* 10: Attribute AAssertExpr::_if_false_flow_ctx */
-/* 11: Attribute AAssertExpr::_n_kwassert */
-/* 12: Attribute AAssertExpr::_n_id */
-/* 13: Attribute AAssertExpr::_n_expr */
-/* 14: Attribute AAssertExpr::_n_else */
+/* 8: Attribute AAssertExpr::_is_typed */
+/* 9: Attribute AAssertExpr::_stype */
+/* 10: Attribute AAssertExpr::_if_true_flow_ctx */
+/* 11: Attribute AAssertExpr::_if_false_flow_ctx */
+/* 12: Attribute AAssertExpr::_n_kwassert */
+/* 13: Attribute AAssertExpr::_n_id */
+/* 14: Attribute AAssertExpr::_n_expr */
+/* 15: Attribute AAssertExpr::_n_else */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAssertExpr[] = "init var of AAssertExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AAssertExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -65761,13 +68487,16 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAssertExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* parser/parser_nodes.nit:833 */
+  /* parser/parser_nodes.nit:839 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:835 */
+  /* parser/parser_nodes.nit:841 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -65775,7 +68504,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAssertExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AAssertExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 15);
+  obj = alloc(sizeof(val_t) * 16);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AAssertExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -65819,13 +68548,13 @@ val_t NEW_AAssertExpr_parser___parser_prod___AAssertExpr___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4290;
+  fra.me.line = 4520;
   fra.me.meth = LOCATE_NEW_AAssertExpr_parser___parser_prod___AAssertExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4290 */
+  /* parser/parser_prod.nit:4520 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAssertExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AAssertExpr(fra.me.REG[0]);
   parser___parser_prod___AAssertExpr___empty_init(fra.me.REG[0], init_table);
@@ -65840,7 +68569,7 @@ val_t NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(val_
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4292;
+  fra.me.line = 4522;
   fra.me.meth = LOCATE_NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -65854,7 +68583,7 @@ val_t NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(val_
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:4292 */
+  /* parser/parser_prod.nit:4522 */
   fra.me.REG[4] = NEW_parser___parser_nodes___AAssertExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AAssertExpr(fra.me.REG[4]);
   parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
@@ -65883,17 +68612,17 @@ val_t NEW_AAssertExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AOnceExpr[95] = {
-  {(bigint) 4135 /* 0: Identity */},
-  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AOnceExpr[96] = {
+  {(bigint) 4687 /* 0: Identity */},
+  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AOnceExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AOnceExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AOnceExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AOnceExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AOnceExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AOnceExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3831 /* 8: AOnceExpr < AProxyExpr: superclass typecheck marker */},
-  {(bigint) 4135 /* 9: AOnceExpr < AOnceExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AOnceExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4347 /* 8: AOnceExpr < AProxyExpr: superclass typecheck marker */},
+  {(bigint) 4687 /* 9: AOnceExpr < AOnceExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -65958,13 +68687,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AOnceExpr[95] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AOnceExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AOnceExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AOnceExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AOnceExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AProxyExpr___is_self},
@@ -65972,12 +68702,12 @@ const classtable_elt_t VFT_parser___parser_nodes___AOnceExpr[95] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 0 /* 88: AOnceExpr < AProxyExpr: superclass init_table position */},
+  {(bigint) 0 /* 89: AOnceExpr < AProxyExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AProxyExpr___n_expr},
   {(bigint) syntax___typing___ANode___accept_typing},
   {(bigint) parser___parser_prod___AOnceExpr___empty_init},
   {(bigint) parser___parser_prod___AOnceExpr___init_aonceexpr},
-  {(bigint) 5 /* 93: AOnceExpr < AOnceExpr: superclass init_table position */},
+  {(bigint) 5 /* 94: AOnceExpr < AOnceExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AOnceExpr___n_kwonce},
 };
 /* 0: Pointer to the classtable */
@@ -65986,16 +68716,17 @@ const classtable_elt_t VFT_parser___parser_nodes___AOnceExpr[95] = {
 /* 3: Attribute AOnceExpr::_location */
 /* 4: Attribute AOnceExpr::_first_location */
 /* 5: Attribute AOnceExpr::_last_location */
+/* 6: Attribute AOnceExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AOnceExpr::_is_typed */
-/* 8: Attribute AOnceExpr::_stype */
-/* 9: Attribute AOnceExpr::_if_true_flow_ctx */
-/* 10: Attribute AOnceExpr::_if_false_flow_ctx */
-/* 11: Attribute AOnceExpr::_n_expr */
-/* 12: Attribute AOnceExpr::_n_kwonce */
+/* 8: Attribute AOnceExpr::_is_typed */
+/* 9: Attribute AOnceExpr::_stype */
+/* 10: Attribute AOnceExpr::_if_true_flow_ctx */
+/* 11: Attribute AOnceExpr::_if_false_flow_ctx */
+/* 12: Attribute AOnceExpr::_n_expr */
+/* 13: Attribute AOnceExpr::_n_kwonce */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AOnceExpr[] = "init var of AOnceExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AOnceExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -66003,10 +68734,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AOnceExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AOnceExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -66015,7 +68750,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AOnceExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AOnceExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 13);
+  obj = alloc(sizeof(val_t) * 14);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AOnceExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -66035,20 +68770,20 @@ void CHECKNEW_parser___parser_nodes___AOnceExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -66059,13 +68794,13 @@ val_t NEW_AOnceExpr_parser___parser_prod___AOnceExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4371;
+  fra.me.line = 4601;
   fra.me.meth = LOCATE_NEW_AOnceExpr_parser___parser_prod___AOnceExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4371 */
+  /* parser/parser_prod.nit:4601 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AOnceExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AOnceExpr(fra.me.REG[0]);
   parser___parser_prod___AOnceExpr___empty_init(fra.me.REG[0], init_table);
@@ -66080,7 +68815,7 @@ val_t NEW_AOnceExpr_parser___parser_prod___AOnceExpr___init_aonceexpr(val_t p0,
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4373;
+  fra.me.line = 4603;
   fra.me.meth = LOCATE_NEW_AOnceExpr_parser___parser_prod___AOnceExpr___init_aonceexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -66090,7 +68825,7 @@ val_t NEW_AOnceExpr_parser___parser_prod___AOnceExpr___init_aonceexpr(val_t p0,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4373 */
+  /* parser/parser_prod.nit:4603 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AOnceExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AOnceExpr(fra.me.REG[2]);
   parser___parser_prod___AOnceExpr___init_aonceexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -66119,17 +68854,17 @@ val_t NEW_AOnceExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AOrExpr[94] = {
-  {(bigint) 4127 /* 0: Identity */},
-  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AOrExpr[95] = {
+  {(bigint) 4679 /* 0: Identity */},
+  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AOrExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AOrExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AOrExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AOrExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AOrExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AOrExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4003 /* 8: AOrExpr < ABoolExpr: superclass typecheck marker */},
-  {(bigint) 4127 /* 9: AOrExpr < AOrExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AOrExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4547 /* 8: AOrExpr < ABoolExpr: superclass typecheck marker */},
+  {(bigint) 4679 /* 9: AOrExpr < AOrExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -66194,13 +68929,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AOrExpr[94] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AOrExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___ABoolExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AOrExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AOrExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AOrExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -66208,10 +68944,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AOrExpr[94] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 0 /* 88: AOrExpr < ABoolExpr: superclass init_table position */},
+  {(bigint) 0 /* 89: AOrExpr < ABoolExpr: superclass init_table position */},
   {(bigint) parser___parser_prod___AOrExpr___empty_init},
   {(bigint) parser___parser_prod___AOrExpr___init_aorexpr},
-  {(bigint) 5 /* 91: AOrExpr < AOrExpr: superclass init_table position */},
+  {(bigint) 5 /* 92: AOrExpr < AOrExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AOrExpr___n_expr},
   {(bigint) parser___parser_nodes___AOrExpr___n_expr2},
 };
@@ -66221,16 +68957,17 @@ const classtable_elt_t VFT_parser___parser_nodes___AOrExpr[94] = {
 /* 3: Attribute AOrExpr::_location */
 /* 4: Attribute AOrExpr::_first_location */
 /* 5: Attribute AOrExpr::_last_location */
+/* 6: Attribute AOrExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AOrExpr::_is_typed */
-/* 8: Attribute AOrExpr::_stype */
-/* 9: Attribute AOrExpr::_if_true_flow_ctx */
-/* 10: Attribute AOrExpr::_if_false_flow_ctx */
-/* 11: Attribute AOrExpr::_n_expr */
-/* 12: Attribute AOrExpr::_n_expr2 */
+/* 8: Attribute AOrExpr::_is_typed */
+/* 9: Attribute AOrExpr::_stype */
+/* 10: Attribute AOrExpr::_if_true_flow_ctx */
+/* 11: Attribute AOrExpr::_if_false_flow_ctx */
+/* 12: Attribute AOrExpr::_n_expr */
+/* 13: Attribute AOrExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AOrExpr[] = "init var of AOrExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AOrExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -66238,10 +68975,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AOrExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AOrExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -66250,7 +68991,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AOrExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AOrExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 13);
+  obj = alloc(sizeof(val_t) * 14);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AOrExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -66294,13 +69035,13 @@ val_t NEW_AOrExpr_parser___parser_prod___AOrExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4492;
+  fra.me.line = 4722;
   fra.me.meth = LOCATE_NEW_AOrExpr_parser___parser_prod___AOrExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4492 */
+  /* parser/parser_prod.nit:4722 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AOrExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AOrExpr(fra.me.REG[0]);
   parser___parser_prod___AOrExpr___empty_init(fra.me.REG[0], init_table);
@@ -66315,7 +69056,7 @@ val_t NEW_AOrExpr_parser___parser_prod___AOrExpr___init_aorexpr(val_t p0, val_t
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4494;
+  fra.me.line = 4724;
   fra.me.meth = LOCATE_NEW_AOrExpr_parser___parser_prod___AOrExpr___init_aorexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -66325,7 +69066,7 @@ val_t NEW_AOrExpr_parser___parser_prod___AOrExpr___init_aorexpr(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4494 */
+  /* parser/parser_prod.nit:4724 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AOrExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AOrExpr(fra.me.REG[2]);
   parser___parser_prod___AOrExpr___init_aorexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -66354,17 +69095,17 @@ val_t NEW_AOrExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AAndExpr[94] = {
-  {(bigint) 4259 /* 0: Identity */},
-  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AAndExpr[95] = {
+  {(bigint) 4815 /* 0: Identity */},
+  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AAndExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AAndExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AAndExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AAndExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AAndExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AAndExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4003 /* 8: AAndExpr < ABoolExpr: superclass typecheck marker */},
-  {(bigint) 4259 /* 9: AAndExpr < AAndExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AAndExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4547 /* 8: AAndExpr < ABoolExpr: superclass typecheck marker */},
+  {(bigint) 4815 /* 9: AAndExpr < AAndExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -66429,13 +69170,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AAndExpr[94] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AAndExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___ABoolExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AAndExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AAndExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AAndExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -66443,10 +69185,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AAndExpr[94] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 0 /* 88: AAndExpr < ABoolExpr: superclass init_table position */},
+  {(bigint) 0 /* 89: AAndExpr < ABoolExpr: superclass init_table position */},
   {(bigint) parser___parser_prod___AAndExpr___empty_init},
   {(bigint) parser___parser_prod___AAndExpr___init_aandexpr},
-  {(bigint) 5 /* 91: AAndExpr < AAndExpr: superclass init_table position */},
+  {(bigint) 5 /* 92: AAndExpr < AAndExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAndExpr___n_expr},
   {(bigint) parser___parser_nodes___AAndExpr___n_expr2},
 };
@@ -66456,16 +69198,17 @@ const classtable_elt_t VFT_parser___parser_nodes___AAndExpr[94] = {
 /* 3: Attribute AAndExpr::_location */
 /* 4: Attribute AAndExpr::_first_location */
 /* 5: Attribute AAndExpr::_last_location */
+/* 6: Attribute AAndExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AAndExpr::_is_typed */
-/* 8: Attribute AAndExpr::_stype */
-/* 9: Attribute AAndExpr::_if_true_flow_ctx */
-/* 10: Attribute AAndExpr::_if_false_flow_ctx */
-/* 11: Attribute AAndExpr::_n_expr */
-/* 12: Attribute AAndExpr::_n_expr2 */
+/* 8: Attribute AAndExpr::_is_typed */
+/* 9: Attribute AAndExpr::_stype */
+/* 10: Attribute AAndExpr::_if_true_flow_ctx */
+/* 11: Attribute AAndExpr::_if_false_flow_ctx */
+/* 12: Attribute AAndExpr::_n_expr */
+/* 13: Attribute AAndExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAndExpr[] = "init var of AAndExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AAndExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -66473,10 +69216,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAndExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAndExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -66485,7 +69232,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAndExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AAndExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 13);
+  obj = alloc(sizeof(val_t) * 14);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AAndExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -66529,13 +69276,13 @@ val_t NEW_AAndExpr_parser___parser_prod___AAndExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4537;
+  fra.me.line = 4767;
   fra.me.meth = LOCATE_NEW_AAndExpr_parser___parser_prod___AAndExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4537 */
+  /* parser/parser_prod.nit:4767 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAndExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AAndExpr(fra.me.REG[0]);
   parser___parser_prod___AAndExpr___empty_init(fra.me.REG[0], init_table);
@@ -66550,7 +69297,7 @@ val_t NEW_AAndExpr_parser___parser_prod___AAndExpr___init_aandexpr(val_t p0, val
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4539;
+  fra.me.line = 4769;
   fra.me.meth = LOCATE_NEW_AAndExpr_parser___parser_prod___AAndExpr___init_aandexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -66560,7 +69307,7 @@ val_t NEW_AAndExpr_parser___parser_prod___AAndExpr___init_aandexpr(val_t p0, val
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4539 */
+  /* parser/parser_prod.nit:4769 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AAndExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AAndExpr(fra.me.REG[2]);
   parser___parser_prod___AAndExpr___init_aandexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -66589,17 +69336,17 @@ val_t NEW_AAndExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AOrElseExpr[94] = {
-  {(bigint) 4131 /* 0: Identity */},
-  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AOrElseExpr[95] = {
+  {(bigint) 4683 /* 0: Identity */},
+  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AOrElseExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AOrElseExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AOrElseExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AOrElseExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AOrElseExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AOrElseExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4003 /* 8: AOrElseExpr < ABoolExpr: superclass typecheck marker */},
-  {(bigint) 4131 /* 9: AOrElseExpr < AOrElseExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AOrElseExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4547 /* 8: AOrElseExpr < ABoolExpr: superclass typecheck marker */},
+  {(bigint) 4683 /* 9: AOrElseExpr < AOrElseExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -66664,13 +69411,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AOrElseExpr[94] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AOrElseExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___ABoolExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AOrElseExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AOrElseExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AOrElseExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -66678,10 +69426,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AOrElseExpr[94] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 0 /* 88: AOrElseExpr < ABoolExpr: superclass init_table position */},
+  {(bigint) 0 /* 89: AOrElseExpr < ABoolExpr: superclass init_table position */},
   {(bigint) parser___parser_prod___AOrElseExpr___empty_init},
   {(bigint) parser___parser_prod___AOrElseExpr___init_aorelseexpr},
-  {(bigint) 5 /* 91: AOrElseExpr < AOrElseExpr: superclass init_table position */},
+  {(bigint) 5 /* 92: AOrElseExpr < AOrElseExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AOrElseExpr___n_expr},
   {(bigint) parser___parser_nodes___AOrElseExpr___n_expr2},
 };
@@ -66691,16 +69439,17 @@ const classtable_elt_t VFT_parser___parser_nodes___AOrElseExpr[94] = {
 /* 3: Attribute AOrElseExpr::_location */
 /* 4: Attribute AOrElseExpr::_first_location */
 /* 5: Attribute AOrElseExpr::_last_location */
+/* 6: Attribute AOrElseExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AOrElseExpr::_is_typed */
-/* 8: Attribute AOrElseExpr::_stype */
-/* 9: Attribute AOrElseExpr::_if_true_flow_ctx */
-/* 10: Attribute AOrElseExpr::_if_false_flow_ctx */
-/* 11: Attribute AOrElseExpr::_n_expr */
-/* 12: Attribute AOrElseExpr::_n_expr2 */
+/* 8: Attribute AOrElseExpr::_is_typed */
+/* 9: Attribute AOrElseExpr::_stype */
+/* 10: Attribute AOrElseExpr::_if_true_flow_ctx */
+/* 11: Attribute AOrElseExpr::_if_false_flow_ctx */
+/* 12: Attribute AOrElseExpr::_n_expr */
+/* 13: Attribute AOrElseExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AOrElseExpr[] = "init var of AOrElseExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AOrElseExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -66708,10 +69457,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AOrElseExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AOrElseExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -66720,7 +69473,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AOrElseExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AOrElseExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 13);
+  obj = alloc(sizeof(val_t) * 14);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AOrElseExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -66764,13 +69517,13 @@ val_t NEW_AOrElseExpr_parser___parser_prod___AOrElseExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4582;
+  fra.me.line = 4812;
   fra.me.meth = LOCATE_NEW_AOrElseExpr_parser___parser_prod___AOrElseExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4582 */
+  /* parser/parser_prod.nit:4812 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AOrElseExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AOrElseExpr(fra.me.REG[0]);
   parser___parser_prod___AOrElseExpr___empty_init(fra.me.REG[0], init_table);
@@ -66785,7 +69538,7 @@ val_t NEW_AOrElseExpr_parser___parser_prod___AOrElseExpr___init_aorelseexpr(val_
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4584;
+  fra.me.line = 4814;
   fra.me.meth = LOCATE_NEW_AOrElseExpr_parser___parser_prod___AOrElseExpr___init_aorelseexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -66795,7 +69548,7 @@ val_t NEW_AOrElseExpr_parser___parser_prod___AOrElseExpr___init_aorelseexpr(val_
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4584 */
+  /* parser/parser_prod.nit:4814 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AOrElseExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AOrElseExpr(fra.me.REG[2]);
   parser___parser_prod___AOrElseExpr___init_aorelseexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -66824,17 +69577,17 @@ val_t NEW_AOrElseExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ANotExpr[94] = {
-  {(bigint) 4139 /* 0: Identity */},
-  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ANotExpr[95] = {
+  {(bigint) 4691 /* 0: Identity */},
+  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ANotExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ANotExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ANotExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ANotExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ANotExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: ANotExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4003 /* 8: ANotExpr < ABoolExpr: superclass typecheck marker */},
-  {(bigint) 4139 /* 9: ANotExpr < ANotExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ANotExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4547 /* 8: ANotExpr < ABoolExpr: superclass typecheck marker */},
+  {(bigint) 4691 /* 9: ANotExpr < ANotExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -66899,13 +69652,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ANotExpr[94] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: ANotExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___ABoolExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: ANotExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: ANotExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ANotExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -66913,10 +69667,10 @@ const classtable_elt_t VFT_parser___parser_nodes___ANotExpr[94] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 0 /* 88: ANotExpr < ABoolExpr: superclass init_table position */},
+  {(bigint) 0 /* 89: ANotExpr < ABoolExpr: superclass init_table position */},
   {(bigint) parser___parser_prod___ANotExpr___empty_init},
   {(bigint) parser___parser_prod___ANotExpr___init_anotexpr},
-  {(bigint) 5 /* 91: ANotExpr < ANotExpr: superclass init_table position */},
+  {(bigint) 5 /* 92: ANotExpr < ANotExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANotExpr___n_kwnot},
   {(bigint) parser___parser_nodes___ANotExpr___n_expr},
 };
@@ -66926,16 +69680,17 @@ const classtable_elt_t VFT_parser___parser_nodes___ANotExpr[94] = {
 /* 3: Attribute ANotExpr::_location */
 /* 4: Attribute ANotExpr::_first_location */
 /* 5: Attribute ANotExpr::_last_location */
+/* 6: Attribute ANotExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ANotExpr::_is_typed */
-/* 8: Attribute ANotExpr::_stype */
-/* 9: Attribute ANotExpr::_if_true_flow_ctx */
-/* 10: Attribute ANotExpr::_if_false_flow_ctx */
-/* 11: Attribute ANotExpr::_n_kwnot */
-/* 12: Attribute ANotExpr::_n_expr */
+/* 8: Attribute ANotExpr::_is_typed */
+/* 9: Attribute ANotExpr::_stype */
+/* 10: Attribute ANotExpr::_if_true_flow_ctx */
+/* 11: Attribute ANotExpr::_if_false_flow_ctx */
+/* 12: Attribute ANotExpr::_n_kwnot */
+/* 13: Attribute ANotExpr::_n_expr */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ANotExpr[] = "init var of ANotExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ANotExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -66943,10 +69698,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ANotExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ANotExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -66955,7 +69714,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ANotExpr(val_t p0){
 val_t NEW_parser___parser_nodes___ANotExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 13);
+  obj = alloc(sizeof(val_t) * 14);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ANotExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -66999,13 +69758,13 @@ val_t NEW_ANotExpr_parser___parser_prod___ANotExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4627;
+  fra.me.line = 4857;
   fra.me.meth = LOCATE_NEW_ANotExpr_parser___parser_prod___ANotExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4627 */
+  /* parser/parser_prod.nit:4857 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ANotExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ANotExpr(fra.me.REG[0]);
   parser___parser_prod___ANotExpr___empty_init(fra.me.REG[0], init_table);
@@ -67020,7 +69779,7 @@ val_t NEW_ANotExpr_parser___parser_prod___ANotExpr___init_anotexpr(val_t p0, val
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4629;
+  fra.me.line = 4859;
   fra.me.meth = LOCATE_NEW_ANotExpr_parser___parser_prod___ANotExpr___init_anotexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -67030,7 +69789,7 @@ val_t NEW_ANotExpr_parser___parser_prod___ANotExpr___init_anotexpr(val_t p0, val
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4629 */
+  /* parser/parser_prod.nit:4859 */
   fra.me.REG[2] = NEW_parser___parser_nodes___ANotExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ANotExpr(fra.me.REG[2]);
   parser___parser_prod___ANotExpr___init_anotexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -67059,21 +69818,21 @@ val_t NEW_ANotExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AEqExpr[126] = {
-  {(bigint) 4387 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AEqExpr[127] = {
+  {(bigint) 4943 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AEqExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AEqExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AEqExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AEqExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: AEqExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AEqExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AEqExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: AEqExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AEqExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: AEqExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: AEqExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: AEqExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4331 /* 12: AEqExpr < ABinopExpr: superclass typecheck marker */},
-  {(bigint) 4387 /* 13: AEqExpr < AEqExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: AEqExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: AEqExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: AEqExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4887 /* 12: AEqExpr < ABinopExpr: superclass typecheck marker */},
+  {(bigint) 4943 /* 13: AEqExpr < AEqExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -67134,13 +69893,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AEqExpr[126] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: AEqExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: AEqExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: AEqExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: AEqExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: AEqExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -67160,13 +69920,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AEqExpr[126] = {
   {(bigint) syntax___typing___ABinopExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: AEqExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: AEqExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: AEqExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: AEqExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___AEqExpr___name},
@@ -67174,18 +69934,18 @@ const classtable_elt_t VFT_parser___parser_nodes___AEqExpr[126] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: AEqExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: AEqExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) parser___parser_prod___ABinopExpr___empty_init},
   {(bigint) parser___parser_prod___ABinopExpr___init_abinopexpr},
-  {(bigint) 0 /* 119: AEqExpr < ABinopExpr: superclass init_table position */},
+  {(bigint) 0 /* 120: AEqExpr < ABinopExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABinopExpr___n_expr2},
   {(bigint) syntax___typing___ASendExpr___after_typing},
   {(bigint) syntax___typing___AEqExpr___try_to_isa},
   {(bigint) parser___parser_prod___AEqExpr___empty_init},
   {(bigint) parser___parser_prod___AEqExpr___init_aeqexpr},
-  {(bigint) 9 /* 125: AEqExpr < AEqExpr: superclass init_table position */},
+  {(bigint) 9 /* 126: AEqExpr < AEqExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -67193,21 +69953,22 @@ const classtable_elt_t VFT_parser___parser_nodes___AEqExpr[126] = {
 /* 3: Attribute AEqExpr::_location */
 /* 4: Attribute AEqExpr::_first_location */
 /* 5: Attribute AEqExpr::_last_location */
+/* 6: Attribute AEqExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AEqExpr::_is_typed */
-/* 8: Attribute AEqExpr::_stype */
-/* 9: Attribute AEqExpr::_if_true_flow_ctx */
-/* 10: Attribute AEqExpr::_if_false_flow_ctx */
-/* 11: Attribute AEqExpr::_prop_signature */
-/* 12: Attribute AEqExpr::_raw_arguments_cache */
+/* 8: Attribute AEqExpr::_is_typed */
+/* 9: Attribute AEqExpr::_stype */
+/* 10: Attribute AEqExpr::_if_true_flow_ctx */
+/* 11: Attribute AEqExpr::_if_false_flow_ctx */
+/* 12: Attribute AEqExpr::_prop_signature */
+/* 13: Attribute AEqExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute AEqExpr::_prop */
-/* 17: Attribute AEqExpr::_return_type */
-/* 18: Attribute AEqExpr::_n_expr */
-/* 19: Attribute AEqExpr::_n_closure_defs */
-/* 20: Attribute AEqExpr::_n_expr2 */
+/* 17: Attribute AEqExpr::_prop */
+/* 18: Attribute AEqExpr::_return_type */
+/* 19: Attribute AEqExpr::_n_expr */
+/* 20: Attribute AEqExpr::_n_closure_defs */
+/* 21: Attribute AEqExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AEqExpr[] = "init var of AEqExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AEqExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -67223,21 +69984,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AEqExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AEqExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AEqExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -67257,25 +70021,25 @@ void CHECKNEW_parser___parser_nodes___AEqExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -67286,13 +70050,13 @@ val_t NEW_AEqExpr_parser___parser_prod___ABinopExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4447;
+  fra.me.line = 4677;
   fra.me.meth = LOCATE_NEW_AEqExpr_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4447 */
+  /* parser/parser_prod.nit:4677 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AEqExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AEqExpr(fra.me.REG[0]);
   parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[0], init_table);
@@ -67307,13 +70071,13 @@ val_t NEW_AEqExpr_parser___parser_prod___AEqExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4672;
+  fra.me.line = 4902;
   fra.me.meth = LOCATE_NEW_AEqExpr_parser___parser_prod___AEqExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4672 */
+  /* parser/parser_prod.nit:4902 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AEqExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AEqExpr(fra.me.REG[0]);
   parser___parser_prod___AEqExpr___empty_init(fra.me.REG[0], init_table);
@@ -67328,7 +70092,7 @@ val_t NEW_AEqExpr_parser___parser_prod___AEqExpr___init_aeqexpr(val_t p0, val_t
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4674;
+  fra.me.line = 4904;
   fra.me.meth = LOCATE_NEW_AEqExpr_parser___parser_prod___AEqExpr___init_aeqexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -67338,7 +70102,7 @@ val_t NEW_AEqExpr_parser___parser_prod___AEqExpr___init_aeqexpr(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4674 */
+  /* parser/parser_prod.nit:4904 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AEqExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AEqExpr(fra.me.REG[2]);
   parser___parser_prod___AEqExpr___init_aeqexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -67374,13 +70138,13 @@ val_t NEW_AEqExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_AEqExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AEqExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AEqExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -67395,7 +70159,7 @@ val_t NEW_AEqExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0,
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4449;
+  fra.me.line = 4679;
   fra.me.meth = LOCATE_NEW_AEqExpr_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -67405,7 +70169,7 @@ val_t NEW_AEqExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4449 */
+  /* parser/parser_prod.nit:4679 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AEqExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AEqExpr(fra.me.REG[2]);
   parser___parser_prod___ABinopExpr___init_abinopexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -67420,7 +70184,7 @@ val_t NEW_AEqExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_AEqExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -67428,7 +70192,7 @@ val_t NEW_AEqExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AEqExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AEqExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -67436,17 +70200,17 @@ val_t NEW_AEqExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AEeExpr[94] = {
-  {(bigint) 4199 /* 0: Identity */},
-  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AEeExpr[95] = {
+  {(bigint) 4755 /* 0: Identity */},
+  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AEeExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AEeExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AEeExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AEeExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AEeExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AEeExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4003 /* 8: AEeExpr < ABoolExpr: superclass typecheck marker */},
-  {(bigint) 4199 /* 9: AEeExpr < AEeExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AEeExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4547 /* 8: AEeExpr < ABoolExpr: superclass typecheck marker */},
+  {(bigint) 4755 /* 9: AEeExpr < AEeExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -67511,13 +70275,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AEeExpr[94] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AEeExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___ABoolExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AEeExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AEeExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AEeExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -67525,10 +70290,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AEeExpr[94] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 0 /* 88: AEeExpr < ABoolExpr: superclass init_table position */},
+  {(bigint) 0 /* 89: AEeExpr < ABoolExpr: superclass init_table position */},
   {(bigint) parser___parser_prod___AEeExpr___empty_init},
   {(bigint) parser___parser_prod___AEeExpr___init_aeeexpr},
-  {(bigint) 5 /* 91: AEeExpr < AEeExpr: superclass init_table position */},
+  {(bigint) 5 /* 92: AEeExpr < AEeExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AEeExpr___n_expr},
   {(bigint) parser___parser_nodes___AEeExpr___n_expr2},
 };
@@ -67538,16 +70303,17 @@ const classtable_elt_t VFT_parser___parser_nodes___AEeExpr[94] = {
 /* 3: Attribute AEeExpr::_location */
 /* 4: Attribute AEeExpr::_first_location */
 /* 5: Attribute AEeExpr::_last_location */
+/* 6: Attribute AEeExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AEeExpr::_is_typed */
-/* 8: Attribute AEeExpr::_stype */
-/* 9: Attribute AEeExpr::_if_true_flow_ctx */
-/* 10: Attribute AEeExpr::_if_false_flow_ctx */
-/* 11: Attribute AEeExpr::_n_expr */
-/* 12: Attribute AEeExpr::_n_expr2 */
+/* 8: Attribute AEeExpr::_is_typed */
+/* 9: Attribute AEeExpr::_stype */
+/* 10: Attribute AEeExpr::_if_true_flow_ctx */
+/* 11: Attribute AEeExpr::_if_false_flow_ctx */
+/* 12: Attribute AEeExpr::_n_expr */
+/* 13: Attribute AEeExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AEeExpr[] = "init var of AEeExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AEeExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -67555,10 +70321,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AEeExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AEeExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -67567,7 +70337,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AEeExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AEeExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 13);
+  obj = alloc(sizeof(val_t) * 14);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AEeExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -67587,6 +70357,11 @@ void CHECKNEW_parser___parser_nodes___AEeExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -67597,11 +70372,6 @@ void CHECKNEW_parser___parser_nodes___AEeExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_AEeExpr_parser___parser_prod___AEeExpr___empty_init[] = "new AEeExpr parser_prod::AEeExpr::empty_init";
@@ -67611,13 +70381,13 @@ val_t NEW_AEeExpr_parser___parser_prod___AEeExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4717;
+  fra.me.line = 4947;
   fra.me.meth = LOCATE_NEW_AEeExpr_parser___parser_prod___AEeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4717 */
+  /* parser/parser_prod.nit:4947 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AEeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AEeExpr(fra.me.REG[0]);
   parser___parser_prod___AEeExpr___empty_init(fra.me.REG[0], init_table);
@@ -67632,7 +70402,7 @@ val_t NEW_AEeExpr_parser___parser_prod___AEeExpr___init_aeeexpr(val_t p0, val_t
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4719;
+  fra.me.line = 4949;
   fra.me.meth = LOCATE_NEW_AEeExpr_parser___parser_prod___AEeExpr___init_aeeexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -67642,7 +70412,7 @@ val_t NEW_AEeExpr_parser___parser_prod___AEeExpr___init_aeeexpr(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4719 */
+  /* parser/parser_prod.nit:4949 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AEeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AEeExpr(fra.me.REG[2]);
   parser___parser_prod___AEeExpr___init_aeeexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -67671,21 +70441,21 @@ val_t NEW_AEeExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ANeExpr[126] = {
-  {(bigint) 4355 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ANeExpr[127] = {
+  {(bigint) 4911 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ANeExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ANeExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ANeExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ANeExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: ANeExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: ANeExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ANeExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: ANeExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ANeExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: ANeExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: ANeExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: ANeExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4331 /* 12: ANeExpr < ABinopExpr: superclass typecheck marker */},
-  {(bigint) 4355 /* 13: ANeExpr < ANeExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: ANeExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: ANeExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: ANeExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4887 /* 12: ANeExpr < ABinopExpr: superclass typecheck marker */},
+  {(bigint) 4911 /* 13: ANeExpr < ANeExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -67746,13 +70516,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ANeExpr[126] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: ANeExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: ANeExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: ANeExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: ANeExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: ANeExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -67772,13 +70543,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ANeExpr[126] = {
   {(bigint) syntax___typing___ABinopExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: ANeExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: ANeExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: ANeExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: ANeExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___ANeExpr___name},
@@ -67786,18 +70557,18 @@ const classtable_elt_t VFT_parser___parser_nodes___ANeExpr[126] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: ANeExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: ANeExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) parser___parser_prod___ABinopExpr___empty_init},
   {(bigint) parser___parser_prod___ABinopExpr___init_abinopexpr},
-  {(bigint) 0 /* 119: ANeExpr < ABinopExpr: superclass init_table position */},
+  {(bigint) 0 /* 120: ANeExpr < ABinopExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABinopExpr___n_expr2},
   {(bigint) syntax___typing___ASendExpr___after_typing},
   {(bigint) syntax___typing___ANeExpr___try_to_isa},
   {(bigint) parser___parser_prod___ANeExpr___empty_init},
   {(bigint) parser___parser_prod___ANeExpr___init_aneexpr},
-  {(bigint) 9 /* 125: ANeExpr < ANeExpr: superclass init_table position */},
+  {(bigint) 9 /* 126: ANeExpr < ANeExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -67805,21 +70576,22 @@ const classtable_elt_t VFT_parser___parser_nodes___ANeExpr[126] = {
 /* 3: Attribute ANeExpr::_location */
 /* 4: Attribute ANeExpr::_first_location */
 /* 5: Attribute ANeExpr::_last_location */
+/* 6: Attribute ANeExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ANeExpr::_is_typed */
-/* 8: Attribute ANeExpr::_stype */
-/* 9: Attribute ANeExpr::_if_true_flow_ctx */
-/* 10: Attribute ANeExpr::_if_false_flow_ctx */
-/* 11: Attribute ANeExpr::_prop_signature */
-/* 12: Attribute ANeExpr::_raw_arguments_cache */
+/* 8: Attribute ANeExpr::_is_typed */
+/* 9: Attribute ANeExpr::_stype */
+/* 10: Attribute ANeExpr::_if_true_flow_ctx */
+/* 11: Attribute ANeExpr::_if_false_flow_ctx */
+/* 12: Attribute ANeExpr::_prop_signature */
+/* 13: Attribute ANeExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute ANeExpr::_prop */
-/* 17: Attribute ANeExpr::_return_type */
-/* 18: Attribute ANeExpr::_n_expr */
-/* 19: Attribute ANeExpr::_n_closure_defs */
-/* 20: Attribute ANeExpr::_n_expr2 */
+/* 17: Attribute ANeExpr::_prop */
+/* 18: Attribute ANeExpr::_return_type */
+/* 19: Attribute ANeExpr::_n_expr */
+/* 20: Attribute ANeExpr::_n_closure_defs */
+/* 21: Attribute ANeExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ANeExpr[] = "init var of ANeExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ANeExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -67835,21 +70607,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ANeExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ANeExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ANeExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -67869,25 +70644,25 @@ void CHECKNEW_parser___parser_nodes___ANeExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -67898,13 +70673,13 @@ val_t NEW_ANeExpr_parser___parser_prod___ABinopExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4447;
+  fra.me.line = 4677;
   fra.me.meth = LOCATE_NEW_ANeExpr_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4447 */
+  /* parser/parser_prod.nit:4677 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ANeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ANeExpr(fra.me.REG[0]);
   parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[0], init_table);
@@ -67919,13 +70694,13 @@ val_t NEW_ANeExpr_parser___parser_prod___ANeExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4762;
+  fra.me.line = 4992;
   fra.me.meth = LOCATE_NEW_ANeExpr_parser___parser_prod___ANeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4762 */
+  /* parser/parser_prod.nit:4992 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ANeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ANeExpr(fra.me.REG[0]);
   parser___parser_prod___ANeExpr___empty_init(fra.me.REG[0], init_table);
@@ -67940,7 +70715,7 @@ val_t NEW_ANeExpr_parser___parser_prod___ANeExpr___init_aneexpr(val_t p0, val_t
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4764;
+  fra.me.line = 4994;
   fra.me.meth = LOCATE_NEW_ANeExpr_parser___parser_prod___ANeExpr___init_aneexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -67950,7 +70725,7 @@ val_t NEW_ANeExpr_parser___parser_prod___ANeExpr___init_aneexpr(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4764 */
+  /* parser/parser_prod.nit:4994 */
   fra.me.REG[2] = NEW_parser___parser_nodes___ANeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ANeExpr(fra.me.REG[2]);
   parser___parser_prod___ANeExpr___init_aneexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -67986,13 +70761,13 @@ val_t NEW_ANeExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_ANeExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ANeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ANeExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -68007,7 +70782,7 @@ val_t NEW_ANeExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0,
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4449;
+  fra.me.line = 4679;
   fra.me.meth = LOCATE_NEW_ANeExpr_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -68017,7 +70792,7 @@ val_t NEW_ANeExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4449 */
+  /* parser/parser_prod.nit:4679 */
   fra.me.REG[2] = NEW_parser___parser_nodes___ANeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ANeExpr(fra.me.REG[2]);
   parser___parser_prod___ABinopExpr___init_abinopexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -68032,7 +70807,7 @@ val_t NEW_ANeExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_ANeExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -68040,7 +70815,7 @@ val_t NEW_ANeExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ANeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ANeExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -68048,21 +70823,21 @@ val_t NEW_ANeExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ALtExpr[124] = {
-  {(bigint) 4363 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ALtExpr[125] = {
+  {(bigint) 4919 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ALtExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ALtExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ALtExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ALtExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: ALtExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: ALtExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ALtExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: ALtExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ALtExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: ALtExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: ALtExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: ALtExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4331 /* 12: ALtExpr < ABinopExpr: superclass typecheck marker */},
-  {(bigint) 4363 /* 13: ALtExpr < ALtExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: ALtExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: ALtExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: ALtExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4887 /* 12: ALtExpr < ABinopExpr: superclass typecheck marker */},
+  {(bigint) 4919 /* 13: ALtExpr < ALtExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -68123,13 +70898,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ALtExpr[124] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: ALtExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: ALtExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: ALtExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: ALtExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: ALtExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -68149,13 +70925,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ALtExpr[124] = {
   {(bigint) syntax___typing___ABinopExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: ALtExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: ALtExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: ALtExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: ALtExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___ALtExpr___name},
@@ -68163,16 +70939,16 @@ const classtable_elt_t VFT_parser___parser_nodes___ALtExpr[124] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: ALtExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: ALtExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) parser___parser_prod___ABinopExpr___empty_init},
   {(bigint) parser___parser_prod___ABinopExpr___init_abinopexpr},
-  {(bigint) 0 /* 119: ALtExpr < ABinopExpr: superclass init_table position */},
+  {(bigint) 0 /* 120: ALtExpr < ABinopExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABinopExpr___n_expr2},
   {(bigint) parser___parser_prod___ALtExpr___empty_init},
   {(bigint) parser___parser_prod___ALtExpr___init_altexpr},
-  {(bigint) 9 /* 123: ALtExpr < ALtExpr: superclass init_table position */},
+  {(bigint) 9 /* 124: ALtExpr < ALtExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -68180,21 +70956,22 @@ const classtable_elt_t VFT_parser___parser_nodes___ALtExpr[124] = {
 /* 3: Attribute ALtExpr::_location */
 /* 4: Attribute ALtExpr::_first_location */
 /* 5: Attribute ALtExpr::_last_location */
+/* 6: Attribute ALtExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ALtExpr::_is_typed */
-/* 8: Attribute ALtExpr::_stype */
-/* 9: Attribute ALtExpr::_if_true_flow_ctx */
-/* 10: Attribute ALtExpr::_if_false_flow_ctx */
-/* 11: Attribute ALtExpr::_prop_signature */
-/* 12: Attribute ALtExpr::_raw_arguments_cache */
+/* 8: Attribute ALtExpr::_is_typed */
+/* 9: Attribute ALtExpr::_stype */
+/* 10: Attribute ALtExpr::_if_true_flow_ctx */
+/* 11: Attribute ALtExpr::_if_false_flow_ctx */
+/* 12: Attribute ALtExpr::_prop_signature */
+/* 13: Attribute ALtExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute ALtExpr::_prop */
-/* 17: Attribute ALtExpr::_return_type */
-/* 18: Attribute ALtExpr::_n_expr */
-/* 19: Attribute ALtExpr::_n_closure_defs */
-/* 20: Attribute ALtExpr::_n_expr2 */
+/* 17: Attribute ALtExpr::_prop */
+/* 18: Attribute ALtExpr::_return_type */
+/* 19: Attribute ALtExpr::_n_expr */
+/* 20: Attribute ALtExpr::_n_closure_defs */
+/* 21: Attribute ALtExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ALtExpr[] = "init var of ALtExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ALtExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -68210,21 +70987,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ALtExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ALtExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ALtExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -68244,25 +71024,25 @@ void CHECKNEW_parser___parser_nodes___ALtExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -68273,13 +71053,13 @@ val_t NEW_ALtExpr_parser___parser_prod___ABinopExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4447;
+  fra.me.line = 4677;
   fra.me.meth = LOCATE_NEW_ALtExpr_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4447 */
+  /* parser/parser_prod.nit:4677 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALtExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALtExpr(fra.me.REG[0]);
   parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[0], init_table);
@@ -68294,13 +71074,13 @@ val_t NEW_ALtExpr_parser___parser_prod___ALtExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4807;
+  fra.me.line = 5037;
   fra.me.meth = LOCATE_NEW_ALtExpr_parser___parser_prod___ALtExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4807 */
+  /* parser/parser_prod.nit:5037 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALtExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALtExpr(fra.me.REG[0]);
   parser___parser_prod___ALtExpr___empty_init(fra.me.REG[0], init_table);
@@ -68315,7 +71095,7 @@ val_t NEW_ALtExpr_parser___parser_prod___ALtExpr___init_altexpr(val_t p0, val_t
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4809;
+  fra.me.line = 5039;
   fra.me.meth = LOCATE_NEW_ALtExpr_parser___parser_prod___ALtExpr___init_altexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -68325,7 +71105,7 @@ val_t NEW_ALtExpr_parser___parser_prod___ALtExpr___init_altexpr(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4809 */
+  /* parser/parser_prod.nit:5039 */
   fra.me.REG[2] = NEW_parser___parser_nodes___ALtExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALtExpr(fra.me.REG[2]);
   parser___parser_prod___ALtExpr___init_altexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -68361,13 +71141,13 @@ val_t NEW_ALtExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_ALtExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALtExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALtExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -68382,7 +71162,7 @@ val_t NEW_ALtExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0,
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4449;
+  fra.me.line = 4679;
   fra.me.meth = LOCATE_NEW_ALtExpr_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -68392,7 +71172,7 @@ val_t NEW_ALtExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4449 */
+  /* parser/parser_prod.nit:4679 */
   fra.me.REG[2] = NEW_parser___parser_nodes___ALtExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALtExpr(fra.me.REG[2]);
   parser___parser_prod___ABinopExpr___init_abinopexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -68407,7 +71187,7 @@ val_t NEW_ALtExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_ALtExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -68415,7 +71195,7 @@ val_t NEW_ALtExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ALtExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALtExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -68423,21 +71203,21 @@ val_t NEW_ALtExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ALeExpr[124] = {
-  {(bigint) 4371 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ALeExpr[125] = {
+  {(bigint) 4927 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ALeExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ALeExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ALeExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ALeExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: ALeExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: ALeExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ALeExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: ALeExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ALeExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: ALeExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: ALeExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: ALeExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4331 /* 12: ALeExpr < ABinopExpr: superclass typecheck marker */},
-  {(bigint) 4371 /* 13: ALeExpr < ALeExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: ALeExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: ALeExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: ALeExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4887 /* 12: ALeExpr < ABinopExpr: superclass typecheck marker */},
+  {(bigint) 4927 /* 13: ALeExpr < ALeExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -68498,13 +71278,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ALeExpr[124] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: ALeExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: ALeExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: ALeExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: ALeExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: ALeExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -68524,13 +71305,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ALeExpr[124] = {
   {(bigint) syntax___typing___ABinopExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: ALeExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: ALeExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: ALeExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: ALeExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___ALeExpr___name},
@@ -68538,16 +71319,16 @@ const classtable_elt_t VFT_parser___parser_nodes___ALeExpr[124] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: ALeExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: ALeExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) parser___parser_prod___ABinopExpr___empty_init},
   {(bigint) parser___parser_prod___ABinopExpr___init_abinopexpr},
-  {(bigint) 0 /* 119: ALeExpr < ABinopExpr: superclass init_table position */},
+  {(bigint) 0 /* 120: ALeExpr < ABinopExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABinopExpr___n_expr2},
   {(bigint) parser___parser_prod___ALeExpr___empty_init},
   {(bigint) parser___parser_prod___ALeExpr___init_aleexpr},
-  {(bigint) 9 /* 123: ALeExpr < ALeExpr: superclass init_table position */},
+  {(bigint) 9 /* 124: ALeExpr < ALeExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -68555,21 +71336,22 @@ const classtable_elt_t VFT_parser___parser_nodes___ALeExpr[124] = {
 /* 3: Attribute ALeExpr::_location */
 /* 4: Attribute ALeExpr::_first_location */
 /* 5: Attribute ALeExpr::_last_location */
+/* 6: Attribute ALeExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ALeExpr::_is_typed */
-/* 8: Attribute ALeExpr::_stype */
-/* 9: Attribute ALeExpr::_if_true_flow_ctx */
-/* 10: Attribute ALeExpr::_if_false_flow_ctx */
-/* 11: Attribute ALeExpr::_prop_signature */
-/* 12: Attribute ALeExpr::_raw_arguments_cache */
+/* 8: Attribute ALeExpr::_is_typed */
+/* 9: Attribute ALeExpr::_stype */
+/* 10: Attribute ALeExpr::_if_true_flow_ctx */
+/* 11: Attribute ALeExpr::_if_false_flow_ctx */
+/* 12: Attribute ALeExpr::_prop_signature */
+/* 13: Attribute ALeExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute ALeExpr::_prop */
-/* 17: Attribute ALeExpr::_return_type */
-/* 18: Attribute ALeExpr::_n_expr */
-/* 19: Attribute ALeExpr::_n_closure_defs */
-/* 20: Attribute ALeExpr::_n_expr2 */
+/* 17: Attribute ALeExpr::_prop */
+/* 18: Attribute ALeExpr::_return_type */
+/* 19: Attribute ALeExpr::_n_expr */
+/* 20: Attribute ALeExpr::_n_closure_defs */
+/* 21: Attribute ALeExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ALeExpr[] = "init var of ALeExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ALeExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -68585,21 +71367,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ALeExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ALeExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ALeExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -68619,25 +71404,25 @@ void CHECKNEW_parser___parser_nodes___ALeExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -68648,13 +71433,13 @@ val_t NEW_ALeExpr_parser___parser_prod___ABinopExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4447;
+  fra.me.line = 4677;
   fra.me.meth = LOCATE_NEW_ALeExpr_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4447 */
+  /* parser/parser_prod.nit:4677 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALeExpr(fra.me.REG[0]);
   parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[0], init_table);
@@ -68669,13 +71454,13 @@ val_t NEW_ALeExpr_parser___parser_prod___ALeExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4852;
+  fra.me.line = 5082;
   fra.me.meth = LOCATE_NEW_ALeExpr_parser___parser_prod___ALeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4852 */
+  /* parser/parser_prod.nit:5082 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALeExpr(fra.me.REG[0]);
   parser___parser_prod___ALeExpr___empty_init(fra.me.REG[0], init_table);
@@ -68690,7 +71475,7 @@ val_t NEW_ALeExpr_parser___parser_prod___ALeExpr___init_aleexpr(val_t p0, val_t
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4854;
+  fra.me.line = 5084;
   fra.me.meth = LOCATE_NEW_ALeExpr_parser___parser_prod___ALeExpr___init_aleexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -68700,7 +71485,7 @@ val_t NEW_ALeExpr_parser___parser_prod___ALeExpr___init_aleexpr(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4854 */
+  /* parser/parser_prod.nit:5084 */
   fra.me.REG[2] = NEW_parser___parser_nodes___ALeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALeExpr(fra.me.REG[2]);
   parser___parser_prod___ALeExpr___init_aleexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -68736,13 +71521,13 @@ val_t NEW_ALeExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_ALeExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALeExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -68757,7 +71542,7 @@ val_t NEW_ALeExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0,
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4449;
+  fra.me.line = 4679;
   fra.me.meth = LOCATE_NEW_ALeExpr_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -68767,7 +71552,7 @@ val_t NEW_ALeExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4449 */
+  /* parser/parser_prod.nit:4679 */
   fra.me.REG[2] = NEW_parser___parser_nodes___ALeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALeExpr(fra.me.REG[2]);
   parser___parser_prod___ABinopExpr___init_abinopexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -68782,7 +71567,7 @@ val_t NEW_ALeExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_ALeExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -68790,7 +71575,7 @@ val_t NEW_ALeExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ALeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALeExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -68798,21 +71583,21 @@ val_t NEW_ALeExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ALlExpr[124] = {
-  {(bigint) 4367 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ALlExpr[125] = {
+  {(bigint) 4923 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ALlExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ALlExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ALlExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ALlExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: ALlExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: ALlExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ALlExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: ALlExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ALlExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: ALlExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: ALlExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: ALlExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4331 /* 12: ALlExpr < ABinopExpr: superclass typecheck marker */},
-  {(bigint) 4367 /* 13: ALlExpr < ALlExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: ALlExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: ALlExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: ALlExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4887 /* 12: ALlExpr < ABinopExpr: superclass typecheck marker */},
+  {(bigint) 4923 /* 13: ALlExpr < ALlExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -68873,13 +71658,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ALlExpr[124] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: ALlExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: ALlExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: ALlExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: ALlExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: ALlExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -68899,13 +71685,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ALlExpr[124] = {
   {(bigint) syntax___typing___ABinopExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: ALlExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: ALlExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: ALlExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: ALlExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___ALlExpr___name},
@@ -68913,16 +71699,16 @@ const classtable_elt_t VFT_parser___parser_nodes___ALlExpr[124] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: ALlExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: ALlExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) parser___parser_prod___ABinopExpr___empty_init},
   {(bigint) parser___parser_prod___ABinopExpr___init_abinopexpr},
-  {(bigint) 0 /* 119: ALlExpr < ABinopExpr: superclass init_table position */},
+  {(bigint) 0 /* 120: ALlExpr < ABinopExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABinopExpr___n_expr2},
   {(bigint) parser___parser_prod___ALlExpr___empty_init},
   {(bigint) parser___parser_prod___ALlExpr___init_allexpr},
-  {(bigint) 9 /* 123: ALlExpr < ALlExpr: superclass init_table position */},
+  {(bigint) 9 /* 124: ALlExpr < ALlExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -68930,21 +71716,22 @@ const classtable_elt_t VFT_parser___parser_nodes___ALlExpr[124] = {
 /* 3: Attribute ALlExpr::_location */
 /* 4: Attribute ALlExpr::_first_location */
 /* 5: Attribute ALlExpr::_last_location */
+/* 6: Attribute ALlExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ALlExpr::_is_typed */
-/* 8: Attribute ALlExpr::_stype */
-/* 9: Attribute ALlExpr::_if_true_flow_ctx */
-/* 10: Attribute ALlExpr::_if_false_flow_ctx */
-/* 11: Attribute ALlExpr::_prop_signature */
-/* 12: Attribute ALlExpr::_raw_arguments_cache */
+/* 8: Attribute ALlExpr::_is_typed */
+/* 9: Attribute ALlExpr::_stype */
+/* 10: Attribute ALlExpr::_if_true_flow_ctx */
+/* 11: Attribute ALlExpr::_if_false_flow_ctx */
+/* 12: Attribute ALlExpr::_prop_signature */
+/* 13: Attribute ALlExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute ALlExpr::_prop */
-/* 17: Attribute ALlExpr::_return_type */
-/* 18: Attribute ALlExpr::_n_expr */
-/* 19: Attribute ALlExpr::_n_closure_defs */
-/* 20: Attribute ALlExpr::_n_expr2 */
+/* 17: Attribute ALlExpr::_prop */
+/* 18: Attribute ALlExpr::_return_type */
+/* 19: Attribute ALlExpr::_n_expr */
+/* 20: Attribute ALlExpr::_n_closure_defs */
+/* 21: Attribute ALlExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ALlExpr[] = "init var of ALlExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ALlExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -68960,21 +71747,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ALlExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ALlExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ALlExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -68994,25 +71784,25 @@ void CHECKNEW_parser___parser_nodes___ALlExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -69023,13 +71813,13 @@ val_t NEW_ALlExpr_parser___parser_prod___ABinopExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4447;
+  fra.me.line = 4677;
   fra.me.meth = LOCATE_NEW_ALlExpr_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4447 */
+  /* parser/parser_prod.nit:4677 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALlExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALlExpr(fra.me.REG[0]);
   parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[0], init_table);
@@ -69044,13 +71834,13 @@ val_t NEW_ALlExpr_parser___parser_prod___ALlExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4897;
+  fra.me.line = 5127;
   fra.me.meth = LOCATE_NEW_ALlExpr_parser___parser_prod___ALlExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4897 */
+  /* parser/parser_prod.nit:5127 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALlExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALlExpr(fra.me.REG[0]);
   parser___parser_prod___ALlExpr___empty_init(fra.me.REG[0], init_table);
@@ -69065,7 +71855,7 @@ val_t NEW_ALlExpr_parser___parser_prod___ALlExpr___init_allexpr(val_t p0, val_t
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4899;
+  fra.me.line = 5129;
   fra.me.meth = LOCATE_NEW_ALlExpr_parser___parser_prod___ALlExpr___init_allexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -69075,7 +71865,7 @@ val_t NEW_ALlExpr_parser___parser_prod___ALlExpr___init_allexpr(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4899 */
+  /* parser/parser_prod.nit:5129 */
   fra.me.REG[2] = NEW_parser___parser_nodes___ALlExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALlExpr(fra.me.REG[2]);
   parser___parser_prod___ALlExpr___init_allexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -69111,13 +71901,13 @@ val_t NEW_ALlExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_ALlExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ALlExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALlExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -69132,7 +71922,7 @@ val_t NEW_ALlExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0,
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4449;
+  fra.me.line = 4679;
   fra.me.meth = LOCATE_NEW_ALlExpr_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -69142,7 +71932,7 @@ val_t NEW_ALlExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4449 */
+  /* parser/parser_prod.nit:4679 */
   fra.me.REG[2] = NEW_parser___parser_nodes___ALlExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALlExpr(fra.me.REG[2]);
   parser___parser_prod___ABinopExpr___init_abinopexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -69157,7 +71947,7 @@ val_t NEW_ALlExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_ALlExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -69165,7 +71955,7 @@ val_t NEW_ALlExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ALlExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ALlExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -69173,21 +71963,21 @@ val_t NEW_ALlExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AGtExpr[124] = {
-  {(bigint) 4375 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AGtExpr[125] = {
+  {(bigint) 4931 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AGtExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AGtExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AGtExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AGtExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: AGtExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AGtExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AGtExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: AGtExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AGtExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: AGtExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: AGtExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: AGtExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4331 /* 12: AGtExpr < ABinopExpr: superclass typecheck marker */},
-  {(bigint) 4375 /* 13: AGtExpr < AGtExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: AGtExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: AGtExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: AGtExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4887 /* 12: AGtExpr < ABinopExpr: superclass typecheck marker */},
+  {(bigint) 4931 /* 13: AGtExpr < AGtExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -69248,13 +72038,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AGtExpr[124] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: AGtExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: AGtExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: AGtExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: AGtExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: AGtExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -69274,13 +72065,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AGtExpr[124] = {
   {(bigint) syntax___typing___ABinopExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: AGtExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: AGtExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: AGtExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: AGtExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___AGtExpr___name},
@@ -69288,16 +72079,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AGtExpr[124] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: AGtExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: AGtExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) parser___parser_prod___ABinopExpr___empty_init},
   {(bigint) parser___parser_prod___ABinopExpr___init_abinopexpr},
-  {(bigint) 0 /* 119: AGtExpr < ABinopExpr: superclass init_table position */},
+  {(bigint) 0 /* 120: AGtExpr < ABinopExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABinopExpr___n_expr2},
   {(bigint) parser___parser_prod___AGtExpr___empty_init},
   {(bigint) parser___parser_prod___AGtExpr___init_agtexpr},
-  {(bigint) 9 /* 123: AGtExpr < AGtExpr: superclass init_table position */},
+  {(bigint) 9 /* 124: AGtExpr < AGtExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -69305,21 +72096,22 @@ const classtable_elt_t VFT_parser___parser_nodes___AGtExpr[124] = {
 /* 3: Attribute AGtExpr::_location */
 /* 4: Attribute AGtExpr::_first_location */
 /* 5: Attribute AGtExpr::_last_location */
+/* 6: Attribute AGtExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AGtExpr::_is_typed */
-/* 8: Attribute AGtExpr::_stype */
-/* 9: Attribute AGtExpr::_if_true_flow_ctx */
-/* 10: Attribute AGtExpr::_if_false_flow_ctx */
-/* 11: Attribute AGtExpr::_prop_signature */
-/* 12: Attribute AGtExpr::_raw_arguments_cache */
+/* 8: Attribute AGtExpr::_is_typed */
+/* 9: Attribute AGtExpr::_stype */
+/* 10: Attribute AGtExpr::_if_true_flow_ctx */
+/* 11: Attribute AGtExpr::_if_false_flow_ctx */
+/* 12: Attribute AGtExpr::_prop_signature */
+/* 13: Attribute AGtExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute AGtExpr::_prop */
-/* 17: Attribute AGtExpr::_return_type */
-/* 18: Attribute AGtExpr::_n_expr */
-/* 19: Attribute AGtExpr::_n_closure_defs */
-/* 20: Attribute AGtExpr::_n_expr2 */
+/* 17: Attribute AGtExpr::_prop */
+/* 18: Attribute AGtExpr::_return_type */
+/* 19: Attribute AGtExpr::_n_expr */
+/* 20: Attribute AGtExpr::_n_closure_defs */
+/* 21: Attribute AGtExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AGtExpr[] = "init var of AGtExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AGtExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -69335,21 +72127,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AGtExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AGtExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AGtExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -69369,25 +72164,25 @@ void CHECKNEW_parser___parser_nodes___AGtExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -69398,13 +72193,13 @@ val_t NEW_AGtExpr_parser___parser_prod___ABinopExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4447;
+  fra.me.line = 4677;
   fra.me.meth = LOCATE_NEW_AGtExpr_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4447 */
+  /* parser/parser_prod.nit:4677 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AGtExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGtExpr(fra.me.REG[0]);
   parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[0], init_table);
@@ -69419,13 +72214,13 @@ val_t NEW_AGtExpr_parser___parser_prod___AGtExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4942;
+  fra.me.line = 5172;
   fra.me.meth = LOCATE_NEW_AGtExpr_parser___parser_prod___AGtExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4942 */
+  /* parser/parser_prod.nit:5172 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AGtExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGtExpr(fra.me.REG[0]);
   parser___parser_prod___AGtExpr___empty_init(fra.me.REG[0], init_table);
@@ -69440,7 +72235,7 @@ val_t NEW_AGtExpr_parser___parser_prod___AGtExpr___init_agtexpr(val_t p0, val_t
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4944;
+  fra.me.line = 5174;
   fra.me.meth = LOCATE_NEW_AGtExpr_parser___parser_prod___AGtExpr___init_agtexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -69450,7 +72245,7 @@ val_t NEW_AGtExpr_parser___parser_prod___AGtExpr___init_agtexpr(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4944 */
+  /* parser/parser_prod.nit:5174 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AGtExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGtExpr(fra.me.REG[2]);
   parser___parser_prod___AGtExpr___init_agtexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -69486,13 +72281,13 @@ val_t NEW_AGtExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_AGtExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AGtExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGtExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -69507,7 +72302,7 @@ val_t NEW_AGtExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0,
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4449;
+  fra.me.line = 4679;
   fra.me.meth = LOCATE_NEW_AGtExpr_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -69517,7 +72312,7 @@ val_t NEW_AGtExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4449 */
+  /* parser/parser_prod.nit:4679 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AGtExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGtExpr(fra.me.REG[2]);
   parser___parser_prod___ABinopExpr___init_abinopexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -69532,7 +72327,7 @@ val_t NEW_AGtExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_AGtExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -69540,7 +72335,7 @@ val_t NEW_AGtExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AGtExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGtExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -69548,21 +72343,21 @@ val_t NEW_AGtExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AGeExpr[124] = {
-  {(bigint) 4383 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AGeExpr[125] = {
+  {(bigint) 4939 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AGeExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AGeExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AGeExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AGeExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: AGeExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AGeExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AGeExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: AGeExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AGeExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: AGeExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: AGeExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: AGeExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4331 /* 12: AGeExpr < ABinopExpr: superclass typecheck marker */},
-  {(bigint) 4383 /* 13: AGeExpr < AGeExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: AGeExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: AGeExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: AGeExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4887 /* 12: AGeExpr < ABinopExpr: superclass typecheck marker */},
+  {(bigint) 4939 /* 13: AGeExpr < AGeExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -69623,13 +72418,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AGeExpr[124] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: AGeExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: AGeExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: AGeExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: AGeExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: AGeExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -69649,13 +72445,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AGeExpr[124] = {
   {(bigint) syntax___typing___ABinopExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: AGeExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: AGeExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: AGeExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: AGeExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___AGeExpr___name},
@@ -69663,16 +72459,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AGeExpr[124] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: AGeExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: AGeExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) parser___parser_prod___ABinopExpr___empty_init},
   {(bigint) parser___parser_prod___ABinopExpr___init_abinopexpr},
-  {(bigint) 0 /* 119: AGeExpr < ABinopExpr: superclass init_table position */},
+  {(bigint) 0 /* 120: AGeExpr < ABinopExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABinopExpr___n_expr2},
   {(bigint) parser___parser_prod___AGeExpr___empty_init},
   {(bigint) parser___parser_prod___AGeExpr___init_ageexpr},
-  {(bigint) 9 /* 123: AGeExpr < AGeExpr: superclass init_table position */},
+  {(bigint) 9 /* 124: AGeExpr < AGeExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -69680,21 +72476,22 @@ const classtable_elt_t VFT_parser___parser_nodes___AGeExpr[124] = {
 /* 3: Attribute AGeExpr::_location */
 /* 4: Attribute AGeExpr::_first_location */
 /* 5: Attribute AGeExpr::_last_location */
+/* 6: Attribute AGeExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AGeExpr::_is_typed */
-/* 8: Attribute AGeExpr::_stype */
-/* 9: Attribute AGeExpr::_if_true_flow_ctx */
-/* 10: Attribute AGeExpr::_if_false_flow_ctx */
-/* 11: Attribute AGeExpr::_prop_signature */
-/* 12: Attribute AGeExpr::_raw_arguments_cache */
+/* 8: Attribute AGeExpr::_is_typed */
+/* 9: Attribute AGeExpr::_stype */
+/* 10: Attribute AGeExpr::_if_true_flow_ctx */
+/* 11: Attribute AGeExpr::_if_false_flow_ctx */
+/* 12: Attribute AGeExpr::_prop_signature */
+/* 13: Attribute AGeExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute AGeExpr::_prop */
-/* 17: Attribute AGeExpr::_return_type */
-/* 18: Attribute AGeExpr::_n_expr */
-/* 19: Attribute AGeExpr::_n_closure_defs */
-/* 20: Attribute AGeExpr::_n_expr2 */
+/* 17: Attribute AGeExpr::_prop */
+/* 18: Attribute AGeExpr::_return_type */
+/* 19: Attribute AGeExpr::_n_expr */
+/* 20: Attribute AGeExpr::_n_closure_defs */
+/* 21: Attribute AGeExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AGeExpr[] = "init var of AGeExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AGeExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -69710,21 +72507,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AGeExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AGeExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AGeExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -69744,25 +72544,25 @@ void CHECKNEW_parser___parser_nodes___AGeExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -69773,13 +72573,13 @@ val_t NEW_AGeExpr_parser___parser_prod___ABinopExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4447;
+  fra.me.line = 4677;
   fra.me.meth = LOCATE_NEW_AGeExpr_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4447 */
+  /* parser/parser_prod.nit:4677 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AGeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGeExpr(fra.me.REG[0]);
   parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[0], init_table);
@@ -69794,13 +72594,13 @@ val_t NEW_AGeExpr_parser___parser_prod___AGeExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4987;
+  fra.me.line = 5217;
   fra.me.meth = LOCATE_NEW_AGeExpr_parser___parser_prod___AGeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4987 */
+  /* parser/parser_prod.nit:5217 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AGeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGeExpr(fra.me.REG[0]);
   parser___parser_prod___AGeExpr___empty_init(fra.me.REG[0], init_table);
@@ -69815,7 +72615,7 @@ val_t NEW_AGeExpr_parser___parser_prod___AGeExpr___init_ageexpr(val_t p0, val_t
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4989;
+  fra.me.line = 5219;
   fra.me.meth = LOCATE_NEW_AGeExpr_parser___parser_prod___AGeExpr___init_ageexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -69825,7 +72625,7 @@ val_t NEW_AGeExpr_parser___parser_prod___AGeExpr___init_ageexpr(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4989 */
+  /* parser/parser_prod.nit:5219 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AGeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGeExpr(fra.me.REG[2]);
   parser___parser_prod___AGeExpr___init_ageexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -69861,13 +72661,13 @@ val_t NEW_AGeExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_AGeExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AGeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGeExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -69882,7 +72682,7 @@ val_t NEW_AGeExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0,
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4449;
+  fra.me.line = 4679;
   fra.me.meth = LOCATE_NEW_AGeExpr_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -69892,7 +72692,7 @@ val_t NEW_AGeExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4449 */
+  /* parser/parser_prod.nit:4679 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AGeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGeExpr(fra.me.REG[2]);
   parser___parser_prod___ABinopExpr___init_abinopexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -69907,7 +72707,7 @@ val_t NEW_AGeExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_AGeExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -69915,7 +72715,7 @@ val_t NEW_AGeExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AGeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGeExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -69923,21 +72723,21 @@ val_t NEW_AGeExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AGgExpr[124] = {
-  {(bigint) 4379 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AGgExpr[125] = {
+  {(bigint) 4935 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AGgExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AGgExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AGgExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AGgExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: AGgExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AGgExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AGgExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: AGgExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AGgExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: AGgExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: AGgExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: AGgExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4331 /* 12: AGgExpr < ABinopExpr: superclass typecheck marker */},
-  {(bigint) 4379 /* 13: AGgExpr < AGgExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: AGgExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: AGgExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: AGgExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4887 /* 12: AGgExpr < ABinopExpr: superclass typecheck marker */},
+  {(bigint) 4935 /* 13: AGgExpr < AGgExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -69998,13 +72798,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AGgExpr[124] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: AGgExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: AGgExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: AGgExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: AGgExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: AGgExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -70024,13 +72825,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AGgExpr[124] = {
   {(bigint) syntax___typing___ABinopExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: AGgExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: AGgExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: AGgExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: AGgExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___AGgExpr___name},
@@ -70038,16 +72839,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AGgExpr[124] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: AGgExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: AGgExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) parser___parser_prod___ABinopExpr___empty_init},
   {(bigint) parser___parser_prod___ABinopExpr___init_abinopexpr},
-  {(bigint) 0 /* 119: AGgExpr < ABinopExpr: superclass init_table position */},
+  {(bigint) 0 /* 120: AGgExpr < ABinopExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABinopExpr___n_expr2},
   {(bigint) parser___parser_prod___AGgExpr___empty_init},
   {(bigint) parser___parser_prod___AGgExpr___init_aggexpr},
-  {(bigint) 9 /* 123: AGgExpr < AGgExpr: superclass init_table position */},
+  {(bigint) 9 /* 124: AGgExpr < AGgExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -70055,21 +72856,22 @@ const classtable_elt_t VFT_parser___parser_nodes___AGgExpr[124] = {
 /* 3: Attribute AGgExpr::_location */
 /* 4: Attribute AGgExpr::_first_location */
 /* 5: Attribute AGgExpr::_last_location */
+/* 6: Attribute AGgExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AGgExpr::_is_typed */
-/* 8: Attribute AGgExpr::_stype */
-/* 9: Attribute AGgExpr::_if_true_flow_ctx */
-/* 10: Attribute AGgExpr::_if_false_flow_ctx */
-/* 11: Attribute AGgExpr::_prop_signature */
-/* 12: Attribute AGgExpr::_raw_arguments_cache */
+/* 8: Attribute AGgExpr::_is_typed */
+/* 9: Attribute AGgExpr::_stype */
+/* 10: Attribute AGgExpr::_if_true_flow_ctx */
+/* 11: Attribute AGgExpr::_if_false_flow_ctx */
+/* 12: Attribute AGgExpr::_prop_signature */
+/* 13: Attribute AGgExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute AGgExpr::_prop */
-/* 17: Attribute AGgExpr::_return_type */
-/* 18: Attribute AGgExpr::_n_expr */
-/* 19: Attribute AGgExpr::_n_closure_defs */
-/* 20: Attribute AGgExpr::_n_expr2 */
+/* 17: Attribute AGgExpr::_prop */
+/* 18: Attribute AGgExpr::_return_type */
+/* 19: Attribute AGgExpr::_n_expr */
+/* 20: Attribute AGgExpr::_n_closure_defs */
+/* 21: Attribute AGgExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AGgExpr[] = "init var of AGgExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AGgExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -70085,21 +72887,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AGgExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AGgExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AGgExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -70119,25 +72924,25 @@ void CHECKNEW_parser___parser_nodes___AGgExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -70148,13 +72953,13 @@ val_t NEW_AGgExpr_parser___parser_prod___ABinopExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4447;
+  fra.me.line = 4677;
   fra.me.meth = LOCATE_NEW_AGgExpr_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4447 */
+  /* parser/parser_prod.nit:4677 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AGgExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGgExpr(fra.me.REG[0]);
   parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[0], init_table);
@@ -70169,13 +72974,13 @@ val_t NEW_AGgExpr_parser___parser_prod___AGgExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5032;
+  fra.me.line = 5262;
   fra.me.meth = LOCATE_NEW_AGgExpr_parser___parser_prod___AGgExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5032 */
+  /* parser/parser_prod.nit:5262 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AGgExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGgExpr(fra.me.REG[0]);
   parser___parser_prod___AGgExpr___empty_init(fra.me.REG[0], init_table);
@@ -70190,7 +72995,7 @@ val_t NEW_AGgExpr_parser___parser_prod___AGgExpr___init_aggexpr(val_t p0, val_t
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5034;
+  fra.me.line = 5264;
   fra.me.meth = LOCATE_NEW_AGgExpr_parser___parser_prod___AGgExpr___init_aggexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -70200,7 +73005,7 @@ val_t NEW_AGgExpr_parser___parser_prod___AGgExpr___init_aggexpr(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5034 */
+  /* parser/parser_prod.nit:5264 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AGgExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGgExpr(fra.me.REG[2]);
   parser___parser_prod___AGgExpr___init_aggexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -70236,13 +73041,13 @@ val_t NEW_AGgExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_AGgExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AGgExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGgExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -70257,7 +73062,7 @@ val_t NEW_AGgExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0,
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4449;
+  fra.me.line = 4679;
   fra.me.meth = LOCATE_NEW_AGgExpr_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -70267,7 +73072,7 @@ val_t NEW_AGgExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4449 */
+  /* parser/parser_prod.nit:4679 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AGgExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGgExpr(fra.me.REG[2]);
   parser___parser_prod___ABinopExpr___init_abinopexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -70282,7 +73087,7 @@ val_t NEW_AGgExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_AGgExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -70290,7 +73095,7 @@ val_t NEW_AGgExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AGgExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AGgExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -70298,17 +73103,17 @@ val_t NEW_AGgExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AIsaExpr[94] = {
-  {(bigint) 4159 /* 0: Identity */},
-  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AIsaExpr[95] = {
+  {(bigint) 4715 /* 0: Identity */},
+  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AIsaExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AIsaExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AIsaExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AIsaExpr < Prod: superclass typecheck marker */},
-  {(bigint) 3763 /* 6: AIsaExpr < ATypeCheckExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AIsaExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4003 /* 8: AIsaExpr < ABoolExpr: superclass typecheck marker */},
-  {(bigint) 4159 /* 9: AIsaExpr < AIsaExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AIsaExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4275 /* 6: AIsaExpr < ATypeCheckExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AIsaExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4547 /* 8: AIsaExpr < ABoolExpr: superclass typecheck marker */},
+  {(bigint) 4715 /* 9: AIsaExpr < AIsaExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -70373,13 +73178,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AIsaExpr[94] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AIsaExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
-  {(bigint) 0 /* 74: AIsaExpr < ATypeCheckExpr: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 0 /* 75: AIsaExpr < ATypeCheckExpr: superclass init_table position */},
   {(bigint) syntax___typing___ATypeCheckExpr___check_expr_cast},
   {(bigint) syntax___mmbuilder___ABoolExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AIsaExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AIsaExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AIsaExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -70387,10 +73193,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AIsaExpr[94] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 5 /* 88: AIsaExpr < ABoolExpr: superclass init_table position */},
+  {(bigint) 5 /* 89: AIsaExpr < ABoolExpr: superclass init_table position */},
   {(bigint) parser___parser_prod___AIsaExpr___empty_init},
   {(bigint) parser___parser_prod___AIsaExpr___init_aisaexpr},
-  {(bigint) 6 /* 91: AIsaExpr < AIsaExpr: superclass init_table position */},
+  {(bigint) 6 /* 92: AIsaExpr < AIsaExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AIsaExpr___n_expr},
   {(bigint) parser___parser_nodes___AIsaExpr___n_type},
 };
@@ -70400,16 +73206,17 @@ const classtable_elt_t VFT_parser___parser_nodes___AIsaExpr[94] = {
 /* 3: Attribute AIsaExpr::_location */
 /* 4: Attribute AIsaExpr::_first_location */
 /* 5: Attribute AIsaExpr::_last_location */
+/* 6: Attribute AIsaExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AIsaExpr::_is_typed */
-/* 8: Attribute AIsaExpr::_stype */
-/* 9: Attribute AIsaExpr::_if_true_flow_ctx */
-/* 10: Attribute AIsaExpr::_if_false_flow_ctx */
-/* 11: Attribute AIsaExpr::_n_expr */
-/* 12: Attribute AIsaExpr::_n_type */
+/* 8: Attribute AIsaExpr::_is_typed */
+/* 9: Attribute AIsaExpr::_stype */
+/* 10: Attribute AIsaExpr::_if_true_flow_ctx */
+/* 11: Attribute AIsaExpr::_if_false_flow_ctx */
+/* 12: Attribute AIsaExpr::_n_expr */
+/* 13: Attribute AIsaExpr::_n_type */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AIsaExpr[] = "init var of AIsaExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AIsaExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -70417,10 +73224,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AIsaExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AIsaExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -70429,7 +73240,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AIsaExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AIsaExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 13);
+  obj = alloc(sizeof(val_t) * 14);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AIsaExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -70473,13 +73284,13 @@ val_t NEW_AIsaExpr_parser___parser_prod___AIsaExpr___empty_init(void){
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5077;
+  fra.me.line = 5307;
   fra.me.meth = LOCATE_NEW_AIsaExpr_parser___parser_prod___AIsaExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5077 */
+  /* parser/parser_prod.nit:5307 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AIsaExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AIsaExpr(fra.me.REG[0]);
   parser___parser_prod___AIsaExpr___empty_init(fra.me.REG[0], init_table);
@@ -70494,7 +73305,7 @@ val_t NEW_AIsaExpr_parser___parser_prod___AIsaExpr___init_aisaexpr(val_t p0, val
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5079;
+  fra.me.line = 5309;
   fra.me.meth = LOCATE_NEW_AIsaExpr_parser___parser_prod___AIsaExpr___init_aisaexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -70504,7 +73315,7 @@ val_t NEW_AIsaExpr_parser___parser_prod___AIsaExpr___init_aisaexpr(val_t p0, val
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5079 */
+  /* parser/parser_prod.nit:5309 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AIsaExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AIsaExpr(fra.me.REG[2]);
   parser___parser_prod___AIsaExpr___init_aisaexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -70533,21 +73344,21 @@ val_t NEW_AIsaExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___APlusExpr[124] = {
-  {(bigint) 4347 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___APlusExpr[125] = {
+  {(bigint) 4903 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "APlusExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: APlusExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: APlusExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: APlusExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: APlusExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: APlusExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: APlusExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: APlusExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: APlusExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: APlusExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: APlusExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: APlusExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4331 /* 12: APlusExpr < ABinopExpr: superclass typecheck marker */},
-  {(bigint) 4347 /* 13: APlusExpr < APlusExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: APlusExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: APlusExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: APlusExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4887 /* 12: APlusExpr < ABinopExpr: superclass typecheck marker */},
+  {(bigint) 4903 /* 13: APlusExpr < APlusExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -70608,13 +73419,14 @@ const classtable_elt_t VFT_parser___parser_nodes___APlusExpr[124] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: APlusExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: APlusExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: APlusExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: APlusExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: APlusExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -70634,13 +73446,13 @@ const classtable_elt_t VFT_parser___parser_nodes___APlusExpr[124] = {
   {(bigint) syntax___typing___ABinopExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: APlusExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: APlusExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: APlusExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: APlusExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___APlusExpr___name},
@@ -70648,16 +73460,16 @@ const classtable_elt_t VFT_parser___parser_nodes___APlusExpr[124] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: APlusExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: APlusExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) parser___parser_prod___ABinopExpr___empty_init},
   {(bigint) parser___parser_prod___ABinopExpr___init_abinopexpr},
-  {(bigint) 0 /* 119: APlusExpr < ABinopExpr: superclass init_table position */},
+  {(bigint) 0 /* 120: APlusExpr < ABinopExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABinopExpr___n_expr2},
   {(bigint) parser___parser_prod___APlusExpr___empty_init},
   {(bigint) parser___parser_prod___APlusExpr___init_aplusexpr},
-  {(bigint) 9 /* 123: APlusExpr < APlusExpr: superclass init_table position */},
+  {(bigint) 9 /* 124: APlusExpr < APlusExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -70665,21 +73477,22 @@ const classtable_elt_t VFT_parser___parser_nodes___APlusExpr[124] = {
 /* 3: Attribute APlusExpr::_location */
 /* 4: Attribute APlusExpr::_first_location */
 /* 5: Attribute APlusExpr::_last_location */
+/* 6: Attribute APlusExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute APlusExpr::_is_typed */
-/* 8: Attribute APlusExpr::_stype */
-/* 9: Attribute APlusExpr::_if_true_flow_ctx */
-/* 10: Attribute APlusExpr::_if_false_flow_ctx */
-/* 11: Attribute APlusExpr::_prop_signature */
-/* 12: Attribute APlusExpr::_raw_arguments_cache */
+/* 8: Attribute APlusExpr::_is_typed */
+/* 9: Attribute APlusExpr::_stype */
+/* 10: Attribute APlusExpr::_if_true_flow_ctx */
+/* 11: Attribute APlusExpr::_if_false_flow_ctx */
+/* 12: Attribute APlusExpr::_prop_signature */
+/* 13: Attribute APlusExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute APlusExpr::_prop */
-/* 17: Attribute APlusExpr::_return_type */
-/* 18: Attribute APlusExpr::_n_expr */
-/* 19: Attribute APlusExpr::_n_closure_defs */
-/* 20: Attribute APlusExpr::_n_expr2 */
+/* 17: Attribute APlusExpr::_prop */
+/* 18: Attribute APlusExpr::_return_type */
+/* 19: Attribute APlusExpr::_n_expr */
+/* 20: Attribute APlusExpr::_n_closure_defs */
+/* 21: Attribute APlusExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___APlusExpr[] = "init var of APlusExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___APlusExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -70695,21 +73508,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___APlusExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___APlusExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___APlusExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -70729,25 +73545,25 @@ void CHECKNEW_parser___parser_nodes___APlusExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -70758,13 +73574,13 @@ val_t NEW_APlusExpr_parser___parser_prod___ABinopExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4447;
+  fra.me.line = 4677;
   fra.me.meth = LOCATE_NEW_APlusExpr_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4447 */
+  /* parser/parser_prod.nit:4677 */
   fra.me.REG[0] = NEW_parser___parser_nodes___APlusExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___APlusExpr(fra.me.REG[0]);
   parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[0], init_table);
@@ -70779,13 +73595,13 @@ val_t NEW_APlusExpr_parser___parser_prod___APlusExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5122;
+  fra.me.line = 5352;
   fra.me.meth = LOCATE_NEW_APlusExpr_parser___parser_prod___APlusExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5122 */
+  /* parser/parser_prod.nit:5352 */
   fra.me.REG[0] = NEW_parser___parser_nodes___APlusExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___APlusExpr(fra.me.REG[0]);
   parser___parser_prod___APlusExpr___empty_init(fra.me.REG[0], init_table);
@@ -70800,7 +73616,7 @@ val_t NEW_APlusExpr_parser___parser_prod___APlusExpr___init_aplusexpr(val_t p0,
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5124;
+  fra.me.line = 5354;
   fra.me.meth = LOCATE_NEW_APlusExpr_parser___parser_prod___APlusExpr___init_aplusexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -70810,7 +73626,7 @@ val_t NEW_APlusExpr_parser___parser_prod___APlusExpr___init_aplusexpr(val_t p0,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5124 */
+  /* parser/parser_prod.nit:5354 */
   fra.me.REG[2] = NEW_parser___parser_nodes___APlusExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___APlusExpr(fra.me.REG[2]);
   parser___parser_prod___APlusExpr___init_aplusexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -70846,13 +73662,13 @@ val_t NEW_APlusExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_APlusExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___APlusExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___APlusExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -70867,7 +73683,7 @@ val_t NEW_APlusExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4449;
+  fra.me.line = 4679;
   fra.me.meth = LOCATE_NEW_APlusExpr_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -70877,7 +73693,7 @@ val_t NEW_APlusExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4449 */
+  /* parser/parser_prod.nit:4679 */
   fra.me.REG[2] = NEW_parser___parser_nodes___APlusExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___APlusExpr(fra.me.REG[2]);
   parser___parser_prod___ABinopExpr___init_abinopexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -70892,7 +73708,7 @@ val_t NEW_APlusExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_APlusExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -70900,7 +73716,7 @@ val_t NEW_APlusExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___APlusExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___APlusExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -70908,21 +73724,21 @@ val_t NEW_APlusExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AMinusExpr[124] = {
-  {(bigint) 4359 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AMinusExpr[125] = {
+  {(bigint) 4915 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AMinusExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AMinusExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AMinusExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AMinusExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: AMinusExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AMinusExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AMinusExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: AMinusExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AMinusExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: AMinusExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: AMinusExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: AMinusExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4331 /* 12: AMinusExpr < ABinopExpr: superclass typecheck marker */},
-  {(bigint) 4359 /* 13: AMinusExpr < AMinusExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: AMinusExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: AMinusExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: AMinusExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4887 /* 12: AMinusExpr < ABinopExpr: superclass typecheck marker */},
+  {(bigint) 4915 /* 13: AMinusExpr < AMinusExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -70983,13 +73799,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AMinusExpr[124] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: AMinusExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: AMinusExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: AMinusExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: AMinusExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: AMinusExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -71009,13 +73826,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AMinusExpr[124] = {
   {(bigint) syntax___typing___ABinopExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: AMinusExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: AMinusExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: AMinusExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: AMinusExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___AMinusExpr___name},
@@ -71023,16 +73840,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AMinusExpr[124] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: AMinusExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: AMinusExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) parser___parser_prod___ABinopExpr___empty_init},
   {(bigint) parser___parser_prod___ABinopExpr___init_abinopexpr},
-  {(bigint) 0 /* 119: AMinusExpr < ABinopExpr: superclass init_table position */},
+  {(bigint) 0 /* 120: AMinusExpr < ABinopExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABinopExpr___n_expr2},
   {(bigint) parser___parser_prod___AMinusExpr___empty_init},
   {(bigint) parser___parser_prod___AMinusExpr___init_aminusexpr},
-  {(bigint) 9 /* 123: AMinusExpr < AMinusExpr: superclass init_table position */},
+  {(bigint) 9 /* 124: AMinusExpr < AMinusExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -71040,21 +73857,22 @@ const classtable_elt_t VFT_parser___parser_nodes___AMinusExpr[124] = {
 /* 3: Attribute AMinusExpr::_location */
 /* 4: Attribute AMinusExpr::_first_location */
 /* 5: Attribute AMinusExpr::_last_location */
+/* 6: Attribute AMinusExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AMinusExpr::_is_typed */
-/* 8: Attribute AMinusExpr::_stype */
-/* 9: Attribute AMinusExpr::_if_true_flow_ctx */
-/* 10: Attribute AMinusExpr::_if_false_flow_ctx */
-/* 11: Attribute AMinusExpr::_prop_signature */
-/* 12: Attribute AMinusExpr::_raw_arguments_cache */
+/* 8: Attribute AMinusExpr::_is_typed */
+/* 9: Attribute AMinusExpr::_stype */
+/* 10: Attribute AMinusExpr::_if_true_flow_ctx */
+/* 11: Attribute AMinusExpr::_if_false_flow_ctx */
+/* 12: Attribute AMinusExpr::_prop_signature */
+/* 13: Attribute AMinusExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute AMinusExpr::_prop */
-/* 17: Attribute AMinusExpr::_return_type */
-/* 18: Attribute AMinusExpr::_n_expr */
-/* 19: Attribute AMinusExpr::_n_closure_defs */
-/* 20: Attribute AMinusExpr::_n_expr2 */
+/* 17: Attribute AMinusExpr::_prop */
+/* 18: Attribute AMinusExpr::_return_type */
+/* 19: Attribute AMinusExpr::_n_expr */
+/* 20: Attribute AMinusExpr::_n_closure_defs */
+/* 21: Attribute AMinusExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AMinusExpr[] = "init var of AMinusExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AMinusExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -71070,21 +73888,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AMinusExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AMinusExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AMinusExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -71104,25 +73925,25 @@ void CHECKNEW_parser___parser_nodes___AMinusExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -71133,13 +73954,13 @@ val_t NEW_AMinusExpr_parser___parser_prod___ABinopExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4447;
+  fra.me.line = 4677;
   fra.me.meth = LOCATE_NEW_AMinusExpr_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4447 */
+  /* parser/parser_prod.nit:4677 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AMinusExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AMinusExpr(fra.me.REG[0]);
   parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[0], init_table);
@@ -71154,13 +73975,13 @@ val_t NEW_AMinusExpr_parser___parser_prod___AMinusExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5167;
+  fra.me.line = 5397;
   fra.me.meth = LOCATE_NEW_AMinusExpr_parser___parser_prod___AMinusExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5167 */
+  /* parser/parser_prod.nit:5397 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AMinusExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AMinusExpr(fra.me.REG[0]);
   parser___parser_prod___AMinusExpr___empty_init(fra.me.REG[0], init_table);
@@ -71175,7 +73996,7 @@ val_t NEW_AMinusExpr_parser___parser_prod___AMinusExpr___init_aminusexpr(val_t p
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5169;
+  fra.me.line = 5399;
   fra.me.meth = LOCATE_NEW_AMinusExpr_parser___parser_prod___AMinusExpr___init_aminusexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -71185,7 +74006,7 @@ val_t NEW_AMinusExpr_parser___parser_prod___AMinusExpr___init_aminusexpr(val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5169 */
+  /* parser/parser_prod.nit:5399 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AMinusExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AMinusExpr(fra.me.REG[2]);
   parser___parser_prod___AMinusExpr___init_aminusexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -71221,13 +74042,13 @@ val_t NEW_AMinusExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_AMinusExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AMinusExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AMinusExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -71242,7 +74063,7 @@ val_t NEW_AMinusExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4449;
+  fra.me.line = 4679;
   fra.me.meth = LOCATE_NEW_AMinusExpr_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -71252,7 +74073,7 @@ val_t NEW_AMinusExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4449 */
+  /* parser/parser_prod.nit:4679 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AMinusExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AMinusExpr(fra.me.REG[2]);
   parser___parser_prod___ABinopExpr___init_abinopexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -71267,7 +74088,7 @@ val_t NEW_AMinusExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0)
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_AMinusExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -71275,7 +74096,7 @@ val_t NEW_AMinusExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0)
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AMinusExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AMinusExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -71283,21 +74104,21 @@ val_t NEW_AMinusExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0)
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AStarshipExpr[124] = {
-  {(bigint) 4335 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AStarshipExpr[125] = {
+  {(bigint) 4891 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AStarshipExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AStarshipExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AStarshipExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AStarshipExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: AStarshipExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AStarshipExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AStarshipExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: AStarshipExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AStarshipExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: AStarshipExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: AStarshipExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: AStarshipExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4331 /* 12: AStarshipExpr < ABinopExpr: superclass typecheck marker */},
-  {(bigint) 4335 /* 13: AStarshipExpr < AStarshipExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: AStarshipExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: AStarshipExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: AStarshipExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4887 /* 12: AStarshipExpr < ABinopExpr: superclass typecheck marker */},
+  {(bigint) 4891 /* 13: AStarshipExpr < AStarshipExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -71358,13 +74179,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AStarshipExpr[124] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: AStarshipExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: AStarshipExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: AStarshipExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: AStarshipExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: AStarshipExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -71384,13 +74206,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AStarshipExpr[124] = {
   {(bigint) syntax___typing___ABinopExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: AStarshipExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: AStarshipExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: AStarshipExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: AStarshipExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___AStarshipExpr___name},
@@ -71398,16 +74220,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AStarshipExpr[124] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: AStarshipExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: AStarshipExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) parser___parser_prod___ABinopExpr___empty_init},
   {(bigint) parser___parser_prod___ABinopExpr___init_abinopexpr},
-  {(bigint) 0 /* 119: AStarshipExpr < ABinopExpr: superclass init_table position */},
+  {(bigint) 0 /* 120: AStarshipExpr < ABinopExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABinopExpr___n_expr2},
   {(bigint) parser___parser_prod___AStarshipExpr___empty_init},
   {(bigint) parser___parser_prod___AStarshipExpr___init_astarshipexpr},
-  {(bigint) 9 /* 123: AStarshipExpr < AStarshipExpr: superclass init_table position */},
+  {(bigint) 9 /* 124: AStarshipExpr < AStarshipExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -71415,21 +74237,22 @@ const classtable_elt_t VFT_parser___parser_nodes___AStarshipExpr[124] = {
 /* 3: Attribute AStarshipExpr::_location */
 /* 4: Attribute AStarshipExpr::_first_location */
 /* 5: Attribute AStarshipExpr::_last_location */
+/* 6: Attribute AStarshipExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AStarshipExpr::_is_typed */
-/* 8: Attribute AStarshipExpr::_stype */
-/* 9: Attribute AStarshipExpr::_if_true_flow_ctx */
-/* 10: Attribute AStarshipExpr::_if_false_flow_ctx */
-/* 11: Attribute AStarshipExpr::_prop_signature */
-/* 12: Attribute AStarshipExpr::_raw_arguments_cache */
+/* 8: Attribute AStarshipExpr::_is_typed */
+/* 9: Attribute AStarshipExpr::_stype */
+/* 10: Attribute AStarshipExpr::_if_true_flow_ctx */
+/* 11: Attribute AStarshipExpr::_if_false_flow_ctx */
+/* 12: Attribute AStarshipExpr::_prop_signature */
+/* 13: Attribute AStarshipExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute AStarshipExpr::_prop */
-/* 17: Attribute AStarshipExpr::_return_type */
-/* 18: Attribute AStarshipExpr::_n_expr */
-/* 19: Attribute AStarshipExpr::_n_closure_defs */
-/* 20: Attribute AStarshipExpr::_n_expr2 */
+/* 17: Attribute AStarshipExpr::_prop */
+/* 18: Attribute AStarshipExpr::_return_type */
+/* 19: Attribute AStarshipExpr::_n_expr */
+/* 20: Attribute AStarshipExpr::_n_closure_defs */
+/* 21: Attribute AStarshipExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AStarshipExpr[] = "init var of AStarshipExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AStarshipExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -71445,21 +74268,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AStarshipExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AStarshipExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AStarshipExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -71479,25 +74305,25 @@ void CHECKNEW_parser___parser_nodes___AStarshipExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -71508,13 +74334,13 @@ val_t NEW_AStarshipExpr_parser___parser_prod___ABinopExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4447;
+  fra.me.line = 4677;
   fra.me.meth = LOCATE_NEW_AStarshipExpr_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4447 */
+  /* parser/parser_prod.nit:4677 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AStarshipExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AStarshipExpr(fra.me.REG[0]);
   parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[0], init_table);
@@ -71529,13 +74355,13 @@ val_t NEW_AStarshipExpr_parser___parser_prod___AStarshipExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5212;
+  fra.me.line = 5442;
   fra.me.meth = LOCATE_NEW_AStarshipExpr_parser___parser_prod___AStarshipExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5212 */
+  /* parser/parser_prod.nit:5442 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AStarshipExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AStarshipExpr(fra.me.REG[0]);
   parser___parser_prod___AStarshipExpr___empty_init(fra.me.REG[0], init_table);
@@ -71550,7 +74376,7 @@ val_t NEW_AStarshipExpr_parser___parser_prod___AStarshipExpr___init_astarshipexp
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5214;
+  fra.me.line = 5444;
   fra.me.meth = LOCATE_NEW_AStarshipExpr_parser___parser_prod___AStarshipExpr___init_astarshipexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -71560,7 +74386,7 @@ val_t NEW_AStarshipExpr_parser___parser_prod___AStarshipExpr___init_astarshipexp
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5214 */
+  /* parser/parser_prod.nit:5444 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AStarshipExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AStarshipExpr(fra.me.REG[2]);
   parser___parser_prod___AStarshipExpr___init_astarshipexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -71596,13 +74422,13 @@ val_t NEW_AStarshipExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_AStarshipExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AStarshipExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AStarshipExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -71617,7 +74443,7 @@ val_t NEW_AStarshipExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4449;
+  fra.me.line = 4679;
   fra.me.meth = LOCATE_NEW_AStarshipExpr_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -71627,7 +74453,7 @@ val_t NEW_AStarshipExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4449 */
+  /* parser/parser_prod.nit:4679 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AStarshipExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AStarshipExpr(fra.me.REG[2]);
   parser___parser_prod___ABinopExpr___init_abinopexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -71642,7 +74468,7 @@ val_t NEW_AStarshipExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_AStarshipExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -71650,7 +74476,7 @@ val_t NEW_AStarshipExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AStarshipExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AStarshipExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -71658,21 +74484,21 @@ val_t NEW_AStarshipExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AStarExpr[124] = {
-  {(bigint) 4339 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AStarExpr[125] = {
+  {(bigint) 4895 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AStarExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AStarExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AStarExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AStarExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: AStarExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AStarExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AStarExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: AStarExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AStarExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: AStarExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: AStarExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: AStarExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4331 /* 12: AStarExpr < ABinopExpr: superclass typecheck marker */},
-  {(bigint) 4339 /* 13: AStarExpr < AStarExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: AStarExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: AStarExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: AStarExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4887 /* 12: AStarExpr < ABinopExpr: superclass typecheck marker */},
+  {(bigint) 4895 /* 13: AStarExpr < AStarExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -71733,13 +74559,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AStarExpr[124] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: AStarExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: AStarExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: AStarExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: AStarExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: AStarExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -71759,13 +74586,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AStarExpr[124] = {
   {(bigint) syntax___typing___ABinopExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: AStarExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: AStarExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: AStarExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: AStarExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___AStarExpr___name},
@@ -71773,16 +74600,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AStarExpr[124] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: AStarExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: AStarExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) parser___parser_prod___ABinopExpr___empty_init},
   {(bigint) parser___parser_prod___ABinopExpr___init_abinopexpr},
-  {(bigint) 0 /* 119: AStarExpr < ABinopExpr: superclass init_table position */},
+  {(bigint) 0 /* 120: AStarExpr < ABinopExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABinopExpr___n_expr2},
   {(bigint) parser___parser_prod___AStarExpr___empty_init},
   {(bigint) parser___parser_prod___AStarExpr___init_astarexpr},
-  {(bigint) 9 /* 123: AStarExpr < AStarExpr: superclass init_table position */},
+  {(bigint) 9 /* 124: AStarExpr < AStarExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -71790,21 +74617,22 @@ const classtable_elt_t VFT_parser___parser_nodes___AStarExpr[124] = {
 /* 3: Attribute AStarExpr::_location */
 /* 4: Attribute AStarExpr::_first_location */
 /* 5: Attribute AStarExpr::_last_location */
+/* 6: Attribute AStarExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AStarExpr::_is_typed */
-/* 8: Attribute AStarExpr::_stype */
-/* 9: Attribute AStarExpr::_if_true_flow_ctx */
-/* 10: Attribute AStarExpr::_if_false_flow_ctx */
-/* 11: Attribute AStarExpr::_prop_signature */
-/* 12: Attribute AStarExpr::_raw_arguments_cache */
+/* 8: Attribute AStarExpr::_is_typed */
+/* 9: Attribute AStarExpr::_stype */
+/* 10: Attribute AStarExpr::_if_true_flow_ctx */
+/* 11: Attribute AStarExpr::_if_false_flow_ctx */
+/* 12: Attribute AStarExpr::_prop_signature */
+/* 13: Attribute AStarExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute AStarExpr::_prop */
-/* 17: Attribute AStarExpr::_return_type */
-/* 18: Attribute AStarExpr::_n_expr */
-/* 19: Attribute AStarExpr::_n_closure_defs */
-/* 20: Attribute AStarExpr::_n_expr2 */
+/* 17: Attribute AStarExpr::_prop */
+/* 18: Attribute AStarExpr::_return_type */
+/* 19: Attribute AStarExpr::_n_expr */
+/* 20: Attribute AStarExpr::_n_closure_defs */
+/* 21: Attribute AStarExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AStarExpr[] = "init var of AStarExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AStarExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -71820,21 +74648,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AStarExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AStarExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AStarExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -71854,25 +74685,25 @@ void CHECKNEW_parser___parser_nodes___AStarExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -71883,13 +74714,13 @@ val_t NEW_AStarExpr_parser___parser_prod___ABinopExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4447;
+  fra.me.line = 4677;
   fra.me.meth = LOCATE_NEW_AStarExpr_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4447 */
+  /* parser/parser_prod.nit:4677 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AStarExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AStarExpr(fra.me.REG[0]);
   parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[0], init_table);
@@ -71904,13 +74735,13 @@ val_t NEW_AStarExpr_parser___parser_prod___AStarExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5257;
+  fra.me.line = 5487;
   fra.me.meth = LOCATE_NEW_AStarExpr_parser___parser_prod___AStarExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5257 */
+  /* parser/parser_prod.nit:5487 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AStarExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AStarExpr(fra.me.REG[0]);
   parser___parser_prod___AStarExpr___empty_init(fra.me.REG[0], init_table);
@@ -71925,7 +74756,7 @@ val_t NEW_AStarExpr_parser___parser_prod___AStarExpr___init_astarexpr(val_t p0,
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5259;
+  fra.me.line = 5489;
   fra.me.meth = LOCATE_NEW_AStarExpr_parser___parser_prod___AStarExpr___init_astarexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -71935,7 +74766,7 @@ val_t NEW_AStarExpr_parser___parser_prod___AStarExpr___init_astarexpr(val_t p0,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5259 */
+  /* parser/parser_prod.nit:5489 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AStarExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AStarExpr(fra.me.REG[2]);
   parser___parser_prod___AStarExpr___init_astarexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -71971,13 +74802,13 @@ val_t NEW_AStarExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_AStarExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AStarExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AStarExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -71992,7 +74823,7 @@ val_t NEW_AStarExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4449;
+  fra.me.line = 4679;
   fra.me.meth = LOCATE_NEW_AStarExpr_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -72002,7 +74833,7 @@ val_t NEW_AStarExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4449 */
+  /* parser/parser_prod.nit:4679 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AStarExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AStarExpr(fra.me.REG[2]);
   parser___parser_prod___ABinopExpr___init_abinopexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -72017,7 +74848,7 @@ val_t NEW_AStarExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_AStarExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -72025,7 +74856,7 @@ val_t NEW_AStarExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AStarExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AStarExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -72033,21 +74864,21 @@ val_t NEW_AStarExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ASlashExpr[124] = {
-  {(bigint) 4343 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ASlashExpr[125] = {
+  {(bigint) 4899 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ASlashExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ASlashExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ASlashExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ASlashExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: ASlashExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: ASlashExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ASlashExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: ASlashExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ASlashExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: ASlashExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: ASlashExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: ASlashExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4331 /* 12: ASlashExpr < ABinopExpr: superclass typecheck marker */},
-  {(bigint) 4343 /* 13: ASlashExpr < ASlashExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: ASlashExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: ASlashExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: ASlashExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4887 /* 12: ASlashExpr < ABinopExpr: superclass typecheck marker */},
+  {(bigint) 4899 /* 13: ASlashExpr < ASlashExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -72108,13 +74939,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ASlashExpr[124] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: ASlashExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: ASlashExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: ASlashExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: ASlashExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: ASlashExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -72134,13 +74966,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ASlashExpr[124] = {
   {(bigint) syntax___typing___ABinopExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: ASlashExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: ASlashExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: ASlashExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: ASlashExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___ASlashExpr___name},
@@ -72148,16 +74980,16 @@ const classtable_elt_t VFT_parser___parser_nodes___ASlashExpr[124] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: ASlashExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: ASlashExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) parser___parser_prod___ABinopExpr___empty_init},
   {(bigint) parser___parser_prod___ABinopExpr___init_abinopexpr},
-  {(bigint) 0 /* 119: ASlashExpr < ABinopExpr: superclass init_table position */},
+  {(bigint) 0 /* 120: ASlashExpr < ABinopExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABinopExpr___n_expr2},
   {(bigint) parser___parser_prod___ASlashExpr___empty_init},
   {(bigint) parser___parser_prod___ASlashExpr___init_aslashexpr},
-  {(bigint) 9 /* 123: ASlashExpr < ASlashExpr: superclass init_table position */},
+  {(bigint) 9 /* 124: ASlashExpr < ASlashExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -72165,21 +74997,22 @@ const classtable_elt_t VFT_parser___parser_nodes___ASlashExpr[124] = {
 /* 3: Attribute ASlashExpr::_location */
 /* 4: Attribute ASlashExpr::_first_location */
 /* 5: Attribute ASlashExpr::_last_location */
+/* 6: Attribute ASlashExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ASlashExpr::_is_typed */
-/* 8: Attribute ASlashExpr::_stype */
-/* 9: Attribute ASlashExpr::_if_true_flow_ctx */
-/* 10: Attribute ASlashExpr::_if_false_flow_ctx */
-/* 11: Attribute ASlashExpr::_prop_signature */
-/* 12: Attribute ASlashExpr::_raw_arguments_cache */
+/* 8: Attribute ASlashExpr::_is_typed */
+/* 9: Attribute ASlashExpr::_stype */
+/* 10: Attribute ASlashExpr::_if_true_flow_ctx */
+/* 11: Attribute ASlashExpr::_if_false_flow_ctx */
+/* 12: Attribute ASlashExpr::_prop_signature */
+/* 13: Attribute ASlashExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute ASlashExpr::_prop */
-/* 17: Attribute ASlashExpr::_return_type */
-/* 18: Attribute ASlashExpr::_n_expr */
-/* 19: Attribute ASlashExpr::_n_closure_defs */
-/* 20: Attribute ASlashExpr::_n_expr2 */
+/* 17: Attribute ASlashExpr::_prop */
+/* 18: Attribute ASlashExpr::_return_type */
+/* 19: Attribute ASlashExpr::_n_expr */
+/* 20: Attribute ASlashExpr::_n_closure_defs */
+/* 21: Attribute ASlashExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ASlashExpr[] = "init var of ASlashExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ASlashExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -72195,21 +75028,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ASlashExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ASlashExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ASlashExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -72229,25 +75065,25 @@ void CHECKNEW_parser___parser_nodes___ASlashExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -72258,13 +75094,13 @@ val_t NEW_ASlashExpr_parser___parser_prod___ABinopExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4447;
+  fra.me.line = 4677;
   fra.me.meth = LOCATE_NEW_ASlashExpr_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4447 */
+  /* parser/parser_prod.nit:4677 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ASlashExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ASlashExpr(fra.me.REG[0]);
   parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[0], init_table);
@@ -72279,13 +75115,13 @@ val_t NEW_ASlashExpr_parser___parser_prod___ASlashExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5302;
+  fra.me.line = 5532;
   fra.me.meth = LOCATE_NEW_ASlashExpr_parser___parser_prod___ASlashExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5302 */
+  /* parser/parser_prod.nit:5532 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ASlashExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ASlashExpr(fra.me.REG[0]);
   parser___parser_prod___ASlashExpr___empty_init(fra.me.REG[0], init_table);
@@ -72300,7 +75136,7 @@ val_t NEW_ASlashExpr_parser___parser_prod___ASlashExpr___init_aslashexpr(val_t p
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5304;
+  fra.me.line = 5534;
   fra.me.meth = LOCATE_NEW_ASlashExpr_parser___parser_prod___ASlashExpr___init_aslashexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -72310,7 +75146,7 @@ val_t NEW_ASlashExpr_parser___parser_prod___ASlashExpr___init_aslashexpr(val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5304 */
+  /* parser/parser_prod.nit:5534 */
   fra.me.REG[2] = NEW_parser___parser_nodes___ASlashExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ASlashExpr(fra.me.REG[2]);
   parser___parser_prod___ASlashExpr___init_aslashexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -72346,13 +75182,13 @@ val_t NEW_ASlashExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_ASlashExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ASlashExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ASlashExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -72367,7 +75203,7 @@ val_t NEW_ASlashExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4449;
+  fra.me.line = 4679;
   fra.me.meth = LOCATE_NEW_ASlashExpr_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -72377,7 +75213,7 @@ val_t NEW_ASlashExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4449 */
+  /* parser/parser_prod.nit:4679 */
   fra.me.REG[2] = NEW_parser___parser_nodes___ASlashExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ASlashExpr(fra.me.REG[2]);
   parser___parser_prod___ABinopExpr___init_abinopexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -72392,7 +75228,7 @@ val_t NEW_ASlashExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0)
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_ASlashExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -72400,7 +75236,7 @@ val_t NEW_ASlashExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0)
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ASlashExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ASlashExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -72408,21 +75244,21 @@ val_t NEW_ASlashExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0)
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___APercentExpr[124] = {
-  {(bigint) 4351 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___APercentExpr[125] = {
+  {(bigint) 4907 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "APercentExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: APercentExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: APercentExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: APercentExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: APercentExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: APercentExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: APercentExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: APercentExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: APercentExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: APercentExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: APercentExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: APercentExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4331 /* 12: APercentExpr < ABinopExpr: superclass typecheck marker */},
-  {(bigint) 4351 /* 13: APercentExpr < APercentExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: APercentExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: APercentExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: APercentExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4887 /* 12: APercentExpr < ABinopExpr: superclass typecheck marker */},
+  {(bigint) 4907 /* 13: APercentExpr < APercentExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -72483,13 +75319,14 @@ const classtable_elt_t VFT_parser___parser_nodes___APercentExpr[124] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: APercentExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: APercentExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: APercentExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: APercentExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: APercentExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -72509,13 +75346,13 @@ const classtable_elt_t VFT_parser___parser_nodes___APercentExpr[124] = {
   {(bigint) syntax___typing___ABinopExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: APercentExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: APercentExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: APercentExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: APercentExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___APercentExpr___name},
@@ -72523,16 +75360,16 @@ const classtable_elt_t VFT_parser___parser_nodes___APercentExpr[124] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: APercentExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: APercentExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) parser___parser_prod___ABinopExpr___empty_init},
   {(bigint) parser___parser_prod___ABinopExpr___init_abinopexpr},
-  {(bigint) 0 /* 119: APercentExpr < ABinopExpr: superclass init_table position */},
+  {(bigint) 0 /* 120: APercentExpr < ABinopExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABinopExpr___n_expr2},
   {(bigint) parser___parser_prod___APercentExpr___empty_init},
   {(bigint) parser___parser_prod___APercentExpr___init_apercentexpr},
-  {(bigint) 9 /* 123: APercentExpr < APercentExpr: superclass init_table position */},
+  {(bigint) 9 /* 124: APercentExpr < APercentExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -72540,21 +75377,22 @@ const classtable_elt_t VFT_parser___parser_nodes___APercentExpr[124] = {
 /* 3: Attribute APercentExpr::_location */
 /* 4: Attribute APercentExpr::_first_location */
 /* 5: Attribute APercentExpr::_last_location */
+/* 6: Attribute APercentExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute APercentExpr::_is_typed */
-/* 8: Attribute APercentExpr::_stype */
-/* 9: Attribute APercentExpr::_if_true_flow_ctx */
-/* 10: Attribute APercentExpr::_if_false_flow_ctx */
-/* 11: Attribute APercentExpr::_prop_signature */
-/* 12: Attribute APercentExpr::_raw_arguments_cache */
+/* 8: Attribute APercentExpr::_is_typed */
+/* 9: Attribute APercentExpr::_stype */
+/* 10: Attribute APercentExpr::_if_true_flow_ctx */
+/* 11: Attribute APercentExpr::_if_false_flow_ctx */
+/* 12: Attribute APercentExpr::_prop_signature */
+/* 13: Attribute APercentExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute APercentExpr::_prop */
-/* 17: Attribute APercentExpr::_return_type */
-/* 18: Attribute APercentExpr::_n_expr */
-/* 19: Attribute APercentExpr::_n_closure_defs */
-/* 20: Attribute APercentExpr::_n_expr2 */
+/* 17: Attribute APercentExpr::_prop */
+/* 18: Attribute APercentExpr::_return_type */
+/* 19: Attribute APercentExpr::_n_expr */
+/* 20: Attribute APercentExpr::_n_closure_defs */
+/* 21: Attribute APercentExpr::_n_expr2 */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___APercentExpr[] = "init var of APercentExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___APercentExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -72570,21 +75408,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___APercentExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___APercentExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___APercentExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -72604,25 +75445,25 @@ void CHECKNEW_parser___parser_nodes___APercentExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -72633,13 +75474,13 @@ val_t NEW_APercentExpr_parser___parser_prod___ABinopExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4447;
+  fra.me.line = 4677;
   fra.me.meth = LOCATE_NEW_APercentExpr_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4447 */
+  /* parser/parser_prod.nit:4677 */
   fra.me.REG[0] = NEW_parser___parser_nodes___APercentExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___APercentExpr(fra.me.REG[0]);
   parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[0], init_table);
@@ -72654,13 +75495,13 @@ val_t NEW_APercentExpr_parser___parser_prod___APercentExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5347;
+  fra.me.line = 5577;
   fra.me.meth = LOCATE_NEW_APercentExpr_parser___parser_prod___APercentExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5347 */
+  /* parser/parser_prod.nit:5577 */
   fra.me.REG[0] = NEW_parser___parser_nodes___APercentExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___APercentExpr(fra.me.REG[0]);
   parser___parser_prod___APercentExpr___empty_init(fra.me.REG[0], init_table);
@@ -72675,7 +75516,7 @@ val_t NEW_APercentExpr_parser___parser_prod___APercentExpr___init_apercentexpr(v
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5349;
+  fra.me.line = 5579;
   fra.me.meth = LOCATE_NEW_APercentExpr_parser___parser_prod___APercentExpr___init_apercentexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -72685,7 +75526,7 @@ val_t NEW_APercentExpr_parser___parser_prod___APercentExpr___init_apercentexpr(v
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5349 */
+  /* parser/parser_prod.nit:5579 */
   fra.me.REG[2] = NEW_parser___parser_nodes___APercentExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___APercentExpr(fra.me.REG[2]);
   parser___parser_prod___APercentExpr___init_apercentexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -72721,13 +75562,13 @@ val_t NEW_APercentExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_APercentExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___APercentExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___APercentExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -72742,7 +75583,7 @@ val_t NEW_APercentExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4449;
+  fra.me.line = 4679;
   fra.me.meth = LOCATE_NEW_APercentExpr_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -72752,7 +75593,7 @@ val_t NEW_APercentExpr_parser___parser_prod___ABinopExpr___init_abinopexpr(val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4449 */
+  /* parser/parser_prod.nit:4679 */
   fra.me.REG[2] = NEW_parser___parser_nodes___APercentExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___APercentExpr(fra.me.REG[2]);
   parser___parser_prod___ABinopExpr___init_abinopexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -72767,7 +75608,7 @@ val_t NEW_APercentExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_APercentExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -72775,7 +75616,7 @@ val_t NEW_APercentExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___APercentExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___APercentExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -72783,20 +75624,20 @@ val_t NEW_APercentExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AUminusExpr[121] = {
-  {(bigint) 4307 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AUminusExpr[122] = {
+  {(bigint) 4863 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AUminusExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AUminusExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AUminusExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AUminusExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: AUminusExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AUminusExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AUminusExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: AUminusExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AUminusExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: AUminusExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: AUminusExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: AUminusExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4307 /* 12: AUminusExpr < AUminusExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: AUminusExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: AUminusExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: AUminusExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4863 /* 12: AUminusExpr < AUminusExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -72858,13 +75699,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AUminusExpr[121] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 5 /* 72: AUminusExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 1 /* 75: AUminusExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 1 /* 76: AUminusExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 4 /* 80: AUminusExpr < AExpr: superclass init_table position */},
+  {(bigint) 4 /* 81: AUminusExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -72884,13 +75726,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AUminusExpr[121] = {
   {(bigint) syntax___typing___AUminusExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 3 /* 100: AUminusExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 101: AUminusExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 2 /* 106: AUminusExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 2 /* 107: AUminusExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___AUminusExpr___name},
@@ -72898,12 +75740,12 @@ const classtable_elt_t VFT_parser___parser_nodes___AUminusExpr[121] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 0 /* 114: AUminusExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 0 /* 115: AUminusExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) parser___parser_prod___AUminusExpr___empty_init},
   {(bigint) parser___parser_prod___AUminusExpr___init_auminusexpr},
-  {(bigint) 8 /* 119: AUminusExpr < AUminusExpr: superclass init_table position */},
+  {(bigint) 8 /* 120: AUminusExpr < AUminusExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AUminusExpr___n_minus},
 };
 /* 0: Pointer to the classtable */
@@ -72912,21 +75754,22 @@ const classtable_elt_t VFT_parser___parser_nodes___AUminusExpr[121] = {
 /* 3: Attribute AUminusExpr::_location */
 /* 4: Attribute AUminusExpr::_first_location */
 /* 5: Attribute AUminusExpr::_last_location */
+/* 6: Attribute AUminusExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AUminusExpr::_is_typed */
-/* 8: Attribute AUminusExpr::_stype */
-/* 9: Attribute AUminusExpr::_if_true_flow_ctx */
-/* 10: Attribute AUminusExpr::_if_false_flow_ctx */
-/* 11: Attribute AUminusExpr::_prop_signature */
-/* 12: Attribute AUminusExpr::_raw_arguments_cache */
+/* 8: Attribute AUminusExpr::_is_typed */
+/* 9: Attribute AUminusExpr::_stype */
+/* 10: Attribute AUminusExpr::_if_true_flow_ctx */
+/* 11: Attribute AUminusExpr::_if_false_flow_ctx */
+/* 12: Attribute AUminusExpr::_prop_signature */
+/* 13: Attribute AUminusExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute AUminusExpr::_prop */
-/* 17: Attribute AUminusExpr::_return_type */
-/* 18: Attribute AUminusExpr::_n_expr */
-/* 19: Attribute AUminusExpr::_n_closure_defs */
-/* 20: Attribute AUminusExpr::_n_minus */
+/* 17: Attribute AUminusExpr::_prop */
+/* 18: Attribute AUminusExpr::_return_type */
+/* 19: Attribute AUminusExpr::_n_expr */
+/* 20: Attribute AUminusExpr::_n_closure_defs */
+/* 21: Attribute AUminusExpr::_n_minus */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AUminusExpr[] = "init var of AUminusExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AUminusExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -72942,21 +75785,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AUminusExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AUminusExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AUminusExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -72976,10 +75822,10 @@ void CHECKNEW_parser___parser_nodes___AUminusExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -72991,10 +75837,10 @@ void CHECKNEW_parser___parser_nodes___AUminusExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -73005,13 +75851,13 @@ val_t NEW_AUminusExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_AUminusExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AUminusExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AUminusExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -73026,13 +75872,13 @@ val_t NEW_AUminusExpr_parser___parser_prod___AUminusExpr___empty_init(void){
   int init_table[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5392;
+  fra.me.line = 5622;
   fra.me.meth = LOCATE_NEW_AUminusExpr_parser___parser_prod___AUminusExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5392 */
+  /* parser/parser_prod.nit:5622 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AUminusExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AUminusExpr(fra.me.REG[0]);
   parser___parser_prod___AUminusExpr___empty_init(fra.me.REG[0], init_table);
@@ -73047,7 +75893,7 @@ val_t NEW_AUminusExpr_parser___parser_prod___AUminusExpr___init_auminusexpr(val_
   int init_table[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5394;
+  fra.me.line = 5624;
   fra.me.meth = LOCATE_NEW_AUminusExpr_parser___parser_prod___AUminusExpr___init_auminusexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -73057,7 +75903,7 @@ val_t NEW_AUminusExpr_parser___parser_prod___AUminusExpr___init_auminusexpr(val_
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5394 */
+  /* parser/parser_prod.nit:5624 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AUminusExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AUminusExpr(fra.me.REG[2]);
   parser___parser_prod___AUminusExpr___init_auminusexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -73093,7 +75939,7 @@ val_t NEW_AUminusExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0
   int init_table[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_AUminusExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -73101,7 +75947,7 @@ val_t NEW_AUminusExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AUminusExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AUminusExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -73109,18 +75955,18 @@ val_t NEW_AUminusExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ANewExpr[116] = {
-  {(bigint) 4279 /* 0: Identity */},
-  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ANewExpr[117] = {
+  {(bigint) 4835 /* 0: Identity */},
+  {(bigint) 23 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ANewExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ANewExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ANewExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ANewExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: ANewExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: ANewExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ANewExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: ANewExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ANewExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: ANewExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4279 /* 10: ANewExpr < ANewExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: ANewExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4835 /* 10: ANewExpr < ANewExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -73184,13 +76030,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ANewExpr[116] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 3 /* 72: ANewExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___ANewExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 2 /* 80: ANewExpr < AExpr: superclass init_table position */},
+  {(bigint) 2 /* 81: ANewExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ANewExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -73210,18 +76057,18 @@ const classtable_elt_t VFT_parser___parser_nodes___ANewExpr[116] = {
   {(bigint) syntax___typing___ANewExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 1 /* 100: ANewExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 1 /* 101: ANewExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 0 /* 106: ANewExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 0 /* 107: ANewExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) parser___parser_prod___ANewExpr___empty_init},
   {(bigint) parser___parser_prod___ANewExpr___init_anewexpr},
-  {(bigint) 6 /* 111: ANewExpr < ANewExpr: superclass init_table position */},
+  {(bigint) 6 /* 112: ANewExpr < ANewExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANewExpr___n_kwnew},
   {(bigint) parser___parser_nodes___ANewExpr___n_type},
   {(bigint) parser___parser_nodes___ANewExpr___n_id},
@@ -73233,22 +76080,23 @@ const classtable_elt_t VFT_parser___parser_nodes___ANewExpr[116] = {
 /* 3: Attribute ANewExpr::_location */
 /* 4: Attribute ANewExpr::_first_location */
 /* 5: Attribute ANewExpr::_last_location */
+/* 6: Attribute ANewExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ANewExpr::_is_typed */
-/* 8: Attribute ANewExpr::_stype */
-/* 9: Attribute ANewExpr::_if_true_flow_ctx */
-/* 10: Attribute ANewExpr::_if_false_flow_ctx */
-/* 11: Attribute ANewExpr::_prop_signature */
-/* 12: Attribute ANewExpr::_raw_arguments_cache */
+/* 8: Attribute ANewExpr::_is_typed */
+/* 9: Attribute ANewExpr::_stype */
+/* 10: Attribute ANewExpr::_if_true_flow_ctx */
+/* 11: Attribute ANewExpr::_if_false_flow_ctx */
+/* 12: Attribute ANewExpr::_prop_signature */
+/* 13: Attribute ANewExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute ANewExpr::_prop */
-/* 17: Attribute ANewExpr::_return_type */
-/* 18: Attribute ANewExpr::_n_kwnew */
-/* 19: Attribute ANewExpr::_n_type */
-/* 20: Attribute ANewExpr::_n_id */
-/* 21: Attribute ANewExpr::_n_args */
+/* 17: Attribute ANewExpr::_prop */
+/* 18: Attribute ANewExpr::_return_type */
+/* 19: Attribute ANewExpr::_n_kwnew */
+/* 20: Attribute ANewExpr::_n_type */
+/* 21: Attribute ANewExpr::_n_id */
+/* 22: Attribute ANewExpr::_n_args */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ANewExpr[] = "init var of ANewExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ANewExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -73264,21 +76112,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ANewExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:943 */
+  /* parser/parser_nodes.nit:56 */
   fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:949 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ANewExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 22);
+  obj = alloc(sizeof(val_t) * 23);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ANewExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -73298,6 +76149,11 @@ void CHECKNEW_parser___parser_nodes___ANewExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -73313,11 +76169,6 @@ void CHECKNEW_parser___parser_nodes___ANewExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_ANewExpr_parser___parser_prod___ANewExpr___empty_init[] = "new ANewExpr parser_prod::ANewExpr::empty_init";
@@ -73327,13 +76178,13 @@ val_t NEW_ANewExpr_parser___parser_prod___ANewExpr___empty_init(void){
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5437;
+  fra.me.line = 5667;
   fra.me.meth = LOCATE_NEW_ANewExpr_parser___parser_prod___ANewExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5437 */
+  /* parser/parser_prod.nit:5667 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ANewExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ANewExpr(fra.me.REG[0]);
   parser___parser_prod___ANewExpr___empty_init(fra.me.REG[0], init_table);
@@ -73348,7 +76199,7 @@ val_t NEW_ANewExpr_parser___parser_prod___ANewExpr___init_anewexpr(val_t p0, val
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5439;
+  fra.me.line = 5669;
   fra.me.meth = LOCATE_NEW_ANewExpr_parser___parser_prod___ANewExpr___init_anewexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -73362,7 +76213,7 @@ val_t NEW_ANewExpr_parser___parser_prod___ANewExpr___init_anewexpr(val_t p0, val
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:5439 */
+  /* parser/parser_prod.nit:5669 */
   fra.me.REG[4] = NEW_parser___parser_nodes___ANewExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ANewExpr(fra.me.REG[4]);
   parser___parser_prod___ANewExpr___init_anewexpr(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
@@ -73391,16 +76242,16 @@ val_t NEW_ANewExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AAttrExpr[105] = {
-  {(bigint) 4239 /* 0: Identity */},
-  {(bigint) 20 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AAttrExpr[106] = {
+  {(bigint) 4795 /* 0: Identity */},
+  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AAttrExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AAttrExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AAttrExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AAttrExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4015 /* 6: AAttrExpr < AAttrFormExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AAttrExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4239 /* 8: AAttrExpr < AAttrExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AAttrExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4559 /* 6: AAttrExpr < AAttrFormExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AAttrExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4795 /* 8: AAttrExpr < AAttrExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -73466,13 +76317,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AAttrExpr[105] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AAttrExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AAttrExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AAttrExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AAttrExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -73491,12 +76343,12 @@ const classtable_elt_t VFT_parser___parser_nodes___AAttrExpr[105] = {
   {(bigint) syntax___typing___AAttrFormExpr___do_typing},
   {(bigint) syntax___typing___AAttrFormExpr___prop},
   {(bigint) syntax___typing___AAttrFormExpr___attr_type},
-  {(bigint) 0 /* 99: AAttrExpr < AAttrFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 100: AAttrExpr < AAttrFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAttrFormExpr___n_expr},
   {(bigint) parser___parser_nodes___AAttrFormExpr___n_id},
   {(bigint) parser___parser_prod___AAttrExpr___empty_init},
   {(bigint) parser___parser_prod___AAttrExpr___init_aattrexpr},
-  {(bigint) 5 /* 104: AAttrExpr < AAttrExpr: superclass init_table position */},
+  {(bigint) 5 /* 105: AAttrExpr < AAttrExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -73504,23 +76356,24 @@ const classtable_elt_t VFT_parser___parser_nodes___AAttrExpr[105] = {
 /* 3: Attribute AAttrExpr::_location */
 /* 4: Attribute AAttrExpr::_first_location */
 /* 5: Attribute AAttrExpr::_last_location */
+/* 6: Attribute AAttrExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AAttrExpr::_is_typed */
-/* 8: Attribute AAttrExpr::_stype */
-/* 9: Attribute AAttrExpr::_if_true_flow_ctx */
-/* 10: Attribute AAttrExpr::_if_false_flow_ctx */
+/* 8: Attribute AAttrExpr::_is_typed */
+/* 9: Attribute AAttrExpr::_stype */
+/* 10: Attribute AAttrExpr::_if_true_flow_ctx */
+/* 11: Attribute AAttrExpr::_if_false_flow_ctx */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute AAttrExpr::_prop */
-/* 17: Attribute AAttrExpr::_attr_type */
-/* 18: Attribute AAttrExpr::_n_expr */
-/* 19: Attribute AAttrExpr::_n_id */
+/* 17: Attribute AAttrExpr::_prop */
+/* 18: Attribute AAttrExpr::_attr_type */
+/* 19: Attribute AAttrExpr::_n_expr */
+/* 20: Attribute AAttrExpr::_n_id */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAttrExpr[] = "init var of AAttrExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AAttrExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -73528,10 +76381,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAttrExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAttrExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -73540,7 +76397,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAttrExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AAttrExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 20);
+  obj = alloc(sizeof(val_t) * 21);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AAttrExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -73584,13 +76441,13 @@ val_t NEW_AAttrExpr_parser___parser_prod___AAttrExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5514;
+  fra.me.line = 5744;
   fra.me.meth = LOCATE_NEW_AAttrExpr_parser___parser_prod___AAttrExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5514 */
+  /* parser/parser_prod.nit:5744 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAttrExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AAttrExpr(fra.me.REG[0]);
   parser___parser_prod___AAttrExpr___empty_init(fra.me.REG[0], init_table);
@@ -73605,7 +76462,7 @@ val_t NEW_AAttrExpr_parser___parser_prod___AAttrExpr___init_aattrexpr(val_t p0,
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5516;
+  fra.me.line = 5746;
   fra.me.meth = LOCATE_NEW_AAttrExpr_parser___parser_prod___AAttrExpr___init_aattrexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -73615,7 +76472,7 @@ val_t NEW_AAttrExpr_parser___parser_prod___AAttrExpr___init_aattrexpr(val_t p0,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5516 */
+  /* parser/parser_prod.nit:5746 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AAttrExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AAttrExpr(fra.me.REG[2]);
   parser___parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -73644,17 +76501,17 @@ val_t NEW_AAttrExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AAttrAssignExpr[102] = {
-  {(bigint) 4243 /* 0: Identity */},
-  {(bigint) 20 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AAttrAssignExpr[103] = {
+  {(bigint) 4799 /* 0: Identity */},
+  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AAttrAssignExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AAttrAssignExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AAttrAssignExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AAttrAssignExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4015 /* 6: AAttrAssignExpr < AAttrFormExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AAttrAssignExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4023 /* 8: AAttrAssignExpr < AAssignFormExpr: superclass typecheck marker */},
-  {(bigint) 4243 /* 9: AAttrAssignExpr < AAttrAssignExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AAttrAssignExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4559 /* 6: AAttrAssignExpr < AAttrFormExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AAttrAssignExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4571 /* 8: AAttrAssignExpr < AAssignFormExpr: superclass typecheck marker */},
+  {(bigint) 4799 /* 9: AAttrAssignExpr < AAttrAssignExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -73719,13 +76576,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AAttrAssignExpr[102] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AAttrAssignExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AAttrAssignExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AAttrAssignExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AAttrAssignExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -73735,8 +76593,8 @@ const classtable_elt_t VFT_parser___parser_nodes___AAttrAssignExpr[102] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___AAttrAssignExpr___empty_init},
   {(bigint) parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr},
-  {(bigint) 6 /* 90: AAttrAssignExpr < AAttrAssignExpr: superclass init_table position */},
-  {(bigint) 5 /* 91: AAttrAssignExpr < AAssignFormExpr: superclass init_table position */},
+  {(bigint) 6 /* 91: AAttrAssignExpr < AAttrAssignExpr: superclass init_table position */},
+  {(bigint) 5 /* 92: AAttrAssignExpr < AAssignFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAssignFormExpr___n_assign},
   {(bigint) parser___parser_nodes___AAssignFormExpr___n_value},
   {0} /* Class Hole :( */,
@@ -73744,7 +76602,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AAttrAssignExpr[102] = {
   {(bigint) syntax___typing___AAttrFormExpr___do_typing},
   {(bigint) syntax___typing___AAttrFormExpr___prop},
   {(bigint) syntax___typing___AAttrFormExpr___attr_type},
-  {(bigint) 0 /* 99: AAttrAssignExpr < AAttrFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 100: AAttrAssignExpr < AAttrFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAttrFormExpr___n_expr},
   {(bigint) parser___parser_nodes___AAttrFormExpr___n_id},
 };
@@ -73754,23 +76612,24 @@ const classtable_elt_t VFT_parser___parser_nodes___AAttrAssignExpr[102] = {
 /* 3: Attribute AAttrAssignExpr::_location */
 /* 4: Attribute AAttrAssignExpr::_first_location */
 /* 5: Attribute AAttrAssignExpr::_last_location */
+/* 6: Attribute AAttrAssignExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AAttrAssignExpr::_is_typed */
-/* 8: Attribute AAttrAssignExpr::_stype */
-/* 9: Attribute AAttrAssignExpr::_if_true_flow_ctx */
-/* 10: Attribute AAttrAssignExpr::_if_false_flow_ctx */
+/* 8: Attribute AAttrAssignExpr::_is_typed */
+/* 9: Attribute AAttrAssignExpr::_stype */
+/* 10: Attribute AAttrAssignExpr::_if_true_flow_ctx */
+/* 11: Attribute AAttrAssignExpr::_if_false_flow_ctx */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 13: Attribute AAttrAssignExpr::_n_assign */
-/* 14: Attribute AAttrAssignExpr::_n_value */
+/* 14: Attribute AAttrAssignExpr::_n_assign */
+/* 15: Attribute AAttrAssignExpr::_n_value */
 /* Instance Hole :( */
-/* 16: Attribute AAttrAssignExpr::_prop */
-/* 17: Attribute AAttrAssignExpr::_attr_type */
-/* 18: Attribute AAttrAssignExpr::_n_expr */
-/* 19: Attribute AAttrAssignExpr::_n_id */
+/* 17: Attribute AAttrAssignExpr::_prop */
+/* 18: Attribute AAttrAssignExpr::_attr_type */
+/* 19: Attribute AAttrAssignExpr::_n_expr */
+/* 20: Attribute AAttrAssignExpr::_n_id */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAttrAssignExpr[] = "init var of AAttrAssignExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AAttrAssignExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -73778,10 +76637,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAttrAssignExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAttrAssignExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -73790,7 +76653,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAttrAssignExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AAttrAssignExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 20);
+  obj = alloc(sizeof(val_t) * 21);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AAttrAssignExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -73844,13 +76707,13 @@ val_t NEW_AAttrAssignExpr_parser___parser_prod___AAttrAssignExpr___empty_init(vo
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5559;
+  fra.me.line = 5789;
   fra.me.meth = LOCATE_NEW_AAttrAssignExpr_parser___parser_prod___AAttrAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5559 */
+  /* parser/parser_prod.nit:5789 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAttrAssignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AAttrAssignExpr(fra.me.REG[0]);
   parser___parser_prod___AAttrAssignExpr___empty_init(fra.me.REG[0], init_table);
@@ -73865,7 +76728,7 @@ val_t NEW_AAttrAssignExpr_parser___parser_prod___AAttrAssignExpr___init_aattrass
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5561;
+  fra.me.line = 5791;
   fra.me.meth = LOCATE_NEW_AAttrAssignExpr_parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -73879,7 +76742,7 @@ val_t NEW_AAttrAssignExpr_parser___parser_prod___AAttrAssignExpr___init_aattrass
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:5561 */
+  /* parser/parser_prod.nit:5791 */
   fra.me.REG[4] = NEW_parser___parser_nodes___AAttrAssignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AAttrAssignExpr(fra.me.REG[4]);
   parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
@@ -73908,17 +76771,17 @@ val_t NEW_AAttrAssignExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AAttrReassignExpr[102] = {
-  {(bigint) 4235 /* 0: Identity */},
-  {(bigint) 20 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AAttrReassignExpr[103] = {
+  {(bigint) 4791 /* 0: Identity */},
+  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AAttrReassignExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AAttrReassignExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AAttrReassignExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AAttrReassignExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4015 /* 6: AAttrReassignExpr < AAttrFormExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AAttrReassignExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3815 /* 8: AAttrReassignExpr < AReassignFormExpr: superclass typecheck marker */},
-  {(bigint) 4235 /* 9: AAttrReassignExpr < AAttrReassignExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AAttrReassignExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4559 /* 6: AAttrReassignExpr < AAttrFormExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AAttrReassignExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4331 /* 8: AAttrReassignExpr < AReassignFormExpr: superclass typecheck marker */},
+  {(bigint) 4791 /* 9: AAttrReassignExpr < AAttrReassignExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -73983,13 +76846,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AAttrReassignExpr[102] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AAttrReassignExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AAttrReassignExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AAttrReassignExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AAttrReassignExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -73999,16 +76863,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AAttrReassignExpr[102] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___AAttrReassignExpr___empty_init},
   {(bigint) parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr},
-  {(bigint) 6 /* 90: AAttrReassignExpr < AAttrReassignExpr: superclass init_table position */},
+  {(bigint) 6 /* 91: AAttrReassignExpr < AAttrReassignExpr: superclass init_table position */},
   {(bigint) syntax___typing___AReassignFormExpr___do_rvalue_typing},
   {(bigint) syntax___typing___AReassignFormExpr___assign_method},
-  {(bigint) 5 /* 93: AAttrReassignExpr < AReassignFormExpr: superclass init_table position */},
+  {(bigint) 5 /* 94: AAttrReassignExpr < AReassignFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AReassignFormExpr___n_assign_op},
   {(bigint) parser___parser_nodes___AReassignFormExpr___n_value},
   {(bigint) syntax___typing___AAttrFormExpr___do_typing},
   {(bigint) syntax___typing___AAttrFormExpr___prop},
   {(bigint) syntax___typing___AAttrFormExpr___attr_type},
-  {(bigint) 0 /* 99: AAttrReassignExpr < AAttrFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 100: AAttrReassignExpr < AAttrFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAttrFormExpr___n_expr},
   {(bigint) parser___parser_nodes___AAttrFormExpr___n_id},
 };
@@ -74018,23 +76882,24 @@ const classtable_elt_t VFT_parser___parser_nodes___AAttrReassignExpr[102] = {
 /* 3: Attribute AAttrReassignExpr::_location */
 /* 4: Attribute AAttrReassignExpr::_first_location */
 /* 5: Attribute AAttrReassignExpr::_last_location */
+/* 6: Attribute AAttrReassignExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AAttrReassignExpr::_is_typed */
-/* 8: Attribute AAttrReassignExpr::_stype */
-/* 9: Attribute AAttrReassignExpr::_if_true_flow_ctx */
-/* 10: Attribute AAttrReassignExpr::_if_false_flow_ctx */
+/* 8: Attribute AAttrReassignExpr::_is_typed */
+/* 9: Attribute AAttrReassignExpr::_stype */
+/* 10: Attribute AAttrReassignExpr::_if_true_flow_ctx */
+/* 11: Attribute AAttrReassignExpr::_if_false_flow_ctx */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 13: Attribute AAttrReassignExpr::_assign_method */
-/* 14: Attribute AAttrReassignExpr::_n_assign_op */
-/* 15: Attribute AAttrReassignExpr::_n_value */
-/* 16: Attribute AAttrReassignExpr::_prop */
-/* 17: Attribute AAttrReassignExpr::_attr_type */
-/* 18: Attribute AAttrReassignExpr::_n_expr */
-/* 19: Attribute AAttrReassignExpr::_n_id */
+/* 14: Attribute AAttrReassignExpr::_assign_method */
+/* 15: Attribute AAttrReassignExpr::_n_assign_op */
+/* 16: Attribute AAttrReassignExpr::_n_value */
+/* 17: Attribute AAttrReassignExpr::_prop */
+/* 18: Attribute AAttrReassignExpr::_attr_type */
+/* 19: Attribute AAttrReassignExpr::_n_expr */
+/* 20: Attribute AAttrReassignExpr::_n_id */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAttrReassignExpr[] = "init var of AAttrReassignExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AAttrReassignExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -74042,10 +76907,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAttrReassignExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAttrReassignExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -74054,7 +76923,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAttrReassignExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AAttrReassignExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 20);
+  obj = alloc(sizeof(val_t) * 21);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AAttrReassignExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -74079,25 +76948,25 @@ void CHECKNEW_parser___parser_nodes___AAttrReassignExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -74108,13 +76977,13 @@ val_t NEW_AAttrReassignExpr_parser___parser_prod___AAttrReassignExpr___empty_ini
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5632;
+  fra.me.line = 5862;
   fra.me.meth = LOCATE_NEW_AAttrReassignExpr_parser___parser_prod___AAttrReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5632 */
+  /* parser/parser_prod.nit:5862 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAttrReassignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AAttrReassignExpr(fra.me.REG[0]);
   parser___parser_prod___AAttrReassignExpr___empty_init(fra.me.REG[0], init_table);
@@ -74129,7 +76998,7 @@ val_t NEW_AAttrReassignExpr_parser___parser_prod___AAttrReassignExpr___init_aatt
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5634;
+  fra.me.line = 5864;
   fra.me.meth = LOCATE_NEW_AAttrReassignExpr_parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -74143,7 +77012,7 @@ val_t NEW_AAttrReassignExpr_parser___parser_prod___AAttrReassignExpr___init_aatt
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:5634 */
+  /* parser/parser_prod.nit:5864 */
   fra.me.REG[4] = NEW_parser___parser_nodes___AAttrReassignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AAttrReassignExpr(fra.me.REG[4]);
   parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
@@ -74172,23 +77041,23 @@ val_t NEW_AAttrReassignExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ACallExpr[125] = {
-  {(bigint) 4395 /* 0: Identity */},
-  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ACallExpr[126] = {
+  {(bigint) 4951 /* 0: Identity */},
+  {(bigint) 23 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ACallExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ACallExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ACallExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ACallExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: ACallExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: ACallExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ACallExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: ACallExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ACallExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: ACallExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: ACallExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: ACallExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: ACallExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: ACallExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: ACallExpr < ASendExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 4323 /* 14: ACallExpr < ACallFormExpr: superclass typecheck marker */},
-  {(bigint) 4395 /* 15: ACallExpr < ACallExpr: superclass typecheck marker */},
+  {(bigint) 4879 /* 14: ACallExpr < ACallFormExpr: superclass typecheck marker */},
+  {(bigint) 4951 /* 15: ACallExpr < ACallExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
@@ -74247,13 +77116,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ACallExpr[125] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: ACallExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: ACallExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: ACallExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: ACallExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: ACallExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -74273,13 +77143,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ACallExpr[125] = {
   {(bigint) syntax___typing___ACallExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: ACallExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: ACallExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: ACallExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: ACallExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___ACallExpr___name},
@@ -74287,17 +77157,17 @@ const classtable_elt_t VFT_parser___parser_nodes___ACallExpr[125] = {
   {(bigint) syntax___typing___ACallFormExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: ACallExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: ACallExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) syntax___typing___ASendExpr___after_typing},
   {(bigint) syntax___typing___ACallExpr___variable_create},
-  {(bigint) 0 /* 119: ACallExpr < ACallFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 120: ACallExpr < ACallFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ACallFormExpr___n_id},
   {(bigint) parser___parser_nodes___ACallFormExpr___n_args},
   {(bigint) parser___parser_prod___ACallExpr___empty_init},
   {(bigint) parser___parser_prod___ACallExpr___init_acallexpr},
-  {(bigint) 9 /* 124: ACallExpr < ACallExpr: superclass init_table position */},
+  {(bigint) 9 /* 125: ACallExpr < ACallExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -74305,22 +77175,23 @@ const classtable_elt_t VFT_parser___parser_nodes___ACallExpr[125] = {
 /* 3: Attribute ACallExpr::_location */
 /* 4: Attribute ACallExpr::_first_location */
 /* 5: Attribute ACallExpr::_last_location */
+/* 6: Attribute ACallExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ACallExpr::_is_typed */
-/* 8: Attribute ACallExpr::_stype */
-/* 9: Attribute ACallExpr::_if_true_flow_ctx */
-/* 10: Attribute ACallExpr::_if_false_flow_ctx */
-/* 11: Attribute ACallExpr::_prop_signature */
-/* 12: Attribute ACallExpr::_raw_arguments_cache */
+/* 8: Attribute ACallExpr::_is_typed */
+/* 9: Attribute ACallExpr::_stype */
+/* 10: Attribute ACallExpr::_if_true_flow_ctx */
+/* 11: Attribute ACallExpr::_if_false_flow_ctx */
+/* 12: Attribute ACallExpr::_prop_signature */
+/* 13: Attribute ACallExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute ACallExpr::_prop */
-/* 17: Attribute ACallExpr::_return_type */
-/* 18: Attribute ACallExpr::_n_expr */
-/* 19: Attribute ACallExpr::_n_closure_defs */
-/* 20: Attribute ACallExpr::_n_id */
-/* 21: Attribute ACallExpr::_n_args */
+/* 17: Attribute ACallExpr::_prop */
+/* 18: Attribute ACallExpr::_return_type */
+/* 19: Attribute ACallExpr::_n_expr */
+/* 20: Attribute ACallExpr::_n_closure_defs */
+/* 21: Attribute ACallExpr::_n_id */
+/* 22: Attribute ACallExpr::_n_args */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ACallExpr[] = "init var of ACallExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ACallExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -74336,21 +77207,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ACallExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ACallExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 22);
+  obj = alloc(sizeof(val_t) * 23);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ACallExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -74370,30 +77244,30 @@ void CHECKNEW_parser___parser_nodes___ACallExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -74404,13 +77278,13 @@ val_t NEW_ACallExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_ACallExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ACallExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ACallExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -74425,13 +77299,13 @@ val_t NEW_ACallExpr_parser___parser_prod___ACallExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5705;
+  fra.me.line = 5935;
   fra.me.meth = LOCATE_NEW_ACallExpr_parser___parser_prod___ACallExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5705 */
+  /* parser/parser_prod.nit:5935 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ACallExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ACallExpr(fra.me.REG[0]);
   parser___parser_prod___ACallExpr___empty_init(fra.me.REG[0], init_table);
@@ -74446,7 +77320,7 @@ val_t NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(val_t p0,
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5707;
+  fra.me.line = 5937;
   fra.me.meth = LOCATE_NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -74460,7 +77334,7 @@ val_t NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(val_t p0,
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:5707 */
+  /* parser/parser_prod.nit:5937 */
   fra.me.REG[4] = NEW_parser___parser_nodes___ACallExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ACallExpr(fra.me.REG[4]);
   parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
@@ -74496,7 +77370,7 @@ val_t NEW_ACallExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_ACallExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -74504,7 +77378,7 @@ val_t NEW_ACallExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ACallExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ACallExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -74512,22 +77386,22 @@ val_t NEW_ACallExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ACallAssignExpr[122] = {
-  {(bigint) 4399 /* 0: Identity */},
-  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ACallAssignExpr[123] = {
+  {(bigint) 4955 /* 0: Identity */},
+  {(bigint) 23 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ACallAssignExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ACallAssignExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ACallAssignExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ACallAssignExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: ACallAssignExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: ACallAssignExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4023 /* 8: ACallAssignExpr < AAssignFormExpr: superclass typecheck marker */},
-  {(bigint) 4263 /* 9: ACallAssignExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: ACallAssignExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: ACallAssignExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4399 /* 12: ACallAssignExpr < ACallAssignExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ACallAssignExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: ACallAssignExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ACallAssignExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4571 /* 8: ACallAssignExpr < AAssignFormExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: ACallAssignExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: ACallAssignExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: ACallAssignExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4955 /* 12: ACallAssignExpr < ACallAssignExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4323 /* 14: ACallAssignExpr < ACallFormExpr: superclass typecheck marker */},
+  {(bigint) 4879 /* 14: ACallAssignExpr < ACallFormExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
@@ -74587,13 +77461,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ACallAssignExpr[122] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: ACallAssignExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: ACallAssignExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: ACallAssignExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: ACallAssignExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: ACallAssignExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -74603,8 +77478,8 @@ const classtable_elt_t VFT_parser___parser_nodes___ACallAssignExpr[122] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___ACallAssignExpr___empty_init},
   {(bigint) parser___parser_prod___ACallAssignExpr___init_acallassignexpr},
-  {(bigint) 10 /* 90: ACallAssignExpr < ACallAssignExpr: superclass init_table position */},
-  {(bigint) 9 /* 91: ACallAssignExpr < AAssignFormExpr: superclass init_table position */},
+  {(bigint) 10 /* 91: ACallAssignExpr < ACallAssignExpr: superclass init_table position */},
+  {(bigint) 9 /* 92: ACallAssignExpr < AAssignFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAssignFormExpr___n_assign},
   {(bigint) parser___parser_nodes___AAssignFormExpr___n_value},
   {0} /* Class Hole :( */,
@@ -74613,13 +77488,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ACallAssignExpr[122] = {
   {(bigint) syntax___typing___ACallAssignExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: ACallAssignExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: ACallAssignExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: ACallAssignExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: ACallAssignExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___ACallAssignExpr___name},
@@ -74627,12 +77502,12 @@ const classtable_elt_t VFT_parser___parser_nodes___ACallAssignExpr[122] = {
   {(bigint) syntax___typing___ACallFormExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: ACallAssignExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: ACallAssignExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) syntax___typing___ASendExpr___after_typing},
   {(bigint) syntax___typing___ACallAssignExpr___variable_create},
-  {(bigint) 0 /* 119: ACallAssignExpr < ACallFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 120: ACallAssignExpr < ACallFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ACallFormExpr___n_id},
   {(bigint) parser___parser_nodes___ACallFormExpr___n_args},
 };
@@ -74642,22 +77517,23 @@ const classtable_elt_t VFT_parser___parser_nodes___ACallAssignExpr[122] = {
 /* 3: Attribute ACallAssignExpr::_location */
 /* 4: Attribute ACallAssignExpr::_first_location */
 /* 5: Attribute ACallAssignExpr::_last_location */
+/* 6: Attribute ACallAssignExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ACallAssignExpr::_is_typed */
-/* 8: Attribute ACallAssignExpr::_stype */
-/* 9: Attribute ACallAssignExpr::_if_true_flow_ctx */
-/* 10: Attribute ACallAssignExpr::_if_false_flow_ctx */
-/* 11: Attribute ACallAssignExpr::_prop_signature */
-/* 12: Attribute ACallAssignExpr::_raw_arguments_cache */
-/* 13: Attribute ACallAssignExpr::_n_assign */
-/* 14: Attribute ACallAssignExpr::_n_value */
+/* 8: Attribute ACallAssignExpr::_is_typed */
+/* 9: Attribute ACallAssignExpr::_stype */
+/* 10: Attribute ACallAssignExpr::_if_true_flow_ctx */
+/* 11: Attribute ACallAssignExpr::_if_false_flow_ctx */
+/* 12: Attribute ACallAssignExpr::_prop_signature */
+/* 13: Attribute ACallAssignExpr::_raw_arguments_cache */
+/* 14: Attribute ACallAssignExpr::_n_assign */
+/* 15: Attribute ACallAssignExpr::_n_value */
 /* Instance Hole :( */
-/* 16: Attribute ACallAssignExpr::_prop */
-/* 17: Attribute ACallAssignExpr::_return_type */
-/* 18: Attribute ACallAssignExpr::_n_expr */
-/* 19: Attribute ACallAssignExpr::_n_closure_defs */
-/* 20: Attribute ACallAssignExpr::_n_id */
-/* 21: Attribute ACallAssignExpr::_n_args */
+/* 17: Attribute ACallAssignExpr::_prop */
+/* 18: Attribute ACallAssignExpr::_return_type */
+/* 19: Attribute ACallAssignExpr::_n_expr */
+/* 20: Attribute ACallAssignExpr::_n_closure_defs */
+/* 21: Attribute ACallAssignExpr::_n_id */
+/* 22: Attribute ACallAssignExpr::_n_args */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ACallAssignExpr[] = "init var of ACallAssignExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ACallAssignExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -74673,21 +77549,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ACallAssignExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ACallAssignExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 22);
+  obj = alloc(sizeof(val_t) * 23);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ACallAssignExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -74707,11 +77586,21 @@ void CHECKNEW_parser___parser_nodes___ACallAssignExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -74732,16 +77621,6 @@ void CHECKNEW_parser___parser_nodes___ACallAssignExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_ACallAssignExpr_parser___parser_prod___ASendExpr___empty_init[] = "new ACallAssignExpr parser_prod::ASendExpr::empty_init";
@@ -74751,13 +77630,13 @@ val_t NEW_ACallAssignExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_ACallAssignExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ACallAssignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ACallAssignExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -74772,13 +77651,13 @@ val_t NEW_ACallAssignExpr_parser___parser_prod___ACallAssignExpr___empty_init(vo
   int init_table[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5785;
+  fra.me.line = 6015;
   fra.me.meth = LOCATE_NEW_ACallAssignExpr_parser___parser_prod___ACallAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5785 */
+  /* parser/parser_prod.nit:6015 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ACallAssignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ACallAssignExpr(fra.me.REG[0]);
   parser___parser_prod___ACallAssignExpr___empty_init(fra.me.REG[0], init_table);
@@ -74793,7 +77672,7 @@ val_t NEW_ACallAssignExpr_parser___parser_prod___ACallAssignExpr___init_acallass
   int init_table[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5787;
+  fra.me.line = 6017;
   fra.me.meth = LOCATE_NEW_ACallAssignExpr_parser___parser_prod___ACallAssignExpr___init_acallassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -74809,7 +77688,7 @@ val_t NEW_ACallAssignExpr_parser___parser_prod___ACallAssignExpr___init_acallass
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:5787 */
+  /* parser/parser_prod.nit:6017 */
   fra.me.REG[5] = NEW_parser___parser_nodes___ACallAssignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ACallAssignExpr(fra.me.REG[5]);
   parser___parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
@@ -74845,7 +77724,7 @@ val_t NEW_ACallAssignExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_
   int init_table[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_ACallAssignExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -74853,7 +77732,7 @@ val_t NEW_ACallAssignExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ACallAssignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ACallAssignExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -74861,23 +77740,23 @@ val_t NEW_ACallAssignExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ACallReassignExpr[125] = {
-  {(bigint) 4391 /* 0: Identity */},
-  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ACallReassignExpr[126] = {
+  {(bigint) 4947 /* 0: Identity */},
+  {(bigint) 23 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ACallReassignExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ACallReassignExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ACallReassignExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ACallReassignExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: ACallReassignExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: ACallReassignExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3815 /* 8: ACallReassignExpr < AReassignFormExpr: superclass typecheck marker */},
-  {(bigint) 4263 /* 9: ACallReassignExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: ACallReassignExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: ACallReassignExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4311 /* 12: ACallReassignExpr < ASendReassignFormExpr: superclass typecheck marker */},
-  {(bigint) 4315 /* 13: ACallReassignExpr < ASendReassignExpr: superclass typecheck marker */},
-  {(bigint) 4323 /* 14: ACallReassignExpr < ACallFormExpr: superclass typecheck marker */},
-  {(bigint) 4391 /* 15: ACallReassignExpr < ACallReassignExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ACallReassignExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: ACallReassignExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ACallReassignExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4331 /* 8: ACallReassignExpr < AReassignFormExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: ACallReassignExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: ACallReassignExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: ACallReassignExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4867 /* 12: ACallReassignExpr < ASendReassignFormExpr: superclass typecheck marker */},
+  {(bigint) 4871 /* 13: ACallReassignExpr < ASendReassignExpr: superclass typecheck marker */},
+  {(bigint) 4879 /* 14: ACallReassignExpr < ACallFormExpr: superclass typecheck marker */},
+  {(bigint) 4947 /* 15: ACallReassignExpr < ACallReassignExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
@@ -74936,13 +77815,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ACallReassignExpr[125] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 7 /* 72: ACallReassignExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: ACallReassignExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: ACallReassignExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 6 /* 80: ACallReassignExpr < AExpr: superclass init_table position */},
+  {(bigint) 6 /* 81: ACallReassignExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendReassignExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -74950,25 +77830,25 @@ const classtable_elt_t VFT_parser___parser_nodes___ACallReassignExpr[125] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 11 /* 88: ACallReassignExpr < ASendReassignFormExpr: superclass init_table position */},
-  {(bigint) 0 /* 89: ACallReassignExpr < ASendReassignExpr: superclass init_table position */},
+  {(bigint) 11 /* 89: ACallReassignExpr < ASendReassignFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 90: ACallReassignExpr < ASendReassignExpr: superclass init_table position */},
   {(bigint) syntax___typing___ASendReassignExpr___read_prop},
   {(bigint) syntax___typing___AReassignFormExpr___do_rvalue_typing},
   {(bigint) syntax___typing___AReassignFormExpr___assign_method},
-  {(bigint) 5 /* 93: ACallReassignExpr < AReassignFormExpr: superclass init_table position */},
+  {(bigint) 5 /* 94: ACallReassignExpr < AReassignFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AReassignFormExpr___n_assign_op},
   {(bigint) parser___parser_nodes___AReassignFormExpr___n_value},
   {(bigint) syntax___icode_generation___AAbsAbsSendExpr___generate_icode_for_arguments_in},
   {(bigint) syntax___typing___ACallReassignExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: ACallReassignExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: ACallReassignExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: ACallReassignExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: ACallReassignExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___ACallReassignExpr___name},
@@ -74976,17 +77856,17 @@ const classtable_elt_t VFT_parser___parser_nodes___ACallReassignExpr[125] = {
   {(bigint) syntax___typing___ACallFormExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: ACallReassignExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: ACallReassignExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) syntax___typing___ASendExpr___after_typing},
   {(bigint) syntax___typing___ACallReassignExpr___variable_create},
-  {(bigint) 10 /* 119: ACallReassignExpr < ACallFormExpr: superclass init_table position */},
+  {(bigint) 10 /* 120: ACallReassignExpr < ACallFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ACallFormExpr___n_id},
   {(bigint) parser___parser_nodes___ACallFormExpr___n_args},
   {(bigint) parser___parser_prod___ACallReassignExpr___empty_init},
   {(bigint) parser___parser_prod___ACallReassignExpr___init_acallreassignexpr},
-  {(bigint) 12 /* 124: ACallReassignExpr < ACallReassignExpr: superclass init_table position */},
+  {(bigint) 12 /* 125: ACallReassignExpr < ACallReassignExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -74994,22 +77874,23 @@ const classtable_elt_t VFT_parser___parser_nodes___ACallReassignExpr[125] = {
 /* 3: Attribute ACallReassignExpr::_location */
 /* 4: Attribute ACallReassignExpr::_first_location */
 /* 5: Attribute ACallReassignExpr::_last_location */
-/* 6: Attribute ACallReassignExpr::_read_prop */
-/* 7: Attribute ACallReassignExpr::_is_typed */
-/* 8: Attribute ACallReassignExpr::_stype */
-/* 9: Attribute ACallReassignExpr::_if_true_flow_ctx */
-/* 10: Attribute ACallReassignExpr::_if_false_flow_ctx */
-/* 11: Attribute ACallReassignExpr::_prop_signature */
-/* 12: Attribute ACallReassignExpr::_raw_arguments_cache */
-/* 13: Attribute ACallReassignExpr::_assign_method */
-/* 14: Attribute ACallReassignExpr::_n_assign_op */
-/* 15: Attribute ACallReassignExpr::_n_value */
-/* 16: Attribute ACallReassignExpr::_prop */
-/* 17: Attribute ACallReassignExpr::_return_type */
-/* 18: Attribute ACallReassignExpr::_n_expr */
-/* 19: Attribute ACallReassignExpr::_n_closure_defs */
-/* 20: Attribute ACallReassignExpr::_n_id */
-/* 21: Attribute ACallReassignExpr::_n_args */
+/* 6: Attribute ACallReassignExpr::_n_annotations */
+/* 7: Attribute ACallReassignExpr::_read_prop */
+/* 8: Attribute ACallReassignExpr::_is_typed */
+/* 9: Attribute ACallReassignExpr::_stype */
+/* 10: Attribute ACallReassignExpr::_if_true_flow_ctx */
+/* 11: Attribute ACallReassignExpr::_if_false_flow_ctx */
+/* 12: Attribute ACallReassignExpr::_prop_signature */
+/* 13: Attribute ACallReassignExpr::_raw_arguments_cache */
+/* 14: Attribute ACallReassignExpr::_assign_method */
+/* 15: Attribute ACallReassignExpr::_n_assign_op */
+/* 16: Attribute ACallReassignExpr::_n_value */
+/* 17: Attribute ACallReassignExpr::_prop */
+/* 18: Attribute ACallReassignExpr::_return_type */
+/* 19: Attribute ACallReassignExpr::_n_expr */
+/* 20: Attribute ACallReassignExpr::_n_closure_defs */
+/* 21: Attribute ACallReassignExpr::_n_id */
+/* 22: Attribute ACallReassignExpr::_n_args */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ACallReassignExpr[] = "init var of ACallReassignExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ACallReassignExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -75025,21 +77906,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ACallReassignExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ACallReassignExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 22);
+  obj = alloc(sizeof(val_t) * 23);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ACallReassignExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -75059,20 +77943,20 @@ void CHECKNEW_parser___parser_nodes___ACallReassignExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -75084,15 +77968,15 @@ void CHECKNEW_parser___parser_nodes___ACallReassignExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -75103,13 +77987,13 @@ val_t NEW_ACallReassignExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[13] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_ACallReassignExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ACallReassignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ACallReassignExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -75124,13 +78008,13 @@ val_t NEW_ACallReassignExpr_parser___parser_prod___ACallReassignExpr___empty_ini
   int init_table[13] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5872;
+  fra.me.line = 6102;
   fra.me.meth = LOCATE_NEW_ACallReassignExpr_parser___parser_prod___ACallReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5872 */
+  /* parser/parser_prod.nit:6102 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ACallReassignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ACallReassignExpr(fra.me.REG[0]);
   parser___parser_prod___ACallReassignExpr___empty_init(fra.me.REG[0], init_table);
@@ -75145,7 +78029,7 @@ val_t NEW_ACallReassignExpr_parser___parser_prod___ACallReassignExpr___init_acal
   int init_table[13] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5874;
+  fra.me.line = 6104;
   fra.me.meth = LOCATE_NEW_ACallReassignExpr_parser___parser_prod___ACallReassignExpr___init_acallreassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -75161,7 +78045,7 @@ val_t NEW_ACallReassignExpr_parser___parser_prod___ACallReassignExpr___init_acal
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:5874 */
+  /* parser/parser_prod.nit:6104 */
   fra.me.REG[5] = NEW_parser___parser_nodes___ACallReassignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ACallReassignExpr(fra.me.REG[5]);
   parser___parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
@@ -75197,7 +78081,7 @@ val_t NEW_ACallReassignExpr_parser___parser_prod___ASendExpr___init_asendexpr(va
   int init_table[13] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_ACallReassignExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -75205,7 +78089,7 @@ val_t NEW_ACallReassignExpr_parser___parser_prod___ASendExpr___init_asendexpr(va
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ACallReassignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ACallReassignExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -75213,19 +78097,19 @@ val_t NEW_ACallReassignExpr_parser___parser_prod___ASendExpr___init_asendexpr(va
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ASuperExpr[116] = {
-  {(bigint) 4299 /* 0: Identity */},
-  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ASuperExpr[117] = {
+  {(bigint) 4855 /* 0: Identity */},
+  {(bigint) 23 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ASuperExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ASuperExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ASuperExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ASuperExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: ASuperExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: ASuperExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ASuperExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: ASuperExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ASuperExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: ASuperExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: ASuperExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4299 /* 11: ASuperExpr < ASuperExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: ASuperExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: ASuperExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4855 /* 11: ASuperExpr < ASuperExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -75288,13 +78172,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ASuperExpr[116] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 4 /* 72: ASuperExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 0 /* 75: ASuperExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 0 /* 76: ASuperExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 3 /* 80: ASuperExpr < AExpr: superclass init_table position */},
+  {(bigint) 3 /* 81: ASuperExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASuperExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -75314,19 +78199,19 @@ const classtable_elt_t VFT_parser___parser_nodes___ASuperExpr[116] = {
   {(bigint) syntax___typing___ASuperExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 2 /* 100: ASuperExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 2 /* 101: ASuperExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 1 /* 106: ASuperExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 1 /* 107: ASuperExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___ASuperExpr___init_in_superclass},
   {(bigint) parser___parser_prod___ASuperExpr___empty_init},
   {(bigint) parser___parser_prod___ASuperExpr___init_asuperexpr},
-  {(bigint) 7 /* 112: ASuperExpr < ASuperExpr: superclass init_table position */},
+  {(bigint) 7 /* 113: ASuperExpr < ASuperExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASuperExpr___n_qualified},
   {(bigint) parser___parser_nodes___ASuperExpr___n_kwsuper},
   {(bigint) parser___parser_nodes___ASuperExpr___n_args},
@@ -75337,22 +78222,23 @@ const classtable_elt_t VFT_parser___parser_nodes___ASuperExpr[116] = {
 /* 3: Attribute ASuperExpr::_location */
 /* 4: Attribute ASuperExpr::_first_location */
 /* 5: Attribute ASuperExpr::_last_location */
+/* 6: Attribute ASuperExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ASuperExpr::_is_typed */
-/* 8: Attribute ASuperExpr::_stype */
-/* 9: Attribute ASuperExpr::_if_true_flow_ctx */
-/* 10: Attribute ASuperExpr::_if_false_flow_ctx */
-/* 11: Attribute ASuperExpr::_prop_signature */
-/* 12: Attribute ASuperExpr::_raw_arguments_cache */
+/* 8: Attribute ASuperExpr::_is_typed */
+/* 9: Attribute ASuperExpr::_stype */
+/* 10: Attribute ASuperExpr::_if_true_flow_ctx */
+/* 11: Attribute ASuperExpr::_if_false_flow_ctx */
+/* 12: Attribute ASuperExpr::_prop_signature */
+/* 13: Attribute ASuperExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute ASuperExpr::_prop */
-/* 17: Attribute ASuperExpr::_return_type */
-/* 18: Attribute ASuperExpr::_init_in_superclass */
-/* 19: Attribute ASuperExpr::_n_qualified */
-/* 20: Attribute ASuperExpr::_n_kwsuper */
-/* 21: Attribute ASuperExpr::_n_args */
+/* 17: Attribute ASuperExpr::_prop */
+/* 18: Attribute ASuperExpr::_return_type */
+/* 19: Attribute ASuperExpr::_init_in_superclass */
+/* 20: Attribute ASuperExpr::_n_qualified */
+/* 21: Attribute ASuperExpr::_n_kwsuper */
+/* 22: Attribute ASuperExpr::_n_args */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ASuperExpr[] = "init var of ASuperExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ASuperExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -75368,21 +78254,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ASuperExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* parser/parser_nodes.nit:986 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:992 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ASuperExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 22);
+  obj = alloc(sizeof(val_t) * 23);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ASuperExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -75426,13 +78315,13 @@ val_t NEW_ASuperExpr_parser___parser_prod___ASuperExpr___empty_init(void){
   int init_table[8] = {0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5959;
+  fra.me.line = 6189;
   fra.me.meth = LOCATE_NEW_ASuperExpr_parser___parser_prod___ASuperExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:5959 */
+  /* parser/parser_prod.nit:6189 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ASuperExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ASuperExpr(fra.me.REG[0]);
   parser___parser_prod___ASuperExpr___empty_init(fra.me.REG[0], init_table);
@@ -75447,7 +78336,7 @@ val_t NEW_ASuperExpr_parser___parser_prod___ASuperExpr___init_asuperexpr(val_t p
   int init_table[8] = {0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 5961;
+  fra.me.line = 6191;
   fra.me.meth = LOCATE_NEW_ASuperExpr_parser___parser_prod___ASuperExpr___init_asuperexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -75459,7 +78348,7 @@ val_t NEW_ASuperExpr_parser___parser_prod___ASuperExpr___init_asuperexpr(val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5961 */
+  /* parser/parser_prod.nit:6191 */
   fra.me.REG[3] = NEW_parser___parser_nodes___ASuperExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ASuperExpr(fra.me.REG[3]);
   parser___parser_prod___ASuperExpr___init_asuperexpr(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -75488,20 +78377,20 @@ val_t NEW_ASuperExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AInitExpr[122] = {
-  {(bigint) 4319 /* 0: Identity */},
-  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AInitExpr[123] = {
+  {(bigint) 4875 /* 0: Identity */},
+  {(bigint) 23 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AInitExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AInitExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AInitExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AInitExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: AInitExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AInitExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AInitExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: AInitExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AInitExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: AInitExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: AInitExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: AInitExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4319 /* 12: AInitExpr < AInitExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: AInitExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: AInitExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: AInitExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4875 /* 12: AInitExpr < AInitExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -75563,13 +78452,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AInitExpr[122] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 5 /* 72: AInitExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 1 /* 75: AInitExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 1 /* 76: AInitExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 4 /* 80: AInitExpr < AExpr: superclass init_table position */},
+  {(bigint) 4 /* 81: AInitExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -75589,13 +78479,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AInitExpr[122] = {
   {(bigint) syntax___typing___AInitExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 3 /* 100: AInitExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 101: AInitExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 2 /* 106: AInitExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 2 /* 107: AInitExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___AInitExpr___name},
@@ -75603,12 +78493,12 @@ const classtable_elt_t VFT_parser___parser_nodes___AInitExpr[122] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 0 /* 114: AInitExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 0 /* 115: AInitExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
   {(bigint) parser___parser_prod___AInitExpr___empty_init},
   {(bigint) parser___parser_prod___AInitExpr___init_ainitexpr},
-  {(bigint) 8 /* 119: AInitExpr < AInitExpr: superclass init_table position */},
+  {(bigint) 8 /* 120: AInitExpr < AInitExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AInitExpr___n_kwinit},
   {(bigint) parser___parser_nodes___AInitExpr___n_args},
 };
@@ -75618,22 +78508,23 @@ const classtable_elt_t VFT_parser___parser_nodes___AInitExpr[122] = {
 /* 3: Attribute AInitExpr::_location */
 /* 4: Attribute AInitExpr::_first_location */
 /* 5: Attribute AInitExpr::_last_location */
+/* 6: Attribute AInitExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AInitExpr::_is_typed */
-/* 8: Attribute AInitExpr::_stype */
-/* 9: Attribute AInitExpr::_if_true_flow_ctx */
-/* 10: Attribute AInitExpr::_if_false_flow_ctx */
-/* 11: Attribute AInitExpr::_prop_signature */
-/* 12: Attribute AInitExpr::_raw_arguments_cache */
+/* 8: Attribute AInitExpr::_is_typed */
+/* 9: Attribute AInitExpr::_stype */
+/* 10: Attribute AInitExpr::_if_true_flow_ctx */
+/* 11: Attribute AInitExpr::_if_false_flow_ctx */
+/* 12: Attribute AInitExpr::_prop_signature */
+/* 13: Attribute AInitExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute AInitExpr::_prop */
-/* 17: Attribute AInitExpr::_return_type */
-/* 18: Attribute AInitExpr::_n_expr */
-/* 19: Attribute AInitExpr::_n_closure_defs */
-/* 20: Attribute AInitExpr::_n_kwinit */
-/* 21: Attribute AInitExpr::_n_args */
+/* 17: Attribute AInitExpr::_prop */
+/* 18: Attribute AInitExpr::_return_type */
+/* 19: Attribute AInitExpr::_n_expr */
+/* 20: Attribute AInitExpr::_n_closure_defs */
+/* 21: Attribute AInitExpr::_n_kwinit */
+/* 22: Attribute AInitExpr::_n_args */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AInitExpr[] = "init var of AInitExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AInitExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -75649,21 +78540,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AInitExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AInitExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 22);
+  obj = alloc(sizeof(val_t) * 23);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AInitExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -75683,30 +78577,30 @@ void CHECKNEW_parser___parser_nodes___AInitExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -75717,13 +78611,13 @@ val_t NEW_AInitExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_AInitExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AInitExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AInitExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -75738,13 +78632,13 @@ val_t NEW_AInitExpr_parser___parser_prod___AInitExpr___empty_init(void){
   int init_table[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6022;
+  fra.me.line = 6252;
   fra.me.meth = LOCATE_NEW_AInitExpr_parser___parser_prod___AInitExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6022 */
+  /* parser/parser_prod.nit:6252 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AInitExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AInitExpr(fra.me.REG[0]);
   parser___parser_prod___AInitExpr___empty_init(fra.me.REG[0], init_table);
@@ -75759,7 +78653,7 @@ val_t NEW_AInitExpr_parser___parser_prod___AInitExpr___init_ainitexpr(val_t p0,
   int init_table[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6024;
+  fra.me.line = 6254;
   fra.me.meth = LOCATE_NEW_AInitExpr_parser___parser_prod___AInitExpr___init_ainitexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -75771,7 +78665,7 @@ val_t NEW_AInitExpr_parser___parser_prod___AInitExpr___init_ainitexpr(val_t p0,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6024 */
+  /* parser/parser_prod.nit:6254 */
   fra.me.REG[3] = NEW_parser___parser_nodes___AInitExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AInitExpr(fra.me.REG[3]);
   parser___parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -75807,7 +78701,7 @@ val_t NEW_AInitExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   int init_table[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_AInitExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -75815,7 +78709,7 @@ val_t NEW_AInitExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AInitExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AInitExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -75823,23 +78717,23 @@ val_t NEW_AInitExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ABraExpr[122] = {
-  {(bigint) 4407 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ABraExpr[123] = {
+  {(bigint) 4963 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ABraExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ABraExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ABraExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ABraExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: ABraExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: ABraExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ABraExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: ABraExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ABraExpr < AExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4263 /* 9: ABraExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: ABraExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: ABraExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: ABraExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: ABraExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: ABraExpr < ASendExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 4327 /* 14: ABraExpr < ABraFormExpr: superclass typecheck marker */},
-  {(bigint) 4407 /* 15: ABraExpr < ABraExpr: superclass typecheck marker */},
+  {(bigint) 4883 /* 14: ABraExpr < ABraFormExpr: superclass typecheck marker */},
+  {(bigint) 4963 /* 15: ABraExpr < ABraExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
@@ -75898,13 +78792,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraExpr[122] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: ABraExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: ABraExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: ABraExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: ABraExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: ABraExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -75924,13 +78819,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraExpr[122] = {
   {(bigint) syntax___typing___ABraExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: ABraExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: ABraExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: ABraExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: ABraExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___ABraExpr___name},
@@ -75938,14 +78833,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraExpr[122] = {
   {(bigint) syntax___typing___ABraExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: ABraExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: ABraExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
-  {(bigint) 0 /* 117: ABraExpr < ABraFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 118: ABraExpr < ABraFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABraFormExpr___n_args},
   {(bigint) parser___parser_prod___ABraExpr___empty_init},
   {(bigint) parser___parser_prod___ABraExpr___init_abraexpr},
-  {(bigint) 9 /* 121: ABraExpr < ABraExpr: superclass init_table position */},
+  {(bigint) 9 /* 122: ABraExpr < ABraExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -75953,21 +78848,22 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraExpr[122] = {
 /* 3: Attribute ABraExpr::_location */
 /* 4: Attribute ABraExpr::_first_location */
 /* 5: Attribute ABraExpr::_last_location */
+/* 6: Attribute ABraExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ABraExpr::_is_typed */
-/* 8: Attribute ABraExpr::_stype */
-/* 9: Attribute ABraExpr::_if_true_flow_ctx */
-/* 10: Attribute ABraExpr::_if_false_flow_ctx */
-/* 11: Attribute ABraExpr::_prop_signature */
-/* 12: Attribute ABraExpr::_raw_arguments_cache */
+/* 8: Attribute ABraExpr::_is_typed */
+/* 9: Attribute ABraExpr::_stype */
+/* 10: Attribute ABraExpr::_if_true_flow_ctx */
+/* 11: Attribute ABraExpr::_if_false_flow_ctx */
+/* 12: Attribute ABraExpr::_prop_signature */
+/* 13: Attribute ABraExpr::_raw_arguments_cache */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute ABraExpr::_prop */
-/* 17: Attribute ABraExpr::_return_type */
-/* 18: Attribute ABraExpr::_n_expr */
-/* 19: Attribute ABraExpr::_n_closure_defs */
-/* 20: Attribute ABraExpr::_n_args */
+/* 17: Attribute ABraExpr::_prop */
+/* 18: Attribute ABraExpr::_return_type */
+/* 19: Attribute ABraExpr::_n_expr */
+/* 20: Attribute ABraExpr::_n_closure_defs */
+/* 21: Attribute ABraExpr::_n_args */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ABraExpr[] = "init var of ABraExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ABraExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -75983,21 +78879,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ABraExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ABraExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ABraExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -76017,25 +78916,25 @@ void CHECKNEW_parser___parser_nodes___ABraExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -76046,13 +78945,13 @@ val_t NEW_ABraExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_ABraExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ABraExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -76067,13 +78966,13 @@ val_t NEW_ABraExpr_parser___parser_prod___ABraExpr___empty_init(void){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6081;
+  fra.me.line = 6311;
   fra.me.meth = LOCATE_NEW_ABraExpr_parser___parser_prod___ABraExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6081 */
+  /* parser/parser_prod.nit:6311 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ABraExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraExpr(fra.me.REG[0]);
   parser___parser_prod___ABraExpr___empty_init(fra.me.REG[0], init_table);
@@ -76088,7 +78987,7 @@ val_t NEW_ABraExpr_parser___parser_prod___ABraExpr___init_abraexpr(val_t p0, val
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6083;
+  fra.me.line = 6313;
   fra.me.meth = LOCATE_NEW_ABraExpr_parser___parser_prod___ABraExpr___init_abraexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -76100,7 +78999,7 @@ val_t NEW_ABraExpr_parser___parser_prod___ABraExpr___init_abraexpr(val_t p0, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6083 */
+  /* parser/parser_prod.nit:6313 */
   fra.me.REG[3] = NEW_parser___parser_nodes___ABraExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraExpr(fra.me.REG[3]);
   parser___parser_prod___ABraExpr___init_abraexpr(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -76136,7 +79035,7 @@ val_t NEW_ABraExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   int init_table[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_ABraExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -76144,7 +79043,7 @@ val_t NEW_ABraExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ABraExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -76152,22 +79051,22 @@ val_t NEW_ABraExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ABraAssignExpr[119] = {
-  {(bigint) 4411 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ABraAssignExpr[120] = {
+  {(bigint) 4967 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ABraAssignExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ABraAssignExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ABraAssignExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ABraAssignExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: ABraAssignExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: ABraAssignExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4023 /* 8: ABraAssignExpr < AAssignFormExpr: superclass typecheck marker */},
-  {(bigint) 4263 /* 9: ABraAssignExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: ABraAssignExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: ABraAssignExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4411 /* 12: ABraAssignExpr < ABraAssignExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ABraAssignExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: ABraAssignExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ABraAssignExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4571 /* 8: ABraAssignExpr < AAssignFormExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: ABraAssignExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: ABraAssignExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: ABraAssignExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4967 /* 12: ABraAssignExpr < ABraAssignExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 4327 /* 14: ABraAssignExpr < ABraFormExpr: superclass typecheck marker */},
+  {(bigint) 4883 /* 14: ABraAssignExpr < ABraFormExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
@@ -76227,13 +79126,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraAssignExpr[119] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 6 /* 72: ABraAssignExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: ABraAssignExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: ABraAssignExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 5 /* 80: ABraAssignExpr < AExpr: superclass init_table position */},
+  {(bigint) 5 /* 81: ABraAssignExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -76243,8 +79143,8 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraAssignExpr[119] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___ABraAssignExpr___empty_init},
   {(bigint) parser___parser_prod___ABraAssignExpr___init_abraassignexpr},
-  {(bigint) 10 /* 90: ABraAssignExpr < ABraAssignExpr: superclass init_table position */},
-  {(bigint) 9 /* 91: ABraAssignExpr < AAssignFormExpr: superclass init_table position */},
+  {(bigint) 10 /* 91: ABraAssignExpr < ABraAssignExpr: superclass init_table position */},
+  {(bigint) 9 /* 92: ABraAssignExpr < AAssignFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAssignFormExpr___n_assign},
   {(bigint) parser___parser_nodes___AAssignFormExpr___n_value},
   {0} /* Class Hole :( */,
@@ -76253,13 +79153,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraAssignExpr[119] = {
   {(bigint) syntax___typing___ABraAssignExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: ABraAssignExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: ABraAssignExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: ABraAssignExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: ABraAssignExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___ABraAssignExpr___name},
@@ -76267,10 +79167,10 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraAssignExpr[119] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: ABraAssignExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: ABraAssignExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
-  {(bigint) 0 /* 117: ABraAssignExpr < ABraFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 118: ABraAssignExpr < ABraFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABraFormExpr___n_args},
 };
 /* 0: Pointer to the classtable */
@@ -76279,21 +79179,22 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraAssignExpr[119] = {
 /* 3: Attribute ABraAssignExpr::_location */
 /* 4: Attribute ABraAssignExpr::_first_location */
 /* 5: Attribute ABraAssignExpr::_last_location */
+/* 6: Attribute ABraAssignExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ABraAssignExpr::_is_typed */
-/* 8: Attribute ABraAssignExpr::_stype */
-/* 9: Attribute ABraAssignExpr::_if_true_flow_ctx */
-/* 10: Attribute ABraAssignExpr::_if_false_flow_ctx */
-/* 11: Attribute ABraAssignExpr::_prop_signature */
-/* 12: Attribute ABraAssignExpr::_raw_arguments_cache */
-/* 13: Attribute ABraAssignExpr::_n_assign */
-/* 14: Attribute ABraAssignExpr::_n_value */
+/* 8: Attribute ABraAssignExpr::_is_typed */
+/* 9: Attribute ABraAssignExpr::_stype */
+/* 10: Attribute ABraAssignExpr::_if_true_flow_ctx */
+/* 11: Attribute ABraAssignExpr::_if_false_flow_ctx */
+/* 12: Attribute ABraAssignExpr::_prop_signature */
+/* 13: Attribute ABraAssignExpr::_raw_arguments_cache */
+/* 14: Attribute ABraAssignExpr::_n_assign */
+/* 15: Attribute ABraAssignExpr::_n_value */
 /* Instance Hole :( */
-/* 16: Attribute ABraAssignExpr::_prop */
-/* 17: Attribute ABraAssignExpr::_return_type */
-/* 18: Attribute ABraAssignExpr::_n_expr */
-/* 19: Attribute ABraAssignExpr::_n_closure_defs */
-/* 20: Attribute ABraAssignExpr::_n_args */
+/* 17: Attribute ABraAssignExpr::_prop */
+/* 18: Attribute ABraAssignExpr::_return_type */
+/* 19: Attribute ABraAssignExpr::_n_expr */
+/* 20: Attribute ABraAssignExpr::_n_closure_defs */
+/* 21: Attribute ABraAssignExpr::_n_args */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ABraAssignExpr[] = "init var of ABraAssignExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ABraAssignExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -76309,21 +79210,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ABraAssignExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ABraAssignExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ABraAssignExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -76343,15 +79247,20 @@ void CHECKNEW_parser___parser_nodes___ABraAssignExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -76363,15 +79272,10 @@ void CHECKNEW_parser___parser_nodes___ABraAssignExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -76382,13 +79286,13 @@ val_t NEW_ABraAssignExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_ABraAssignExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ABraAssignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraAssignExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -76403,13 +79307,13 @@ val_t NEW_ABraAssignExpr_parser___parser_prod___ABraAssignExpr___empty_init(void
   int init_table[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6147;
+  fra.me.line = 6377;
   fra.me.meth = LOCATE_NEW_ABraAssignExpr_parser___parser_prod___ABraAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6147 */
+  /* parser/parser_prod.nit:6377 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ABraAssignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraAssignExpr(fra.me.REG[0]);
   parser___parser_prod___ABraAssignExpr___empty_init(fra.me.REG[0], init_table);
@@ -76424,7 +79328,7 @@ val_t NEW_ABraAssignExpr_parser___parser_prod___ABraAssignExpr___init_abraassign
   int init_table[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6149;
+  fra.me.line = 6379;
   fra.me.meth = LOCATE_NEW_ABraAssignExpr_parser___parser_prod___ABraAssignExpr___init_abraassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -76438,7 +79342,7 @@ val_t NEW_ABraAssignExpr_parser___parser_prod___ABraAssignExpr___init_abraassign
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:6149 */
+  /* parser/parser_prod.nit:6379 */
   fra.me.REG[4] = NEW_parser___parser_nodes___ABraAssignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraAssignExpr(fra.me.REG[4]);
   parser___parser_prod___ABraAssignExpr___init_abraassignexpr(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
@@ -76474,7 +79378,7 @@ val_t NEW_ABraAssignExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t
   int init_table[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_ABraAssignExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -76482,7 +79386,7 @@ val_t NEW_ABraAssignExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ABraAssignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraAssignExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -76490,23 +79394,23 @@ val_t NEW_ABraAssignExpr_parser___parser_prod___ASendExpr___init_asendexpr(val_t
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ABraReassignExpr[122] = {
-  {(bigint) 4403 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ABraReassignExpr[123] = {
+  {(bigint) 4959 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ABraReassignExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ABraReassignExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ABraReassignExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ABraReassignExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: ABraReassignExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: ABraReassignExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3815 /* 8: ABraReassignExpr < AReassignFormExpr: superclass typecheck marker */},
-  {(bigint) 4263 /* 9: ABraReassignExpr < AAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 4275 /* 10: ABraReassignExpr < ASuperInitCall: superclass typecheck marker */},
-  {(bigint) 4303 /* 11: ABraReassignExpr < ASendExpr: superclass typecheck marker */},
-  {(bigint) 4311 /* 12: ABraReassignExpr < ASendReassignFormExpr: superclass typecheck marker */},
-  {(bigint) 4315 /* 13: ABraReassignExpr < ASendReassignExpr: superclass typecheck marker */},
-  {(bigint) 4327 /* 14: ABraReassignExpr < ABraFormExpr: superclass typecheck marker */},
-  {(bigint) 4403 /* 15: ABraReassignExpr < ABraReassignExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ABraReassignExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: ABraReassignExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ABraReassignExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4331 /* 8: ABraReassignExpr < AReassignFormExpr: superclass typecheck marker */},
+  {(bigint) 4819 /* 9: ABraReassignExpr < AAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 4831 /* 10: ABraReassignExpr < ASuperInitCall: superclass typecheck marker */},
+  {(bigint) 4859 /* 11: ABraReassignExpr < ASendExpr: superclass typecheck marker */},
+  {(bigint) 4867 /* 12: ABraReassignExpr < ASendReassignFormExpr: superclass typecheck marker */},
+  {(bigint) 4871 /* 13: ABraReassignExpr < ASendReassignExpr: superclass typecheck marker */},
+  {(bigint) 4883 /* 14: ABraReassignExpr < ABraFormExpr: superclass typecheck marker */},
+  {(bigint) 4959 /* 15: ABraReassignExpr < ABraReassignExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
@@ -76565,13 +79469,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraReassignExpr[122] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 7 /* 72: ABraReassignExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASuperInitCall___register_super_init_call},
-  {(bigint) 2 /* 75: ABraReassignExpr < ASuperInitCall: superclass init_table position */},
+  {(bigint) 2 /* 76: ABraReassignExpr < ASuperInitCall: superclass init_table position */},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 6 /* 80: ABraReassignExpr < AExpr: superclass init_table position */},
+  {(bigint) 6 /* 81: ABraReassignExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASendReassignExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -76579,25 +79484,25 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraReassignExpr[122] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 11 /* 88: ABraReassignExpr < ASendReassignFormExpr: superclass init_table position */},
-  {(bigint) 0 /* 89: ABraReassignExpr < ASendReassignExpr: superclass init_table position */},
+  {(bigint) 11 /* 89: ABraReassignExpr < ASendReassignFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 90: ABraReassignExpr < ASendReassignExpr: superclass init_table position */},
   {(bigint) syntax___typing___ASendReassignExpr___read_prop},
   {(bigint) syntax___typing___AReassignFormExpr___do_rvalue_typing},
   {(bigint) syntax___typing___AReassignFormExpr___assign_method},
-  {(bigint) 5 /* 93: ABraReassignExpr < AReassignFormExpr: superclass init_table position */},
+  {(bigint) 5 /* 94: ABraReassignExpr < AReassignFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AReassignFormExpr___n_assign_op},
   {(bigint) parser___parser_nodes___AReassignFormExpr___n_value},
   {(bigint) syntax___icode_generation___AAbsAbsSendExpr___generate_icode_for_arguments_in},
   {(bigint) syntax___typing___ABraReassignExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 4 /* 100: ABraReassignExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 4 /* 101: ABraReassignExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AAbsSendExpr___do_typing},
   {(bigint) syntax___typing___AAbsSendExpr___get_property},
   {(bigint) syntax___typing___AAbsSendExpr___get_signature},
-  {(bigint) 3 /* 106: ABraReassignExpr < AAbsSendExpr: superclass init_table position */},
+  {(bigint) 3 /* 107: ABraReassignExpr < AAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsSendExpr___prop},
   {(bigint) syntax___typing___AAbsSendExpr___return_type},
   {(bigint) syntax___typing___ABraReassignExpr___name},
@@ -76605,14 +79510,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraReassignExpr[122] = {
   {(bigint) syntax___typing___ASendExpr___closure_defs},
   {(bigint) parser___parser_prod___ASendExpr___empty_init},
   {(bigint) parser___parser_prod___ASendExpr___init_asendexpr},
-  {(bigint) 1 /* 114: ABraReassignExpr < ASendExpr: superclass init_table position */},
+  {(bigint) 1 /* 115: ABraReassignExpr < ASendExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASendExpr___n_expr},
   {(bigint) parser___parser_nodes___ASendExpr___n_closure_defs},
-  {(bigint) 10 /* 117: ABraReassignExpr < ABraFormExpr: superclass init_table position */},
+  {(bigint) 10 /* 118: ABraReassignExpr < ABraFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABraFormExpr___n_args},
   {(bigint) parser___parser_prod___ABraReassignExpr___empty_init},
   {(bigint) parser___parser_prod___ABraReassignExpr___init_abrareassignexpr},
-  {(bigint) 12 /* 121: ABraReassignExpr < ABraReassignExpr: superclass init_table position */},
+  {(bigint) 12 /* 122: ABraReassignExpr < ABraReassignExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -76620,21 +79525,22 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraReassignExpr[122] = {
 /* 3: Attribute ABraReassignExpr::_location */
 /* 4: Attribute ABraReassignExpr::_first_location */
 /* 5: Attribute ABraReassignExpr::_last_location */
-/* 6: Attribute ABraReassignExpr::_read_prop */
-/* 7: Attribute ABraReassignExpr::_is_typed */
-/* 8: Attribute ABraReassignExpr::_stype */
-/* 9: Attribute ABraReassignExpr::_if_true_flow_ctx */
-/* 10: Attribute ABraReassignExpr::_if_false_flow_ctx */
-/* 11: Attribute ABraReassignExpr::_prop_signature */
-/* 12: Attribute ABraReassignExpr::_raw_arguments_cache */
-/* 13: Attribute ABraReassignExpr::_assign_method */
-/* 14: Attribute ABraReassignExpr::_n_assign_op */
-/* 15: Attribute ABraReassignExpr::_n_value */
-/* 16: Attribute ABraReassignExpr::_prop */
-/* 17: Attribute ABraReassignExpr::_return_type */
-/* 18: Attribute ABraReassignExpr::_n_expr */
-/* 19: Attribute ABraReassignExpr::_n_closure_defs */
-/* 20: Attribute ABraReassignExpr::_n_args */
+/* 6: Attribute ABraReassignExpr::_n_annotations */
+/* 7: Attribute ABraReassignExpr::_read_prop */
+/* 8: Attribute ABraReassignExpr::_is_typed */
+/* 9: Attribute ABraReassignExpr::_stype */
+/* 10: Attribute ABraReassignExpr::_if_true_flow_ctx */
+/* 11: Attribute ABraReassignExpr::_if_false_flow_ctx */
+/* 12: Attribute ABraReassignExpr::_prop_signature */
+/* 13: Attribute ABraReassignExpr::_raw_arguments_cache */
+/* 14: Attribute ABraReassignExpr::_assign_method */
+/* 15: Attribute ABraReassignExpr::_n_assign_op */
+/* 16: Attribute ABraReassignExpr::_n_value */
+/* 17: Attribute ABraReassignExpr::_prop */
+/* 18: Attribute ABraReassignExpr::_return_type */
+/* 19: Attribute ABraReassignExpr::_n_expr */
+/* 20: Attribute ABraReassignExpr::_n_closure_defs */
+/* 21: Attribute ABraReassignExpr::_n_args */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ABraReassignExpr[] = "init var of ABraReassignExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ABraReassignExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -76650,21 +79556,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ABraReassignExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:860 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ABraReassignExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ABraReassignExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -76684,15 +79593,20 @@ void CHECKNEW_parser___parser_nodes___ABraReassignExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -76704,15 +79618,10 @@ void CHECKNEW_parser___parser_nodes___ABraReassignExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -76723,13 +79632,13 @@ val_t NEW_ABraReassignExpr_parser___parser_prod___ASendExpr___empty_init(void){
   int init_table[13] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_NEW_ABraReassignExpr_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:4416 */
+  /* parser/parser_prod.nit:4646 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ABraReassignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraReassignExpr(fra.me.REG[0]);
   parser___parser_prod___ASendExpr___empty_init(fra.me.REG[0], init_table);
@@ -76744,13 +79653,13 @@ val_t NEW_ABraReassignExpr_parser___parser_prod___ABraReassignExpr___empty_init(
   int init_table[13] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6220;
+  fra.me.line = 6450;
   fra.me.meth = LOCATE_NEW_ABraReassignExpr_parser___parser_prod___ABraReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6220 */
+  /* parser/parser_prod.nit:6450 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ABraReassignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraReassignExpr(fra.me.REG[0]);
   parser___parser_prod___ABraReassignExpr___empty_init(fra.me.REG[0], init_table);
@@ -76765,7 +79674,7 @@ val_t NEW_ABraReassignExpr_parser___parser_prod___ABraReassignExpr___init_abrare
   int init_table[13] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6222;
+  fra.me.line = 6452;
   fra.me.meth = LOCATE_NEW_ABraReassignExpr_parser___parser_prod___ABraReassignExpr___init_abrareassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -76779,7 +79688,7 @@ val_t NEW_ABraReassignExpr_parser___parser_prod___ABraReassignExpr___init_abrare
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:6222 */
+  /* parser/parser_prod.nit:6452 */
   fra.me.REG[4] = NEW_parser___parser_nodes___ABraReassignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraReassignExpr(fra.me.REG[4]);
   parser___parser_prod___ABraReassignExpr___init_abrareassignexpr(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
@@ -76815,7 +79724,7 @@ val_t NEW_ABraReassignExpr_parser___parser_prod___ASendExpr___init_asendexpr(val
   int init_table[13] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_NEW_ABraReassignExpr_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -76823,7 +79732,7 @@ val_t NEW_ABraReassignExpr_parser___parser_prod___ASendExpr___init_asendexpr(val
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ABraReassignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraReassignExpr(fra.me.REG[1]);
   parser___parser_prod___ASendExpr___init_asendexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -76831,16 +79740,16 @@ val_t NEW_ABraReassignExpr_parser___parser_prod___ASendExpr___init_asendexpr(val
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AClosureCallExpr[110] = {
-  {(bigint) 4223 /* 0: Identity */},
-  {(bigint) 17 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AClosureCallExpr[111] = {
+  {(bigint) 4779 /* 0: Identity */},
+  {(bigint) 18 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AClosureCallExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AClosureCallExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AClosureCallExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AClosureCallExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4047 /* 6: AClosureCallExpr < AAbsAbsSendExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AClosureCallExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4223 /* 8: AClosureCallExpr < AClosureCallExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AClosureCallExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4595 /* 6: AClosureCallExpr < AAbsAbsSendExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AClosureCallExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4779 /* 8: AClosureCallExpr < AClosureCallExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -76906,13 +79815,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AClosureCallExpr[110] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AClosureCallExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AClosureCallExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AClosureCallExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AClosureCallExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -76932,13 +79842,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AClosureCallExpr[110] = {
   {(bigint) syntax___typing___AClosureCallExpr___compute_raw_arguments},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___process_closures},
-  {(bigint) 0 /* 100: AClosureCallExpr < AAbsAbsSendExpr: superclass init_table position */},
+  {(bigint) 0 /* 101: AClosureCallExpr < AAbsAbsSendExpr: superclass init_table position */},
   {(bigint) syntax___typing___AAbsAbsSendExpr___prop_signature},
   {(bigint) syntax___typing___AAbsAbsSendExpr___raw_arguments},
   {(bigint) syntax___typing___AClosureCallExpr___variable},
   {(bigint) parser___parser_prod___AClosureCallExpr___empty_init},
   {(bigint) parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr},
-  {(bigint) 5 /* 106: AClosureCallExpr < AClosureCallExpr: superclass init_table position */},
+  {(bigint) 5 /* 107: AClosureCallExpr < AClosureCallExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AClosureCallExpr___n_id},
   {(bigint) parser___parser_nodes___AClosureCallExpr___n_args},
   {(bigint) parser___parser_nodes___AClosureCallExpr___n_closure_defs},
@@ -76949,17 +79859,18 @@ const classtable_elt_t VFT_parser___parser_nodes___AClosureCallExpr[110] = {
 /* 3: Attribute AClosureCallExpr::_location */
 /* 4: Attribute AClosureCallExpr::_first_location */
 /* 5: Attribute AClosureCallExpr::_last_location */
+/* 6: Attribute AClosureCallExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AClosureCallExpr::_is_typed */
-/* 8: Attribute AClosureCallExpr::_stype */
-/* 9: Attribute AClosureCallExpr::_if_true_flow_ctx */
-/* 10: Attribute AClosureCallExpr::_if_false_flow_ctx */
-/* 11: Attribute AClosureCallExpr::_prop_signature */
-/* 12: Attribute AClosureCallExpr::_raw_arguments_cache */
-/* 13: Attribute AClosureCallExpr::_variable */
-/* 14: Attribute AClosureCallExpr::_n_id */
-/* 15: Attribute AClosureCallExpr::_n_args */
-/* 16: Attribute AClosureCallExpr::_n_closure_defs */
+/* 8: Attribute AClosureCallExpr::_is_typed */
+/* 9: Attribute AClosureCallExpr::_stype */
+/* 10: Attribute AClosureCallExpr::_if_true_flow_ctx */
+/* 11: Attribute AClosureCallExpr::_if_false_flow_ctx */
+/* 12: Attribute AClosureCallExpr::_prop_signature */
+/* 13: Attribute AClosureCallExpr::_raw_arguments_cache */
+/* 14: Attribute AClosureCallExpr::_variable */
+/* 15: Attribute AClosureCallExpr::_n_id */
+/* 16: Attribute AClosureCallExpr::_n_args */
+/* 17: Attribute AClosureCallExpr::_n_closure_defs */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AClosureCallExpr[] = "init var of AClosureCallExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AClosureCallExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -76975,21 +79886,24 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AClosureCallExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* parser/parser_nodes.nit:1018 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/typing.nit:1435 */
+  /* syntax/typing.nit:1441 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1024 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AClosureCallExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 17);
+  obj = alloc(sizeof(val_t) * 18);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AClosureCallExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -77038,7 +79952,7 @@ val_t NEW_AClosureCallExpr_parser___parser_prod___AClosureCallExpr___init_aclosu
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6295;
+  fra.me.line = 6525;
   fra.me.meth = LOCATE_NEW_AClosureCallExpr_parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -77050,7 +79964,7 @@ val_t NEW_AClosureCallExpr_parser___parser_prod___AClosureCallExpr___init_aclosu
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6295 */
+  /* parser/parser_prod.nit:6525 */
   fra.me.REG[3] = NEW_parser___parser_nodes___AClosureCallExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AClosureCallExpr(fra.me.REG[3]);
   parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -77065,13 +79979,13 @@ val_t NEW_AClosureCallExpr_parser___parser_prod___AClosureCallExpr___empty_init(
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6293;
+  fra.me.line = 6523;
   fra.me.meth = LOCATE_NEW_AClosureCallExpr_parser___parser_prod___AClosureCallExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6293 */
+  /* parser/parser_prod.nit:6523 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AClosureCallExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AClosureCallExpr(fra.me.REG[0]);
   parser___parser_prod___AClosureCallExpr___empty_init(fra.me.REG[0], init_table);
@@ -77100,16 +80014,16 @@ val_t NEW_AClosureCallExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AVarExpr[94] = {
-  {(bigint) 4099 /* 0: Identity */},
-  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AVarExpr[95] = {
+  {(bigint) 4647 /* 0: Identity */},
+  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AVarExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AVarExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AVarExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AVarExpr < Prod: superclass typecheck marker */},
-  {(bigint) 3755 /* 6: AVarExpr < AVarFormExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AVarExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4099 /* 8: AVarExpr < AVarExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AVarExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4267 /* 6: AVarExpr < AVarFormExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AVarExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4647 /* 8: AVarExpr < AVarExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -77175,13 +80089,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AVarExpr[94] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AVarExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AVarExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AVarExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AVarExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -77190,11 +80105,11 @@ const classtable_elt_t VFT_parser___parser_nodes___AVarExpr[94] = {
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) syntax___typing___AVarFormExpr___variable},
-  {(bigint) 0 /* 89: AVarExpr < AVarFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 90: AVarExpr < AVarFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AVarFormExpr___n_id},
   {(bigint) parser___parser_prod___AVarExpr___empty_init},
   {(bigint) parser___parser_prod___AVarExpr___init_avarexpr},
-  {(bigint) 5 /* 93: AVarExpr < AVarExpr: superclass init_table position */},
+  {(bigint) 5 /* 94: AVarExpr < AVarExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -77202,16 +80117,17 @@ const classtable_elt_t VFT_parser___parser_nodes___AVarExpr[94] = {
 /* 3: Attribute AVarExpr::_location */
 /* 4: Attribute AVarExpr::_first_location */
 /* 5: Attribute AVarExpr::_last_location */
+/* 6: Attribute AVarExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AVarExpr::_is_typed */
-/* 8: Attribute AVarExpr::_stype */
-/* 9: Attribute AVarExpr::_if_true_flow_ctx */
-/* 10: Attribute AVarExpr::_if_false_flow_ctx */
-/* 11: Attribute AVarExpr::_variable */
-/* 12: Attribute AVarExpr::_n_id */
+/* 8: Attribute AVarExpr::_is_typed */
+/* 9: Attribute AVarExpr::_stype */
+/* 10: Attribute AVarExpr::_if_true_flow_ctx */
+/* 11: Attribute AVarExpr::_if_false_flow_ctx */
+/* 12: Attribute AVarExpr::_variable */
+/* 13: Attribute AVarExpr::_n_id */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AVarExpr[] = "init var of AVarExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AVarExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -77219,10 +80135,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AVarExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AVarExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -77231,7 +80151,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AVarExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AVarExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 13);
+  obj = alloc(sizeof(val_t) * 14);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AVarExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -77270,7 +80190,7 @@ val_t NEW_AVarExpr_parser___parser_prod___AVarExpr___init_avarexpr(val_t p0){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6361;
+  fra.me.line = 6591;
   fra.me.meth = LOCATE_NEW_AVarExpr_parser___parser_prod___AVarExpr___init_avarexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -77278,7 +80198,7 @@ val_t NEW_AVarExpr_parser___parser_prod___AVarExpr___init_avarexpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:6361 */
+  /* parser/parser_prod.nit:6591 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AVarExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AVarExpr(fra.me.REG[1]);
   parser___parser_prod___AVarExpr___init_avarexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -77293,13 +80213,13 @@ val_t NEW_AVarExpr_parser___parser_prod___AVarExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6359;
+  fra.me.line = 6589;
   fra.me.meth = LOCATE_NEW_AVarExpr_parser___parser_prod___AVarExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6359 */
+  /* parser/parser_prod.nit:6589 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AVarExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AVarExpr(fra.me.REG[0]);
   parser___parser_prod___AVarExpr___empty_init(fra.me.REG[0], init_table);
@@ -77328,17 +80248,17 @@ val_t NEW_AVarExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AVarAssignExpr[97] = {
-  {(bigint) 4103 /* 0: Identity */},
-  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AVarAssignExpr[98] = {
+  {(bigint) 4651 /* 0: Identity */},
+  {(bigint) 16 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AVarAssignExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AVarAssignExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AVarAssignExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AVarAssignExpr < Prod: superclass typecheck marker */},
-  {(bigint) 3755 /* 6: AVarAssignExpr < AVarFormExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AVarAssignExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4023 /* 8: AVarAssignExpr < AAssignFormExpr: superclass typecheck marker */},
-  {(bigint) 4103 /* 9: AVarAssignExpr < AVarAssignExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AVarAssignExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4267 /* 6: AVarAssignExpr < AVarFormExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AVarAssignExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4571 /* 8: AVarAssignExpr < AAssignFormExpr: superclass typecheck marker */},
+  {(bigint) 4651 /* 9: AVarAssignExpr < AVarAssignExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -77403,13 +80323,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AVarAssignExpr[97] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AVarAssignExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AVarAssignExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AVarAssignExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AVarAssignExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -77418,14 +80339,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AVarAssignExpr[97] = {
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) syntax___typing___AVarFormExpr___variable},
-  {(bigint) 0 /* 89: AVarAssignExpr < AVarFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 90: AVarAssignExpr < AVarFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AVarFormExpr___n_id},
-  {(bigint) 5 /* 91: AVarAssignExpr < AAssignFormExpr: superclass init_table position */},
+  {(bigint) 5 /* 92: AVarAssignExpr < AAssignFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAssignFormExpr___n_assign},
   {(bigint) parser___parser_nodes___AAssignFormExpr___n_value},
   {(bigint) parser___parser_prod___AVarAssignExpr___empty_init},
   {(bigint) parser___parser_prod___AVarAssignExpr___init_avarassignexpr},
-  {(bigint) 6 /* 96: AVarAssignExpr < AVarAssignExpr: superclass init_table position */},
+  {(bigint) 6 /* 97: AVarAssignExpr < AVarAssignExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -77433,18 +80354,19 @@ const classtable_elt_t VFT_parser___parser_nodes___AVarAssignExpr[97] = {
 /* 3: Attribute AVarAssignExpr::_location */
 /* 4: Attribute AVarAssignExpr::_first_location */
 /* 5: Attribute AVarAssignExpr::_last_location */
+/* 6: Attribute AVarAssignExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AVarAssignExpr::_is_typed */
-/* 8: Attribute AVarAssignExpr::_stype */
-/* 9: Attribute AVarAssignExpr::_if_true_flow_ctx */
-/* 10: Attribute AVarAssignExpr::_if_false_flow_ctx */
-/* 11: Attribute AVarAssignExpr::_variable */
-/* 12: Attribute AVarAssignExpr::_n_id */
-/* 13: Attribute AVarAssignExpr::_n_assign */
-/* 14: Attribute AVarAssignExpr::_n_value */
+/* 8: Attribute AVarAssignExpr::_is_typed */
+/* 9: Attribute AVarAssignExpr::_stype */
+/* 10: Attribute AVarAssignExpr::_if_true_flow_ctx */
+/* 11: Attribute AVarAssignExpr::_if_false_flow_ctx */
+/* 12: Attribute AVarAssignExpr::_variable */
+/* 13: Attribute AVarAssignExpr::_n_id */
+/* 14: Attribute AVarAssignExpr::_n_assign */
+/* 15: Attribute AVarAssignExpr::_n_value */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AVarAssignExpr[] = "init var of AVarAssignExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AVarAssignExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -77452,10 +80374,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AVarAssignExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AVarAssignExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -77464,7 +80390,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AVarAssignExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AVarAssignExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 15);
+  obj = alloc(sizeof(val_t) * 16);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AVarAssignExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -77513,7 +80439,7 @@ val_t NEW_AVarAssignExpr_parser___parser_prod___AVarAssignExpr___init_avarassign
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6392;
+  fra.me.line = 6622;
   fra.me.meth = LOCATE_NEW_AVarAssignExpr_parser___parser_prod___AVarAssignExpr___init_avarassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -77525,7 +80451,7 @@ val_t NEW_AVarAssignExpr_parser___parser_prod___AVarAssignExpr___init_avarassign
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6392 */
+  /* parser/parser_prod.nit:6622 */
   fra.me.REG[3] = NEW_parser___parser_nodes___AVarAssignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AVarAssignExpr(fra.me.REG[3]);
   parser___parser_prod___AVarAssignExpr___init_avarassignexpr(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -77540,13 +80466,13 @@ val_t NEW_AVarAssignExpr_parser___parser_prod___AVarAssignExpr___empty_init(void
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6390;
+  fra.me.line = 6620;
   fra.me.meth = LOCATE_NEW_AVarAssignExpr_parser___parser_prod___AVarAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6390 */
+  /* parser/parser_prod.nit:6620 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AVarAssignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AVarAssignExpr(fra.me.REG[0]);
   parser___parser_prod___AVarAssignExpr___empty_init(fra.me.REG[0], init_table);
@@ -77575,17 +80501,17 @@ val_t NEW_AVarAssignExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AVarReassignExpr[99] = {
-  {(bigint) 4095 /* 0: Identity */},
-  {(bigint) 16 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AVarReassignExpr[100] = {
+  {(bigint) 4643 /* 0: Identity */},
+  {(bigint) 17 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AVarReassignExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AVarReassignExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AVarReassignExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AVarReassignExpr < Prod: superclass typecheck marker */},
-  {(bigint) 3755 /* 6: AVarReassignExpr < AVarFormExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AVarReassignExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3815 /* 8: AVarReassignExpr < AReassignFormExpr: superclass typecheck marker */},
-  {(bigint) 4095 /* 9: AVarReassignExpr < AVarReassignExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AVarReassignExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4267 /* 6: AVarReassignExpr < AVarFormExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AVarReassignExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4331 /* 8: AVarReassignExpr < AReassignFormExpr: superclass typecheck marker */},
+  {(bigint) 4643 /* 9: AVarReassignExpr < AVarReassignExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -77650,13 +80576,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AVarReassignExpr[99] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AVarReassignExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AVarReassignExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AVarReassignExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AVarReassignExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -77665,16 +80592,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AVarReassignExpr[99] = {
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) syntax___typing___AVarFormExpr___variable},
-  {(bigint) 0 /* 89: AVarReassignExpr < AVarFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 90: AVarReassignExpr < AVarFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AVarFormExpr___n_id},
   {(bigint) syntax___typing___AReassignFormExpr___do_rvalue_typing},
   {(bigint) syntax___typing___AReassignFormExpr___assign_method},
-  {(bigint) 5 /* 93: AVarReassignExpr < AReassignFormExpr: superclass init_table position */},
+  {(bigint) 5 /* 94: AVarReassignExpr < AReassignFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AReassignFormExpr___n_assign_op},
   {(bigint) parser___parser_nodes___AReassignFormExpr___n_value},
   {(bigint) parser___parser_prod___AVarReassignExpr___empty_init},
   {(bigint) parser___parser_prod___AVarReassignExpr___init_avarreassignexpr},
-  {(bigint) 6 /* 98: AVarReassignExpr < AVarReassignExpr: superclass init_table position */},
+  {(bigint) 6 /* 99: AVarReassignExpr < AVarReassignExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -77682,19 +80609,20 @@ const classtable_elt_t VFT_parser___parser_nodes___AVarReassignExpr[99] = {
 /* 3: Attribute AVarReassignExpr::_location */
 /* 4: Attribute AVarReassignExpr::_first_location */
 /* 5: Attribute AVarReassignExpr::_last_location */
+/* 6: Attribute AVarReassignExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AVarReassignExpr::_is_typed */
-/* 8: Attribute AVarReassignExpr::_stype */
-/* 9: Attribute AVarReassignExpr::_if_true_flow_ctx */
-/* 10: Attribute AVarReassignExpr::_if_false_flow_ctx */
-/* 11: Attribute AVarReassignExpr::_variable */
-/* 12: Attribute AVarReassignExpr::_n_id */
-/* 13: Attribute AVarReassignExpr::_assign_method */
-/* 14: Attribute AVarReassignExpr::_n_assign_op */
-/* 15: Attribute AVarReassignExpr::_n_value */
+/* 8: Attribute AVarReassignExpr::_is_typed */
+/* 9: Attribute AVarReassignExpr::_stype */
+/* 10: Attribute AVarReassignExpr::_if_true_flow_ctx */
+/* 11: Attribute AVarReassignExpr::_if_false_flow_ctx */
+/* 12: Attribute AVarReassignExpr::_variable */
+/* 13: Attribute AVarReassignExpr::_n_id */
+/* 14: Attribute AVarReassignExpr::_assign_method */
+/* 15: Attribute AVarReassignExpr::_n_assign_op */
+/* 16: Attribute AVarReassignExpr::_n_value */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AVarReassignExpr[] = "init var of AVarReassignExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AVarReassignExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -77702,10 +80630,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AVarReassignExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AVarReassignExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -77714,7 +80646,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AVarReassignExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AVarReassignExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 16);
+  obj = alloc(sizeof(val_t) * 17);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AVarReassignExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -77739,11 +80671,6 @@ void CHECKNEW_parser___parser_nodes___AVarReassignExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -77754,6 +80681,11 @@ void CHECKNEW_parser___parser_nodes___AVarReassignExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_AVarReassignExpr_parser___parser_prod___AVarReassignExpr___init_avarreassignexpr[] = "new AVarReassignExpr parser_prod::AVarReassignExpr::init_avarreassignexpr";
@@ -77763,7 +80695,7 @@ val_t NEW_AVarReassignExpr_parser___parser_prod___AVarReassignExpr___init_avarre
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6451;
+  fra.me.line = 6681;
   fra.me.meth = LOCATE_NEW_AVarReassignExpr_parser___parser_prod___AVarReassignExpr___init_avarreassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -77775,7 +80707,7 @@ val_t NEW_AVarReassignExpr_parser___parser_prod___AVarReassignExpr___init_avarre
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6451 */
+  /* parser/parser_prod.nit:6681 */
   fra.me.REG[3] = NEW_parser___parser_nodes___AVarReassignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AVarReassignExpr(fra.me.REG[3]);
   parser___parser_prod___AVarReassignExpr___init_avarreassignexpr(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -77790,13 +80722,13 @@ val_t NEW_AVarReassignExpr_parser___parser_prod___AVarReassignExpr___empty_init(
   int init_table[7] = {0, 0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6449;
+  fra.me.line = 6679;
   fra.me.meth = LOCATE_NEW_AVarReassignExpr_parser___parser_prod___AVarReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6449 */
+  /* parser/parser_prod.nit:6679 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AVarReassignExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AVarReassignExpr(fra.me.REG[0]);
   parser___parser_prod___AVarReassignExpr___empty_init(fra.me.REG[0], init_table);
@@ -77825,17 +80757,17 @@ val_t NEW_AVarReassignExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ACrangeExpr[98] = {
-  {(bigint) 4211 /* 0: Identity */},
-  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ACrangeExpr[99] = {
+  {(bigint) 4767 /* 0: Identity */},
+  {(bigint) 16 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ACrangeExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ACrangeExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ACrangeExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ACrangeExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ACrangeExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: ACrangeExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3823 /* 8: ACrangeExpr < ARangeExpr: superclass typecheck marker */},
-  {(bigint) 4211 /* 9: ACrangeExpr < ACrangeExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ACrangeExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4339 /* 8: ACrangeExpr < ARangeExpr: superclass typecheck marker */},
+  {(bigint) 4767 /* 9: ACrangeExpr < ACrangeExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -77900,13 +80832,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ACrangeExpr[98] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: ACrangeExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: ACrangeExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: ACrangeExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ACrangeExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -77916,12 +80849,12 @@ const classtable_elt_t VFT_parser___parser_nodes___ACrangeExpr[98] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___ARangeExpr___empty_init},
   {(bigint) parser___parser_prod___ARangeExpr___init_arangeexpr},
-  {(bigint) 0 /* 90: ACrangeExpr < ARangeExpr: superclass init_table position */},
+  {(bigint) 0 /* 91: ACrangeExpr < ARangeExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ARangeExpr___n_expr},
   {(bigint) parser___parser_nodes___ARangeExpr___n_expr2},
   {(bigint) parser___parser_prod___ACrangeExpr___empty_init},
   {(bigint) parser___parser_prod___ACrangeExpr___init_acrangeexpr},
-  {(bigint) 5 /* 95: ACrangeExpr < ACrangeExpr: superclass init_table position */},
+  {(bigint) 5 /* 96: ACrangeExpr < ACrangeExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ACrangeExpr___n_obra},
   {(bigint) parser___parser_nodes___ACrangeExpr___n_cbra},
 };
@@ -77931,18 +80864,19 @@ const classtable_elt_t VFT_parser___parser_nodes___ACrangeExpr[98] = {
 /* 3: Attribute ACrangeExpr::_location */
 /* 4: Attribute ACrangeExpr::_first_location */
 /* 5: Attribute ACrangeExpr::_last_location */
+/* 6: Attribute ACrangeExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ACrangeExpr::_is_typed */
-/* 8: Attribute ACrangeExpr::_stype */
-/* 9: Attribute ACrangeExpr::_if_true_flow_ctx */
-/* 10: Attribute ACrangeExpr::_if_false_flow_ctx */
-/* 11: Attribute ACrangeExpr::_n_expr */
-/* 12: Attribute ACrangeExpr::_n_expr2 */
-/* 13: Attribute ACrangeExpr::_n_obra */
-/* 14: Attribute ACrangeExpr::_n_cbra */
+/* 8: Attribute ACrangeExpr::_is_typed */
+/* 9: Attribute ACrangeExpr::_stype */
+/* 10: Attribute ACrangeExpr::_if_true_flow_ctx */
+/* 11: Attribute ACrangeExpr::_if_false_flow_ctx */
+/* 12: Attribute ACrangeExpr::_n_expr */
+/* 13: Attribute ACrangeExpr::_n_expr2 */
+/* 14: Attribute ACrangeExpr::_n_obra */
+/* 15: Attribute ACrangeExpr::_n_cbra */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ACrangeExpr[] = "init var of ACrangeExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ACrangeExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -77950,10 +80884,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ACrangeExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ACrangeExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -77962,7 +80900,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ACrangeExpr(val_t p0){
 val_t NEW_parser___parser_nodes___ACrangeExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 15);
+  obj = alloc(sizeof(val_t) * 16);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ACrangeExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -77982,10 +80920,10 @@ void CHECKNEW_parser___parser_nodes___ACrangeExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -77997,15 +80935,15 @@ void CHECKNEW_parser___parser_nodes___ACrangeExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -78016,13 +80954,13 @@ val_t NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6508;
+  fra.me.line = 6738;
   fra.me.meth = LOCATE_NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6508 */
+  /* parser/parser_prod.nit:6738 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ACrangeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ACrangeExpr(fra.me.REG[0]);
   parser___parser_prod___ARangeExpr___empty_init(fra.me.REG[0], init_table);
@@ -78037,13 +80975,13 @@ val_t NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6553;
+  fra.me.line = 6801;
   fra.me.meth = LOCATE_NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6553 */
+  /* parser/parser_prod.nit:6801 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ACrangeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ACrangeExpr(fra.me.REG[0]);
   parser___parser_prod___ACrangeExpr___empty_init(fra.me.REG[0], init_table);
@@ -78052,33 +80990,35 @@ val_t NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr[] = "new ACrangeExpr parser_prod::ACrangeExpr::init_acrangeexpr";
-val_t NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, val_t p2, val_t p3){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+val_t NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t tmp;
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6555;
+  fra.me.line = 6803;
   fra.me.meth = LOCATE_NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:6555 */
-  fra.me.REG[4] = NEW_parser___parser_nodes___ACrangeExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___ACrangeExpr(fra.me.REG[4]);
-  parser___parser_prod___ACrangeExpr___init_acrangeexpr(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
-  CHECKNEW_parser___parser_nodes___ACrangeExpr(fra.me.REG[4]);
+  fra.me.REG[4] = p4;
+  /* parser/parser_prod.nit:6803 */
+  fra.me.REG[5] = NEW_parser___parser_nodes___ACrangeExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___ACrangeExpr(fra.me.REG[5]);
+  parser___parser_prod___ACrangeExpr___init_acrangeexpr(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
+  CHECKNEW_parser___parser_nodes___ACrangeExpr(fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[4];
+  return fra.me.REG[5];
 }
 static const char LOCATE_NEW_ACrangeExpr_parser___parser_nodes___ANode___init[] = "new ACrangeExpr parser_nodes::ANode::init";
 val_t NEW_ACrangeExpr_parser___parser_nodes___ANode___init(void){
@@ -78102,41 +81042,43 @@ val_t NEW_ACrangeExpr_parser___parser_nodes___ANode___init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr[] = "new ACrangeExpr parser_prod::ARangeExpr::init_arangeexpr";
-val_t NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+val_t NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t tmp;
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6510;
+  fra.me.line = 6740;
   fra.me.meth = LOCATE_NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6510 */
-  fra.me.REG[2] = NEW_parser___parser_nodes___ACrangeExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___ACrangeExpr(fra.me.REG[2]);
-  parser___parser_prod___ARangeExpr___init_arangeexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
-  CHECKNEW_parser___parser_nodes___ACrangeExpr(fra.me.REG[2]);
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:6740 */
+  fra.me.REG[3] = NEW_parser___parser_nodes___ACrangeExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___ACrangeExpr(fra.me.REG[3]);
+  parser___parser_prod___ARangeExpr___init_arangeexpr(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
+  CHECKNEW_parser___parser_nodes___ACrangeExpr(fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[2];
+  return fra.me.REG[3];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AOrangeExpr[98] = {
-  {(bigint) 4123 /* 0: Identity */},
-  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AOrangeExpr[99] = {
+  {(bigint) 4675 /* 0: Identity */},
+  {(bigint) 16 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AOrangeExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AOrangeExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AOrangeExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AOrangeExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AOrangeExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AOrangeExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3823 /* 8: AOrangeExpr < ARangeExpr: superclass typecheck marker */},
-  {(bigint) 4123 /* 9: AOrangeExpr < AOrangeExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AOrangeExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4339 /* 8: AOrangeExpr < ARangeExpr: superclass typecheck marker */},
+  {(bigint) 4675 /* 9: AOrangeExpr < AOrangeExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -78201,13 +81143,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AOrangeExpr[98] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AOrangeExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AOrangeExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AOrangeExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AOrangeExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -78217,12 +81160,12 @@ const classtable_elt_t VFT_parser___parser_nodes___AOrangeExpr[98] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___ARangeExpr___empty_init},
   {(bigint) parser___parser_prod___ARangeExpr___init_arangeexpr},
-  {(bigint) 0 /* 90: AOrangeExpr < ARangeExpr: superclass init_table position */},
+  {(bigint) 0 /* 91: AOrangeExpr < ARangeExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ARangeExpr___n_expr},
   {(bigint) parser___parser_nodes___ARangeExpr___n_expr2},
   {(bigint) parser___parser_prod___AOrangeExpr___empty_init},
   {(bigint) parser___parser_prod___AOrangeExpr___init_aorangeexpr},
-  {(bigint) 5 /* 95: AOrangeExpr < AOrangeExpr: superclass init_table position */},
+  {(bigint) 5 /* 96: AOrangeExpr < AOrangeExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AOrangeExpr___n_obra},
   {(bigint) parser___parser_nodes___AOrangeExpr___n_cbra},
 };
@@ -78232,18 +81175,19 @@ const classtable_elt_t VFT_parser___parser_nodes___AOrangeExpr[98] = {
 /* 3: Attribute AOrangeExpr::_location */
 /* 4: Attribute AOrangeExpr::_first_location */
 /* 5: Attribute AOrangeExpr::_last_location */
+/* 6: Attribute AOrangeExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AOrangeExpr::_is_typed */
-/* 8: Attribute AOrangeExpr::_stype */
-/* 9: Attribute AOrangeExpr::_if_true_flow_ctx */
-/* 10: Attribute AOrangeExpr::_if_false_flow_ctx */
-/* 11: Attribute AOrangeExpr::_n_expr */
-/* 12: Attribute AOrangeExpr::_n_expr2 */
-/* 13: Attribute AOrangeExpr::_n_obra */
-/* 14: Attribute AOrangeExpr::_n_cbra */
+/* 8: Attribute AOrangeExpr::_is_typed */
+/* 9: Attribute AOrangeExpr::_stype */
+/* 10: Attribute AOrangeExpr::_if_true_flow_ctx */
+/* 11: Attribute AOrangeExpr::_if_false_flow_ctx */
+/* 12: Attribute AOrangeExpr::_n_expr */
+/* 13: Attribute AOrangeExpr::_n_expr2 */
+/* 14: Attribute AOrangeExpr::_n_obra */
+/* 15: Attribute AOrangeExpr::_n_cbra */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AOrangeExpr[] = "init var of AOrangeExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AOrangeExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -78251,10 +81195,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AOrangeExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AOrangeExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -78263,7 +81211,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AOrangeExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AOrangeExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 15);
+  obj = alloc(sizeof(val_t) * 16);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AOrangeExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -78283,10 +81231,10 @@ void CHECKNEW_parser___parser_nodes___AOrangeExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -78298,15 +81246,15 @@ void CHECKNEW_parser___parser_nodes___AOrangeExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -78317,13 +81265,13 @@ val_t NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6508;
+  fra.me.line = 6738;
   fra.me.meth = LOCATE_NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6508 */
+  /* parser/parser_prod.nit:6738 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AOrangeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AOrangeExpr(fra.me.REG[0]);
   parser___parser_prod___ARangeExpr___empty_init(fra.me.REG[0], init_table);
@@ -78338,13 +81286,13 @@ val_t NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6626;
+  fra.me.line = 6892;
   fra.me.meth = LOCATE_NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6626 */
+  /* parser/parser_prod.nit:6892 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AOrangeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AOrangeExpr(fra.me.REG[0]);
   parser___parser_prod___AOrangeExpr___empty_init(fra.me.REG[0], init_table);
@@ -78353,33 +81301,35 @@ val_t NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr[] = "new AOrangeExpr parser_prod::AOrangeExpr::init_aorangeexpr";
-val_t NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, val_t p2, val_t p3){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+val_t NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t tmp;
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6628;
+  fra.me.line = 6894;
   fra.me.meth = LOCATE_NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:6628 */
-  fra.me.REG[4] = NEW_parser___parser_nodes___AOrangeExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___AOrangeExpr(fra.me.REG[4]);
-  parser___parser_prod___AOrangeExpr___init_aorangeexpr(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
-  CHECKNEW_parser___parser_nodes___AOrangeExpr(fra.me.REG[4]);
+  fra.me.REG[4] = p4;
+  /* parser/parser_prod.nit:6894 */
+  fra.me.REG[5] = NEW_parser___parser_nodes___AOrangeExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___AOrangeExpr(fra.me.REG[5]);
+  parser___parser_prod___AOrangeExpr___init_aorangeexpr(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
+  CHECKNEW_parser___parser_nodes___AOrangeExpr(fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[4];
+  return fra.me.REG[5];
 }
 static const char LOCATE_NEW_AOrangeExpr_parser___parser_nodes___ANode___init[] = "new AOrangeExpr parser_nodes::ANode::init";
 val_t NEW_AOrangeExpr_parser___parser_nodes___ANode___init(void){
@@ -78403,40 +81353,42 @@ val_t NEW_AOrangeExpr_parser___parser_nodes___ANode___init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr[] = "new AOrangeExpr parser_prod::ARangeExpr::init_arangeexpr";
-val_t NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+val_t NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t tmp;
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6510;
+  fra.me.line = 6740;
   fra.me.meth = LOCATE_NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6510 */
-  fra.me.REG[2] = NEW_parser___parser_nodes___AOrangeExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___AOrangeExpr(fra.me.REG[2]);
-  parser___parser_prod___ARangeExpr___init_arangeexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
-  CHECKNEW_parser___parser_nodes___AOrangeExpr(fra.me.REG[2]);
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:6740 */
+  fra.me.REG[3] = NEW_parser___parser_nodes___AOrangeExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___AOrangeExpr(fra.me.REG[3]);
+  parser___parser_prod___ARangeExpr___init_arangeexpr(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
+  CHECKNEW_parser___parser_nodes___AOrangeExpr(fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[2];
+  return fra.me.REG[3];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AArrayExpr[93] = {
-  {(bigint) 4035 /* 0: Identity */},
-  {(bigint) 12 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AArrayExpr[94] = {
+  {(bigint) 4583 /* 0: Identity */},
+  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AArrayExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AArrayExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AArrayExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AArrayExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AArrayExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AArrayExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4035 /* 8: AArrayExpr < AArrayExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AArrayExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4583 /* 8: AArrayExpr < AArrayExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -78502,13 +81454,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AArrayExpr[93] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AArrayExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: AArrayExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: AArrayExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AArrayExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -78519,7 +81472,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AArrayExpr[93] = {
   {(bigint) syntax___typing___AArrayExpr___do_typing},
   {(bigint) parser___parser_prod___AArrayExpr___empty_init},
   {(bigint) parser___parser_prod___AArrayExpr___init_aarrayexpr},
-  {(bigint) 4 /* 91: AArrayExpr < AArrayExpr: superclass init_table position */},
+  {(bigint) 4 /* 92: AArrayExpr < AArrayExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AArrayExpr___n_exprs},
 };
 /* 0: Pointer to the classtable */
@@ -78528,15 +81481,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AArrayExpr[93] = {
 /* 3: Attribute AArrayExpr::_location */
 /* 4: Attribute AArrayExpr::_first_location */
 /* 5: Attribute AArrayExpr::_last_location */
+/* 6: Attribute AArrayExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AArrayExpr::_is_typed */
-/* 8: Attribute AArrayExpr::_stype */
-/* 9: Attribute AArrayExpr::_if_true_flow_ctx */
-/* 10: Attribute AArrayExpr::_if_false_flow_ctx */
-/* 11: Attribute AArrayExpr::_n_exprs */
+/* 8: Attribute AArrayExpr::_is_typed */
+/* 9: Attribute AArrayExpr::_stype */
+/* 10: Attribute AArrayExpr::_if_true_flow_ctx */
+/* 11: Attribute AArrayExpr::_if_false_flow_ctx */
+/* 12: Attribute AArrayExpr::_n_exprs */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AArrayExpr[] = "init var of AArrayExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AArrayExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -78544,10 +81498,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AArrayExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AArrayExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -78556,7 +81514,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AArrayExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AArrayExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 12);
+  obj = alloc(sizeof(val_t) * 13);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AArrayExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -78595,13 +81553,13 @@ val_t NEW_AArrayExpr_parser___parser_prod___AArrayExpr___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6699;
+  fra.me.line = 6983;
   fra.me.meth = LOCATE_NEW_AArrayExpr_parser___parser_prod___AArrayExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6699 */
+  /* parser/parser_prod.nit:6983 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AArrayExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AArrayExpr(fra.me.REG[0]);
   parser___parser_prod___AArrayExpr___empty_init(fra.me.REG[0], init_table);
@@ -78610,27 +81568,29 @@ val_t NEW_AArrayExpr_parser___parser_prod___AArrayExpr___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr[] = "new AArrayExpr parser_prod::AArrayExpr::init_aarrayexpr";
-val_t NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+val_t NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6701;
+  fra.me.line = 6985;
   fra.me.meth = LOCATE_NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:6701 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___AArrayExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___AArrayExpr(fra.me.REG[1]);
-  parser___parser_prod___AArrayExpr___init_aarrayexpr(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___AArrayExpr(fra.me.REG[1]);
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:6985 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___AArrayExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___AArrayExpr(fra.me.REG[2]);
+  parser___parser_prod___AArrayExpr___init_aarrayexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___AArrayExpr(fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return fra.me.REG[2];
 }
 static const char LOCATE_NEW_AArrayExpr_parser___parser_nodes___ANode___init[] = "new AArrayExpr parser_nodes::ANode::init";
 val_t NEW_AArrayExpr_parser___parser_nodes___ANode___init(void){
@@ -78653,16 +81613,16 @@ val_t NEW_AArrayExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ASelfExpr[93] = {
-  {(bigint) 3807 /* 0: Identity */},
-  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ASelfExpr[94] = {
+  {(bigint) 4323 /* 0: Identity */},
+  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ASelfExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ASelfExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ASelfExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ASelfExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ASelfExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: ASelfExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3807 /* 8: ASelfExpr < ASelfExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ASelfExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4323 /* 8: ASelfExpr < ASelfExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -78728,13 +81688,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ASelfExpr[93] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ASelfExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: ASelfExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: ASelfExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASelfExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___ASelfExpr___is_self},
@@ -78745,7 +81706,7 @@ const classtable_elt_t VFT_parser___parser_nodes___ASelfExpr[93] = {
   {(bigint) syntax___typing___ASelfExpr___variable},
   {(bigint) parser___parser_prod___ASelfExpr___empty_init},
   {(bigint) parser___parser_prod___ASelfExpr___init_aselfexpr},
-  {(bigint) 4 /* 91: ASelfExpr < ASelfExpr: superclass init_table position */},
+  {(bigint) 4 /* 92: ASelfExpr < ASelfExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASelfExpr___n_kwself},
 };
 /* 0: Pointer to the classtable */
@@ -78754,16 +81715,17 @@ const classtable_elt_t VFT_parser___parser_nodes___ASelfExpr[93] = {
 /* 3: Attribute ASelfExpr::_location */
 /* 4: Attribute ASelfExpr::_first_location */
 /* 5: Attribute ASelfExpr::_last_location */
+/* 6: Attribute ASelfExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ASelfExpr::_is_typed */
-/* 8: Attribute ASelfExpr::_stype */
-/* 9: Attribute ASelfExpr::_if_true_flow_ctx */
-/* 10: Attribute ASelfExpr::_if_false_flow_ctx */
-/* 11: Attribute ASelfExpr::_variable */
-/* 12: Attribute ASelfExpr::_n_kwself */
+/* 8: Attribute ASelfExpr::_is_typed */
+/* 9: Attribute ASelfExpr::_stype */
+/* 10: Attribute ASelfExpr::_if_true_flow_ctx */
+/* 11: Attribute ASelfExpr::_if_false_flow_ctx */
+/* 12: Attribute ASelfExpr::_variable */
+/* 13: Attribute ASelfExpr::_n_kwself */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ASelfExpr[] = "init var of ASelfExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ASelfExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -78771,10 +81733,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ASelfExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ASelfExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -78783,7 +81749,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ASelfExpr(val_t p0){
 val_t NEW_parser___parser_nodes___ASelfExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 13);
+  obj = alloc(sizeof(val_t) * 14);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ASelfExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -78817,13 +81783,13 @@ val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6730;
+  fra.me.line = 7032;
   fra.me.meth = LOCATE_NEW_ASelfExpr_parser___parser_prod___ASelfExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6730 */
+  /* parser/parser_prod.nit:7032 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ASelfExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ASelfExpr(fra.me.REG[0]);
   parser___parser_prod___ASelfExpr___empty_init(fra.me.REG[0], init_table);
@@ -78832,27 +81798,29 @@ val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr[] = "new ASelfExpr parser_prod::ASelfExpr::init_aselfexpr";
-val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6732;
+  fra.me.line = 7034;
   fra.me.meth = LOCATE_NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:6732 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___ASelfExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___ASelfExpr(fra.me.REG[1]);
-  parser___parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___ASelfExpr(fra.me.REG[1]);
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:7034 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___ASelfExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___ASelfExpr(fra.me.REG[2]);
+  parser___parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___ASelfExpr(fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return fra.me.REG[2];
 }
 static const char LOCATE_NEW_ASelfExpr_parser___parser_nodes___ANode___init[] = "new ASelfExpr parser_nodes::ANode::init";
 val_t NEW_ASelfExpr_parser___parser_nodes___ANode___init(void){
@@ -78875,17 +81843,17 @@ val_t NEW_ASelfExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AImplicitSelfExpr[96] = {
-  {(bigint) 4175 /* 0: Identity */},
-  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AImplicitSelfExpr[97] = {
+  {(bigint) 4731 /* 0: Identity */},
+  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AImplicitSelfExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AImplicitSelfExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AImplicitSelfExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AImplicitSelfExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AImplicitSelfExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AImplicitSelfExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3807 /* 8: AImplicitSelfExpr < ASelfExpr: superclass typecheck marker */},
-  {(bigint) 4175 /* 9: AImplicitSelfExpr < AImplicitSelfExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AImplicitSelfExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4323 /* 8: AImplicitSelfExpr < ASelfExpr: superclass typecheck marker */},
+  {(bigint) 4731 /* 9: AImplicitSelfExpr < AImplicitSelfExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -78950,13 +81918,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AImplicitSelfExpr[96] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AImplicitSelfExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: AImplicitSelfExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: AImplicitSelfExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASelfExpr___generate_icode},
   {(bigint) syntax___typing___AImplicitSelfExpr___is_implicit_self},
   {(bigint) syntax___typing___ASelfExpr___is_self},
@@ -78967,11 +81936,11 @@ const classtable_elt_t VFT_parser___parser_nodes___AImplicitSelfExpr[96] = {
   {(bigint) syntax___typing___ASelfExpr___variable},
   {(bigint) parser___parser_prod___ASelfExpr___empty_init},
   {(bigint) parser___parser_prod___ASelfExpr___init_aselfexpr},
-  {(bigint) 4 /* 91: AImplicitSelfExpr < ASelfExpr: superclass init_table position */},
+  {(bigint) 4 /* 92: AImplicitSelfExpr < ASelfExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASelfExpr___n_kwself},
   {(bigint) parser___parser_prod___AImplicitSelfExpr___empty_init},
   {(bigint) parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr},
-  {(bigint) 5 /* 95: AImplicitSelfExpr < AImplicitSelfExpr: superclass init_table position */},
+  {(bigint) 5 /* 96: AImplicitSelfExpr < AImplicitSelfExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -78979,16 +81948,17 @@ const classtable_elt_t VFT_parser___parser_nodes___AImplicitSelfExpr[96] = {
 /* 3: Attribute AImplicitSelfExpr::_location */
 /* 4: Attribute AImplicitSelfExpr::_first_location */
 /* 5: Attribute AImplicitSelfExpr::_last_location */
+/* 6: Attribute AImplicitSelfExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AImplicitSelfExpr::_is_typed */
-/* 8: Attribute AImplicitSelfExpr::_stype */
-/* 9: Attribute AImplicitSelfExpr::_if_true_flow_ctx */
-/* 10: Attribute AImplicitSelfExpr::_if_false_flow_ctx */
-/* 11: Attribute AImplicitSelfExpr::_variable */
-/* 12: Attribute AImplicitSelfExpr::_n_kwself */
+/* 8: Attribute AImplicitSelfExpr::_is_typed */
+/* 9: Attribute AImplicitSelfExpr::_stype */
+/* 10: Attribute AImplicitSelfExpr::_if_true_flow_ctx */
+/* 11: Attribute AImplicitSelfExpr::_if_false_flow_ctx */
+/* 12: Attribute AImplicitSelfExpr::_variable */
+/* 13: Attribute AImplicitSelfExpr::_n_kwself */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AImplicitSelfExpr[] = "init var of AImplicitSelfExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AImplicitSelfExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -78996,10 +81966,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AImplicitSelfExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AImplicitSelfExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -79008,7 +81982,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AImplicitSelfExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AImplicitSelfExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 13);
+  obj = alloc(sizeof(val_t) * 14);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AImplicitSelfExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -79042,13 +82016,13 @@ val_t NEW_AImplicitSelfExpr_parser___parser_prod___ASelfExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6730;
+  fra.me.line = 7032;
   fra.me.meth = LOCATE_NEW_AImplicitSelfExpr_parser___parser_prod___ASelfExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6730 */
+  /* parser/parser_prod.nit:7032 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AImplicitSelfExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AImplicitSelfExpr(fra.me.REG[0]);
   parser___parser_prod___ASelfExpr___empty_init(fra.me.REG[0], init_table);
@@ -79063,13 +82037,13 @@ val_t NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___empty_ini
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6761;
+  fra.me.line = 7081;
   fra.me.meth = LOCATE_NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6761 */
+  /* parser/parser_prod.nit:7081 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AImplicitSelfExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AImplicitSelfExpr(fra.me.REG[0]);
   parser___parser_prod___AImplicitSelfExpr___empty_init(fra.me.REG[0], init_table);
@@ -79084,13 +82058,13 @@ val_t NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimp
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6763;
+  fra.me.line = 7083;
   fra.me.meth = LOCATE_NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6763 */
+  /* parser/parser_prod.nit:7083 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AImplicitSelfExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AImplicitSelfExpr(fra.me.REG[0]);
   parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(fra.me.REG[0], init_table);
@@ -79120,39 +82094,41 @@ val_t NEW_AImplicitSelfExpr_parser___parser_nodes___ANode___init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AImplicitSelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr[] = "new AImplicitSelfExpr parser_prod::ASelfExpr::init_aselfexpr";
-val_t NEW_AImplicitSelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+val_t NEW_AImplicitSelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6732;
+  fra.me.line = 7034;
   fra.me.meth = LOCATE_NEW_AImplicitSelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:6732 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___AImplicitSelfExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___AImplicitSelfExpr(fra.me.REG[1]);
-  parser___parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___AImplicitSelfExpr(fra.me.REG[1]);
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:7034 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___AImplicitSelfExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___AImplicitSelfExpr(fra.me.REG[2]);
+  parser___parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___AImplicitSelfExpr(fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return fra.me.REG[2];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ATrueExpr[93] = {
-  {(bigint) 4107 /* 0: Identity */},
-  {(bigint) 12 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ATrueExpr[94] = {
+  {(bigint) 4655 /* 0: Identity */},
+  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ATrueExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ATrueExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ATrueExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ATrueExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ATrueExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: ATrueExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4003 /* 8: ATrueExpr < ABoolExpr: superclass typecheck marker */},
-  {(bigint) 4107 /* 9: ATrueExpr < ATrueExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ATrueExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4547 /* 8: ATrueExpr < ABoolExpr: superclass typecheck marker */},
+  {(bigint) 4655 /* 9: ATrueExpr < ATrueExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -79217,13 +82193,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ATrueExpr[93] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: ATrueExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___ABoolExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: ATrueExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: ATrueExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ATrueExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -79231,10 +82208,10 @@ const classtable_elt_t VFT_parser___parser_nodes___ATrueExpr[93] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 0 /* 88: ATrueExpr < ABoolExpr: superclass init_table position */},
+  {(bigint) 0 /* 89: ATrueExpr < ABoolExpr: superclass init_table position */},
   {(bigint) parser___parser_prod___ATrueExpr___empty_init},
   {(bigint) parser___parser_prod___ATrueExpr___init_atrueexpr},
-  {(bigint) 5 /* 91: ATrueExpr < ATrueExpr: superclass init_table position */},
+  {(bigint) 5 /* 92: ATrueExpr < ATrueExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ATrueExpr___n_kwtrue},
 };
 /* 0: Pointer to the classtable */
@@ -79243,15 +82220,16 @@ const classtable_elt_t VFT_parser___parser_nodes___ATrueExpr[93] = {
 /* 3: Attribute ATrueExpr::_location */
 /* 4: Attribute ATrueExpr::_first_location */
 /* 5: Attribute ATrueExpr::_last_location */
+/* 6: Attribute ATrueExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ATrueExpr::_is_typed */
-/* 8: Attribute ATrueExpr::_stype */
-/* 9: Attribute ATrueExpr::_if_true_flow_ctx */
-/* 10: Attribute ATrueExpr::_if_false_flow_ctx */
-/* 11: Attribute ATrueExpr::_n_kwtrue */
+/* 8: Attribute ATrueExpr::_is_typed */
+/* 9: Attribute ATrueExpr::_stype */
+/* 10: Attribute ATrueExpr::_if_true_flow_ctx */
+/* 11: Attribute ATrueExpr::_if_false_flow_ctx */
+/* 12: Attribute ATrueExpr::_n_kwtrue */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ATrueExpr[] = "init var of ATrueExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ATrueExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -79259,10 +82237,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ATrueExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ATrueExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -79271,7 +82253,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ATrueExpr(val_t p0){
 val_t NEW_parser___parser_nodes___ATrueExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 12);
+  obj = alloc(sizeof(val_t) * 13);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ATrueExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -79291,15 +82273,15 @@ void CHECKNEW_parser___parser_nodes___ATrueExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -79310,13 +82292,13 @@ val_t NEW_ATrueExpr_parser___parser_prod___ATrueExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6777;
+  fra.me.line = 7097;
   fra.me.meth = LOCATE_NEW_ATrueExpr_parser___parser_prod___ATrueExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6777 */
+  /* parser/parser_prod.nit:7097 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ATrueExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ATrueExpr(fra.me.REG[0]);
   parser___parser_prod___ATrueExpr___empty_init(fra.me.REG[0], init_table);
@@ -79325,27 +82307,29 @@ val_t NEW_ATrueExpr_parser___parser_prod___ATrueExpr___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr[] = "new ATrueExpr parser_prod::ATrueExpr::init_atrueexpr";
-val_t NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+val_t NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6779;
+  fra.me.line = 7099;
   fra.me.meth = LOCATE_NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:6779 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___ATrueExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___ATrueExpr(fra.me.REG[1]);
-  parser___parser_prod___ATrueExpr___init_atrueexpr(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___ATrueExpr(fra.me.REG[1]);
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:7099 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___ATrueExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___ATrueExpr(fra.me.REG[2]);
+  parser___parser_prod___ATrueExpr___init_atrueexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___ATrueExpr(fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return fra.me.REG[2];
 }
 static const char LOCATE_NEW_ATrueExpr_parser___parser_nodes___ANode___init[] = "new ATrueExpr parser_nodes::ANode::init";
 val_t NEW_ATrueExpr_parser___parser_nodes___ANode___init(void){
@@ -79368,17 +82352,17 @@ val_t NEW_ATrueExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AFalseExpr[93] = {
-  {(bigint) 4187 /* 0: Identity */},
-  {(bigint) 12 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AFalseExpr[94] = {
+  {(bigint) 4743 /* 0: Identity */},
+  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AFalseExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AFalseExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AFalseExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AFalseExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AFalseExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AFalseExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4003 /* 8: AFalseExpr < ABoolExpr: superclass typecheck marker */},
-  {(bigint) 4187 /* 9: AFalseExpr < AFalseExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AFalseExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4547 /* 8: AFalseExpr < ABoolExpr: superclass typecheck marker */},
+  {(bigint) 4743 /* 9: AFalseExpr < AFalseExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -79443,13 +82427,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AFalseExpr[93] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AFalseExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___ABoolExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AFalseExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AFalseExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AFalseExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -79457,10 +82442,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AFalseExpr[93] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AExpr___warn_parentheses},
-  {(bigint) 0 /* 88: AFalseExpr < ABoolExpr: superclass init_table position */},
+  {(bigint) 0 /* 89: AFalseExpr < ABoolExpr: superclass init_table position */},
   {(bigint) parser___parser_prod___AFalseExpr___empty_init},
   {(bigint) parser___parser_prod___AFalseExpr___init_afalseexpr},
-  {(bigint) 5 /* 91: AFalseExpr < AFalseExpr: superclass init_table position */},
+  {(bigint) 5 /* 92: AFalseExpr < AFalseExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AFalseExpr___n_kwfalse},
 };
 /* 0: Pointer to the classtable */
@@ -79469,15 +82454,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AFalseExpr[93] = {
 /* 3: Attribute AFalseExpr::_location */
 /* 4: Attribute AFalseExpr::_first_location */
 /* 5: Attribute AFalseExpr::_last_location */
+/* 6: Attribute AFalseExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AFalseExpr::_is_typed */
-/* 8: Attribute AFalseExpr::_stype */
-/* 9: Attribute AFalseExpr::_if_true_flow_ctx */
-/* 10: Attribute AFalseExpr::_if_false_flow_ctx */
-/* 11: Attribute AFalseExpr::_n_kwfalse */
+/* 8: Attribute AFalseExpr::_is_typed */
+/* 9: Attribute AFalseExpr::_stype */
+/* 10: Attribute AFalseExpr::_if_true_flow_ctx */
+/* 11: Attribute AFalseExpr::_if_false_flow_ctx */
+/* 12: Attribute AFalseExpr::_n_kwfalse */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AFalseExpr[] = "init var of AFalseExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AFalseExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -79485,10 +82471,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AFalseExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AFalseExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -79497,7 +82487,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AFalseExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AFalseExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 12);
+  obj = alloc(sizeof(val_t) * 13);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AFalseExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -79517,15 +82507,15 @@ void CHECKNEW_parser___parser_nodes___AFalseExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -79536,13 +82526,13 @@ val_t NEW_AFalseExpr_parser___parser_prod___AFalseExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6808;
+  fra.me.line = 7146;
   fra.me.meth = LOCATE_NEW_AFalseExpr_parser___parser_prod___AFalseExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6808 */
+  /* parser/parser_prod.nit:7146 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AFalseExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AFalseExpr(fra.me.REG[0]);
   parser___parser_prod___AFalseExpr___empty_init(fra.me.REG[0], init_table);
@@ -79551,27 +82541,29 @@ val_t NEW_AFalseExpr_parser___parser_prod___AFalseExpr___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr[] = "new AFalseExpr parser_prod::AFalseExpr::init_afalseexpr";
-val_t NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+val_t NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6810;
+  fra.me.line = 7148;
   fra.me.meth = LOCATE_NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:6810 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___AFalseExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___AFalseExpr(fra.me.REG[1]);
-  parser___parser_prod___AFalseExpr___init_afalseexpr(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___AFalseExpr(fra.me.REG[1]);
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:7148 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___AFalseExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___AFalseExpr(fra.me.REG[2]);
+  parser___parser_prod___AFalseExpr___init_afalseexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___AFalseExpr(fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return fra.me.REG[2];
 }
 static const char LOCATE_NEW_AFalseExpr_parser___parser_nodes___ANode___init[] = "new AFalseExpr parser_nodes::ANode::init";
 val_t NEW_AFalseExpr_parser___parser_nodes___ANode___init(void){
@@ -79594,16 +82586,16 @@ val_t NEW_AFalseExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ANullExpr[92] = {
-  {(bigint) 3863 /* 0: Identity */},
-  {(bigint) 12 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ANullExpr[93] = {
+  {(bigint) 4379 /* 0: Identity */},
+  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ANullExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ANullExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ANullExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ANullExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ANullExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: ANullExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3863 /* 8: ANullExpr < ANullExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ANullExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4379 /* 8: ANullExpr < ANullExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -79669,13 +82661,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ANullExpr[92] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ANullExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: ANullExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: ANullExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ANullExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -79685,7 +82678,7 @@ const classtable_elt_t VFT_parser___parser_nodes___ANullExpr[92] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___ANullExpr___empty_init},
   {(bigint) parser___parser_prod___ANullExpr___init_anullexpr},
-  {(bigint) 4 /* 90: ANullExpr < ANullExpr: superclass init_table position */},
+  {(bigint) 4 /* 91: ANullExpr < ANullExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ANullExpr___n_kwnull},
 };
 /* 0: Pointer to the classtable */
@@ -79694,15 +82687,16 @@ const classtable_elt_t VFT_parser___parser_nodes___ANullExpr[92] = {
 /* 3: Attribute ANullExpr::_location */
 /* 4: Attribute ANullExpr::_first_location */
 /* 5: Attribute ANullExpr::_last_location */
+/* 6: Attribute ANullExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ANullExpr::_is_typed */
-/* 8: Attribute ANullExpr::_stype */
-/* 9: Attribute ANullExpr::_if_true_flow_ctx */
-/* 10: Attribute ANullExpr::_if_false_flow_ctx */
-/* 11: Attribute ANullExpr::_n_kwnull */
+/* 8: Attribute ANullExpr::_is_typed */
+/* 9: Attribute ANullExpr::_stype */
+/* 10: Attribute ANullExpr::_if_true_flow_ctx */
+/* 11: Attribute ANullExpr::_if_false_flow_ctx */
+/* 12: Attribute ANullExpr::_n_kwnull */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ANullExpr[] = "init var of ANullExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ANullExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -79710,10 +82704,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ANullExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ANullExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -79722,7 +82720,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ANullExpr(val_t p0){
 val_t NEW_parser___parser_nodes___ANullExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 12);
+  obj = alloc(sizeof(val_t) * 13);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ANullExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -79761,13 +82759,13 @@ val_t NEW_ANullExpr_parser___parser_prod___ANullExpr___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6839;
+  fra.me.line = 7195;
   fra.me.meth = LOCATE_NEW_ANullExpr_parser___parser_prod___ANullExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6839 */
+  /* parser/parser_prod.nit:7195 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ANullExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ANullExpr(fra.me.REG[0]);
   parser___parser_prod___ANullExpr___empty_init(fra.me.REG[0], init_table);
@@ -79776,27 +82774,29 @@ val_t NEW_ANullExpr_parser___parser_prod___ANullExpr___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr[] = "new ANullExpr parser_prod::ANullExpr::init_anullexpr";
-val_t NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+val_t NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6841;
+  fra.me.line = 7197;
   fra.me.meth = LOCATE_NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:6841 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___ANullExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___ANullExpr(fra.me.REG[1]);
-  parser___parser_prod___ANullExpr___init_anullexpr(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___ANullExpr(fra.me.REG[1]);
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:7197 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___ANullExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___ANullExpr(fra.me.REG[2]);
+  parser___parser_prod___ANullExpr___init_anullexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___ANullExpr(fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return fra.me.REG[2];
 }
 static const char LOCATE_NEW_ANullExpr_parser___parser_nodes___ANode___init[] = "new ANullExpr parser_nodes::ANode::init";
 val_t NEW_ANullExpr_parser___parser_nodes___ANode___init(void){
@@ -79819,16 +82819,16 @@ val_t NEW_ANullExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AIntExpr[92] = {
-  {(bigint) 3915 /* 0: Identity */},
-  {(bigint) 12 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AIntExpr[93] = {
+  {(bigint) 4451 /* 0: Identity */},
+  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AIntExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AIntExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AIntExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AIntExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AIntExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AIntExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3915 /* 8: AIntExpr < AIntExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AIntExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4451 /* 8: AIntExpr < AIntExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -79894,13 +82894,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AIntExpr[92] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AIntExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AIntExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: AIntExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: AIntExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AIntExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -79910,7 +82911,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AIntExpr[92] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___AIntExpr___empty_init},
   {(bigint) parser___parser_prod___AIntExpr___init_aintexpr},
-  {(bigint) 4 /* 90: AIntExpr < AIntExpr: superclass init_table position */},
+  {(bigint) 4 /* 91: AIntExpr < AIntExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AIntExpr___n_number},
 };
 /* 0: Pointer to the classtable */
@@ -79919,15 +82920,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AIntExpr[92] = {
 /* 3: Attribute AIntExpr::_location */
 /* 4: Attribute AIntExpr::_first_location */
 /* 5: Attribute AIntExpr::_last_location */
+/* 6: Attribute AIntExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AIntExpr::_is_typed */
-/* 8: Attribute AIntExpr::_stype */
-/* 9: Attribute AIntExpr::_if_true_flow_ctx */
-/* 10: Attribute AIntExpr::_if_false_flow_ctx */
-/* 11: Attribute AIntExpr::_n_number */
+/* 8: Attribute AIntExpr::_is_typed */
+/* 9: Attribute AIntExpr::_stype */
+/* 10: Attribute AIntExpr::_if_true_flow_ctx */
+/* 11: Attribute AIntExpr::_if_false_flow_ctx */
+/* 12: Attribute AIntExpr::_n_number */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AIntExpr[] = "init var of AIntExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AIntExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -79935,10 +82937,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AIntExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AIntExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -79947,7 +82953,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AIntExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AIntExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 12);
+  obj = alloc(sizeof(val_t) * 13);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AIntExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -79967,15 +82973,15 @@ void CHECKNEW_parser___parser_nodes___AIntExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -79986,13 +82992,13 @@ val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6870;
+  fra.me.line = 7244;
   fra.me.meth = LOCATE_NEW_AIntExpr_parser___parser_prod___AIntExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6870 */
+  /* parser/parser_prod.nit:7244 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AIntExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AIntExpr(fra.me.REG[0]);
   parser___parser_prod___AIntExpr___empty_init(fra.me.REG[0], init_table);
@@ -80001,27 +83007,29 @@ val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr[] = "new AIntExpr parser_prod::AIntExpr::init_aintexpr";
-val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6872;
+  fra.me.line = 7246;
   fra.me.meth = LOCATE_NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:6872 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___AIntExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___AIntExpr(fra.me.REG[1]);
-  parser___parser_prod___AIntExpr___init_aintexpr(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___AIntExpr(fra.me.REG[1]);
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:7246 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___AIntExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___AIntExpr(fra.me.REG[2]);
+  parser___parser_prod___AIntExpr___init_aintexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___AIntExpr(fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return fra.me.REG[2];
 }
 static const char LOCATE_NEW_AIntExpr_parser___parser_nodes___ANode___init[] = "new AIntExpr parser_nodes::ANode::init";
 val_t NEW_AIntExpr_parser___parser_nodes___ANode___init(void){
@@ -80044,16 +83052,16 @@ val_t NEW_AIntExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AFloatExpr[92] = {
-  {(bigint) 3943 /* 0: Identity */},
-  {(bigint) 12 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AFloatExpr[93] = {
+  {(bigint) 4483 /* 0: Identity */},
+  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AFloatExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AFloatExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AFloatExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AFloatExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AFloatExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AFloatExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3943 /* 8: AFloatExpr < AFloatExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AFloatExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4483 /* 8: AFloatExpr < AFloatExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -80119,13 +83127,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AFloatExpr[92] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AFloatExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AFloatExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: AFloatExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: AFloatExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AFloatExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -80135,7 +83144,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AFloatExpr[92] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___AFloatExpr___empty_init},
   {(bigint) parser___parser_prod___AFloatExpr___init_afloatexpr},
-  {(bigint) 4 /* 90: AFloatExpr < AFloatExpr: superclass init_table position */},
+  {(bigint) 4 /* 91: AFloatExpr < AFloatExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AFloatExpr___n_float},
 };
 /* 0: Pointer to the classtable */
@@ -80144,15 +83153,16 @@ const classtable_elt_t VFT_parser___parser_nodes___AFloatExpr[92] = {
 /* 3: Attribute AFloatExpr::_location */
 /* 4: Attribute AFloatExpr::_first_location */
 /* 5: Attribute AFloatExpr::_last_location */
+/* 6: Attribute AFloatExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AFloatExpr::_is_typed */
-/* 8: Attribute AFloatExpr::_stype */
-/* 9: Attribute AFloatExpr::_if_true_flow_ctx */
-/* 10: Attribute AFloatExpr::_if_false_flow_ctx */
-/* 11: Attribute AFloatExpr::_n_float */
+/* 8: Attribute AFloatExpr::_is_typed */
+/* 9: Attribute AFloatExpr::_stype */
+/* 10: Attribute AFloatExpr::_if_true_flow_ctx */
+/* 11: Attribute AFloatExpr::_if_false_flow_ctx */
+/* 12: Attribute AFloatExpr::_n_float */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AFloatExpr[] = "init var of AFloatExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AFloatExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -80160,10 +83170,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AFloatExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AFloatExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -80172,7 +83186,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AFloatExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AFloatExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 12);
+  obj = alloc(sizeof(val_t) * 13);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AFloatExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -80192,15 +83206,15 @@ void CHECKNEW_parser___parser_nodes___AFloatExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -80211,13 +83225,13 @@ val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6901;
+  fra.me.line = 7293;
   fra.me.meth = LOCATE_NEW_AFloatExpr_parser___parser_prod___AFloatExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6901 */
+  /* parser/parser_prod.nit:7293 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AFloatExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AFloatExpr(fra.me.REG[0]);
   parser___parser_prod___AFloatExpr___empty_init(fra.me.REG[0], init_table);
@@ -80226,27 +83240,29 @@ val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr[] = "new AFloatExpr parser_prod::AFloatExpr::init_afloatexpr";
-val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6903;
+  fra.me.line = 7295;
   fra.me.meth = LOCATE_NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:6903 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___AFloatExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___AFloatExpr(fra.me.REG[1]);
-  parser___parser_prod___AFloatExpr___init_afloatexpr(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___AFloatExpr(fra.me.REG[1]);
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:7295 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___AFloatExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___AFloatExpr(fra.me.REG[2]);
+  parser___parser_prod___AFloatExpr___init_afloatexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___AFloatExpr(fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return fra.me.REG[2];
 }
 static const char LOCATE_NEW_AFloatExpr_parser___parser_nodes___ANode___init[] = "new AFloatExpr parser_nodes::ANode::init";
 val_t NEW_AFloatExpr_parser___parser_nodes___ANode___init(void){
@@ -80269,16 +83285,16 @@ val_t NEW_AFloatExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ACharExpr[92] = {
-  {(bigint) 3979 /* 0: Identity */},
-  {(bigint) 12 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ACharExpr[93] = {
+  {(bigint) 4523 /* 0: Identity */},
+  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ACharExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ACharExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ACharExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ACharExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ACharExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: ACharExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3979 /* 8: ACharExpr < ACharExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ACharExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4523 /* 8: ACharExpr < ACharExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -80344,13 +83360,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ACharExpr[92] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ACharExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___ACharExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: ACharExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: ACharExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ACharExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -80360,7 +83377,7 @@ const classtable_elt_t VFT_parser___parser_nodes___ACharExpr[92] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___ACharExpr___empty_init},
   {(bigint) parser___parser_prod___ACharExpr___init_acharexpr},
-  {(bigint) 4 /* 90: ACharExpr < ACharExpr: superclass init_table position */},
+  {(bigint) 4 /* 91: ACharExpr < ACharExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ACharExpr___n_char},
 };
 /* 0: Pointer to the classtable */
@@ -80369,15 +83386,16 @@ const classtable_elt_t VFT_parser___parser_nodes___ACharExpr[92] = {
 /* 3: Attribute ACharExpr::_location */
 /* 4: Attribute ACharExpr::_first_location */
 /* 5: Attribute ACharExpr::_last_location */
+/* 6: Attribute ACharExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ACharExpr::_is_typed */
-/* 8: Attribute ACharExpr::_stype */
-/* 9: Attribute ACharExpr::_if_true_flow_ctx */
-/* 10: Attribute ACharExpr::_if_false_flow_ctx */
-/* 11: Attribute ACharExpr::_n_char */
+/* 8: Attribute ACharExpr::_is_typed */
+/* 9: Attribute ACharExpr::_stype */
+/* 10: Attribute ACharExpr::_if_true_flow_ctx */
+/* 11: Attribute ACharExpr::_if_false_flow_ctx */
+/* 12: Attribute ACharExpr::_n_char */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ACharExpr[] = "init var of ACharExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ACharExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -80385,10 +83403,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ACharExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ACharExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -80397,7 +83419,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ACharExpr(val_t p0){
 val_t NEW_parser___parser_nodes___ACharExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 12);
+  obj = alloc(sizeof(val_t) * 13);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ACharExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -80417,15 +83439,15 @@ void CHECKNEW_parser___parser_nodes___ACharExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -80436,13 +83458,13 @@ val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6932;
+  fra.me.line = 7342;
   fra.me.meth = LOCATE_NEW_ACharExpr_parser___parser_prod___ACharExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6932 */
+  /* parser/parser_prod.nit:7342 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ACharExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ACharExpr(fra.me.REG[0]);
   parser___parser_prod___ACharExpr___empty_init(fra.me.REG[0], init_table);
@@ -80451,27 +83473,29 @@ val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr[] = "new ACharExpr parser_prod::ACharExpr::init_acharexpr";
-val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6934;
+  fra.me.line = 7344;
   fra.me.meth = LOCATE_NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:6934 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___ACharExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___ACharExpr(fra.me.REG[1]);
-  parser___parser_prod___ACharExpr___init_acharexpr(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___ACharExpr(fra.me.REG[1]);
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:7344 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___ACharExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___ACharExpr(fra.me.REG[2]);
+  parser___parser_prod___ACharExpr___init_acharexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___ACharExpr(fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return fra.me.REG[2];
 }
 static const char LOCATE_NEW_ACharExpr_parser___parser_nodes___ANode___init[] = "new ACharExpr parser_nodes::ANode::init";
 val_t NEW_ACharExpr_parser___parser_nodes___ANode___init(void){
@@ -80494,17 +83518,17 @@ val_t NEW_ACharExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AStringExpr[95] = {
-  {(bigint) 4111 /* 0: Identity */},
-  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AStringExpr[96] = {
+  {(bigint) 4659 /* 0: Identity */},
+  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AStringExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AStringExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AStringExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AStringExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AStringExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AStringExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3779 /* 8: AStringExpr < AStringFormExpr: superclass typecheck marker */},
-  {(bigint) 4111 /* 9: AStringExpr < AStringExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AStringExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4295 /* 8: AStringExpr < AStringFormExpr: superclass typecheck marker */},
+  {(bigint) 4659 /* 9: AStringExpr < AStringExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -80569,13 +83593,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AStringExpr[95] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AStringExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AStringExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AStringExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AStringExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AStringFormExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -80585,11 +83610,11 @@ const classtable_elt_t VFT_parser___parser_nodes___AStringExpr[95] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) syntax___icode_generation___AStringExpr___string_text},
   {(bigint) syntax___icode_generation___AStringFormExpr___compute_string_infos},
-  {(bigint) 0 /* 90: AStringExpr < AStringFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 91: AStringExpr < AStringFormExpr: superclass init_table position */},
+  {(bigint) parser___parser_nodes___AStringFormExpr___n_string},
   {(bigint) parser___parser_prod___AStringExpr___empty_init},
   {(bigint) parser___parser_prod___AStringExpr___init_astringexpr},
-  {(bigint) 5 /* 93: AStringExpr < AStringExpr: superclass init_table position */},
-  {(bigint) parser___parser_nodes___AStringExpr___n_string},
+  {(bigint) 5 /* 95: AStringExpr < AStringExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -80597,17 +83622,18 @@ const classtable_elt_t VFT_parser___parser_nodes___AStringExpr[95] = {
 /* 3: Attribute AStringExpr::_location */
 /* 4: Attribute AStringExpr::_first_location */
 /* 5: Attribute AStringExpr::_last_location */
+/* 6: Attribute AStringExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AStringExpr::_is_typed */
-/* 8: Attribute AStringExpr::_stype */
-/* 9: Attribute AStringExpr::_if_true_flow_ctx */
-/* 10: Attribute AStringExpr::_if_false_flow_ctx */
-/* 11: Attribute AStringExpr::_cstring */
-/* 12: Attribute AStringExpr::_cstring_length */
-/* 13: Attribute AStringExpr::_n_string */
+/* 8: Attribute AStringExpr::_is_typed */
+/* 9: Attribute AStringExpr::_stype */
+/* 10: Attribute AStringExpr::_if_true_flow_ctx */
+/* 11: Attribute AStringExpr::_if_false_flow_ctx */
+/* 12: Attribute AStringExpr::_cstring */
+/* 13: Attribute AStringExpr::_cstring_length */
+/* 14: Attribute AStringExpr::_n_string */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AStringExpr[] = "init var of AStringExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AStringExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -80615,10 +83641,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AStringExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AStringExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -80627,7 +83657,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AStringExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AStringExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 14);
+  obj = alloc(sizeof(val_t) * 15);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AStringExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -80647,15 +83677,15 @@ void CHECKNEW_parser___parser_nodes___AStringExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -80666,13 +83696,13 @@ val_t NEW_AStringExpr_parser___parser_prod___AStringExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6963;
+  fra.me.line = 7391;
   fra.me.meth = LOCATE_NEW_AStringExpr_parser___parser_prod___AStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6963 */
+  /* parser/parser_prod.nit:7391 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AStringExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AStringExpr(fra.me.REG[0]);
   parser___parser_prod___AStringExpr___empty_init(fra.me.REG[0], init_table);
@@ -80681,27 +83711,29 @@ val_t NEW_AStringExpr_parser___parser_prod___AStringExpr___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr[] = "new AStringExpr parser_prod::AStringExpr::init_astringexpr";
-val_t NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+val_t NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6965;
+  fra.me.line = 7393;
   fra.me.meth = LOCATE_NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:6965 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___AStringExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___AStringExpr(fra.me.REG[1]);
-  parser___parser_prod___AStringExpr___init_astringexpr(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___AStringExpr(fra.me.REG[1]);
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:7393 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___AStringExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___AStringExpr(fra.me.REG[2]);
+  parser___parser_prod___AStringExpr___init_astringexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___AStringExpr(fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return fra.me.REG[2];
 }
 static const char LOCATE_NEW_AStringExpr_parser___parser_nodes___ANode___init[] = "new AStringExpr parser_nodes::ANode::init";
 val_t NEW_AStringExpr_parser___parser_nodes___ANode___init(void){
@@ -80724,17 +83756,17 @@ val_t NEW_AStringExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AStartStringExpr[95] = {
-  {(bigint) 4115 /* 0: Identity */},
-  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AStartStringExpr[96] = {
+  {(bigint) 4663 /* 0: Identity */},
+  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AStartStringExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AStartStringExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AStartStringExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AStartStringExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AStartStringExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AStartStringExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3779 /* 8: AStartStringExpr < AStringFormExpr: superclass typecheck marker */},
-  {(bigint) 4115 /* 9: AStartStringExpr < AStartStringExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AStartStringExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4295 /* 8: AStartStringExpr < AStringFormExpr: superclass typecheck marker */},
+  {(bigint) 4663 /* 9: AStartStringExpr < AStartStringExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -80799,13 +83831,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AStartStringExpr[95] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AStartStringExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AStartStringExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AStartStringExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AStringFormExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -80815,11 +83848,11 @@ const classtable_elt_t VFT_parser___parser_nodes___AStartStringExpr[95] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) syntax___icode_generation___AStartStringExpr___string_text},
   {(bigint) syntax___icode_generation___AStringFormExpr___compute_string_infos},
-  {(bigint) 0 /* 90: AStartStringExpr < AStringFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 91: AStartStringExpr < AStringFormExpr: superclass init_table position */},
+  {(bigint) parser___parser_nodes___AStringFormExpr___n_string},
   {(bigint) parser___parser_prod___AStartStringExpr___empty_init},
   {(bigint) parser___parser_prod___AStartStringExpr___init_astartstringexpr},
-  {(bigint) 5 /* 93: AStartStringExpr < AStartStringExpr: superclass init_table position */},
-  {(bigint) parser___parser_nodes___AStartStringExpr___n_string},
+  {(bigint) 5 /* 95: AStartStringExpr < AStartStringExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -80827,17 +83860,18 @@ const classtable_elt_t VFT_parser___parser_nodes___AStartStringExpr[95] = {
 /* 3: Attribute AStartStringExpr::_location */
 /* 4: Attribute AStartStringExpr::_first_location */
 /* 5: Attribute AStartStringExpr::_last_location */
+/* 6: Attribute AStartStringExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AStartStringExpr::_is_typed */
-/* 8: Attribute AStartStringExpr::_stype */
-/* 9: Attribute AStartStringExpr::_if_true_flow_ctx */
-/* 10: Attribute AStartStringExpr::_if_false_flow_ctx */
-/* 11: Attribute AStartStringExpr::_cstring */
-/* 12: Attribute AStartStringExpr::_cstring_length */
-/* 13: Attribute AStartStringExpr::_n_string */
+/* 8: Attribute AStartStringExpr::_is_typed */
+/* 9: Attribute AStartStringExpr::_stype */
+/* 10: Attribute AStartStringExpr::_if_true_flow_ctx */
+/* 11: Attribute AStartStringExpr::_if_false_flow_ctx */
+/* 12: Attribute AStartStringExpr::_cstring */
+/* 13: Attribute AStartStringExpr::_cstring_length */
+/* 14: Attribute AStartStringExpr::_n_string */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AStartStringExpr[] = "init var of AStartStringExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AStartStringExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -80845,10 +83879,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AStartStringExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AStartStringExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -80857,7 +83895,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AStartStringExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AStartStringExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 14);
+  obj = alloc(sizeof(val_t) * 15);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AStartStringExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -80877,15 +83915,15 @@ void CHECKNEW_parser___parser_nodes___AStartStringExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStartStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -80896,13 +83934,13 @@ val_t NEW_AStartStringExpr_parser___parser_prod___AStartStringExpr___empty_init(
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6994;
+  fra.me.line = 7440;
   fra.me.meth = LOCATE_NEW_AStartStringExpr_parser___parser_prod___AStartStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:6994 */
+  /* parser/parser_prod.nit:7440 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AStartStringExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AStartStringExpr(fra.me.REG[0]);
   parser___parser_prod___AStartStringExpr___empty_init(fra.me.REG[0], init_table);
@@ -80917,7 +83955,7 @@ val_t NEW_AStartStringExpr_parser___parser_prod___AStartStringExpr___init_astart
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 6996;
+  fra.me.line = 7442;
   fra.me.meth = LOCATE_NEW_AStartStringExpr_parser___parser_prod___AStartStringExpr___init_astartstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -80925,7 +83963,7 @@ val_t NEW_AStartStringExpr_parser___parser_prod___AStartStringExpr___init_astart
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:6996 */
+  /* parser/parser_prod.nit:7442 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AStartStringExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AStartStringExpr(fra.me.REG[1]);
   parser___parser_prod___AStartStringExpr___init_astartstringexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -80954,17 +83992,17 @@ val_t NEW_AStartStringExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AMidStringExpr[95] = {
-  {(bigint) 4143 /* 0: Identity */},
-  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AMidStringExpr[96] = {
+  {(bigint) 4695 /* 0: Identity */},
+  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AMidStringExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AMidStringExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AMidStringExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AMidStringExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AMidStringExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AMidStringExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3779 /* 8: AMidStringExpr < AStringFormExpr: superclass typecheck marker */},
-  {(bigint) 4143 /* 9: AMidStringExpr < AMidStringExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AMidStringExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4295 /* 8: AMidStringExpr < AStringFormExpr: superclass typecheck marker */},
+  {(bigint) 4695 /* 9: AMidStringExpr < AMidStringExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -81029,13 +84067,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AMidStringExpr[95] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AMidStringExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AMidStringExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AMidStringExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AStringFormExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -81045,11 +84084,11 @@ const classtable_elt_t VFT_parser___parser_nodes___AMidStringExpr[95] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) syntax___icode_generation___AMidStringExpr___string_text},
   {(bigint) syntax___icode_generation___AStringFormExpr___compute_string_infos},
-  {(bigint) 0 /* 90: AMidStringExpr < AStringFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 91: AMidStringExpr < AStringFormExpr: superclass init_table position */},
+  {(bigint) parser___parser_nodes___AStringFormExpr___n_string},
   {(bigint) parser___parser_prod___AMidStringExpr___empty_init},
   {(bigint) parser___parser_prod___AMidStringExpr___init_amidstringexpr},
-  {(bigint) 5 /* 93: AMidStringExpr < AMidStringExpr: superclass init_table position */},
-  {(bigint) parser___parser_nodes___AMidStringExpr___n_string},
+  {(bigint) 5 /* 95: AMidStringExpr < AMidStringExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -81057,17 +84096,18 @@ const classtable_elt_t VFT_parser___parser_nodes___AMidStringExpr[95] = {
 /* 3: Attribute AMidStringExpr::_location */
 /* 4: Attribute AMidStringExpr::_first_location */
 /* 5: Attribute AMidStringExpr::_last_location */
+/* 6: Attribute AMidStringExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AMidStringExpr::_is_typed */
-/* 8: Attribute AMidStringExpr::_stype */
-/* 9: Attribute AMidStringExpr::_if_true_flow_ctx */
-/* 10: Attribute AMidStringExpr::_if_false_flow_ctx */
-/* 11: Attribute AMidStringExpr::_cstring */
-/* 12: Attribute AMidStringExpr::_cstring_length */
-/* 13: Attribute AMidStringExpr::_n_string */
+/* 8: Attribute AMidStringExpr::_is_typed */
+/* 9: Attribute AMidStringExpr::_stype */
+/* 10: Attribute AMidStringExpr::_if_true_flow_ctx */
+/* 11: Attribute AMidStringExpr::_if_false_flow_ctx */
+/* 12: Attribute AMidStringExpr::_cstring */
+/* 13: Attribute AMidStringExpr::_cstring_length */
+/* 14: Attribute AMidStringExpr::_n_string */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AMidStringExpr[] = "init var of AMidStringExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AMidStringExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -81075,10 +84115,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AMidStringExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AMidStringExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -81087,7 +84131,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AMidStringExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AMidStringExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 14);
+  obj = alloc(sizeof(val_t) * 15);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AMidStringExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -81107,15 +84151,15 @@ void CHECKNEW_parser___parser_nodes___AMidStringExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMidStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -81126,13 +84170,13 @@ val_t NEW_AMidStringExpr_parser___parser_prod___AMidStringExpr___empty_init(void
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7025;
+  fra.me.line = 7471;
   fra.me.meth = LOCATE_NEW_AMidStringExpr_parser___parser_prod___AMidStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7025 */
+  /* parser/parser_prod.nit:7471 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AMidStringExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AMidStringExpr(fra.me.REG[0]);
   parser___parser_prod___AMidStringExpr___empty_init(fra.me.REG[0], init_table);
@@ -81147,7 +84191,7 @@ val_t NEW_AMidStringExpr_parser___parser_prod___AMidStringExpr___init_amidstring
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7027;
+  fra.me.line = 7473;
   fra.me.meth = LOCATE_NEW_AMidStringExpr_parser___parser_prod___AMidStringExpr___init_amidstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -81155,7 +84199,7 @@ val_t NEW_AMidStringExpr_parser___parser_prod___AMidStringExpr___init_amidstring
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:7027 */
+  /* parser/parser_prod.nit:7473 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AMidStringExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AMidStringExpr(fra.me.REG[1]);
   parser___parser_prod___AMidStringExpr___init_amidstringexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -81184,17 +84228,17 @@ val_t NEW_AMidStringExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AEndStringExpr[95] = {
-  {(bigint) 4195 /* 0: Identity */},
-  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AEndStringExpr[96] = {
+  {(bigint) 4751 /* 0: Identity */},
+  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AEndStringExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AEndStringExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AEndStringExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AEndStringExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AEndStringExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AEndStringExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3779 /* 8: AEndStringExpr < AStringFormExpr: superclass typecheck marker */},
-  {(bigint) 4195 /* 9: AEndStringExpr < AEndStringExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AEndStringExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4295 /* 8: AEndStringExpr < AStringFormExpr: superclass typecheck marker */},
+  {(bigint) 4751 /* 9: AEndStringExpr < AEndStringExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -81259,13 +84303,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AEndStringExpr[95] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AEndStringExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AEndStringExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AEndStringExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AStringFormExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -81275,11 +84320,11 @@ const classtable_elt_t VFT_parser___parser_nodes___AEndStringExpr[95] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) syntax___icode_generation___AEndStringExpr___string_text},
   {(bigint) syntax___icode_generation___AStringFormExpr___compute_string_infos},
-  {(bigint) 0 /* 90: AEndStringExpr < AStringFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 91: AEndStringExpr < AStringFormExpr: superclass init_table position */},
+  {(bigint) parser___parser_nodes___AStringFormExpr___n_string},
   {(bigint) parser___parser_prod___AEndStringExpr___empty_init},
   {(bigint) parser___parser_prod___AEndStringExpr___init_aendstringexpr},
-  {(bigint) 5 /* 93: AEndStringExpr < AEndStringExpr: superclass init_table position */},
-  {(bigint) parser___parser_nodes___AEndStringExpr___n_string},
+  {(bigint) 5 /* 95: AEndStringExpr < AEndStringExpr: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -81287,17 +84332,18 @@ const classtable_elt_t VFT_parser___parser_nodes___AEndStringExpr[95] = {
 /* 3: Attribute AEndStringExpr::_location */
 /* 4: Attribute AEndStringExpr::_first_location */
 /* 5: Attribute AEndStringExpr::_last_location */
+/* 6: Attribute AEndStringExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AEndStringExpr::_is_typed */
-/* 8: Attribute AEndStringExpr::_stype */
-/* 9: Attribute AEndStringExpr::_if_true_flow_ctx */
-/* 10: Attribute AEndStringExpr::_if_false_flow_ctx */
-/* 11: Attribute AEndStringExpr::_cstring */
-/* 12: Attribute AEndStringExpr::_cstring_length */
-/* 13: Attribute AEndStringExpr::_n_string */
+/* 8: Attribute AEndStringExpr::_is_typed */
+/* 9: Attribute AEndStringExpr::_stype */
+/* 10: Attribute AEndStringExpr::_if_true_flow_ctx */
+/* 11: Attribute AEndStringExpr::_if_false_flow_ctx */
+/* 12: Attribute AEndStringExpr::_cstring */
+/* 13: Attribute AEndStringExpr::_cstring_length */
+/* 14: Attribute AEndStringExpr::_n_string */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AEndStringExpr[] = "init var of AEndStringExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AEndStringExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -81305,10 +84351,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AEndStringExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AEndStringExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -81317,7 +84367,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AEndStringExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AEndStringExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 14);
+  obj = alloc(sizeof(val_t) * 15);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AEndStringExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -81337,15 +84387,15 @@ void CHECKNEW_parser___parser_nodes___AEndStringExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEndStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -81356,13 +84406,13 @@ val_t NEW_AEndStringExpr_parser___parser_prod___AEndStringExpr___empty_init(void
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7056;
+  fra.me.line = 7502;
   fra.me.meth = LOCATE_NEW_AEndStringExpr_parser___parser_prod___AEndStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7056 */
+  /* parser/parser_prod.nit:7502 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AEndStringExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AEndStringExpr(fra.me.REG[0]);
   parser___parser_prod___AEndStringExpr___empty_init(fra.me.REG[0], init_table);
@@ -81377,7 +84427,7 @@ val_t NEW_AEndStringExpr_parser___parser_prod___AEndStringExpr___init_aendstring
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7058;
+  fra.me.line = 7504;
   fra.me.meth = LOCATE_NEW_AEndStringExpr_parser___parser_prod___AEndStringExpr___init_aendstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -81385,7 +84435,7 @@ val_t NEW_AEndStringExpr_parser___parser_prod___AEndStringExpr___init_aendstring
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:7058 */
+  /* parser/parser_prod.nit:7504 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AEndStringExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AEndStringExpr(fra.me.REG[1]);
   parser___parser_prod___AEndStringExpr___init_aendstringexpr(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -81414,16 +84464,16 @@ val_t NEW_AEndStringExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ASuperstringExpr[93] = {
-  {(bigint) 3771 /* 0: Identity */},
-  {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ASuperstringExpr[94] = {
+  {(bigint) 4287 /* 0: Identity */},
+  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ASuperstringExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ASuperstringExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ASuperstringExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ASuperstringExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ASuperstringExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: ASuperstringExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3771 /* 8: ASuperstringExpr < ASuperstringExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ASuperstringExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4287 /* 8: ASuperstringExpr < ASuperstringExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -81489,13 +84539,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ASuperstringExpr[93] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ASuperstringExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: ASuperstringExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: ASuperstringExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ASuperstringExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -81506,7 +84557,7 @@ const classtable_elt_t VFT_parser___parser_nodes___ASuperstringExpr[93] = {
   {(bigint) syntax___typing___ASuperstringExpr___atype},
   {(bigint) parser___parser_prod___ASuperstringExpr___empty_init},
   {(bigint) parser___parser_prod___ASuperstringExpr___init_asuperstringexpr},
-  {(bigint) 4 /* 91: ASuperstringExpr < ASuperstringExpr: superclass init_table position */},
+  {(bigint) 4 /* 92: ASuperstringExpr < ASuperstringExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASuperstringExpr___n_exprs},
 };
 /* 0: Pointer to the classtable */
@@ -81515,13 +84566,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ASuperstringExpr[93] = {
 /* 3: Attribute ASuperstringExpr::_location */
 /* 4: Attribute ASuperstringExpr::_first_location */
 /* 5: Attribute ASuperstringExpr::_last_location */
+/* 6: Attribute ASuperstringExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ASuperstringExpr::_is_typed */
-/* 8: Attribute ASuperstringExpr::_stype */
-/* 9: Attribute ASuperstringExpr::_if_true_flow_ctx */
-/* 10: Attribute ASuperstringExpr::_if_false_flow_ctx */
-/* 11: Attribute ASuperstringExpr::_atype */
-/* 12: Attribute ASuperstringExpr::_n_exprs */
+/* 8: Attribute ASuperstringExpr::_is_typed */
+/* 9: Attribute ASuperstringExpr::_stype */
+/* 10: Attribute ASuperstringExpr::_if_true_flow_ctx */
+/* 11: Attribute ASuperstringExpr::_if_false_flow_ctx */
+/* 12: Attribute ASuperstringExpr::_atype */
+/* 13: Attribute ASuperstringExpr::_n_exprs */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ASuperstringExpr[] = "init var of ASuperstringExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ASuperstringExpr(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -81537,10 +84589,13 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ASuperstringExpr(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* parser/parser_nodes.nit:1102 */
+  /* parser/parser_nodes.nit:1105 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -81548,7 +84603,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ASuperstringExpr(val_t p0){
 val_t NEW_parser___parser_nodes___ASuperstringExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 13);
+  obj = alloc(sizeof(val_t) * 14);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ASuperstringExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -81587,13 +84642,13 @@ val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___empty_init(
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7087;
+  fra.me.line = 7533;
   fra.me.meth = LOCATE_NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7087 */
+  /* parser/parser_prod.nit:7533 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ASuperstringExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ASuperstringExpr(fra.me.REG[0]);
   parser___parser_prod___ASuperstringExpr___empty_init(fra.me.REG[0], init_table);
@@ -81602,27 +84657,29 @@ val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___empty_init(
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr[] = "new ASuperstringExpr parser_prod::ASuperstringExpr::init_asuperstringexpr";
-val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7089;
+  fra.me.line = 7535;
   fra.me.meth = LOCATE_NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:7089 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___ASuperstringExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___ASuperstringExpr(fra.me.REG[1]);
-  parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___ASuperstringExpr(fra.me.REG[1]);
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:7535 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___ASuperstringExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___ASuperstringExpr(fra.me.REG[2]);
+  parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___ASuperstringExpr(fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return fra.me.REG[2];
 }
 static const char LOCATE_NEW_ASuperstringExpr_parser___parser_nodes___ANode___init[] = "new ASuperstringExpr parser_nodes::ANode::init";
 val_t NEW_ASuperstringExpr_parser___parser_nodes___ANode___init(void){
@@ -81645,17 +84702,17 @@ val_t NEW_ASuperstringExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AParExpr[95] = {
-  {(bigint) 4119 /* 0: Identity */},
-  {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AParExpr[96] = {
+  {(bigint) 4671 /* 0: Identity */},
+  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AParExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AParExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AParExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AParExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AParExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AParExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3831 /* 8: AParExpr < AProxyExpr: superclass typecheck marker */},
-  {(bigint) 4119 /* 9: AParExpr < AParExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AParExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4347 /* 8: AParExpr < AProxyExpr: superclass typecheck marker */},
+  {(bigint) 4671 /* 9: AParExpr < AParExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -81720,13 +84777,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AParExpr[95] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AParExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AParExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AParExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AProxyExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AProxyExpr___is_self},
@@ -81734,11 +84792,11 @@ const classtable_elt_t VFT_parser___parser_nodes___AParExpr[95] = {
   {(bigint) syntax___typing___AExpr___if_true_flow_ctx},
   {(bigint) syntax___typing___AExpr___if_false_flow_ctx},
   {(bigint) syntax___typing___AParExpr___warn_parentheses},
-  {(bigint) 0 /* 88: AParExpr < AProxyExpr: superclass init_table position */},
+  {(bigint) 0 /* 89: AParExpr < AProxyExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AProxyExpr___n_expr},
   {(bigint) parser___parser_prod___AParExpr___empty_init},
   {(bigint) parser___parser_prod___AParExpr___init_aparexpr},
-  {(bigint) 5 /* 92: AParExpr < AParExpr: superclass init_table position */},
+  {(bigint) 5 /* 93: AParExpr < AParExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AParExpr___n_opar},
   {(bigint) parser___parser_nodes___AParExpr___n_cpar},
 };
@@ -81748,17 +84806,18 @@ const classtable_elt_t VFT_parser___parser_nodes___AParExpr[95] = {
 /* 3: Attribute AParExpr::_location */
 /* 4: Attribute AParExpr::_first_location */
 /* 5: Attribute AParExpr::_last_location */
+/* 6: Attribute AParExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AParExpr::_is_typed */
-/* 8: Attribute AParExpr::_stype */
-/* 9: Attribute AParExpr::_if_true_flow_ctx */
-/* 10: Attribute AParExpr::_if_false_flow_ctx */
-/* 11: Attribute AParExpr::_n_expr */
-/* 12: Attribute AParExpr::_n_opar */
-/* 13: Attribute AParExpr::_n_cpar */
+/* 8: Attribute AParExpr::_is_typed */
+/* 9: Attribute AParExpr::_stype */
+/* 10: Attribute AParExpr::_if_true_flow_ctx */
+/* 11: Attribute AParExpr::_if_false_flow_ctx */
+/* 12: Attribute AParExpr::_n_expr */
+/* 13: Attribute AParExpr::_n_opar */
+/* 14: Attribute AParExpr::_n_cpar */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AParExpr[] = "init var of AParExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AParExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -81766,10 +84825,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AParExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AParExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -81778,7 +84841,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AParExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AParExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 14);
+  obj = alloc(sizeof(val_t) * 15);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AParExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -81798,25 +84861,25 @@ void CHECKNEW_parser___parser_nodes___AParExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -81827,13 +84890,13 @@ val_t NEW_AParExpr_parser___parser_prod___AParExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7125;
+  fra.me.line = 7589;
   fra.me.meth = LOCATE_NEW_AParExpr_parser___parser_prod___AParExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7125 */
+  /* parser/parser_prod.nit:7589 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AParExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AParExpr(fra.me.REG[0]);
   parser___parser_prod___AParExpr___empty_init(fra.me.REG[0], init_table);
@@ -81842,31 +84905,33 @@ val_t NEW_AParExpr_parser___parser_prod___AParExpr___empty_init(void){
   return fra.me.REG[0];
 }
 static const char LOCATE_NEW_AParExpr_parser___parser_prod___AParExpr___init_aparexpr[] = "new AParExpr parser_prod::AParExpr::init_aparexpr";
-val_t NEW_AParExpr_parser___parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+val_t NEW_AParExpr_parser___parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, val_t p2, val_t p3){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t tmp;
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7127;
+  fra.me.line = 7591;
   fra.me.meth = LOCATE_NEW_AParExpr_parser___parser_prod___AParExpr___init_aparexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7127 */
-  fra.me.REG[3] = NEW_parser___parser_nodes___AParExpr();
-  INIT_ATTRIBUTES__parser___parser_nodes___AParExpr(fra.me.REG[3]);
-  parser___parser_prod___AParExpr___init_aparexpr(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
-  CHECKNEW_parser___parser_nodes___AParExpr(fra.me.REG[3]);
+  fra.me.REG[3] = p3;
+  /* parser/parser_prod.nit:7591 */
+  fra.me.REG[4] = NEW_parser___parser_nodes___AParExpr();
+  INIT_ATTRIBUTES__parser___parser_nodes___AParExpr(fra.me.REG[4]);
+  parser___parser_prod___AParExpr___init_aparexpr(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
+  CHECKNEW_parser___parser_nodes___AParExpr(fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[3];
+  return fra.me.REG[4];
 }
 static const char LOCATE_NEW_AParExpr_parser___parser_nodes___ANode___init[] = "new AParExpr parser_nodes::ANode::init";
 val_t NEW_AParExpr_parser___parser_nodes___ANode___init(void){
@@ -81889,16 +84954,16 @@ val_t NEW_AParExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AAsCastExpr[96] = {
-  {(bigint) 4255 /* 0: Identity */},
-  {(bigint) 16 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AAsCastExpr[97] = {
+  {(bigint) 4811 /* 0: Identity */},
+  {(bigint) 17 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AAsCastExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AAsCastExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AAsCastExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AAsCastExpr < Prod: superclass typecheck marker */},
-  {(bigint) 3763 /* 6: AAsCastExpr < ATypeCheckExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AAsCastExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4255 /* 8: AAsCastExpr < AAsCastExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AAsCastExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4275 /* 6: AAsCastExpr < ATypeCheckExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AAsCastExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4811 /* 8: AAsCastExpr < AAsCastExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -81964,13 +85029,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AAsCastExpr[96] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AAsCastExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
-  {(bigint) 0 /* 74: AAsCastExpr < ATypeCheckExpr: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 0 /* 75: AAsCastExpr < ATypeCheckExpr: superclass init_table position */},
   {(bigint) syntax___typing___ATypeCheckExpr___check_expr_cast},
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AAsCastExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AAsCastExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AAsCastExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -81980,7 +85046,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AAsCastExpr[96] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___AAsCastExpr___empty_init},
   {(bigint) parser___parser_prod___AAsCastExpr___init_aascastexpr},
-  {(bigint) 5 /* 90: AAsCastExpr < AAsCastExpr: superclass init_table position */},
+  {(bigint) 5 /* 91: AAsCastExpr < AAsCastExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAsCastExpr___n_expr},
   {(bigint) parser___parser_nodes___AAsCastExpr___n_kwas},
   {(bigint) parser___parser_nodes___AAsCastExpr___n_opar},
@@ -81993,19 +85059,20 @@ const classtable_elt_t VFT_parser___parser_nodes___AAsCastExpr[96] = {
 /* 3: Attribute AAsCastExpr::_location */
 /* 4: Attribute AAsCastExpr::_first_location */
 /* 5: Attribute AAsCastExpr::_last_location */
+/* 6: Attribute AAsCastExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AAsCastExpr::_is_typed */
-/* 8: Attribute AAsCastExpr::_stype */
-/* 9: Attribute AAsCastExpr::_if_true_flow_ctx */
-/* 10: Attribute AAsCastExpr::_if_false_flow_ctx */
-/* 11: Attribute AAsCastExpr::_n_expr */
-/* 12: Attribute AAsCastExpr::_n_kwas */
-/* 13: Attribute AAsCastExpr::_n_opar */
-/* 14: Attribute AAsCastExpr::_n_type */
-/* 15: Attribute AAsCastExpr::_n_cpar */
+/* 8: Attribute AAsCastExpr::_is_typed */
+/* 9: Attribute AAsCastExpr::_stype */
+/* 10: Attribute AAsCastExpr::_if_true_flow_ctx */
+/* 11: Attribute AAsCastExpr::_if_false_flow_ctx */
+/* 12: Attribute AAsCastExpr::_n_expr */
+/* 13: Attribute AAsCastExpr::_n_kwas */
+/* 14: Attribute AAsCastExpr::_n_opar */
+/* 15: Attribute AAsCastExpr::_n_type */
+/* 16: Attribute AAsCastExpr::_n_cpar */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAsCastExpr[] = "init var of AAsCastExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AAsCastExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -82013,10 +85080,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAsCastExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAsCastExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -82025,7 +85096,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAsCastExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AAsCastExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 16);
+  obj = alloc(sizeof(val_t) * 17);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AAsCastExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -82084,13 +85155,13 @@ val_t NEW_AAsCastExpr_parser___parser_prod___AAsCastExpr___empty_init(void){
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7184;
+  fra.me.line = 7666;
   fra.me.meth = LOCATE_NEW_AAsCastExpr_parser___parser_prod___AAsCastExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7184 */
+  /* parser/parser_prod.nit:7666 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAsCastExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AAsCastExpr(fra.me.REG[0]);
   parser___parser_prod___AAsCastExpr___empty_init(fra.me.REG[0], init_table);
@@ -82105,7 +85176,7 @@ val_t NEW_AAsCastExpr_parser___parser_prod___AAsCastExpr___init_aascastexpr(val_
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7186;
+  fra.me.line = 7668;
   fra.me.meth = LOCATE_NEW_AAsCastExpr_parser___parser_prod___AAsCastExpr___init_aascastexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -82121,7 +85192,7 @@ val_t NEW_AAsCastExpr_parser___parser_prod___AAsCastExpr___init_aascastexpr(val_
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:7186 */
+  /* parser/parser_prod.nit:7668 */
   fra.me.REG[5] = NEW_parser___parser_nodes___AAsCastExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AAsCastExpr(fra.me.REG[5]);
   parser___parser_prod___AAsCastExpr___init_aascastexpr(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
@@ -82150,16 +85221,16 @@ val_t NEW_AAsCastExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AAsNotnullExpr[97] = {
-  {(bigint) 4031 /* 0: Identity */},
-  {(bigint) 17 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AAsNotnullExpr[98] = {
+  {(bigint) 4579 /* 0: Identity */},
+  {(bigint) 18 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AAsNotnullExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AAsNotnullExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AAsNotnullExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AAsNotnullExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AAsNotnullExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: AAsNotnullExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4031 /* 8: AAsNotnullExpr < AAsNotnullExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AAsNotnullExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4579 /* 8: AAsNotnullExpr < AAsNotnullExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -82225,13 +85296,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AAsNotnullExpr[97] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AAsNotnullExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: AAsNotnullExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: AAsNotnullExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AAsNotnullExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -82241,7 +85313,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AAsNotnullExpr[97] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___AAsNotnullExpr___empty_init},
   {(bigint) parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr},
-  {(bigint) 4 /* 90: AAsNotnullExpr < AAsNotnullExpr: superclass init_table position */},
+  {(bigint) 4 /* 91: AAsNotnullExpr < AAsNotnullExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAsNotnullExpr___n_expr},
   {(bigint) parser___parser_nodes___AAsNotnullExpr___n_kwas},
   {(bigint) parser___parser_nodes___AAsNotnullExpr___n_opar},
@@ -82255,20 +85327,21 @@ const classtable_elt_t VFT_parser___parser_nodes___AAsNotnullExpr[97] = {
 /* 3: Attribute AAsNotnullExpr::_location */
 /* 4: Attribute AAsNotnullExpr::_first_location */
 /* 5: Attribute AAsNotnullExpr::_last_location */
+/* 6: Attribute AAsNotnullExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AAsNotnullExpr::_is_typed */
-/* 8: Attribute AAsNotnullExpr::_stype */
-/* 9: Attribute AAsNotnullExpr::_if_true_flow_ctx */
-/* 10: Attribute AAsNotnullExpr::_if_false_flow_ctx */
-/* 11: Attribute AAsNotnullExpr::_n_expr */
-/* 12: Attribute AAsNotnullExpr::_n_kwas */
-/* 13: Attribute AAsNotnullExpr::_n_opar */
-/* 14: Attribute AAsNotnullExpr::_n_kwnot */
-/* 15: Attribute AAsNotnullExpr::_n_kwnull */
-/* 16: Attribute AAsNotnullExpr::_n_cpar */
+/* 8: Attribute AAsNotnullExpr::_is_typed */
+/* 9: Attribute AAsNotnullExpr::_stype */
+/* 10: Attribute AAsNotnullExpr::_if_true_flow_ctx */
+/* 11: Attribute AAsNotnullExpr::_if_false_flow_ctx */
+/* 12: Attribute AAsNotnullExpr::_n_expr */
+/* 13: Attribute AAsNotnullExpr::_n_kwas */
+/* 14: Attribute AAsNotnullExpr::_n_opar */
+/* 15: Attribute AAsNotnullExpr::_n_kwnot */
+/* 16: Attribute AAsNotnullExpr::_n_kwnull */
+/* 17: Attribute AAsNotnullExpr::_n_cpar */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAsNotnullExpr[] = "init var of AAsNotnullExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AAsNotnullExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -82276,10 +85349,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAsNotnullExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAsNotnullExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -82288,7 +85365,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AAsNotnullExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AAsNotnullExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 17);
+  obj = alloc(sizeof(val_t) * 18);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AAsNotnullExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -82352,13 +85429,13 @@ val_t NEW_AAsNotnullExpr_parser___parser_prod___AAsNotnullExpr___empty_init(void
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7271;
+  fra.me.line = 7753;
   fra.me.meth = LOCATE_NEW_AAsNotnullExpr_parser___parser_prod___AAsNotnullExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7271 */
+  /* parser/parser_prod.nit:7753 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AAsNotnullExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AAsNotnullExpr(fra.me.REG[0]);
   parser___parser_prod___AAsNotnullExpr___empty_init(fra.me.REG[0], init_table);
@@ -82373,7 +85450,7 @@ val_t NEW_AAsNotnullExpr_parser___parser_prod___AAsNotnullExpr___init_aasnotnull
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7273;
+  fra.me.line = 7755;
   fra.me.meth = LOCATE_NEW_AAsNotnullExpr_parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -82391,7 +85468,7 @@ val_t NEW_AAsNotnullExpr_parser___parser_prod___AAsNotnullExpr___init_aasnotnull
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:7273 */
+  /* parser/parser_prod.nit:7755 */
   fra.me.REG[6] = NEW_parser___parser_nodes___AAsNotnullExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AAsNotnullExpr(fra.me.REG[6]);
   parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr(fra.me.REG[6], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], init_table);
@@ -82420,16 +85497,16 @@ val_t NEW_AAsNotnullExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AIssetAttrExpr[106] = {
-  {(bigint) 4155 /* 0: Identity */},
-  {(bigint) 21 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AIssetAttrExpr[107] = {
+  {(bigint) 4711 /* 0: Identity */},
+  {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AIssetAttrExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: AIssetAttrExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AIssetAttrExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AIssetAttrExpr < Prod: superclass typecheck marker */},
-  {(bigint) 4015 /* 6: AIssetAttrExpr < AAttrFormExpr: superclass typecheck marker */},
-  {(bigint) 3311 /* 7: AIssetAttrExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 4155 /* 8: AIssetAttrExpr < AIssetAttrExpr: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AIssetAttrExpr < Prod: superclass typecheck marker */},
+  {(bigint) 4559 /* 6: AIssetAttrExpr < AAttrFormExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: AIssetAttrExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4711 /* 8: AIssetAttrExpr < AIssetAttrExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -82495,13 +85572,14 @@ const classtable_elt_t VFT_parser___parser_nodes___AIssetAttrExpr[106] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 2 /* 72: AIssetAttrExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 1 /* 80: AIssetAttrExpr < AExpr: superclass init_table position */},
+  {(bigint) 1 /* 81: AIssetAttrExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___AIssetAttrExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -82520,12 +85598,12 @@ const classtable_elt_t VFT_parser___parser_nodes___AIssetAttrExpr[106] = {
   {(bigint) syntax___typing___AAttrFormExpr___do_typing},
   {(bigint) syntax___typing___AAttrFormExpr___prop},
   {(bigint) syntax___typing___AAttrFormExpr___attr_type},
-  {(bigint) 0 /* 99: AIssetAttrExpr < AAttrFormExpr: superclass init_table position */},
+  {(bigint) 0 /* 100: AIssetAttrExpr < AAttrFormExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AAttrFormExpr___n_expr},
   {(bigint) parser___parser_nodes___AAttrFormExpr___n_id},
   {(bigint) parser___parser_prod___AIssetAttrExpr___empty_init},
   {(bigint) parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr},
-  {(bigint) 5 /* 104: AIssetAttrExpr < AIssetAttrExpr: superclass init_table position */},
+  {(bigint) 5 /* 105: AIssetAttrExpr < AIssetAttrExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___AIssetAttrExpr___n_kwisset},
 };
 /* 0: Pointer to the classtable */
@@ -82534,24 +85612,25 @@ const classtable_elt_t VFT_parser___parser_nodes___AIssetAttrExpr[106] = {
 /* 3: Attribute AIssetAttrExpr::_location */
 /* 4: Attribute AIssetAttrExpr::_first_location */
 /* 5: Attribute AIssetAttrExpr::_last_location */
+/* 6: Attribute AIssetAttrExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute AIssetAttrExpr::_is_typed */
-/* 8: Attribute AIssetAttrExpr::_stype */
-/* 9: Attribute AIssetAttrExpr::_if_true_flow_ctx */
-/* 10: Attribute AIssetAttrExpr::_if_false_flow_ctx */
+/* 8: Attribute AIssetAttrExpr::_is_typed */
+/* 9: Attribute AIssetAttrExpr::_stype */
+/* 10: Attribute AIssetAttrExpr::_if_true_flow_ctx */
+/* 11: Attribute AIssetAttrExpr::_if_false_flow_ctx */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
 /* Instance Hole :( */
-/* 16: Attribute AIssetAttrExpr::_prop */
-/* 17: Attribute AIssetAttrExpr::_attr_type */
-/* 18: Attribute AIssetAttrExpr::_n_expr */
-/* 19: Attribute AIssetAttrExpr::_n_id */
-/* 20: Attribute AIssetAttrExpr::_n_kwisset */
+/* 17: Attribute AIssetAttrExpr::_prop */
+/* 18: Attribute AIssetAttrExpr::_attr_type */
+/* 19: Attribute AIssetAttrExpr::_n_expr */
+/* 20: Attribute AIssetAttrExpr::_n_id */
+/* 21: Attribute AIssetAttrExpr::_n_kwisset */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AIssetAttrExpr[] = "init var of AIssetAttrExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___AIssetAttrExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -82559,10 +85638,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AIssetAttrExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AIssetAttrExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -82571,7 +85654,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AIssetAttrExpr(val_t p0){
 val_t NEW_parser___parser_nodes___AIssetAttrExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 21);
+  obj = alloc(sizeof(val_t) * 22);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AIssetAttrExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -82596,11 +85679,6 @@ void CHECKNEW_parser___parser_nodes___AIssetAttrExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -82611,6 +85689,11 @@ void CHECKNEW_parser___parser_nodes___AIssetAttrExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___empty_init[] = "new AIssetAttrExpr parser_prod::AIssetAttrExpr::empty_init";
@@ -82620,13 +85703,13 @@ val_t NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___empty_init(void
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7372;
+  fra.me.line = 7854;
   fra.me.meth = LOCATE_NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7372 */
+  /* parser/parser_prod.nit:7854 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AIssetAttrExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AIssetAttrExpr(fra.me.REG[0]);
   parser___parser_prod___AIssetAttrExpr___empty_init(fra.me.REG[0], init_table);
@@ -82641,7 +85724,7 @@ val_t NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___init_aissetattr
   int init_table[6] = {0, 0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7374;
+  fra.me.line = 7856;
   fra.me.meth = LOCATE_NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -82653,7 +85736,7 @@ val_t NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___init_aissetattr
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7374 */
+  /* parser/parser_prod.nit:7856 */
   fra.me.REG[3] = NEW_parser___parser_nodes___AIssetAttrExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___AIssetAttrExpr(fra.me.REG[3]);
   parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -82682,16 +85765,16 @@ val_t NEW_AIssetAttrExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ADebugTypeExpr[95] = {
-  {(bigint) 3967 /* 0: Identity */},
-  {(bigint) 15 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ADebugTypeExpr[96] = {
+  {(bigint) 4511 /* 0: Identity */},
+  {(bigint) 16 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ADebugTypeExpr" /* 2: Class Name */},
   {(bigint) 3 /* 3: ADebugTypeExpr < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ADebugTypeExpr < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ADebugTypeExpr < Prod: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ADebugTypeExpr < Prod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 3311 /* 7: ADebugTypeExpr < AExpr: superclass typecheck marker */},
-  {(bigint) 3967 /* 8: ADebugTypeExpr < ADebugTypeExpr: superclass typecheck marker */},
+  {(bigint) 3811 /* 7: ADebugTypeExpr < AExpr: superclass typecheck marker */},
+  {(bigint) 4511 /* 8: ADebugTypeExpr < ADebugTypeExpr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -82757,13 +85840,14 @@ const classtable_elt_t VFT_parser___parser_nodes___ADebugTypeExpr[95] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ADebugTypeExpr < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {(bigint) syntax___mmbuilder___AExpr___get_easy_stype},
   {(bigint) syntax___typing___AExpr___is_typed},
   {(bigint) syntax___typing___AExpr___is_statement},
   {(bigint) syntax___typing___AExpr___stype},
-  {(bigint) 0 /* 80: ADebugTypeExpr < AExpr: superclass init_table position */},
+  {(bigint) 0 /* 81: ADebugTypeExpr < AExpr: superclass init_table position */},
   {(bigint) syntax___icode_generation___ADebugTypeExpr___generate_icode},
   {(bigint) syntax___typing___AExpr___is_implicit_self},
   {(bigint) syntax___typing___AExpr___is_self},
@@ -82773,7 +85857,7 @@ const classtable_elt_t VFT_parser___parser_nodes___ADebugTypeExpr[95] = {
   {(bigint) syntax___typing___AExpr___warn_parentheses},
   {(bigint) parser___parser_prod___ADebugTypeExpr___empty_init},
   {(bigint) parser___parser_prod___ADebugTypeExpr___init_adebugtypeexpr},
-  {(bigint) 4 /* 90: ADebugTypeExpr < ADebugTypeExpr: superclass init_table position */},
+  {(bigint) 4 /* 91: ADebugTypeExpr < ADebugTypeExpr: superclass init_table position */},
   {(bigint) parser___parser_nodes___ADebugTypeExpr___n_kwdebug},
   {(bigint) parser___parser_nodes___ADebugTypeExpr___n_kwtype},
   {(bigint) parser___parser_nodes___ADebugTypeExpr___n_expr},
@@ -82785,18 +85869,19 @@ const classtable_elt_t VFT_parser___parser_nodes___ADebugTypeExpr[95] = {
 /* 3: Attribute ADebugTypeExpr::_location */
 /* 4: Attribute ADebugTypeExpr::_first_location */
 /* 5: Attribute ADebugTypeExpr::_last_location */
+/* 6: Attribute ADebugTypeExpr::_n_annotations */
 /* Instance Hole :( */
-/* 7: Attribute ADebugTypeExpr::_is_typed */
-/* 8: Attribute ADebugTypeExpr::_stype */
-/* 9: Attribute ADebugTypeExpr::_if_true_flow_ctx */
-/* 10: Attribute ADebugTypeExpr::_if_false_flow_ctx */
-/* 11: Attribute ADebugTypeExpr::_n_kwdebug */
-/* 12: Attribute ADebugTypeExpr::_n_kwtype */
-/* 13: Attribute ADebugTypeExpr::_n_expr */
-/* 14: Attribute ADebugTypeExpr::_n_type */
+/* 8: Attribute ADebugTypeExpr::_is_typed */
+/* 9: Attribute ADebugTypeExpr::_stype */
+/* 10: Attribute ADebugTypeExpr::_if_true_flow_ctx */
+/* 11: Attribute ADebugTypeExpr::_if_false_flow_ctx */
+/* 12: Attribute ADebugTypeExpr::_n_kwdebug */
+/* 13: Attribute ADebugTypeExpr::_n_kwtype */
+/* 14: Attribute ADebugTypeExpr::_n_expr */
+/* 15: Attribute ADebugTypeExpr::_n_type */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ADebugTypeExpr[] = "init var of ADebugTypeExpr";
 void INIT_ATTRIBUTES__parser___parser_nodes___ADebugTypeExpr(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -82804,10 +85889,14 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ADebugTypeExpr(val_t p0){
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ADebugTypeExpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:365 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
@@ -82816,7 +85905,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ADebugTypeExpr(val_t p0){
 val_t NEW_parser___parser_nodes___ADebugTypeExpr(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 15);
+  obj = alloc(sizeof(val_t) * 16);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ADebugTypeExpr;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -82836,6 +85925,11 @@ void CHECKNEW_parser___parser_nodes___ADebugTypeExpr(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -82856,11 +85950,6 @@ void CHECKNEW_parser___parser_nodes___ADebugTypeExpr(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_is_typed", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_ADebugTypeExpr_parser___parser_prod___ADebugTypeExpr___empty_init[] = "new ADebugTypeExpr parser_prod::ADebugTypeExpr::empty_init";
@@ -82870,13 +85959,13 @@ val_t NEW_ADebugTypeExpr_parser___parser_prod___ADebugTypeExpr___empty_init(void
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7431;
+  fra.me.line = 7913;
   fra.me.meth = LOCATE_NEW_ADebugTypeExpr_parser___parser_prod___ADebugTypeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7431 */
+  /* parser/parser_prod.nit:7913 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ADebugTypeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ADebugTypeExpr(fra.me.REG[0]);
   parser___parser_prod___ADebugTypeExpr___empty_init(fra.me.REG[0], init_table);
@@ -82891,7 +85980,7 @@ val_t NEW_ADebugTypeExpr_parser___parser_prod___ADebugTypeExpr___init_adebugtype
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7433;
+  fra.me.line = 7915;
   fra.me.meth = LOCATE_NEW_ADebugTypeExpr_parser___parser_prod___ADebugTypeExpr___init_adebugtypeexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -82905,7 +85994,7 @@ val_t NEW_ADebugTypeExpr_parser___parser_prod___ADebugTypeExpr___init_adebugtype
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:7433 */
+  /* parser/parser_prod.nit:7915 */
   fra.me.REG[4] = NEW_parser___parser_nodes___ADebugTypeExpr();
   INIT_ATTRIBUTES__parser___parser_nodes___ADebugTypeExpr(fra.me.REG[4]);
   parser___parser_prod___ADebugTypeExpr___init_adebugtypeexpr(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
@@ -82934,15 +86023,15 @@ val_t NEW_ADebugTypeExpr_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AListExprs[80] = {
-  {(bigint) 3899 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AListExprs[81] = {
+  {(bigint) 4415 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AListExprs" /* 2: Class Name */},
   {(bigint) 3 /* 3: AListExprs < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AListExprs < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AListExprs < Prod: superclass typecheck marker */},
-  {(bigint) 3307 /* 6: AListExprs < AExprs: superclass typecheck marker */},
-  {(bigint) 3899 /* 7: AListExprs < AListExprs: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AListExprs < Prod: superclass typecheck marker */},
+  {(bigint) 3807 /* 6: AListExprs < AExprs: superclass typecheck marker */},
+  {(bigint) 4415 /* 7: AListExprs < AListExprs: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -83009,12 +86098,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AListExprs[80] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AListExprs < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___syntax_base___AExprs___to_a},
-  {(bigint) 0 /* 75: AListExprs < AExprs: superclass init_table position */},
+  {(bigint) 0 /* 76: AListExprs < AExprs: superclass init_table position */},
   {(bigint) parser___parser_nodes___AExprs___n_exprs},
   {(bigint) parser___parser_prod___AListExprs___empty_init},
   {(bigint) parser___parser_prod___AListExprs___init_alistexprs},
-  {(bigint) 4 /* 79: AListExprs < AListExprs: superclass init_table position */},
+  {(bigint) 4 /* 80: AListExprs < AListExprs: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
@@ -83022,7 +86112,8 @@ const classtable_elt_t VFT_parser___parser_nodes___AListExprs[80] = {
 /* 3: Attribute AListExprs::_location */
 /* 4: Attribute AListExprs::_first_location */
 /* 5: Attribute AListExprs::_last_location */
-/* 6: Attribute AListExprs::_n_exprs */
+/* 6: Attribute AListExprs::_n_annotations */
+/* 7: Attribute AListExprs::_n_exprs */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AListExprs[] = "init var of AListExprs";
 void INIT_ATTRIBUTES__parser___parser_nodes___AListExprs(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -83037,7 +86128,10 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AListExprs(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1136 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1139 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -83045,7 +86139,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AListExprs(val_t p0){
 val_t NEW_parser___parser_nodes___AListExprs(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
+  obj = alloc(sizeof(val_t) * 8);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AListExprs;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -83079,13 +86173,13 @@ val_t NEW_AListExprs_parser___parser_prod___AListExprs___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7504;
+  fra.me.line = 7986;
   fra.me.meth = LOCATE_NEW_AListExprs_parser___parser_prod___AListExprs___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7504 */
+  /* parser/parser_prod.nit:7986 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AListExprs();
   INIT_ATTRIBUTES__parser___parser_nodes___AListExprs(fra.me.REG[0]);
   parser___parser_prod___AListExprs___empty_init(fra.me.REG[0], init_table);
@@ -83100,7 +86194,7 @@ val_t NEW_AListExprs_parser___parser_prod___AListExprs___init_alistexprs(val_t p
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7506;
+  fra.me.line = 7988;
   fra.me.meth = LOCATE_NEW_AListExprs_parser___parser_prod___AListExprs___init_alistexprs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -83108,7 +86202,7 @@ val_t NEW_AListExprs_parser___parser_prod___AListExprs___init_alistexprs(val_t p
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:7506 */
+  /* parser/parser_prod.nit:7988 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AListExprs();
   INIT_ATTRIBUTES__parser___parser_nodes___AListExprs(fra.me.REG[1]);
   parser___parser_prod___AListExprs___init_alistexprs(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -83137,15 +86231,15 @@ val_t NEW_AListExprs_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AParExprs[82] = {
-  {(bigint) 3859 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AParExprs[83] = {
+  {(bigint) 4375 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AParExprs" /* 2: Class Name */},
   {(bigint) 3 /* 3: AParExprs < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AParExprs < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AParExprs < Prod: superclass typecheck marker */},
-  {(bigint) 3307 /* 6: AParExprs < AExprs: superclass typecheck marker */},
-  {(bigint) 3859 /* 7: AParExprs < AParExprs: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AParExprs < Prod: superclass typecheck marker */},
+  {(bigint) 3807 /* 6: AParExprs < AExprs: superclass typecheck marker */},
+  {(bigint) 4375 /* 7: AParExprs < AParExprs: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -83212,12 +86306,13 @@ const classtable_elt_t VFT_parser___parser_nodes___AParExprs[82] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AParExprs < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___syntax_base___AExprs___to_a},
-  {(bigint) 0 /* 75: AParExprs < AExprs: superclass init_table position */},
+  {(bigint) 0 /* 76: AParExprs < AExprs: superclass init_table position */},
   {(bigint) parser___parser_nodes___AExprs___n_exprs},
   {(bigint) parser___parser_prod___AParExprs___empty_init},
   {(bigint) parser___parser_prod___AParExprs___init_aparexprs},
-  {(bigint) 4 /* 79: AParExprs < AParExprs: superclass init_table position */},
+  {(bigint) 4 /* 80: AParExprs < AParExprs: superclass init_table position */},
   {(bigint) parser___parser_nodes___AParExprs___n_opar},
   {(bigint) parser___parser_nodes___AParExprs___n_cpar},
 };
@@ -83227,9 +86322,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AParExprs[82] = {
 /* 3: Attribute AParExprs::_location */
 /* 4: Attribute AParExprs::_first_location */
 /* 5: Attribute AParExprs::_last_location */
-/* 6: Attribute AParExprs::_n_exprs */
-/* 7: Attribute AParExprs::_n_opar */
-/* 8: Attribute AParExprs::_n_cpar */
+/* 6: Attribute AParExprs::_n_annotations */
+/* 7: Attribute AParExprs::_n_exprs */
+/* 8: Attribute AParExprs::_n_opar */
+/* 9: Attribute AParExprs::_n_cpar */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AParExprs[] = "init var of AParExprs";
 void INIT_ATTRIBUTES__parser___parser_nodes___AParExprs(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -83244,7 +86340,10 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AParExprs(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1136 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1139 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -83252,7 +86351,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AParExprs(val_t p0){
 val_t NEW_parser___parser_nodes___AParExprs(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
+  obj = alloc(sizeof(val_t) * 10);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AParExprs;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -83272,15 +86371,15 @@ void CHECKNEW_parser___parser_nodes___AParExprs(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -83296,13 +86395,13 @@ val_t NEW_AParExprs_parser___parser_prod___AParExprs___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7542;
+  fra.me.line = 8024;
   fra.me.meth = LOCATE_NEW_AParExprs_parser___parser_prod___AParExprs___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7542 */
+  /* parser/parser_prod.nit:8024 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AParExprs();
   INIT_ATTRIBUTES__parser___parser_nodes___AParExprs(fra.me.REG[0]);
   parser___parser_prod___AParExprs___empty_init(fra.me.REG[0], init_table);
@@ -83317,7 +86416,7 @@ val_t NEW_AParExprs_parser___parser_prod___AParExprs___init_aparexprs(val_t p0,
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7544;
+  fra.me.line = 8026;
   fra.me.meth = LOCATE_NEW_AParExprs_parser___parser_prod___AParExprs___init_aparexprs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -83329,7 +86428,7 @@ val_t NEW_AParExprs_parser___parser_prod___AParExprs___init_aparexprs(val_t p0,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7544 */
+  /* parser/parser_prod.nit:8026 */
   fra.me.REG[3] = NEW_parser___parser_nodes___AParExprs();
   INIT_ATTRIBUTES__parser___parser_nodes___AParExprs(fra.me.REG[3]);
   parser___parser_prod___AParExprs___init_aparexprs(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -83358,15 +86457,15 @@ val_t NEW_AParExprs_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ABraExprs[82] = {
-  {(bigint) 3999 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ABraExprs[83] = {
+  {(bigint) 4543 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ABraExprs" /* 2: Class Name */},
   {(bigint) 3 /* 3: ABraExprs < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ABraExprs < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ABraExprs < Prod: superclass typecheck marker */},
-  {(bigint) 3307 /* 6: ABraExprs < AExprs: superclass typecheck marker */},
-  {(bigint) 3999 /* 7: ABraExprs < ABraExprs: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ABraExprs < Prod: superclass typecheck marker */},
+  {(bigint) 3807 /* 6: ABraExprs < AExprs: superclass typecheck marker */},
+  {(bigint) 4543 /* 7: ABraExprs < ABraExprs: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -83433,12 +86532,13 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraExprs[82] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ABraExprs < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___syntax_base___AExprs___to_a},
-  {(bigint) 0 /* 75: ABraExprs < AExprs: superclass init_table position */},
+  {(bigint) 0 /* 76: ABraExprs < AExprs: superclass init_table position */},
   {(bigint) parser___parser_nodes___AExprs___n_exprs},
   {(bigint) parser___parser_prod___ABraExprs___empty_init},
   {(bigint) parser___parser_prod___ABraExprs___init_abraexprs},
-  {(bigint) 4 /* 79: ABraExprs < ABraExprs: superclass init_table position */},
+  {(bigint) 4 /* 80: ABraExprs < ABraExprs: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABraExprs___n_obra},
   {(bigint) parser___parser_nodes___ABraExprs___n_cbra},
 };
@@ -83448,9 +86548,10 @@ const classtable_elt_t VFT_parser___parser_nodes___ABraExprs[82] = {
 /* 3: Attribute ABraExprs::_location */
 /* 4: Attribute ABraExprs::_first_location */
 /* 5: Attribute ABraExprs::_last_location */
-/* 6: Attribute ABraExprs::_n_exprs */
-/* 7: Attribute ABraExprs::_n_obra */
-/* 8: Attribute ABraExprs::_n_cbra */
+/* 6: Attribute ABraExprs::_n_annotations */
+/* 7: Attribute ABraExprs::_n_exprs */
+/* 8: Attribute ABraExprs::_n_obra */
+/* 9: Attribute ABraExprs::_n_cbra */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ABraExprs[] = "init var of ABraExprs";
 void INIT_ATTRIBUTES__parser___parser_nodes___ABraExprs(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -83465,7 +86566,10 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ABraExprs(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1136 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1139 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -83473,7 +86577,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___ABraExprs(val_t p0){
 val_t NEW_parser___parser_nodes___ABraExprs(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
+  obj = alloc(sizeof(val_t) * 10);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ABraExprs;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -83493,15 +86597,15 @@ void CHECKNEW_parser___parser_nodes___ABraExprs(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -83517,13 +86621,13 @@ val_t NEW_ABraExprs_parser___parser_prod___ABraExprs___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7608;
+  fra.me.line = 8090;
   fra.me.meth = LOCATE_NEW_ABraExprs_parser___parser_prod___ABraExprs___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7608 */
+  /* parser/parser_prod.nit:8090 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ABraExprs();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraExprs(fra.me.REG[0]);
   parser___parser_prod___ABraExprs___empty_init(fra.me.REG[0], init_table);
@@ -83538,7 +86642,7 @@ val_t NEW_ABraExprs_parser___parser_prod___ABraExprs___init_abraexprs(val_t p0,
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7610;
+  fra.me.line = 8092;
   fra.me.meth = LOCATE_NEW_ABraExprs_parser___parser_prod___ABraExprs___init_abraexprs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -83550,7 +86654,7 @@ val_t NEW_ABraExprs_parser___parser_prod___ABraExprs___init_abraexprs(val_t p0,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7610 */
+  /* parser/parser_prod.nit:8092 */
   fra.me.REG[3] = NEW_parser___parser_nodes___ABraExprs();
   INIT_ATTRIBUTES__parser___parser_nodes___ABraExprs(fra.me.REG[3]);
   parser___parser_prod___ABraExprs___init_abraexprs(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -83579,15 +86683,15 @@ val_t NEW_ABraExprs_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___APlusAssignOp[80] = {
-  {(bigint) 3851 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___APlusAssignOp[81] = {
+  {(bigint) 4367 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "APlusAssignOp" /* 2: Class Name */},
   {(bigint) 3 /* 3: APlusAssignOp < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: APlusAssignOp < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: APlusAssignOp < Prod: superclass typecheck marker */},
-  {(bigint) 3335 /* 6: APlusAssignOp < AAssignOp: superclass typecheck marker */},
-  {(bigint) 3851 /* 7: APlusAssignOp < APlusAssignOp: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: APlusAssignOp < Prod: superclass typecheck marker */},
+  {(bigint) 3843 /* 6: APlusAssignOp < AAssignOp: superclass typecheck marker */},
+  {(bigint) 4367 /* 7: APlusAssignOp < APlusAssignOp: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -83654,11 +86758,12 @@ const classtable_elt_t VFT_parser___parser_nodes___APlusAssignOp[80] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: APlusAssignOp < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___APlusAssignOp___method_name},
-  {(bigint) 0 /* 75: APlusAssignOp < AAssignOp: superclass init_table position */},
+  {(bigint) 0 /* 76: APlusAssignOp < AAssignOp: superclass init_table position */},
   {(bigint) parser___parser_prod___APlusAssignOp___empty_init},
   {(bigint) parser___parser_prod___APlusAssignOp___init_aplusassignop},
-  {(bigint) 4 /* 78: APlusAssignOp < APlusAssignOp: superclass init_table position */},
+  {(bigint) 4 /* 79: APlusAssignOp < APlusAssignOp: superclass init_table position */},
   {(bigint) parser___parser_nodes___APlusAssignOp___n_pluseq},
 };
 /* 0: Pointer to the classtable */
@@ -83667,24 +86772,31 @@ const classtable_elt_t VFT_parser___parser_nodes___APlusAssignOp[80] = {
 /* 3: Attribute APlusAssignOp::_location */
 /* 4: Attribute APlusAssignOp::_first_location */
 /* 5: Attribute APlusAssignOp::_last_location */
-/* 6: Attribute APlusAssignOp::_n_pluseq */
+/* 6: Attribute APlusAssignOp::_n_annotations */
+/* 7: Attribute APlusAssignOp::_n_pluseq */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___APlusAssignOp[] = "init var of APlusAssignOp";
 void INIT_ATTRIBUTES__parser___parser_nodes___APlusAssignOp(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___APlusAssignOp;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___APlusAssignOp(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
+  obj = alloc(sizeof(val_t) * 8);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___APlusAssignOp;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -83718,13 +86830,13 @@ val_t NEW_APlusAssignOp_parser___parser_prod___APlusAssignOp___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7674;
+  fra.me.line = 8156;
   fra.me.meth = LOCATE_NEW_APlusAssignOp_parser___parser_prod___APlusAssignOp___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7674 */
+  /* parser/parser_prod.nit:8156 */
   fra.me.REG[0] = NEW_parser___parser_nodes___APlusAssignOp();
   INIT_ATTRIBUTES__parser___parser_nodes___APlusAssignOp(fra.me.REG[0]);
   parser___parser_prod___APlusAssignOp___empty_init(fra.me.REG[0], init_table);
@@ -83739,7 +86851,7 @@ val_t NEW_APlusAssignOp_parser___parser_prod___APlusAssignOp___init_aplusassigno
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7676;
+  fra.me.line = 8158;
   fra.me.meth = LOCATE_NEW_APlusAssignOp_parser___parser_prod___APlusAssignOp___init_aplusassignop;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -83747,7 +86859,7 @@ val_t NEW_APlusAssignOp_parser___parser_prod___APlusAssignOp___init_aplusassigno
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:7676 */
+  /* parser/parser_prod.nit:8158 */
   fra.me.REG[1] = NEW_parser___parser_nodes___APlusAssignOp();
   INIT_ATTRIBUTES__parser___parser_nodes___APlusAssignOp(fra.me.REG[1]);
   parser___parser_prod___APlusAssignOp___init_aplusassignop(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -83776,15 +86888,15 @@ val_t NEW_APlusAssignOp_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AMinusAssignOp[80] = {
-  {(bigint) 3879 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AMinusAssignOp[81] = {
+  {(bigint) 4395 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AMinusAssignOp" /* 2: Class Name */},
   {(bigint) 3 /* 3: AMinusAssignOp < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AMinusAssignOp < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AMinusAssignOp < Prod: superclass typecheck marker */},
-  {(bigint) 3335 /* 6: AMinusAssignOp < AAssignOp: superclass typecheck marker */},
-  {(bigint) 3879 /* 7: AMinusAssignOp < AMinusAssignOp: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AMinusAssignOp < Prod: superclass typecheck marker */},
+  {(bigint) 3843 /* 6: AMinusAssignOp < AAssignOp: superclass typecheck marker */},
+  {(bigint) 4395 /* 7: AMinusAssignOp < AMinusAssignOp: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -83851,11 +86963,12 @@ const classtable_elt_t VFT_parser___parser_nodes___AMinusAssignOp[80] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AMinusAssignOp < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___AMinusAssignOp___method_name},
-  {(bigint) 0 /* 75: AMinusAssignOp < AAssignOp: superclass init_table position */},
+  {(bigint) 0 /* 76: AMinusAssignOp < AAssignOp: superclass init_table position */},
   {(bigint) parser___parser_prod___AMinusAssignOp___empty_init},
   {(bigint) parser___parser_prod___AMinusAssignOp___init_aminusassignop},
-  {(bigint) 4 /* 78: AMinusAssignOp < AMinusAssignOp: superclass init_table position */},
+  {(bigint) 4 /* 79: AMinusAssignOp < AMinusAssignOp: superclass init_table position */},
   {(bigint) parser___parser_nodes___AMinusAssignOp___n_minuseq},
 };
 /* 0: Pointer to the classtable */
@@ -83864,24 +86977,31 @@ const classtable_elt_t VFT_parser___parser_nodes___AMinusAssignOp[80] = {
 /* 3: Attribute AMinusAssignOp::_location */
 /* 4: Attribute AMinusAssignOp::_first_location */
 /* 5: Attribute AMinusAssignOp::_last_location */
-/* 6: Attribute AMinusAssignOp::_n_minuseq */
+/* 6: Attribute AMinusAssignOp::_n_annotations */
+/* 7: Attribute AMinusAssignOp::_n_minuseq */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AMinusAssignOp[] = "init var of AMinusAssignOp";
 void INIT_ATTRIBUTES__parser___parser_nodes___AMinusAssignOp(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AMinusAssignOp;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AMinusAssignOp(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
+  obj = alloc(sizeof(val_t) * 8);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AMinusAssignOp;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -83915,13 +87035,13 @@ val_t NEW_AMinusAssignOp_parser___parser_prod___AMinusAssignOp___empty_init(void
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7705;
+  fra.me.line = 8187;
   fra.me.meth = LOCATE_NEW_AMinusAssignOp_parser___parser_prod___AMinusAssignOp___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7705 */
+  /* parser/parser_prod.nit:8187 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AMinusAssignOp();
   INIT_ATTRIBUTES__parser___parser_nodes___AMinusAssignOp(fra.me.REG[0]);
   parser___parser_prod___AMinusAssignOp___empty_init(fra.me.REG[0], init_table);
@@ -83936,7 +87056,7 @@ val_t NEW_AMinusAssignOp_parser___parser_prod___AMinusAssignOp___init_aminusassi
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7707;
+  fra.me.line = 8189;
   fra.me.meth = LOCATE_NEW_AMinusAssignOp_parser___parser_prod___AMinusAssignOp___init_aminusassignop;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -83944,7 +87064,7 @@ val_t NEW_AMinusAssignOp_parser___parser_prod___AMinusAssignOp___init_aminusassi
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:7707 */
+  /* parser/parser_prod.nit:8189 */
   fra.me.REG[1] = NEW_parser___parser_nodes___AMinusAssignOp();
   INIT_ATTRIBUTES__parser___parser_nodes___AMinusAssignOp(fra.me.REG[1]);
   parser___parser_prod___AMinusAssignOp___init_aminusassignop(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -83973,15 +87093,15 @@ val_t NEW_AMinusAssignOp_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AClosureDef[91] = {
-  {(bigint) 3975 /* 0: Identity */},
-  {(bigint) 17 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AClosureDef[92] = {
+  {(bigint) 4519 /* 0: Identity */},
+  {(bigint) 18 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AClosureDef" /* 2: Class Name */},
   {(bigint) 3 /* 3: AClosureDef < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AClosureDef < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AClosureDef < Prod: superclass typecheck marker */},
-  {(bigint) 3275 /* 6: AClosureDef < ALabelable: superclass typecheck marker */},
-  {(bigint) 3975 /* 7: AClosureDef < AClosureDef: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AClosureDef < Prod: superclass typecheck marker */},
+  {(bigint) 3775 /* 6: AClosureDef < ALabelable: superclass typecheck marker */},
+  {(bigint) 4519 /* 7: AClosureDef < AClosureDef: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -84048,7 +87168,8 @@ const classtable_elt_t VFT_parser___parser_nodes___AClosureDef[91] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: AClosureDef < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
-  {(bigint) 0 /* 74: AClosureDef < ALabelable: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 0 /* 75: AClosureDef < ALabelable: superclass init_table position */},
   {(bigint) parser___parser_nodes___ALabelable___n_label},
   {(bigint) syntax___icode_generation___AClosureDef___generate_iclosuredef},
   {(bigint) syntax___typing___AClosureDef___escapable},
@@ -84059,7 +87180,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AClosureDef[91] = {
   {(bigint) syntax___syntax_base___AClosureDef___variables__eq},
   {(bigint) parser___parser_prod___AClosureDef___empty_init},
   {(bigint) parser___parser_prod___AClosureDef___init_aclosuredef},
-  {(bigint) 4 /* 85: AClosureDef < AClosureDef: superclass init_table position */},
+  {(bigint) 4 /* 86: AClosureDef < AClosureDef: superclass init_table position */},
   {(bigint) parser___parser_nodes___AClosureDef___n_bang},
   {(bigint) parser___parser_nodes___AClosureDef___n_id},
   {(bigint) parser___parser_nodes___AClosureDef___n_ids},
@@ -84072,17 +87193,18 @@ const classtable_elt_t VFT_parser___parser_nodes___AClosureDef[91] = {
 /* 3: Attribute AClosureDef::_location */
 /* 4: Attribute AClosureDef::_first_location */
 /* 5: Attribute AClosureDef::_last_location */
-/* 6: Attribute AClosureDef::_n_label */
-/* 7: Attribute AClosureDef::_iclosure_def */
-/* 8: Attribute AClosureDef::_closure */
-/* 9: Attribute AClosureDef::_escapable */
-/* 10: Attribute AClosureDef::_accept_typing2 */
-/* 11: Attribute AClosureDef::_variables */
-/* 12: Attribute AClosureDef::_n_bang */
-/* 13: Attribute AClosureDef::_n_id */
-/* 14: Attribute AClosureDef::_n_ids */
-/* 15: Attribute AClosureDef::_n_kwdo */
-/* 16: Attribute AClosureDef::_n_expr */
+/* 6: Attribute AClosureDef::_n_annotations */
+/* 7: Attribute AClosureDef::_n_label */
+/* 8: Attribute AClosureDef::_iclosure_def */
+/* 9: Attribute AClosureDef::_closure */
+/* 10: Attribute AClosureDef::_escapable */
+/* 11: Attribute AClosureDef::_accept_typing2 */
+/* 12: Attribute AClosureDef::_variables */
+/* 13: Attribute AClosureDef::_n_bang */
+/* 14: Attribute AClosureDef::_n_id */
+/* 15: Attribute AClosureDef::_n_ids */
+/* 16: Attribute AClosureDef::_n_kwdo */
+/* 17: Attribute AClosureDef::_n_expr */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AClosureDef[] = "init var of AClosureDef";
 void INIT_ATTRIBUTES__parser___parser_nodes___AClosureDef(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -84098,27 +87220,30 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AClosureDef(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1994 */
-  REGB0 = TAG_Bool(0);
-  ATTR_syntax___typing___AClosureDef____accept_typing2(fra.me.REG[0]) = REGB0;
-  /* parser/parser_nodes.nit:1171 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:773 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1174 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:1172 */
+  /* parser/parser_nodes.nit:1175 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:1173 */
+  /* parser/parser_nodes.nit:1176 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:767 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/typing.nit:2004 */
+  REGB0 = TAG_Bool(0);
+  ATTR_syntax___typing___AClosureDef____accept_typing2(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AClosureDef(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 17);
+  obj = alloc(sizeof(val_t) * 18);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AClosureDef;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -84138,11 +87263,6 @@ void CHECKNEW_parser___parser_nodes___AClosureDef(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___typing___AClosureDef____accept_typing2(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_accept_typing2", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -84158,6 +87278,11 @@ void CHECKNEW_parser___parser_nodes___AClosureDef(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_syntax___typing___AClosureDef____accept_typing2(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_accept_typing2", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_AClosureDef_parser___parser_prod___AClosureDef___empty_init[] = "new AClosureDef parser_prod::AClosureDef::empty_init";
@@ -84167,13 +87292,13 @@ val_t NEW_AClosureDef_parser___parser_prod___AClosureDef___empty_init(void){
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7736;
+  fra.me.line = 8218;
   fra.me.meth = LOCATE_NEW_AClosureDef_parser___parser_prod___AClosureDef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7736 */
+  /* parser/parser_prod.nit:8218 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AClosureDef();
   INIT_ATTRIBUTES__parser___parser_nodes___AClosureDef(fra.me.REG[0]);
   parser___parser_prod___AClosureDef___empty_init(fra.me.REG[0], init_table);
@@ -84188,7 +87313,7 @@ val_t NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(val_
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7738;
+  fra.me.line = 8220;
   fra.me.meth = LOCATE_NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -84206,7 +87331,7 @@ val_t NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(val_
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:7738 */
+  /* parser/parser_prod.nit:8220 */
   fra.me.REG[6] = NEW_parser___parser_nodes___AClosureDef();
   INIT_ATTRIBUTES__parser___parser_nodes___AClosureDef(fra.me.REG[6]);
   parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], init_table);
@@ -84235,15 +87360,15 @@ val_t NEW_AClosureDef_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ASimpleClosureId[80] = {
-  {(bigint) 3803 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ASimpleClosureId[81] = {
+  {(bigint) 4319 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ASimpleClosureId" /* 2: Class Name */},
   {(bigint) 3 /* 3: ASimpleClosureId < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ASimpleClosureId < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ASimpleClosureId < Prod: superclass typecheck marker */},
-  {(bigint) 3319 /* 6: ASimpleClosureId < AClosureId: superclass typecheck marker */},
-  {(bigint) 3803 /* 7: ASimpleClosureId < ASimpleClosureId: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ASimpleClosureId < Prod: superclass typecheck marker */},
+  {(bigint) 3819 /* 6: ASimpleClosureId < AClosureId: superclass typecheck marker */},
+  {(bigint) 4319 /* 7: ASimpleClosureId < ASimpleClosureId: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -84310,11 +87435,12 @@ const classtable_elt_t VFT_parser___parser_nodes___ASimpleClosureId[80] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ASimpleClosureId < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ASimpleClosureId___to_symbol},
-  {(bigint) 0 /* 75: ASimpleClosureId < AClosureId: superclass init_table position */},
+  {(bigint) 0 /* 76: ASimpleClosureId < AClosureId: superclass init_table position */},
   {(bigint) parser___parser_prod___ASimpleClosureId___empty_init},
   {(bigint) parser___parser_prod___ASimpleClosureId___init_asimpleclosureid},
-  {(bigint) 4 /* 78: ASimpleClosureId < ASimpleClosureId: superclass init_table position */},
+  {(bigint) 4 /* 79: ASimpleClosureId < ASimpleClosureId: superclass init_table position */},
   {(bigint) parser___parser_nodes___ASimpleClosureId___n_id},
 };
 /* 0: Pointer to the classtable */
@@ -84323,24 +87449,31 @@ const classtable_elt_t VFT_parser___parser_nodes___ASimpleClosureId[80] = {
 /* 3: Attribute ASimpleClosureId::_location */
 /* 4: Attribute ASimpleClosureId::_first_location */
 /* 5: Attribute ASimpleClosureId::_last_location */
-/* 6: Attribute ASimpleClosureId::_n_id */
+/* 6: Attribute ASimpleClosureId::_n_annotations */
+/* 7: Attribute ASimpleClosureId::_n_id */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ASimpleClosureId[] = "init var of ASimpleClosureId";
 void INIT_ATTRIBUTES__parser___parser_nodes___ASimpleClosureId(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ASimpleClosureId;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ASimpleClosureId(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
+  obj = alloc(sizeof(val_t) * 8);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ASimpleClosureId;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -84374,13 +87507,13 @@ val_t NEW_ASimpleClosureId_parser___parser_prod___ASimpleClosureId___empty_init(
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7856;
+  fra.me.line = 8338;
   fra.me.meth = LOCATE_NEW_ASimpleClosureId_parser___parser_prod___ASimpleClosureId___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7856 */
+  /* parser/parser_prod.nit:8338 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ASimpleClosureId();
   INIT_ATTRIBUTES__parser___parser_nodes___ASimpleClosureId(fra.me.REG[0]);
   parser___parser_prod___ASimpleClosureId___empty_init(fra.me.REG[0], init_table);
@@ -84395,7 +87528,7 @@ val_t NEW_ASimpleClosureId_parser___parser_prod___ASimpleClosureId___init_asimpl
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7858;
+  fra.me.line = 8340;
   fra.me.meth = LOCATE_NEW_ASimpleClosureId_parser___parser_prod___ASimpleClosureId___init_asimpleclosureid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -84403,7 +87536,7 @@ val_t NEW_ASimpleClosureId_parser___parser_prod___ASimpleClosureId___init_asimpl
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:7858 */
+  /* parser/parser_prod.nit:8340 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ASimpleClosureId();
   INIT_ATTRIBUTES__parser___parser_nodes___ASimpleClosureId(fra.me.REG[1]);
   parser___parser_prod___ASimpleClosureId___init_asimpleclosureid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -84432,15 +87565,15 @@ val_t NEW_ASimpleClosureId_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ABreakClosureId[80] = {
-  {(bigint) 3987 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___ABreakClosureId[81] = {
+  {(bigint) 4531 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ABreakClosureId" /* 2: Class Name */},
   {(bigint) 3 /* 3: ABreakClosureId < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: ABreakClosureId < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ABreakClosureId < Prod: superclass typecheck marker */},
-  {(bigint) 3319 /* 6: ABreakClosureId < AClosureId: superclass typecheck marker */},
-  {(bigint) 3987 /* 7: ABreakClosureId < ABreakClosureId: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ABreakClosureId < Prod: superclass typecheck marker */},
+  {(bigint) 3819 /* 6: ABreakClosureId < AClosureId: superclass typecheck marker */},
+  {(bigint) 4531 /* 7: ABreakClosureId < ABreakClosureId: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -84507,11 +87640,12 @@ const classtable_elt_t VFT_parser___parser_nodes___ABreakClosureId[80] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 1 /* 72: ABreakClosureId < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___typing___ABreakClosureId___to_symbol},
-  {(bigint) 0 /* 75: ABreakClosureId < AClosureId: superclass init_table position */},
+  {(bigint) 0 /* 76: ABreakClosureId < AClosureId: superclass init_table position */},
   {(bigint) parser___parser_prod___ABreakClosureId___empty_init},
   {(bigint) parser___parser_prod___ABreakClosureId___init_abreakclosureid},
-  {(bigint) 4 /* 78: ABreakClosureId < ABreakClosureId: superclass init_table position */},
+  {(bigint) 4 /* 79: ABreakClosureId < ABreakClosureId: superclass init_table position */},
   {(bigint) parser___parser_nodes___ABreakClosureId___n_kwbreak},
 };
 /* 0: Pointer to the classtable */
@@ -84520,24 +87654,31 @@ const classtable_elt_t VFT_parser___parser_nodes___ABreakClosureId[80] = {
 /* 3: Attribute ABreakClosureId::_location */
 /* 4: Attribute ABreakClosureId::_first_location */
 /* 5: Attribute ABreakClosureId::_last_location */
-/* 6: Attribute ABreakClosureId::_n_kwbreak */
+/* 6: Attribute ABreakClosureId::_n_annotations */
+/* 7: Attribute ABreakClosureId::_n_kwbreak */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ABreakClosureId[] = "init var of ABreakClosureId";
 void INIT_ATTRIBUTES__parser___parser_nodes___ABreakClosureId(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ABreakClosureId;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___ABreakClosureId(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
+  obj = alloc(sizeof(val_t) * 8);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ABreakClosureId;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -84571,13 +87712,13 @@ val_t NEW_ABreakClosureId_parser___parser_prod___ABreakClosureId___empty_init(vo
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7887;
+  fra.me.line = 8369;
   fra.me.meth = LOCATE_NEW_ABreakClosureId_parser___parser_prod___ABreakClosureId___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7887 */
+  /* parser/parser_prod.nit:8369 */
   fra.me.REG[0] = NEW_parser___parser_nodes___ABreakClosureId();
   INIT_ATTRIBUTES__parser___parser_nodes___ABreakClosureId(fra.me.REG[0]);
   parser___parser_prod___ABreakClosureId___empty_init(fra.me.REG[0], init_table);
@@ -84592,7 +87733,7 @@ val_t NEW_ABreakClosureId_parser___parser_prod___ABreakClosureId___init_abreakcl
   int init_table[5] = {0, 0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7889;
+  fra.me.line = 8371;
   fra.me.meth = LOCATE_NEW_ABreakClosureId_parser___parser_prod___ABreakClosureId___init_abreakclosureid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -84600,7 +87741,7 @@ val_t NEW_ABreakClosureId_parser___parser_prod___ABreakClosureId___init_abreakcl
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:7889 */
+  /* parser/parser_prod.nit:8371 */
   fra.me.REG[1] = NEW_parser___parser_nodes___ABreakClosureId();
   INIT_ATTRIBUTES__parser___parser_nodes___ABreakClosureId(fra.me.REG[1]);
   parser___parser_prod___ABreakClosureId___init_abreakclosureid(fra.me.REG[1], fra.me.REG[0], init_table);
@@ -84629,14 +87770,14 @@ val_t NEW_ABreakClosureId_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AModuleName[80] = {
-  {(bigint) 3263 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AModuleName[81] = {
+  {(bigint) 3763 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AModuleName" /* 2: Class Name */},
   {(bigint) 3 /* 3: AModuleName < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AModuleName < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AModuleName < Prod: superclass typecheck marker */},
-  {(bigint) 3263 /* 6: AModuleName < AModuleName: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AModuleName < Prod: superclass typecheck marker */},
+  {(bigint) 3763 /* 6: AModuleName < AModuleName: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -84704,9 +87845,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AModuleName[80] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 0 /* 72: AModuleName < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) parser___parser_prod___AModuleName___empty_init},
   {(bigint) parser___parser_prod___AModuleName___init_amodulename},
-  {(bigint) 3 /* 76: AModuleName < AModuleName: superclass init_table position */},
+  {(bigint) 3 /* 77: AModuleName < AModuleName: superclass init_table position */},
   {(bigint) parser___parser_nodes___AModuleName___n_quad},
   {(bigint) parser___parser_nodes___AModuleName___n_path},
   {(bigint) parser___parser_nodes___AModuleName___n_id},
@@ -84717,9 +87859,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AModuleName[80] = {
 /* 3: Attribute AModuleName::_location */
 /* 4: Attribute AModuleName::_first_location */
 /* 5: Attribute AModuleName::_last_location */
-/* 6: Attribute AModuleName::_n_quad */
-/* 7: Attribute AModuleName::_n_path */
-/* 8: Attribute AModuleName::_n_id */
+/* 6: Attribute AModuleName::_n_annotations */
+/* 7: Attribute AModuleName::_n_quad */
+/* 8: Attribute AModuleName::_n_path */
+/* 9: Attribute AModuleName::_n_id */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AModuleName[] = "init var of AModuleName";
 void INIT_ATTRIBUTES__parser___parser_nodes___AModuleName(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -84734,10 +87877,13 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AModuleName(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1189 */
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1192 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:1190 */
+  /* parser/parser_nodes.nit:1193 */
   fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
   ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
@@ -84745,7 +87891,7 @@ void INIT_ATTRIBUTES__parser___parser_nodes___AModuleName(val_t p0){
 val_t NEW_parser___parser_nodes___AModuleName(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
+  obj = alloc(sizeof(val_t) * 10);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AModuleName;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -84784,13 +87930,13 @@ val_t NEW_AModuleName_parser___parser_prod___AModuleName___empty_init(void){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7918;
+  fra.me.line = 8400;
   fra.me.meth = LOCATE_NEW_AModuleName_parser___parser_prod___AModuleName___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:7918 */
+  /* parser/parser_prod.nit:8400 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AModuleName();
   INIT_ATTRIBUTES__parser___parser_nodes___AModuleName(fra.me.REG[0]);
   parser___parser_prod___AModuleName___empty_init(fra.me.REG[0], init_table);
@@ -84805,7 +87951,7 @@ val_t NEW_AModuleName_parser___parser_prod___AModuleName___init_amodulename(val_
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 7920;
+  fra.me.line = 8402;
   fra.me.meth = LOCATE_NEW_AModuleName_parser___parser_prod___AModuleName___init_amodulename;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -84817,7 +87963,7 @@ val_t NEW_AModuleName_parser___parser_prod___AModuleName___init_amodulename(val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7920 */
+  /* parser/parser_prod.nit:8402 */
   fra.me.REG[3] = NEW_parser___parser_nodes___AModuleName();
   INIT_ATTRIBUTES__parser___parser_nodes___AModuleName(fra.me.REG[3]);
   parser___parser_prod___AModuleName___init_amodulename(fra.me.REG[3], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
@@ -84846,14 +87992,14 @@ val_t NEW_AModuleName_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AInLanguage[79] = {
-  {(bigint) 3283 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AInLanguage[80] = {
+  {(bigint) 3783 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AInLanguage" /* 2: Class Name */},
   {(bigint) 3 /* 3: AInLanguage < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AInLanguage < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AInLanguage < Prod: superclass typecheck marker */},
-  {(bigint) 3283 /* 6: AInLanguage < AInLanguage: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AInLanguage < Prod: superclass typecheck marker */},
+  {(bigint) 3783 /* 6: AInLanguage < AInLanguage: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -84921,9 +88067,10 @@ const classtable_elt_t VFT_parser___parser_nodes___AInLanguage[79] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 0 /* 72: AInLanguage < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) parser___parser_prod___AInLanguage___empty_init},
   {(bigint) parser___parser_prod___AInLanguage___init_ainlanguage},
-  {(bigint) 3 /* 76: AInLanguage < AInLanguage: superclass init_table position */},
+  {(bigint) 3 /* 77: AInLanguage < AInLanguage: superclass init_table position */},
   {(bigint) parser___parser_nodes___AInLanguage___n_kwin},
   {(bigint) parser___parser_nodes___AInLanguage___n_string},
 };
@@ -84933,25 +88080,32 @@ const classtable_elt_t VFT_parser___parser_nodes___AInLanguage[79] = {
 /* 3: Attribute AInLanguage::_location */
 /* 4: Attribute AInLanguage::_first_location */
 /* 5: Attribute AInLanguage::_last_location */
-/* 6: Attribute AInLanguage::_n_kwin */
-/* 7: Attribute AInLanguage::_n_string */
+/* 6: Attribute AInLanguage::_n_annotations */
+/* 7: Attribute AInLanguage::_n_kwin */
+/* 8: Attribute AInLanguage::_n_string */
 static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AInLanguage[] = "init var of AInLanguage";
 void INIT_ATTRIBUTES__parser___parser_nodes___AInLanguage(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
   fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AInLanguage;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_parser___parser_nodes___AInLanguage(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
+  obj = alloc(sizeof(val_t) * 9);
   obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AInLanguage;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
@@ -84990,13 +88144,13 @@ val_t NEW_AInLanguage_parser___parser_prod___AInLanguage___empty_init(void){
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8403;
+  fra.me.line = 8885;
   fra.me.meth = LOCATE_NEW_AInLanguage_parser___parser_prod___AInLanguage___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8403 */
+  /* parser/parser_prod.nit:8885 */
   fra.me.REG[0] = NEW_parser___parser_nodes___AInLanguage();
   INIT_ATTRIBUTES__parser___parser_nodes___AInLanguage(fra.me.REG[0]);
   parser___parser_prod___AInLanguage___empty_init(fra.me.REG[0], init_table);
@@ -85011,7 +88165,7 @@ val_t NEW_AInLanguage_parser___parser_prod___AInLanguage___init_ainlanguage(val_
   int init_table[4] = {0, 0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 8405;
+  fra.me.line = 8887;
   fra.me.meth = LOCATE_NEW_AInLanguage_parser___parser_prod___AInLanguage___init_ainlanguage;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -85021,7 +88175,7 @@ val_t NEW_AInLanguage_parser___parser_prod___AInLanguage___init_ainlanguage(val_
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8405 */
+  /* parser/parser_prod.nit:8887 */
   fra.me.REG[2] = NEW_parser___parser_nodes___AInLanguage();
   INIT_ATTRIBUTES__parser___parser_nodes___AInLanguage(fra.me.REG[2]);
   parser___parser_prod___AInLanguage___init_ainlanguage(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -85050,14 +88204,14 @@ val_t NEW_AInLanguage_parser___parser_nodes___ANode___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AExternCodeBlock[80] = {
-  {(bigint) 3295 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+const classtable_elt_t VFT_parser___parser_nodes___AExternCodeBlock[81] = {
+  {(bigint) 3795 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AExternCodeBlock" /* 2: Class Name */},
   {(bigint) 3 /* 3: AExternCodeBlock < Object: superclass typecheck marker */},
   {(bigint) 315 /* 4: AExternCodeBlock < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AExternCodeBlock < Prod: superclass typecheck marker */},
-  {(bigint) 3295 /* 6: AExternCodeBlock < AExternCodeBlock: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AExternCodeBlock < Prod: superclass typecheck marker */},
+  {(bigint) 3795 /* 6: AExternCodeBlock < AExternCodeBlock: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -85125,145 +88279,18386 @@ const classtable_elt_t VFT_parser___parser_nodes___AExternCodeBlock[80] = {
   {(bigint) parser___parser_prod___ANode___replace_with},
   {(bigint) 0 /* 72: AExternCodeBlock < Prod: superclass init_table position */},
   {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
   {(bigint) syntax___extern_inline___AExternCodeBlock___to_extern_code},
   {(bigint) parser___parser_prod___AExternCodeBlock___empty_init},
   {(bigint) parser___parser_prod___AExternCodeBlock___init_aexterncodeblock},
-  {(bigint) 3 /* 77: AExternCodeBlock < AExternCodeBlock: superclass init_table position */},
+  {(bigint) 3 /* 78: AExternCodeBlock < AExternCodeBlock: superclass init_table position */},
   {(bigint) parser___parser_nodes___AExternCodeBlock___n_in_language},
   {(bigint) parser___parser_nodes___AExternCodeBlock___n_extern_code_segment},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute AExternCodeBlock::_parent */
-/* 3: Attribute AExternCodeBlock::_location */
-/* 4: Attribute AExternCodeBlock::_first_location */
-/* 5: Attribute AExternCodeBlock::_last_location */
-/* 6: Attribute AExternCodeBlock::_n_in_language */
-/* 7: Attribute AExternCodeBlock::_n_extern_code_segment */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AExternCodeBlock[] = "init var of AExternCodeBlock";
-void INIT_ATTRIBUTES__parser___parser_nodes___AExternCodeBlock(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+/* 2: Attribute AExternCodeBlock::_parent */
+/* 3: Attribute AExternCodeBlock::_location */
+/* 4: Attribute AExternCodeBlock::_first_location */
+/* 5: Attribute AExternCodeBlock::_last_location */
+/* 6: Attribute AExternCodeBlock::_n_annotations */
+/* 7: Attribute AExternCodeBlock::_n_in_language */
+/* 8: Attribute AExternCodeBlock::_n_extern_code_segment */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AExternCodeBlock[] = "init var of AExternCodeBlock";
+void INIT_ATTRIBUTES__parser___parser_nodes___AExternCodeBlock(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AExternCodeBlock;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1203 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___AExternCodeBlock(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 9);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AExternCodeBlock;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___AExternCodeBlock[] = "check new AExternCodeBlock";
+void CHECKNEW_parser___parser_nodes___AExternCodeBlock(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___AExternCodeBlock;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_extern_code_segment", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_AExternCodeBlock_parser___parser_prod___AExternCodeBlock___empty_init[] = "new AExternCodeBlock parser_prod::AExternCodeBlock::empty_init";
+val_t NEW_AExternCodeBlock_parser___parser_prod___AExternCodeBlock___empty_init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 8930;
+  fra.me.meth = LOCATE_NEW_AExternCodeBlock_parser___parser_prod___AExternCodeBlock___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_prod.nit:8930 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AExternCodeBlock();
+  INIT_ATTRIBUTES__parser___parser_nodes___AExternCodeBlock(fra.me.REG[0]);
+  parser___parser_prod___AExternCodeBlock___empty_init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AExternCodeBlock(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_NEW_AExternCodeBlock_parser___parser_prod___AExternCodeBlock___init_aexterncodeblock[] = "new AExternCodeBlock parser_prod::AExternCodeBlock::init_aexterncodeblock";
+val_t NEW_AExternCodeBlock_parser___parser_prod___AExternCodeBlock___init_aexterncodeblock(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 8932;
+  fra.me.meth = LOCATE_NEW_AExternCodeBlock_parser___parser_prod___AExternCodeBlock___init_aexterncodeblock;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:8932 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___AExternCodeBlock();
+  INIT_ATTRIBUTES__parser___parser_nodes___AExternCodeBlock(fra.me.REG[2]);
+  parser___parser_prod___AExternCodeBlock___init_aexterncodeblock(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___AExternCodeBlock(fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[2];
+}
+static const char LOCATE_NEW_AExternCodeBlock_parser___parser_nodes___ANode___init[] = "new AExternCodeBlock parser_nodes::ANode::init";
+val_t NEW_AExternCodeBlock_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_AExternCodeBlock_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AExternCodeBlock();
+  INIT_ATTRIBUTES__parser___parser_nodes___AExternCodeBlock(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AExternCodeBlock(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___parser_nodes___AQualified[81] = {
+  {(bigint) 3747 /* 0: Identity */},
+  {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "AQualified" /* 2: Class Name */},
+  {(bigint) 3 /* 3: AQualified < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: AQualified < ANode: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AQualified < Prod: superclass typecheck marker */},
+  {(bigint) 3747 /* 6: AQualified < AQualified: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 2 /* 19: AQualified < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___AQualified___replace_child},
+  {(bigint) parser___parser_prod___Prod___replace_with},
+  {(bigint) parser___parser_prod___AQualified___visit_all},
+  {(bigint) 1 /* 63: AQualified < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) 0 /* 72: AQualified < Prod: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) parser___parser_prod___AQualified___empty_init},
+  {(bigint) parser___parser_prod___AQualified___init_aqualified},
+  {(bigint) 3 /* 77: AQualified < AQualified: superclass init_table position */},
+  {(bigint) parser___parser_nodes___AQualified___n_quad},
+  {(bigint) parser___parser_nodes___AQualified___n_id},
+  {(bigint) parser___parser_nodes___AQualified___n_classid},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute AQualified::_parent */
+/* 3: Attribute AQualified::_location */
+/* 4: Attribute AQualified::_first_location */
+/* 5: Attribute AQualified::_last_location */
+/* 6: Attribute AQualified::_n_annotations */
+/* 7: Attribute AQualified::_n_quad */
+/* 8: Attribute AQualified::_n_id */
+/* 9: Attribute AQualified::_n_classid */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AQualified[] = "init var of AQualified";
+void INIT_ATTRIBUTES__parser___parser_nodes___AQualified(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AQualified;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1208 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AQualified____n_quad(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1209 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1210 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___AQualified(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 10);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AQualified;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___AQualified[] = "check new AQualified";
+void CHECKNEW_parser___parser_nodes___AQualified(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___AQualified;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_AQualified_parser___parser_prod___AQualified___empty_init[] = "new AQualified parser_prod::AQualified::empty_init";
+val_t NEW_AQualified_parser___parser_prod___AQualified___empty_init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 8979;
+  fra.me.meth = LOCATE_NEW_AQualified_parser___parser_prod___AQualified___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_prod.nit:8979 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AQualified();
+  INIT_ATTRIBUTES__parser___parser_nodes___AQualified(fra.me.REG[0]);
+  parser___parser_prod___AQualified___empty_init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AQualified(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_NEW_AQualified_parser___parser_prod___AQualified___init_aqualified[] = "new AQualified parser_prod::AQualified::init_aqualified";
+val_t NEW_AQualified_parser___parser_prod___AQualified___init_aqualified(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 8981;
+  fra.me.meth = LOCATE_NEW_AQualified_parser___parser_prod___AQualified___init_aqualified;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:8981 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___AQualified();
+  INIT_ATTRIBUTES__parser___parser_nodes___AQualified(fra.me.REG[2]);
+  parser___parser_prod___AQualified___init_aqualified(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___AQualified(fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[2];
+}
+static const char LOCATE_NEW_AQualified_parser___parser_nodes___ANode___init[] = "new AQualified parser_nodes::ANode::init";
+val_t NEW_AQualified_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_AQualified_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AQualified();
+  INIT_ATTRIBUTES__parser___parser_nodes___AQualified(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AQualified(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___parser_nodes___ADoc[79] = {
+  {(bigint) 3815 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ADoc" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ADoc < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: ADoc < ANode: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ADoc < Prod: superclass typecheck marker */},
+  {(bigint) 3815 /* 6: ADoc < ADoc: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 2 /* 19: ADoc < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___ADoc___replace_child},
+  {(bigint) parser___parser_prod___Prod___replace_with},
+  {(bigint) parser___parser_prod___ADoc___visit_all},
+  {(bigint) 1 /* 63: ADoc < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) 0 /* 72: ADoc < Prod: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) parser___parser_prod___ADoc___empty_init},
+  {(bigint) parser___parser_prod___ADoc___init_adoc},
+  {(bigint) 3 /* 77: ADoc < ADoc: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ADoc___n_comment},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ADoc::_parent */
+/* 3: Attribute ADoc::_location */
+/* 4: Attribute ADoc::_first_location */
+/* 5: Attribute ADoc::_last_location */
+/* 6: Attribute ADoc::_n_annotations */
+/* 7: Attribute ADoc::_n_comment */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ADoc[] = "init var of ADoc";
+void INIT_ATTRIBUTES__parser___parser_nodes___ADoc(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ADoc;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1214 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___ADoc(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 8);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ADoc;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___ADoc[] = "check new ADoc";
+void CHECKNEW_parser___parser_nodes___ADoc(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___ADoc;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ADoc_parser___parser_prod___ADoc___empty_init[] = "new ADoc parser_prod::ADoc::empty_init";
+val_t NEW_ADoc_parser___parser_prod___ADoc___empty_init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9035;
+  fra.me.meth = LOCATE_NEW_ADoc_parser___parser_prod___ADoc___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_prod.nit:9035 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___ADoc();
+  INIT_ATTRIBUTES__parser___parser_nodes___ADoc(fra.me.REG[0]);
+  parser___parser_prod___ADoc___empty_init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___ADoc(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_NEW_ADoc_parser___parser_prod___ADoc___init_adoc[] = "new ADoc parser_prod::ADoc::init_adoc";
+val_t NEW_ADoc_parser___parser_prod___ADoc___init_adoc(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9037;
+  fra.me.meth = LOCATE_NEW_ADoc_parser___parser_prod___ADoc___init_adoc;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_prod.nit:9037 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___ADoc();
+  INIT_ATTRIBUTES__parser___parser_nodes___ADoc(fra.me.REG[1]);
+  parser___parser_prod___ADoc___init_adoc(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___ADoc(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_NEW_ADoc_parser___parser_nodes___ANode___init[] = "new ADoc parser_nodes::ANode::init";
+val_t NEW_ADoc_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_ADoc_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___ADoc();
+  INIT_ATTRIBUTES__parser___parser_nodes___ADoc(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___ADoc(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___parser_nodes___AAnnotations[82] = {
+  {(bigint) 3847 /* 0: Identity */},
+  {(bigint) 11 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "AAnnotations" /* 2: Class Name */},
+  {(bigint) 3 /* 3: AAnnotations < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: AAnnotations < ANode: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AAnnotations < Prod: superclass typecheck marker */},
+  {(bigint) 3847 /* 6: AAnnotations < AAnnotations: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 2 /* 19: AAnnotations < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___AAnnotations___replace_child},
+  {(bigint) parser___parser_prod___Prod___replace_with},
+  {(bigint) abstracttool___AAnnotations___visit_all},
+  {(bigint) 1 /* 63: AAnnotations < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) 0 /* 72: AAnnotations < Prod: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) parser___parser_prod___AAnnotations___empty_init},
+  {(bigint) parser___parser_prod___AAnnotations___init_aannotations},
+  {(bigint) 3 /* 77: AAnnotations < AAnnotations: superclass init_table position */},
+  {(bigint) parser___parser_nodes___AAnnotations___n_at},
+  {(bigint) parser___parser_nodes___AAnnotations___n_opar},
+  {(bigint) parser___parser_nodes___AAnnotations___n_items},
+  {(bigint) parser___parser_nodes___AAnnotations___n_cpar},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute AAnnotations::_parent */
+/* 3: Attribute AAnnotations::_location */
+/* 4: Attribute AAnnotations::_first_location */
+/* 5: Attribute AAnnotations::_last_location */
+/* 6: Attribute AAnnotations::_n_annotations */
+/* 7: Attribute AAnnotations::_n_at */
+/* 8: Attribute AAnnotations::_n_opar */
+/* 9: Attribute AAnnotations::_n_items */
+/* 10: Attribute AAnnotations::_n_cpar */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAnnotations[] = "init var of AAnnotations";
+void INIT_ATTRIBUTES__parser___parser_nodes___AAnnotations(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAnnotations;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1219 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AAnnotations____n_at(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1220 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AAnnotations____n_opar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1221 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1222 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AAnnotations____n_cpar(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___AAnnotations(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 11);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AAnnotations;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___AAnnotations[] = "check new AAnnotations";
+void CHECKNEW_parser___parser_nodes___AAnnotations(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___AAnnotations;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_AAnnotations_parser___parser_prod___AAnnotations___empty_init[] = "new AAnnotations parser_prod::AAnnotations::empty_init";
+val_t NEW_AAnnotations_parser___parser_prod___AAnnotations___empty_init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9073;
+  fra.me.meth = LOCATE_NEW_AAnnotations_parser___parser_prod___AAnnotations___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_prod.nit:9073 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AAnnotations();
+  INIT_ATTRIBUTES__parser___parser_nodes___AAnnotations(fra.me.REG[0]);
+  parser___parser_prod___AAnnotations___empty_init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AAnnotations(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations[] = "new AAnnotations parser_prod::AAnnotations::init_aannotations";
+val_t NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(val_t p0, val_t p1, val_t p2, val_t p3){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9075;
+  fra.me.meth = LOCATE_NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* parser/parser_prod.nit:9075 */
+  fra.me.REG[4] = NEW_parser___parser_nodes___AAnnotations();
+  INIT_ATTRIBUTES__parser___parser_nodes___AAnnotations(fra.me.REG[4]);
+  parser___parser_prod___AAnnotations___init_aannotations(fra.me.REG[4], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], init_table);
+  CHECKNEW_parser___parser_nodes___AAnnotations(fra.me.REG[4]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[4];
+}
+static const char LOCATE_NEW_AAnnotations_parser___parser_nodes___ANode___init[] = "new AAnnotations parser_nodes::ANode::init";
+val_t NEW_AAnnotations_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_AAnnotations_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AAnnotations();
+  INIT_ATTRIBUTES__parser___parser_nodes___AAnnotations(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AAnnotations(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___parser_nodes___AAnnotation[82] = {
+  {(bigint) 3851 /* 0: Identity */},
+  {(bigint) 11 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "AAnnotation" /* 2: Class Name */},
+  {(bigint) 3 /* 3: AAnnotation < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: AAnnotation < ANode: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AAnnotation < Prod: superclass typecheck marker */},
+  {(bigint) 3851 /* 6: AAnnotation < AAnnotation: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 2 /* 19: AAnnotation < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___AAnnotation___replace_child},
+  {(bigint) parser___parser_prod___Prod___replace_with},
+  {(bigint) parser___parser_prod___AAnnotation___visit_all},
+  {(bigint) 1 /* 63: AAnnotation < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) 0 /* 72: AAnnotation < Prod: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) parser___parser_prod___AAnnotation___empty_init},
+  {(bigint) parser___parser_prod___AAnnotation___init_aannotation},
+  {(bigint) 3 /* 77: AAnnotation < AAnnotation: superclass init_table position */},
+  {(bigint) parser___parser_nodes___AAnnotation___n_atid},
+  {(bigint) parser___parser_nodes___AAnnotation___n_opar},
+  {(bigint) parser___parser_nodes___AAnnotation___n_args},
+  {(bigint) parser___parser_nodes___AAnnotation___n_cpar},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute AAnnotation::_parent */
+/* 3: Attribute AAnnotation::_location */
+/* 4: Attribute AAnnotation::_first_location */
+/* 5: Attribute AAnnotation::_last_location */
+/* 6: Attribute AAnnotation::_n_annotations */
+/* 7: Attribute AAnnotation::_n_atid */
+/* 8: Attribute AAnnotation::_n_opar */
+/* 9: Attribute AAnnotation::_n_args */
+/* 10: Attribute AAnnotation::_n_cpar */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAnnotation[] = "init var of AAnnotation";
+void INIT_ATTRIBUTES__parser___parser_nodes___AAnnotation(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAnnotation;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1227 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AAnnotation____n_opar(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1228 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_nodes.nit:1229 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___AAnnotation____n_cpar(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___AAnnotation(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 11);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AAnnotation;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___AAnnotation[] = "check new AAnnotation";
+void CHECKNEW_parser___parser_nodes___AAnnotation(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___AAnnotation;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_atid(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_atid", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_AAnnotation_parser___parser_prod___AAnnotation___empty_init[] = "new AAnnotation parser_prod::AAnnotation::empty_init";
+val_t NEW_AAnnotation_parser___parser_prod___AAnnotation___empty_init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9165;
+  fra.me.meth = LOCATE_NEW_AAnnotation_parser___parser_prod___AAnnotation___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_prod.nit:9165 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AAnnotation();
+  INIT_ATTRIBUTES__parser___parser_nodes___AAnnotation(fra.me.REG[0]);
+  parser___parser_prod___AAnnotation___empty_init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AAnnotation(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_NEW_AAnnotation_parser___parser_prod___AAnnotation___init_aannotation[] = "new AAnnotation parser_prod::AAnnotation::init_aannotation";
+val_t NEW_AAnnotation_parser___parser_prod___AAnnotation___init_aannotation(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9167;
+  fra.me.meth = LOCATE_NEW_AAnnotation_parser___parser_prod___AAnnotation___init_aannotation;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* parser/parser_prod.nit:9167 */
+  fra.me.REG[5] = NEW_parser___parser_nodes___AAnnotation();
+  INIT_ATTRIBUTES__parser___parser_nodes___AAnnotation(fra.me.REG[5]);
+  parser___parser_prod___AAnnotation___init_aannotation(fra.me.REG[5], fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4], init_table);
+  CHECKNEW_parser___parser_nodes___AAnnotation(fra.me.REG[5]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[5];
+}
+static const char LOCATE_NEW_AAnnotation_parser___parser_nodes___ANode___init[] = "new AAnnotation parser_nodes::ANode::init";
+val_t NEW_AAnnotation_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_AAnnotation_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AAnnotation();
+  INIT_ATTRIBUTES__parser___parser_nodes___AAnnotation(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AAnnotation(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___parser_nodes___ATypeAtArg[80] = {
+  {(bigint) 4279 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ATypeAtArg" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ATypeAtArg < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: ATypeAtArg < ANode: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: ATypeAtArg < Prod: superclass typecheck marker */},
+  {(bigint) 3839 /* 6: ATypeAtArg < AAtArg: superclass typecheck marker */},
+  {(bigint) 4279 /* 7: ATypeAtArg < ATypeAtArg: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 3 /* 19: ATypeAtArg < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___ATypeAtArg___replace_child},
+  {(bigint) parser___parser_prod___Prod___replace_with},
+  {(bigint) parser___parser_prod___ATypeAtArg___visit_all},
+  {(bigint) 2 /* 63: ATypeAtArg < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) 1 /* 72: ATypeAtArg < Prod: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 0 /* 75: ATypeAtArg < AAtArg: superclass init_table position */},
+  {(bigint) parser___parser_prod___ATypeAtArg___empty_init},
+  {(bigint) parser___parser_prod___ATypeAtArg___init_atypeatarg},
+  {(bigint) 4 /* 78: ATypeAtArg < ATypeAtArg: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ATypeAtArg___n_type},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ATypeAtArg::_parent */
+/* 3: Attribute ATypeAtArg::_location */
+/* 4: Attribute ATypeAtArg::_first_location */
+/* 5: Attribute ATypeAtArg::_last_location */
+/* 6: Attribute ATypeAtArg::_n_annotations */
+/* 7: Attribute ATypeAtArg::_n_type */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ATypeAtArg[] = "init var of ATypeAtArg";
+void INIT_ATTRIBUTES__parser___parser_nodes___ATypeAtArg(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ATypeAtArg;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___ATypeAtArg(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 8);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ATypeAtArg;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___ATypeAtArg[] = "check new ATypeAtArg";
+void CHECKNEW_parser___parser_nodes___ATypeAtArg(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___ATypeAtArg;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ATypeAtArg_parser___parser_prod___ATypeAtArg___empty_init[] = "new ATypeAtArg parser_prod::ATypeAtArg::empty_init";
+val_t NEW_ATypeAtArg_parser___parser_prod___ATypeAtArg___empty_init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9271;
+  fra.me.meth = LOCATE_NEW_ATypeAtArg_parser___parser_prod___ATypeAtArg___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_prod.nit:9271 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___ATypeAtArg();
+  INIT_ATTRIBUTES__parser___parser_nodes___ATypeAtArg(fra.me.REG[0]);
+  parser___parser_prod___ATypeAtArg___empty_init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___ATypeAtArg(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_NEW_ATypeAtArg_parser___parser_prod___ATypeAtArg___init_atypeatarg[] = "new ATypeAtArg parser_prod::ATypeAtArg::init_atypeatarg";
+val_t NEW_ATypeAtArg_parser___parser_prod___ATypeAtArg___init_atypeatarg(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9273;
+  fra.me.meth = LOCATE_NEW_ATypeAtArg_parser___parser_prod___ATypeAtArg___init_atypeatarg;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_prod.nit:9273 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___ATypeAtArg();
+  INIT_ATTRIBUTES__parser___parser_nodes___ATypeAtArg(fra.me.REG[1]);
+  parser___parser_prod___ATypeAtArg___init_atypeatarg(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___ATypeAtArg(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_NEW_ATypeAtArg_parser___parser_nodes___ANode___init[] = "new ATypeAtArg parser_nodes::ANode::init";
+val_t NEW_ATypeAtArg_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_ATypeAtArg_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___ATypeAtArg();
+  INIT_ATTRIBUTES__parser___parser_nodes___ATypeAtArg(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___ATypeAtArg(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___parser_nodes___AExprAtArg[80] = {
+  {(bigint) 4491 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "AExprAtArg" /* 2: Class Name */},
+  {(bigint) 3 /* 3: AExprAtArg < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: AExprAtArg < ANode: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AExprAtArg < Prod: superclass typecheck marker */},
+  {(bigint) 3839 /* 6: AExprAtArg < AAtArg: superclass typecheck marker */},
+  {(bigint) 4491 /* 7: AExprAtArg < AExprAtArg: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 3 /* 19: AExprAtArg < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___AExprAtArg___replace_child},
+  {(bigint) parser___parser_prod___Prod___replace_with},
+  {(bigint) parser___parser_prod___AExprAtArg___visit_all},
+  {(bigint) 2 /* 63: AExprAtArg < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) 1 /* 72: AExprAtArg < Prod: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 0 /* 75: AExprAtArg < AAtArg: superclass init_table position */},
+  {(bigint) parser___parser_prod___AExprAtArg___empty_init},
+  {(bigint) parser___parser_prod___AExprAtArg___init_aexpratarg},
+  {(bigint) 4 /* 78: AExprAtArg < AExprAtArg: superclass init_table position */},
+  {(bigint) parser___parser_nodes___AExprAtArg___n_expr},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute AExprAtArg::_parent */
+/* 3: Attribute AExprAtArg::_location */
+/* 4: Attribute AExprAtArg::_first_location */
+/* 5: Attribute AExprAtArg::_last_location */
+/* 6: Attribute AExprAtArg::_n_annotations */
+/* 7: Attribute AExprAtArg::_n_expr */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AExprAtArg[] = "init var of AExprAtArg";
+void INIT_ATTRIBUTES__parser___parser_nodes___AExprAtArg(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AExprAtArg;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___AExprAtArg(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 8);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AExprAtArg;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___AExprAtArg[] = "check new AExprAtArg";
+void CHECKNEW_parser___parser_nodes___AExprAtArg(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___AExprAtArg;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_AExprAtArg_parser___parser_prod___AExprAtArg___empty_init[] = "new AExprAtArg parser_prod::AExprAtArg::empty_init";
+val_t NEW_AExprAtArg_parser___parser_prod___AExprAtArg___empty_init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9302;
+  fra.me.meth = LOCATE_NEW_AExprAtArg_parser___parser_prod___AExprAtArg___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_prod.nit:9302 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AExprAtArg();
+  INIT_ATTRIBUTES__parser___parser_nodes___AExprAtArg(fra.me.REG[0]);
+  parser___parser_prod___AExprAtArg___empty_init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AExprAtArg(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_NEW_AExprAtArg_parser___parser_prod___AExprAtArg___init_aexpratarg[] = "new AExprAtArg parser_prod::AExprAtArg::init_aexpratarg";
+val_t NEW_AExprAtArg_parser___parser_prod___AExprAtArg___init_aexpratarg(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9304;
+  fra.me.meth = LOCATE_NEW_AExprAtArg_parser___parser_prod___AExprAtArg___init_aexpratarg;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_prod.nit:9304 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___AExprAtArg();
+  INIT_ATTRIBUTES__parser___parser_nodes___AExprAtArg(fra.me.REG[1]);
+  parser___parser_prod___AExprAtArg___init_aexpratarg(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AExprAtArg(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_NEW_AExprAtArg_parser___parser_nodes___ANode___init[] = "new AExprAtArg parser_nodes::ANode::init";
+val_t NEW_AExprAtArg_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_AExprAtArg_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AExprAtArg();
+  INIT_ATTRIBUTES__parser___parser_nodes___AExprAtArg(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AExprAtArg(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___parser_nodes___AAtAtArg[79] = {
+  {(bigint) 4563 /* 0: Identity */},
+  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "AAtAtArg" /* 2: Class Name */},
+  {(bigint) 3 /* 3: AAtAtArg < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: AAtAtArg < ANode: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AAtAtArg < Prod: superclass typecheck marker */},
+  {(bigint) 3839 /* 6: AAtAtArg < AAtArg: superclass typecheck marker */},
+  {(bigint) 4563 /* 7: AAtAtArg < AAtAtArg: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 3 /* 19: AAtAtArg < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___AAtAtArg___replace_child},
+  {(bigint) parser___parser_prod___Prod___replace_with},
+  {(bigint) parser___parser_prod___AAtAtArg___visit_all},
+  {(bigint) 2 /* 63: AAtAtArg < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) 1 /* 72: AAtAtArg < Prod: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 0 /* 75: AAtAtArg < AAtArg: superclass init_table position */},
+  {(bigint) parser___parser_prod___AAtAtArg___empty_init},
+  {(bigint) parser___parser_prod___AAtAtArg___init_aatatarg},
+  {(bigint) 4 /* 78: AAtAtArg < AAtAtArg: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute AAtAtArg::_parent */
+/* 3: Attribute AAtAtArg::_location */
+/* 4: Attribute AAtAtArg::_first_location */
+/* 5: Attribute AAtAtArg::_last_location */
+/* 6: Attribute AAtAtArg::_n_annotations */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAtAtArg[] = "init var of AAtAtArg";
+void INIT_ATTRIBUTES__parser___parser_nodes___AAtAtArg(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AAtAtArg;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___AAtAtArg(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 7);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AAtAtArg;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___AAtAtArg[] = "check new AAtAtArg";
+void CHECKNEW_parser___parser_nodes___AAtAtArg(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___AAtAtArg;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_AAtAtArg_parser___parser_prod___AAtAtArg___empty_init[] = "new AAtAtArg parser_prod::AAtAtArg::empty_init";
+val_t NEW_AAtAtArg_parser___parser_prod___AAtAtArg___empty_init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9333;
+  fra.me.meth = LOCATE_NEW_AAtAtArg_parser___parser_prod___AAtAtArg___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_prod.nit:9333 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AAtAtArg();
+  INIT_ATTRIBUTES__parser___parser_nodes___AAtAtArg(fra.me.REG[0]);
+  parser___parser_prod___AAtAtArg___empty_init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AAtAtArg(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_NEW_AAtAtArg_parser___parser_prod___AAtAtArg___init_aatatarg[] = "new AAtAtArg parser_prod::AAtAtArg::init_aatatarg";
+val_t NEW_AAtAtArg_parser___parser_prod___AAtAtArg___init_aatatarg(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9335;
+  fra.me.meth = LOCATE_NEW_AAtAtArg_parser___parser_prod___AAtAtArg___init_aatatarg;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_prod.nit:9335 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___AAtAtArg();
+  INIT_ATTRIBUTES__parser___parser_nodes___AAtAtArg(fra.me.REG[1]);
+  parser___parser_prod___AAtAtArg___init_aatatarg(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AAtAtArg(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_NEW_AAtAtArg_parser___parser_nodes___ANode___init[] = "new AAtAtArg parser_nodes::ANode::init";
+val_t NEW_AAtAtArg_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_AAtAtArg_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AAtAtArg();
+  INIT_ATTRIBUTES__parser___parser_nodes___AAtAtArg(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AAtAtArg(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___parser_nodes___AIdAtid[80] = {
+  {(bigint) 4467 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "AIdAtid" /* 2: Class Name */},
+  {(bigint) 3 /* 3: AIdAtid < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: AIdAtid < ANode: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AIdAtid < Prod: superclass typecheck marker */},
+  {(bigint) 3835 /* 6: AIdAtid < AAtid: superclass typecheck marker */},
+  {(bigint) 4467 /* 7: AIdAtid < AIdAtid: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 3 /* 19: AIdAtid < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___AIdAtid___replace_child},
+  {(bigint) parser___parser_prod___Prod___replace_with},
+  {(bigint) parser___parser_prod___AIdAtid___visit_all},
+  {(bigint) 2 /* 63: AIdAtid < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) 1 /* 72: AIdAtid < Prod: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 0 /* 75: AIdAtid < AAtid: superclass init_table position */},
+  {(bigint) parser___parser_nodes___AAtid___n_id},
+  {(bigint) parser___parser_prod___AIdAtid___empty_init},
+  {(bigint) parser___parser_prod___AIdAtid___init_aidatid},
+  {(bigint) 4 /* 79: AIdAtid < AIdAtid: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute AIdAtid::_parent */
+/* 3: Attribute AIdAtid::_location */
+/* 4: Attribute AIdAtid::_first_location */
+/* 5: Attribute AIdAtid::_last_location */
+/* 6: Attribute AIdAtid::_n_annotations */
+/* 7: Attribute AIdAtid::_n_id */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AIdAtid[] = "init var of AIdAtid";
+void INIT_ATTRIBUTES__parser___parser_nodes___AIdAtid(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AIdAtid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___AIdAtid(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 8);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AIdAtid;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___AIdAtid[] = "check new AIdAtid";
+void CHECKNEW_parser___parser_nodes___AIdAtid(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___AIdAtid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_AIdAtid_parser___parser_prod___AIdAtid___empty_init[] = "new AIdAtid parser_prod::AIdAtid::empty_init";
+val_t NEW_AIdAtid_parser___parser_prod___AIdAtid___empty_init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9364;
+  fra.me.meth = LOCATE_NEW_AIdAtid_parser___parser_prod___AIdAtid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_prod.nit:9364 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AIdAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AIdAtid(fra.me.REG[0]);
+  parser___parser_prod___AIdAtid___empty_init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AIdAtid(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_NEW_AIdAtid_parser___parser_prod___AIdAtid___init_aidatid[] = "new AIdAtid parser_prod::AIdAtid::init_aidatid";
+val_t NEW_AIdAtid_parser___parser_prod___AIdAtid___init_aidatid(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9366;
+  fra.me.meth = LOCATE_NEW_AIdAtid_parser___parser_prod___AIdAtid___init_aidatid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_prod.nit:9366 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___AIdAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AIdAtid(fra.me.REG[1]);
+  parser___parser_prod___AIdAtid___init_aidatid(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AIdAtid(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_NEW_AIdAtid_parser___parser_nodes___ANode___init[] = "new AIdAtid parser_nodes::ANode::init";
+val_t NEW_AIdAtid_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_AIdAtid_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AIdAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AIdAtid(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AIdAtid(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___parser_nodes___AKwexternAtid[80] = {
+  {(bigint) 4439 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "AKwexternAtid" /* 2: Class Name */},
+  {(bigint) 3 /* 3: AKwexternAtid < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: AKwexternAtid < ANode: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AKwexternAtid < Prod: superclass typecheck marker */},
+  {(bigint) 3835 /* 6: AKwexternAtid < AAtid: superclass typecheck marker */},
+  {(bigint) 4439 /* 7: AKwexternAtid < AKwexternAtid: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 3 /* 19: AKwexternAtid < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___AKwexternAtid___replace_child},
+  {(bigint) parser___parser_prod___Prod___replace_with},
+  {(bigint) parser___parser_prod___AKwexternAtid___visit_all},
+  {(bigint) 2 /* 63: AKwexternAtid < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) 1 /* 72: AKwexternAtid < Prod: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 0 /* 75: AKwexternAtid < AAtid: superclass init_table position */},
+  {(bigint) parser___parser_nodes___AAtid___n_id},
+  {(bigint) parser___parser_prod___AKwexternAtid___empty_init},
+  {(bigint) parser___parser_prod___AKwexternAtid___init_akwexternatid},
+  {(bigint) 4 /* 79: AKwexternAtid < AKwexternAtid: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute AKwexternAtid::_parent */
+/* 3: Attribute AKwexternAtid::_location */
+/* 4: Attribute AKwexternAtid::_first_location */
+/* 5: Attribute AKwexternAtid::_last_location */
+/* 6: Attribute AKwexternAtid::_n_annotations */
+/* 7: Attribute AKwexternAtid::_n_id */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AKwexternAtid[] = "init var of AKwexternAtid";
+void INIT_ATTRIBUTES__parser___parser_nodes___AKwexternAtid(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AKwexternAtid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___AKwexternAtid(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 8);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AKwexternAtid;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___AKwexternAtid[] = "check new AKwexternAtid";
+void CHECKNEW_parser___parser_nodes___AKwexternAtid(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___AKwexternAtid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_AKwexternAtid_parser___parser_prod___AKwexternAtid___empty_init[] = "new AKwexternAtid parser_prod::AKwexternAtid::empty_init";
+val_t NEW_AKwexternAtid_parser___parser_prod___AKwexternAtid___empty_init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9395;
+  fra.me.meth = LOCATE_NEW_AKwexternAtid_parser___parser_prod___AKwexternAtid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_prod.nit:9395 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AKwexternAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AKwexternAtid(fra.me.REG[0]);
+  parser___parser_prod___AKwexternAtid___empty_init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AKwexternAtid(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_NEW_AKwexternAtid_parser___parser_prod___AKwexternAtid___init_akwexternatid[] = "new AKwexternAtid parser_prod::AKwexternAtid::init_akwexternatid";
+val_t NEW_AKwexternAtid_parser___parser_prod___AKwexternAtid___init_akwexternatid(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9397;
+  fra.me.meth = LOCATE_NEW_AKwexternAtid_parser___parser_prod___AKwexternAtid___init_akwexternatid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_prod.nit:9397 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___AKwexternAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AKwexternAtid(fra.me.REG[1]);
+  parser___parser_prod___AKwexternAtid___init_akwexternatid(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AKwexternAtid(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_NEW_AKwexternAtid_parser___parser_nodes___ANode___init[] = "new AKwexternAtid parser_nodes::ANode::init";
+val_t NEW_AKwexternAtid_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_AKwexternAtid_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AKwexternAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AKwexternAtid(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AKwexternAtid(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___parser_nodes___AKwinternAtid[80] = {
+  {(bigint) 4431 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "AKwinternAtid" /* 2: Class Name */},
+  {(bigint) 3 /* 3: AKwinternAtid < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: AKwinternAtid < ANode: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AKwinternAtid < Prod: superclass typecheck marker */},
+  {(bigint) 3835 /* 6: AKwinternAtid < AAtid: superclass typecheck marker */},
+  {(bigint) 4431 /* 7: AKwinternAtid < AKwinternAtid: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 3 /* 19: AKwinternAtid < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___AKwinternAtid___replace_child},
+  {(bigint) parser___parser_prod___Prod___replace_with},
+  {(bigint) parser___parser_prod___AKwinternAtid___visit_all},
+  {(bigint) 2 /* 63: AKwinternAtid < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) 1 /* 72: AKwinternAtid < Prod: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 0 /* 75: AKwinternAtid < AAtid: superclass init_table position */},
+  {(bigint) parser___parser_nodes___AAtid___n_id},
+  {(bigint) parser___parser_prod___AKwinternAtid___empty_init},
+  {(bigint) parser___parser_prod___AKwinternAtid___init_akwinternatid},
+  {(bigint) 4 /* 79: AKwinternAtid < AKwinternAtid: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute AKwinternAtid::_parent */
+/* 3: Attribute AKwinternAtid::_location */
+/* 4: Attribute AKwinternAtid::_first_location */
+/* 5: Attribute AKwinternAtid::_last_location */
+/* 6: Attribute AKwinternAtid::_n_annotations */
+/* 7: Attribute AKwinternAtid::_n_id */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AKwinternAtid[] = "init var of AKwinternAtid";
+void INIT_ATTRIBUTES__parser___parser_nodes___AKwinternAtid(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AKwinternAtid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___AKwinternAtid(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 8);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AKwinternAtid;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___AKwinternAtid[] = "check new AKwinternAtid";
+void CHECKNEW_parser___parser_nodes___AKwinternAtid(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___AKwinternAtid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_AKwinternAtid_parser___parser_prod___AKwinternAtid___empty_init[] = "new AKwinternAtid parser_prod::AKwinternAtid::empty_init";
+val_t NEW_AKwinternAtid_parser___parser_prod___AKwinternAtid___empty_init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9426;
+  fra.me.meth = LOCATE_NEW_AKwinternAtid_parser___parser_prod___AKwinternAtid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_prod.nit:9426 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AKwinternAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AKwinternAtid(fra.me.REG[0]);
+  parser___parser_prod___AKwinternAtid___empty_init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AKwinternAtid(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_NEW_AKwinternAtid_parser___parser_prod___AKwinternAtid___init_akwinternatid[] = "new AKwinternAtid parser_prod::AKwinternAtid::init_akwinternatid";
+val_t NEW_AKwinternAtid_parser___parser_prod___AKwinternAtid___init_akwinternatid(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9428;
+  fra.me.meth = LOCATE_NEW_AKwinternAtid_parser___parser_prod___AKwinternAtid___init_akwinternatid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_prod.nit:9428 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___AKwinternAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AKwinternAtid(fra.me.REG[1]);
+  parser___parser_prod___AKwinternAtid___init_akwinternatid(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AKwinternAtid(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_NEW_AKwinternAtid_parser___parser_nodes___ANode___init[] = "new AKwinternAtid parser_nodes::ANode::init";
+val_t NEW_AKwinternAtid_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_AKwinternAtid_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AKwinternAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AKwinternAtid(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AKwinternAtid(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___parser_nodes___AKwreadableAtid[80] = {
+  {(bigint) 4427 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "AKwreadableAtid" /* 2: Class Name */},
+  {(bigint) 3 /* 3: AKwreadableAtid < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: AKwreadableAtid < ANode: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AKwreadableAtid < Prod: superclass typecheck marker */},
+  {(bigint) 3835 /* 6: AKwreadableAtid < AAtid: superclass typecheck marker */},
+  {(bigint) 4427 /* 7: AKwreadableAtid < AKwreadableAtid: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 3 /* 19: AKwreadableAtid < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___AKwreadableAtid___replace_child},
+  {(bigint) parser___parser_prod___Prod___replace_with},
+  {(bigint) parser___parser_prod___AKwreadableAtid___visit_all},
+  {(bigint) 2 /* 63: AKwreadableAtid < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) 1 /* 72: AKwreadableAtid < Prod: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 0 /* 75: AKwreadableAtid < AAtid: superclass init_table position */},
+  {(bigint) parser___parser_nodes___AAtid___n_id},
+  {(bigint) parser___parser_prod___AKwreadableAtid___empty_init},
+  {(bigint) parser___parser_prod___AKwreadableAtid___init_akwreadableatid},
+  {(bigint) 4 /* 79: AKwreadableAtid < AKwreadableAtid: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute AKwreadableAtid::_parent */
+/* 3: Attribute AKwreadableAtid::_location */
+/* 4: Attribute AKwreadableAtid::_first_location */
+/* 5: Attribute AKwreadableAtid::_last_location */
+/* 6: Attribute AKwreadableAtid::_n_annotations */
+/* 7: Attribute AKwreadableAtid::_n_id */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AKwreadableAtid[] = "init var of AKwreadableAtid";
+void INIT_ATTRIBUTES__parser___parser_nodes___AKwreadableAtid(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AKwreadableAtid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___AKwreadableAtid(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 8);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AKwreadableAtid;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___AKwreadableAtid[] = "check new AKwreadableAtid";
+void CHECKNEW_parser___parser_nodes___AKwreadableAtid(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___AKwreadableAtid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_AKwreadableAtid_parser___parser_prod___AKwreadableAtid___empty_init[] = "new AKwreadableAtid parser_prod::AKwreadableAtid::empty_init";
+val_t NEW_AKwreadableAtid_parser___parser_prod___AKwreadableAtid___empty_init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9457;
+  fra.me.meth = LOCATE_NEW_AKwreadableAtid_parser___parser_prod___AKwreadableAtid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_prod.nit:9457 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AKwreadableAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AKwreadableAtid(fra.me.REG[0]);
+  parser___parser_prod___AKwreadableAtid___empty_init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AKwreadableAtid(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_NEW_AKwreadableAtid_parser___parser_prod___AKwreadableAtid___init_akwreadableatid[] = "new AKwreadableAtid parser_prod::AKwreadableAtid::init_akwreadableatid";
+val_t NEW_AKwreadableAtid_parser___parser_prod___AKwreadableAtid___init_akwreadableatid(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9459;
+  fra.me.meth = LOCATE_NEW_AKwreadableAtid_parser___parser_prod___AKwreadableAtid___init_akwreadableatid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_prod.nit:9459 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___AKwreadableAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AKwreadableAtid(fra.me.REG[1]);
+  parser___parser_prod___AKwreadableAtid___init_akwreadableatid(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AKwreadableAtid(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_NEW_AKwreadableAtid_parser___parser_nodes___ANode___init[] = "new AKwreadableAtid parser_nodes::ANode::init";
+val_t NEW_AKwreadableAtid_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_AKwreadableAtid_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AKwreadableAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AKwreadableAtid(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AKwreadableAtid(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___parser_nodes___AKwwritableAtid[80] = {
+  {(bigint) 4423 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "AKwwritableAtid" /* 2: Class Name */},
+  {(bigint) 3 /* 3: AKwwritableAtid < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: AKwwritableAtid < ANode: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AKwwritableAtid < Prod: superclass typecheck marker */},
+  {(bigint) 3835 /* 6: AKwwritableAtid < AAtid: superclass typecheck marker */},
+  {(bigint) 4423 /* 7: AKwwritableAtid < AKwwritableAtid: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 3 /* 19: AKwwritableAtid < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___AKwwritableAtid___replace_child},
+  {(bigint) parser___parser_prod___Prod___replace_with},
+  {(bigint) parser___parser_prod___AKwwritableAtid___visit_all},
+  {(bigint) 2 /* 63: AKwwritableAtid < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) 1 /* 72: AKwwritableAtid < Prod: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 0 /* 75: AKwwritableAtid < AAtid: superclass init_table position */},
+  {(bigint) parser___parser_nodes___AAtid___n_id},
+  {(bigint) parser___parser_prod___AKwwritableAtid___empty_init},
+  {(bigint) parser___parser_prod___AKwwritableAtid___init_akwwritableatid},
+  {(bigint) 4 /* 79: AKwwritableAtid < AKwwritableAtid: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute AKwwritableAtid::_parent */
+/* 3: Attribute AKwwritableAtid::_location */
+/* 4: Attribute AKwwritableAtid::_first_location */
+/* 5: Attribute AKwwritableAtid::_last_location */
+/* 6: Attribute AKwwritableAtid::_n_annotations */
+/* 7: Attribute AKwwritableAtid::_n_id */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AKwwritableAtid[] = "init var of AKwwritableAtid";
+void INIT_ATTRIBUTES__parser___parser_nodes___AKwwritableAtid(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AKwwritableAtid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___AKwwritableAtid(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 8);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AKwwritableAtid;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___AKwwritableAtid[] = "check new AKwwritableAtid";
+void CHECKNEW_parser___parser_nodes___AKwwritableAtid(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___AKwwritableAtid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_AKwwritableAtid_parser___parser_prod___AKwwritableAtid___empty_init[] = "new AKwwritableAtid parser_prod::AKwwritableAtid::empty_init";
+val_t NEW_AKwwritableAtid_parser___parser_prod___AKwwritableAtid___empty_init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9488;
+  fra.me.meth = LOCATE_NEW_AKwwritableAtid_parser___parser_prod___AKwwritableAtid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_prod.nit:9488 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AKwwritableAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AKwwritableAtid(fra.me.REG[0]);
+  parser___parser_prod___AKwwritableAtid___empty_init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AKwwritableAtid(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_NEW_AKwwritableAtid_parser___parser_prod___AKwwritableAtid___init_akwwritableatid[] = "new AKwwritableAtid parser_prod::AKwwritableAtid::init_akwwritableatid";
+val_t NEW_AKwwritableAtid_parser___parser_prod___AKwwritableAtid___init_akwwritableatid(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9490;
+  fra.me.meth = LOCATE_NEW_AKwwritableAtid_parser___parser_prod___AKwwritableAtid___init_akwwritableatid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_prod.nit:9490 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___AKwwritableAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AKwwritableAtid(fra.me.REG[1]);
+  parser___parser_prod___AKwwritableAtid___init_akwwritableatid(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AKwwritableAtid(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_NEW_AKwwritableAtid_parser___parser_nodes___ANode___init[] = "new AKwwritableAtid parser_nodes::ANode::init";
+val_t NEW_AKwwritableAtid_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_AKwwritableAtid_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AKwwritableAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AKwwritableAtid(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AKwwritableAtid(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___parser_nodes___AKwimportAtid[80] = {
+  {(bigint) 4435 /* 0: Identity */},
+  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "AKwimportAtid" /* 2: Class Name */},
+  {(bigint) 3 /* 3: AKwimportAtid < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: AKwimportAtid < ANode: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: AKwimportAtid < Prod: superclass typecheck marker */},
+  {(bigint) 3835 /* 6: AKwimportAtid < AAtid: superclass typecheck marker */},
+  {(bigint) 4435 /* 7: AKwimportAtid < AKwimportAtid: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 3 /* 19: AKwimportAtid < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___AKwimportAtid___replace_child},
+  {(bigint) parser___parser_prod___Prod___replace_with},
+  {(bigint) parser___parser_prod___AKwimportAtid___visit_all},
+  {(bigint) 2 /* 63: AKwimportAtid < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) 1 /* 72: AKwimportAtid < Prod: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 0 /* 75: AKwimportAtid < AAtid: superclass init_table position */},
+  {(bigint) parser___parser_nodes___AAtid___n_id},
+  {(bigint) parser___parser_prod___AKwimportAtid___empty_init},
+  {(bigint) parser___parser_prod___AKwimportAtid___init_akwimportatid},
+  {(bigint) 4 /* 79: AKwimportAtid < AKwimportAtid: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute AKwimportAtid::_parent */
+/* 3: Attribute AKwimportAtid::_location */
+/* 4: Attribute AKwimportAtid::_first_location */
+/* 5: Attribute AKwimportAtid::_last_location */
+/* 6: Attribute AKwimportAtid::_n_annotations */
+/* 7: Attribute AKwimportAtid::_n_id */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AKwimportAtid[] = "init var of AKwimportAtid";
+void INIT_ATTRIBUTES__parser___parser_nodes___AKwimportAtid(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AKwimportAtid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___AKwimportAtid(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 8);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AKwimportAtid;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___AKwimportAtid[] = "check new AKwimportAtid";
+void CHECKNEW_parser___parser_nodes___AKwimportAtid(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___AKwimportAtid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_AKwimportAtid_parser___parser_prod___AKwimportAtid___empty_init[] = "new AKwimportAtid parser_prod::AKwimportAtid::empty_init";
+val_t NEW_AKwimportAtid_parser___parser_prod___AKwimportAtid___empty_init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9519;
+  fra.me.meth = LOCATE_NEW_AKwimportAtid_parser___parser_prod___AKwimportAtid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_prod.nit:9519 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AKwimportAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AKwimportAtid(fra.me.REG[0]);
+  parser___parser_prod___AKwimportAtid___empty_init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AKwimportAtid(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_NEW_AKwimportAtid_parser___parser_prod___AKwimportAtid___init_akwimportatid[] = "new AKwimportAtid parser_prod::AKwimportAtid::init_akwimportatid";
+val_t NEW_AKwimportAtid_parser___parser_prod___AKwimportAtid___init_akwimportatid(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 9521;
+  fra.me.meth = LOCATE_NEW_AKwimportAtid_parser___parser_prod___AKwimportAtid___init_akwimportatid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_prod.nit:9521 */
+  fra.me.REG[1] = NEW_parser___parser_nodes___AKwimportAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AKwimportAtid(fra.me.REG[1]);
+  parser___parser_prod___AKwimportAtid___init_akwimportatid(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AKwimportAtid(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_NEW_AKwimportAtid_parser___parser_nodes___ANode___init[] = "new AKwimportAtid parser_nodes::ANode::init";
+val_t NEW_AKwimportAtid_parser___parser_nodes___ANode___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[5] = {0, 0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_NEW_AKwimportAtid_parser___parser_nodes___ANode___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser_nodes.nit:32 */
+  fra.me.REG[0] = NEW_parser___parser_nodes___AKwimportAtid();
+  INIT_ATTRIBUTES__parser___parser_nodes___AKwimportAtid(fra.me.REG[0]);
+  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___parser_nodes___AKwimportAtid(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___parser_nodes___Start[79] = {
+  {(bigint) 3455 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "Start" /* 2: Class Name */},
+  {(bigint) 3 /* 3: Start < Object: superclass typecheck marker */},
+  {(bigint) 315 /* 4: Start < ANode: superclass typecheck marker */},
+  {(bigint) 3019 /* 5: Start < Prod: superclass typecheck marker */},
+  {(bigint) 3455 /* 6: Start < Start: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 2 /* 19: Start < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
+  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
+  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
+  {(bigint) parser___parser_prod___ANode___parent},
+  {(bigint) parser___parser_prod___ANode___parent__eq},
+  {(bigint) parser___parser_prod___ANode___remove_child},
+  {(bigint) parser___parser_prod___Start___replace_child},
+  {(bigint) parser___parser_prod___Prod___replace_with},
+  {(bigint) parser___parser_prod___Start___visit_all},
+  {(bigint) 1 /* 63: Start < ANode: superclass init_table position */},
+  {(bigint) parser___parser_nodes___ANode___location},
+  {(bigint) parser___parser_nodes___ANode___hot_location},
+  {(bigint) parser___parser_nodes___ANode___init},
+  {(bigint) parser___parser_nodes___ANode___debug},
+  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
+  {(bigint) syntax___typing___ANode___accept_typing},
+  {(bigint) syntax___typing___ANode___after_typing},
+  {(bigint) parser___parser_prod___ANode___replace_with},
+  {(bigint) 0 /* 72: Start < Prod: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Prod___location__eq},
+  {(bigint) parser___parser_nodes___Prod___n_annotations},
+  {(bigint) 3 /* 75: Start < Start: superclass init_table position */},
+  {(bigint) parser___parser_nodes___Start___n_base},
+  {(bigint) parser___parser_nodes___Start___n_eof},
+  {(bigint) parser___parser_nodes___Start___init},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute Start::_parent */
+/* 3: Attribute Start::_location */
+/* 4: Attribute Start::_first_location */
+/* 5: Attribute Start::_last_location */
+/* 6: Attribute Start::_n_annotations */
+/* 7: Attribute Start::_n_base */
+/* 8: Attribute Start::_n_eof */
+static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___Start[] = "init var of Start";
+void INIT_ATTRIBUTES__parser___parser_nodes___Start(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___Start;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___parser_nodes___Start(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 9);
+  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___Start;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___parser_nodes___Start[] = "check new Start";
+void CHECKNEW_parser___parser_nodes___Start(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___Start;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___Start____n_eof(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_eof", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_Start_parser___parser_nodes___Start___init[] = "new Start parser_nodes::Start::init";
+val_t NEW_Start_parser___parser_nodes___Start___init(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t tmp;
+  int init_table[4] = {0, 0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1272;
+  fra.me.meth = LOCATE_NEW_Start_parser___parser_nodes___Start___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_nodes.nit:1272 */
+  fra.me.REG[2] = NEW_parser___parser_nodes___Start();
+  INIT_ATTRIBUTES__parser___parser_nodes___Start(fra.me.REG[2]);
+  parser___parser_nodes___Start___init(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
+  CHECKNEW_parser___parser_nodes___Start(fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[2];
+}
+const classtable_elt_t VFT_parser___lexer___Lexer[62] = {
+  {(bigint) 3147 /* 0: Identity */},
+  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "Lexer" /* 2: Class Name */},
+  {(bigint) 3 /* 3: Lexer < Object: superclass typecheck marker */},
+  {(bigint) 23 /* 4: Lexer < TablesCapable: superclass typecheck marker */},
+  {(bigint) 3147 /* 5: Lexer < Lexer: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: Lexer < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: Lexer < TablesCapable: superclass init_table position */},
+  {(bigint) parser___tables___TablesCapable___lexer_goto},
+  {(bigint) parser___tables___TablesCapable___lexer_accept},
+  {(bigint) parser___tables___TablesCapable___parser_goto},
+  {(bigint) parser___tables___TablesCapable___parser_action},
+  {(bigint) 2 /* 55: Lexer < Lexer: superclass init_table position */},
+  {(bigint) parser___lexer___Lexer___file},
+  {(bigint) parser___lexer___Lexer___state_initial},
+  {(bigint) parser___lexer___Lexer___init},
+  {(bigint) parser___lexer___Lexer___peek},
+  {(bigint) parser___lexer___Lexer___next},
+  {(bigint) parser___lexer___Lexer___get_token},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute Lexer::_token */
+/* 3: Attribute Lexer::_state */
+/* 4: Attribute Lexer::_file */
+/* 5: Attribute Lexer::_stream_pos */
+/* 6: Attribute Lexer::_line */
+/* 7: Attribute Lexer::_pos */
+/* 8: Attribute Lexer::_cr */
+static const char LOCATE_INIT_ATTRIBUTES__parser___lexer___Lexer[] = "init var of Lexer";
+void INIT_ATTRIBUTES__parser___lexer___Lexer(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___lexer___Lexer;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/lexer.nit:1196 */
+  REGB0 = TAG_Int(0);
+  ATTR_parser___lexer___Lexer____state(fra.me.REG[0]) = REGB0;
+  /* parser/lexer.nit:1202 */
+  REGB0 = TAG_Int(0);
+  ATTR_parser___lexer___Lexer____stream_pos(fra.me.REG[0]) = REGB0;
+  /* parser/lexer.nit:1205 */
+  REGB0 = TAG_Int(0);
+  ATTR_parser___lexer___Lexer____line(fra.me.REG[0]) = REGB0;
+  /* parser/lexer.nit:1208 */
+  REGB0 = TAG_Int(0);
+  ATTR_parser___lexer___Lexer____pos(fra.me.REG[0]) = REGB0;
+  /* parser/lexer.nit:1211 */
+  REGB0 = TAG_Bool(0);
+  ATTR_parser___lexer___Lexer____cr(fra.me.REG[0]) = REGB0;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___lexer___Lexer(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 9);
+  obj->vft = (classtable_elt_t*)VFT_parser___lexer___Lexer;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___lexer___Lexer[] = "check new Lexer";
+void CHECKNEW_parser___lexer___Lexer(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___lexer___Lexer;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___lexer___Lexer____state(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_state", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_parser___lexer___Lexer____file(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_file", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_parser___lexer___Lexer____stream_pos(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_stream_pos", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_parser___lexer___Lexer____line(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_line", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_parser___lexer___Lexer____pos(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_pos", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_parser___lexer___Lexer____cr(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_cr", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_Lexer_parser___lexer___Lexer___init[] = "new Lexer lexer::Lexer::init";
+val_t NEW_Lexer_parser___lexer___Lexer___init(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1216;
+  fra.me.meth = LOCATE_NEW_Lexer_parser___lexer___Lexer___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/lexer.nit:1216 */
+  fra.me.REG[1] = NEW_parser___lexer___Lexer();
+  INIT_ATTRIBUTES__parser___lexer___Lexer(fra.me.REG[1]);
+  parser___lexer___Lexer___init(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___lexer___Lexer(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+const classtable_elt_t VFT_parser___State[56] = {
+  {(bigint) 39 /* 0: Identity */},
+  {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "State" /* 2: Class Name */},
+  {(bigint) 3 /* 3: State < Object: superclass typecheck marker */},
+  {(bigint) 39 /* 4: State < State: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 0 /* 19: State < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 1 /* 50: State < State: superclass init_table position */},
+  {(bigint) parser___State___state},
+  {(bigint) parser___State___state__eq},
+  {(bigint) parser___State___nodes},
+  {(bigint) parser___State___nodes__eq},
+  {(bigint) parser___State___init},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute State::_state */
+/* 3: Attribute State::_nodes */
+static const char LOCATE_INIT_ATTRIBUTES__parser___State[] = "init var of State";
+void INIT_ATTRIBUTES__parser___State(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___State;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___State(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 4);
+  obj->vft = (classtable_elt_t*)VFT_parser___State;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___State[] = "check new State";
+void CHECKNEW_parser___State(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___State;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___State____state(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_state", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_State_parser___State___init[] = "new State parser::State::init";
+val_t NEW_State_parser___State___init(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[2] = {0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 16;
+  fra.me.meth = LOCATE_NEW_State_parser___State___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  REGB0 = p0;
+  fra.me.REG[0] = p1;
+  /* parser/parser.nit:16 */
+  fra.me.REG[1] = NEW_parser___State();
+  INIT_ATTRIBUTES__parser___State(fra.me.REG[1]);
+  parser___State___init(fra.me.REG[1], REGB0, fra.me.REG[0], init_table);
+  CHECKNEW_parser___State(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+const classtable_elt_t VFT_parser___Parser[63] = {
+  {(bigint) 3027 /* 0: Identity */},
+  {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "Parser" /* 2: Class Name */},
+  {(bigint) 3 /* 3: Parser < Object: superclass typecheck marker */},
+  {(bigint) 23 /* 4: Parser < TablesCapable: superclass typecheck marker */},
+  {(bigint) 3027 /* 5: Parser < Parser: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: Parser < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: Parser < TablesCapable: superclass init_table position */},
+  {(bigint) parser___tables___TablesCapable___lexer_goto},
+  {(bigint) parser___tables___TablesCapable___lexer_accept},
+  {(bigint) parser___tables___TablesCapable___parser_goto},
+  {(bigint) parser___tables___TablesCapable___parser_action},
+  {(bigint) 2 /* 55: Parser < Parser: superclass init_table position */},
+  {(bigint) parser___Parser___init},
+  {(bigint) parser___Parser___go_to},
+  {(bigint) parser___Parser___push},
+  {(bigint) parser___Parser___state},
+  {(bigint) parser___Parser___pop},
+  {(bigint) parser___Parser___parse},
+  {(bigint) parser___Parser___build_reduce_table},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute Parser::_lexer */
+/* 3: Attribute Parser::_stack */
+/* 4: Attribute Parser::_stack_pos */
+/* 5: Attribute Parser::_reduce_table */
+static const char LOCATE_INIT_ATTRIBUTES__parser___Parser[] = "init var of Parser";
+void INIT_ATTRIBUTES__parser___Parser(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___Parser;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___Parser(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 6);
+  obj->vft = (classtable_elt_t*)VFT_parser___Parser;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___Parser[] = "check new Parser";
+void CHECKNEW_parser___Parser(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___Parser;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___Parser____lexer(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_lexer", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_parser___Parser____stack(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_stack", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_parser___Parser____stack_pos(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_stack_pos", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_parser___Parser____reduce_table(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_reduce_table", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_Parser_parser___Parser___init[] = "new Parser parser::Parser::init";
+val_t NEW_Parser_parser___Parser___init(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 34;
+  fra.me.meth = LOCATE_NEW_Parser_parser___Parser___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser.nit:34 */
+  fra.me.REG[1] = NEW_parser___Parser();
+  INIT_ATTRIBUTES__parser___Parser(fra.me.REG[1]);
+  parser___Parser___init(fra.me.REG[1], fra.me.REG[0], init_table);
+  CHECKNEW_parser___Parser(fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+const classtable_elt_t VFT_parser___ComputeProdLocationVisitor[57] = {
+  {(bigint) 3275 /* 0: Identity */},
+  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ComputeProdLocationVisitor" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ComputeProdLocationVisitor < Object: superclass typecheck marker */},
+  {(bigint) 15 /* 4: ComputeProdLocationVisitor < Visitor: superclass typecheck marker */},
+  {(bigint) 3275 /* 5: ComputeProdLocationVisitor < ComputeProdLocationVisitor: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ComputeProdLocationVisitor < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ComputeProdLocationVisitor < Visitor: superclass init_table position */},
+  {(bigint) parser___ComputeProdLocationVisitor___visit},
+  {(bigint) parser___parser_prod___Visitor___enter_visit},
+  {(bigint) parser___parser_prod___Visitor___current_node},
+  {(bigint) parser___parser_prod___Visitor___init},
+  {(bigint) 2 /* 55: ComputeProdLocationVisitor < ComputeProdLocationVisitor: superclass init_table position */},
+  {(bigint) parser___ComputeProdLocationVisitor___init},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ComputeProdLocationVisitor::_current_node */
+/* 3: Attribute ComputeProdLocationVisitor::_need_first_prods */
+/* 4: Attribute ComputeProdLocationVisitor::_need_after_epsilons */
+/* 5: Attribute ComputeProdLocationVisitor::_need_before_epsilons */
+/* 6: Attribute ComputeProdLocationVisitor::_last_location */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ComputeProdLocationVisitor[] = "init var of ComputeProdLocationVisitor";
+void INIT_ATTRIBUTES__parser___ComputeProdLocationVisitor(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ComputeProdLocationVisitor;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_prod.nit:66 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_prod___Visitor____current_node(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser.nit:1466 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser.nit:1469 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser.nit:1472 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser.nit:1474 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ComputeProdLocationVisitor(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 7);
+  obj->vft = (classtable_elt_t*)VFT_parser___ComputeProdLocationVisitor;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ComputeProdLocationVisitor[] = "check new ComputeProdLocationVisitor";
+void CHECKNEW_parser___ComputeProdLocationVisitor(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ComputeProdLocationVisitor;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = 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_nitc, 0);
+  }
+  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_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ComputeProdLocationVisitor_parser___ComputeProdLocationVisitor___init[] = "new ComputeProdLocationVisitor parser::ComputeProdLocationVisitor::init";
+val_t NEW_ComputeProdLocationVisitor_parser___ComputeProdLocationVisitor___init(void){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1553;
+  fra.me.meth = LOCATE_NEW_ComputeProdLocationVisitor_parser___ComputeProdLocationVisitor___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  /* parser/parser.nit:1553 */
+  fra.me.REG[0] = NEW_parser___ComputeProdLocationVisitor();
+  INIT_ATTRIBUTES__parser___ComputeProdLocationVisitor(fra.me.REG[0]);
+  parser___ComputeProdLocationVisitor___init(fra.me.REG[0], init_table);
+  CHECKNEW_parser___ComputeProdLocationVisitor(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction0[55] = {
+  {(bigint) 2991 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction0" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction0 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction0 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2991 /* 5: ReduceAction0 < ReduceAction0: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction0 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction0 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction0___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction0 < ReduceAction0: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction0::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction0[] = "init var of ReduceAction0";
+void INIT_ATTRIBUTES__parser___ReduceAction0(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction0;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction0(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction0;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction0[] = "check new ReduceAction0";
+void CHECKNEW_parser___ReduceAction0(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction0;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction0_parser___ReduceAction___init[] = "new ReduceAction0 parser::ReduceAction::init";
+val_t NEW_ReduceAction0_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction0_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction0();
+  INIT_ATTRIBUTES__parser___ReduceAction0(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction0(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction1[55] = {
+  {(bigint) 2987 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction1" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2987 /* 5: ReduceAction1 < ReduceAction1: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction1 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction1 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction1 < ReduceAction1: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction1::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1[] = "init var of ReduceAction1";
+void INIT_ATTRIBUTES__parser___ReduceAction1(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction1(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction1[] = "check new ReduceAction1";
+void CHECKNEW_parser___ReduceAction1(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction1_parser___ReduceAction___init[] = "new ReduceAction1 parser::ReduceAction::init";
+val_t NEW_ReduceAction1_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1();
+  INIT_ATTRIBUTES__parser___ReduceAction1(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction1(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction2[55] = {
+  {(bigint) 2427 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction2" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction2 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction2 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2427 /* 5: ReduceAction2 < ReduceAction2: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction2 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction2 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction2___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction2 < ReduceAction2: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction2::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction2[] = "init var of ReduceAction2";
+void INIT_ATTRIBUTES__parser___ReduceAction2(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction2;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction2(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction2;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction2[] = "check new ReduceAction2";
+void CHECKNEW_parser___ReduceAction2(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction2;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction2_parser___ReduceAction___init[] = "new ReduceAction2 parser::ReduceAction::init";
+val_t NEW_ReduceAction2_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction2_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction2();
+  INIT_ATTRIBUTES__parser___ReduceAction2(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction2(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction3[55] = {
+  {(bigint) 1983 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction3" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction3 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction3 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1983 /* 5: ReduceAction3 < ReduceAction3: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction3 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction3 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction3___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction3 < ReduceAction3: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction3::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction3[] = "init var of ReduceAction3";
+void INIT_ATTRIBUTES__parser___ReduceAction3(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction3;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction3(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction3;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction3[] = "check new ReduceAction3";
+void CHECKNEW_parser___ReduceAction3(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction3;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction3_parser___ReduceAction___init[] = "new ReduceAction3 parser::ReduceAction::init";
+val_t NEW_ReduceAction3_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction3_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction3();
+  INIT_ATTRIBUTES__parser___ReduceAction3(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction3(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction4[55] = {
+  {(bigint) 1547 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction4" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction4 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction4 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1547 /* 5: ReduceAction4 < ReduceAction4: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction4 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction4 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction4___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction4 < ReduceAction4: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction4::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction4[] = "init var of ReduceAction4";
+void INIT_ATTRIBUTES__parser___ReduceAction4(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction4;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction4(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction4;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction4[] = "check new ReduceAction4";
+void CHECKNEW_parser___ReduceAction4(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction4;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction4_parser___ReduceAction___init[] = "new ReduceAction4 parser::ReduceAction::init";
+val_t NEW_ReduceAction4_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction4_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction4();
+  INIT_ATTRIBUTES__parser___ReduceAction4(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction4(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction5[55] = {
+  {(bigint) 1143 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction5" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction5 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction5 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1143 /* 5: ReduceAction5 < ReduceAction5: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction5 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction5 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction5___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction5 < ReduceAction5: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction5::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction5[] = "init var of ReduceAction5";
+void INIT_ATTRIBUTES__parser___ReduceAction5(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction5;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction5(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction5;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction5[] = "check new ReduceAction5";
+void CHECKNEW_parser___ReduceAction5(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction5;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction5_parser___ReduceAction___init[] = "new ReduceAction5 parser::ReduceAction::init";
+val_t NEW_ReduceAction5_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction5_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction5();
+  INIT_ATTRIBUTES__parser___ReduceAction5(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction5(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction6[55] = {
+  {(bigint) 783 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction6" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction6 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction6 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 783 /* 5: ReduceAction6 < ReduceAction6: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction6 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction6 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction6___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction6 < ReduceAction6: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction6::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction6[] = "init var of ReduceAction6";
+void INIT_ATTRIBUTES__parser___ReduceAction6(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction6;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction6(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction6;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction6[] = "check new ReduceAction6";
+void CHECKNEW_parser___ReduceAction6(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction6;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction6_parser___ReduceAction___init[] = "new ReduceAction6 parser::ReduceAction::init";
+val_t NEW_ReduceAction6_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction6_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction6();
+  INIT_ATTRIBUTES__parser___ReduceAction6(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction6(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction7[55] = {
+  {(bigint) 527 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction7" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction7 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction7 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 527 /* 5: ReduceAction7 < ReduceAction7: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction7 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction7 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction7___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction7 < ReduceAction7: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction7::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction7[] = "init var of ReduceAction7";
+void INIT_ATTRIBUTES__parser___ReduceAction7(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction7;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction7(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction7;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction7[] = "check new ReduceAction7";
+void CHECKNEW_parser___ReduceAction7(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction7;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction7_parser___ReduceAction___init[] = "new ReduceAction7 parser::ReduceAction::init";
+val_t NEW_ReduceAction7_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction7_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction7();
+  INIT_ATTRIBUTES__parser___ReduceAction7(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction7(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction8[55] = {
+  {(bigint) 487 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction8" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction8 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction8 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 487 /* 5: ReduceAction8 < ReduceAction8: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction8 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction8 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction8___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction8 < ReduceAction8: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction8::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction8[] = "init var of ReduceAction8";
+void INIT_ATTRIBUTES__parser___ReduceAction8(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction8;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction8(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction8;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction8[] = "check new ReduceAction8";
+void CHECKNEW_parser___ReduceAction8(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction8;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction8_parser___ReduceAction___init[] = "new ReduceAction8 parser::ReduceAction::init";
+val_t NEW_ReduceAction8_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction8_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction8();
+  INIT_ATTRIBUTES__parser___ReduceAction8(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction8(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction9[55] = {
+  {(bigint) 443 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction9" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction9 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction9 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 443 /* 5: ReduceAction9 < ReduceAction9: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction9 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction9 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction9___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction9 < ReduceAction9: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction9::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction9[] = "init var of ReduceAction9";
+void INIT_ATTRIBUTES__parser___ReduceAction9(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction9;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction9(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction9;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction9[] = "check new ReduceAction9";
+void CHECKNEW_parser___ReduceAction9(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction9;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction9_parser___ReduceAction___init[] = "new ReduceAction9 parser::ReduceAction::init";
+val_t NEW_ReduceAction9_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction9_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction9();
+  INIT_ATTRIBUTES__parser___ReduceAction9(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction9(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction10[55] = {
+  {(bigint) 2983 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction10" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction10 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction10 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2983 /* 5: ReduceAction10 < ReduceAction10: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction10 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction10 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction10___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction10 < ReduceAction10: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction10::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction10[] = "init var of ReduceAction10";
+void INIT_ATTRIBUTES__parser___ReduceAction10(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction10;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction10(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction10;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction10[] = "check new ReduceAction10";
+void CHECKNEW_parser___ReduceAction10(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction10;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction10_parser___ReduceAction___init[] = "new ReduceAction10 parser::ReduceAction::init";
+val_t NEW_ReduceAction10_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction10_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction10();
+  INIT_ATTRIBUTES__parser___ReduceAction10(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction10(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction11[55] = {
+  {(bigint) 2939 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction11" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction11 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction11 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2939 /* 5: ReduceAction11 < ReduceAction11: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction11 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction11 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction11___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction11 < ReduceAction11: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction11::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction11[] = "init var of ReduceAction11";
+void INIT_ATTRIBUTES__parser___ReduceAction11(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction11;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction11(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction11;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction11[] = "check new ReduceAction11";
+void CHECKNEW_parser___ReduceAction11(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction11;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction11_parser___ReduceAction___init[] = "new ReduceAction11 parser::ReduceAction::init";
+val_t NEW_ReduceAction11_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction11_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction11();
+  INIT_ATTRIBUTES__parser___ReduceAction11(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction11(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction12[55] = {
+  {(bigint) 2895 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction12" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction12 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction12 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2895 /* 5: ReduceAction12 < ReduceAction12: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction12 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction12 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction12___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction12 < ReduceAction12: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction12::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction12[] = "init var of ReduceAction12";
+void INIT_ATTRIBUTES__parser___ReduceAction12(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction12;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction12(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction12;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction12[] = "check new ReduceAction12";
+void CHECKNEW_parser___ReduceAction12(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction12;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction12_parser___ReduceAction___init[] = "new ReduceAction12 parser::ReduceAction::init";
+val_t NEW_ReduceAction12_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction12_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction12();
+  INIT_ATTRIBUTES__parser___ReduceAction12(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction12(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction13[55] = {
+  {(bigint) 2735 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction13" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction13 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction13 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2735 /* 5: ReduceAction13 < ReduceAction13: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction13 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction13 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction13___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction13 < ReduceAction13: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction13::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction13[] = "init var of ReduceAction13";
+void INIT_ATTRIBUTES__parser___ReduceAction13(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction13;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction13(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction13;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction13[] = "check new ReduceAction13";
+void CHECKNEW_parser___ReduceAction13(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction13;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction13_parser___ReduceAction___init[] = "new ReduceAction13 parser::ReduceAction::init";
+val_t NEW_ReduceAction13_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction13_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction13();
+  INIT_ATTRIBUTES__parser___ReduceAction13(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction13(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction14[55] = {
+  {(bigint) 2691 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction14" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction14 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction14 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2691 /* 5: ReduceAction14 < ReduceAction14: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction14 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction14 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction14___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction14 < ReduceAction14: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction14::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction14[] = "init var of ReduceAction14";
+void INIT_ATTRIBUTES__parser___ReduceAction14(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction14;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction14(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction14;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction14[] = "check new ReduceAction14";
+void CHECKNEW_parser___ReduceAction14(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction14;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction14_parser___ReduceAction___init[] = "new ReduceAction14 parser::ReduceAction::init";
+val_t NEW_ReduceAction14_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction14_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction14();
+  INIT_ATTRIBUTES__parser___ReduceAction14(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction14(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction15[55] = {
+  {(bigint) 2647 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction15" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction15 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction15 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2647 /* 5: ReduceAction15 < ReduceAction15: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction15 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction15 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction15___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction15 < ReduceAction15: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction15::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction15[] = "init var of ReduceAction15";
+void INIT_ATTRIBUTES__parser___ReduceAction15(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction15;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction15(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction15;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction15[] = "check new ReduceAction15";
+void CHECKNEW_parser___ReduceAction15(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction15;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction15_parser___ReduceAction___init[] = "new ReduceAction15 parser::ReduceAction::init";
+val_t NEW_ReduceAction15_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction15_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction15();
+  INIT_ATTRIBUTES__parser___ReduceAction15(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction15(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction16[55] = {
+  {(bigint) 2603 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction16" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction16 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction16 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2603 /* 5: ReduceAction16 < ReduceAction16: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction16 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction16 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction16___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction16 < ReduceAction16: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction16::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction16[] = "init var of ReduceAction16";
+void INIT_ATTRIBUTES__parser___ReduceAction16(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction16;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction16(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction16;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction16[] = "check new ReduceAction16";
+void CHECKNEW_parser___ReduceAction16(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction16;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction16_parser___ReduceAction___init[] = "new ReduceAction16 parser::ReduceAction::init";
+val_t NEW_ReduceAction16_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction16_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction16();
+  INIT_ATTRIBUTES__parser___ReduceAction16(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction16(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction17[55] = {
+  {(bigint) 2559 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction17" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction17 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction17 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2559 /* 5: ReduceAction17 < ReduceAction17: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction17 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction17 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction17___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction17 < ReduceAction17: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction17::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction17[] = "init var of ReduceAction17";
+void INIT_ATTRIBUTES__parser___ReduceAction17(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction17;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction17(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction17;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction17[] = "check new ReduceAction17";
+void CHECKNEW_parser___ReduceAction17(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction17;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction17_parser___ReduceAction___init[] = "new ReduceAction17 parser::ReduceAction::init";
+val_t NEW_ReduceAction17_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction17_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction17();
+  INIT_ATTRIBUTES__parser___ReduceAction17(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction17(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction18[55] = {
+  {(bigint) 2515 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction18" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction18 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction18 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2515 /* 5: ReduceAction18 < ReduceAction18: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction18 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction18 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction18___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction18 < ReduceAction18: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction18::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction18[] = "init var of ReduceAction18";
+void INIT_ATTRIBUTES__parser___ReduceAction18(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction18;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction18(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction18;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction18[] = "check new ReduceAction18";
+void CHECKNEW_parser___ReduceAction18(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction18;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction18_parser___ReduceAction___init[] = "new ReduceAction18 parser::ReduceAction::init";
+val_t NEW_ReduceAction18_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction18_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction18();
+  INIT_ATTRIBUTES__parser___ReduceAction18(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction18(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction19[55] = {
+  {(bigint) 2471 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction19" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction19 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction19 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2471 /* 5: ReduceAction19 < ReduceAction19: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction19 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction19 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction19___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction19 < ReduceAction19: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction19::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction19[] = "init var of ReduceAction19";
+void INIT_ATTRIBUTES__parser___ReduceAction19(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction19;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction19(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction19;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction19[] = "check new ReduceAction19";
+void CHECKNEW_parser___ReduceAction19(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction19;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction19_parser___ReduceAction___init[] = "new ReduceAction19 parser::ReduceAction::init";
+val_t NEW_ReduceAction19_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction19_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction19();
+  INIT_ATTRIBUTES__parser___ReduceAction19(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction19(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction20[55] = {
+  {(bigint) 2423 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction20" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction20 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction20 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2423 /* 5: ReduceAction20 < ReduceAction20: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction20 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction20 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction20___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction20 < ReduceAction20: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction20::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction20[] = "init var of ReduceAction20";
+void INIT_ATTRIBUTES__parser___ReduceAction20(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction20;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction20(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction20;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction20[] = "check new ReduceAction20";
+void CHECKNEW_parser___ReduceAction20(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction20;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction20_parser___ReduceAction___init[] = "new ReduceAction20 parser::ReduceAction::init";
+val_t NEW_ReduceAction20_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction20_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction20();
+  INIT_ATTRIBUTES__parser___ReduceAction20(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction20(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction21[55] = {
+  {(bigint) 2379 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction21" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction21 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction21 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2379 /* 5: ReduceAction21 < ReduceAction21: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction21 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction21 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction21___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction21 < ReduceAction21: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction21::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction21[] = "init var of ReduceAction21";
+void INIT_ATTRIBUTES__parser___ReduceAction21(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction21;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction21(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction21;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction21[] = "check new ReduceAction21";
+void CHECKNEW_parser___ReduceAction21(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction21;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction21_parser___ReduceAction___init[] = "new ReduceAction21 parser::ReduceAction::init";
+val_t NEW_ReduceAction21_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction21_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction21();
+  INIT_ATTRIBUTES__parser___ReduceAction21(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction21(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction22[55] = {
+  {(bigint) 2335 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction22" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction22 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction22 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2335 /* 5: ReduceAction22 < ReduceAction22: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction22 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction22 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction22___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction22 < ReduceAction22: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction22::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction22[] = "init var of ReduceAction22";
+void INIT_ATTRIBUTES__parser___ReduceAction22(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction22;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction22(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction22;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction22[] = "check new ReduceAction22";
+void CHECKNEW_parser___ReduceAction22(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction22;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction22_parser___ReduceAction___init[] = "new ReduceAction22 parser::ReduceAction::init";
+val_t NEW_ReduceAction22_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction22_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction22();
+  INIT_ATTRIBUTES__parser___ReduceAction22(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction22(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction23[55] = {
+  {(bigint) 2291 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction23" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction23 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction23 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2291 /* 5: ReduceAction23 < ReduceAction23: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction23 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction23 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction23___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction23 < ReduceAction23: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction23::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction23[] = "init var of ReduceAction23";
+void INIT_ATTRIBUTES__parser___ReduceAction23(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction23;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction23(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction23;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction23[] = "check new ReduceAction23";
+void CHECKNEW_parser___ReduceAction23(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction23;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction23_parser___ReduceAction___init[] = "new ReduceAction23 parser::ReduceAction::init";
+val_t NEW_ReduceAction23_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction23_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction23();
+  INIT_ATTRIBUTES__parser___ReduceAction23(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction23(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction24[55] = {
+  {(bigint) 2247 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction24" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction24 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction24 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2247 /* 5: ReduceAction24 < ReduceAction24: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction24 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction24 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction24___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction24 < ReduceAction24: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction24::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction24[] = "init var of ReduceAction24";
+void INIT_ATTRIBUTES__parser___ReduceAction24(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction24;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction24(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction24;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction24[] = "check new ReduceAction24";
+void CHECKNEW_parser___ReduceAction24(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction24;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction24_parser___ReduceAction___init[] = "new ReduceAction24 parser::ReduceAction::init";
+val_t NEW_ReduceAction24_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction24_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction24();
+  INIT_ATTRIBUTES__parser___ReduceAction24(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction24(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction25[55] = {
+  {(bigint) 2203 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction25" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction25 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction25 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2203 /* 5: ReduceAction25 < ReduceAction25: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction25 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction25 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction25___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction25 < ReduceAction25: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction25::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction25[] = "init var of ReduceAction25";
+void INIT_ATTRIBUTES__parser___ReduceAction25(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction25;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction25(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction25;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction25[] = "check new ReduceAction25";
+void CHECKNEW_parser___ReduceAction25(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction25;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction25_parser___ReduceAction___init[] = "new ReduceAction25 parser::ReduceAction::init";
+val_t NEW_ReduceAction25_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction25_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction25();
+  INIT_ATTRIBUTES__parser___ReduceAction25(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction25(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction26[55] = {
+  {(bigint) 2159 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction26" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction26 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction26 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2159 /* 5: ReduceAction26 < ReduceAction26: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction26 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction26 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction26___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction26 < ReduceAction26: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction26::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction26[] = "init var of ReduceAction26";
+void INIT_ATTRIBUTES__parser___ReduceAction26(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction26;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction26(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction26;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction26[] = "check new ReduceAction26";
+void CHECKNEW_parser___ReduceAction26(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction26;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction26_parser___ReduceAction___init[] = "new ReduceAction26 parser::ReduceAction::init";
+val_t NEW_ReduceAction26_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction26_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction26();
+  INIT_ATTRIBUTES__parser___ReduceAction26(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction26(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction27[55] = {
+  {(bigint) 2115 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction27" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction27 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction27 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2115 /* 5: ReduceAction27 < ReduceAction27: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction27 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction27 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction27___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction27 < ReduceAction27: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction27::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction27[] = "init var of ReduceAction27";
+void INIT_ATTRIBUTES__parser___ReduceAction27(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction27;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction27(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction27;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction27[] = "check new ReduceAction27";
+void CHECKNEW_parser___ReduceAction27(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction27;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction27_parser___ReduceAction___init[] = "new ReduceAction27 parser::ReduceAction::init";
+val_t NEW_ReduceAction27_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction27_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction27();
+  INIT_ATTRIBUTES__parser___ReduceAction27(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction27(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction28[55] = {
+  {(bigint) 2071 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction28" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction28 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction28 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2071 /* 5: ReduceAction28 < ReduceAction28: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction28 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction28 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction28___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction28 < ReduceAction28: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction28::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction28[] = "init var of ReduceAction28";
+void INIT_ATTRIBUTES__parser___ReduceAction28(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction28;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction28(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction28;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction28[] = "check new ReduceAction28";
+void CHECKNEW_parser___ReduceAction28(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction28;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction28_parser___ReduceAction___init[] = "new ReduceAction28 parser::ReduceAction::init";
+val_t NEW_ReduceAction28_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction28_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction28();
+  INIT_ATTRIBUTES__parser___ReduceAction28(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction28(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction29[55] = {
+  {(bigint) 2027 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction29" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction29 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction29 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2027 /* 5: ReduceAction29 < ReduceAction29: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction29 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction29 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction29___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction29 < ReduceAction29: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction29::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction29[] = "init var of ReduceAction29";
+void INIT_ATTRIBUTES__parser___ReduceAction29(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction29;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction29(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction29;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction29[] = "check new ReduceAction29";
+void CHECKNEW_parser___ReduceAction29(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction29;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction29_parser___ReduceAction___init[] = "new ReduceAction29 parser::ReduceAction::init";
+val_t NEW_ReduceAction29_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction29_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction29();
+  INIT_ATTRIBUTES__parser___ReduceAction29(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction29(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction30[55] = {
+  {(bigint) 1979 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction30" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction30 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction30 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1979 /* 5: ReduceAction30 < ReduceAction30: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction30 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction30 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction30___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction30 < ReduceAction30: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction30::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction30[] = "init var of ReduceAction30";
+void INIT_ATTRIBUTES__parser___ReduceAction30(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction30;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction30(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction30;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction30[] = "check new ReduceAction30";
+void CHECKNEW_parser___ReduceAction30(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction30;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction30_parser___ReduceAction___init[] = "new ReduceAction30 parser::ReduceAction::init";
+val_t NEW_ReduceAction30_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction30_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction30();
+  INIT_ATTRIBUTES__parser___ReduceAction30(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction30(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction31[55] = {
+  {(bigint) 1935 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction31" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction31 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction31 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1935 /* 5: ReduceAction31 < ReduceAction31: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction31 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction31 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction31___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction31 < ReduceAction31: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction31::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction31[] = "init var of ReduceAction31";
+void INIT_ATTRIBUTES__parser___ReduceAction31(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction31;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction31(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction31;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction31[] = "check new ReduceAction31";
+void CHECKNEW_parser___ReduceAction31(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction31;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction31_parser___ReduceAction___init[] = "new ReduceAction31 parser::ReduceAction::init";
+val_t NEW_ReduceAction31_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction31_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction31();
+  INIT_ATTRIBUTES__parser___ReduceAction31(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction31(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction32[55] = {
+  {(bigint) 1891 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction32" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction32 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction32 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1891 /* 5: ReduceAction32 < ReduceAction32: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction32 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction32 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction32___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction32 < ReduceAction32: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction32::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction32[] = "init var of ReduceAction32";
+void INIT_ATTRIBUTES__parser___ReduceAction32(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction32;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction32(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction32;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction32[] = "check new ReduceAction32";
+void CHECKNEW_parser___ReduceAction32(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction32;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction32_parser___ReduceAction___init[] = "new ReduceAction32 parser::ReduceAction::init";
+val_t NEW_ReduceAction32_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction32_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction32();
+  INIT_ATTRIBUTES__parser___ReduceAction32(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction32(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction33[55] = {
+  {(bigint) 1851 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction33" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction33 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction33 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1851 /* 5: ReduceAction33 < ReduceAction33: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction33 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction33 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction33___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction33 < ReduceAction33: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction33::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction33[] = "init var of ReduceAction33";
+void INIT_ATTRIBUTES__parser___ReduceAction33(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction33;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction33(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction33;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction33[] = "check new ReduceAction33";
+void CHECKNEW_parser___ReduceAction33(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction33;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction33_parser___ReduceAction___init[] = "new ReduceAction33 parser::ReduceAction::init";
+val_t NEW_ReduceAction33_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction33_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction33();
+  INIT_ATTRIBUTES__parser___ReduceAction33(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction33(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction34[55] = {
+  {(bigint) 1807 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction34" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction34 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction34 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1807 /* 5: ReduceAction34 < ReduceAction34: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction34 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction34 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction34___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction34 < ReduceAction34: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction34::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction34[] = "init var of ReduceAction34";
+void INIT_ATTRIBUTES__parser___ReduceAction34(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction34;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction34(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction34;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction34[] = "check new ReduceAction34";
+void CHECKNEW_parser___ReduceAction34(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction34;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction34_parser___ReduceAction___init[] = "new ReduceAction34 parser::ReduceAction::init";
+val_t NEW_ReduceAction34_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction34_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction34();
+  INIT_ATTRIBUTES__parser___ReduceAction34(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction34(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction35[55] = {
+  {(bigint) 1763 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction35" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction35 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction35 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1763 /* 5: ReduceAction35 < ReduceAction35: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction35 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction35 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction35___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction35 < ReduceAction35: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction35::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction35[] = "init var of ReduceAction35";
+void INIT_ATTRIBUTES__parser___ReduceAction35(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction35;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction35(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction35;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction35[] = "check new ReduceAction35";
+void CHECKNEW_parser___ReduceAction35(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction35;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction35_parser___ReduceAction___init[] = "new ReduceAction35 parser::ReduceAction::init";
+val_t NEW_ReduceAction35_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction35_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction35();
+  INIT_ATTRIBUTES__parser___ReduceAction35(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction35(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction36[55] = {
+  {(bigint) 1719 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction36" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction36 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction36 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1719 /* 5: ReduceAction36 < ReduceAction36: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction36 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction36 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction36___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction36 < ReduceAction36: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction36::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction36[] = "init var of ReduceAction36";
+void INIT_ATTRIBUTES__parser___ReduceAction36(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction36;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction36(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction36;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction36[] = "check new ReduceAction36";
+void CHECKNEW_parser___ReduceAction36(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction36;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction36_parser___ReduceAction___init[] = "new ReduceAction36 parser::ReduceAction::init";
+val_t NEW_ReduceAction36_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction36_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction36();
+  INIT_ATTRIBUTES__parser___ReduceAction36(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction36(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction37[55] = {
+  {(bigint) 1675 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction37" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction37 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction37 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1675 /* 5: ReduceAction37 < ReduceAction37: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction37 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction37 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction37___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction37 < ReduceAction37: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction37::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction37[] = "init var of ReduceAction37";
+void INIT_ATTRIBUTES__parser___ReduceAction37(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction37;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction37(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction37;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction37[] = "check new ReduceAction37";
+void CHECKNEW_parser___ReduceAction37(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction37;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction37_parser___ReduceAction___init[] = "new ReduceAction37 parser::ReduceAction::init";
+val_t NEW_ReduceAction37_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction37_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction37();
+  INIT_ATTRIBUTES__parser___ReduceAction37(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction37(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction38[55] = {
+  {(bigint) 1631 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction38" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction38 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction38 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1631 /* 5: ReduceAction38 < ReduceAction38: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction38 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction38 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction38___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction38 < ReduceAction38: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction38::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction38[] = "init var of ReduceAction38";
+void INIT_ATTRIBUTES__parser___ReduceAction38(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction38;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction38(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction38;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction38[] = "check new ReduceAction38";
+void CHECKNEW_parser___ReduceAction38(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction38;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction38_parser___ReduceAction___init[] = "new ReduceAction38 parser::ReduceAction::init";
+val_t NEW_ReduceAction38_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction38_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction38();
+  INIT_ATTRIBUTES__parser___ReduceAction38(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction38(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction39[55] = {
+  {(bigint) 1587 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction39" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction39 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction39 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1587 /* 5: ReduceAction39 < ReduceAction39: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction39 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction39 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction39___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction39 < ReduceAction39: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction39::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction39[] = "init var of ReduceAction39";
+void INIT_ATTRIBUTES__parser___ReduceAction39(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction39;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction39(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction39;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction39[] = "check new ReduceAction39";
+void CHECKNEW_parser___ReduceAction39(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction39;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction39_parser___ReduceAction___init[] = "new ReduceAction39 parser::ReduceAction::init";
+val_t NEW_ReduceAction39_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction39_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction39();
+  INIT_ATTRIBUTES__parser___ReduceAction39(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction39(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction40[55] = {
+  {(bigint) 1543 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction40" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction40 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction40 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1543 /* 5: ReduceAction40 < ReduceAction40: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction40 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction40 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction40___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction40 < ReduceAction40: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction40::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction40[] = "init var of ReduceAction40";
+void INIT_ATTRIBUTES__parser___ReduceAction40(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction40;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction40(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction40;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction40[] = "check new ReduceAction40";
+void CHECKNEW_parser___ReduceAction40(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction40;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction40_parser___ReduceAction___init[] = "new ReduceAction40 parser::ReduceAction::init";
+val_t NEW_ReduceAction40_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction40_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction40();
+  INIT_ATTRIBUTES__parser___ReduceAction40(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction40(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction41[55] = {
+  {(bigint) 1499 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction41" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction41 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction41 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1499 /* 5: ReduceAction41 < ReduceAction41: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction41 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction41 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction41___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction41 < ReduceAction41: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction41::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction41[] = "init var of ReduceAction41";
+void INIT_ATTRIBUTES__parser___ReduceAction41(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction41;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction41(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction41;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction41[] = "check new ReduceAction41";
+void CHECKNEW_parser___ReduceAction41(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction41;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction41_parser___ReduceAction___init[] = "new ReduceAction41 parser::ReduceAction::init";
+val_t NEW_ReduceAction41_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction41_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction41();
+  INIT_ATTRIBUTES__parser___ReduceAction41(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction41(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction42[55] = {
+  {(bigint) 1459 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction42" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction42 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction42 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1459 /* 5: ReduceAction42 < ReduceAction42: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction42 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction42 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction42___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction42 < ReduceAction42: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction42::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction42[] = "init var of ReduceAction42";
+void INIT_ATTRIBUTES__parser___ReduceAction42(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction42;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction42(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction42;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction42[] = "check new ReduceAction42";
+void CHECKNEW_parser___ReduceAction42(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction42;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction42_parser___ReduceAction___init[] = "new ReduceAction42 parser::ReduceAction::init";
+val_t NEW_ReduceAction42_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction42_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction42();
+  INIT_ATTRIBUTES__parser___ReduceAction42(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction42(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction43[55] = {
+  {(bigint) 1427 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction43" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction43 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction43 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1427 /* 5: ReduceAction43 < ReduceAction43: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction43 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction43 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction43___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction43 < ReduceAction43: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction43::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction43[] = "init var of ReduceAction43";
+void INIT_ATTRIBUTES__parser___ReduceAction43(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction43;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction43(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction43;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction43[] = "check new ReduceAction43";
+void CHECKNEW_parser___ReduceAction43(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction43;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction43_parser___ReduceAction___init[] = "new ReduceAction43 parser::ReduceAction::init";
+val_t NEW_ReduceAction43_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction43_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction43();
+  INIT_ATTRIBUTES__parser___ReduceAction43(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction43(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction44[55] = {
+  {(bigint) 1383 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction44" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction44 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction44 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1383 /* 5: ReduceAction44 < ReduceAction44: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction44 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction44 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction44___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction44 < ReduceAction44: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction44::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction44[] = "init var of ReduceAction44";
+void INIT_ATTRIBUTES__parser___ReduceAction44(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction44;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction44(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction44;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction44[] = "check new ReduceAction44";
+void CHECKNEW_parser___ReduceAction44(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction44;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction44_parser___ReduceAction___init[] = "new ReduceAction44 parser::ReduceAction::init";
+val_t NEW_ReduceAction44_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction44_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction44();
+  INIT_ATTRIBUTES__parser___ReduceAction44(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction44(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction45[55] = {
+  {(bigint) 1363 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction45" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction45 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction45 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1363 /* 5: ReduceAction45 < ReduceAction45: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction45 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction45 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction45___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction45 < ReduceAction45: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction45::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction45[] = "init var of ReduceAction45";
+void INIT_ATTRIBUTES__parser___ReduceAction45(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction45;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction45(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction45;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction45[] = "check new ReduceAction45";
+void CHECKNEW_parser___ReduceAction45(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction45;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction45_parser___ReduceAction___init[] = "new ReduceAction45 parser::ReduceAction::init";
+val_t NEW_ReduceAction45_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction45_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction45();
+  INIT_ATTRIBUTES__parser___ReduceAction45(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction45(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction46[55] = {
+  {(bigint) 1319 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction46" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction46 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction46 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1319 /* 5: ReduceAction46 < ReduceAction46: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction46 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction46 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction46___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction46 < ReduceAction46: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction46::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction46[] = "init var of ReduceAction46";
+void INIT_ATTRIBUTES__parser___ReduceAction46(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction46;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction46(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction46;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction46[] = "check new ReduceAction46";
+void CHECKNEW_parser___ReduceAction46(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction46;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction46_parser___ReduceAction___init[] = "new ReduceAction46 parser::ReduceAction::init";
+val_t NEW_ReduceAction46_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction46_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction46();
+  INIT_ATTRIBUTES__parser___ReduceAction46(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction46(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction47[55] = {
+  {(bigint) 1275 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction47" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction47 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction47 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1275 /* 5: ReduceAction47 < ReduceAction47: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction47 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction47 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction47___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction47 < ReduceAction47: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction47::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction47[] = "init var of ReduceAction47";
+void INIT_ATTRIBUTES__parser___ReduceAction47(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction47;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction47(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction47;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction47[] = "check new ReduceAction47";
+void CHECKNEW_parser___ReduceAction47(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction47;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction47_parser___ReduceAction___init[] = "new ReduceAction47 parser::ReduceAction::init";
+val_t NEW_ReduceAction47_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction47_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction47();
+  INIT_ATTRIBUTES__parser___ReduceAction47(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction47(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction48[55] = {
+  {(bigint) 1231 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction48" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction48 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction48 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1231 /* 5: ReduceAction48 < ReduceAction48: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction48 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction48 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction48___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction48 < ReduceAction48: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction48::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction48[] = "init var of ReduceAction48";
+void INIT_ATTRIBUTES__parser___ReduceAction48(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction48;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction48(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction48;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction48[] = "check new ReduceAction48";
+void CHECKNEW_parser___ReduceAction48(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction48;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction48_parser___ReduceAction___init[] = "new ReduceAction48 parser::ReduceAction::init";
+val_t NEW_ReduceAction48_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction48_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction48();
+  INIT_ATTRIBUTES__parser___ReduceAction48(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction48(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction49[55] = {
+  {(bigint) 1187 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction49" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction49 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction49 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1187 /* 5: ReduceAction49 < ReduceAction49: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction49 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction49 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction49___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction49 < ReduceAction49: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction49::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction49[] = "init var of ReduceAction49";
+void INIT_ATTRIBUTES__parser___ReduceAction49(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction49;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction49(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction49;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction49[] = "check new ReduceAction49";
+void CHECKNEW_parser___ReduceAction49(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction49;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction49_parser___ReduceAction___init[] = "new ReduceAction49 parser::ReduceAction::init";
+val_t NEW_ReduceAction49_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction49_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction49();
+  INIT_ATTRIBUTES__parser___ReduceAction49(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction49(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction50[55] = {
+  {(bigint) 1139 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction50" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction50 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction50 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1139 /* 5: ReduceAction50 < ReduceAction50: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction50 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction50 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction50___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction50 < ReduceAction50: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction50::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction50[] = "init var of ReduceAction50";
+void INIT_ATTRIBUTES__parser___ReduceAction50(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction50;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction50(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction50;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction50[] = "check new ReduceAction50";
+void CHECKNEW_parser___ReduceAction50(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction50;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction50_parser___ReduceAction___init[] = "new ReduceAction50 parser::ReduceAction::init";
+val_t NEW_ReduceAction50_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction50_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction50();
+  INIT_ATTRIBUTES__parser___ReduceAction50(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction50(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction51[55] = {
+  {(bigint) 1103 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction51" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction51 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction51 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1103 /* 5: ReduceAction51 < ReduceAction51: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction51 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction51 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction51___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction51 < ReduceAction51: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction51::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction51[] = "init var of ReduceAction51";
+void INIT_ATTRIBUTES__parser___ReduceAction51(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction51;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction51(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction51;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction51[] = "check new ReduceAction51";
+void CHECKNEW_parser___ReduceAction51(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction51;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction51_parser___ReduceAction___init[] = "new ReduceAction51 parser::ReduceAction::init";
+val_t NEW_ReduceAction51_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction51_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction51();
+  INIT_ATTRIBUTES__parser___ReduceAction51(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction51(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction52[55] = {
+  {(bigint) 1067 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction52" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction52 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction52 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1067 /* 5: ReduceAction52 < ReduceAction52: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction52 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction52 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction52___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction52 < ReduceAction52: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction52::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction52[] = "init var of ReduceAction52";
+void INIT_ATTRIBUTES__parser___ReduceAction52(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction52;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction52(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction52;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction52[] = "check new ReduceAction52";
+void CHECKNEW_parser___ReduceAction52(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction52;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction52_parser___ReduceAction___init[] = "new ReduceAction52 parser::ReduceAction::init";
+val_t NEW_ReduceAction52_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction52_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction52();
+  INIT_ATTRIBUTES__parser___ReduceAction52(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction52(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction53[55] = {
+  {(bigint) 1039 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction53" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction53 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction53 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1039 /* 5: ReduceAction53 < ReduceAction53: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction53 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction53 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction53___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction53 < ReduceAction53: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction53::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction53[] = "init var of ReduceAction53";
+void INIT_ATTRIBUTES__parser___ReduceAction53(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction53;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction53(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction53;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction53[] = "check new ReduceAction53";
+void CHECKNEW_parser___ReduceAction53(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction53;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction53_parser___ReduceAction___init[] = "new ReduceAction53 parser::ReduceAction::init";
+val_t NEW_ReduceAction53_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction53_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction53();
+  INIT_ATTRIBUTES__parser___ReduceAction53(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction53(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction54[55] = {
+  {(bigint) 999 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction54" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction54 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction54 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 999 /* 5: ReduceAction54 < ReduceAction54: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction54 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction54 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction54___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction54 < ReduceAction54: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction54::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction54[] = "init var of ReduceAction54";
+void INIT_ATTRIBUTES__parser___ReduceAction54(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction54;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction54(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction54;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction54[] = "check new ReduceAction54";
+void CHECKNEW_parser___ReduceAction54(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction54;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction54_parser___ReduceAction___init[] = "new ReduceAction54 parser::ReduceAction::init";
+val_t NEW_ReduceAction54_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction54_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction54();
+  INIT_ATTRIBUTES__parser___ReduceAction54(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction54(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction55[55] = {
+  {(bigint) 967 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction55" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction55 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction55 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 967 /* 5: ReduceAction55 < ReduceAction55: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction55 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction55 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction55___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction55 < ReduceAction55: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction55::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction55[] = "init var of ReduceAction55";
+void INIT_ATTRIBUTES__parser___ReduceAction55(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction55;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction55(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction55;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction55[] = "check new ReduceAction55";
+void CHECKNEW_parser___ReduceAction55(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction55;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction55_parser___ReduceAction___init[] = "new ReduceAction55 parser::ReduceAction::init";
+val_t NEW_ReduceAction55_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction55_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction55();
+  INIT_ATTRIBUTES__parser___ReduceAction55(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction55(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction56[55] = {
+  {(bigint) 935 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction56" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction56 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction56 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 935 /* 5: ReduceAction56 < ReduceAction56: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction56 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction56 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction56___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction56 < ReduceAction56: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction56::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction56[] = "init var of ReduceAction56";
+void INIT_ATTRIBUTES__parser___ReduceAction56(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction56;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction56(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction56;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction56[] = "check new ReduceAction56";
+void CHECKNEW_parser___ReduceAction56(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction56;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction56_parser___ReduceAction___init[] = "new ReduceAction56 parser::ReduceAction::init";
+val_t NEW_ReduceAction56_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction56_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction56();
+  INIT_ATTRIBUTES__parser___ReduceAction56(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction56(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction57[55] = {
+  {(bigint) 907 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction57" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction57 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction57 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 907 /* 5: ReduceAction57 < ReduceAction57: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction57 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction57 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction57___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction57 < ReduceAction57: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction57::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction57[] = "init var of ReduceAction57";
+void INIT_ATTRIBUTES__parser___ReduceAction57(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction57;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction57(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction57;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction57[] = "check new ReduceAction57";
+void CHECKNEW_parser___ReduceAction57(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction57;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction57_parser___ReduceAction___init[] = "new ReduceAction57 parser::ReduceAction::init";
+val_t NEW_ReduceAction57_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction57_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction57();
+  INIT_ATTRIBUTES__parser___ReduceAction57(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction57(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction58[55] = {
+  {(bigint) 863 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction58" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction58 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction58 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 863 /* 5: ReduceAction58 < ReduceAction58: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction58 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction58 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction58___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction58 < ReduceAction58: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction58::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction58[] = "init var of ReduceAction58";
+void INIT_ATTRIBUTES__parser___ReduceAction58(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction58;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction58(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction58;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction58[] = "check new ReduceAction58";
+void CHECKNEW_parser___ReduceAction58(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction58;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction58_parser___ReduceAction___init[] = "new ReduceAction58 parser::ReduceAction::init";
+val_t NEW_ReduceAction58_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction58_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction58();
+  INIT_ATTRIBUTES__parser___ReduceAction58(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction58(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction59[55] = {
+  {(bigint) 823 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction59" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction59 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction59 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 823 /* 5: ReduceAction59 < ReduceAction59: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction59 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction59 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction59___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction59 < ReduceAction59: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction59::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction59[] = "init var of ReduceAction59";
+void INIT_ATTRIBUTES__parser___ReduceAction59(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction59;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction59(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction59;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction59[] = "check new ReduceAction59";
+void CHECKNEW_parser___ReduceAction59(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction59;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction59_parser___ReduceAction___init[] = "new ReduceAction59 parser::ReduceAction::init";
+val_t NEW_ReduceAction59_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction59_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction59();
+  INIT_ATTRIBUTES__parser___ReduceAction59(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction59(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction60[55] = {
+  {(bigint) 779 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction60" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction60 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction60 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 779 /* 5: ReduceAction60 < ReduceAction60: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction60 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction60 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction60___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction60 < ReduceAction60: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction60::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction60[] = "init var of ReduceAction60";
+void INIT_ATTRIBUTES__parser___ReduceAction60(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction60;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction60(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction60;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction60[] = "check new ReduceAction60";
+void CHECKNEW_parser___ReduceAction60(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction60;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction60_parser___ReduceAction___init[] = "new ReduceAction60 parser::ReduceAction::init";
+val_t NEW_ReduceAction60_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction60_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction60();
+  INIT_ATTRIBUTES__parser___ReduceAction60(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction60(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction61[55] = {
+  {(bigint) 735 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction61" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction61 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction61 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 735 /* 5: ReduceAction61 < ReduceAction61: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction61 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction61 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction61___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction61 < ReduceAction61: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction61::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction61[] = "init var of ReduceAction61";
+void INIT_ATTRIBUTES__parser___ReduceAction61(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction61;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction61(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction61;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction61[] = "check new ReduceAction61";
+void CHECKNEW_parser___ReduceAction61(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction61;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction61_parser___ReduceAction___init[] = "new ReduceAction61 parser::ReduceAction::init";
+val_t NEW_ReduceAction61_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction61_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction61();
+  INIT_ATTRIBUTES__parser___ReduceAction61(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction61(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction62[55] = {
+  {(bigint) 695 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction62" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction62 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction62 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 695 /* 5: ReduceAction62 < ReduceAction62: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction62 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction62 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction62___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction62 < ReduceAction62: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction62::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction62[] = "init var of ReduceAction62";
+void INIT_ATTRIBUTES__parser___ReduceAction62(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction62;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction62(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction62;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction62[] = "check new ReduceAction62";
+void CHECKNEW_parser___ReduceAction62(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction62;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction62_parser___ReduceAction___init[] = "new ReduceAction62 parser::ReduceAction::init";
+val_t NEW_ReduceAction62_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction62_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction62();
+  INIT_ATTRIBUTES__parser___ReduceAction62(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction62(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction63[55] = {
+  {(bigint) 655 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction63" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction63 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction63 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 655 /* 5: ReduceAction63 < ReduceAction63: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction63 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction63 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction63___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction63 < ReduceAction63: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction63::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction63[] = "init var of ReduceAction63";
+void INIT_ATTRIBUTES__parser___ReduceAction63(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction63;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction63(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction63;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction63[] = "check new ReduceAction63";
+void CHECKNEW_parser___ReduceAction63(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction63;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction63_parser___ReduceAction___init[] = "new ReduceAction63 parser::ReduceAction::init";
+val_t NEW_ReduceAction63_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction63_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction63();
+  INIT_ATTRIBUTES__parser___ReduceAction63(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction63(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction64[55] = {
+  {(bigint) 623 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction64" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction64 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction64 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 623 /* 5: ReduceAction64 < ReduceAction64: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction64 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction64 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction64___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction64 < ReduceAction64: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction64::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction64[] = "init var of ReduceAction64";
+void INIT_ATTRIBUTES__parser___ReduceAction64(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction64;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction64(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction64;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction64[] = "check new ReduceAction64";
+void CHECKNEW_parser___ReduceAction64(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction64;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction64_parser___ReduceAction___init[] = "new ReduceAction64 parser::ReduceAction::init";
+val_t NEW_ReduceAction64_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction64_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction64();
+  INIT_ATTRIBUTES__parser___ReduceAction64(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction64(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction65[55] = {
+  {(bigint) 579 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction65" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction65 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction65 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 579 /* 5: ReduceAction65 < ReduceAction65: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction65 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction65 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction65___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction65 < ReduceAction65: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction65::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction65[] = "init var of ReduceAction65";
+void INIT_ATTRIBUTES__parser___ReduceAction65(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction65;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction65(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction65;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction65[] = "check new ReduceAction65";
+void CHECKNEW_parser___ReduceAction65(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction65;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction65_parser___ReduceAction___init[] = "new ReduceAction65 parser::ReduceAction::init";
+val_t NEW_ReduceAction65_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction65_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction65();
+  INIT_ATTRIBUTES__parser___ReduceAction65(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction65(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction66[55] = {
+  {(bigint) 543 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction66" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction66 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction66 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 543 /* 5: ReduceAction66 < ReduceAction66: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction66 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction66 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction66___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction66 < ReduceAction66: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction66::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction66[] = "init var of ReduceAction66";
+void INIT_ATTRIBUTES__parser___ReduceAction66(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction66;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction66(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction66;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction66[] = "check new ReduceAction66";
+void CHECKNEW_parser___ReduceAction66(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction66;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction66_parser___ReduceAction___init[] = "new ReduceAction66 parser::ReduceAction::init";
+val_t NEW_ReduceAction66_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction66_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction66();
+  INIT_ATTRIBUTES__parser___ReduceAction66(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction66(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction67[55] = {
+  {(bigint) 539 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction67" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction67 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction67 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 539 /* 5: ReduceAction67 < ReduceAction67: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction67 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction67 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction67___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction67 < ReduceAction67: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction67::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction67[] = "init var of ReduceAction67";
+void INIT_ATTRIBUTES__parser___ReduceAction67(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction67;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction67(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction67;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction67[] = "check new ReduceAction67";
+void CHECKNEW_parser___ReduceAction67(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction67;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction67_parser___ReduceAction___init[] = "new ReduceAction67 parser::ReduceAction::init";
+val_t NEW_ReduceAction67_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction67_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction67();
+  INIT_ATTRIBUTES__parser___ReduceAction67(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction67(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction68[55] = {
+  {(bigint) 535 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction68" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction68 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction68 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 535 /* 5: ReduceAction68 < ReduceAction68: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction68 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction68 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction68___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction68 < ReduceAction68: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction68::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction68[] = "init var of ReduceAction68";
+void INIT_ATTRIBUTES__parser___ReduceAction68(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction68;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction68(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction68;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction68[] = "check new ReduceAction68";
+void CHECKNEW_parser___ReduceAction68(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction68;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction68_parser___ReduceAction___init[] = "new ReduceAction68 parser::ReduceAction::init";
+val_t NEW_ReduceAction68_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction68_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction68();
+  INIT_ATTRIBUTES__parser___ReduceAction68(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction68(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction69[55] = {
+  {(bigint) 531 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction69" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction69 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction69 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 531 /* 5: ReduceAction69 < ReduceAction69: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction69 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction69 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction69___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction69 < ReduceAction69: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction69::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction69[] = "init var of ReduceAction69";
+void INIT_ATTRIBUTES__parser___ReduceAction69(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction69;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction69(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction69;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction69[] = "check new ReduceAction69";
+void CHECKNEW_parser___ReduceAction69(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction69;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction69_parser___ReduceAction___init[] = "new ReduceAction69 parser::ReduceAction::init";
+val_t NEW_ReduceAction69_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction69_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction69();
+  INIT_ATTRIBUTES__parser___ReduceAction69(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction69(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction70[55] = {
+  {(bigint) 523 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction70" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction70 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction70 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 523 /* 5: ReduceAction70 < ReduceAction70: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction70 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction70 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction70___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction70 < ReduceAction70: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction70::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction70[] = "init var of ReduceAction70";
+void INIT_ATTRIBUTES__parser___ReduceAction70(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction70;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction70(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction70;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction70[] = "check new ReduceAction70";
+void CHECKNEW_parser___ReduceAction70(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction70;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction70_parser___ReduceAction___init[] = "new ReduceAction70 parser::ReduceAction::init";
+val_t NEW_ReduceAction70_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction70_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction70();
+  INIT_ATTRIBUTES__parser___ReduceAction70(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction70(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction71[55] = {
+  {(bigint) 519 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction71" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction71 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction71 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 519 /* 5: ReduceAction71 < ReduceAction71: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction71 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction71 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction71___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction71 < ReduceAction71: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction71::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction71[] = "init var of ReduceAction71";
+void INIT_ATTRIBUTES__parser___ReduceAction71(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction71;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction71(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction71;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction71[] = "check new ReduceAction71";
+void CHECKNEW_parser___ReduceAction71(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction71;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction71_parser___ReduceAction___init[] = "new ReduceAction71 parser::ReduceAction::init";
+val_t NEW_ReduceAction71_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction71_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction71();
+  INIT_ATTRIBUTES__parser___ReduceAction71(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction71(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction73[55] = {
+  {(bigint) 515 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction73" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction73 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction73 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 515 /* 5: ReduceAction73 < ReduceAction73: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction73 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction73 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction73___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction73 < ReduceAction73: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction73::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction73[] = "init var of ReduceAction73";
+void INIT_ATTRIBUTES__parser___ReduceAction73(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction73;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction73(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction73;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction73[] = "check new ReduceAction73";
+void CHECKNEW_parser___ReduceAction73(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction73;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction73_parser___ReduceAction___init[] = "new ReduceAction73 parser::ReduceAction::init";
+val_t NEW_ReduceAction73_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction73_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction73();
+  INIT_ATTRIBUTES__parser___ReduceAction73(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction73(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction74[55] = {
+  {(bigint) 511 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction74" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction74 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction74 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 511 /* 5: ReduceAction74 < ReduceAction74: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction74 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction74 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction74___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction74 < ReduceAction74: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction74::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction74[] = "init var of ReduceAction74";
+void INIT_ATTRIBUTES__parser___ReduceAction74(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction74;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction74(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction74;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction74[] = "check new ReduceAction74";
+void CHECKNEW_parser___ReduceAction74(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction74;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction74_parser___ReduceAction___init[] = "new ReduceAction74 parser::ReduceAction::init";
+val_t NEW_ReduceAction74_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction74_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction74();
+  INIT_ATTRIBUTES__parser___ReduceAction74(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction74(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction75[55] = {
+  {(bigint) 507 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction75" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction75 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction75 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 507 /* 5: ReduceAction75 < ReduceAction75: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction75 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction75 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction75___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction75 < ReduceAction75: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction75::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction75[] = "init var of ReduceAction75";
+void INIT_ATTRIBUTES__parser___ReduceAction75(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction75;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction75(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction75;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction75[] = "check new ReduceAction75";
+void CHECKNEW_parser___ReduceAction75(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction75;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction75_parser___ReduceAction___init[] = "new ReduceAction75 parser::ReduceAction::init";
+val_t NEW_ReduceAction75_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction75_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction75();
+  INIT_ATTRIBUTES__parser___ReduceAction75(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction75(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction76[55] = {
+  {(bigint) 503 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction76" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction76 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction76 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 503 /* 5: ReduceAction76 < ReduceAction76: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction76 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction76 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction76___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction76 < ReduceAction76: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction76::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction76[] = "init var of ReduceAction76";
+void INIT_ATTRIBUTES__parser___ReduceAction76(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction76;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction76(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction76;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction76[] = "check new ReduceAction76";
+void CHECKNEW_parser___ReduceAction76(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction76;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction76_parser___ReduceAction___init[] = "new ReduceAction76 parser::ReduceAction::init";
+val_t NEW_ReduceAction76_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction76_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction76();
+  INIT_ATTRIBUTES__parser___ReduceAction76(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction76(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction77[55] = {
+  {(bigint) 499 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction77" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction77 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction77 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 499 /* 5: ReduceAction77 < ReduceAction77: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction77 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction77 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction77___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction77 < ReduceAction77: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction77::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction77[] = "init var of ReduceAction77";
+void INIT_ATTRIBUTES__parser___ReduceAction77(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction77;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction77(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction77;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction77[] = "check new ReduceAction77";
+void CHECKNEW_parser___ReduceAction77(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction77;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction77_parser___ReduceAction___init[] = "new ReduceAction77 parser::ReduceAction::init";
+val_t NEW_ReduceAction77_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction77_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction77();
+  INIT_ATTRIBUTES__parser___ReduceAction77(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction77(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction78[55] = {
+  {(bigint) 495 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction78" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction78 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction78 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 495 /* 5: ReduceAction78 < ReduceAction78: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction78 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction78 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction78___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction78 < ReduceAction78: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction78::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction78[] = "init var of ReduceAction78";
+void INIT_ATTRIBUTES__parser___ReduceAction78(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction78;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction78(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction78;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction78[] = "check new ReduceAction78";
+void CHECKNEW_parser___ReduceAction78(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction78;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction78_parser___ReduceAction___init[] = "new ReduceAction78 parser::ReduceAction::init";
+val_t NEW_ReduceAction78_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction78_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction78();
+  INIT_ATTRIBUTES__parser___ReduceAction78(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction78(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction79[55] = {
+  {(bigint) 491 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction79" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction79 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction79 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 491 /* 5: ReduceAction79 < ReduceAction79: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction79 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction79 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction79___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction79 < ReduceAction79: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction79::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction79[] = "init var of ReduceAction79";
+void INIT_ATTRIBUTES__parser___ReduceAction79(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction79;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction79(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction79;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction79[] = "check new ReduceAction79";
+void CHECKNEW_parser___ReduceAction79(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction79;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction79_parser___ReduceAction___init[] = "new ReduceAction79 parser::ReduceAction::init";
+val_t NEW_ReduceAction79_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction79_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction79();
+  INIT_ATTRIBUTES__parser___ReduceAction79(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction79(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction80[55] = {
+  {(bigint) 483 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction80" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction80 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction80 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 483 /* 5: ReduceAction80 < ReduceAction80: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction80 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction80 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction80___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction80 < ReduceAction80: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction80::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction80[] = "init var of ReduceAction80";
+void INIT_ATTRIBUTES__parser___ReduceAction80(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction80;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction80(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction80;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction80[] = "check new ReduceAction80";
+void CHECKNEW_parser___ReduceAction80(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction80;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction80_parser___ReduceAction___init[] = "new ReduceAction80 parser::ReduceAction::init";
+val_t NEW_ReduceAction80_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction80_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction80();
+  INIT_ATTRIBUTES__parser___ReduceAction80(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction80(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction81[55] = {
+  {(bigint) 479 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction81" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction81 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction81 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 479 /* 5: ReduceAction81 < ReduceAction81: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction81 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction81 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction81___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction81 < ReduceAction81: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction81::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction81[] = "init var of ReduceAction81";
+void INIT_ATTRIBUTES__parser___ReduceAction81(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction81;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction81(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction81;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction81[] = "check new ReduceAction81";
+void CHECKNEW_parser___ReduceAction81(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction81;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction81_parser___ReduceAction___init[] = "new ReduceAction81 parser::ReduceAction::init";
+val_t NEW_ReduceAction81_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction81_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction81();
+  INIT_ATTRIBUTES__parser___ReduceAction81(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction81(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction82[55] = {
+  {(bigint) 475 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction82" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction82 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction82 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 475 /* 5: ReduceAction82 < ReduceAction82: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction82 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction82 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction82___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction82 < ReduceAction82: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction82::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction82[] = "init var of ReduceAction82";
+void INIT_ATTRIBUTES__parser___ReduceAction82(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction82;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction82(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction82;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction82[] = "check new ReduceAction82";
+void CHECKNEW_parser___ReduceAction82(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction82;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction82_parser___ReduceAction___init[] = "new ReduceAction82 parser::ReduceAction::init";
+val_t NEW_ReduceAction82_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction82_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction82();
+  INIT_ATTRIBUTES__parser___ReduceAction82(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction82(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction83[55] = {
+  {(bigint) 471 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction83" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction83 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction83 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 471 /* 5: ReduceAction83 < ReduceAction83: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction83 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction83 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction83___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction83 < ReduceAction83: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction83::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction83[] = "init var of ReduceAction83";
+void INIT_ATTRIBUTES__parser___ReduceAction83(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction83;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction83(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction83;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction83[] = "check new ReduceAction83";
+void CHECKNEW_parser___ReduceAction83(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction83;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction83_parser___ReduceAction___init[] = "new ReduceAction83 parser::ReduceAction::init";
+val_t NEW_ReduceAction83_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction83_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction83();
+  INIT_ATTRIBUTES__parser___ReduceAction83(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction83(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction84[55] = {
+  {(bigint) 467 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction84" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction84 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction84 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 467 /* 5: ReduceAction84 < ReduceAction84: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction84 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction84 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction84___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction84 < ReduceAction84: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction84::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction84[] = "init var of ReduceAction84";
+void INIT_ATTRIBUTES__parser___ReduceAction84(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction84;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction84(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction84;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction84[] = "check new ReduceAction84";
+void CHECKNEW_parser___ReduceAction84(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction84;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction84_parser___ReduceAction___init[] = "new ReduceAction84 parser::ReduceAction::init";
+val_t NEW_ReduceAction84_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction84_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction84();
+  INIT_ATTRIBUTES__parser___ReduceAction84(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction84(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction85[55] = {
+  {(bigint) 463 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction85" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction85 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction85 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 463 /* 5: ReduceAction85 < ReduceAction85: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction85 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction85 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction85___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction85 < ReduceAction85: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction85::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction85[] = "init var of ReduceAction85";
+void INIT_ATTRIBUTES__parser___ReduceAction85(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction85;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction85(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction85;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction85[] = "check new ReduceAction85";
+void CHECKNEW_parser___ReduceAction85(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction85;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction85_parser___ReduceAction___init[] = "new ReduceAction85 parser::ReduceAction::init";
+val_t NEW_ReduceAction85_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction85_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction85();
+  INIT_ATTRIBUTES__parser___ReduceAction85(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction85(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction86[55] = {
+  {(bigint) 459 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction86" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction86 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction86 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 459 /* 5: ReduceAction86 < ReduceAction86: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction86 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction86 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction86___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction86 < ReduceAction86: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction86::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction86[] = "init var of ReduceAction86";
+void INIT_ATTRIBUTES__parser___ReduceAction86(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction86;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction86(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction86;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction86[] = "check new ReduceAction86";
+void CHECKNEW_parser___ReduceAction86(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction86;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction86_parser___ReduceAction___init[] = "new ReduceAction86 parser::ReduceAction::init";
+val_t NEW_ReduceAction86_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction86_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction86();
+  INIT_ATTRIBUTES__parser___ReduceAction86(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction86(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction87[55] = {
+  {(bigint) 455 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction87" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction87 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction87 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 455 /* 5: ReduceAction87 < ReduceAction87: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction87 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction87 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction87___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction87 < ReduceAction87: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction87::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction87[] = "init var of ReduceAction87";
+void INIT_ATTRIBUTES__parser___ReduceAction87(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction87;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction87(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction87;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction87[] = "check new ReduceAction87";
+void CHECKNEW_parser___ReduceAction87(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction87;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction87_parser___ReduceAction___init[] = "new ReduceAction87 parser::ReduceAction::init";
+val_t NEW_ReduceAction87_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction87_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction87();
+  INIT_ATTRIBUTES__parser___ReduceAction87(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction87(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction88[55] = {
+  {(bigint) 451 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction88" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction88 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction88 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 451 /* 5: ReduceAction88 < ReduceAction88: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction88 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction88 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction88___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction88 < ReduceAction88: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction88::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction88[] = "init var of ReduceAction88";
+void INIT_ATTRIBUTES__parser___ReduceAction88(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction88;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction88(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction88;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction88[] = "check new ReduceAction88";
+void CHECKNEW_parser___ReduceAction88(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction88;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction88_parser___ReduceAction___init[] = "new ReduceAction88 parser::ReduceAction::init";
+val_t NEW_ReduceAction88_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction88_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction88();
+  INIT_ATTRIBUTES__parser___ReduceAction88(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction88(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction89[55] = {
+  {(bigint) 447 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction89" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction89 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction89 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 447 /* 5: ReduceAction89 < ReduceAction89: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction89 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction89 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction89___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction89 < ReduceAction89: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction89::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction89[] = "init var of ReduceAction89";
+void INIT_ATTRIBUTES__parser___ReduceAction89(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction89;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction89(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction89;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction89[] = "check new ReduceAction89";
+void CHECKNEW_parser___ReduceAction89(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction89;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction89_parser___ReduceAction___init[] = "new ReduceAction89 parser::ReduceAction::init";
+val_t NEW_ReduceAction89_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction89_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction89();
+  INIT_ATTRIBUTES__parser___ReduceAction89(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction89(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction90[55] = {
+  {(bigint) 439 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction90" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction90 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction90 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 439 /* 5: ReduceAction90 < ReduceAction90: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction90 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction90 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction90___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction90 < ReduceAction90: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction90::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction90[] = "init var of ReduceAction90";
+void INIT_ATTRIBUTES__parser___ReduceAction90(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction90;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction90(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction90;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction90[] = "check new ReduceAction90";
+void CHECKNEW_parser___ReduceAction90(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction90;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction90_parser___ReduceAction___init[] = "new ReduceAction90 parser::ReduceAction::init";
+val_t NEW_ReduceAction90_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction90_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction90();
+  INIT_ATTRIBUTES__parser___ReduceAction90(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction90(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction91[55] = {
+  {(bigint) 435 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction91" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction91 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction91 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 435 /* 5: ReduceAction91 < ReduceAction91: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction91 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction91 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction91___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction91 < ReduceAction91: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction91::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction91[] = "init var of ReduceAction91";
+void INIT_ATTRIBUTES__parser___ReduceAction91(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction91;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction91(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction91;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction91[] = "check new ReduceAction91";
+void CHECKNEW_parser___ReduceAction91(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction91;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction91_parser___ReduceAction___init[] = "new ReduceAction91 parser::ReduceAction::init";
+val_t NEW_ReduceAction91_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction91_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction91();
+  INIT_ATTRIBUTES__parser___ReduceAction91(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction91(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction92[55] = {
+  {(bigint) 431 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction92" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction92 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction92 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 431 /* 5: ReduceAction92 < ReduceAction92: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction92 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction92 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction92___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction92 < ReduceAction92: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction92::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction92[] = "init var of ReduceAction92";
+void INIT_ATTRIBUTES__parser___ReduceAction92(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction92;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction92(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction92;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction92[] = "check new ReduceAction92";
+void CHECKNEW_parser___ReduceAction92(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction92;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction92_parser___ReduceAction___init[] = "new ReduceAction92 parser::ReduceAction::init";
+val_t NEW_ReduceAction92_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction92_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction92();
+  INIT_ATTRIBUTES__parser___ReduceAction92(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction92(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction93[55] = {
+  {(bigint) 427 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction93" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction93 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction93 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 427 /* 5: ReduceAction93 < ReduceAction93: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction93 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction93 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction93___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction93 < ReduceAction93: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction93::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction93[] = "init var of ReduceAction93";
+void INIT_ATTRIBUTES__parser___ReduceAction93(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction93;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction93(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction93;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction93[] = "check new ReduceAction93";
+void CHECKNEW_parser___ReduceAction93(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction93;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction93_parser___ReduceAction___init[] = "new ReduceAction93 parser::ReduceAction::init";
+val_t NEW_ReduceAction93_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction93_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction93();
+  INIT_ATTRIBUTES__parser___ReduceAction93(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction93(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction94[55] = {
+  {(bigint) 407 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction94" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction94 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction94 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 407 /* 5: ReduceAction94 < ReduceAction94: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction94 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction94 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction94___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction94 < ReduceAction94: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction94::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction94[] = "init var of ReduceAction94";
+void INIT_ATTRIBUTES__parser___ReduceAction94(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction94;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction94(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction94;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction94[] = "check new ReduceAction94";
+void CHECKNEW_parser___ReduceAction94(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction94;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction94_parser___ReduceAction___init[] = "new ReduceAction94 parser::ReduceAction::init";
+val_t NEW_ReduceAction94_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction94_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction94();
+  INIT_ATTRIBUTES__parser___ReduceAction94(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction94(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction95[55] = {
+  {(bigint) 403 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction95" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction95 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction95 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 403 /* 5: ReduceAction95 < ReduceAction95: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction95 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction95 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction95___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction95 < ReduceAction95: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction95::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction95[] = "init var of ReduceAction95";
+void INIT_ATTRIBUTES__parser___ReduceAction95(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction95;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction95(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction95;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction95[] = "check new ReduceAction95";
+void CHECKNEW_parser___ReduceAction95(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction95;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction95_parser___ReduceAction___init[] = "new ReduceAction95 parser::ReduceAction::init";
+val_t NEW_ReduceAction95_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction95_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction95();
+  INIT_ATTRIBUTES__parser___ReduceAction95(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction95(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction96[55] = {
+  {(bigint) 391 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction96" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction96 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction96 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 391 /* 5: ReduceAction96 < ReduceAction96: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction96 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction96 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction96___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction96 < ReduceAction96: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction96::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction96[] = "init var of ReduceAction96";
+void INIT_ATTRIBUTES__parser___ReduceAction96(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction96;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction96(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction96;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction96[] = "check new ReduceAction96";
+void CHECKNEW_parser___ReduceAction96(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction96;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction96_parser___ReduceAction___init[] = "new ReduceAction96 parser::ReduceAction::init";
+val_t NEW_ReduceAction96_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction96_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction96();
+  INIT_ATTRIBUTES__parser___ReduceAction96(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction96(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction97[55] = {
+  {(bigint) 387 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction97" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction97 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction97 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 387 /* 5: ReduceAction97 < ReduceAction97: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction97 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction97 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction97___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction97 < ReduceAction97: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction97::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction97[] = "init var of ReduceAction97";
+void INIT_ATTRIBUTES__parser___ReduceAction97(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction97;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction97(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction97;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction97[] = "check new ReduceAction97";
+void CHECKNEW_parser___ReduceAction97(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction97;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction97_parser___ReduceAction___init[] = "new ReduceAction97 parser::ReduceAction::init";
+val_t NEW_ReduceAction97_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction97_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction97();
+  INIT_ATTRIBUTES__parser___ReduceAction97(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction97(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction98[55] = {
+  {(bigint) 383 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction98" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction98 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction98 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 383 /* 5: ReduceAction98 < ReduceAction98: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction98 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction98 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction98___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction98 < ReduceAction98: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction98::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction98[] = "init var of ReduceAction98";
+void INIT_ATTRIBUTES__parser___ReduceAction98(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction98;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction98(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction98;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction98[] = "check new ReduceAction98";
+void CHECKNEW_parser___ReduceAction98(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction98;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction98_parser___ReduceAction___init[] = "new ReduceAction98 parser::ReduceAction::init";
+val_t NEW_ReduceAction98_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction98_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction98();
+  INIT_ATTRIBUTES__parser___ReduceAction98(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction98(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction99[55] = {
+  {(bigint) 379 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction99" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction99 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction99 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 379 /* 5: ReduceAction99 < ReduceAction99: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction99 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction99 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction99___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction99 < ReduceAction99: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction99::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction99[] = "init var of ReduceAction99";
+void INIT_ATTRIBUTES__parser___ReduceAction99(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction99;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction99(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction99;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction99[] = "check new ReduceAction99";
+void CHECKNEW_parser___ReduceAction99(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction99;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction99_parser___ReduceAction___init[] = "new ReduceAction99 parser::ReduceAction::init";
+val_t NEW_ReduceAction99_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction99_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction99();
+  INIT_ATTRIBUTES__parser___ReduceAction99(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction99(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction100[55] = {
+  {(bigint) 2979 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction100" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction100 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction100 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2979 /* 5: ReduceAction100 < ReduceAction100: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction100 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction100 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction100___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction100 < ReduceAction100: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction100::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction100[] = "init var of ReduceAction100";
+void INIT_ATTRIBUTES__parser___ReduceAction100(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction100;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction100(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction100;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction100[] = "check new ReduceAction100";
+void CHECKNEW_parser___ReduceAction100(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction100;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction100_parser___ReduceAction___init[] = "new ReduceAction100 parser::ReduceAction::init";
+val_t NEW_ReduceAction100_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction100_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction100();
+  INIT_ATTRIBUTES__parser___ReduceAction100(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction100(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction101[55] = {
+  {(bigint) 2975 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction101" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction101 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction101 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2975 /* 5: ReduceAction101 < ReduceAction101: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction101 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction101 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction101___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction101 < ReduceAction101: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction101::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction101[] = "init var of ReduceAction101";
+void INIT_ATTRIBUTES__parser___ReduceAction101(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction101;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction101(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction101;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction101[] = "check new ReduceAction101";
+void CHECKNEW_parser___ReduceAction101(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction101;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction101_parser___ReduceAction___init[] = "new ReduceAction101 parser::ReduceAction::init";
+val_t NEW_ReduceAction101_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction101_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction101();
+  INIT_ATTRIBUTES__parser___ReduceAction101(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction101(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction102[55] = {
+  {(bigint) 2971 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction102" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction102 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction102 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2971 /* 5: ReduceAction102 < ReduceAction102: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction102 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction102 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction102___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction102 < ReduceAction102: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction102::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction102[] = "init var of ReduceAction102";
+void INIT_ATTRIBUTES__parser___ReduceAction102(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction102;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction102(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction102;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction102[] = "check new ReduceAction102";
+void CHECKNEW_parser___ReduceAction102(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction102;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction102_parser___ReduceAction___init[] = "new ReduceAction102 parser::ReduceAction::init";
+val_t NEW_ReduceAction102_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction102_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction102();
+  INIT_ATTRIBUTES__parser___ReduceAction102(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction102(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction103[55] = {
+  {(bigint) 2967 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction103" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction103 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction103 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2967 /* 5: ReduceAction103 < ReduceAction103: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction103 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction103 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction103___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction103 < ReduceAction103: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction103::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction103[] = "init var of ReduceAction103";
+void INIT_ATTRIBUTES__parser___ReduceAction103(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction103;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction103(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction103;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction103[] = "check new ReduceAction103";
+void CHECKNEW_parser___ReduceAction103(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction103;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction103_parser___ReduceAction___init[] = "new ReduceAction103 parser::ReduceAction::init";
+val_t NEW_ReduceAction103_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction103_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction103();
+  INIT_ATTRIBUTES__parser___ReduceAction103(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction103(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction104[55] = {
+  {(bigint) 2963 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction104" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction104 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction104 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2963 /* 5: ReduceAction104 < ReduceAction104: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction104 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction104 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction104___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction104 < ReduceAction104: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction104::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction104[] = "init var of ReduceAction104";
+void INIT_ATTRIBUTES__parser___ReduceAction104(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction104;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction104(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction104;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction104[] = "check new ReduceAction104";
+void CHECKNEW_parser___ReduceAction104(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction104;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction104_parser___ReduceAction___init[] = "new ReduceAction104 parser::ReduceAction::init";
+val_t NEW_ReduceAction104_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction104_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction104();
+  INIT_ATTRIBUTES__parser___ReduceAction104(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction104(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction105[55] = {
+  {(bigint) 2959 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction105" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction105 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction105 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2959 /* 5: ReduceAction105 < ReduceAction105: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction105 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction105 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction105___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction105 < ReduceAction105: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction105::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction105[] = "init var of ReduceAction105";
+void INIT_ATTRIBUTES__parser___ReduceAction105(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction105;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction105(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction105;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction105[] = "check new ReduceAction105";
+void CHECKNEW_parser___ReduceAction105(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction105;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction105_parser___ReduceAction___init[] = "new ReduceAction105 parser::ReduceAction::init";
+val_t NEW_ReduceAction105_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction105_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction105();
+  INIT_ATTRIBUTES__parser___ReduceAction105(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction105(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction106[55] = {
+  {(bigint) 2955 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction106" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction106 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction106 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2955 /* 5: ReduceAction106 < ReduceAction106: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction106 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction106 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction106___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction106 < ReduceAction106: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction106::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction106[] = "init var of ReduceAction106";
+void INIT_ATTRIBUTES__parser___ReduceAction106(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction106;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction106(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction106;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction106[] = "check new ReduceAction106";
+void CHECKNEW_parser___ReduceAction106(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction106;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction106_parser___ReduceAction___init[] = "new ReduceAction106 parser::ReduceAction::init";
+val_t NEW_ReduceAction106_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction106_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction106();
+  INIT_ATTRIBUTES__parser___ReduceAction106(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction106(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction107[55] = {
+  {(bigint) 2951 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction107" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction107 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction107 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2951 /* 5: ReduceAction107 < ReduceAction107: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction107 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction107 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction107___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction107 < ReduceAction107: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction107::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction107[] = "init var of ReduceAction107";
+void INIT_ATTRIBUTES__parser___ReduceAction107(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction107;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction107(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction107;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction107[] = "check new ReduceAction107";
+void CHECKNEW_parser___ReduceAction107(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction107;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction107_parser___ReduceAction___init[] = "new ReduceAction107 parser::ReduceAction::init";
+val_t NEW_ReduceAction107_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction107_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction107();
+  INIT_ATTRIBUTES__parser___ReduceAction107(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction107(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction108[55] = {
+  {(bigint) 2947 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction108" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction108 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction108 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2947 /* 5: ReduceAction108 < ReduceAction108: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction108 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction108 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction108___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction108 < ReduceAction108: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction108::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction108[] = "init var of ReduceAction108";
+void INIT_ATTRIBUTES__parser___ReduceAction108(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction108;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction108(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction108;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction108[] = "check new ReduceAction108";
+void CHECKNEW_parser___ReduceAction108(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction108;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction108_parser___ReduceAction___init[] = "new ReduceAction108 parser::ReduceAction::init";
+val_t NEW_ReduceAction108_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction108_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction108();
+  INIT_ATTRIBUTES__parser___ReduceAction108(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction108(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction109[55] = {
+  {(bigint) 2943 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction109" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction109 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction109 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2943 /* 5: ReduceAction109 < ReduceAction109: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction109 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction109 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction109___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction109 < ReduceAction109: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction109::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction109[] = "init var of ReduceAction109";
+void INIT_ATTRIBUTES__parser___ReduceAction109(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction109;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction109(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction109;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction109[] = "check new ReduceAction109";
+void CHECKNEW_parser___ReduceAction109(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction109;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction109_parser___ReduceAction___init[] = "new ReduceAction109 parser::ReduceAction::init";
+val_t NEW_ReduceAction109_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction109_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction109();
+  INIT_ATTRIBUTES__parser___ReduceAction109(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction109(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction110[55] = {
+  {(bigint) 2935 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction110" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction110 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction110 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2935 /* 5: ReduceAction110 < ReduceAction110: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction110 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction110 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction110___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction110 < ReduceAction110: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction110::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction110[] = "init var of ReduceAction110";
+void INIT_ATTRIBUTES__parser___ReduceAction110(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction110;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction110(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction110;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction110[] = "check new ReduceAction110";
+void CHECKNEW_parser___ReduceAction110(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction110;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction110_parser___ReduceAction___init[] = "new ReduceAction110 parser::ReduceAction::init";
+val_t NEW_ReduceAction110_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction110_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction110();
+  INIT_ATTRIBUTES__parser___ReduceAction110(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction110(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction111[55] = {
+  {(bigint) 2931 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction111" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction111 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction111 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2931 /* 5: ReduceAction111 < ReduceAction111: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction111 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction111 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction111___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction111 < ReduceAction111: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction111::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction111[] = "init var of ReduceAction111";
+void INIT_ATTRIBUTES__parser___ReduceAction111(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction111;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction111(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction111;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction111[] = "check new ReduceAction111";
+void CHECKNEW_parser___ReduceAction111(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction111;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction111_parser___ReduceAction___init[] = "new ReduceAction111 parser::ReduceAction::init";
+val_t NEW_ReduceAction111_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction111_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction111();
+  INIT_ATTRIBUTES__parser___ReduceAction111(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction111(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction112[55] = {
+  {(bigint) 2927 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction112" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction112 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction112 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2927 /* 5: ReduceAction112 < ReduceAction112: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction112 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction112 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction112___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction112 < ReduceAction112: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction112::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction112[] = "init var of ReduceAction112";
+void INIT_ATTRIBUTES__parser___ReduceAction112(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction112;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction112(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction112;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction112[] = "check new ReduceAction112";
+void CHECKNEW_parser___ReduceAction112(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction112;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction112_parser___ReduceAction___init[] = "new ReduceAction112 parser::ReduceAction::init";
+val_t NEW_ReduceAction112_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction112_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction112();
+  INIT_ATTRIBUTES__parser___ReduceAction112(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction112(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction113[55] = {
+  {(bigint) 2923 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction113" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction113 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction113 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2923 /* 5: ReduceAction113 < ReduceAction113: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction113 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction113 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction113___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction113 < ReduceAction113: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction113::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction113[] = "init var of ReduceAction113";
+void INIT_ATTRIBUTES__parser___ReduceAction113(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction113;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction113(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction113;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction113[] = "check new ReduceAction113";
+void CHECKNEW_parser___ReduceAction113(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction113;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction113_parser___ReduceAction___init[] = "new ReduceAction113 parser::ReduceAction::init";
+val_t NEW_ReduceAction113_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction113_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction113();
+  INIT_ATTRIBUTES__parser___ReduceAction113(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction113(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction114[55] = {
+  {(bigint) 2919 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction114" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction114 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction114 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2919 /* 5: ReduceAction114 < ReduceAction114: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction114 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction114 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction114___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction114 < ReduceAction114: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction114::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction114[] = "init var of ReduceAction114";
+void INIT_ATTRIBUTES__parser___ReduceAction114(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction114;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction114(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction114;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction114[] = "check new ReduceAction114";
+void CHECKNEW_parser___ReduceAction114(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction114;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction114_parser___ReduceAction___init[] = "new ReduceAction114 parser::ReduceAction::init";
+val_t NEW_ReduceAction114_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction114_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction114();
+  INIT_ATTRIBUTES__parser___ReduceAction114(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction114(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction115[55] = {
+  {(bigint) 2915 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction115" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction115 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction115 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2915 /* 5: ReduceAction115 < ReduceAction115: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction115 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction115 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction115___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction115 < ReduceAction115: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction115::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction115[] = "init var of ReduceAction115";
+void INIT_ATTRIBUTES__parser___ReduceAction115(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction115;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction115(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction115;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction115[] = "check new ReduceAction115";
+void CHECKNEW_parser___ReduceAction115(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction115;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction115_parser___ReduceAction___init[] = "new ReduceAction115 parser::ReduceAction::init";
+val_t NEW_ReduceAction115_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction115_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction115();
+  INIT_ATTRIBUTES__parser___ReduceAction115(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction115(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction116[55] = {
+  {(bigint) 2911 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction116" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction116 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction116 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2911 /* 5: ReduceAction116 < ReduceAction116: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction116 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction116 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction116___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction116 < ReduceAction116: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction116::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction116[] = "init var of ReduceAction116";
+void INIT_ATTRIBUTES__parser___ReduceAction116(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction116;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  stack_frame_head = fra.me.prev;
+}
+val_t NEW_parser___ReduceAction116(void)
+{
+  obj_t obj;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction116;
+  obj[1].object_id = object_id_counter;
+  object_id_counter = object_id_counter + 1;
+  return OBJ2VAL(obj);
+}
+static const char LOCATE_CHECKNEW_parser___ReduceAction116[] = "check new ReduceAction116";
+void CHECKNEW_parser___ReduceAction116(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction116;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
+  }
+  stack_frame_head = fra.me.prev;
+}
+static const char LOCATE_NEW_ReduceAction116_parser___ReduceAction___init[] = "new ReduceAction116 parser::ReduceAction::init";
+val_t NEW_ReduceAction116_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  int init_table[3] = {0, 0, 0};
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_nitc;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction116_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction116();
+  INIT_ATTRIBUTES__parser___ReduceAction116(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction116(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+const classtable_elt_t VFT_parser___ReduceAction117[55] = {
+  {(bigint) 2907 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction117" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction117 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction117 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2907 /* 5: ReduceAction117 < ReduceAction117: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) nit_version___Object___nit_version},
+  {(bigint) standard___time___Object___get_time},
+  {(bigint) 1 /* 19: ReduceAction117 < Object: superclass init_table position */},
+  {(bigint) standard___kernel___Object___object_id},
+  {(bigint) standard___kernel___Object___is_same_type},
+  {(bigint) standard___kernel___Object_____eqeq},
+  {(bigint) standard___kernel___Object_____neq},
+  {(bigint) standard___kernel___Object___output},
+  {(bigint) standard___kernel___Object___output_class_name},
+  {(bigint) standard___kernel___Object___exit},
+  {(bigint) standard___kernel___Object___sys},
+  {(bigint) standard___file___Object___printn},
+  {(bigint) standard___file___Object___print},
+  {(bigint) standard___file___Object___getc},
+  {(bigint) standard___file___Object___gets},
+  {(bigint) standard___file___Object___stdin},
+  {(bigint) standard___file___Object___stdout},
+  {(bigint) standard___file___Object___stderr},
+  {(bigint) standard___stream___Object___poll},
+  {(bigint) standard___stream___Object___intern_poll},
+  {(bigint) standard___string___Object___to_s},
+  {(bigint) standard___string___Object___native_class_name},
+  {(bigint) standard___string___Object___class_name},
+  {(bigint) standard___string___Object___inspect},
+  {(bigint) standard___string___Object___inspect_head},
+  {(bigint) standard___string___Object___args},
+  {(bigint) standard___hash___Object___hash},
+  {(bigint) standard___math___Object___atan2},
+  {(bigint) standard___math___Object___pi},
+  {(bigint) standard___math___Object___srand_from},
+  {(bigint) standard___math___Object___srand},
+  {(bigint) utils___Object___cmangle},
+  {(bigint) utils___Object___cmangle_table},
+  {(bigint) 0 /* 50: ReduceAction117 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction117___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction117 < ReduceAction117: superclass init_table position */},
+};
+/* 0: Pointer to the classtable */
+/* 1: Object_id */
+/* 2: Attribute ReduceAction117::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction117[] = "init var of ReduceAction117";
+void INIT_ATTRIBUTES__parser___ReduceAction117(val_t p0){
+  struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AExternCodeBlock;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction117;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1200 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___AExternCodeBlock(void)
+val_t NEW_parser___ReduceAction117(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AExternCodeBlock;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction117;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___AExternCodeBlock[] = "check new AExternCodeBlock";
-void CHECKNEW_parser___parser_nodes___AExternCodeBlock(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction117[] = "check new ReduceAction117";
+void CHECKNEW_parser___ReduceAction117(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___AExternCodeBlock;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction117;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_extern_code_segment", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_AExternCodeBlock_parser___parser_prod___AExternCodeBlock___empty_init[] = "new AExternCodeBlock parser_prod::AExternCodeBlock::empty_init";
-val_t NEW_AExternCodeBlock_parser___parser_prod___AExternCodeBlock___empty_init(void){
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  int init_table[4] = {0, 0, 0, 0};
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_nitc;
-  fra.me.line = 8448;
-  fra.me.meth = LOCATE_NEW_AExternCodeBlock_parser___parser_prod___AExternCodeBlock___empty_init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8448 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___AExternCodeBlock();
-  INIT_ATTRIBUTES__parser___parser_nodes___AExternCodeBlock(fra.me.REG[0]);
-  parser___parser_prod___AExternCodeBlock___empty_init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___AExternCodeBlock(fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return fra.me.REG[0];
-}
-static const char LOCATE_NEW_AExternCodeBlock_parser___parser_prod___AExternCodeBlock___init_aexterncodeblock[] = "new AExternCodeBlock parser_prod::AExternCodeBlock::init_aexterncodeblock";
-val_t NEW_AExternCodeBlock_parser___parser_prod___AExternCodeBlock___init_aexterncodeblock(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t tmp;
-  int init_table[4] = {0, 0, 0, 0};
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_nitc;
-  fra.me.line = 8450;
-  fra.me.meth = LOCATE_NEW_AExternCodeBlock_parser___parser_prod___AExternCodeBlock___init_aexterncodeblock;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8450 */
-  fra.me.REG[2] = NEW_parser___parser_nodes___AExternCodeBlock();
-  INIT_ATTRIBUTES__parser___parser_nodes___AExternCodeBlock(fra.me.REG[2]);
-  parser___parser_prod___AExternCodeBlock___init_aexterncodeblock(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
-  CHECKNEW_parser___parser_nodes___AExternCodeBlock(fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return fra.me.REG[2];
-}
-static const char LOCATE_NEW_AExternCodeBlock_parser___parser_nodes___ANode___init[] = "new AExternCodeBlock parser_nodes::ANode::init";
-val_t NEW_AExternCodeBlock_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_ReduceAction117_parser___ReduceAction___init[] = "new ReduceAction117 parser::ReduceAction::init";
+val_t NEW_ReduceAction117_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
   val_t tmp;
-  int init_table[4] = {0, 0, 0, 0};
+  int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_AExternCodeBlock_parser___parser_nodes___ANode___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction117_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___AExternCodeBlock();
-  INIT_ATTRIBUTES__parser___parser_nodes___AExternCodeBlock(fra.me.REG[0]);
-  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___AExternCodeBlock(fra.me.REG[0]);
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction117();
+  INIT_ATTRIBUTES__parser___ReduceAction117(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction117(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___AQualified[80] = {
-  {(bigint) 3247 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "AQualified" /* 2: Class Name */},
-  {(bigint) 3 /* 3: AQualified < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: AQualified < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: AQualified < Prod: superclass typecheck marker */},
-  {(bigint) 3247 /* 6: AQualified < AQualified: superclass typecheck marker */},
+const classtable_elt_t VFT_parser___ReduceAction118[55] = {
+  {(bigint) 2903 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction118" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction118 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction118 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2903 /* 5: ReduceAction118 < ReduceAction118: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -85276,7 +106671,7 @@ const classtable_elt_t VFT_parser___parser_nodes___AQualified[80] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 2 /* 19: AQualified < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction118 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -85307,176 +106702,89 @@ const classtable_elt_t VFT_parser___parser_nodes___AQualified[80] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
-  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
-  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
-  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
-  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
-  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
-  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
-  {(bigint) parser___parser_prod___ANode___parent},
-  {(bigint) parser___parser_prod___ANode___parent__eq},
-  {(bigint) parser___parser_prod___ANode___remove_child},
-  {(bigint) parser___parser_prod___AQualified___replace_child},
-  {(bigint) parser___parser_prod___Prod___replace_with},
-  {(bigint) parser___parser_prod___AQualified___visit_all},
-  {(bigint) 1 /* 63: AQualified < ANode: superclass init_table position */},
-  {(bigint) parser___parser_nodes___ANode___location},
-  {(bigint) parser___parser_nodes___ANode___hot_location},
-  {(bigint) parser___parser_nodes___ANode___init},
-  {(bigint) parser___parser_nodes___ANode___debug},
-  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
-  {(bigint) syntax___typing___ANode___accept_typing},
-  {(bigint) syntax___typing___ANode___after_typing},
-  {(bigint) parser___parser_prod___ANode___replace_with},
-  {(bigint) 0 /* 72: AQualified < Prod: superclass init_table position */},
-  {(bigint) parser___parser_nodes___Prod___location__eq},
-  {(bigint) parser___parser_prod___AQualified___empty_init},
-  {(bigint) parser___parser_prod___AQualified___init_aqualified},
-  {(bigint) 3 /* 76: AQualified < AQualified: superclass init_table position */},
-  {(bigint) parser___parser_nodes___AQualified___n_quad},
-  {(bigint) parser___parser_nodes___AQualified___n_id},
-  {(bigint) parser___parser_nodes___AQualified___n_classid},
+  {(bigint) 0 /* 50: ReduceAction118 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction118___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction118 < ReduceAction118: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute AQualified::_parent */
-/* 3: Attribute AQualified::_location */
-/* 4: Attribute AQualified::_first_location */
-/* 5: Attribute AQualified::_last_location */
-/* 6: Attribute AQualified::_n_quad */
-/* 7: Attribute AQualified::_n_id */
-/* 8: Attribute AQualified::_n_classid */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AQualified[] = "init var of AQualified";
-void INIT_ATTRIBUTES__parser___parser_nodes___AQualified(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+/* 2: Attribute ReduceAction118::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction118[] = "init var of ReduceAction118";
+void INIT_ATTRIBUTES__parser___ReduceAction118(val_t p0){
+  struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___AQualified;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction118;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1206 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:1207 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:1205 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_nodes___AQualified____n_quad(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___AQualified(void)
+val_t NEW_parser___ReduceAction118(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___AQualified;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction118;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___AQualified[] = "check new AQualified";
-void CHECKNEW_parser___parser_nodes___AQualified(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction118[] = "check new ReduceAction118";
+void CHECKNEW_parser___ReduceAction118(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___AQualified;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction118;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_AQualified_parser___parser_prod___AQualified___empty_init[] = "new AQualified parser_prod::AQualified::empty_init";
-val_t NEW_AQualified_parser___parser_prod___AQualified___empty_init(void){
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  int init_table[4] = {0, 0, 0, 0};
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_nitc;
-  fra.me.line = 8497;
-  fra.me.meth = LOCATE_NEW_AQualified_parser___parser_prod___AQualified___empty_init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8497 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___AQualified();
-  INIT_ATTRIBUTES__parser___parser_nodes___AQualified(fra.me.REG[0]);
-  parser___parser_prod___AQualified___empty_init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___AQualified(fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return fra.me.REG[0];
-}
-static const char LOCATE_NEW_AQualified_parser___parser_prod___AQualified___init_aqualified[] = "new AQualified parser_prod::AQualified::init_aqualified";
-val_t NEW_AQualified_parser___parser_prod___AQualified___init_aqualified(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t tmp;
-  int init_table[4] = {0, 0, 0, 0};
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_nitc;
-  fra.me.line = 8499;
-  fra.me.meth = LOCATE_NEW_AQualified_parser___parser_prod___AQualified___init_aqualified;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8499 */
-  fra.me.REG[2] = NEW_parser___parser_nodes___AQualified();
-  INIT_ATTRIBUTES__parser___parser_nodes___AQualified(fra.me.REG[2]);
-  parser___parser_prod___AQualified___init_aqualified(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
-  CHECKNEW_parser___parser_nodes___AQualified(fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return fra.me.REG[2];
-}
-static const char LOCATE_NEW_AQualified_parser___parser_nodes___ANode___init[] = "new AQualified parser_nodes::ANode::init";
-val_t NEW_AQualified_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_ReduceAction118_parser___ReduceAction___init[] = "new ReduceAction118 parser::ReduceAction::init";
+val_t NEW_ReduceAction118_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
   val_t tmp;
-  int init_table[4] = {0, 0, 0, 0};
+  int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_AQualified_parser___parser_nodes___ANode___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction118_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___AQualified();
-  INIT_ATTRIBUTES__parser___parser_nodes___AQualified(fra.me.REG[0]);
-  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___AQualified(fra.me.REG[0]);
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction118();
+  INIT_ATTRIBUTES__parser___ReduceAction118(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction118(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___ADoc[78] = {
-  {(bigint) 3315 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ADoc" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ADoc < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: ADoc < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: ADoc < Prod: superclass typecheck marker */},
-  {(bigint) 3315 /* 6: ADoc < ADoc: superclass typecheck marker */},
+const classtable_elt_t VFT_parser___ReduceAction119[55] = {
+  {(bigint) 2899 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction119" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction119 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction119 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2899 /* 5: ReduceAction119 < ReduceAction119: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -85489,7 +106797,7 @@ const classtable_elt_t VFT_parser___parser_nodes___ADoc[78] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 2 /* 19: ADoc < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction119 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -85520,164 +106828,89 @@ const classtable_elt_t VFT_parser___parser_nodes___ADoc[78] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
-  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
-  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
-  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
-  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
-  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
-  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
-  {(bigint) parser___parser_prod___ANode___parent},
-  {(bigint) parser___parser_prod___ANode___parent__eq},
-  {(bigint) parser___parser_prod___ANode___remove_child},
-  {(bigint) parser___parser_prod___ADoc___replace_child},
-  {(bigint) parser___parser_prod___Prod___replace_with},
-  {(bigint) parser___parser_prod___ADoc___visit_all},
-  {(bigint) 1 /* 63: ADoc < ANode: superclass init_table position */},
-  {(bigint) parser___parser_nodes___ANode___location},
-  {(bigint) parser___parser_nodes___ANode___hot_location},
-  {(bigint) parser___parser_nodes___ANode___init},
-  {(bigint) parser___parser_nodes___ANode___debug},
-  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
-  {(bigint) syntax___typing___ANode___accept_typing},
-  {(bigint) syntax___typing___ANode___after_typing},
-  {(bigint) parser___parser_prod___ANode___replace_with},
-  {(bigint) 0 /* 72: ADoc < Prod: superclass init_table position */},
-  {(bigint) parser___parser_nodes___Prod___location__eq},
-  {(bigint) parser___parser_prod___ADoc___empty_init},
-  {(bigint) parser___parser_prod___ADoc___init_adoc},
-  {(bigint) 3 /* 76: ADoc < ADoc: superclass init_table position */},
-  {(bigint) parser___parser_nodes___ADoc___n_comment},
+  {(bigint) 0 /* 50: ReduceAction119 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction119___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction119 < ReduceAction119: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ADoc::_parent */
-/* 3: Attribute ADoc::_location */
-/* 4: Attribute ADoc::_first_location */
-/* 5: Attribute ADoc::_last_location */
-/* 6: Attribute ADoc::_n_comment */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ADoc[] = "init var of ADoc";
-void INIT_ATTRIBUTES__parser___parser_nodes___ADoc(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+/* 2: Attribute ReduceAction119::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction119[] = "init var of ReduceAction119";
+void INIT_ATTRIBUTES__parser___ReduceAction119(val_t p0){
+  struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___ADoc;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction119;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1211 */
-  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
-  ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___ADoc(void)
+val_t NEW_parser___ReduceAction119(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___ADoc;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction119;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___ADoc[] = "check new ADoc";
-void CHECKNEW_parser___parser_nodes___ADoc(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction119[] = "check new ReduceAction119";
+void CHECKNEW_parser___ReduceAction119(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___ADoc;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction119;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ADoc_parser___parser_prod___ADoc___empty_init[] = "new ADoc parser_prod::ADoc::empty_init";
-val_t NEW_ADoc_parser___parser_prod___ADoc___empty_init(void){
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  int init_table[4] = {0, 0, 0, 0};
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_nitc;
-  fra.me.line = 8553;
-  fra.me.meth = LOCATE_NEW_ADoc_parser___parser_prod___ADoc___empty_init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_prod.nit:8553 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___ADoc();
-  INIT_ATTRIBUTES__parser___parser_nodes___ADoc(fra.me.REG[0]);
-  parser___parser_prod___ADoc___empty_init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___ADoc(fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return fra.me.REG[0];
-}
-static const char LOCATE_NEW_ADoc_parser___parser_prod___ADoc___init_adoc[] = "new ADoc parser_prod::ADoc::init_adoc";
-val_t NEW_ADoc_parser___parser_prod___ADoc___init_adoc(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  int init_table[4] = {0, 0, 0, 0};
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_nitc;
-  fra.me.line = 8555;
-  fra.me.meth = LOCATE_NEW_ADoc_parser___parser_prod___ADoc___init_adoc;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:8555 */
-  fra.me.REG[1] = NEW_parser___parser_nodes___ADoc();
-  INIT_ATTRIBUTES__parser___parser_nodes___ADoc(fra.me.REG[1]);
-  parser___parser_prod___ADoc___init_adoc(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___ADoc(fra.me.REG[1]);
-  stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
-}
-static const char LOCATE_NEW_ADoc_parser___parser_nodes___ANode___init[] = "new ADoc parser_nodes::ANode::init";
-val_t NEW_ADoc_parser___parser_nodes___ANode___init(void){
+static const char LOCATE_NEW_ReduceAction119_parser___ReduceAction___init[] = "new ReduceAction119 parser::ReduceAction::init";
+val_t NEW_ReduceAction119_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
   val_t tmp;
-  int init_table[4] = {0, 0, 0, 0};
+  int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 32;
-  fra.me.meth = LOCATE_NEW_ADoc_parser___parser_nodes___ANode___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction119_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser_nodes.nit:32 */
-  fra.me.REG[0] = NEW_parser___parser_nodes___ADoc();
-  INIT_ATTRIBUTES__parser___parser_nodes___ADoc(fra.me.REG[0]);
-  parser___parser_nodes___ANode___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___parser_nodes___ADoc(fra.me.REG[0]);
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction119();
+  INIT_ATTRIBUTES__parser___ReduceAction119(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction119(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___parser_nodes___Start[78] = {
-  {(bigint) 2955 /* 0: Identity */},
-  {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "Start" /* 2: Class Name */},
-  {(bigint) 3 /* 3: Start < Object: superclass typecheck marker */},
-  {(bigint) 315 /* 4: Start < ANode: superclass typecheck marker */},
-  {(bigint) 2523 /* 5: Start < Prod: superclass typecheck marker */},
-  {(bigint) 2955 /* 6: Start < Start: superclass typecheck marker */},
+const classtable_elt_t VFT_parser___ReduceAction120[55] = {
+  {(bigint) 2891 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction120" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction120 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction120 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2891 /* 5: ReduceAction120 < ReduceAction120: superclass typecheck marker */},
+  {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -85690,7 +106923,7 @@ const classtable_elt_t VFT_parser___parser_nodes___Start[78] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 2 /* 19: Start < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction120 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -85721,118 +106954,88 @@ const classtable_elt_t VFT_parser___parser_nodes___Start[78] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) syntax___mmbuilder___ANode___accept_class_builder},
-  {(bigint) syntax___mmbuilder___ANode___accept_class_specialization_builder},
-  {(bigint) syntax___mmbuilder___ANode___accept_class_ancestor_builder},
-  {(bigint) syntax___mmbuilder___ANode___accept_class_verifier},
-  {(bigint) syntax___mmbuilder___ANode___accept_property_builder},
-  {(bigint) syntax___mmbuilder___ANode___accept_property_verifier},
-  {(bigint) syntax___syntax_base___ANode___accept_abs_syntax_visitor},
-  {(bigint) parser___parser_prod___ANode___parent},
-  {(bigint) parser___parser_prod___ANode___parent__eq},
-  {(bigint) parser___parser_prod___ANode___remove_child},
-  {(bigint) parser___parser_prod___Start___replace_child},
-  {(bigint) parser___parser_prod___Prod___replace_with},
-  {(bigint) parser___parser_prod___Start___visit_all},
-  {(bigint) 1 /* 63: Start < ANode: superclass init_table position */},
-  {(bigint) parser___parser_nodes___ANode___location},
-  {(bigint) parser___parser_nodes___ANode___hot_location},
-  {(bigint) parser___parser_nodes___ANode___init},
-  {(bigint) parser___parser_nodes___ANode___debug},
-  {(bigint) syntax___icode_generation___ANode___accept_icode_generation},
-  {(bigint) syntax___typing___ANode___accept_typing},
-  {(bigint) syntax___typing___ANode___after_typing},
-  {(bigint) parser___parser_prod___ANode___replace_with},
-  {(bigint) 0 /* 72: Start < Prod: superclass init_table position */},
-  {(bigint) parser___parser_nodes___Prod___location__eq},
-  {(bigint) 3 /* 74: Start < Start: superclass init_table position */},
-  {(bigint) parser___parser_nodes___Start___n_base},
-  {(bigint) parser___parser_nodes___Start___n_eof},
-  {(bigint) parser___parser_nodes___Start___init},
+  {(bigint) 0 /* 50: ReduceAction120 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction120___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction120 < ReduceAction120: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute Start::_parent */
-/* 3: Attribute Start::_location */
-/* 4: Attribute Start::_first_location */
-/* 5: Attribute Start::_last_location */
-/* 6: Attribute Start::_n_base */
-/* 7: Attribute Start::_n_eof */
-static const char LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___Start[] = "init var of Start";
-void INIT_ATTRIBUTES__parser___parser_nodes___Start(val_t p0){
+/* 2: Attribute ReduceAction120::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction120[] = "init var of ReduceAction120";
+void INIT_ATTRIBUTES__parser___ReduceAction120(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___parser_nodes___Start;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction120;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___parser_nodes___Start(void)
+val_t NEW_parser___ReduceAction120(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 8);
-  obj->vft = (classtable_elt_t*)VFT_parser___parser_nodes___Start;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction120;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___parser_nodes___Start[] = "check new Start";
-void CHECKNEW_parser___parser_nodes___Start(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction120[] = "check new ReduceAction120";
+void CHECKNEW_parser___ReduceAction120(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___parser_nodes___Start;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction120;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___Start____n_eof(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_eof", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_Start_parser___parser_nodes___Start___init[] = "new Start parser_nodes::Start::init";
-val_t NEW_Start_parser___parser_nodes___Start___init(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+static const char LOCATE_NEW_ReduceAction120_parser___ReduceAction___init[] = "new ReduceAction120 parser::ReduceAction::init";
+val_t NEW_ReduceAction120_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
   val_t tmp;
-  int init_table[4] = {0, 0, 0, 0};
+  int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1218;
-  fra.me.meth = LOCATE_NEW_Start_parser___parser_nodes___Start___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction120_parser___ReduceAction___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser_nodes.nit:1218 */
-  fra.me.REG[2] = NEW_parser___parser_nodes___Start();
-  INIT_ATTRIBUTES__parser___parser_nodes___Start(fra.me.REG[2]);
-  parser___parser_nodes___Start___init(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
-  CHECKNEW_parser___parser_nodes___Start(fra.me.REG[2]);
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction120();
+  INIT_ATTRIBUTES__parser___ReduceAction120(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction120(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[2];
+  return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___lexer___Lexer[62] = {
-  {(bigint) 2651 /* 0: Identity */},
-  {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "Lexer" /* 2: Class Name */},
-  {(bigint) 3 /* 3: Lexer < Object: superclass typecheck marker */},
-  {(bigint) 23 /* 4: Lexer < TablesCapable: superclass typecheck marker */},
-  {(bigint) 2651 /* 5: Lexer < Lexer: superclass typecheck marker */},
+const classtable_elt_t VFT_parser___ReduceAction121[55] = {
+  {(bigint) 2887 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction121" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction121 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction121 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2887 /* 5: ReduceAction121 < ReduceAction121: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -85846,7 +107049,7 @@ const classtable_elt_t VFT_parser___lexer___Lexer[62] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: Lexer < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction121 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -85877,144 +107080,88 @@ const classtable_elt_t VFT_parser___lexer___Lexer[62] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: Lexer < TablesCapable: superclass init_table position */},
-  {(bigint) parser___tables___TablesCapable___lexer_goto},
-  {(bigint) parser___tables___TablesCapable___lexer_accept},
-  {(bigint) parser___tables___TablesCapable___parser_goto},
-  {(bigint) parser___tables___TablesCapable___parser_action},
-  {(bigint) 2 /* 55: Lexer < Lexer: superclass init_table position */},
-  {(bigint) parser___lexer___Lexer___file},
-  {(bigint) parser___lexer___Lexer___state_initial},
-  {(bigint) parser___lexer___Lexer___init},
-  {(bigint) parser___lexer___Lexer___peek},
-  {(bigint) parser___lexer___Lexer___next},
-  {(bigint) parser___lexer___Lexer___get_token},
+  {(bigint) 0 /* 50: ReduceAction121 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction121___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction121 < ReduceAction121: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute Lexer::_token */
-/* 3: Attribute Lexer::_state */
-/* 4: Attribute Lexer::_file */
-/* 5: Attribute Lexer::_stream_pos */
-/* 6: Attribute Lexer::_line */
-/* 7: Attribute Lexer::_pos */
-/* 8: Attribute Lexer::_cr */
-static const char LOCATE_INIT_ATTRIBUTES__parser___lexer___Lexer[] = "init var of Lexer";
-void INIT_ATTRIBUTES__parser___lexer___Lexer(val_t p0){
+/* 2: Attribute ReduceAction121::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction121[] = "init var of ReduceAction121";
+void INIT_ATTRIBUTES__parser___ReduceAction121(val_t p0){
   struct {struct stack_frame_t me;} fra;
-  val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___lexer___Lexer;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction121;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1172 */
-  REGB0 = TAG_Int(0);
-  ATTR_parser___lexer___Lexer____state(fra.me.REG[0]) = REGB0;
-  /* parser/lexer.nit:1178 */
-  REGB0 = TAG_Int(0);
-  ATTR_parser___lexer___Lexer____stream_pos(fra.me.REG[0]) = REGB0;
-  /* parser/lexer.nit:1181 */
-  REGB0 = TAG_Int(0);
-  ATTR_parser___lexer___Lexer____line(fra.me.REG[0]) = REGB0;
-  /* parser/lexer.nit:1184 */
-  REGB0 = TAG_Int(0);
-  ATTR_parser___lexer___Lexer____pos(fra.me.REG[0]) = REGB0;
-  /* parser/lexer.nit:1187 */
-  REGB0 = TAG_Bool(0);
-  ATTR_parser___lexer___Lexer____cr(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___lexer___Lexer(void)
+val_t NEW_parser___ReduceAction121(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 9);
-  obj->vft = (classtable_elt_t*)VFT_parser___lexer___Lexer;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction121;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___lexer___Lexer[] = "check new Lexer";
-void CHECKNEW_parser___lexer___Lexer(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction121[] = "check new ReduceAction121";
+void CHECKNEW_parser___ReduceAction121(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___lexer___Lexer;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction121;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___lexer___Lexer____state(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_state", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_parser___lexer___Lexer____file(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_file", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_parser___lexer___Lexer____stream_pos(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_stream_pos", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_parser___lexer___Lexer____line(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_line", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_parser___lexer___Lexer____pos(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_pos", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_parser___lexer___Lexer____cr(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_cr", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_Lexer_parser___lexer___Lexer___init[] = "new Lexer lexer::Lexer::init";
-val_t NEW_Lexer_parser___lexer___Lexer___init(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+static const char LOCATE_NEW_ReduceAction121_parser___ReduceAction___init[] = "new ReduceAction121 parser::ReduceAction::init";
+val_t NEW_ReduceAction121_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1192;
-  fra.me.meth = LOCATE_NEW_Lexer_parser___lexer___Lexer___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction121_parser___ReduceAction___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1192 */
-  fra.me.REG[1] = NEW_parser___lexer___Lexer();
-  INIT_ATTRIBUTES__parser___lexer___Lexer(fra.me.REG[1]);
-  parser___lexer___Lexer___init(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___lexer___Lexer(fra.me.REG[1]);
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction121();
+  INIT_ATTRIBUTES__parser___ReduceAction121(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction121(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___State[56] = {
-  {(bigint) 39 /* 0: Identity */},
-  {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "State" /* 2: Class Name */},
-  {(bigint) 3 /* 3: State < Object: superclass typecheck marker */},
-  {(bigint) 39 /* 4: State < State: superclass typecheck marker */},
-  {0} /* Class Hole :( */,
+const classtable_elt_t VFT_parser___ReduceAction122[55] = {
+  {(bigint) 2883 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction122" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction122 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction122 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2883 /* 5: ReduceAction122 < ReduceAction122: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -86028,7 +107175,7 @@ const classtable_elt_t VFT_parser___State[56] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 0 /* 19: State < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction122 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -86059,92 +107206,88 @@ const classtable_elt_t VFT_parser___State[56] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 1 /* 50: State < State: superclass init_table position */},
-  {(bigint) parser___State___state},
-  {(bigint) parser___State___state__eq},
-  {(bigint) parser___State___nodes},
-  {(bigint) parser___State___nodes__eq},
-  {(bigint) parser___State___init},
+  {(bigint) 0 /* 50: ReduceAction122 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction122___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction122 < ReduceAction122: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute State::_state */
-/* 3: Attribute State::_nodes */
-static const char LOCATE_INIT_ATTRIBUTES__parser___State[] = "init var of State";
-void INIT_ATTRIBUTES__parser___State(val_t p0){
+/* 2: Attribute ReduceAction122::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction122[] = "init var of ReduceAction122";
+void INIT_ATTRIBUTES__parser___ReduceAction122(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___State;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction122;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___State(void)
+val_t NEW_parser___ReduceAction122(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 4);
-  obj->vft = (classtable_elt_t*)VFT_parser___State;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction122;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___State[] = "check new State";
-void CHECKNEW_parser___State(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction122[] = "check new ReduceAction122";
+void CHECKNEW_parser___ReduceAction122(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___State;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction122;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___State____state(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_state", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_State_parser___State___init[] = "new State parser::State::init";
-val_t NEW_State_parser___State___init(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+static const char LOCATE_NEW_ReduceAction122_parser___ReduceAction___init[] = "new ReduceAction122 parser::ReduceAction::init";
+val_t NEW_ReduceAction122_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
-  int init_table[2] = {0, 0};
+  int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 16;
-  fra.me.meth = LOCATE_NEW_State_parser___State___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction122_parser___ReduceAction___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
   REGB0 = p0;
-  fra.me.REG[0] = p1;
-  /* parser/parser.nit:16 */
-  fra.me.REG[1] = NEW_parser___State();
-  INIT_ATTRIBUTES__parser___State(fra.me.REG[1]);
-  parser___State___init(fra.me.REG[1], REGB0, fra.me.REG[0], init_table);
-  CHECKNEW_parser___State(fra.me.REG[1]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction122();
+  INIT_ATTRIBUTES__parser___ReduceAction122(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction122(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___Parser[63] = {
-  {(bigint) 2531 /* 0: Identity */},
-  {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "Parser" /* 2: Class Name */},
-  {(bigint) 3 /* 3: Parser < Object: superclass typecheck marker */},
-  {(bigint) 23 /* 4: Parser < TablesCapable: superclass typecheck marker */},
-  {(bigint) 2531 /* 5: Parser < Parser: superclass typecheck marker */},
+const classtable_elt_t VFT_parser___ReduceAction123[55] = {
+  {(bigint) 2879 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction123" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction123 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction123 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2879 /* 5: ReduceAction123 < ReduceAction123: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -86158,7 +107301,7 @@ const classtable_elt_t VFT_parser___Parser[63] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: Parser < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction123 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -86189,114 +107332,88 @@ const classtable_elt_t VFT_parser___Parser[63] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: Parser < TablesCapable: superclass init_table position */},
-  {(bigint) parser___tables___TablesCapable___lexer_goto},
-  {(bigint) parser___tables___TablesCapable___lexer_accept},
-  {(bigint) parser___tables___TablesCapable___parser_goto},
-  {(bigint) parser___tables___TablesCapable___parser_action},
-  {(bigint) 2 /* 55: Parser < Parser: superclass init_table position */},
-  {(bigint) parser___Parser___init},
-  {(bigint) parser___Parser___go_to},
-  {(bigint) parser___Parser___push},
-  {(bigint) parser___Parser___state},
-  {(bigint) parser___Parser___pop},
-  {(bigint) parser___Parser___parse},
-  {(bigint) parser___Parser___build_reduce_table},
+  {(bigint) 0 /* 50: ReduceAction123 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction123___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction123 < ReduceAction123: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute Parser::_lexer */
-/* 3: Attribute Parser::_stack */
-/* 4: Attribute Parser::_stack_pos */
-/* 5: Attribute Parser::_reduce_table */
-static const char LOCATE_INIT_ATTRIBUTES__parser___Parser[] = "init var of Parser";
-void INIT_ATTRIBUTES__parser___Parser(val_t p0){
+/* 2: Attribute ReduceAction123::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction123[] = "init var of ReduceAction123";
+void INIT_ATTRIBUTES__parser___ReduceAction123(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___Parser;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction123;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___Parser(void)
+val_t NEW_parser___ReduceAction123(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 6);
-  obj->vft = (classtable_elt_t*)VFT_parser___Parser;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction123;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___Parser[] = "check new Parser";
-void CHECKNEW_parser___Parser(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction123[] = "check new ReduceAction123";
+void CHECKNEW_parser___ReduceAction123(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___Parser;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction123;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_parser___Parser____lexer(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_lexer", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_parser___Parser____stack(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_stack", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_parser___Parser____stack_pos(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_stack_pos", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_parser___Parser____reduce_table(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_reduce_table", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_Parser_parser___Parser___init[] = "new Parser parser::Parser::init";
-val_t NEW_Parser_parser___Parser___init(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+static const char LOCATE_NEW_ReduceAction123_parser___ReduceAction___init[] = "new ReduceAction123 parser::ReduceAction::init";
+val_t NEW_ReduceAction123_parser___ReduceAction___init(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 34;
-  fra.me.meth = LOCATE_NEW_Parser_parser___Parser___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction123_parser___ReduceAction___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* parser/parser.nit:34 */
-  fra.me.REG[1] = NEW_parser___Parser();
-  INIT_ATTRIBUTES__parser___Parser(fra.me.REG[1]);
-  parser___Parser___init(fra.me.REG[1], fra.me.REG[0], init_table);
-  CHECKNEW_parser___Parser(fra.me.REG[1]);
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction123();
+  INIT_ATTRIBUTES__parser___ReduceAction123(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction123(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ComputeProdLocationVisitor[57] = {
-  {(bigint) 2779 /* 0: Identity */},
-  {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ComputeProdLocationVisitor" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ComputeProdLocationVisitor < Object: superclass typecheck marker */},
-  {(bigint) 15 /* 4: ComputeProdLocationVisitor < Visitor: superclass typecheck marker */},
-  {(bigint) 2779 /* 5: ComputeProdLocationVisitor < ComputeProdLocationVisitor: superclass typecheck marker */},
+const classtable_elt_t VFT_parser___ReduceAction124[55] = {
+  {(bigint) 2875 /* 0: Identity */},
+  {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
+  {(bigint) "ReduceAction124" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction124 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction124 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2875 /* 5: ReduceAction124 < ReduceAction124: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -86310,7 +107427,7 @@ const classtable_elt_t VFT_parser___ComputeProdLocationVisitor[57] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ComputeProdLocationVisitor < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction124 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -86341,120 +107458,88 @@ const classtable_elt_t VFT_parser___ComputeProdLocationVisitor[57] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ComputeProdLocationVisitor < Visitor: superclass init_table position */},
-  {(bigint) parser___ComputeProdLocationVisitor___visit},
-  {(bigint) parser___parser_prod___Visitor___enter_visit},
-  {(bigint) parser___parser_prod___Visitor___current_node},
-  {(bigint) parser___parser_prod___Visitor___init},
-  {(bigint) 2 /* 55: ComputeProdLocationVisitor < ComputeProdLocationVisitor: superclass init_table position */},
-  {(bigint) parser___ComputeProdLocationVisitor___init},
+  {(bigint) 0 /* 50: ReduceAction124 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction124___action},
+  {(bigint) parser___ReduceAction___concat},
+  {(bigint) parser___ReduceAction___init},
+  {(bigint) 2 /* 54: ReduceAction124 < ReduceAction124: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ComputeProdLocationVisitor::_current_node */
-/* 3: Attribute ComputeProdLocationVisitor::_need_first_prods */
-/* 4: Attribute ComputeProdLocationVisitor::_need_after_epsilons */
-/* 5: Attribute ComputeProdLocationVisitor::_need_before_epsilons */
-/* 6: Attribute ComputeProdLocationVisitor::_last_location */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ComputeProdLocationVisitor[] = "init var of ComputeProdLocationVisitor";
-void INIT_ATTRIBUTES__parser___ComputeProdLocationVisitor(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+/* 2: Attribute ReduceAction124::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction124[] = "init var of ReduceAction124";
+void INIT_ATTRIBUTES__parser___ReduceAction124(val_t p0){
+  struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ComputeProdLocationVisitor;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction124;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* parser/parser.nit:1040 */
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser.nit:1043 */
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser.nit:1046 */
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser.nit:1048 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:66 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_prod___Visitor____current_node(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ComputeProdLocationVisitor(void)
+val_t NEW_parser___ReduceAction124(void)
 {
   obj_t obj;
-  obj = alloc(sizeof(val_t) * 7);
-  obj->vft = (classtable_elt_t*)VFT_parser___ComputeProdLocationVisitor;
+  obj = alloc(sizeof(val_t) * 3);
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction124;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ComputeProdLocationVisitor[] = "check new ComputeProdLocationVisitor";
-void CHECKNEW_parser___ComputeProdLocationVisitor(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction124[] = "check new ReduceAction124";
+void CHECKNEW_parser___ReduceAction124(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ComputeProdLocationVisitor;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction124;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = 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_nitc, 0);
-  }
-  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_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ComputeProdLocationVisitor_parser___ComputeProdLocationVisitor___init[] = "new ComputeProdLocationVisitor parser::ComputeProdLocationVisitor::init";
-val_t NEW_ComputeProdLocationVisitor_parser___ComputeProdLocationVisitor___init(void){
+static const char LOCATE_NEW_ReduceAction124_parser___ReduceAction___init[] = "new ReduceAction124 parser::ReduceAction::init";
+val_t NEW_ReduceAction124_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1127;
-  fra.me.meth = LOCATE_NEW_ComputeProdLocationVisitor_parser___ComputeProdLocationVisitor___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction124_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  /* parser/parser.nit:1127 */
-  fra.me.REG[0] = NEW_parser___ComputeProdLocationVisitor();
-  INIT_ATTRIBUTES__parser___ComputeProdLocationVisitor(fra.me.REG[0]);
-  parser___ComputeProdLocationVisitor___init(fra.me.REG[0], init_table);
-  CHECKNEW_parser___ComputeProdLocationVisitor(fra.me.REG[0]);
+  REGB0 = p0;
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction124();
+  INIT_ATTRIBUTES__parser___ReduceAction124(fra.me.REG[0]);
+  parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
+  CHECKNEW_parser___ReduceAction124(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction0[55] = {
-  {(bigint) 2495 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction125[55] = {
+  {(bigint) 2871 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction0" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction0 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction0 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2495 /* 5: ReduceAction0 < ReduceAction0: superclass typecheck marker */},
+  {(bigint) "ReduceAction125" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction125 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction125 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2871 /* 5: ReduceAction125 < ReduceAction125: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -86468,7 +107553,7 @@ const classtable_elt_t VFT_parser___ReduceAction0[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction0 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction125 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -86499,46 +107584,46 @@ const classtable_elt_t VFT_parser___ReduceAction0[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction0 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction0___action},
+  {(bigint) 0 /* 50: ReduceAction125 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction125___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction0 < ReduceAction0: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction125 < ReduceAction125: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction0::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction0[] = "init var of ReduceAction0";
-void INIT_ATTRIBUTES__parser___ReduceAction0(val_t p0){
+/* 2: Attribute ReduceAction125::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction125[] = "init var of ReduceAction125";
+void INIT_ATTRIBUTES__parser___ReduceAction125(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction0;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction125;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction0(void)
+val_t NEW_parser___ReduceAction125(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction0;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction125;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction0[] = "check new ReduceAction0";
-void CHECKNEW_parser___ReduceAction0(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction125[] = "check new ReduceAction125";
+void CHECKNEW_parser___ReduceAction125(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction0;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction125;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -86551,36 +107636,36 @@ void CHECKNEW_parser___ReduceAction0(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction0_parser___ReduceAction___init[] = "new ReduceAction0 parser::ReduceAction::init";
-val_t NEW_ReduceAction0_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction125_parser___ReduceAction___init[] = "new ReduceAction125 parser::ReduceAction::init";
+val_t NEW_ReduceAction125_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction0_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction125_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction0();
-  INIT_ATTRIBUTES__parser___ReduceAction0(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction125();
+  INIT_ATTRIBUTES__parser___ReduceAction125(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction0(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction125(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction1[55] = {
-  {(bigint) 2491 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction126[55] = {
+  {(bigint) 2827 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction1" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction1 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction1 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2491 /* 5: ReduceAction1 < ReduceAction1: superclass typecheck marker */},
+  {(bigint) "ReduceAction126" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction126 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction126 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2827 /* 5: ReduceAction126 < ReduceAction126: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -86594,7 +107679,7 @@ const classtable_elt_t VFT_parser___ReduceAction1[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction1 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction126 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -86625,46 +107710,46 @@ const classtable_elt_t VFT_parser___ReduceAction1[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction1 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction1___action},
+  {(bigint) 0 /* 50: ReduceAction126 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction126___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction1 < ReduceAction1: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction126 < ReduceAction126: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction1::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1[] = "init var of ReduceAction1";
-void INIT_ATTRIBUTES__parser___ReduceAction1(val_t p0){
+/* 2: Attribute ReduceAction126::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction126[] = "init var of ReduceAction126";
+void INIT_ATTRIBUTES__parser___ReduceAction126(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction126;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction1(void)
+val_t NEW_parser___ReduceAction126(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction126;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction1[] = "check new ReduceAction1";
-void CHECKNEW_parser___ReduceAction1(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction126[] = "check new ReduceAction126";
+void CHECKNEW_parser___ReduceAction126(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction126;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -86677,36 +107762,36 @@ void CHECKNEW_parser___ReduceAction1(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction1_parser___ReduceAction___init[] = "new ReduceAction1 parser::ReduceAction::init";
-val_t NEW_ReduceAction1_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction126_parser___ReduceAction___init[] = "new ReduceAction126 parser::ReduceAction::init";
+val_t NEW_ReduceAction126_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction1_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction126_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction1();
-  INIT_ATTRIBUTES__parser___ReduceAction1(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction126();
+  INIT_ATTRIBUTES__parser___ReduceAction126(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction1(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction126(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction2[55] = {
-  {(bigint) 2047 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction127[55] = {
+  {(bigint) 2791 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction2" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction2 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction2 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2047 /* 5: ReduceAction2 < ReduceAction2: superclass typecheck marker */},
+  {(bigint) "ReduceAction127" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction127 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction127 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2791 /* 5: ReduceAction127 < ReduceAction127: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -86720,7 +107805,7 @@ const classtable_elt_t VFT_parser___ReduceAction2[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction2 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction127 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -86751,46 +107836,46 @@ const classtable_elt_t VFT_parser___ReduceAction2[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction2 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction2___action},
+  {(bigint) 0 /* 50: ReduceAction127 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction127___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction2 < ReduceAction2: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction127 < ReduceAction127: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction2::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction2[] = "init var of ReduceAction2";
-void INIT_ATTRIBUTES__parser___ReduceAction2(val_t p0){
+/* 2: Attribute ReduceAction127::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction127[] = "init var of ReduceAction127";
+void INIT_ATTRIBUTES__parser___ReduceAction127(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction2;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction127;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction2(void)
+val_t NEW_parser___ReduceAction127(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction2;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction127;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction2[] = "check new ReduceAction2";
-void CHECKNEW_parser___ReduceAction2(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction127[] = "check new ReduceAction127";
+void CHECKNEW_parser___ReduceAction127(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction2;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction127;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -86803,36 +107888,36 @@ void CHECKNEW_parser___ReduceAction2(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction2_parser___ReduceAction___init[] = "new ReduceAction2 parser::ReduceAction::init";
-val_t NEW_ReduceAction2_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction127_parser___ReduceAction___init[] = "new ReduceAction127 parser::ReduceAction::init";
+val_t NEW_ReduceAction127_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction2_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction127_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction2();
-  INIT_ATTRIBUTES__parser___ReduceAction2(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction127();
+  INIT_ATTRIBUTES__parser___ReduceAction127(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction2(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction127(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction3[55] = {
-  {(bigint) 1603 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction128[55] = {
+  {(bigint) 2767 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction3" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction3 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction3 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1603 /* 5: ReduceAction3 < ReduceAction3: superclass typecheck marker */},
+  {(bigint) "ReduceAction128" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction128 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction128 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2767 /* 5: ReduceAction128 < ReduceAction128: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -86846,7 +107931,7 @@ const classtable_elt_t VFT_parser___ReduceAction3[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction3 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction128 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -86877,46 +107962,46 @@ const classtable_elt_t VFT_parser___ReduceAction3[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction3 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction3___action},
+  {(bigint) 0 /* 50: ReduceAction128 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction128___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction3 < ReduceAction3: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction128 < ReduceAction128: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction3::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction3[] = "init var of ReduceAction3";
-void INIT_ATTRIBUTES__parser___ReduceAction3(val_t p0){
+/* 2: Attribute ReduceAction128::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction128[] = "init var of ReduceAction128";
+void INIT_ATTRIBUTES__parser___ReduceAction128(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction3;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction128;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction3(void)
+val_t NEW_parser___ReduceAction128(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction3;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction128;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction3[] = "check new ReduceAction3";
-void CHECKNEW_parser___ReduceAction3(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction128[] = "check new ReduceAction128";
+void CHECKNEW_parser___ReduceAction128(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction3;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction128;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -86929,36 +108014,36 @@ void CHECKNEW_parser___ReduceAction3(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction3_parser___ReduceAction___init[] = "new ReduceAction3 parser::ReduceAction::init";
-val_t NEW_ReduceAction3_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction128_parser___ReduceAction___init[] = "new ReduceAction128 parser::ReduceAction::init";
+val_t NEW_ReduceAction128_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction3_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction128_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction3();
-  INIT_ATTRIBUTES__parser___ReduceAction3(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction128();
+  INIT_ATTRIBUTES__parser___ReduceAction128(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction3(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction128(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction4[55] = {
-  {(bigint) 1203 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction129[55] = {
+  {(bigint) 2739 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction4" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction4 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction4 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1203 /* 5: ReduceAction4 < ReduceAction4: superclass typecheck marker */},
+  {(bigint) "ReduceAction129" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction129 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction129 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2739 /* 5: ReduceAction129 < ReduceAction129: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -86972,7 +108057,7 @@ const classtable_elt_t VFT_parser___ReduceAction4[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction4 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction129 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -87003,46 +108088,46 @@ const classtable_elt_t VFT_parser___ReduceAction4[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction4 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction4___action},
+  {(bigint) 0 /* 50: ReduceAction129 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction129___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction4 < ReduceAction4: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction129 < ReduceAction129: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction4::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction4[] = "init var of ReduceAction4";
-void INIT_ATTRIBUTES__parser___ReduceAction4(val_t p0){
+/* 2: Attribute ReduceAction129::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction129[] = "init var of ReduceAction129";
+void INIT_ATTRIBUTES__parser___ReduceAction129(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction4;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction129;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction4(void)
+val_t NEW_parser___ReduceAction129(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction4;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction129;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction4[] = "check new ReduceAction4";
-void CHECKNEW_parser___ReduceAction4(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction129[] = "check new ReduceAction129";
+void CHECKNEW_parser___ReduceAction129(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction4;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction129;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -87055,36 +108140,36 @@ void CHECKNEW_parser___ReduceAction4(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction4_parser___ReduceAction___init[] = "new ReduceAction4 parser::ReduceAction::init";
-val_t NEW_ReduceAction4_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction129_parser___ReduceAction___init[] = "new ReduceAction129 parser::ReduceAction::init";
+val_t NEW_ReduceAction129_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction4_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction129_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction4();
-  INIT_ATTRIBUTES__parser___ReduceAction4(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction129();
+  INIT_ATTRIBUTES__parser___ReduceAction129(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction4(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction129(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction5[55] = {
-  {(bigint) 839 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction130[55] = {
+  {(bigint) 2731 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction5" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction5 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction5 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 839 /* 5: ReduceAction5 < ReduceAction5: superclass typecheck marker */},
+  {(bigint) "ReduceAction130" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction130 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction130 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2731 /* 5: ReduceAction130 < ReduceAction130: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -87098,7 +108183,7 @@ const classtable_elt_t VFT_parser___ReduceAction5[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction5 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction130 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -87129,46 +108214,46 @@ const classtable_elt_t VFT_parser___ReduceAction5[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction5 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction5___action},
+  {(bigint) 0 /* 50: ReduceAction130 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction130___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction5 < ReduceAction5: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction130 < ReduceAction130: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction5::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction5[] = "init var of ReduceAction5";
-void INIT_ATTRIBUTES__parser___ReduceAction5(val_t p0){
+/* 2: Attribute ReduceAction130::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction130[] = "init var of ReduceAction130";
+void INIT_ATTRIBUTES__parser___ReduceAction130(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction5;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction130;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction5(void)
+val_t NEW_parser___ReduceAction130(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction5;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction130;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction5[] = "check new ReduceAction5";
-void CHECKNEW_parser___ReduceAction5(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction130[] = "check new ReduceAction130";
+void CHECKNEW_parser___ReduceAction130(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction5;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction130;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -87181,36 +108266,36 @@ void CHECKNEW_parser___ReduceAction5(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction5_parser___ReduceAction___init[] = "new ReduceAction5 parser::ReduceAction::init";
-val_t NEW_ReduceAction5_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction130_parser___ReduceAction___init[] = "new ReduceAction130 parser::ReduceAction::init";
+val_t NEW_ReduceAction130_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction5_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction130_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction5();
-  INIT_ATTRIBUTES__parser___ReduceAction5(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction130();
+  INIT_ATTRIBUTES__parser___ReduceAction130(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction5(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction130(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction6[55] = {
-  {(bigint) 679 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction131[55] = {
+  {(bigint) 2727 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction6" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction6 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction6 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 679 /* 5: ReduceAction6 < ReduceAction6: superclass typecheck marker */},
+  {(bigint) "ReduceAction131" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction131 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction131 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2727 /* 5: ReduceAction131 < ReduceAction131: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -87224,7 +108309,7 @@ const classtable_elt_t VFT_parser___ReduceAction6[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction6 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction131 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -87255,46 +108340,46 @@ const classtable_elt_t VFT_parser___ReduceAction6[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction6 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction6___action},
+  {(bigint) 0 /* 50: ReduceAction131 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction131___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction6 < ReduceAction6: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction131 < ReduceAction131: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction6::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction6[] = "init var of ReduceAction6";
-void INIT_ATTRIBUTES__parser___ReduceAction6(val_t p0){
+/* 2: Attribute ReduceAction131::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction131[] = "init var of ReduceAction131";
+void INIT_ATTRIBUTES__parser___ReduceAction131(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction6;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction131;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction6(void)
+val_t NEW_parser___ReduceAction131(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction6;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction131;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction6[] = "check new ReduceAction6";
-void CHECKNEW_parser___ReduceAction6(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction131[] = "check new ReduceAction131";
+void CHECKNEW_parser___ReduceAction131(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction6;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction131;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -87307,36 +108392,36 @@ void CHECKNEW_parser___ReduceAction6(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction6_parser___ReduceAction___init[] = "new ReduceAction6 parser::ReduceAction::init";
-val_t NEW_ReduceAction6_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction131_parser___ReduceAction___init[] = "new ReduceAction131 parser::ReduceAction::init";
+val_t NEW_ReduceAction131_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction6_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction131_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction6();
-  INIT_ATTRIBUTES__parser___ReduceAction6(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction131();
+  INIT_ATTRIBUTES__parser___ReduceAction131(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction6(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction131(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction7[55] = {
-  {(bigint) 635 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction132[55] = {
+  {(bigint) 2723 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction7" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction7 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction7 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 635 /* 5: ReduceAction7 < ReduceAction7: superclass typecheck marker */},
+  {(bigint) "ReduceAction132" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction132 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction132 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2723 /* 5: ReduceAction132 < ReduceAction132: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -87350,7 +108435,7 @@ const classtable_elt_t VFT_parser___ReduceAction7[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction7 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction132 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -87381,46 +108466,46 @@ const classtable_elt_t VFT_parser___ReduceAction7[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction7 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction7___action},
+  {(bigint) 0 /* 50: ReduceAction132 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction132___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction7 < ReduceAction7: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction132 < ReduceAction132: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction7::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction7[] = "init var of ReduceAction7";
-void INIT_ATTRIBUTES__parser___ReduceAction7(val_t p0){
+/* 2: Attribute ReduceAction132::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction132[] = "init var of ReduceAction132";
+void INIT_ATTRIBUTES__parser___ReduceAction132(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction7;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction132;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction7(void)
+val_t NEW_parser___ReduceAction132(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction7;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction132;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction7[] = "check new ReduceAction7";
-void CHECKNEW_parser___ReduceAction7(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction132[] = "check new ReduceAction132";
+void CHECKNEW_parser___ReduceAction132(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction7;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction132;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -87433,36 +108518,36 @@ void CHECKNEW_parser___ReduceAction7(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction7_parser___ReduceAction___init[] = "new ReduceAction7 parser::ReduceAction::init";
-val_t NEW_ReduceAction7_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction132_parser___ReduceAction___init[] = "new ReduceAction132 parser::ReduceAction::init";
+val_t NEW_ReduceAction132_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction7_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction132_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction7();
-  INIT_ATTRIBUTES__parser___ReduceAction7(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction132();
+  INIT_ATTRIBUTES__parser___ReduceAction132(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction7(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction132(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction8[55] = {
-  {(bigint) 595 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction133[55] = {
+  {(bigint) 2719 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction8" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction8 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction8 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 595 /* 5: ReduceAction8 < ReduceAction8: superclass typecheck marker */},
+  {(bigint) "ReduceAction133" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction133 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction133 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2719 /* 5: ReduceAction133 < ReduceAction133: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -87476,7 +108561,7 @@ const classtable_elt_t VFT_parser___ReduceAction8[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction8 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction133 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -87507,46 +108592,46 @@ const classtable_elt_t VFT_parser___ReduceAction8[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction8 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction8___action},
+  {(bigint) 0 /* 50: ReduceAction133 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction133___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction8 < ReduceAction8: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction133 < ReduceAction133: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction8::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction8[] = "init var of ReduceAction8";
-void INIT_ATTRIBUTES__parser___ReduceAction8(val_t p0){
+/* 2: Attribute ReduceAction133::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction133[] = "init var of ReduceAction133";
+void INIT_ATTRIBUTES__parser___ReduceAction133(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction8;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction133;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction8(void)
+val_t NEW_parser___ReduceAction133(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction8;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction133;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction8[] = "check new ReduceAction8";
-void CHECKNEW_parser___ReduceAction8(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction133[] = "check new ReduceAction133";
+void CHECKNEW_parser___ReduceAction133(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction8;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction133;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -87559,36 +108644,36 @@ void CHECKNEW_parser___ReduceAction8(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction8_parser___ReduceAction___init[] = "new ReduceAction8 parser::ReduceAction::init";
-val_t NEW_ReduceAction8_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction133_parser___ReduceAction___init[] = "new ReduceAction133 parser::ReduceAction::init";
+val_t NEW_ReduceAction133_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction8_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction133_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction8();
-  INIT_ATTRIBUTES__parser___ReduceAction8(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction133();
+  INIT_ATTRIBUTES__parser___ReduceAction133(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction8(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction133(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction9[55] = {
-  {(bigint) 419 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction134[55] = {
+  {(bigint) 2715 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction9" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction9 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction9 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 419 /* 5: ReduceAction9 < ReduceAction9: superclass typecheck marker */},
+  {(bigint) "ReduceAction134" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction134 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction134 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2715 /* 5: ReduceAction134 < ReduceAction134: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -87602,7 +108687,7 @@ const classtable_elt_t VFT_parser___ReduceAction9[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction9 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction134 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -87633,46 +108718,46 @@ const classtable_elt_t VFT_parser___ReduceAction9[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction9 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction9___action},
+  {(bigint) 0 /* 50: ReduceAction134 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction134___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction9 < ReduceAction9: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction134 < ReduceAction134: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction9::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction9[] = "init var of ReduceAction9";
-void INIT_ATTRIBUTES__parser___ReduceAction9(val_t p0){
+/* 2: Attribute ReduceAction134::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction134[] = "init var of ReduceAction134";
+void INIT_ATTRIBUTES__parser___ReduceAction134(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction9;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction134;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction9(void)
+val_t NEW_parser___ReduceAction134(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction9;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction134;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction9[] = "check new ReduceAction9";
-void CHECKNEW_parser___ReduceAction9(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction134[] = "check new ReduceAction134";
+void CHECKNEW_parser___ReduceAction134(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction9;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction134;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -87685,36 +108770,36 @@ void CHECKNEW_parser___ReduceAction9(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction9_parser___ReduceAction___init[] = "new ReduceAction9 parser::ReduceAction::init";
-val_t NEW_ReduceAction9_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction134_parser___ReduceAction___init[] = "new ReduceAction134 parser::ReduceAction::init";
+val_t NEW_ReduceAction134_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction9_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction134_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction9();
-  INIT_ATTRIBUTES__parser___ReduceAction9(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction134();
+  INIT_ATTRIBUTES__parser___ReduceAction134(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction9(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction134(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction10[55] = {
-  {(bigint) 2487 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction135[55] = {
+  {(bigint) 2711 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction10" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction10 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction10 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2487 /* 5: ReduceAction10 < ReduceAction10: superclass typecheck marker */},
+  {(bigint) "ReduceAction135" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction135 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction135 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2711 /* 5: ReduceAction135 < ReduceAction135: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -87728,7 +108813,7 @@ const classtable_elt_t VFT_parser___ReduceAction10[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction10 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction135 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -87759,46 +108844,46 @@ const classtable_elt_t VFT_parser___ReduceAction10[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction10 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction10___action},
+  {(bigint) 0 /* 50: ReduceAction135 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction135___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction10 < ReduceAction10: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction135 < ReduceAction135: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction10::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction10[] = "init var of ReduceAction10";
-void INIT_ATTRIBUTES__parser___ReduceAction10(val_t p0){
+/* 2: Attribute ReduceAction135::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction135[] = "init var of ReduceAction135";
+void INIT_ATTRIBUTES__parser___ReduceAction135(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction10;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction135;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction10(void)
+val_t NEW_parser___ReduceAction135(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction10;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction135;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction10[] = "check new ReduceAction10";
-void CHECKNEW_parser___ReduceAction10(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction135[] = "check new ReduceAction135";
+void CHECKNEW_parser___ReduceAction135(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction10;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction135;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -87811,36 +108896,36 @@ void CHECKNEW_parser___ReduceAction10(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction10_parser___ReduceAction___init[] = "new ReduceAction10 parser::ReduceAction::init";
-val_t NEW_ReduceAction10_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction135_parser___ReduceAction___init[] = "new ReduceAction135 parser::ReduceAction::init";
+val_t NEW_ReduceAction135_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction10_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction135_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction10();
-  INIT_ATTRIBUTES__parser___ReduceAction10(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction135();
+  INIT_ATTRIBUTES__parser___ReduceAction135(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction10(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction135(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction11[55] = {
-  {(bigint) 2443 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction136[55] = {
+  {(bigint) 2707 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction11" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction11 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction11 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2443 /* 5: ReduceAction11 < ReduceAction11: superclass typecheck marker */},
+  {(bigint) "ReduceAction136" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction136 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction136 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2707 /* 5: ReduceAction136 < ReduceAction136: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -87854,7 +108939,7 @@ const classtable_elt_t VFT_parser___ReduceAction11[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction11 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction136 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -87885,46 +108970,46 @@ const classtable_elt_t VFT_parser___ReduceAction11[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction11 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction11___action},
+  {(bigint) 0 /* 50: ReduceAction136 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction136___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction11 < ReduceAction11: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction136 < ReduceAction136: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction11::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction11[] = "init var of ReduceAction11";
-void INIT_ATTRIBUTES__parser___ReduceAction11(val_t p0){
+/* 2: Attribute ReduceAction136::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction136[] = "init var of ReduceAction136";
+void INIT_ATTRIBUTES__parser___ReduceAction136(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction11;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction136;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction11(void)
+val_t NEW_parser___ReduceAction136(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction11;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction136;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction11[] = "check new ReduceAction11";
-void CHECKNEW_parser___ReduceAction11(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction136[] = "check new ReduceAction136";
+void CHECKNEW_parser___ReduceAction136(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction11;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction136;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -87937,36 +109022,36 @@ void CHECKNEW_parser___ReduceAction11(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction11_parser___ReduceAction___init[] = "new ReduceAction11 parser::ReduceAction::init";
-val_t NEW_ReduceAction11_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction136_parser___ReduceAction___init[] = "new ReduceAction136 parser::ReduceAction::init";
+val_t NEW_ReduceAction136_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction11_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction136_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction11();
-  INIT_ATTRIBUTES__parser___ReduceAction11(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction136();
+  INIT_ATTRIBUTES__parser___ReduceAction136(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction11(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction136(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction12[55] = {
-  {(bigint) 2399 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction137[55] = {
+  {(bigint) 2703 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction12" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction12 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction12 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2399 /* 5: ReduceAction12 < ReduceAction12: superclass typecheck marker */},
+  {(bigint) "ReduceAction137" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction137 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction137 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2703 /* 5: ReduceAction137 < ReduceAction137: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -87980,7 +109065,7 @@ const classtable_elt_t VFT_parser___ReduceAction12[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction12 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction137 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -88011,46 +109096,46 @@ const classtable_elt_t VFT_parser___ReduceAction12[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction12 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction12___action},
+  {(bigint) 0 /* 50: ReduceAction137 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction137___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction12 < ReduceAction12: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction137 < ReduceAction137: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction12::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction12[] = "init var of ReduceAction12";
-void INIT_ATTRIBUTES__parser___ReduceAction12(val_t p0){
+/* 2: Attribute ReduceAction137::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction137[] = "init var of ReduceAction137";
+void INIT_ATTRIBUTES__parser___ReduceAction137(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction12;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction137;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction12(void)
+val_t NEW_parser___ReduceAction137(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction12;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction137;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction12[] = "check new ReduceAction12";
-void CHECKNEW_parser___ReduceAction12(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction137[] = "check new ReduceAction137";
+void CHECKNEW_parser___ReduceAction137(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction12;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction137;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -88063,36 +109148,36 @@ void CHECKNEW_parser___ReduceAction12(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction12_parser___ReduceAction___init[] = "new ReduceAction12 parser::ReduceAction::init";
-val_t NEW_ReduceAction12_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction137_parser___ReduceAction___init[] = "new ReduceAction137 parser::ReduceAction::init";
+val_t NEW_ReduceAction137_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction12_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction137_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction12();
-  INIT_ATTRIBUTES__parser___ReduceAction12(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction137();
+  INIT_ATTRIBUTES__parser___ReduceAction137(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction12(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction137(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction13[55] = {
-  {(bigint) 2355 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction138[55] = {
+  {(bigint) 2699 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction13" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction13 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction13 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2355 /* 5: ReduceAction13 < ReduceAction13: superclass typecheck marker */},
+  {(bigint) "ReduceAction138" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction138 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction138 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2699 /* 5: ReduceAction138 < ReduceAction138: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -88106,7 +109191,7 @@ const classtable_elt_t VFT_parser___ReduceAction13[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction13 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction138 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -88137,46 +109222,46 @@ const classtable_elt_t VFT_parser___ReduceAction13[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction13 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction13___action},
+  {(bigint) 0 /* 50: ReduceAction138 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction138___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction13 < ReduceAction13: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction138 < ReduceAction138: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction13::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction13[] = "init var of ReduceAction13";
-void INIT_ATTRIBUTES__parser___ReduceAction13(val_t p0){
+/* 2: Attribute ReduceAction138::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction138[] = "init var of ReduceAction138";
+void INIT_ATTRIBUTES__parser___ReduceAction138(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction13;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction138;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction13(void)
+val_t NEW_parser___ReduceAction138(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction13;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction138;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction13[] = "check new ReduceAction13";
-void CHECKNEW_parser___ReduceAction13(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction138[] = "check new ReduceAction138";
+void CHECKNEW_parser___ReduceAction138(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction13;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction138;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -88189,36 +109274,36 @@ void CHECKNEW_parser___ReduceAction13(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction13_parser___ReduceAction___init[] = "new ReduceAction13 parser::ReduceAction::init";
-val_t NEW_ReduceAction13_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction138_parser___ReduceAction___init[] = "new ReduceAction138 parser::ReduceAction::init";
+val_t NEW_ReduceAction138_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction13_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction138_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction13();
-  INIT_ATTRIBUTES__parser___ReduceAction13(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction138();
+  INIT_ATTRIBUTES__parser___ReduceAction138(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction13(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction138(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction14[55] = {
-  {(bigint) 2311 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction139[55] = {
+  {(bigint) 2695 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction14" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction14 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction14 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2311 /* 5: ReduceAction14 < ReduceAction14: superclass typecheck marker */},
+  {(bigint) "ReduceAction139" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction139 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction139 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2695 /* 5: ReduceAction139 < ReduceAction139: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -88232,7 +109317,7 @@ const classtable_elt_t VFT_parser___ReduceAction14[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction14 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction139 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -88263,46 +109348,46 @@ const classtable_elt_t VFT_parser___ReduceAction14[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction14 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction14___action},
+  {(bigint) 0 /* 50: ReduceAction139 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction139___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction14 < ReduceAction14: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction139 < ReduceAction139: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction14::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction14[] = "init var of ReduceAction14";
-void INIT_ATTRIBUTES__parser___ReduceAction14(val_t p0){
+/* 2: Attribute ReduceAction139::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction139[] = "init var of ReduceAction139";
+void INIT_ATTRIBUTES__parser___ReduceAction139(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction14;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction139;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction14(void)
+val_t NEW_parser___ReduceAction139(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction14;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction139;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction14[] = "check new ReduceAction14";
-void CHECKNEW_parser___ReduceAction14(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction139[] = "check new ReduceAction139";
+void CHECKNEW_parser___ReduceAction139(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction14;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction139;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -88315,36 +109400,36 @@ void CHECKNEW_parser___ReduceAction14(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction14_parser___ReduceAction___init[] = "new ReduceAction14 parser::ReduceAction::init";
-val_t NEW_ReduceAction14_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction139_parser___ReduceAction___init[] = "new ReduceAction139 parser::ReduceAction::init";
+val_t NEW_ReduceAction139_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction14_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction139_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction14();
-  INIT_ATTRIBUTES__parser___ReduceAction14(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction139();
+  INIT_ATTRIBUTES__parser___ReduceAction139(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction14(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction139(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction15[55] = {
-  {(bigint) 2267 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction140[55] = {
+  {(bigint) 2687 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction15" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction15 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction15 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2267 /* 5: ReduceAction15 < ReduceAction15: superclass typecheck marker */},
+  {(bigint) "ReduceAction140" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction140 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction140 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2687 /* 5: ReduceAction140 < ReduceAction140: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -88358,7 +109443,7 @@ const classtable_elt_t VFT_parser___ReduceAction15[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction15 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction140 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -88389,46 +109474,46 @@ const classtable_elt_t VFT_parser___ReduceAction15[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction15 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction15___action},
+  {(bigint) 0 /* 50: ReduceAction140 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction140___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction15 < ReduceAction15: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction140 < ReduceAction140: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction15::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction15[] = "init var of ReduceAction15";
-void INIT_ATTRIBUTES__parser___ReduceAction15(val_t p0){
+/* 2: Attribute ReduceAction140::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction140[] = "init var of ReduceAction140";
+void INIT_ATTRIBUTES__parser___ReduceAction140(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction15;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction140;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction15(void)
+val_t NEW_parser___ReduceAction140(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction15;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction140;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction15[] = "check new ReduceAction15";
-void CHECKNEW_parser___ReduceAction15(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction140[] = "check new ReduceAction140";
+void CHECKNEW_parser___ReduceAction140(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction15;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction140;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -88441,36 +109526,36 @@ void CHECKNEW_parser___ReduceAction15(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction15_parser___ReduceAction___init[] = "new ReduceAction15 parser::ReduceAction::init";
-val_t NEW_ReduceAction15_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction140_parser___ReduceAction___init[] = "new ReduceAction140 parser::ReduceAction::init";
+val_t NEW_ReduceAction140_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction15_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction140_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction15();
-  INIT_ATTRIBUTES__parser___ReduceAction15(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction140();
+  INIT_ATTRIBUTES__parser___ReduceAction140(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction15(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction140(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction16[55] = {
-  {(bigint) 2223 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction141[55] = {
+  {(bigint) 2683 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction16" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction16 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction16 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2223 /* 5: ReduceAction16 < ReduceAction16: superclass typecheck marker */},
+  {(bigint) "ReduceAction141" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction141 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction141 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2683 /* 5: ReduceAction141 < ReduceAction141: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -88484,7 +109569,7 @@ const classtable_elt_t VFT_parser___ReduceAction16[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction16 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction141 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -88515,46 +109600,46 @@ const classtable_elt_t VFT_parser___ReduceAction16[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction16 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction16___action},
+  {(bigint) 0 /* 50: ReduceAction141 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction141___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction16 < ReduceAction16: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction141 < ReduceAction141: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction16::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction16[] = "init var of ReduceAction16";
-void INIT_ATTRIBUTES__parser___ReduceAction16(val_t p0){
+/* 2: Attribute ReduceAction141::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction141[] = "init var of ReduceAction141";
+void INIT_ATTRIBUTES__parser___ReduceAction141(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction16;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction141;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction16(void)
+val_t NEW_parser___ReduceAction141(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction16;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction141;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction16[] = "check new ReduceAction16";
-void CHECKNEW_parser___ReduceAction16(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction141[] = "check new ReduceAction141";
+void CHECKNEW_parser___ReduceAction141(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction16;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction141;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -88567,36 +109652,36 @@ void CHECKNEW_parser___ReduceAction16(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction16_parser___ReduceAction___init[] = "new ReduceAction16 parser::ReduceAction::init";
-val_t NEW_ReduceAction16_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction141_parser___ReduceAction___init[] = "new ReduceAction141 parser::ReduceAction::init";
+val_t NEW_ReduceAction141_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction16_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction141_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction16();
-  INIT_ATTRIBUTES__parser___ReduceAction16(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction141();
+  INIT_ATTRIBUTES__parser___ReduceAction141(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction16(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction141(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction17[55] = {
-  {(bigint) 2179 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction142[55] = {
+  {(bigint) 2679 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction17" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction17 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction17 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2179 /* 5: ReduceAction17 < ReduceAction17: superclass typecheck marker */},
+  {(bigint) "ReduceAction142" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction142 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction142 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2679 /* 5: ReduceAction142 < ReduceAction142: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -88610,7 +109695,7 @@ const classtable_elt_t VFT_parser___ReduceAction17[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction17 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction142 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -88641,46 +109726,46 @@ const classtable_elt_t VFT_parser___ReduceAction17[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction17 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction17___action},
+  {(bigint) 0 /* 50: ReduceAction142 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction142___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction17 < ReduceAction17: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction142 < ReduceAction142: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction17::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction17[] = "init var of ReduceAction17";
-void INIT_ATTRIBUTES__parser___ReduceAction17(val_t p0){
+/* 2: Attribute ReduceAction142::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction142[] = "init var of ReduceAction142";
+void INIT_ATTRIBUTES__parser___ReduceAction142(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction17;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction142;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction17(void)
+val_t NEW_parser___ReduceAction142(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction17;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction142;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction17[] = "check new ReduceAction17";
-void CHECKNEW_parser___ReduceAction17(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction142[] = "check new ReduceAction142";
+void CHECKNEW_parser___ReduceAction142(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction17;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction142;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -88693,36 +109778,36 @@ void CHECKNEW_parser___ReduceAction17(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction17_parser___ReduceAction___init[] = "new ReduceAction17 parser::ReduceAction::init";
-val_t NEW_ReduceAction17_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction142_parser___ReduceAction___init[] = "new ReduceAction142 parser::ReduceAction::init";
+val_t NEW_ReduceAction142_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction17_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction142_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction17();
-  INIT_ATTRIBUTES__parser___ReduceAction17(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction142();
+  INIT_ATTRIBUTES__parser___ReduceAction142(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction17(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction142(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction18[55] = {
-  {(bigint) 2135 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction143[55] = {
+  {(bigint) 2675 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction18" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction18 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction18 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2135 /* 5: ReduceAction18 < ReduceAction18: superclass typecheck marker */},
+  {(bigint) "ReduceAction143" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction143 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction143 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2675 /* 5: ReduceAction143 < ReduceAction143: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -88736,7 +109821,7 @@ const classtable_elt_t VFT_parser___ReduceAction18[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction18 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction143 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -88767,46 +109852,46 @@ const classtable_elt_t VFT_parser___ReduceAction18[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction18 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction18___action},
+  {(bigint) 0 /* 50: ReduceAction143 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction143___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction18 < ReduceAction18: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction143 < ReduceAction143: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction18::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction18[] = "init var of ReduceAction18";
-void INIT_ATTRIBUTES__parser___ReduceAction18(val_t p0){
+/* 2: Attribute ReduceAction143::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction143[] = "init var of ReduceAction143";
+void INIT_ATTRIBUTES__parser___ReduceAction143(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction18;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction143;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction18(void)
+val_t NEW_parser___ReduceAction143(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction18;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction143;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction18[] = "check new ReduceAction18";
-void CHECKNEW_parser___ReduceAction18(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction143[] = "check new ReduceAction143";
+void CHECKNEW_parser___ReduceAction143(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction18;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction143;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -88819,36 +109904,36 @@ void CHECKNEW_parser___ReduceAction18(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction18_parser___ReduceAction___init[] = "new ReduceAction18 parser::ReduceAction::init";
-val_t NEW_ReduceAction18_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction143_parser___ReduceAction___init[] = "new ReduceAction143 parser::ReduceAction::init";
+val_t NEW_ReduceAction143_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction18_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction143_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction18();
-  INIT_ATTRIBUTES__parser___ReduceAction18(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction143();
+  INIT_ATTRIBUTES__parser___ReduceAction143(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction18(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction143(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction19[55] = {
-  {(bigint) 2091 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction144[55] = {
+  {(bigint) 2671 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction19" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction19 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction19 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2091 /* 5: ReduceAction19 < ReduceAction19: superclass typecheck marker */},
+  {(bigint) "ReduceAction144" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction144 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction144 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2671 /* 5: ReduceAction144 < ReduceAction144: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -88862,7 +109947,7 @@ const classtable_elt_t VFT_parser___ReduceAction19[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction19 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction144 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -88893,46 +109978,46 @@ const classtable_elt_t VFT_parser___ReduceAction19[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction19 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction19___action},
+  {(bigint) 0 /* 50: ReduceAction144 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction144___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction19 < ReduceAction19: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction144 < ReduceAction144: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction19::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction19[] = "init var of ReduceAction19";
-void INIT_ATTRIBUTES__parser___ReduceAction19(val_t p0){
+/* 2: Attribute ReduceAction144::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction144[] = "init var of ReduceAction144";
+void INIT_ATTRIBUTES__parser___ReduceAction144(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction19;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction144;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction19(void)
+val_t NEW_parser___ReduceAction144(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction19;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction144;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction19[] = "check new ReduceAction19";
-void CHECKNEW_parser___ReduceAction19(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction144[] = "check new ReduceAction144";
+void CHECKNEW_parser___ReduceAction144(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction19;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction144;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -88945,36 +110030,36 @@ void CHECKNEW_parser___ReduceAction19(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction19_parser___ReduceAction___init[] = "new ReduceAction19 parser::ReduceAction::init";
-val_t NEW_ReduceAction19_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction144_parser___ReduceAction___init[] = "new ReduceAction144 parser::ReduceAction::init";
+val_t NEW_ReduceAction144_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction19_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction144_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction19();
-  INIT_ATTRIBUTES__parser___ReduceAction19(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction144();
+  INIT_ATTRIBUTES__parser___ReduceAction144(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction19(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction144(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction20[55] = {
-  {(bigint) 2043 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction145[55] = {
+  {(bigint) 2667 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction20" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction20 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction20 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2043 /* 5: ReduceAction20 < ReduceAction20: superclass typecheck marker */},
+  {(bigint) "ReduceAction145" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction145 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction145 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2667 /* 5: ReduceAction145 < ReduceAction145: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -88988,7 +110073,7 @@ const classtable_elt_t VFT_parser___ReduceAction20[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction20 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction145 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -89019,46 +110104,46 @@ const classtable_elt_t VFT_parser___ReduceAction20[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction20 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction20___action},
+  {(bigint) 0 /* 50: ReduceAction145 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction145___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction20 < ReduceAction20: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction145 < ReduceAction145: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction20::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction20[] = "init var of ReduceAction20";
-void INIT_ATTRIBUTES__parser___ReduceAction20(val_t p0){
+/* 2: Attribute ReduceAction145::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction145[] = "init var of ReduceAction145";
+void INIT_ATTRIBUTES__parser___ReduceAction145(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction20;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction145;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction20(void)
+val_t NEW_parser___ReduceAction145(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction20;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction145;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction20[] = "check new ReduceAction20";
-void CHECKNEW_parser___ReduceAction20(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction145[] = "check new ReduceAction145";
+void CHECKNEW_parser___ReduceAction145(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction20;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction145;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -89071,36 +110156,36 @@ void CHECKNEW_parser___ReduceAction20(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction20_parser___ReduceAction___init[] = "new ReduceAction20 parser::ReduceAction::init";
-val_t NEW_ReduceAction20_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction145_parser___ReduceAction___init[] = "new ReduceAction145 parser::ReduceAction::init";
+val_t NEW_ReduceAction145_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction20_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction145_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction20();
-  INIT_ATTRIBUTES__parser___ReduceAction20(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction145();
+  INIT_ATTRIBUTES__parser___ReduceAction145(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction20(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction145(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction21[55] = {
-  {(bigint) 1999 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction146[55] = {
+  {(bigint) 2663 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction21" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction21 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction21 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1999 /* 5: ReduceAction21 < ReduceAction21: superclass typecheck marker */},
+  {(bigint) "ReduceAction146" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction146 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction146 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2663 /* 5: ReduceAction146 < ReduceAction146: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -89114,7 +110199,7 @@ const classtable_elt_t VFT_parser___ReduceAction21[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction21 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction146 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -89145,46 +110230,46 @@ const classtable_elt_t VFT_parser___ReduceAction21[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction21 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction21___action},
+  {(bigint) 0 /* 50: ReduceAction146 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction146___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction21 < ReduceAction21: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction146 < ReduceAction146: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction21::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction21[] = "init var of ReduceAction21";
-void INIT_ATTRIBUTES__parser___ReduceAction21(val_t p0){
+/* 2: Attribute ReduceAction146::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction146[] = "init var of ReduceAction146";
+void INIT_ATTRIBUTES__parser___ReduceAction146(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction21;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction146;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction21(void)
+val_t NEW_parser___ReduceAction146(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction21;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction146;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction21[] = "check new ReduceAction21";
-void CHECKNEW_parser___ReduceAction21(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction146[] = "check new ReduceAction146";
+void CHECKNEW_parser___ReduceAction146(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction21;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction146;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -89197,36 +110282,36 @@ void CHECKNEW_parser___ReduceAction21(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction21_parser___ReduceAction___init[] = "new ReduceAction21 parser::ReduceAction::init";
-val_t NEW_ReduceAction21_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction146_parser___ReduceAction___init[] = "new ReduceAction146 parser::ReduceAction::init";
+val_t NEW_ReduceAction146_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction21_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction146_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction21();
-  INIT_ATTRIBUTES__parser___ReduceAction21(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction146();
+  INIT_ATTRIBUTES__parser___ReduceAction146(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction21(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction146(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction22[55] = {
-  {(bigint) 1955 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction147[55] = {
+  {(bigint) 2659 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction22" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction22 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction22 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1955 /* 5: ReduceAction22 < ReduceAction22: superclass typecheck marker */},
+  {(bigint) "ReduceAction147" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction147 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction147 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2659 /* 5: ReduceAction147 < ReduceAction147: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -89240,7 +110325,7 @@ const classtable_elt_t VFT_parser___ReduceAction22[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction22 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction147 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -89271,46 +110356,46 @@ const classtable_elt_t VFT_parser___ReduceAction22[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction22 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction22___action},
+  {(bigint) 0 /* 50: ReduceAction147 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction147___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction22 < ReduceAction22: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction147 < ReduceAction147: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction22::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction22[] = "init var of ReduceAction22";
-void INIT_ATTRIBUTES__parser___ReduceAction22(val_t p0){
+/* 2: Attribute ReduceAction147::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction147[] = "init var of ReduceAction147";
+void INIT_ATTRIBUTES__parser___ReduceAction147(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction22;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction147;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction22(void)
+val_t NEW_parser___ReduceAction147(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction22;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction147;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction22[] = "check new ReduceAction22";
-void CHECKNEW_parser___ReduceAction22(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction147[] = "check new ReduceAction147";
+void CHECKNEW_parser___ReduceAction147(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction22;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction147;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -89323,36 +110408,36 @@ void CHECKNEW_parser___ReduceAction22(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction22_parser___ReduceAction___init[] = "new ReduceAction22 parser::ReduceAction::init";
-val_t NEW_ReduceAction22_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction147_parser___ReduceAction___init[] = "new ReduceAction147 parser::ReduceAction::init";
+val_t NEW_ReduceAction147_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction22_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction147_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction22();
-  INIT_ATTRIBUTES__parser___ReduceAction22(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction147();
+  INIT_ATTRIBUTES__parser___ReduceAction147(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction22(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction147(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction23[55] = {
-  {(bigint) 1911 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction148[55] = {
+  {(bigint) 2655 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction23" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction23 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction23 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1911 /* 5: ReduceAction23 < ReduceAction23: superclass typecheck marker */},
+  {(bigint) "ReduceAction148" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction148 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction148 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2655 /* 5: ReduceAction148 < ReduceAction148: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -89366,7 +110451,7 @@ const classtable_elt_t VFT_parser___ReduceAction23[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction23 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction148 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -89397,46 +110482,46 @@ const classtable_elt_t VFT_parser___ReduceAction23[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction23 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction23___action},
+  {(bigint) 0 /* 50: ReduceAction148 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction148___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction23 < ReduceAction23: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction148 < ReduceAction148: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction23::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction23[] = "init var of ReduceAction23";
-void INIT_ATTRIBUTES__parser___ReduceAction23(val_t p0){
+/* 2: Attribute ReduceAction148::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction148[] = "init var of ReduceAction148";
+void INIT_ATTRIBUTES__parser___ReduceAction148(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction23;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction148;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction23(void)
+val_t NEW_parser___ReduceAction148(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction23;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction148;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction23[] = "check new ReduceAction23";
-void CHECKNEW_parser___ReduceAction23(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction148[] = "check new ReduceAction148";
+void CHECKNEW_parser___ReduceAction148(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction23;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction148;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -89449,36 +110534,36 @@ void CHECKNEW_parser___ReduceAction23(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction23_parser___ReduceAction___init[] = "new ReduceAction23 parser::ReduceAction::init";
-val_t NEW_ReduceAction23_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction148_parser___ReduceAction___init[] = "new ReduceAction148 parser::ReduceAction::init";
+val_t NEW_ReduceAction148_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction23_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction148_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction23();
-  INIT_ATTRIBUTES__parser___ReduceAction23(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction148();
+  INIT_ATTRIBUTES__parser___ReduceAction148(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction23(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction148(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction24[55] = {
-  {(bigint) 1867 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction149[55] = {
+  {(bigint) 2651 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction24" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction24 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction24 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1867 /* 5: ReduceAction24 < ReduceAction24: superclass typecheck marker */},
+  {(bigint) "ReduceAction149" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction149 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction149 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2651 /* 5: ReduceAction149 < ReduceAction149: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -89492,7 +110577,7 @@ const classtable_elt_t VFT_parser___ReduceAction24[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction24 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction149 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -89523,46 +110608,46 @@ const classtable_elt_t VFT_parser___ReduceAction24[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction24 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction24___action},
+  {(bigint) 0 /* 50: ReduceAction149 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction149___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction24 < ReduceAction24: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction149 < ReduceAction149: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction24::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction24[] = "init var of ReduceAction24";
-void INIT_ATTRIBUTES__parser___ReduceAction24(val_t p0){
+/* 2: Attribute ReduceAction149::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction149[] = "init var of ReduceAction149";
+void INIT_ATTRIBUTES__parser___ReduceAction149(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction24;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction149;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction24(void)
+val_t NEW_parser___ReduceAction149(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction24;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction149;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction24[] = "check new ReduceAction24";
-void CHECKNEW_parser___ReduceAction24(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction149[] = "check new ReduceAction149";
+void CHECKNEW_parser___ReduceAction149(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction24;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction149;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -89575,36 +110660,36 @@ void CHECKNEW_parser___ReduceAction24(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction24_parser___ReduceAction___init[] = "new ReduceAction24 parser::ReduceAction::init";
-val_t NEW_ReduceAction24_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction149_parser___ReduceAction___init[] = "new ReduceAction149 parser::ReduceAction::init";
+val_t NEW_ReduceAction149_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction24_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction149_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction24();
-  INIT_ATTRIBUTES__parser___ReduceAction24(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction149();
+  INIT_ATTRIBUTES__parser___ReduceAction149(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction24(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction149(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction25[55] = {
-  {(bigint) 1823 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction150[55] = {
+  {(bigint) 2643 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction25" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction25 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction25 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1823 /* 5: ReduceAction25 < ReduceAction25: superclass typecheck marker */},
+  {(bigint) "ReduceAction150" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction150 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction150 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2643 /* 5: ReduceAction150 < ReduceAction150: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -89618,7 +110703,7 @@ const classtable_elt_t VFT_parser___ReduceAction25[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction25 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction150 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -89649,46 +110734,46 @@ const classtable_elt_t VFT_parser___ReduceAction25[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction25 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction25___action},
+  {(bigint) 0 /* 50: ReduceAction150 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction150___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction25 < ReduceAction25: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction150 < ReduceAction150: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction25::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction25[] = "init var of ReduceAction25";
-void INIT_ATTRIBUTES__parser___ReduceAction25(val_t p0){
+/* 2: Attribute ReduceAction150::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction150[] = "init var of ReduceAction150";
+void INIT_ATTRIBUTES__parser___ReduceAction150(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction25;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction150;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction25(void)
+val_t NEW_parser___ReduceAction150(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction25;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction150;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction25[] = "check new ReduceAction25";
-void CHECKNEW_parser___ReduceAction25(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction150[] = "check new ReduceAction150";
+void CHECKNEW_parser___ReduceAction150(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction25;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction150;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -89701,36 +110786,36 @@ void CHECKNEW_parser___ReduceAction25(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction25_parser___ReduceAction___init[] = "new ReduceAction25 parser::ReduceAction::init";
-val_t NEW_ReduceAction25_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction150_parser___ReduceAction___init[] = "new ReduceAction150 parser::ReduceAction::init";
+val_t NEW_ReduceAction150_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction25_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction150_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction25();
-  INIT_ATTRIBUTES__parser___ReduceAction25(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction150();
+  INIT_ATTRIBUTES__parser___ReduceAction150(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction25(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction150(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction26[55] = {
-  {(bigint) 1779 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction151[55] = {
+  {(bigint) 2639 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction26" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction26 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction26 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1779 /* 5: ReduceAction26 < ReduceAction26: superclass typecheck marker */},
+  {(bigint) "ReduceAction151" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction151 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction151 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2639 /* 5: ReduceAction151 < ReduceAction151: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -89744,7 +110829,7 @@ const classtable_elt_t VFT_parser___ReduceAction26[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction26 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction151 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -89775,46 +110860,46 @@ const classtable_elt_t VFT_parser___ReduceAction26[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction26 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction26___action},
+  {(bigint) 0 /* 50: ReduceAction151 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction151___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction26 < ReduceAction26: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction151 < ReduceAction151: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction26::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction26[] = "init var of ReduceAction26";
-void INIT_ATTRIBUTES__parser___ReduceAction26(val_t p0){
+/* 2: Attribute ReduceAction151::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction151[] = "init var of ReduceAction151";
+void INIT_ATTRIBUTES__parser___ReduceAction151(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction26;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction151;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction26(void)
+val_t NEW_parser___ReduceAction151(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction26;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction151;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction26[] = "check new ReduceAction26";
-void CHECKNEW_parser___ReduceAction26(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction151[] = "check new ReduceAction151";
+void CHECKNEW_parser___ReduceAction151(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction26;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction151;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -89827,36 +110912,36 @@ void CHECKNEW_parser___ReduceAction26(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction26_parser___ReduceAction___init[] = "new ReduceAction26 parser::ReduceAction::init";
-val_t NEW_ReduceAction26_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction151_parser___ReduceAction___init[] = "new ReduceAction151 parser::ReduceAction::init";
+val_t NEW_ReduceAction151_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction26_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction151_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction26();
-  INIT_ATTRIBUTES__parser___ReduceAction26(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction151();
+  INIT_ATTRIBUTES__parser___ReduceAction151(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction26(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction151(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction27[55] = {
-  {(bigint) 1735 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction152[55] = {
+  {(bigint) 2635 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction27" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction27 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction27 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1735 /* 5: ReduceAction27 < ReduceAction27: superclass typecheck marker */},
+  {(bigint) "ReduceAction152" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction152 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction152 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2635 /* 5: ReduceAction152 < ReduceAction152: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -89870,7 +110955,7 @@ const classtable_elt_t VFT_parser___ReduceAction27[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction27 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction152 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -89901,46 +110986,46 @@ const classtable_elt_t VFT_parser___ReduceAction27[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction27 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction27___action},
+  {(bigint) 0 /* 50: ReduceAction152 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction152___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction27 < ReduceAction27: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction152 < ReduceAction152: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction27::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction27[] = "init var of ReduceAction27";
-void INIT_ATTRIBUTES__parser___ReduceAction27(val_t p0){
+/* 2: Attribute ReduceAction152::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction152[] = "init var of ReduceAction152";
+void INIT_ATTRIBUTES__parser___ReduceAction152(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction27;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction152;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction27(void)
+val_t NEW_parser___ReduceAction152(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction27;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction152;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction27[] = "check new ReduceAction27";
-void CHECKNEW_parser___ReduceAction27(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction152[] = "check new ReduceAction152";
+void CHECKNEW_parser___ReduceAction152(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction27;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction152;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -89953,36 +111038,36 @@ void CHECKNEW_parser___ReduceAction27(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction27_parser___ReduceAction___init[] = "new ReduceAction27 parser::ReduceAction::init";
-val_t NEW_ReduceAction27_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction152_parser___ReduceAction___init[] = "new ReduceAction152 parser::ReduceAction::init";
+val_t NEW_ReduceAction152_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction27_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction152_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction27();
-  INIT_ATTRIBUTES__parser___ReduceAction27(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction152();
+  INIT_ATTRIBUTES__parser___ReduceAction152(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction27(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction152(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction28[55] = {
-  {(bigint) 1691 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction153[55] = {
+  {(bigint) 2631 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction28" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction28 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction28 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1691 /* 5: ReduceAction28 < ReduceAction28: superclass typecheck marker */},
+  {(bigint) "ReduceAction153" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction153 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction153 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2631 /* 5: ReduceAction153 < ReduceAction153: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -89996,7 +111081,7 @@ const classtable_elt_t VFT_parser___ReduceAction28[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction28 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction153 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -90027,46 +111112,46 @@ const classtable_elt_t VFT_parser___ReduceAction28[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction28 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction28___action},
+  {(bigint) 0 /* 50: ReduceAction153 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction153___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction28 < ReduceAction28: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction153 < ReduceAction153: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction28::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction28[] = "init var of ReduceAction28";
-void INIT_ATTRIBUTES__parser___ReduceAction28(val_t p0){
+/* 2: Attribute ReduceAction153::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction153[] = "init var of ReduceAction153";
+void INIT_ATTRIBUTES__parser___ReduceAction153(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction28;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction153;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction28(void)
+val_t NEW_parser___ReduceAction153(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction28;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction153;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction28[] = "check new ReduceAction28";
-void CHECKNEW_parser___ReduceAction28(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction153[] = "check new ReduceAction153";
+void CHECKNEW_parser___ReduceAction153(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction28;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction153;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -90079,36 +111164,36 @@ void CHECKNEW_parser___ReduceAction28(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction28_parser___ReduceAction___init[] = "new ReduceAction28 parser::ReduceAction::init";
-val_t NEW_ReduceAction28_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction153_parser___ReduceAction___init[] = "new ReduceAction153 parser::ReduceAction::init";
+val_t NEW_ReduceAction153_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction28_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction153_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction28();
-  INIT_ATTRIBUTES__parser___ReduceAction28(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction153();
+  INIT_ATTRIBUTES__parser___ReduceAction153(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction28(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction153(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction29[55] = {
-  {(bigint) 1647 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction154[55] = {
+  {(bigint) 2627 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction29" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction29 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction29 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1647 /* 5: ReduceAction29 < ReduceAction29: superclass typecheck marker */},
+  {(bigint) "ReduceAction154" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction154 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction154 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2627 /* 5: ReduceAction154 < ReduceAction154: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -90122,7 +111207,7 @@ const classtable_elt_t VFT_parser___ReduceAction29[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction29 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction154 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -90153,46 +111238,46 @@ const classtable_elt_t VFT_parser___ReduceAction29[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction29 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction29___action},
+  {(bigint) 0 /* 50: ReduceAction154 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction154___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction29 < ReduceAction29: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction154 < ReduceAction154: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction29::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction29[] = "init var of ReduceAction29";
-void INIT_ATTRIBUTES__parser___ReduceAction29(val_t p0){
+/* 2: Attribute ReduceAction154::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction154[] = "init var of ReduceAction154";
+void INIT_ATTRIBUTES__parser___ReduceAction154(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction29;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction154;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction29(void)
+val_t NEW_parser___ReduceAction154(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction29;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction154;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction29[] = "check new ReduceAction29";
-void CHECKNEW_parser___ReduceAction29(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction154[] = "check new ReduceAction154";
+void CHECKNEW_parser___ReduceAction154(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction29;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction154;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -90205,36 +111290,36 @@ void CHECKNEW_parser___ReduceAction29(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction29_parser___ReduceAction___init[] = "new ReduceAction29 parser::ReduceAction::init";
-val_t NEW_ReduceAction29_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction154_parser___ReduceAction___init[] = "new ReduceAction154 parser::ReduceAction::init";
+val_t NEW_ReduceAction154_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction29_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction154_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction29();
-  INIT_ATTRIBUTES__parser___ReduceAction29(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction154();
+  INIT_ATTRIBUTES__parser___ReduceAction154(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction29(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction154(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction30[55] = {
-  {(bigint) 1599 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction155[55] = {
+  {(bigint) 2623 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction30" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction30 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction30 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1599 /* 5: ReduceAction30 < ReduceAction30: superclass typecheck marker */},
+  {(bigint) "ReduceAction155" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction155 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction155 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2623 /* 5: ReduceAction155 < ReduceAction155: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -90248,7 +111333,7 @@ const classtable_elt_t VFT_parser___ReduceAction30[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction30 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction155 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -90279,46 +111364,46 @@ const classtable_elt_t VFT_parser___ReduceAction30[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction30 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction30___action},
+  {(bigint) 0 /* 50: ReduceAction155 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction155___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction30 < ReduceAction30: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction155 < ReduceAction155: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction30::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction30[] = "init var of ReduceAction30";
-void INIT_ATTRIBUTES__parser___ReduceAction30(val_t p0){
+/* 2: Attribute ReduceAction155::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction155[] = "init var of ReduceAction155";
+void INIT_ATTRIBUTES__parser___ReduceAction155(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction30;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction155;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction30(void)
+val_t NEW_parser___ReduceAction155(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction30;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction155;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction30[] = "check new ReduceAction30";
-void CHECKNEW_parser___ReduceAction30(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction155[] = "check new ReduceAction155";
+void CHECKNEW_parser___ReduceAction155(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction30;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction155;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -90331,36 +111416,36 @@ void CHECKNEW_parser___ReduceAction30(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction30_parser___ReduceAction___init[] = "new ReduceAction30 parser::ReduceAction::init";
-val_t NEW_ReduceAction30_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction155_parser___ReduceAction___init[] = "new ReduceAction155 parser::ReduceAction::init";
+val_t NEW_ReduceAction155_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction30_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction155_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction30();
-  INIT_ATTRIBUTES__parser___ReduceAction30(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction155();
+  INIT_ATTRIBUTES__parser___ReduceAction155(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction30(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction155(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction31[55] = {
-  {(bigint) 1555 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction156[55] = {
+  {(bigint) 2619 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction31" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction31 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction31 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1555 /* 5: ReduceAction31 < ReduceAction31: superclass typecheck marker */},
+  {(bigint) "ReduceAction156" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction156 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction156 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2619 /* 5: ReduceAction156 < ReduceAction156: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -90374,7 +111459,7 @@ const classtable_elt_t VFT_parser___ReduceAction31[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction31 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction156 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -90405,46 +111490,46 @@ const classtable_elt_t VFT_parser___ReduceAction31[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction31 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction31___action},
+  {(bigint) 0 /* 50: ReduceAction156 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction156___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction31 < ReduceAction31: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction156 < ReduceAction156: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction31::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction31[] = "init var of ReduceAction31";
-void INIT_ATTRIBUTES__parser___ReduceAction31(val_t p0){
+/* 2: Attribute ReduceAction156::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction156[] = "init var of ReduceAction156";
+void INIT_ATTRIBUTES__parser___ReduceAction156(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction31;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction156;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction31(void)
+val_t NEW_parser___ReduceAction156(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction31;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction156;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction31[] = "check new ReduceAction31";
-void CHECKNEW_parser___ReduceAction31(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction156[] = "check new ReduceAction156";
+void CHECKNEW_parser___ReduceAction156(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction31;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction156;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -90457,36 +111542,36 @@ void CHECKNEW_parser___ReduceAction31(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction31_parser___ReduceAction___init[] = "new ReduceAction31 parser::ReduceAction::init";
-val_t NEW_ReduceAction31_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction156_parser___ReduceAction___init[] = "new ReduceAction156 parser::ReduceAction::init";
+val_t NEW_ReduceAction156_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction31_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction156_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction31();
-  INIT_ATTRIBUTES__parser___ReduceAction31(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction156();
+  INIT_ATTRIBUTES__parser___ReduceAction156(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction31(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction156(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction32[55] = {
-  {(bigint) 1515 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction157[55] = {
+  {(bigint) 2615 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction32" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction32 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction32 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1515 /* 5: ReduceAction32 < ReduceAction32: superclass typecheck marker */},
+  {(bigint) "ReduceAction157" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction157 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction157 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2615 /* 5: ReduceAction157 < ReduceAction157: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -90500,7 +111585,7 @@ const classtable_elt_t VFT_parser___ReduceAction32[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction32 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction157 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -90531,46 +111616,46 @@ const classtable_elt_t VFT_parser___ReduceAction32[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction32 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction32___action},
+  {(bigint) 0 /* 50: ReduceAction157 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction157___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction32 < ReduceAction32: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction157 < ReduceAction157: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction32::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction32[] = "init var of ReduceAction32";
-void INIT_ATTRIBUTES__parser___ReduceAction32(val_t p0){
+/* 2: Attribute ReduceAction157::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction157[] = "init var of ReduceAction157";
+void INIT_ATTRIBUTES__parser___ReduceAction157(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction32;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction157;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction32(void)
+val_t NEW_parser___ReduceAction157(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction32;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction157;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction32[] = "check new ReduceAction32";
-void CHECKNEW_parser___ReduceAction32(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction157[] = "check new ReduceAction157";
+void CHECKNEW_parser___ReduceAction157(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction32;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction157;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -90583,36 +111668,36 @@ void CHECKNEW_parser___ReduceAction32(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction32_parser___ReduceAction___init[] = "new ReduceAction32 parser::ReduceAction::init";
-val_t NEW_ReduceAction32_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction157_parser___ReduceAction___init[] = "new ReduceAction157 parser::ReduceAction::init";
+val_t NEW_ReduceAction157_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction32_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction157_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction32();
-  INIT_ATTRIBUTES__parser___ReduceAction32(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction157();
+  INIT_ATTRIBUTES__parser___ReduceAction157(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction32(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction157(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction33[55] = {
-  {(bigint) 1471 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction158[55] = {
+  {(bigint) 2611 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction33" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction33 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction33 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1471 /* 5: ReduceAction33 < ReduceAction33: superclass typecheck marker */},
+  {(bigint) "ReduceAction158" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction158 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction158 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2611 /* 5: ReduceAction158 < ReduceAction158: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -90626,7 +111711,7 @@ const classtable_elt_t VFT_parser___ReduceAction33[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction33 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction158 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -90657,46 +111742,46 @@ const classtable_elt_t VFT_parser___ReduceAction33[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction33 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction33___action},
+  {(bigint) 0 /* 50: ReduceAction158 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction158___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction33 < ReduceAction33: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction158 < ReduceAction158: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction33::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction33[] = "init var of ReduceAction33";
-void INIT_ATTRIBUTES__parser___ReduceAction33(val_t p0){
+/* 2: Attribute ReduceAction158::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction158[] = "init var of ReduceAction158";
+void INIT_ATTRIBUTES__parser___ReduceAction158(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction33;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction158;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction33(void)
+val_t NEW_parser___ReduceAction158(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction33;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction158;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction33[] = "check new ReduceAction33";
-void CHECKNEW_parser___ReduceAction33(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction158[] = "check new ReduceAction158";
+void CHECKNEW_parser___ReduceAction158(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction33;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction158;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -90709,36 +111794,36 @@ void CHECKNEW_parser___ReduceAction33(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction33_parser___ReduceAction___init[] = "new ReduceAction33 parser::ReduceAction::init";
-val_t NEW_ReduceAction33_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction158_parser___ReduceAction___init[] = "new ReduceAction158 parser::ReduceAction::init";
+val_t NEW_ReduceAction158_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction33_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction158_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction33();
-  INIT_ATTRIBUTES__parser___ReduceAction33(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction158();
+  INIT_ATTRIBUTES__parser___ReduceAction158(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction33(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction158(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction34[55] = {
-  {(bigint) 1431 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction159[55] = {
+  {(bigint) 2607 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction34" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction34 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction34 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1431 /* 5: ReduceAction34 < ReduceAction34: superclass typecheck marker */},
+  {(bigint) "ReduceAction159" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction159 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction159 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2607 /* 5: ReduceAction159 < ReduceAction159: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -90752,7 +111837,7 @@ const classtable_elt_t VFT_parser___ReduceAction34[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction34 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction159 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -90783,46 +111868,46 @@ const classtable_elt_t VFT_parser___ReduceAction34[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction34 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction34___action},
+  {(bigint) 0 /* 50: ReduceAction159 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction159___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction34 < ReduceAction34: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction159 < ReduceAction159: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction34::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction34[] = "init var of ReduceAction34";
-void INIT_ATTRIBUTES__parser___ReduceAction34(val_t p0){
+/* 2: Attribute ReduceAction159::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction159[] = "init var of ReduceAction159";
+void INIT_ATTRIBUTES__parser___ReduceAction159(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction34;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction159;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction34(void)
+val_t NEW_parser___ReduceAction159(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction34;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction159;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction34[] = "check new ReduceAction34";
-void CHECKNEW_parser___ReduceAction34(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction159[] = "check new ReduceAction159";
+void CHECKNEW_parser___ReduceAction159(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction34;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction159;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -90835,36 +111920,36 @@ void CHECKNEW_parser___ReduceAction34(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction34_parser___ReduceAction___init[] = "new ReduceAction34 parser::ReduceAction::init";
-val_t NEW_ReduceAction34_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction159_parser___ReduceAction___init[] = "new ReduceAction159 parser::ReduceAction::init";
+val_t NEW_ReduceAction159_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction34_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction159_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction34();
-  INIT_ATTRIBUTES__parser___ReduceAction34(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction159();
+  INIT_ATTRIBUTES__parser___ReduceAction159(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction34(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction159(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction35[55] = {
-  {(bigint) 1399 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction160[55] = {
+  {(bigint) 2599 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction35" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction35 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction35 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1399 /* 5: ReduceAction35 < ReduceAction35: superclass typecheck marker */},
+  {(bigint) "ReduceAction160" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction160 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction160 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2599 /* 5: ReduceAction160 < ReduceAction160: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -90878,7 +111963,7 @@ const classtable_elt_t VFT_parser___ReduceAction35[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction35 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction160 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -90909,46 +111994,46 @@ const classtable_elt_t VFT_parser___ReduceAction35[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction35 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction35___action},
+  {(bigint) 0 /* 50: ReduceAction160 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction160___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction35 < ReduceAction35: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction160 < ReduceAction160: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction35::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction35[] = "init var of ReduceAction35";
-void INIT_ATTRIBUTES__parser___ReduceAction35(val_t p0){
+/* 2: Attribute ReduceAction160::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction160[] = "init var of ReduceAction160";
+void INIT_ATTRIBUTES__parser___ReduceAction160(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction35;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction160;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction35(void)
+val_t NEW_parser___ReduceAction160(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction35;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction160;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction35[] = "check new ReduceAction35";
-void CHECKNEW_parser___ReduceAction35(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction160[] = "check new ReduceAction160";
+void CHECKNEW_parser___ReduceAction160(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction35;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction160;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -90961,36 +112046,36 @@ void CHECKNEW_parser___ReduceAction35(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction35_parser___ReduceAction___init[] = "new ReduceAction35 parser::ReduceAction::init";
-val_t NEW_ReduceAction35_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction160_parser___ReduceAction___init[] = "new ReduceAction160 parser::ReduceAction::init";
+val_t NEW_ReduceAction160_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction35_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction160_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction35();
-  INIT_ATTRIBUTES__parser___ReduceAction35(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction160();
+  INIT_ATTRIBUTES__parser___ReduceAction160(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction35(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction160(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction36[55] = {
-  {(bigint) 1355 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction161[55] = {
+  {(bigint) 2595 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction36" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction36 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction36 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1355 /* 5: ReduceAction36 < ReduceAction36: superclass typecheck marker */},
+  {(bigint) "ReduceAction161" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction161 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction161 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2595 /* 5: ReduceAction161 < ReduceAction161: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -91004,7 +112089,7 @@ const classtable_elt_t VFT_parser___ReduceAction36[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction36 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction161 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -91035,46 +112120,46 @@ const classtable_elt_t VFT_parser___ReduceAction36[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction36 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction36___action},
+  {(bigint) 0 /* 50: ReduceAction161 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction161___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction36 < ReduceAction36: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction161 < ReduceAction161: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction36::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction36[] = "init var of ReduceAction36";
-void INIT_ATTRIBUTES__parser___ReduceAction36(val_t p0){
+/* 2: Attribute ReduceAction161::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction161[] = "init var of ReduceAction161";
+void INIT_ATTRIBUTES__parser___ReduceAction161(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction36;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction161;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction36(void)
+val_t NEW_parser___ReduceAction161(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction36;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction161;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction36[] = "check new ReduceAction36";
-void CHECKNEW_parser___ReduceAction36(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction161[] = "check new ReduceAction161";
+void CHECKNEW_parser___ReduceAction161(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction36;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction161;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -91087,36 +112172,36 @@ void CHECKNEW_parser___ReduceAction36(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction36_parser___ReduceAction___init[] = "new ReduceAction36 parser::ReduceAction::init";
-val_t NEW_ReduceAction36_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction161_parser___ReduceAction___init[] = "new ReduceAction161 parser::ReduceAction::init";
+val_t NEW_ReduceAction161_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction36_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction161_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction36();
-  INIT_ATTRIBUTES__parser___ReduceAction36(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction161();
+  INIT_ATTRIBUTES__parser___ReduceAction161(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction36(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction161(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction37[55] = {
-  {(bigint) 1335 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction162[55] = {
+  {(bigint) 2591 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction37" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction37 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction37 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1335 /* 5: ReduceAction37 < ReduceAction37: superclass typecheck marker */},
+  {(bigint) "ReduceAction162" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction162 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction162 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2591 /* 5: ReduceAction162 < ReduceAction162: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -91130,7 +112215,7 @@ const classtable_elt_t VFT_parser___ReduceAction37[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction37 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction162 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -91161,46 +112246,46 @@ const classtable_elt_t VFT_parser___ReduceAction37[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction37 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction37___action},
+  {(bigint) 0 /* 50: ReduceAction162 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction162___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction37 < ReduceAction37: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction162 < ReduceAction162: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction37::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction37[] = "init var of ReduceAction37";
-void INIT_ATTRIBUTES__parser___ReduceAction37(val_t p0){
+/* 2: Attribute ReduceAction162::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction162[] = "init var of ReduceAction162";
+void INIT_ATTRIBUTES__parser___ReduceAction162(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction37;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction162;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction37(void)
+val_t NEW_parser___ReduceAction162(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction37;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction162;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction37[] = "check new ReduceAction37";
-void CHECKNEW_parser___ReduceAction37(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction162[] = "check new ReduceAction162";
+void CHECKNEW_parser___ReduceAction162(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction37;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction162;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -91213,36 +112298,36 @@ void CHECKNEW_parser___ReduceAction37(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction37_parser___ReduceAction___init[] = "new ReduceAction37 parser::ReduceAction::init";
-val_t NEW_ReduceAction37_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction162_parser___ReduceAction___init[] = "new ReduceAction162 parser::ReduceAction::init";
+val_t NEW_ReduceAction162_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction37_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction162_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction37();
-  INIT_ATTRIBUTES__parser___ReduceAction37(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction162();
+  INIT_ATTRIBUTES__parser___ReduceAction162(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction37(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction162(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction38[55] = {
-  {(bigint) 1291 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction163[55] = {
+  {(bigint) 2587 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction38" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction38 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction38 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1291 /* 5: ReduceAction38 < ReduceAction38: superclass typecheck marker */},
+  {(bigint) "ReduceAction163" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction163 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction163 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2587 /* 5: ReduceAction163 < ReduceAction163: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -91256,7 +112341,7 @@ const classtable_elt_t VFT_parser___ReduceAction38[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction38 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction163 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -91287,46 +112372,46 @@ const classtable_elt_t VFT_parser___ReduceAction38[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction38 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction38___action},
+  {(bigint) 0 /* 50: ReduceAction163 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction163___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction38 < ReduceAction38: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction163 < ReduceAction163: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction38::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction38[] = "init var of ReduceAction38";
-void INIT_ATTRIBUTES__parser___ReduceAction38(val_t p0){
+/* 2: Attribute ReduceAction163::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction163[] = "init var of ReduceAction163";
+void INIT_ATTRIBUTES__parser___ReduceAction163(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction38;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction163;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction38(void)
+val_t NEW_parser___ReduceAction163(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction38;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction163;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction38[] = "check new ReduceAction38";
-void CHECKNEW_parser___ReduceAction38(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction163[] = "check new ReduceAction163";
+void CHECKNEW_parser___ReduceAction163(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction38;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction163;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -91339,36 +112424,36 @@ void CHECKNEW_parser___ReduceAction38(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction38_parser___ReduceAction___init[] = "new ReduceAction38 parser::ReduceAction::init";
-val_t NEW_ReduceAction38_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction163_parser___ReduceAction___init[] = "new ReduceAction163 parser::ReduceAction::init";
+val_t NEW_ReduceAction163_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction38_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction163_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction38();
-  INIT_ATTRIBUTES__parser___ReduceAction38(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction163();
+  INIT_ATTRIBUTES__parser___ReduceAction163(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction38(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction163(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction39[55] = {
-  {(bigint) 1247 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction164[55] = {
+  {(bigint) 2583 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction39" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction39 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction39 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1247 /* 5: ReduceAction39 < ReduceAction39: superclass typecheck marker */},
+  {(bigint) "ReduceAction164" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction164 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction164 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2583 /* 5: ReduceAction164 < ReduceAction164: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -91382,7 +112467,7 @@ const classtable_elt_t VFT_parser___ReduceAction39[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction39 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction164 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -91413,46 +112498,46 @@ const classtable_elt_t VFT_parser___ReduceAction39[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction39 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction39___action},
+  {(bigint) 0 /* 50: ReduceAction164 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction164___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction39 < ReduceAction39: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction164 < ReduceAction164: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction39::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction39[] = "init var of ReduceAction39";
-void INIT_ATTRIBUTES__parser___ReduceAction39(val_t p0){
+/* 2: Attribute ReduceAction164::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction164[] = "init var of ReduceAction164";
+void INIT_ATTRIBUTES__parser___ReduceAction164(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction39;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction164;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction39(void)
+val_t NEW_parser___ReduceAction164(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction39;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction164;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction39[] = "check new ReduceAction39";
-void CHECKNEW_parser___ReduceAction39(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction164[] = "check new ReduceAction164";
+void CHECKNEW_parser___ReduceAction164(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction39;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction164;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -91465,36 +112550,36 @@ void CHECKNEW_parser___ReduceAction39(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction39_parser___ReduceAction___init[] = "new ReduceAction39 parser::ReduceAction::init";
-val_t NEW_ReduceAction39_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction164_parser___ReduceAction___init[] = "new ReduceAction164 parser::ReduceAction::init";
+val_t NEW_ReduceAction164_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction39_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction164_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction39();
-  INIT_ATTRIBUTES__parser___ReduceAction39(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction164();
+  INIT_ATTRIBUTES__parser___ReduceAction164(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction39(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction164(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction40[55] = {
-  {(bigint) 1199 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction165[55] = {
+  {(bigint) 2579 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction40" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction40 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction40 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1199 /* 5: ReduceAction40 < ReduceAction40: superclass typecheck marker */},
+  {(bigint) "ReduceAction165" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction165 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction165 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2579 /* 5: ReduceAction165 < ReduceAction165: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -91508,7 +112593,7 @@ const classtable_elt_t VFT_parser___ReduceAction40[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction40 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction165 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -91539,46 +112624,46 @@ const classtable_elt_t VFT_parser___ReduceAction40[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction40 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction40___action},
+  {(bigint) 0 /* 50: ReduceAction165 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction165___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction40 < ReduceAction40: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction165 < ReduceAction165: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction40::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction40[] = "init var of ReduceAction40";
-void INIT_ATTRIBUTES__parser___ReduceAction40(val_t p0){
+/* 2: Attribute ReduceAction165::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction165[] = "init var of ReduceAction165";
+void INIT_ATTRIBUTES__parser___ReduceAction165(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction40;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction165;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction40(void)
+val_t NEW_parser___ReduceAction165(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction40;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction165;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction40[] = "check new ReduceAction40";
-void CHECKNEW_parser___ReduceAction40(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction165[] = "check new ReduceAction165";
+void CHECKNEW_parser___ReduceAction165(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction40;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction165;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -91591,36 +112676,36 @@ void CHECKNEW_parser___ReduceAction40(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction40_parser___ReduceAction___init[] = "new ReduceAction40 parser::ReduceAction::init";
-val_t NEW_ReduceAction40_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction165_parser___ReduceAction___init[] = "new ReduceAction165 parser::ReduceAction::init";
+val_t NEW_ReduceAction165_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction40_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction165_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction40();
-  INIT_ATTRIBUTES__parser___ReduceAction40(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction165();
+  INIT_ATTRIBUTES__parser___ReduceAction165(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction40(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction165(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction41[55] = {
-  {(bigint) 1155 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction166[55] = {
+  {(bigint) 2575 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction41" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction41 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction41 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1155 /* 5: ReduceAction41 < ReduceAction41: superclass typecheck marker */},
+  {(bigint) "ReduceAction166" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction166 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction166 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2575 /* 5: ReduceAction166 < ReduceAction166: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -91634,7 +112719,7 @@ const classtable_elt_t VFT_parser___ReduceAction41[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction41 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction166 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -91665,46 +112750,46 @@ const classtable_elt_t VFT_parser___ReduceAction41[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction41 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction41___action},
+  {(bigint) 0 /* 50: ReduceAction166 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction166___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction41 < ReduceAction41: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction166 < ReduceAction166: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction41::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction41[] = "init var of ReduceAction41";
-void INIT_ATTRIBUTES__parser___ReduceAction41(val_t p0){
+/* 2: Attribute ReduceAction166::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction166[] = "init var of ReduceAction166";
+void INIT_ATTRIBUTES__parser___ReduceAction166(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction41;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction166;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction41(void)
+val_t NEW_parser___ReduceAction166(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction41;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction166;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction41[] = "check new ReduceAction41";
-void CHECKNEW_parser___ReduceAction41(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction166[] = "check new ReduceAction166";
+void CHECKNEW_parser___ReduceAction166(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction41;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction166;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -91717,36 +112802,36 @@ void CHECKNEW_parser___ReduceAction41(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction41_parser___ReduceAction___init[] = "new ReduceAction41 parser::ReduceAction::init";
-val_t NEW_ReduceAction41_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction166_parser___ReduceAction___init[] = "new ReduceAction166 parser::ReduceAction::init";
+val_t NEW_ReduceAction166_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction41_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction166_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction41();
-  INIT_ATTRIBUTES__parser___ReduceAction41(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction166();
+  INIT_ATTRIBUTES__parser___ReduceAction166(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction41(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction166(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction42[55] = {
-  {(bigint) 1115 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction167[55] = {
+  {(bigint) 2571 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction42" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction42 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction42 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1115 /* 5: ReduceAction42 < ReduceAction42: superclass typecheck marker */},
+  {(bigint) "ReduceAction167" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction167 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction167 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2571 /* 5: ReduceAction167 < ReduceAction167: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -91760,7 +112845,7 @@ const classtable_elt_t VFT_parser___ReduceAction42[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction42 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction167 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -91791,46 +112876,46 @@ const classtable_elt_t VFT_parser___ReduceAction42[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction42 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction42___action},
+  {(bigint) 0 /* 50: ReduceAction167 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction167___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction42 < ReduceAction42: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction167 < ReduceAction167: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction42::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction42[] = "init var of ReduceAction42";
-void INIT_ATTRIBUTES__parser___ReduceAction42(val_t p0){
+/* 2: Attribute ReduceAction167::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction167[] = "init var of ReduceAction167";
+void INIT_ATTRIBUTES__parser___ReduceAction167(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction42;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction167;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction42(void)
+val_t NEW_parser___ReduceAction167(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction42;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction167;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction42[] = "check new ReduceAction42";
-void CHECKNEW_parser___ReduceAction42(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction167[] = "check new ReduceAction167";
+void CHECKNEW_parser___ReduceAction167(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction42;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction167;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -91843,36 +112928,36 @@ void CHECKNEW_parser___ReduceAction42(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction42_parser___ReduceAction___init[] = "new ReduceAction42 parser::ReduceAction::init";
-val_t NEW_ReduceAction42_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction167_parser___ReduceAction___init[] = "new ReduceAction167 parser::ReduceAction::init";
+val_t NEW_ReduceAction167_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction42_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction167_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction42();
-  INIT_ATTRIBUTES__parser___ReduceAction42(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction167();
+  INIT_ATTRIBUTES__parser___ReduceAction167(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction42(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction167(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction43[55] = {
-  {(bigint) 1075 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction168[55] = {
+  {(bigint) 2567 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction43" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction43 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction43 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1075 /* 5: ReduceAction43 < ReduceAction43: superclass typecheck marker */},
+  {(bigint) "ReduceAction168" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction168 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction168 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2567 /* 5: ReduceAction168 < ReduceAction168: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -91886,7 +112971,7 @@ const classtable_elt_t VFT_parser___ReduceAction43[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction43 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction168 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -91917,46 +113002,46 @@ const classtable_elt_t VFT_parser___ReduceAction43[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction43 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction43___action},
+  {(bigint) 0 /* 50: ReduceAction168 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction168___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction43 < ReduceAction43: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction168 < ReduceAction168: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction43::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction43[] = "init var of ReduceAction43";
-void INIT_ATTRIBUTES__parser___ReduceAction43(val_t p0){
+/* 2: Attribute ReduceAction168::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction168[] = "init var of ReduceAction168";
+void INIT_ATTRIBUTES__parser___ReduceAction168(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction43;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction168;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction43(void)
+val_t NEW_parser___ReduceAction168(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction43;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction168;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction43[] = "check new ReduceAction43";
-void CHECKNEW_parser___ReduceAction43(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction168[] = "check new ReduceAction168";
+void CHECKNEW_parser___ReduceAction168(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction43;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction168;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -91969,36 +113054,36 @@ void CHECKNEW_parser___ReduceAction43(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction43_parser___ReduceAction___init[] = "new ReduceAction43 parser::ReduceAction::init";
-val_t NEW_ReduceAction43_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction168_parser___ReduceAction___init[] = "new ReduceAction168 parser::ReduceAction::init";
+val_t NEW_ReduceAction168_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction43_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction168_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction43();
-  INIT_ATTRIBUTES__parser___ReduceAction43(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction168();
+  INIT_ATTRIBUTES__parser___ReduceAction168(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction43(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction168(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction44[55] = {
-  {(bigint) 1047 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction169[55] = {
+  {(bigint) 2563 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction44" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction44 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction44 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1047 /* 5: ReduceAction44 < ReduceAction44: superclass typecheck marker */},
+  {(bigint) "ReduceAction169" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction169 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction169 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2563 /* 5: ReduceAction169 < ReduceAction169: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -92012,7 +113097,7 @@ const classtable_elt_t VFT_parser___ReduceAction44[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction44 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction169 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -92043,46 +113128,46 @@ const classtable_elt_t VFT_parser___ReduceAction44[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction44 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction44___action},
+  {(bigint) 0 /* 50: ReduceAction169 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction169___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction44 < ReduceAction44: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction169 < ReduceAction169: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction44::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction44[] = "init var of ReduceAction44";
-void INIT_ATTRIBUTES__parser___ReduceAction44(val_t p0){
+/* 2: Attribute ReduceAction169::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction169[] = "init var of ReduceAction169";
+void INIT_ATTRIBUTES__parser___ReduceAction169(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction44;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction169;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction44(void)
+val_t NEW_parser___ReduceAction169(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction44;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction169;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction44[] = "check new ReduceAction44";
-void CHECKNEW_parser___ReduceAction44(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction169[] = "check new ReduceAction169";
+void CHECKNEW_parser___ReduceAction169(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction44;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction169;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -92095,36 +113180,36 @@ void CHECKNEW_parser___ReduceAction44(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction44_parser___ReduceAction___init[] = "new ReduceAction44 parser::ReduceAction::init";
-val_t NEW_ReduceAction44_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction169_parser___ReduceAction___init[] = "new ReduceAction169 parser::ReduceAction::init";
+val_t NEW_ReduceAction169_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction44_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction169_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction44();
-  INIT_ATTRIBUTES__parser___ReduceAction44(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction169();
+  INIT_ATTRIBUTES__parser___ReduceAction169(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction44(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction169(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction45[55] = {
-  {(bigint) 1015 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction170[55] = {
+  {(bigint) 2555 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction45" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction45 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction45 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1015 /* 5: ReduceAction45 < ReduceAction45: superclass typecheck marker */},
+  {(bigint) "ReduceAction170" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction170 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction170 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2555 /* 5: ReduceAction170 < ReduceAction170: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -92138,7 +113223,7 @@ const classtable_elt_t VFT_parser___ReduceAction45[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction45 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction170 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -92169,46 +113254,46 @@ const classtable_elt_t VFT_parser___ReduceAction45[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction45 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction45___action},
+  {(bigint) 0 /* 50: ReduceAction170 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction170___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction45 < ReduceAction45: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction170 < ReduceAction170: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction45::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction45[] = "init var of ReduceAction45";
-void INIT_ATTRIBUTES__parser___ReduceAction45(val_t p0){
+/* 2: Attribute ReduceAction170::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction170[] = "init var of ReduceAction170";
+void INIT_ATTRIBUTES__parser___ReduceAction170(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction45;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction170;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction45(void)
+val_t NEW_parser___ReduceAction170(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction45;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction170;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction45[] = "check new ReduceAction45";
-void CHECKNEW_parser___ReduceAction45(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction170[] = "check new ReduceAction170";
+void CHECKNEW_parser___ReduceAction170(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction45;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction170;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -92221,36 +113306,36 @@ void CHECKNEW_parser___ReduceAction45(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction45_parser___ReduceAction___init[] = "new ReduceAction45 parser::ReduceAction::init";
-val_t NEW_ReduceAction45_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction170_parser___ReduceAction___init[] = "new ReduceAction170 parser::ReduceAction::init";
+val_t NEW_ReduceAction170_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction45_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction170_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction45();
-  INIT_ATTRIBUTES__parser___ReduceAction45(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction170();
+  INIT_ATTRIBUTES__parser___ReduceAction170(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction45(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction170(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction46[55] = {
-  {(bigint) 975 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction171[55] = {
+  {(bigint) 2551 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction46" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction46 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction46 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 975 /* 5: ReduceAction46 < ReduceAction46: superclass typecheck marker */},
+  {(bigint) "ReduceAction171" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction171 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction171 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2551 /* 5: ReduceAction171 < ReduceAction171: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -92264,7 +113349,7 @@ const classtable_elt_t VFT_parser___ReduceAction46[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction46 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction171 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -92295,46 +113380,46 @@ const classtable_elt_t VFT_parser___ReduceAction46[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction46 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction46___action},
+  {(bigint) 0 /* 50: ReduceAction171 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction171___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction46 < ReduceAction46: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction171 < ReduceAction171: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction46::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction46[] = "init var of ReduceAction46";
-void INIT_ATTRIBUTES__parser___ReduceAction46(val_t p0){
+/* 2: Attribute ReduceAction171::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction171[] = "init var of ReduceAction171";
+void INIT_ATTRIBUTES__parser___ReduceAction171(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction46;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction171;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction46(void)
+val_t NEW_parser___ReduceAction171(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction46;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction171;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction46[] = "check new ReduceAction46";
-void CHECKNEW_parser___ReduceAction46(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction171[] = "check new ReduceAction171";
+void CHECKNEW_parser___ReduceAction171(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction46;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction171;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -92347,36 +113432,36 @@ void CHECKNEW_parser___ReduceAction46(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction46_parser___ReduceAction___init[] = "new ReduceAction46 parser::ReduceAction::init";
-val_t NEW_ReduceAction46_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction171_parser___ReduceAction___init[] = "new ReduceAction171 parser::ReduceAction::init";
+val_t NEW_ReduceAction171_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction46_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction171_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction46();
-  INIT_ATTRIBUTES__parser___ReduceAction46(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction171();
+  INIT_ATTRIBUTES__parser___ReduceAction171(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction46(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction171(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction47[55] = {
-  {(bigint) 943 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction172[55] = {
+  {(bigint) 2547 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction47" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction47 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction47 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 943 /* 5: ReduceAction47 < ReduceAction47: superclass typecheck marker */},
+  {(bigint) "ReduceAction172" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction172 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction172 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2547 /* 5: ReduceAction172 < ReduceAction172: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -92390,7 +113475,7 @@ const classtable_elt_t VFT_parser___ReduceAction47[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction47 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction172 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -92421,46 +113506,46 @@ const classtable_elt_t VFT_parser___ReduceAction47[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction47 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction47___action},
+  {(bigint) 0 /* 50: ReduceAction172 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction172___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction47 < ReduceAction47: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction172 < ReduceAction172: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction47::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction47[] = "init var of ReduceAction47";
-void INIT_ATTRIBUTES__parser___ReduceAction47(val_t p0){
+/* 2: Attribute ReduceAction172::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction172[] = "init var of ReduceAction172";
+void INIT_ATTRIBUTES__parser___ReduceAction172(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction47;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction172;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction47(void)
+val_t NEW_parser___ReduceAction172(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction47;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction172;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction47[] = "check new ReduceAction47";
-void CHECKNEW_parser___ReduceAction47(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction172[] = "check new ReduceAction172";
+void CHECKNEW_parser___ReduceAction172(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction47;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction172;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -92473,36 +113558,36 @@ void CHECKNEW_parser___ReduceAction47(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction47_parser___ReduceAction___init[] = "new ReduceAction47 parser::ReduceAction::init";
-val_t NEW_ReduceAction47_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction172_parser___ReduceAction___init[] = "new ReduceAction172 parser::ReduceAction::init";
+val_t NEW_ReduceAction172_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction47_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction172_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction47();
-  INIT_ATTRIBUTES__parser___ReduceAction47(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction172();
+  INIT_ATTRIBUTES__parser___ReduceAction172(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction47(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction172(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction48[55] = {
-  {(bigint) 923 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction173[55] = {
+  {(bigint) 2543 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction48" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction48 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction48 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 923 /* 5: ReduceAction48 < ReduceAction48: superclass typecheck marker */},
+  {(bigint) "ReduceAction173" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction173 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction173 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2543 /* 5: ReduceAction173 < ReduceAction173: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -92516,7 +113601,7 @@ const classtable_elt_t VFT_parser___ReduceAction48[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction48 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction173 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -92547,46 +113632,46 @@ const classtable_elt_t VFT_parser___ReduceAction48[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction48 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction48___action},
+  {(bigint) 0 /* 50: ReduceAction173 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction173___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction48 < ReduceAction48: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction173 < ReduceAction173: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction48::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction48[] = "init var of ReduceAction48";
-void INIT_ATTRIBUTES__parser___ReduceAction48(val_t p0){
+/* 2: Attribute ReduceAction173::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction173[] = "init var of ReduceAction173";
+void INIT_ATTRIBUTES__parser___ReduceAction173(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction48;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction173;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction48(void)
+val_t NEW_parser___ReduceAction173(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction48;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction173;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction48[] = "check new ReduceAction48";
-void CHECKNEW_parser___ReduceAction48(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction173[] = "check new ReduceAction173";
+void CHECKNEW_parser___ReduceAction173(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction48;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction173;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -92599,36 +113684,36 @@ void CHECKNEW_parser___ReduceAction48(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction48_parser___ReduceAction___init[] = "new ReduceAction48 parser::ReduceAction::init";
-val_t NEW_ReduceAction48_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction173_parser___ReduceAction___init[] = "new ReduceAction173 parser::ReduceAction::init";
+val_t NEW_ReduceAction173_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction48_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction173_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction48();
-  INIT_ATTRIBUTES__parser___ReduceAction48(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction173();
+  INIT_ATTRIBUTES__parser___ReduceAction173(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction48(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction173(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction49[55] = {
-  {(bigint) 879 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction174[55] = {
+  {(bigint) 2539 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction49" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction49 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction49 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 879 /* 5: ReduceAction49 < ReduceAction49: superclass typecheck marker */},
+  {(bigint) "ReduceAction174" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction174 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction174 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2539 /* 5: ReduceAction174 < ReduceAction174: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -92642,7 +113727,7 @@ const classtable_elt_t VFT_parser___ReduceAction49[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction49 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction174 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -92673,46 +113758,46 @@ const classtable_elt_t VFT_parser___ReduceAction49[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction49 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction49___action},
+  {(bigint) 0 /* 50: ReduceAction174 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction174___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction49 < ReduceAction49: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction174 < ReduceAction174: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction49::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction49[] = "init var of ReduceAction49";
-void INIT_ATTRIBUTES__parser___ReduceAction49(val_t p0){
+/* 2: Attribute ReduceAction174::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction174[] = "init var of ReduceAction174";
+void INIT_ATTRIBUTES__parser___ReduceAction174(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction49;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction174;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction49(void)
+val_t NEW_parser___ReduceAction174(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction49;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction174;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction49[] = "check new ReduceAction49";
-void CHECKNEW_parser___ReduceAction49(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction174[] = "check new ReduceAction174";
+void CHECKNEW_parser___ReduceAction174(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction49;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction174;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -92725,36 +113810,36 @@ void CHECKNEW_parser___ReduceAction49(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction49_parser___ReduceAction___init[] = "new ReduceAction49 parser::ReduceAction::init";
-val_t NEW_ReduceAction49_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction174_parser___ReduceAction___init[] = "new ReduceAction174 parser::ReduceAction::init";
+val_t NEW_ReduceAction174_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction49_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction174_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction49();
-  INIT_ATTRIBUTES__parser___ReduceAction49(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction174();
+  INIT_ATTRIBUTES__parser___ReduceAction174(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction49(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction174(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction50[55] = {
-  {(bigint) 835 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction175[55] = {
+  {(bigint) 2535 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction50" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction50 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction50 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 835 /* 5: ReduceAction50 < ReduceAction50: superclass typecheck marker */},
+  {(bigint) "ReduceAction175" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction175 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction175 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2535 /* 5: ReduceAction175 < ReduceAction175: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -92768,7 +113853,7 @@ const classtable_elt_t VFT_parser___ReduceAction50[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction50 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction175 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -92799,46 +113884,46 @@ const classtable_elt_t VFT_parser___ReduceAction50[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction50 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction50___action},
+  {(bigint) 0 /* 50: ReduceAction175 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction175___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction50 < ReduceAction50: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction175 < ReduceAction175: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction50::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction50[] = "init var of ReduceAction50";
-void INIT_ATTRIBUTES__parser___ReduceAction50(val_t p0){
+/* 2: Attribute ReduceAction175::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction175[] = "init var of ReduceAction175";
+void INIT_ATTRIBUTES__parser___ReduceAction175(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction50;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction175;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction50(void)
+val_t NEW_parser___ReduceAction175(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction50;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction175;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction50[] = "check new ReduceAction50";
-void CHECKNEW_parser___ReduceAction50(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction175[] = "check new ReduceAction175";
+void CHECKNEW_parser___ReduceAction175(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction50;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction175;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -92851,36 +113936,36 @@ void CHECKNEW_parser___ReduceAction50(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction50_parser___ReduceAction___init[] = "new ReduceAction50 parser::ReduceAction::init";
-val_t NEW_ReduceAction50_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction175_parser___ReduceAction___init[] = "new ReduceAction175 parser::ReduceAction::init";
+val_t NEW_ReduceAction175_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction50_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction175_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction50();
-  INIT_ATTRIBUTES__parser___ReduceAction50(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction175();
+  INIT_ATTRIBUTES__parser___ReduceAction175(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction50(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction175(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction51[55] = {
-  {(bigint) 803 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction176[55] = {
+  {(bigint) 2531 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction51" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction51 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction51 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 803 /* 5: ReduceAction51 < ReduceAction51: superclass typecheck marker */},
+  {(bigint) "ReduceAction176" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction176 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction176 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2531 /* 5: ReduceAction176 < ReduceAction176: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -92894,7 +113979,7 @@ const classtable_elt_t VFT_parser___ReduceAction51[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction51 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction176 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -92925,46 +114010,46 @@ const classtable_elt_t VFT_parser___ReduceAction51[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction51 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction51___action},
+  {(bigint) 0 /* 50: ReduceAction176 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction176___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction51 < ReduceAction51: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction176 < ReduceAction176: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction51::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction51[] = "init var of ReduceAction51";
-void INIT_ATTRIBUTES__parser___ReduceAction51(val_t p0){
+/* 2: Attribute ReduceAction176::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction176[] = "init var of ReduceAction176";
+void INIT_ATTRIBUTES__parser___ReduceAction176(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction51;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction176;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction51(void)
+val_t NEW_parser___ReduceAction176(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction51;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction176;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction51[] = "check new ReduceAction51";
-void CHECKNEW_parser___ReduceAction51(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction176[] = "check new ReduceAction176";
+void CHECKNEW_parser___ReduceAction176(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction51;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction176;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -92977,36 +114062,36 @@ void CHECKNEW_parser___ReduceAction51(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction51_parser___ReduceAction___init[] = "new ReduceAction51 parser::ReduceAction::init";
-val_t NEW_ReduceAction51_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction176_parser___ReduceAction___init[] = "new ReduceAction176 parser::ReduceAction::init";
+val_t NEW_ReduceAction176_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction51_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction176_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction51();
-  INIT_ATTRIBUTES__parser___ReduceAction51(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction176();
+  INIT_ATTRIBUTES__parser___ReduceAction176(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction51(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction176(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction52[55] = {
-  {(bigint) 763 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction177[55] = {
+  {(bigint) 2527 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction52" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction52 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction52 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 763 /* 5: ReduceAction52 < ReduceAction52: superclass typecheck marker */},
+  {(bigint) "ReduceAction177" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction177 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction177 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2527 /* 5: ReduceAction177 < ReduceAction177: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -93020,7 +114105,7 @@ const classtable_elt_t VFT_parser___ReduceAction52[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction52 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction177 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -93051,46 +114136,46 @@ const classtable_elt_t VFT_parser___ReduceAction52[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction52 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction52___action},
+  {(bigint) 0 /* 50: ReduceAction177 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction177___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction52 < ReduceAction52: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction177 < ReduceAction177: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction52::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction52[] = "init var of ReduceAction52";
-void INIT_ATTRIBUTES__parser___ReduceAction52(val_t p0){
+/* 2: Attribute ReduceAction177::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction177[] = "init var of ReduceAction177";
+void INIT_ATTRIBUTES__parser___ReduceAction177(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction52;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction177;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction52(void)
+val_t NEW_parser___ReduceAction177(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction52;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction177;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction52[] = "check new ReduceAction52";
-void CHECKNEW_parser___ReduceAction52(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction177[] = "check new ReduceAction177";
+void CHECKNEW_parser___ReduceAction177(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction52;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction177;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -93103,36 +114188,36 @@ void CHECKNEW_parser___ReduceAction52(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction52_parser___ReduceAction___init[] = "new ReduceAction52 parser::ReduceAction::init";
-val_t NEW_ReduceAction52_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction177_parser___ReduceAction___init[] = "new ReduceAction177 parser::ReduceAction::init";
+val_t NEW_ReduceAction177_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction52_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction177_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction52();
-  INIT_ATTRIBUTES__parser___ReduceAction52(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction177();
+  INIT_ATTRIBUTES__parser___ReduceAction177(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction52(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction177(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction53[55] = {
-  {(bigint) 723 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction178[55] = {
+  {(bigint) 2523 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction53" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction53 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction53 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 723 /* 5: ReduceAction53 < ReduceAction53: superclass typecheck marker */},
+  {(bigint) "ReduceAction178" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction178 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction178 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2523 /* 5: ReduceAction178 < ReduceAction178: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -93146,7 +114231,7 @@ const classtable_elt_t VFT_parser___ReduceAction53[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction53 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction178 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -93177,46 +114262,46 @@ const classtable_elt_t VFT_parser___ReduceAction53[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction53 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction53___action},
+  {(bigint) 0 /* 50: ReduceAction178 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction178___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction53 < ReduceAction53: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction178 < ReduceAction178: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction53::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction53[] = "init var of ReduceAction53";
-void INIT_ATTRIBUTES__parser___ReduceAction53(val_t p0){
+/* 2: Attribute ReduceAction178::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction178[] = "init var of ReduceAction178";
+void INIT_ATTRIBUTES__parser___ReduceAction178(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction53;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction178;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction53(void)
+val_t NEW_parser___ReduceAction178(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction53;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction178;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction53[] = "check new ReduceAction53";
-void CHECKNEW_parser___ReduceAction53(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction178[] = "check new ReduceAction178";
+void CHECKNEW_parser___ReduceAction178(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction53;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction178;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -93229,36 +114314,36 @@ void CHECKNEW_parser___ReduceAction53(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction53_parser___ReduceAction___init[] = "new ReduceAction53 parser::ReduceAction::init";
-val_t NEW_ReduceAction53_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction178_parser___ReduceAction___init[] = "new ReduceAction178 parser::ReduceAction::init";
+val_t NEW_ReduceAction178_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction53_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction178_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction53();
-  INIT_ATTRIBUTES__parser___ReduceAction53(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction178();
+  INIT_ATTRIBUTES__parser___ReduceAction178(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction53(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction178(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction54[55] = {
-  {(bigint) 703 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction179[55] = {
+  {(bigint) 2519 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction54" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction54 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction54 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 703 /* 5: ReduceAction54 < ReduceAction54: superclass typecheck marker */},
+  {(bigint) "ReduceAction179" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction179 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction179 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2519 /* 5: ReduceAction179 < ReduceAction179: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -93272,7 +114357,7 @@ const classtable_elt_t VFT_parser___ReduceAction54[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction54 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction179 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -93303,46 +114388,46 @@ const classtable_elt_t VFT_parser___ReduceAction54[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction54 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction54___action},
+  {(bigint) 0 /* 50: ReduceAction179 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction179___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction54 < ReduceAction54: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction179 < ReduceAction179: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction54::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction54[] = "init var of ReduceAction54";
-void INIT_ATTRIBUTES__parser___ReduceAction54(val_t p0){
+/* 2: Attribute ReduceAction179::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction179[] = "init var of ReduceAction179";
+void INIT_ATTRIBUTES__parser___ReduceAction179(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction54;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction179;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction54(void)
+val_t NEW_parser___ReduceAction179(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction54;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction179;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction54[] = "check new ReduceAction54";
-void CHECKNEW_parser___ReduceAction54(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction179[] = "check new ReduceAction179";
+void CHECKNEW_parser___ReduceAction179(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction54;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction179;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -93355,36 +114440,36 @@ void CHECKNEW_parser___ReduceAction54(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction54_parser___ReduceAction___init[] = "new ReduceAction54 parser::ReduceAction::init";
-val_t NEW_ReduceAction54_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction179_parser___ReduceAction___init[] = "new ReduceAction179 parser::ReduceAction::init";
+val_t NEW_ReduceAction179_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction54_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction179_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction54();
-  INIT_ATTRIBUTES__parser___ReduceAction54(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction179();
+  INIT_ATTRIBUTES__parser___ReduceAction179(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction54(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction179(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction55[55] = {
-  {(bigint) 699 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction180[55] = {
+  {(bigint) 2511 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction55" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction55 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction55 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 699 /* 5: ReduceAction55 < ReduceAction55: superclass typecheck marker */},
+  {(bigint) "ReduceAction180" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction180 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction180 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2511 /* 5: ReduceAction180 < ReduceAction180: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -93398,7 +114483,7 @@ const classtable_elt_t VFT_parser___ReduceAction55[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction55 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction180 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -93429,46 +114514,46 @@ const classtable_elt_t VFT_parser___ReduceAction55[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction55 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction55___action},
+  {(bigint) 0 /* 50: ReduceAction180 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction180___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction55 < ReduceAction55: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction180 < ReduceAction180: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction55::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction55[] = "init var of ReduceAction55";
-void INIT_ATTRIBUTES__parser___ReduceAction55(val_t p0){
+/* 2: Attribute ReduceAction180::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction180[] = "init var of ReduceAction180";
+void INIT_ATTRIBUTES__parser___ReduceAction180(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction55;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction180;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction55(void)
+val_t NEW_parser___ReduceAction180(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction55;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction180;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction55[] = "check new ReduceAction55";
-void CHECKNEW_parser___ReduceAction55(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction180[] = "check new ReduceAction180";
+void CHECKNEW_parser___ReduceAction180(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction55;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction180;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -93481,36 +114566,36 @@ void CHECKNEW_parser___ReduceAction55(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction55_parser___ReduceAction___init[] = "new ReduceAction55 parser::ReduceAction::init";
-val_t NEW_ReduceAction55_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction180_parser___ReduceAction___init[] = "new ReduceAction180 parser::ReduceAction::init";
+val_t NEW_ReduceAction180_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction55_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction180_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction55();
-  INIT_ATTRIBUTES__parser___ReduceAction55(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction180();
+  INIT_ATTRIBUTES__parser___ReduceAction180(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction55(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction180(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction56[55] = {
-  {(bigint) 695 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction181[55] = {
+  {(bigint) 2507 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction56" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction56 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction56 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 695 /* 5: ReduceAction56 < ReduceAction56: superclass typecheck marker */},
+  {(bigint) "ReduceAction181" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction181 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction181 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2507 /* 5: ReduceAction181 < ReduceAction181: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -93524,7 +114609,7 @@ const classtable_elt_t VFT_parser___ReduceAction56[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction56 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction181 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -93555,46 +114640,46 @@ const classtable_elt_t VFT_parser___ReduceAction56[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction56 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction56___action},
+  {(bigint) 0 /* 50: ReduceAction181 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction181___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction56 < ReduceAction56: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction181 < ReduceAction181: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction56::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction56[] = "init var of ReduceAction56";
-void INIT_ATTRIBUTES__parser___ReduceAction56(val_t p0){
+/* 2: Attribute ReduceAction181::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction181[] = "init var of ReduceAction181";
+void INIT_ATTRIBUTES__parser___ReduceAction181(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction56;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction181;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction56(void)
+val_t NEW_parser___ReduceAction181(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction56;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction181;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction56[] = "check new ReduceAction56";
-void CHECKNEW_parser___ReduceAction56(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction181[] = "check new ReduceAction181";
+void CHECKNEW_parser___ReduceAction181(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction56;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction181;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -93607,36 +114692,36 @@ void CHECKNEW_parser___ReduceAction56(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction56_parser___ReduceAction___init[] = "new ReduceAction56 parser::ReduceAction::init";
-val_t NEW_ReduceAction56_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction181_parser___ReduceAction___init[] = "new ReduceAction181 parser::ReduceAction::init";
+val_t NEW_ReduceAction181_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction56_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction181_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction56();
-  INIT_ATTRIBUTES__parser___ReduceAction56(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction181();
+  INIT_ATTRIBUTES__parser___ReduceAction181(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction56(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction181(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction57[55] = {
-  {(bigint) 691 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction182[55] = {
+  {(bigint) 2503 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction57" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction57 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction57 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 691 /* 5: ReduceAction57 < ReduceAction57: superclass typecheck marker */},
+  {(bigint) "ReduceAction182" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction182 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction182 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2503 /* 5: ReduceAction182 < ReduceAction182: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -93650,7 +114735,7 @@ const classtable_elt_t VFT_parser___ReduceAction57[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction57 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction182 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -93681,46 +114766,46 @@ const classtable_elt_t VFT_parser___ReduceAction57[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction57 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction57___action},
+  {(bigint) 0 /* 50: ReduceAction182 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction182___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction57 < ReduceAction57: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction182 < ReduceAction182: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction57::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction57[] = "init var of ReduceAction57";
-void INIT_ATTRIBUTES__parser___ReduceAction57(val_t p0){
+/* 2: Attribute ReduceAction182::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction182[] = "init var of ReduceAction182";
+void INIT_ATTRIBUTES__parser___ReduceAction182(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction57;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction182;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction57(void)
+val_t NEW_parser___ReduceAction182(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction57;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction182;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction57[] = "check new ReduceAction57";
-void CHECKNEW_parser___ReduceAction57(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction182[] = "check new ReduceAction182";
+void CHECKNEW_parser___ReduceAction182(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction57;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction182;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -93733,36 +114818,36 @@ void CHECKNEW_parser___ReduceAction57(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction57_parser___ReduceAction___init[] = "new ReduceAction57 parser::ReduceAction::init";
-val_t NEW_ReduceAction57_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction182_parser___ReduceAction___init[] = "new ReduceAction182 parser::ReduceAction::init";
+val_t NEW_ReduceAction182_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction57_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction182_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction57();
-  INIT_ATTRIBUTES__parser___ReduceAction57(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction182();
+  INIT_ATTRIBUTES__parser___ReduceAction182(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction57(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction182(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction58[55] = {
-  {(bigint) 687 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction183[55] = {
+  {(bigint) 2499 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction58" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction58 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction58 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 687 /* 5: ReduceAction58 < ReduceAction58: superclass typecheck marker */},
+  {(bigint) "ReduceAction183" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction183 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction183 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2499 /* 5: ReduceAction183 < ReduceAction183: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -93776,7 +114861,7 @@ const classtable_elt_t VFT_parser___ReduceAction58[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction58 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction183 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -93807,46 +114892,46 @@ const classtable_elt_t VFT_parser___ReduceAction58[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction58 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction58___action},
+  {(bigint) 0 /* 50: ReduceAction183 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction183___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction58 < ReduceAction58: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction183 < ReduceAction183: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction58::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction58[] = "init var of ReduceAction58";
-void INIT_ATTRIBUTES__parser___ReduceAction58(val_t p0){
+/* 2: Attribute ReduceAction183::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction183[] = "init var of ReduceAction183";
+void INIT_ATTRIBUTES__parser___ReduceAction183(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction58;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction183;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction58(void)
+val_t NEW_parser___ReduceAction183(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction58;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction183;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction58[] = "check new ReduceAction58";
-void CHECKNEW_parser___ReduceAction58(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction183[] = "check new ReduceAction183";
+void CHECKNEW_parser___ReduceAction183(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction58;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction183;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -93859,36 +114944,36 @@ void CHECKNEW_parser___ReduceAction58(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction58_parser___ReduceAction___init[] = "new ReduceAction58 parser::ReduceAction::init";
-val_t NEW_ReduceAction58_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction183_parser___ReduceAction___init[] = "new ReduceAction183 parser::ReduceAction::init";
+val_t NEW_ReduceAction183_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction58_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction183_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction58();
-  INIT_ATTRIBUTES__parser___ReduceAction58(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction183();
+  INIT_ATTRIBUTES__parser___ReduceAction183(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction58(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction183(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction59[55] = {
-  {(bigint) 683 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction184[55] = {
+  {(bigint) 2495 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction59" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction59 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction59 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 683 /* 5: ReduceAction59 < ReduceAction59: superclass typecheck marker */},
+  {(bigint) "ReduceAction184" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction184 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction184 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2495 /* 5: ReduceAction184 < ReduceAction184: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -93902,7 +114987,7 @@ const classtable_elt_t VFT_parser___ReduceAction59[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction59 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction184 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -93933,46 +115018,46 @@ const classtable_elt_t VFT_parser___ReduceAction59[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction59 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction59___action},
+  {(bigint) 0 /* 50: ReduceAction184 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction184___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction59 < ReduceAction59: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction184 < ReduceAction184: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction59::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction59[] = "init var of ReduceAction59";
-void INIT_ATTRIBUTES__parser___ReduceAction59(val_t p0){
+/* 2: Attribute ReduceAction184::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction184[] = "init var of ReduceAction184";
+void INIT_ATTRIBUTES__parser___ReduceAction184(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction59;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction184;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction59(void)
+val_t NEW_parser___ReduceAction184(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction59;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction184;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction59[] = "check new ReduceAction59";
-void CHECKNEW_parser___ReduceAction59(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction184[] = "check new ReduceAction184";
+void CHECKNEW_parser___ReduceAction184(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction59;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction184;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -93985,36 +115070,36 @@ void CHECKNEW_parser___ReduceAction59(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction59_parser___ReduceAction___init[] = "new ReduceAction59 parser::ReduceAction::init";
-val_t NEW_ReduceAction59_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction184_parser___ReduceAction___init[] = "new ReduceAction184 parser::ReduceAction::init";
+val_t NEW_ReduceAction184_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction59_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction184_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction59();
-  INIT_ATTRIBUTES__parser___ReduceAction59(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction184();
+  INIT_ATTRIBUTES__parser___ReduceAction184(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction59(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction184(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction60[55] = {
-  {(bigint) 675 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction185[55] = {
+  {(bigint) 2491 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction60" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction60 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction60 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 675 /* 5: ReduceAction60 < ReduceAction60: superclass typecheck marker */},
+  {(bigint) "ReduceAction185" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction185 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction185 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2491 /* 5: ReduceAction185 < ReduceAction185: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -94028,7 +115113,7 @@ const classtable_elt_t VFT_parser___ReduceAction60[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction60 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction185 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -94059,46 +115144,46 @@ const classtable_elt_t VFT_parser___ReduceAction60[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction60 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction60___action},
+  {(bigint) 0 /* 50: ReduceAction185 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction185___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction60 < ReduceAction60: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction185 < ReduceAction185: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction60::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction60[] = "init var of ReduceAction60";
-void INIT_ATTRIBUTES__parser___ReduceAction60(val_t p0){
+/* 2: Attribute ReduceAction185::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction185[] = "init var of ReduceAction185";
+void INIT_ATTRIBUTES__parser___ReduceAction185(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction60;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction185;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction60(void)
+val_t NEW_parser___ReduceAction185(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction60;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction185;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction60[] = "check new ReduceAction60";
-void CHECKNEW_parser___ReduceAction60(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction185[] = "check new ReduceAction185";
+void CHECKNEW_parser___ReduceAction185(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction60;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction185;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -94111,36 +115196,36 @@ void CHECKNEW_parser___ReduceAction60(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction60_parser___ReduceAction___init[] = "new ReduceAction60 parser::ReduceAction::init";
-val_t NEW_ReduceAction60_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction185_parser___ReduceAction___init[] = "new ReduceAction185 parser::ReduceAction::init";
+val_t NEW_ReduceAction185_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction60_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction185_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction60();
-  INIT_ATTRIBUTES__parser___ReduceAction60(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction185();
+  INIT_ATTRIBUTES__parser___ReduceAction185(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction60(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction185(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction61[55] = {
-  {(bigint) 671 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction186[55] = {
+  {(bigint) 2487 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction61" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction61 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction61 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 671 /* 5: ReduceAction61 < ReduceAction61: superclass typecheck marker */},
+  {(bigint) "ReduceAction186" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction186 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction186 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2487 /* 5: ReduceAction186 < ReduceAction186: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -94154,7 +115239,7 @@ const classtable_elt_t VFT_parser___ReduceAction61[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction61 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction186 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -94185,46 +115270,46 @@ const classtable_elt_t VFT_parser___ReduceAction61[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction61 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction61___action},
+  {(bigint) 0 /* 50: ReduceAction186 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction186___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction61 < ReduceAction61: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction186 < ReduceAction186: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction61::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction61[] = "init var of ReduceAction61";
-void INIT_ATTRIBUTES__parser___ReduceAction61(val_t p0){
+/* 2: Attribute ReduceAction186::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction186[] = "init var of ReduceAction186";
+void INIT_ATTRIBUTES__parser___ReduceAction186(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction61;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction186;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction61(void)
+val_t NEW_parser___ReduceAction186(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction61;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction186;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction61[] = "check new ReduceAction61";
-void CHECKNEW_parser___ReduceAction61(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction186[] = "check new ReduceAction186";
+void CHECKNEW_parser___ReduceAction186(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction61;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction186;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -94237,36 +115322,36 @@ void CHECKNEW_parser___ReduceAction61(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction61_parser___ReduceAction___init[] = "new ReduceAction61 parser::ReduceAction::init";
-val_t NEW_ReduceAction61_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction186_parser___ReduceAction___init[] = "new ReduceAction186 parser::ReduceAction::init";
+val_t NEW_ReduceAction186_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction61_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction186_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction61();
-  INIT_ATTRIBUTES__parser___ReduceAction61(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction186();
+  INIT_ATTRIBUTES__parser___ReduceAction186(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction61(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction186(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction62[55] = {
-  {(bigint) 667 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction187[55] = {
+  {(bigint) 2483 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction62" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction62 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction62 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 667 /* 5: ReduceAction62 < ReduceAction62: superclass typecheck marker */},
+  {(bigint) "ReduceAction187" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction187 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction187 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2483 /* 5: ReduceAction187 < ReduceAction187: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -94280,7 +115365,7 @@ const classtable_elt_t VFT_parser___ReduceAction62[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction62 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction187 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -94311,46 +115396,46 @@ const classtable_elt_t VFT_parser___ReduceAction62[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction62 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction62___action},
+  {(bigint) 0 /* 50: ReduceAction187 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction187___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction62 < ReduceAction62: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction187 < ReduceAction187: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction62::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction62[] = "init var of ReduceAction62";
-void INIT_ATTRIBUTES__parser___ReduceAction62(val_t p0){
+/* 2: Attribute ReduceAction187::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction187[] = "init var of ReduceAction187";
+void INIT_ATTRIBUTES__parser___ReduceAction187(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction62;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction187;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction62(void)
+val_t NEW_parser___ReduceAction187(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction62;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction187;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction62[] = "check new ReduceAction62";
-void CHECKNEW_parser___ReduceAction62(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction187[] = "check new ReduceAction187";
+void CHECKNEW_parser___ReduceAction187(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction62;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction187;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -94363,36 +115448,36 @@ void CHECKNEW_parser___ReduceAction62(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction62_parser___ReduceAction___init[] = "new ReduceAction62 parser::ReduceAction::init";
-val_t NEW_ReduceAction62_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction187_parser___ReduceAction___init[] = "new ReduceAction187 parser::ReduceAction::init";
+val_t NEW_ReduceAction187_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction62_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction187_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction62();
-  INIT_ATTRIBUTES__parser___ReduceAction62(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction187();
+  INIT_ATTRIBUTES__parser___ReduceAction187(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction62(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction187(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction63[55] = {
-  {(bigint) 663 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction188[55] = {
+  {(bigint) 2479 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction63" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction63 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction63 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 663 /* 5: ReduceAction63 < ReduceAction63: superclass typecheck marker */},
+  {(bigint) "ReduceAction188" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction188 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction188 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2479 /* 5: ReduceAction188 < ReduceAction188: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -94406,7 +115491,7 @@ const classtable_elt_t VFT_parser___ReduceAction63[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction63 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction188 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -94437,46 +115522,46 @@ const classtable_elt_t VFT_parser___ReduceAction63[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction63 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction63___action},
+  {(bigint) 0 /* 50: ReduceAction188 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction188___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction63 < ReduceAction63: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction188 < ReduceAction188: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction63::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction63[] = "init var of ReduceAction63";
-void INIT_ATTRIBUTES__parser___ReduceAction63(val_t p0){
+/* 2: Attribute ReduceAction188::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction188[] = "init var of ReduceAction188";
+void INIT_ATTRIBUTES__parser___ReduceAction188(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction63;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction188;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction63(void)
+val_t NEW_parser___ReduceAction188(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction63;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction188;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction63[] = "check new ReduceAction63";
-void CHECKNEW_parser___ReduceAction63(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction188[] = "check new ReduceAction188";
+void CHECKNEW_parser___ReduceAction188(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction63;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction188;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -94489,36 +115574,36 @@ void CHECKNEW_parser___ReduceAction63(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction63_parser___ReduceAction___init[] = "new ReduceAction63 parser::ReduceAction::init";
-val_t NEW_ReduceAction63_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction188_parser___ReduceAction___init[] = "new ReduceAction188 parser::ReduceAction::init";
+val_t NEW_ReduceAction188_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction63_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction188_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction63();
-  INIT_ATTRIBUTES__parser___ReduceAction63(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction188();
+  INIT_ATTRIBUTES__parser___ReduceAction188(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction63(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction188(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction64[55] = {
-  {(bigint) 659 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction189[55] = {
+  {(bigint) 2475 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction64" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction64 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction64 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 659 /* 5: ReduceAction64 < ReduceAction64: superclass typecheck marker */},
+  {(bigint) "ReduceAction189" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction189 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction189 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2475 /* 5: ReduceAction189 < ReduceAction189: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -94532,7 +115617,7 @@ const classtable_elt_t VFT_parser___ReduceAction64[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction64 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction189 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -94563,46 +115648,46 @@ const classtable_elt_t VFT_parser___ReduceAction64[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction64 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction64___action},
+  {(bigint) 0 /* 50: ReduceAction189 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction189___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction64 < ReduceAction64: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction189 < ReduceAction189: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction64::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction64[] = "init var of ReduceAction64";
-void INIT_ATTRIBUTES__parser___ReduceAction64(val_t p0){
+/* 2: Attribute ReduceAction189::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction189[] = "init var of ReduceAction189";
+void INIT_ATTRIBUTES__parser___ReduceAction189(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction64;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction189;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction64(void)
+val_t NEW_parser___ReduceAction189(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction64;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction189;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction64[] = "check new ReduceAction64";
-void CHECKNEW_parser___ReduceAction64(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction189[] = "check new ReduceAction189";
+void CHECKNEW_parser___ReduceAction189(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction64;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction189;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -94615,36 +115700,36 @@ void CHECKNEW_parser___ReduceAction64(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction64_parser___ReduceAction___init[] = "new ReduceAction64 parser::ReduceAction::init";
-val_t NEW_ReduceAction64_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction189_parser___ReduceAction___init[] = "new ReduceAction189 parser::ReduceAction::init";
+val_t NEW_ReduceAction189_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction64_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction189_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction64();
-  INIT_ATTRIBUTES__parser___ReduceAction64(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction189();
+  INIT_ATTRIBUTES__parser___ReduceAction189(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction64(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction189(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction65[55] = {
-  {(bigint) 655 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction190[55] = {
+  {(bigint) 2467 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction65" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction65 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction65 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 655 /* 5: ReduceAction65 < ReduceAction65: superclass typecheck marker */},
+  {(bigint) "ReduceAction190" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction190 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction190 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2467 /* 5: ReduceAction190 < ReduceAction190: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -94658,7 +115743,7 @@ const classtable_elt_t VFT_parser___ReduceAction65[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction65 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction190 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -94689,46 +115774,46 @@ const classtable_elt_t VFT_parser___ReduceAction65[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction65 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction65___action},
+  {(bigint) 0 /* 50: ReduceAction190 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction190___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction65 < ReduceAction65: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction190 < ReduceAction190: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction65::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction65[] = "init var of ReduceAction65";
-void INIT_ATTRIBUTES__parser___ReduceAction65(val_t p0){
+/* 2: Attribute ReduceAction190::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction190[] = "init var of ReduceAction190";
+void INIT_ATTRIBUTES__parser___ReduceAction190(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction65;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction190;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction65(void)
+val_t NEW_parser___ReduceAction190(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction65;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction190;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction65[] = "check new ReduceAction65";
-void CHECKNEW_parser___ReduceAction65(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction190[] = "check new ReduceAction190";
+void CHECKNEW_parser___ReduceAction190(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction65;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction190;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -94741,36 +115826,36 @@ void CHECKNEW_parser___ReduceAction65(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction65_parser___ReduceAction___init[] = "new ReduceAction65 parser::ReduceAction::init";
-val_t NEW_ReduceAction65_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction190_parser___ReduceAction___init[] = "new ReduceAction190 parser::ReduceAction::init";
+val_t NEW_ReduceAction190_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction65_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction190_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction65();
-  INIT_ATTRIBUTES__parser___ReduceAction65(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction190();
+  INIT_ATTRIBUTES__parser___ReduceAction190(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction65(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction190(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction66[55] = {
-  {(bigint) 651 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction191[55] = {
+  {(bigint) 2463 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction66" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction66 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction66 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 651 /* 5: ReduceAction66 < ReduceAction66: superclass typecheck marker */},
+  {(bigint) "ReduceAction191" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction191 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction191 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2463 /* 5: ReduceAction191 < ReduceAction191: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -94784,7 +115869,7 @@ const classtable_elt_t VFT_parser___ReduceAction66[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction66 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction191 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -94815,46 +115900,46 @@ const classtable_elt_t VFT_parser___ReduceAction66[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction66 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction66___action},
+  {(bigint) 0 /* 50: ReduceAction191 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction191___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction66 < ReduceAction66: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction191 < ReduceAction191: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction66::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction66[] = "init var of ReduceAction66";
-void INIT_ATTRIBUTES__parser___ReduceAction66(val_t p0){
+/* 2: Attribute ReduceAction191::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction191[] = "init var of ReduceAction191";
+void INIT_ATTRIBUTES__parser___ReduceAction191(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction66;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction191;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction66(void)
+val_t NEW_parser___ReduceAction191(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction66;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction191;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction66[] = "check new ReduceAction66";
-void CHECKNEW_parser___ReduceAction66(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction191[] = "check new ReduceAction191";
+void CHECKNEW_parser___ReduceAction191(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction66;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction191;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -94867,36 +115952,36 @@ void CHECKNEW_parser___ReduceAction66(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction66_parser___ReduceAction___init[] = "new ReduceAction66 parser::ReduceAction::init";
-val_t NEW_ReduceAction66_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction191_parser___ReduceAction___init[] = "new ReduceAction191 parser::ReduceAction::init";
+val_t NEW_ReduceAction191_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction66_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction191_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction66();
-  INIT_ATTRIBUTES__parser___ReduceAction66(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction191();
+  INIT_ATTRIBUTES__parser___ReduceAction191(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction66(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction191(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction67[55] = {
-  {(bigint) 647 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction192[55] = {
+  {(bigint) 2459 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction67" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction67 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction67 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 647 /* 5: ReduceAction67 < ReduceAction67: superclass typecheck marker */},
+  {(bigint) "ReduceAction192" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction192 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction192 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2459 /* 5: ReduceAction192 < ReduceAction192: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -94910,7 +115995,7 @@ const classtable_elt_t VFT_parser___ReduceAction67[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction67 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction192 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -94941,46 +116026,46 @@ const classtable_elt_t VFT_parser___ReduceAction67[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction67 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction67___action},
+  {(bigint) 0 /* 50: ReduceAction192 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction192___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction67 < ReduceAction67: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction192 < ReduceAction192: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction67::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction67[] = "init var of ReduceAction67";
-void INIT_ATTRIBUTES__parser___ReduceAction67(val_t p0){
+/* 2: Attribute ReduceAction192::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction192[] = "init var of ReduceAction192";
+void INIT_ATTRIBUTES__parser___ReduceAction192(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction67;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction192;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction67(void)
+val_t NEW_parser___ReduceAction192(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction67;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction192;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction67[] = "check new ReduceAction67";
-void CHECKNEW_parser___ReduceAction67(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction192[] = "check new ReduceAction192";
+void CHECKNEW_parser___ReduceAction192(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction67;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction192;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -94993,36 +116078,36 @@ void CHECKNEW_parser___ReduceAction67(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction67_parser___ReduceAction___init[] = "new ReduceAction67 parser::ReduceAction::init";
-val_t NEW_ReduceAction67_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction192_parser___ReduceAction___init[] = "new ReduceAction192 parser::ReduceAction::init";
+val_t NEW_ReduceAction192_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction67_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction192_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction67();
-  INIT_ATTRIBUTES__parser___ReduceAction67(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction192();
+  INIT_ATTRIBUTES__parser___ReduceAction192(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction67(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction192(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction68[55] = {
-  {(bigint) 643 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction193[55] = {
+  {(bigint) 2455 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction68" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction68 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction68 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 643 /* 5: ReduceAction68 < ReduceAction68: superclass typecheck marker */},
+  {(bigint) "ReduceAction193" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction193 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction193 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2455 /* 5: ReduceAction193 < ReduceAction193: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -95036,7 +116121,7 @@ const classtable_elt_t VFT_parser___ReduceAction68[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction68 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction193 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -95067,46 +116152,46 @@ const classtable_elt_t VFT_parser___ReduceAction68[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction68 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction68___action},
+  {(bigint) 0 /* 50: ReduceAction193 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction193___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction68 < ReduceAction68: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction193 < ReduceAction193: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction68::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction68[] = "init var of ReduceAction68";
-void INIT_ATTRIBUTES__parser___ReduceAction68(val_t p0){
+/* 2: Attribute ReduceAction193::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction193[] = "init var of ReduceAction193";
+void INIT_ATTRIBUTES__parser___ReduceAction193(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction68;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction193;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction68(void)
+val_t NEW_parser___ReduceAction193(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction68;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction193;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction68[] = "check new ReduceAction68";
-void CHECKNEW_parser___ReduceAction68(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction193[] = "check new ReduceAction193";
+void CHECKNEW_parser___ReduceAction193(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction68;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction193;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -95119,36 +116204,36 @@ void CHECKNEW_parser___ReduceAction68(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction68_parser___ReduceAction___init[] = "new ReduceAction68 parser::ReduceAction::init";
-val_t NEW_ReduceAction68_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction193_parser___ReduceAction___init[] = "new ReduceAction193 parser::ReduceAction::init";
+val_t NEW_ReduceAction193_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction68_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction193_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction68();
-  INIT_ATTRIBUTES__parser___ReduceAction68(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction193();
+  INIT_ATTRIBUTES__parser___ReduceAction193(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction68(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction193(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction69[55] = {
-  {(bigint) 639 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction194[55] = {
+  {(bigint) 2451 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction69" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction69 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction69 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 639 /* 5: ReduceAction69 < ReduceAction69: superclass typecheck marker */},
+  {(bigint) "ReduceAction194" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction194 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction194 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2451 /* 5: ReduceAction194 < ReduceAction194: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -95162,7 +116247,7 @@ const classtable_elt_t VFT_parser___ReduceAction69[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction69 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction194 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -95193,46 +116278,46 @@ const classtable_elt_t VFT_parser___ReduceAction69[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction69 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction69___action},
+  {(bigint) 0 /* 50: ReduceAction194 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction194___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction69 < ReduceAction69: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction194 < ReduceAction194: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction69::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction69[] = "init var of ReduceAction69";
-void INIT_ATTRIBUTES__parser___ReduceAction69(val_t p0){
+/* 2: Attribute ReduceAction194::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction194[] = "init var of ReduceAction194";
+void INIT_ATTRIBUTES__parser___ReduceAction194(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction69;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction194;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction69(void)
+val_t NEW_parser___ReduceAction194(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction69;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction194;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction69[] = "check new ReduceAction69";
-void CHECKNEW_parser___ReduceAction69(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction194[] = "check new ReduceAction194";
+void CHECKNEW_parser___ReduceAction194(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction69;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction194;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -95245,36 +116330,36 @@ void CHECKNEW_parser___ReduceAction69(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction69_parser___ReduceAction___init[] = "new ReduceAction69 parser::ReduceAction::init";
-val_t NEW_ReduceAction69_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction194_parser___ReduceAction___init[] = "new ReduceAction194 parser::ReduceAction::init";
+val_t NEW_ReduceAction194_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction69_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction194_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction69();
-  INIT_ATTRIBUTES__parser___ReduceAction69(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction194();
+  INIT_ATTRIBUTES__parser___ReduceAction194(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction69(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction194(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction71[55] = {
-  {(bigint) 631 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction195[55] = {
+  {(bigint) 2447 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction71" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction71 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction71 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 631 /* 5: ReduceAction71 < ReduceAction71: superclass typecheck marker */},
+  {(bigint) "ReduceAction195" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction195 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction195 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2447 /* 5: ReduceAction195 < ReduceAction195: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -95288,7 +116373,7 @@ const classtable_elt_t VFT_parser___ReduceAction71[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction71 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction195 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -95319,46 +116404,46 @@ const classtable_elt_t VFT_parser___ReduceAction71[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction71 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction71___action},
+  {(bigint) 0 /* 50: ReduceAction195 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction195___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction71 < ReduceAction71: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction195 < ReduceAction195: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction71::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction71[] = "init var of ReduceAction71";
-void INIT_ATTRIBUTES__parser___ReduceAction71(val_t p0){
+/* 2: Attribute ReduceAction195::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction195[] = "init var of ReduceAction195";
+void INIT_ATTRIBUTES__parser___ReduceAction195(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction71;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction195;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction71(void)
+val_t NEW_parser___ReduceAction195(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction71;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction195;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction71[] = "check new ReduceAction71";
-void CHECKNEW_parser___ReduceAction71(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction195[] = "check new ReduceAction195";
+void CHECKNEW_parser___ReduceAction195(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction71;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction195;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -95371,36 +116456,36 @@ void CHECKNEW_parser___ReduceAction71(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction71_parser___ReduceAction___init[] = "new ReduceAction71 parser::ReduceAction::init";
-val_t NEW_ReduceAction71_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction195_parser___ReduceAction___init[] = "new ReduceAction195 parser::ReduceAction::init";
+val_t NEW_ReduceAction195_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction71_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction195_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction71();
-  INIT_ATTRIBUTES__parser___ReduceAction71(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction195();
+  INIT_ATTRIBUTES__parser___ReduceAction195(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction71(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction195(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction72[55] = {
-  {(bigint) 627 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction196[55] = {
+  {(bigint) 2443 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction72" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction72 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction72 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 627 /* 5: ReduceAction72 < ReduceAction72: superclass typecheck marker */},
+  {(bigint) "ReduceAction196" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction196 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction196 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2443 /* 5: ReduceAction196 < ReduceAction196: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -95414,7 +116499,7 @@ const classtable_elt_t VFT_parser___ReduceAction72[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction72 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction196 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -95445,46 +116530,46 @@ const classtable_elt_t VFT_parser___ReduceAction72[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction72 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction72___action},
+  {(bigint) 0 /* 50: ReduceAction196 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction196___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction72 < ReduceAction72: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction196 < ReduceAction196: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction72::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction72[] = "init var of ReduceAction72";
-void INIT_ATTRIBUTES__parser___ReduceAction72(val_t p0){
+/* 2: Attribute ReduceAction196::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction196[] = "init var of ReduceAction196";
+void INIT_ATTRIBUTES__parser___ReduceAction196(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction72;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction196;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction72(void)
+val_t NEW_parser___ReduceAction196(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction72;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction196;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction72[] = "check new ReduceAction72";
-void CHECKNEW_parser___ReduceAction72(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction196[] = "check new ReduceAction196";
+void CHECKNEW_parser___ReduceAction196(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction72;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction196;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -95497,36 +116582,36 @@ void CHECKNEW_parser___ReduceAction72(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction72_parser___ReduceAction___init[] = "new ReduceAction72 parser::ReduceAction::init";
-val_t NEW_ReduceAction72_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction196_parser___ReduceAction___init[] = "new ReduceAction196 parser::ReduceAction::init";
+val_t NEW_ReduceAction196_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction72_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction196_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction72();
-  INIT_ATTRIBUTES__parser___ReduceAction72(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction196();
+  INIT_ATTRIBUTES__parser___ReduceAction196(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction72(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction196(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction73[55] = {
-  {(bigint) 623 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction197[55] = {
+  {(bigint) 2439 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction73" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction73 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction73 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 623 /* 5: ReduceAction73 < ReduceAction73: superclass typecheck marker */},
+  {(bigint) "ReduceAction197" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction197 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction197 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2439 /* 5: ReduceAction197 < ReduceAction197: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -95540,7 +116625,7 @@ const classtable_elt_t VFT_parser___ReduceAction73[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction73 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction197 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -95571,46 +116656,46 @@ const classtable_elt_t VFT_parser___ReduceAction73[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction73 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction73___action},
+  {(bigint) 0 /* 50: ReduceAction197 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction197___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction73 < ReduceAction73: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction197 < ReduceAction197: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction73::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction73[] = "init var of ReduceAction73";
-void INIT_ATTRIBUTES__parser___ReduceAction73(val_t p0){
+/* 2: Attribute ReduceAction197::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction197[] = "init var of ReduceAction197";
+void INIT_ATTRIBUTES__parser___ReduceAction197(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction73;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction197;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction73(void)
+val_t NEW_parser___ReduceAction197(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction73;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction197;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction73[] = "check new ReduceAction73";
-void CHECKNEW_parser___ReduceAction73(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction197[] = "check new ReduceAction197";
+void CHECKNEW_parser___ReduceAction197(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction73;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction197;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -95623,36 +116708,36 @@ void CHECKNEW_parser___ReduceAction73(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction73_parser___ReduceAction___init[] = "new ReduceAction73 parser::ReduceAction::init";
-val_t NEW_ReduceAction73_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction197_parser___ReduceAction___init[] = "new ReduceAction197 parser::ReduceAction::init";
+val_t NEW_ReduceAction197_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction73_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction197_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction73();
-  INIT_ATTRIBUTES__parser___ReduceAction73(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction197();
+  INIT_ATTRIBUTES__parser___ReduceAction197(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction73(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction197(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction74[55] = {
-  {(bigint) 619 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction198[55] = {
+  {(bigint) 2435 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction74" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction74 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction74 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 619 /* 5: ReduceAction74 < ReduceAction74: superclass typecheck marker */},
+  {(bigint) "ReduceAction198" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction198 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction198 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2435 /* 5: ReduceAction198 < ReduceAction198: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -95666,7 +116751,7 @@ const classtable_elt_t VFT_parser___ReduceAction74[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction74 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction198 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -95697,46 +116782,46 @@ const classtable_elt_t VFT_parser___ReduceAction74[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction74 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction74___action},
+  {(bigint) 0 /* 50: ReduceAction198 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction198___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction74 < ReduceAction74: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction198 < ReduceAction198: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction74::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction74[] = "init var of ReduceAction74";
-void INIT_ATTRIBUTES__parser___ReduceAction74(val_t p0){
+/* 2: Attribute ReduceAction198::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction198[] = "init var of ReduceAction198";
+void INIT_ATTRIBUTES__parser___ReduceAction198(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction74;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction198;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction74(void)
+val_t NEW_parser___ReduceAction198(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction74;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction198;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction74[] = "check new ReduceAction74";
-void CHECKNEW_parser___ReduceAction74(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction198[] = "check new ReduceAction198";
+void CHECKNEW_parser___ReduceAction198(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction74;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction198;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -95749,36 +116834,36 @@ void CHECKNEW_parser___ReduceAction74(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction74_parser___ReduceAction___init[] = "new ReduceAction74 parser::ReduceAction::init";
-val_t NEW_ReduceAction74_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction198_parser___ReduceAction___init[] = "new ReduceAction198 parser::ReduceAction::init";
+val_t NEW_ReduceAction198_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction74_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction198_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction74();
-  INIT_ATTRIBUTES__parser___ReduceAction74(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction198();
+  INIT_ATTRIBUTES__parser___ReduceAction198(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction74(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction198(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction75[55] = {
-  {(bigint) 615 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction199[55] = {
+  {(bigint) 2431 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction75" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction75 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction75 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 615 /* 5: ReduceAction75 < ReduceAction75: superclass typecheck marker */},
+  {(bigint) "ReduceAction199" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction199 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction199 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2431 /* 5: ReduceAction199 < ReduceAction199: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -95792,7 +116877,7 @@ const classtable_elt_t VFT_parser___ReduceAction75[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction75 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction199 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -95823,46 +116908,46 @@ const classtable_elt_t VFT_parser___ReduceAction75[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction75 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction75___action},
+  {(bigint) 0 /* 50: ReduceAction199 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction199___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction75 < ReduceAction75: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction199 < ReduceAction199: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction75::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction75[] = "init var of ReduceAction75";
-void INIT_ATTRIBUTES__parser___ReduceAction75(val_t p0){
+/* 2: Attribute ReduceAction199::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction199[] = "init var of ReduceAction199";
+void INIT_ATTRIBUTES__parser___ReduceAction199(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction75;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction199;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction75(void)
+val_t NEW_parser___ReduceAction199(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction75;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction199;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction75[] = "check new ReduceAction75";
-void CHECKNEW_parser___ReduceAction75(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction199[] = "check new ReduceAction199";
+void CHECKNEW_parser___ReduceAction199(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction75;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction199;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -95875,36 +116960,36 @@ void CHECKNEW_parser___ReduceAction75(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction75_parser___ReduceAction___init[] = "new ReduceAction75 parser::ReduceAction::init";
-val_t NEW_ReduceAction75_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction199_parser___ReduceAction___init[] = "new ReduceAction199 parser::ReduceAction::init";
+val_t NEW_ReduceAction199_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction75_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction199_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction75();
-  INIT_ATTRIBUTES__parser___ReduceAction75(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction199();
+  INIT_ATTRIBUTES__parser___ReduceAction199(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction75(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction199(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction76[55] = {
-  {(bigint) 611 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction200[55] = {
+  {(bigint) 2419 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction76" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction76 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction76 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 611 /* 5: ReduceAction76 < ReduceAction76: superclass typecheck marker */},
+  {(bigint) "ReduceAction200" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction200 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction200 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2419 /* 5: ReduceAction200 < ReduceAction200: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -95918,7 +117003,7 @@ const classtable_elt_t VFT_parser___ReduceAction76[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction76 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction200 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -95949,46 +117034,46 @@ const classtable_elt_t VFT_parser___ReduceAction76[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction76 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction76___action},
+  {(bigint) 0 /* 50: ReduceAction200 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction200___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction76 < ReduceAction76: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction200 < ReduceAction200: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction76::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction76[] = "init var of ReduceAction76";
-void INIT_ATTRIBUTES__parser___ReduceAction76(val_t p0){
+/* 2: Attribute ReduceAction200::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction200[] = "init var of ReduceAction200";
+void INIT_ATTRIBUTES__parser___ReduceAction200(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction76;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction200;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction76(void)
+val_t NEW_parser___ReduceAction200(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction76;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction200;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction76[] = "check new ReduceAction76";
-void CHECKNEW_parser___ReduceAction76(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction200[] = "check new ReduceAction200";
+void CHECKNEW_parser___ReduceAction200(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction76;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction200;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -96001,36 +117086,36 @@ void CHECKNEW_parser___ReduceAction76(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction76_parser___ReduceAction___init[] = "new ReduceAction76 parser::ReduceAction::init";
-val_t NEW_ReduceAction76_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction200_parser___ReduceAction___init[] = "new ReduceAction200 parser::ReduceAction::init";
+val_t NEW_ReduceAction200_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction76_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction200_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction76();
-  INIT_ATTRIBUTES__parser___ReduceAction76(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction200();
+  INIT_ATTRIBUTES__parser___ReduceAction200(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction76(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction200(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction77[55] = {
-  {(bigint) 607 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction201[55] = {
+  {(bigint) 2415 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction77" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction77 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction77 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 607 /* 5: ReduceAction77 < ReduceAction77: superclass typecheck marker */},
+  {(bigint) "ReduceAction201" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction201 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction201 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2415 /* 5: ReduceAction201 < ReduceAction201: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -96044,7 +117129,7 @@ const classtable_elt_t VFT_parser___ReduceAction77[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction77 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction201 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -96075,46 +117160,46 @@ const classtable_elt_t VFT_parser___ReduceAction77[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction77 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction77___action},
+  {(bigint) 0 /* 50: ReduceAction201 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction201___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction77 < ReduceAction77: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction201 < ReduceAction201: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction77::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction77[] = "init var of ReduceAction77";
-void INIT_ATTRIBUTES__parser___ReduceAction77(val_t p0){
+/* 2: Attribute ReduceAction201::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction201[] = "init var of ReduceAction201";
+void INIT_ATTRIBUTES__parser___ReduceAction201(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction77;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction201;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction77(void)
+val_t NEW_parser___ReduceAction201(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction77;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction201;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction77[] = "check new ReduceAction77";
-void CHECKNEW_parser___ReduceAction77(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction201[] = "check new ReduceAction201";
+void CHECKNEW_parser___ReduceAction201(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction77;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction201;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -96127,36 +117212,36 @@ void CHECKNEW_parser___ReduceAction77(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction77_parser___ReduceAction___init[] = "new ReduceAction77 parser::ReduceAction::init";
-val_t NEW_ReduceAction77_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction201_parser___ReduceAction___init[] = "new ReduceAction201 parser::ReduceAction::init";
+val_t NEW_ReduceAction201_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction77_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction201_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction77();
-  INIT_ATTRIBUTES__parser___ReduceAction77(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction201();
+  INIT_ATTRIBUTES__parser___ReduceAction201(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction77(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction201(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction78[55] = {
-  {(bigint) 603 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction202[55] = {
+  {(bigint) 2411 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction78" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction78 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction78 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 603 /* 5: ReduceAction78 < ReduceAction78: superclass typecheck marker */},
+  {(bigint) "ReduceAction202" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction202 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction202 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2411 /* 5: ReduceAction202 < ReduceAction202: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -96170,7 +117255,7 @@ const classtable_elt_t VFT_parser___ReduceAction78[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction78 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction202 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -96201,46 +117286,46 @@ const classtable_elt_t VFT_parser___ReduceAction78[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction78 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction78___action},
+  {(bigint) 0 /* 50: ReduceAction202 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction202___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction78 < ReduceAction78: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction202 < ReduceAction202: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction78::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction78[] = "init var of ReduceAction78";
-void INIT_ATTRIBUTES__parser___ReduceAction78(val_t p0){
+/* 2: Attribute ReduceAction202::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction202[] = "init var of ReduceAction202";
+void INIT_ATTRIBUTES__parser___ReduceAction202(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction78;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction202;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction78(void)
+val_t NEW_parser___ReduceAction202(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction78;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction202;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction78[] = "check new ReduceAction78";
-void CHECKNEW_parser___ReduceAction78(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction202[] = "check new ReduceAction202";
+void CHECKNEW_parser___ReduceAction202(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction78;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction202;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -96253,36 +117338,36 @@ void CHECKNEW_parser___ReduceAction78(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction78_parser___ReduceAction___init[] = "new ReduceAction78 parser::ReduceAction::init";
-val_t NEW_ReduceAction78_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction202_parser___ReduceAction___init[] = "new ReduceAction202 parser::ReduceAction::init";
+val_t NEW_ReduceAction202_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction78_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction202_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction78();
-  INIT_ATTRIBUTES__parser___ReduceAction78(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction202();
+  INIT_ATTRIBUTES__parser___ReduceAction202(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction78(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction202(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction79[55] = {
-  {(bigint) 599 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction203[55] = {
+  {(bigint) 2407 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction79" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction79 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction79 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 599 /* 5: ReduceAction79 < ReduceAction79: superclass typecheck marker */},
+  {(bigint) "ReduceAction203" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction203 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction203 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2407 /* 5: ReduceAction203 < ReduceAction203: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -96296,7 +117381,7 @@ const classtable_elt_t VFT_parser___ReduceAction79[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction79 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction203 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -96327,46 +117412,46 @@ const classtable_elt_t VFT_parser___ReduceAction79[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction79 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction79___action},
+  {(bigint) 0 /* 50: ReduceAction203 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction203___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction79 < ReduceAction79: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction203 < ReduceAction203: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction79::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction79[] = "init var of ReduceAction79";
-void INIT_ATTRIBUTES__parser___ReduceAction79(val_t p0){
+/* 2: Attribute ReduceAction203::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction203[] = "init var of ReduceAction203";
+void INIT_ATTRIBUTES__parser___ReduceAction203(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction79;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction203;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction79(void)
+val_t NEW_parser___ReduceAction203(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction79;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction203;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction79[] = "check new ReduceAction79";
-void CHECKNEW_parser___ReduceAction79(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction203[] = "check new ReduceAction203";
+void CHECKNEW_parser___ReduceAction203(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction79;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction203;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -96379,36 +117464,36 @@ void CHECKNEW_parser___ReduceAction79(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction79_parser___ReduceAction___init[] = "new ReduceAction79 parser::ReduceAction::init";
-val_t NEW_ReduceAction79_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction203_parser___ReduceAction___init[] = "new ReduceAction203 parser::ReduceAction::init";
+val_t NEW_ReduceAction203_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction79_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction203_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction79();
-  INIT_ATTRIBUTES__parser___ReduceAction79(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction203();
+  INIT_ATTRIBUTES__parser___ReduceAction203(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction79(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction203(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction80[55] = {
-  {(bigint) 591 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction204[55] = {
+  {(bigint) 2403 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction80" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction80 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction80 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 591 /* 5: ReduceAction80 < ReduceAction80: superclass typecheck marker */},
+  {(bigint) "ReduceAction204" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction204 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction204 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2403 /* 5: ReduceAction204 < ReduceAction204: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -96422,7 +117507,7 @@ const classtable_elt_t VFT_parser___ReduceAction80[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction80 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction204 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -96453,46 +117538,46 @@ const classtable_elt_t VFT_parser___ReduceAction80[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction80 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction80___action},
+  {(bigint) 0 /* 50: ReduceAction204 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction204___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction80 < ReduceAction80: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction204 < ReduceAction204: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction80::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction80[] = "init var of ReduceAction80";
-void INIT_ATTRIBUTES__parser___ReduceAction80(val_t p0){
+/* 2: Attribute ReduceAction204::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction204[] = "init var of ReduceAction204";
+void INIT_ATTRIBUTES__parser___ReduceAction204(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction80;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction204;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction80(void)
+val_t NEW_parser___ReduceAction204(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction80;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction204;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction80[] = "check new ReduceAction80";
-void CHECKNEW_parser___ReduceAction80(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction204[] = "check new ReduceAction204";
+void CHECKNEW_parser___ReduceAction204(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction80;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction204;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -96505,36 +117590,36 @@ void CHECKNEW_parser___ReduceAction80(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction80_parser___ReduceAction___init[] = "new ReduceAction80 parser::ReduceAction::init";
-val_t NEW_ReduceAction80_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction204_parser___ReduceAction___init[] = "new ReduceAction204 parser::ReduceAction::init";
+val_t NEW_ReduceAction204_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction80_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction204_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction80();
-  INIT_ATTRIBUTES__parser___ReduceAction80(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction204();
+  INIT_ATTRIBUTES__parser___ReduceAction204(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction80(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction204(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction81[55] = {
-  {(bigint) 575 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction205[55] = {
+  {(bigint) 2399 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction81" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction81 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction81 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 575 /* 5: ReduceAction81 < ReduceAction81: superclass typecheck marker */},
+  {(bigint) "ReduceAction205" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction205 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction205 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2399 /* 5: ReduceAction205 < ReduceAction205: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -96548,7 +117633,7 @@ const classtable_elt_t VFT_parser___ReduceAction81[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction81 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction205 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -96579,46 +117664,46 @@ const classtable_elt_t VFT_parser___ReduceAction81[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction81 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction81___action},
+  {(bigint) 0 /* 50: ReduceAction205 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction205___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction81 < ReduceAction81: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction205 < ReduceAction205: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction81::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction81[] = "init var of ReduceAction81";
-void INIT_ATTRIBUTES__parser___ReduceAction81(val_t p0){
+/* 2: Attribute ReduceAction205::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction205[] = "init var of ReduceAction205";
+void INIT_ATTRIBUTES__parser___ReduceAction205(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction81;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction205;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction81(void)
+val_t NEW_parser___ReduceAction205(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction81;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction205;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction81[] = "check new ReduceAction81";
-void CHECKNEW_parser___ReduceAction81(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction205[] = "check new ReduceAction205";
+void CHECKNEW_parser___ReduceAction205(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction81;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction205;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -96631,36 +117716,36 @@ void CHECKNEW_parser___ReduceAction81(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction81_parser___ReduceAction___init[] = "new ReduceAction81 parser::ReduceAction::init";
-val_t NEW_ReduceAction81_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction205_parser___ReduceAction___init[] = "new ReduceAction205 parser::ReduceAction::init";
+val_t NEW_ReduceAction205_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction81_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction205_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction81();
-  INIT_ATTRIBUTES__parser___ReduceAction81(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction205();
+  INIT_ATTRIBUTES__parser___ReduceAction205(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction81(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction205(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction82[55] = {
-  {(bigint) 567 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction206[55] = {
+  {(bigint) 2395 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction82" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction82 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction82 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 567 /* 5: ReduceAction82 < ReduceAction82: superclass typecheck marker */},
+  {(bigint) "ReduceAction206" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction206 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction206 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2395 /* 5: ReduceAction206 < ReduceAction206: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -96674,7 +117759,7 @@ const classtable_elt_t VFT_parser___ReduceAction82[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction82 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction206 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -96705,46 +117790,46 @@ const classtable_elt_t VFT_parser___ReduceAction82[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction82 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction82___action},
+  {(bigint) 0 /* 50: ReduceAction206 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction206___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction82 < ReduceAction82: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction206 < ReduceAction206: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction82::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction82[] = "init var of ReduceAction82";
-void INIT_ATTRIBUTES__parser___ReduceAction82(val_t p0){
+/* 2: Attribute ReduceAction206::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction206[] = "init var of ReduceAction206";
+void INIT_ATTRIBUTES__parser___ReduceAction206(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction82;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction206;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction82(void)
+val_t NEW_parser___ReduceAction206(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction82;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction206;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction82[] = "check new ReduceAction82";
-void CHECKNEW_parser___ReduceAction82(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction206[] = "check new ReduceAction206";
+void CHECKNEW_parser___ReduceAction206(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction82;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction206;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -96757,36 +117842,36 @@ void CHECKNEW_parser___ReduceAction82(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction82_parser___ReduceAction___init[] = "new ReduceAction82 parser::ReduceAction::init";
-val_t NEW_ReduceAction82_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction206_parser___ReduceAction___init[] = "new ReduceAction206 parser::ReduceAction::init";
+val_t NEW_ReduceAction206_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction82_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction206_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction82();
-  INIT_ATTRIBUTES__parser___ReduceAction82(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction206();
+  INIT_ATTRIBUTES__parser___ReduceAction206(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction82(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction206(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction83[55] = {
-  {(bigint) 555 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction207[55] = {
+  {(bigint) 2391 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction83" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction83 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction83 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 555 /* 5: ReduceAction83 < ReduceAction83: superclass typecheck marker */},
+  {(bigint) "ReduceAction207" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction207 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction207 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2391 /* 5: ReduceAction207 < ReduceAction207: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -96800,7 +117885,7 @@ const classtable_elt_t VFT_parser___ReduceAction83[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction83 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction207 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -96831,46 +117916,46 @@ const classtable_elt_t VFT_parser___ReduceAction83[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction83 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction83___action},
+  {(bigint) 0 /* 50: ReduceAction207 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction207___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction83 < ReduceAction83: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction207 < ReduceAction207: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction83::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction83[] = "init var of ReduceAction83";
-void INIT_ATTRIBUTES__parser___ReduceAction83(val_t p0){
+/* 2: Attribute ReduceAction207::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction207[] = "init var of ReduceAction207";
+void INIT_ATTRIBUTES__parser___ReduceAction207(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction83;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction207;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction83(void)
+val_t NEW_parser___ReduceAction207(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction83;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction207;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction83[] = "check new ReduceAction83";
-void CHECKNEW_parser___ReduceAction83(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction207[] = "check new ReduceAction207";
+void CHECKNEW_parser___ReduceAction207(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction83;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction207;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -96883,36 +117968,36 @@ void CHECKNEW_parser___ReduceAction83(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction83_parser___ReduceAction___init[] = "new ReduceAction83 parser::ReduceAction::init";
-val_t NEW_ReduceAction83_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction207_parser___ReduceAction___init[] = "new ReduceAction207 parser::ReduceAction::init";
+val_t NEW_ReduceAction207_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction83_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction207_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction83();
-  INIT_ATTRIBUTES__parser___ReduceAction83(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction207();
+  INIT_ATTRIBUTES__parser___ReduceAction207(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction83(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction207(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction84[55] = {
-  {(bigint) 519 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction208[55] = {
+  {(bigint) 2387 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction84" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction84 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction84 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 519 /* 5: ReduceAction84 < ReduceAction84: superclass typecheck marker */},
+  {(bigint) "ReduceAction208" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction208 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction208 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2387 /* 5: ReduceAction208 < ReduceAction208: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -96926,7 +118011,7 @@ const classtable_elt_t VFT_parser___ReduceAction84[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction84 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction208 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -96957,46 +118042,46 @@ const classtable_elt_t VFT_parser___ReduceAction84[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction84 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction84___action},
+  {(bigint) 0 /* 50: ReduceAction208 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction208___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction84 < ReduceAction84: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction208 < ReduceAction208: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction84::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction84[] = "init var of ReduceAction84";
-void INIT_ATTRIBUTES__parser___ReduceAction84(val_t p0){
+/* 2: Attribute ReduceAction208::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction208[] = "init var of ReduceAction208";
+void INIT_ATTRIBUTES__parser___ReduceAction208(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction84;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction208;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction84(void)
+val_t NEW_parser___ReduceAction208(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction84;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction208;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction84[] = "check new ReduceAction84";
-void CHECKNEW_parser___ReduceAction84(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction208[] = "check new ReduceAction208";
+void CHECKNEW_parser___ReduceAction208(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction84;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction208;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -97009,36 +118094,36 @@ void CHECKNEW_parser___ReduceAction84(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction84_parser___ReduceAction___init[] = "new ReduceAction84 parser::ReduceAction::init";
-val_t NEW_ReduceAction84_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction208_parser___ReduceAction___init[] = "new ReduceAction208 parser::ReduceAction::init";
+val_t NEW_ReduceAction208_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction84_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction208_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction84();
-  INIT_ATTRIBUTES__parser___ReduceAction84(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction208();
+  INIT_ATTRIBUTES__parser___ReduceAction208(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction84(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction208(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction85[55] = {
-  {(bigint) 483 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction209[55] = {
+  {(bigint) 2383 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction85" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction85 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction85 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 483 /* 5: ReduceAction85 < ReduceAction85: superclass typecheck marker */},
+  {(bigint) "ReduceAction209" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction209 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction209 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2383 /* 5: ReduceAction209 < ReduceAction209: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -97052,7 +118137,7 @@ const classtable_elt_t VFT_parser___ReduceAction85[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction85 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction209 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -97083,46 +118168,46 @@ const classtable_elt_t VFT_parser___ReduceAction85[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction85 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction85___action},
+  {(bigint) 0 /* 50: ReduceAction209 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction209___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction85 < ReduceAction85: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction209 < ReduceAction209: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction85::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction85[] = "init var of ReduceAction85";
-void INIT_ATTRIBUTES__parser___ReduceAction85(val_t p0){
+/* 2: Attribute ReduceAction209::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction209[] = "init var of ReduceAction209";
+void INIT_ATTRIBUTES__parser___ReduceAction209(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction85;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction209;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction85(void)
+val_t NEW_parser___ReduceAction209(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction85;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction209;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction85[] = "check new ReduceAction85";
-void CHECKNEW_parser___ReduceAction85(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction209[] = "check new ReduceAction209";
+void CHECKNEW_parser___ReduceAction209(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction85;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction209;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -97135,36 +118220,36 @@ void CHECKNEW_parser___ReduceAction85(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction85_parser___ReduceAction___init[] = "new ReduceAction85 parser::ReduceAction::init";
-val_t NEW_ReduceAction85_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction209_parser___ReduceAction___init[] = "new ReduceAction209 parser::ReduceAction::init";
+val_t NEW_ReduceAction209_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction85_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction209_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction85();
-  INIT_ATTRIBUTES__parser___ReduceAction85(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction209();
+  INIT_ATTRIBUTES__parser___ReduceAction209(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction85(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction209(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction86[55] = {
-  {(bigint) 455 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction210[55] = {
+  {(bigint) 2375 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction86" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction86 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction86 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 455 /* 5: ReduceAction86 < ReduceAction86: superclass typecheck marker */},
+  {(bigint) "ReduceAction210" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction210 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction210 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2375 /* 5: ReduceAction210 < ReduceAction210: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -97178,7 +118263,7 @@ const classtable_elt_t VFT_parser___ReduceAction86[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction86 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction210 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -97209,46 +118294,46 @@ const classtable_elt_t VFT_parser___ReduceAction86[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction86 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction86___action},
+  {(bigint) 0 /* 50: ReduceAction210 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction210___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction86 < ReduceAction86: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction210 < ReduceAction210: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction86::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction86[] = "init var of ReduceAction86";
-void INIT_ATTRIBUTES__parser___ReduceAction86(val_t p0){
+/* 2: Attribute ReduceAction210::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction210[] = "init var of ReduceAction210";
+void INIT_ATTRIBUTES__parser___ReduceAction210(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction86;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction210;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction86(void)
+val_t NEW_parser___ReduceAction210(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction86;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction210;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction86[] = "check new ReduceAction86";
-void CHECKNEW_parser___ReduceAction86(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction210[] = "check new ReduceAction210";
+void CHECKNEW_parser___ReduceAction210(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction86;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction210;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -97261,36 +118346,36 @@ void CHECKNEW_parser___ReduceAction86(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction86_parser___ReduceAction___init[] = "new ReduceAction86 parser::ReduceAction::init";
-val_t NEW_ReduceAction86_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction210_parser___ReduceAction___init[] = "new ReduceAction210 parser::ReduceAction::init";
+val_t NEW_ReduceAction210_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction86_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction210_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction86();
-  INIT_ATTRIBUTES__parser___ReduceAction86(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction210();
+  INIT_ATTRIBUTES__parser___ReduceAction210(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction86(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction210(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction87[55] = {
-  {(bigint) 431 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction211[55] = {
+  {(bigint) 2371 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction87" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction87 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction87 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 431 /* 5: ReduceAction87 < ReduceAction87: superclass typecheck marker */},
+  {(bigint) "ReduceAction211" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction211 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction211 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2371 /* 5: ReduceAction211 < ReduceAction211: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -97304,7 +118389,7 @@ const classtable_elt_t VFT_parser___ReduceAction87[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction87 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction211 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -97335,46 +118420,46 @@ const classtable_elt_t VFT_parser___ReduceAction87[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction87 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction87___action},
+  {(bigint) 0 /* 50: ReduceAction211 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction211___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction87 < ReduceAction87: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction211 < ReduceAction211: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction87::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction87[] = "init var of ReduceAction87";
-void INIT_ATTRIBUTES__parser___ReduceAction87(val_t p0){
+/* 2: Attribute ReduceAction211::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction211[] = "init var of ReduceAction211";
+void INIT_ATTRIBUTES__parser___ReduceAction211(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction87;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction211;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction87(void)
+val_t NEW_parser___ReduceAction211(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction87;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction211;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction87[] = "check new ReduceAction87";
-void CHECKNEW_parser___ReduceAction87(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction211[] = "check new ReduceAction211";
+void CHECKNEW_parser___ReduceAction211(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction87;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction211;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -97387,36 +118472,36 @@ void CHECKNEW_parser___ReduceAction87(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction87_parser___ReduceAction___init[] = "new ReduceAction87 parser::ReduceAction::init";
-val_t NEW_ReduceAction87_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction211_parser___ReduceAction___init[] = "new ReduceAction211 parser::ReduceAction::init";
+val_t NEW_ReduceAction211_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction87_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction211_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction87();
-  INIT_ATTRIBUTES__parser___ReduceAction87(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction211();
+  INIT_ATTRIBUTES__parser___ReduceAction211(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction87(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction211(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction88[55] = {
-  {(bigint) 427 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction212[55] = {
+  {(bigint) 2367 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction88" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction88 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction88 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 427 /* 5: ReduceAction88 < ReduceAction88: superclass typecheck marker */},
+  {(bigint) "ReduceAction212" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction212 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction212 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2367 /* 5: ReduceAction212 < ReduceAction212: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -97430,7 +118515,7 @@ const classtable_elt_t VFT_parser___ReduceAction88[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction88 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction212 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -97461,46 +118546,46 @@ const classtable_elt_t VFT_parser___ReduceAction88[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction88 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction88___action},
+  {(bigint) 0 /* 50: ReduceAction212 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction212___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction88 < ReduceAction88: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction212 < ReduceAction212: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction88::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction88[] = "init var of ReduceAction88";
-void INIT_ATTRIBUTES__parser___ReduceAction88(val_t p0){
+/* 2: Attribute ReduceAction212::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction212[] = "init var of ReduceAction212";
+void INIT_ATTRIBUTES__parser___ReduceAction212(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction88;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction212;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction88(void)
+val_t NEW_parser___ReduceAction212(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction88;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction212;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction88[] = "check new ReduceAction88";
-void CHECKNEW_parser___ReduceAction88(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction212[] = "check new ReduceAction212";
+void CHECKNEW_parser___ReduceAction212(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction88;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction212;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -97513,36 +118598,36 @@ void CHECKNEW_parser___ReduceAction88(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction88_parser___ReduceAction___init[] = "new ReduceAction88 parser::ReduceAction::init";
-val_t NEW_ReduceAction88_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction212_parser___ReduceAction___init[] = "new ReduceAction212 parser::ReduceAction::init";
+val_t NEW_ReduceAction212_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction88_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction212_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction88();
-  INIT_ATTRIBUTES__parser___ReduceAction88(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction212();
+  INIT_ATTRIBUTES__parser___ReduceAction212(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction88(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction212(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction89[55] = {
-  {(bigint) 423 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction213[55] = {
+  {(bigint) 2363 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction89" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction89 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction89 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 423 /* 5: ReduceAction89 < ReduceAction89: superclass typecheck marker */},
+  {(bigint) "ReduceAction213" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction213 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction213 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2363 /* 5: ReduceAction213 < ReduceAction213: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -97556,7 +118641,7 @@ const classtable_elt_t VFT_parser___ReduceAction89[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction89 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction213 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -97587,46 +118672,46 @@ const classtable_elt_t VFT_parser___ReduceAction89[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction89 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction89___action},
+  {(bigint) 0 /* 50: ReduceAction213 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction213___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction89 < ReduceAction89: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction213 < ReduceAction213: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction89::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction89[] = "init var of ReduceAction89";
-void INIT_ATTRIBUTES__parser___ReduceAction89(val_t p0){
+/* 2: Attribute ReduceAction213::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction213[] = "init var of ReduceAction213";
+void INIT_ATTRIBUTES__parser___ReduceAction213(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction89;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction213;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction89(void)
+val_t NEW_parser___ReduceAction213(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction89;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction213;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction89[] = "check new ReduceAction89";
-void CHECKNEW_parser___ReduceAction89(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction213[] = "check new ReduceAction213";
+void CHECKNEW_parser___ReduceAction213(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction89;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction213;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -97639,36 +118724,36 @@ void CHECKNEW_parser___ReduceAction89(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction89_parser___ReduceAction___init[] = "new ReduceAction89 parser::ReduceAction::init";
-val_t NEW_ReduceAction89_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction213_parser___ReduceAction___init[] = "new ReduceAction213 parser::ReduceAction::init";
+val_t NEW_ReduceAction213_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction89_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction213_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction89();
-  INIT_ATTRIBUTES__parser___ReduceAction89(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction213();
+  INIT_ATTRIBUTES__parser___ReduceAction213(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction89(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction213(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction90[55] = {
-  {(bigint) 415 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction214[55] = {
+  {(bigint) 2359 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction90" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction90 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction90 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 415 /* 5: ReduceAction90 < ReduceAction90: superclass typecheck marker */},
+  {(bigint) "ReduceAction214" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction214 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction214 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2359 /* 5: ReduceAction214 < ReduceAction214: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -97682,7 +118767,7 @@ const classtable_elt_t VFT_parser___ReduceAction90[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction90 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction214 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -97713,46 +118798,46 @@ const classtable_elt_t VFT_parser___ReduceAction90[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction90 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction90___action},
+  {(bigint) 0 /* 50: ReduceAction214 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction214___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction90 < ReduceAction90: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction214 < ReduceAction214: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction90::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction90[] = "init var of ReduceAction90";
-void INIT_ATTRIBUTES__parser___ReduceAction90(val_t p0){
+/* 2: Attribute ReduceAction214::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction214[] = "init var of ReduceAction214";
+void INIT_ATTRIBUTES__parser___ReduceAction214(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction90;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction214;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction90(void)
+val_t NEW_parser___ReduceAction214(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction90;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction214;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction90[] = "check new ReduceAction90";
-void CHECKNEW_parser___ReduceAction90(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction214[] = "check new ReduceAction214";
+void CHECKNEW_parser___ReduceAction214(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction90;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction214;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -97765,36 +118850,36 @@ void CHECKNEW_parser___ReduceAction90(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction90_parser___ReduceAction___init[] = "new ReduceAction90 parser::ReduceAction::init";
-val_t NEW_ReduceAction90_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction214_parser___ReduceAction___init[] = "new ReduceAction214 parser::ReduceAction::init";
+val_t NEW_ReduceAction214_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction90_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction214_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction90();
-  INIT_ATTRIBUTES__parser___ReduceAction90(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction214();
+  INIT_ATTRIBUTES__parser___ReduceAction214(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction90(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction214(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction91[55] = {
-  {(bigint) 411 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction215[55] = {
+  {(bigint) 2355 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction91" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction91 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction91 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 411 /* 5: ReduceAction91 < ReduceAction91: superclass typecheck marker */},
+  {(bigint) "ReduceAction215" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction215 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction215 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2355 /* 5: ReduceAction215 < ReduceAction215: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -97808,7 +118893,7 @@ const classtable_elt_t VFT_parser___ReduceAction91[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction91 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction215 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -97839,46 +118924,46 @@ const classtable_elt_t VFT_parser___ReduceAction91[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction91 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction91___action},
+  {(bigint) 0 /* 50: ReduceAction215 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction215___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction91 < ReduceAction91: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction215 < ReduceAction215: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction91::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction91[] = "init var of ReduceAction91";
-void INIT_ATTRIBUTES__parser___ReduceAction91(val_t p0){
+/* 2: Attribute ReduceAction215::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction215[] = "init var of ReduceAction215";
+void INIT_ATTRIBUTES__parser___ReduceAction215(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction91;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction215;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction91(void)
+val_t NEW_parser___ReduceAction215(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction91;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction215;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction91[] = "check new ReduceAction91";
-void CHECKNEW_parser___ReduceAction91(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction215[] = "check new ReduceAction215";
+void CHECKNEW_parser___ReduceAction215(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction91;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction215;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -97891,36 +118976,36 @@ void CHECKNEW_parser___ReduceAction91(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction91_parser___ReduceAction___init[] = "new ReduceAction91 parser::ReduceAction::init";
-val_t NEW_ReduceAction91_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction215_parser___ReduceAction___init[] = "new ReduceAction215 parser::ReduceAction::init";
+val_t NEW_ReduceAction215_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction91_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction215_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction91();
-  INIT_ATTRIBUTES__parser___ReduceAction91(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction215();
+  INIT_ATTRIBUTES__parser___ReduceAction215(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction91(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction215(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction92[55] = {
-  {(bigint) 407 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction216[55] = {
+  {(bigint) 2351 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction92" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction92 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction92 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 407 /* 5: ReduceAction92 < ReduceAction92: superclass typecheck marker */},
+  {(bigint) "ReduceAction216" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction216 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction216 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2351 /* 5: ReduceAction216 < ReduceAction216: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -97934,7 +119019,7 @@ const classtable_elt_t VFT_parser___ReduceAction92[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction92 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction216 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -97965,46 +119050,46 @@ const classtable_elt_t VFT_parser___ReduceAction92[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction92 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction92___action},
+  {(bigint) 0 /* 50: ReduceAction216 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction216___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction92 < ReduceAction92: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction216 < ReduceAction216: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction92::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction92[] = "init var of ReduceAction92";
-void INIT_ATTRIBUTES__parser___ReduceAction92(val_t p0){
+/* 2: Attribute ReduceAction216::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction216[] = "init var of ReduceAction216";
+void INIT_ATTRIBUTES__parser___ReduceAction216(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction92;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction216;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction92(void)
+val_t NEW_parser___ReduceAction216(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction92;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction216;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction92[] = "check new ReduceAction92";
-void CHECKNEW_parser___ReduceAction92(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction216[] = "check new ReduceAction216";
+void CHECKNEW_parser___ReduceAction216(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction92;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction216;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -98017,36 +119102,36 @@ void CHECKNEW_parser___ReduceAction92(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction92_parser___ReduceAction___init[] = "new ReduceAction92 parser::ReduceAction::init";
-val_t NEW_ReduceAction92_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction216_parser___ReduceAction___init[] = "new ReduceAction216 parser::ReduceAction::init";
+val_t NEW_ReduceAction216_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction92_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction216_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction92();
-  INIT_ATTRIBUTES__parser___ReduceAction92(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction216();
+  INIT_ATTRIBUTES__parser___ReduceAction216(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction92(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction216(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction93[55] = {
-  {(bigint) 403 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction217[55] = {
+  {(bigint) 2347 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction93" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction93 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction93 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 403 /* 5: ReduceAction93 < ReduceAction93: superclass typecheck marker */},
+  {(bigint) "ReduceAction217" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction217 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction217 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2347 /* 5: ReduceAction217 < ReduceAction217: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -98060,7 +119145,7 @@ const classtable_elt_t VFT_parser___ReduceAction93[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction93 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction217 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -98091,46 +119176,46 @@ const classtable_elt_t VFT_parser___ReduceAction93[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction93 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction93___action},
+  {(bigint) 0 /* 50: ReduceAction217 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction217___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction93 < ReduceAction93: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction217 < ReduceAction217: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction93::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction93[] = "init var of ReduceAction93";
-void INIT_ATTRIBUTES__parser___ReduceAction93(val_t p0){
+/* 2: Attribute ReduceAction217::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction217[] = "init var of ReduceAction217";
+void INIT_ATTRIBUTES__parser___ReduceAction217(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction93;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction217;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction93(void)
+val_t NEW_parser___ReduceAction217(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction93;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction217;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction93[] = "check new ReduceAction93";
-void CHECKNEW_parser___ReduceAction93(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction217[] = "check new ReduceAction217";
+void CHECKNEW_parser___ReduceAction217(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction93;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction217;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -98143,36 +119228,36 @@ void CHECKNEW_parser___ReduceAction93(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction93_parser___ReduceAction___init[] = "new ReduceAction93 parser::ReduceAction::init";
-val_t NEW_ReduceAction93_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction217_parser___ReduceAction___init[] = "new ReduceAction217 parser::ReduceAction::init";
+val_t NEW_ReduceAction217_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction93_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction217_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction93();
-  INIT_ATTRIBUTES__parser___ReduceAction93(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction217();
+  INIT_ATTRIBUTES__parser___ReduceAction217(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction93(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction217(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction94[55] = {
-  {(bigint) 399 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction218[55] = {
+  {(bigint) 2343 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction94" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction94 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction94 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 399 /* 5: ReduceAction94 < ReduceAction94: superclass typecheck marker */},
+  {(bigint) "ReduceAction218" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction218 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction218 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2343 /* 5: ReduceAction218 < ReduceAction218: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -98186,7 +119271,7 @@ const classtable_elt_t VFT_parser___ReduceAction94[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction94 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction218 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -98217,46 +119302,46 @@ const classtable_elt_t VFT_parser___ReduceAction94[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction94 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction94___action},
+  {(bigint) 0 /* 50: ReduceAction218 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction218___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction94 < ReduceAction94: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction218 < ReduceAction218: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction94::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction94[] = "init var of ReduceAction94";
-void INIT_ATTRIBUTES__parser___ReduceAction94(val_t p0){
+/* 2: Attribute ReduceAction218::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction218[] = "init var of ReduceAction218";
+void INIT_ATTRIBUTES__parser___ReduceAction218(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction94;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction218;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction94(void)
+val_t NEW_parser___ReduceAction218(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction94;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction218;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction94[] = "check new ReduceAction94";
-void CHECKNEW_parser___ReduceAction94(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction218[] = "check new ReduceAction218";
+void CHECKNEW_parser___ReduceAction218(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction94;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction218;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -98269,36 +119354,36 @@ void CHECKNEW_parser___ReduceAction94(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction94_parser___ReduceAction___init[] = "new ReduceAction94 parser::ReduceAction::init";
-val_t NEW_ReduceAction94_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction218_parser___ReduceAction___init[] = "new ReduceAction218 parser::ReduceAction::init";
+val_t NEW_ReduceAction218_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction94_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction218_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction94();
-  INIT_ATTRIBUTES__parser___ReduceAction94(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction218();
+  INIT_ATTRIBUTES__parser___ReduceAction218(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction94(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction218(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction95[55] = {
-  {(bigint) 395 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction219[55] = {
+  {(bigint) 2339 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction95" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction95 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction95 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 395 /* 5: ReduceAction95 < ReduceAction95: superclass typecheck marker */},
+  {(bigint) "ReduceAction219" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction219 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction219 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2339 /* 5: ReduceAction219 < ReduceAction219: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -98312,7 +119397,7 @@ const classtable_elt_t VFT_parser___ReduceAction95[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction95 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction219 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -98343,46 +119428,46 @@ const classtable_elt_t VFT_parser___ReduceAction95[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction95 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction95___action},
+  {(bigint) 0 /* 50: ReduceAction219 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction219___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction95 < ReduceAction95: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction219 < ReduceAction219: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction95::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction95[] = "init var of ReduceAction95";
-void INIT_ATTRIBUTES__parser___ReduceAction95(val_t p0){
+/* 2: Attribute ReduceAction219::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction219[] = "init var of ReduceAction219";
+void INIT_ATTRIBUTES__parser___ReduceAction219(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction95;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction219;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction95(void)
+val_t NEW_parser___ReduceAction219(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction95;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction219;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction95[] = "check new ReduceAction95";
-void CHECKNEW_parser___ReduceAction95(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction219[] = "check new ReduceAction219";
+void CHECKNEW_parser___ReduceAction219(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction95;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction219;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -98395,36 +119480,36 @@ void CHECKNEW_parser___ReduceAction95(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction95_parser___ReduceAction___init[] = "new ReduceAction95 parser::ReduceAction::init";
-val_t NEW_ReduceAction95_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction219_parser___ReduceAction___init[] = "new ReduceAction219 parser::ReduceAction::init";
+val_t NEW_ReduceAction219_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction95_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction219_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction95();
-  INIT_ATTRIBUTES__parser___ReduceAction95(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction219();
+  INIT_ATTRIBUTES__parser___ReduceAction219(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction95(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction219(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction96[55] = {
-  {(bigint) 391 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction220[55] = {
+  {(bigint) 2331 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction96" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction96 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction96 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 391 /* 5: ReduceAction96 < ReduceAction96: superclass typecheck marker */},
+  {(bigint) "ReduceAction220" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction220 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction220 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2331 /* 5: ReduceAction220 < ReduceAction220: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -98438,7 +119523,7 @@ const classtable_elt_t VFT_parser___ReduceAction96[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction96 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction220 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -98469,46 +119554,46 @@ const classtable_elt_t VFT_parser___ReduceAction96[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction96 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction96___action},
+  {(bigint) 0 /* 50: ReduceAction220 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction220___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction96 < ReduceAction96: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction220 < ReduceAction220: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction96::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction96[] = "init var of ReduceAction96";
-void INIT_ATTRIBUTES__parser___ReduceAction96(val_t p0){
+/* 2: Attribute ReduceAction220::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction220[] = "init var of ReduceAction220";
+void INIT_ATTRIBUTES__parser___ReduceAction220(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction96;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction220;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction96(void)
+val_t NEW_parser___ReduceAction220(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction96;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction220;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction96[] = "check new ReduceAction96";
-void CHECKNEW_parser___ReduceAction96(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction220[] = "check new ReduceAction220";
+void CHECKNEW_parser___ReduceAction220(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction96;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction220;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -98521,36 +119606,36 @@ void CHECKNEW_parser___ReduceAction96(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction96_parser___ReduceAction___init[] = "new ReduceAction96 parser::ReduceAction::init";
-val_t NEW_ReduceAction96_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction220_parser___ReduceAction___init[] = "new ReduceAction220 parser::ReduceAction::init";
+val_t NEW_ReduceAction220_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction96_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction220_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction96();
-  INIT_ATTRIBUTES__parser___ReduceAction96(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction220();
+  INIT_ATTRIBUTES__parser___ReduceAction220(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction96(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction220(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction97[55] = {
-  {(bigint) 387 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction221[55] = {
+  {(bigint) 2327 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction97" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction97 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction97 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 387 /* 5: ReduceAction97 < ReduceAction97: superclass typecheck marker */},
+  {(bigint) "ReduceAction221" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction221 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction221 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2327 /* 5: ReduceAction221 < ReduceAction221: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -98564,7 +119649,7 @@ const classtable_elt_t VFT_parser___ReduceAction97[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction97 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction221 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -98595,46 +119680,46 @@ const classtable_elt_t VFT_parser___ReduceAction97[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction97 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction97___action},
+  {(bigint) 0 /* 50: ReduceAction221 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction221___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction97 < ReduceAction97: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction221 < ReduceAction221: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction97::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction97[] = "init var of ReduceAction97";
-void INIT_ATTRIBUTES__parser___ReduceAction97(val_t p0){
+/* 2: Attribute ReduceAction221::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction221[] = "init var of ReduceAction221";
+void INIT_ATTRIBUTES__parser___ReduceAction221(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction97;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction221;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction97(void)
+val_t NEW_parser___ReduceAction221(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction97;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction221;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction97[] = "check new ReduceAction97";
-void CHECKNEW_parser___ReduceAction97(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction221[] = "check new ReduceAction221";
+void CHECKNEW_parser___ReduceAction221(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction97;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction221;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -98647,36 +119732,36 @@ void CHECKNEW_parser___ReduceAction97(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction97_parser___ReduceAction___init[] = "new ReduceAction97 parser::ReduceAction::init";
-val_t NEW_ReduceAction97_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction221_parser___ReduceAction___init[] = "new ReduceAction221 parser::ReduceAction::init";
+val_t NEW_ReduceAction221_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction97_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction221_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction97();
-  INIT_ATTRIBUTES__parser___ReduceAction97(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction221();
+  INIT_ATTRIBUTES__parser___ReduceAction221(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction97(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction221(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction98[55] = {
-  {(bigint) 383 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction222[55] = {
+  {(bigint) 2323 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction98" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction98 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction98 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 383 /* 5: ReduceAction98 < ReduceAction98: superclass typecheck marker */},
+  {(bigint) "ReduceAction222" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction222 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction222 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2323 /* 5: ReduceAction222 < ReduceAction222: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -98690,7 +119775,7 @@ const classtable_elt_t VFT_parser___ReduceAction98[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction98 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction222 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -98721,46 +119806,46 @@ const classtable_elt_t VFT_parser___ReduceAction98[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction98 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction98___action},
+  {(bigint) 0 /* 50: ReduceAction222 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction222___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction98 < ReduceAction98: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction222 < ReduceAction222: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction98::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction98[] = "init var of ReduceAction98";
-void INIT_ATTRIBUTES__parser___ReduceAction98(val_t p0){
+/* 2: Attribute ReduceAction222::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction222[] = "init var of ReduceAction222";
+void INIT_ATTRIBUTES__parser___ReduceAction222(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction98;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction222;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction98(void)
+val_t NEW_parser___ReduceAction222(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction98;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction222;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction98[] = "check new ReduceAction98";
-void CHECKNEW_parser___ReduceAction98(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction222[] = "check new ReduceAction222";
+void CHECKNEW_parser___ReduceAction222(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction98;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction222;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -98773,36 +119858,36 @@ void CHECKNEW_parser___ReduceAction98(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction98_parser___ReduceAction___init[] = "new ReduceAction98 parser::ReduceAction::init";
-val_t NEW_ReduceAction98_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction222_parser___ReduceAction___init[] = "new ReduceAction222 parser::ReduceAction::init";
+val_t NEW_ReduceAction222_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction98_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction222_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction98();
-  INIT_ATTRIBUTES__parser___ReduceAction98(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction222();
+  INIT_ATTRIBUTES__parser___ReduceAction222(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction98(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction222(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction99[55] = {
-  {(bigint) 379 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction223[55] = {
+  {(bigint) 2319 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction99" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction99 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction99 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 379 /* 5: ReduceAction99 < ReduceAction99: superclass typecheck marker */},
+  {(bigint) "ReduceAction223" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction223 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction223 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2319 /* 5: ReduceAction223 < ReduceAction223: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -98816,7 +119901,7 @@ const classtable_elt_t VFT_parser___ReduceAction99[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction99 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction223 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -98847,46 +119932,46 @@ const classtable_elt_t VFT_parser___ReduceAction99[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction99 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction99___action},
+  {(bigint) 0 /* 50: ReduceAction223 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction223___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction99 < ReduceAction99: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction223 < ReduceAction223: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction99::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction99[] = "init var of ReduceAction99";
-void INIT_ATTRIBUTES__parser___ReduceAction99(val_t p0){
+/* 2: Attribute ReduceAction223::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction223[] = "init var of ReduceAction223";
+void INIT_ATTRIBUTES__parser___ReduceAction223(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction99;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction223;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction99(void)
+val_t NEW_parser___ReduceAction223(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction99;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction223;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction99[] = "check new ReduceAction99";
-void CHECKNEW_parser___ReduceAction99(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction223[] = "check new ReduceAction223";
+void CHECKNEW_parser___ReduceAction223(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction99;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction223;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -98899,36 +119984,36 @@ void CHECKNEW_parser___ReduceAction99(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction99_parser___ReduceAction___init[] = "new ReduceAction99 parser::ReduceAction::init";
-val_t NEW_ReduceAction99_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction223_parser___ReduceAction___init[] = "new ReduceAction223 parser::ReduceAction::init";
+val_t NEW_ReduceAction223_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction99_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction223_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction99();
-  INIT_ATTRIBUTES__parser___ReduceAction99(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction223();
+  INIT_ATTRIBUTES__parser___ReduceAction223(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction99(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction223(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction100[55] = {
-  {(bigint) 2483 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction224[55] = {
+  {(bigint) 2315 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction100" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction100 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction100 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2483 /* 5: ReduceAction100 < ReduceAction100: superclass typecheck marker */},
+  {(bigint) "ReduceAction224" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction224 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction224 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2315 /* 5: ReduceAction224 < ReduceAction224: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -98942,7 +120027,7 @@ const classtable_elt_t VFT_parser___ReduceAction100[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction100 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction224 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -98973,46 +120058,46 @@ const classtable_elt_t VFT_parser___ReduceAction100[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction100 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction100___action},
+  {(bigint) 0 /* 50: ReduceAction224 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction224___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction100 < ReduceAction100: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction224 < ReduceAction224: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction100::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction100[] = "init var of ReduceAction100";
-void INIT_ATTRIBUTES__parser___ReduceAction100(val_t p0){
+/* 2: Attribute ReduceAction224::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction224[] = "init var of ReduceAction224";
+void INIT_ATTRIBUTES__parser___ReduceAction224(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction100;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction224;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction100(void)
+val_t NEW_parser___ReduceAction224(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction100;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction224;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction100[] = "check new ReduceAction100";
-void CHECKNEW_parser___ReduceAction100(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction224[] = "check new ReduceAction224";
+void CHECKNEW_parser___ReduceAction224(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction100;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction224;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -99025,36 +120110,36 @@ void CHECKNEW_parser___ReduceAction100(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction100_parser___ReduceAction___init[] = "new ReduceAction100 parser::ReduceAction::init";
-val_t NEW_ReduceAction100_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction224_parser___ReduceAction___init[] = "new ReduceAction224 parser::ReduceAction::init";
+val_t NEW_ReduceAction224_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction100_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction224_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction100();
-  INIT_ATTRIBUTES__parser___ReduceAction100(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction224();
+  INIT_ATTRIBUTES__parser___ReduceAction224(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction100(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction224(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction101[55] = {
-  {(bigint) 2479 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction225[55] = {
+  {(bigint) 2311 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction101" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction101 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction101 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2479 /* 5: ReduceAction101 < ReduceAction101: superclass typecheck marker */},
+  {(bigint) "ReduceAction225" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction225 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction225 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2311 /* 5: ReduceAction225 < ReduceAction225: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -99068,7 +120153,7 @@ const classtable_elt_t VFT_parser___ReduceAction101[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction101 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction225 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -99099,46 +120184,46 @@ const classtable_elt_t VFT_parser___ReduceAction101[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction101 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction101___action},
+  {(bigint) 0 /* 50: ReduceAction225 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction225___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction101 < ReduceAction101: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction225 < ReduceAction225: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction101::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction101[] = "init var of ReduceAction101";
-void INIT_ATTRIBUTES__parser___ReduceAction101(val_t p0){
+/* 2: Attribute ReduceAction225::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction225[] = "init var of ReduceAction225";
+void INIT_ATTRIBUTES__parser___ReduceAction225(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction101;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction225;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction101(void)
+val_t NEW_parser___ReduceAction225(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction101;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction225;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction101[] = "check new ReduceAction101";
-void CHECKNEW_parser___ReduceAction101(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction225[] = "check new ReduceAction225";
+void CHECKNEW_parser___ReduceAction225(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction101;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction225;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -99151,36 +120236,36 @@ void CHECKNEW_parser___ReduceAction101(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction101_parser___ReduceAction___init[] = "new ReduceAction101 parser::ReduceAction::init";
-val_t NEW_ReduceAction101_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction225_parser___ReduceAction___init[] = "new ReduceAction225 parser::ReduceAction::init";
+val_t NEW_ReduceAction225_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction101_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction225_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction101();
-  INIT_ATTRIBUTES__parser___ReduceAction101(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction225();
+  INIT_ATTRIBUTES__parser___ReduceAction225(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction101(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction225(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction102[55] = {
-  {(bigint) 2475 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction226[55] = {
+  {(bigint) 2307 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction102" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction102 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction102 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2475 /* 5: ReduceAction102 < ReduceAction102: superclass typecheck marker */},
+  {(bigint) "ReduceAction226" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction226 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction226 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2307 /* 5: ReduceAction226 < ReduceAction226: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -99194,7 +120279,7 @@ const classtable_elt_t VFT_parser___ReduceAction102[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction102 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction226 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -99225,46 +120310,46 @@ const classtable_elt_t VFT_parser___ReduceAction102[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction102 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction102___action},
+  {(bigint) 0 /* 50: ReduceAction226 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction226___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction102 < ReduceAction102: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction226 < ReduceAction226: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction102::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction102[] = "init var of ReduceAction102";
-void INIT_ATTRIBUTES__parser___ReduceAction102(val_t p0){
+/* 2: Attribute ReduceAction226::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction226[] = "init var of ReduceAction226";
+void INIT_ATTRIBUTES__parser___ReduceAction226(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction102;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction226;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction102(void)
+val_t NEW_parser___ReduceAction226(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction102;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction226;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction102[] = "check new ReduceAction102";
-void CHECKNEW_parser___ReduceAction102(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction226[] = "check new ReduceAction226";
+void CHECKNEW_parser___ReduceAction226(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction102;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction226;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -99277,36 +120362,36 @@ void CHECKNEW_parser___ReduceAction102(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction102_parser___ReduceAction___init[] = "new ReduceAction102 parser::ReduceAction::init";
-val_t NEW_ReduceAction102_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction226_parser___ReduceAction___init[] = "new ReduceAction226 parser::ReduceAction::init";
+val_t NEW_ReduceAction226_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction102_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction226_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction102();
-  INIT_ATTRIBUTES__parser___ReduceAction102(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction226();
+  INIT_ATTRIBUTES__parser___ReduceAction226(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction102(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction226(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction103[55] = {
-  {(bigint) 2471 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction227[55] = {
+  {(bigint) 2303 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction103" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction103 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction103 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2471 /* 5: ReduceAction103 < ReduceAction103: superclass typecheck marker */},
+  {(bigint) "ReduceAction227" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction227 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction227 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2303 /* 5: ReduceAction227 < ReduceAction227: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -99320,7 +120405,7 @@ const classtable_elt_t VFT_parser___ReduceAction103[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction103 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction227 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -99351,46 +120436,46 @@ const classtable_elt_t VFT_parser___ReduceAction103[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction103 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction103___action},
+  {(bigint) 0 /* 50: ReduceAction227 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction227___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction103 < ReduceAction103: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction227 < ReduceAction227: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction103::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction103[] = "init var of ReduceAction103";
-void INIT_ATTRIBUTES__parser___ReduceAction103(val_t p0){
+/* 2: Attribute ReduceAction227::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction227[] = "init var of ReduceAction227";
+void INIT_ATTRIBUTES__parser___ReduceAction227(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction103;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction227;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction103(void)
+val_t NEW_parser___ReduceAction227(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction103;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction227;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction103[] = "check new ReduceAction103";
-void CHECKNEW_parser___ReduceAction103(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction227[] = "check new ReduceAction227";
+void CHECKNEW_parser___ReduceAction227(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction103;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction227;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -99403,36 +120488,36 @@ void CHECKNEW_parser___ReduceAction103(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction103_parser___ReduceAction___init[] = "new ReduceAction103 parser::ReduceAction::init";
-val_t NEW_ReduceAction103_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction227_parser___ReduceAction___init[] = "new ReduceAction227 parser::ReduceAction::init";
+val_t NEW_ReduceAction227_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction103_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction227_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction103();
-  INIT_ATTRIBUTES__parser___ReduceAction103(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction227();
+  INIT_ATTRIBUTES__parser___ReduceAction227(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction103(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction227(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction104[55] = {
-  {(bigint) 2467 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction228[55] = {
+  {(bigint) 2299 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction104" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction104 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction104 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2467 /* 5: ReduceAction104 < ReduceAction104: superclass typecheck marker */},
+  {(bigint) "ReduceAction228" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction228 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction228 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2299 /* 5: ReduceAction228 < ReduceAction228: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -99446,7 +120531,7 @@ const classtable_elt_t VFT_parser___ReduceAction104[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction104 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction228 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -99477,46 +120562,46 @@ const classtable_elt_t VFT_parser___ReduceAction104[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction104 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction104___action},
+  {(bigint) 0 /* 50: ReduceAction228 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction228___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction104 < ReduceAction104: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction228 < ReduceAction228: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction104::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction104[] = "init var of ReduceAction104";
-void INIT_ATTRIBUTES__parser___ReduceAction104(val_t p0){
+/* 2: Attribute ReduceAction228::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction228[] = "init var of ReduceAction228";
+void INIT_ATTRIBUTES__parser___ReduceAction228(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction104;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction228;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction104(void)
+val_t NEW_parser___ReduceAction228(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction104;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction228;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction104[] = "check new ReduceAction104";
-void CHECKNEW_parser___ReduceAction104(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction228[] = "check new ReduceAction228";
+void CHECKNEW_parser___ReduceAction228(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction104;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction228;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -99529,36 +120614,36 @@ void CHECKNEW_parser___ReduceAction104(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction104_parser___ReduceAction___init[] = "new ReduceAction104 parser::ReduceAction::init";
-val_t NEW_ReduceAction104_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction228_parser___ReduceAction___init[] = "new ReduceAction228 parser::ReduceAction::init";
+val_t NEW_ReduceAction228_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction104_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction228_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction104();
-  INIT_ATTRIBUTES__parser___ReduceAction104(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction228();
+  INIT_ATTRIBUTES__parser___ReduceAction228(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction104(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction228(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction105[55] = {
-  {(bigint) 2463 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction229[55] = {
+  {(bigint) 2295 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction105" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction105 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction105 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2463 /* 5: ReduceAction105 < ReduceAction105: superclass typecheck marker */},
+  {(bigint) "ReduceAction229" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction229 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction229 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2295 /* 5: ReduceAction229 < ReduceAction229: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -99572,7 +120657,7 @@ const classtable_elt_t VFT_parser___ReduceAction105[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction105 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction229 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -99603,46 +120688,46 @@ const classtable_elt_t VFT_parser___ReduceAction105[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction105 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction105___action},
+  {(bigint) 0 /* 50: ReduceAction229 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction229___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction105 < ReduceAction105: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction229 < ReduceAction229: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction105::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction105[] = "init var of ReduceAction105";
-void INIT_ATTRIBUTES__parser___ReduceAction105(val_t p0){
+/* 2: Attribute ReduceAction229::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction229[] = "init var of ReduceAction229";
+void INIT_ATTRIBUTES__parser___ReduceAction229(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction105;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction229;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction105(void)
+val_t NEW_parser___ReduceAction229(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction105;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction229;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction105[] = "check new ReduceAction105";
-void CHECKNEW_parser___ReduceAction105(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction229[] = "check new ReduceAction229";
+void CHECKNEW_parser___ReduceAction229(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction105;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction229;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -99655,36 +120740,36 @@ void CHECKNEW_parser___ReduceAction105(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction105_parser___ReduceAction___init[] = "new ReduceAction105 parser::ReduceAction::init";
-val_t NEW_ReduceAction105_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction229_parser___ReduceAction___init[] = "new ReduceAction229 parser::ReduceAction::init";
+val_t NEW_ReduceAction229_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction105_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction229_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction105();
-  INIT_ATTRIBUTES__parser___ReduceAction105(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction229();
+  INIT_ATTRIBUTES__parser___ReduceAction229(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction105(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction229(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction106[55] = {
-  {(bigint) 2459 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction230[55] = {
+  {(bigint) 2287 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction106" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction106 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction106 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2459 /* 5: ReduceAction106 < ReduceAction106: superclass typecheck marker */},
+  {(bigint) "ReduceAction230" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction230 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction230 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2287 /* 5: ReduceAction230 < ReduceAction230: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -99698,7 +120783,7 @@ const classtable_elt_t VFT_parser___ReduceAction106[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction106 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction230 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -99729,46 +120814,46 @@ const classtable_elt_t VFT_parser___ReduceAction106[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction106 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction106___action},
+  {(bigint) 0 /* 50: ReduceAction230 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction230___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction106 < ReduceAction106: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction230 < ReduceAction230: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction106::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction106[] = "init var of ReduceAction106";
-void INIT_ATTRIBUTES__parser___ReduceAction106(val_t p0){
+/* 2: Attribute ReduceAction230::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction230[] = "init var of ReduceAction230";
+void INIT_ATTRIBUTES__parser___ReduceAction230(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction106;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction230;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction106(void)
+val_t NEW_parser___ReduceAction230(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction106;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction230;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction106[] = "check new ReduceAction106";
-void CHECKNEW_parser___ReduceAction106(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction230[] = "check new ReduceAction230";
+void CHECKNEW_parser___ReduceAction230(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction106;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction230;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -99781,36 +120866,36 @@ void CHECKNEW_parser___ReduceAction106(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction106_parser___ReduceAction___init[] = "new ReduceAction106 parser::ReduceAction::init";
-val_t NEW_ReduceAction106_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction230_parser___ReduceAction___init[] = "new ReduceAction230 parser::ReduceAction::init";
+val_t NEW_ReduceAction230_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction106_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction230_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction106();
-  INIT_ATTRIBUTES__parser___ReduceAction106(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction230();
+  INIT_ATTRIBUTES__parser___ReduceAction230(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction106(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction230(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction107[55] = {
-  {(bigint) 2455 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction231[55] = {
+  {(bigint) 2283 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction107" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction107 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction107 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2455 /* 5: ReduceAction107 < ReduceAction107: superclass typecheck marker */},
+  {(bigint) "ReduceAction231" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction231 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction231 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2283 /* 5: ReduceAction231 < ReduceAction231: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -99824,7 +120909,7 @@ const classtable_elt_t VFT_parser___ReduceAction107[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction107 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction231 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -99855,46 +120940,46 @@ const classtable_elt_t VFT_parser___ReduceAction107[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction107 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction107___action},
+  {(bigint) 0 /* 50: ReduceAction231 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction231___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction107 < ReduceAction107: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction231 < ReduceAction231: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction107::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction107[] = "init var of ReduceAction107";
-void INIT_ATTRIBUTES__parser___ReduceAction107(val_t p0){
+/* 2: Attribute ReduceAction231::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction231[] = "init var of ReduceAction231";
+void INIT_ATTRIBUTES__parser___ReduceAction231(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction107;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction231;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction107(void)
+val_t NEW_parser___ReduceAction231(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction107;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction231;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction107[] = "check new ReduceAction107";
-void CHECKNEW_parser___ReduceAction107(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction231[] = "check new ReduceAction231";
+void CHECKNEW_parser___ReduceAction231(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction107;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction231;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -99907,36 +120992,36 @@ void CHECKNEW_parser___ReduceAction107(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction107_parser___ReduceAction___init[] = "new ReduceAction107 parser::ReduceAction::init";
-val_t NEW_ReduceAction107_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction231_parser___ReduceAction___init[] = "new ReduceAction231 parser::ReduceAction::init";
+val_t NEW_ReduceAction231_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction107_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction231_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction107();
-  INIT_ATTRIBUTES__parser___ReduceAction107(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction231();
+  INIT_ATTRIBUTES__parser___ReduceAction231(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction107(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction231(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction108[55] = {
-  {(bigint) 2451 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction232[55] = {
+  {(bigint) 2279 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction108" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction108 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction108 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2451 /* 5: ReduceAction108 < ReduceAction108: superclass typecheck marker */},
+  {(bigint) "ReduceAction232" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction232 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction232 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2279 /* 5: ReduceAction232 < ReduceAction232: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -99950,7 +121035,7 @@ const classtable_elt_t VFT_parser___ReduceAction108[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction108 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction232 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -99981,46 +121066,46 @@ const classtable_elt_t VFT_parser___ReduceAction108[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction108 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction108___action},
+  {(bigint) 0 /* 50: ReduceAction232 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction232___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction108 < ReduceAction108: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction232 < ReduceAction232: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction108::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction108[] = "init var of ReduceAction108";
-void INIT_ATTRIBUTES__parser___ReduceAction108(val_t p0){
+/* 2: Attribute ReduceAction232::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction232[] = "init var of ReduceAction232";
+void INIT_ATTRIBUTES__parser___ReduceAction232(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction108;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction232;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction108(void)
+val_t NEW_parser___ReduceAction232(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction108;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction232;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction108[] = "check new ReduceAction108";
-void CHECKNEW_parser___ReduceAction108(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction232[] = "check new ReduceAction232";
+void CHECKNEW_parser___ReduceAction232(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction108;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction232;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -100033,36 +121118,36 @@ void CHECKNEW_parser___ReduceAction108(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction108_parser___ReduceAction___init[] = "new ReduceAction108 parser::ReduceAction::init";
-val_t NEW_ReduceAction108_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction232_parser___ReduceAction___init[] = "new ReduceAction232 parser::ReduceAction::init";
+val_t NEW_ReduceAction232_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction108_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction232_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction108();
-  INIT_ATTRIBUTES__parser___ReduceAction108(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction232();
+  INIT_ATTRIBUTES__parser___ReduceAction232(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction108(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction232(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction109[55] = {
-  {(bigint) 2447 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction233[55] = {
+  {(bigint) 2275 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction109" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction109 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction109 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2447 /* 5: ReduceAction109 < ReduceAction109: superclass typecheck marker */},
+  {(bigint) "ReduceAction233" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction233 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction233 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2275 /* 5: ReduceAction233 < ReduceAction233: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -100076,7 +121161,7 @@ const classtable_elt_t VFT_parser___ReduceAction109[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction109 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction233 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -100107,46 +121192,46 @@ const classtable_elt_t VFT_parser___ReduceAction109[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction109 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction109___action},
+  {(bigint) 0 /* 50: ReduceAction233 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction233___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction109 < ReduceAction109: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction233 < ReduceAction233: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction109::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction109[] = "init var of ReduceAction109";
-void INIT_ATTRIBUTES__parser___ReduceAction109(val_t p0){
+/* 2: Attribute ReduceAction233::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction233[] = "init var of ReduceAction233";
+void INIT_ATTRIBUTES__parser___ReduceAction233(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction109;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction233;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction109(void)
+val_t NEW_parser___ReduceAction233(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction109;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction233;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction109[] = "check new ReduceAction109";
-void CHECKNEW_parser___ReduceAction109(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction233[] = "check new ReduceAction233";
+void CHECKNEW_parser___ReduceAction233(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction109;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction233;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -100159,36 +121244,36 @@ void CHECKNEW_parser___ReduceAction109(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction109_parser___ReduceAction___init[] = "new ReduceAction109 parser::ReduceAction::init";
-val_t NEW_ReduceAction109_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction233_parser___ReduceAction___init[] = "new ReduceAction233 parser::ReduceAction::init";
+val_t NEW_ReduceAction233_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction109_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction233_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction109();
-  INIT_ATTRIBUTES__parser___ReduceAction109(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction233();
+  INIT_ATTRIBUTES__parser___ReduceAction233(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction109(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction233(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction110[55] = {
-  {(bigint) 2439 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction234[55] = {
+  {(bigint) 2271 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction110" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction110 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction110 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2439 /* 5: ReduceAction110 < ReduceAction110: superclass typecheck marker */},
+  {(bigint) "ReduceAction234" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction234 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction234 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2271 /* 5: ReduceAction234 < ReduceAction234: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -100202,7 +121287,7 @@ const classtable_elt_t VFT_parser___ReduceAction110[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction110 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction234 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -100233,46 +121318,46 @@ const classtable_elt_t VFT_parser___ReduceAction110[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction110 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction110___action},
+  {(bigint) 0 /* 50: ReduceAction234 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction234___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction110 < ReduceAction110: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction234 < ReduceAction234: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction110::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction110[] = "init var of ReduceAction110";
-void INIT_ATTRIBUTES__parser___ReduceAction110(val_t p0){
+/* 2: Attribute ReduceAction234::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction234[] = "init var of ReduceAction234";
+void INIT_ATTRIBUTES__parser___ReduceAction234(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction110;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction234;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction110(void)
+val_t NEW_parser___ReduceAction234(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction110;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction234;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction110[] = "check new ReduceAction110";
-void CHECKNEW_parser___ReduceAction110(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction234[] = "check new ReduceAction234";
+void CHECKNEW_parser___ReduceAction234(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction110;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction234;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -100285,36 +121370,36 @@ void CHECKNEW_parser___ReduceAction110(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction110_parser___ReduceAction___init[] = "new ReduceAction110 parser::ReduceAction::init";
-val_t NEW_ReduceAction110_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction234_parser___ReduceAction___init[] = "new ReduceAction234 parser::ReduceAction::init";
+val_t NEW_ReduceAction234_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction110_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction234_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction110();
-  INIT_ATTRIBUTES__parser___ReduceAction110(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction234();
+  INIT_ATTRIBUTES__parser___ReduceAction234(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction110(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction234(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction111[55] = {
-  {(bigint) 2435 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction235[55] = {
+  {(bigint) 2267 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction111" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction111 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction111 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2435 /* 5: ReduceAction111 < ReduceAction111: superclass typecheck marker */},
+  {(bigint) "ReduceAction235" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction235 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction235 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2267 /* 5: ReduceAction235 < ReduceAction235: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -100328,7 +121413,7 @@ const classtable_elt_t VFT_parser___ReduceAction111[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction111 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction235 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -100359,46 +121444,46 @@ const classtable_elt_t VFT_parser___ReduceAction111[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction111 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction111___action},
+  {(bigint) 0 /* 50: ReduceAction235 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction235___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction111 < ReduceAction111: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction235 < ReduceAction235: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction111::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction111[] = "init var of ReduceAction111";
-void INIT_ATTRIBUTES__parser___ReduceAction111(val_t p0){
+/* 2: Attribute ReduceAction235::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction235[] = "init var of ReduceAction235";
+void INIT_ATTRIBUTES__parser___ReduceAction235(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction111;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction235;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction111(void)
+val_t NEW_parser___ReduceAction235(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction111;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction235;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction111[] = "check new ReduceAction111";
-void CHECKNEW_parser___ReduceAction111(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction235[] = "check new ReduceAction235";
+void CHECKNEW_parser___ReduceAction235(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction111;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction235;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -100411,36 +121496,36 @@ void CHECKNEW_parser___ReduceAction111(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction111_parser___ReduceAction___init[] = "new ReduceAction111 parser::ReduceAction::init";
-val_t NEW_ReduceAction111_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction235_parser___ReduceAction___init[] = "new ReduceAction235 parser::ReduceAction::init";
+val_t NEW_ReduceAction235_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction111_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction235_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction111();
-  INIT_ATTRIBUTES__parser___ReduceAction111(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction235();
+  INIT_ATTRIBUTES__parser___ReduceAction235(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction111(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction235(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction112[55] = {
-  {(bigint) 2431 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction236[55] = {
+  {(bigint) 2263 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction112" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction112 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction112 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2431 /* 5: ReduceAction112 < ReduceAction112: superclass typecheck marker */},
+  {(bigint) "ReduceAction236" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction236 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction236 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2263 /* 5: ReduceAction236 < ReduceAction236: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -100454,7 +121539,7 @@ const classtable_elt_t VFT_parser___ReduceAction112[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction112 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction236 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -100485,46 +121570,46 @@ const classtable_elt_t VFT_parser___ReduceAction112[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction112 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction112___action},
+  {(bigint) 0 /* 50: ReduceAction236 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction236___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction112 < ReduceAction112: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction236 < ReduceAction236: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction112::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction112[] = "init var of ReduceAction112";
-void INIT_ATTRIBUTES__parser___ReduceAction112(val_t p0){
+/* 2: Attribute ReduceAction236::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction236[] = "init var of ReduceAction236";
+void INIT_ATTRIBUTES__parser___ReduceAction236(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction112;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction236;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction112(void)
+val_t NEW_parser___ReduceAction236(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction112;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction236;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction112[] = "check new ReduceAction112";
-void CHECKNEW_parser___ReduceAction112(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction236[] = "check new ReduceAction236";
+void CHECKNEW_parser___ReduceAction236(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction112;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction236;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -100537,36 +121622,36 @@ void CHECKNEW_parser___ReduceAction112(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction112_parser___ReduceAction___init[] = "new ReduceAction112 parser::ReduceAction::init";
-val_t NEW_ReduceAction112_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction236_parser___ReduceAction___init[] = "new ReduceAction236 parser::ReduceAction::init";
+val_t NEW_ReduceAction236_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction112_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction236_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction112();
-  INIT_ATTRIBUTES__parser___ReduceAction112(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction236();
+  INIT_ATTRIBUTES__parser___ReduceAction236(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction112(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction236(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction113[55] = {
-  {(bigint) 2427 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction237[55] = {
+  {(bigint) 2259 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction113" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction113 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction113 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2427 /* 5: ReduceAction113 < ReduceAction113: superclass typecheck marker */},
+  {(bigint) "ReduceAction237" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction237 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction237 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2259 /* 5: ReduceAction237 < ReduceAction237: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -100580,7 +121665,7 @@ const classtable_elt_t VFT_parser___ReduceAction113[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction113 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction237 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -100611,46 +121696,46 @@ const classtable_elt_t VFT_parser___ReduceAction113[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction113 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction113___action},
+  {(bigint) 0 /* 50: ReduceAction237 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction237___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction113 < ReduceAction113: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction237 < ReduceAction237: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction113::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction113[] = "init var of ReduceAction113";
-void INIT_ATTRIBUTES__parser___ReduceAction113(val_t p0){
+/* 2: Attribute ReduceAction237::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction237[] = "init var of ReduceAction237";
+void INIT_ATTRIBUTES__parser___ReduceAction237(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction113;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction237;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction113(void)
+val_t NEW_parser___ReduceAction237(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction113;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction237;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction113[] = "check new ReduceAction113";
-void CHECKNEW_parser___ReduceAction113(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction237[] = "check new ReduceAction237";
+void CHECKNEW_parser___ReduceAction237(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction113;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction237;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -100663,36 +121748,36 @@ void CHECKNEW_parser___ReduceAction113(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction113_parser___ReduceAction___init[] = "new ReduceAction113 parser::ReduceAction::init";
-val_t NEW_ReduceAction113_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction237_parser___ReduceAction___init[] = "new ReduceAction237 parser::ReduceAction::init";
+val_t NEW_ReduceAction237_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction113_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction237_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction113();
-  INIT_ATTRIBUTES__parser___ReduceAction113(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction237();
+  INIT_ATTRIBUTES__parser___ReduceAction237(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction113(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction237(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction114[55] = {
-  {(bigint) 2423 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction238[55] = {
+  {(bigint) 2255 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction114" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction114 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction114 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2423 /* 5: ReduceAction114 < ReduceAction114: superclass typecheck marker */},
+  {(bigint) "ReduceAction238" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction238 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction238 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2255 /* 5: ReduceAction238 < ReduceAction238: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -100706,7 +121791,7 @@ const classtable_elt_t VFT_parser___ReduceAction114[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction114 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction238 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -100737,46 +121822,46 @@ const classtable_elt_t VFT_parser___ReduceAction114[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction114 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction114___action},
+  {(bigint) 0 /* 50: ReduceAction238 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction238___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction114 < ReduceAction114: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction238 < ReduceAction238: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction114::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction114[] = "init var of ReduceAction114";
-void INIT_ATTRIBUTES__parser___ReduceAction114(val_t p0){
+/* 2: Attribute ReduceAction238::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction238[] = "init var of ReduceAction238";
+void INIT_ATTRIBUTES__parser___ReduceAction238(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction114;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction238;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction114(void)
+val_t NEW_parser___ReduceAction238(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction114;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction238;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction114[] = "check new ReduceAction114";
-void CHECKNEW_parser___ReduceAction114(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction238[] = "check new ReduceAction238";
+void CHECKNEW_parser___ReduceAction238(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction114;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction238;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -100789,36 +121874,36 @@ void CHECKNEW_parser___ReduceAction114(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction114_parser___ReduceAction___init[] = "new ReduceAction114 parser::ReduceAction::init";
-val_t NEW_ReduceAction114_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction238_parser___ReduceAction___init[] = "new ReduceAction238 parser::ReduceAction::init";
+val_t NEW_ReduceAction238_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction114_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction238_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction114();
-  INIT_ATTRIBUTES__parser___ReduceAction114(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction238();
+  INIT_ATTRIBUTES__parser___ReduceAction238(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction114(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction238(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction115[55] = {
-  {(bigint) 2419 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction239[55] = {
+  {(bigint) 2251 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction115" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction115 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction115 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2419 /* 5: ReduceAction115 < ReduceAction115: superclass typecheck marker */},
+  {(bigint) "ReduceAction239" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction239 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction239 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2251 /* 5: ReduceAction239 < ReduceAction239: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -100832,7 +121917,7 @@ const classtable_elt_t VFT_parser___ReduceAction115[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction115 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction239 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -100863,46 +121948,46 @@ const classtable_elt_t VFT_parser___ReduceAction115[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction115 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction115___action},
+  {(bigint) 0 /* 50: ReduceAction239 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction239___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction115 < ReduceAction115: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction239 < ReduceAction239: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction115::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction115[] = "init var of ReduceAction115";
-void INIT_ATTRIBUTES__parser___ReduceAction115(val_t p0){
+/* 2: Attribute ReduceAction239::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction239[] = "init var of ReduceAction239";
+void INIT_ATTRIBUTES__parser___ReduceAction239(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction115;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction239;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction115(void)
+val_t NEW_parser___ReduceAction239(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction115;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction239;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction115[] = "check new ReduceAction115";
-void CHECKNEW_parser___ReduceAction115(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction239[] = "check new ReduceAction239";
+void CHECKNEW_parser___ReduceAction239(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction115;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction239;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -100915,36 +122000,36 @@ void CHECKNEW_parser___ReduceAction115(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction115_parser___ReduceAction___init[] = "new ReduceAction115 parser::ReduceAction::init";
-val_t NEW_ReduceAction115_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction239_parser___ReduceAction___init[] = "new ReduceAction239 parser::ReduceAction::init";
+val_t NEW_ReduceAction239_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction115_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction239_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction115();
-  INIT_ATTRIBUTES__parser___ReduceAction115(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction239();
+  INIT_ATTRIBUTES__parser___ReduceAction239(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction115(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction239(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction116[55] = {
-  {(bigint) 2415 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction240[55] = {
+  {(bigint) 2243 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction116" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction116 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction116 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2415 /* 5: ReduceAction116 < ReduceAction116: superclass typecheck marker */},
+  {(bigint) "ReduceAction240" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction240 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction240 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2243 /* 5: ReduceAction240 < ReduceAction240: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -100958,7 +122043,7 @@ const classtable_elt_t VFT_parser___ReduceAction116[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction116 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction240 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -100989,46 +122074,46 @@ const classtable_elt_t VFT_parser___ReduceAction116[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction116 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction116___action},
+  {(bigint) 0 /* 50: ReduceAction240 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction240___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction116 < ReduceAction116: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction240 < ReduceAction240: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction116::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction116[] = "init var of ReduceAction116";
-void INIT_ATTRIBUTES__parser___ReduceAction116(val_t p0){
+/* 2: Attribute ReduceAction240::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction240[] = "init var of ReduceAction240";
+void INIT_ATTRIBUTES__parser___ReduceAction240(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction116;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction240;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction116(void)
+val_t NEW_parser___ReduceAction240(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction116;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction240;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction116[] = "check new ReduceAction116";
-void CHECKNEW_parser___ReduceAction116(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction240[] = "check new ReduceAction240";
+void CHECKNEW_parser___ReduceAction240(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction116;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction240;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -101041,36 +122126,36 @@ void CHECKNEW_parser___ReduceAction116(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction116_parser___ReduceAction___init[] = "new ReduceAction116 parser::ReduceAction::init";
-val_t NEW_ReduceAction116_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction240_parser___ReduceAction___init[] = "new ReduceAction240 parser::ReduceAction::init";
+val_t NEW_ReduceAction240_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction116_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction240_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction116();
-  INIT_ATTRIBUTES__parser___ReduceAction116(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction240();
+  INIT_ATTRIBUTES__parser___ReduceAction240(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction116(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction240(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction117[55] = {
-  {(bigint) 2411 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction241[55] = {
+  {(bigint) 2239 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction117" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction117 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction117 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2411 /* 5: ReduceAction117 < ReduceAction117: superclass typecheck marker */},
+  {(bigint) "ReduceAction241" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction241 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction241 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2239 /* 5: ReduceAction241 < ReduceAction241: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -101084,7 +122169,7 @@ const classtable_elt_t VFT_parser___ReduceAction117[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction117 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction241 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -101115,46 +122200,46 @@ const classtable_elt_t VFT_parser___ReduceAction117[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction117 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction117___action},
+  {(bigint) 0 /* 50: ReduceAction241 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction241___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction117 < ReduceAction117: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction241 < ReduceAction241: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction117::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction117[] = "init var of ReduceAction117";
-void INIT_ATTRIBUTES__parser___ReduceAction117(val_t p0){
+/* 2: Attribute ReduceAction241::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction241[] = "init var of ReduceAction241";
+void INIT_ATTRIBUTES__parser___ReduceAction241(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction117;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction241;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction117(void)
+val_t NEW_parser___ReduceAction241(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction117;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction241;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction117[] = "check new ReduceAction117";
-void CHECKNEW_parser___ReduceAction117(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction241[] = "check new ReduceAction241";
+void CHECKNEW_parser___ReduceAction241(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction117;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction241;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -101167,36 +122252,36 @@ void CHECKNEW_parser___ReduceAction117(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction117_parser___ReduceAction___init[] = "new ReduceAction117 parser::ReduceAction::init";
-val_t NEW_ReduceAction117_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction241_parser___ReduceAction___init[] = "new ReduceAction241 parser::ReduceAction::init";
+val_t NEW_ReduceAction241_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction117_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction241_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction117();
-  INIT_ATTRIBUTES__parser___ReduceAction117(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction241();
+  INIT_ATTRIBUTES__parser___ReduceAction241(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction117(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction241(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction118[55] = {
-  {(bigint) 2407 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction242[55] = {
+  {(bigint) 2235 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction118" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction118 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction118 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2407 /* 5: ReduceAction118 < ReduceAction118: superclass typecheck marker */},
+  {(bigint) "ReduceAction242" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction242 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction242 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2235 /* 5: ReduceAction242 < ReduceAction242: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -101210,7 +122295,7 @@ const classtable_elt_t VFT_parser___ReduceAction118[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction118 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction242 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -101241,46 +122326,46 @@ const classtable_elt_t VFT_parser___ReduceAction118[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction118 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction118___action},
+  {(bigint) 0 /* 50: ReduceAction242 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction242___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction118 < ReduceAction118: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction242 < ReduceAction242: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction118::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction118[] = "init var of ReduceAction118";
-void INIT_ATTRIBUTES__parser___ReduceAction118(val_t p0){
+/* 2: Attribute ReduceAction242::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction242[] = "init var of ReduceAction242";
+void INIT_ATTRIBUTES__parser___ReduceAction242(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction118;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction242;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction118(void)
+val_t NEW_parser___ReduceAction242(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction118;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction242;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction118[] = "check new ReduceAction118";
-void CHECKNEW_parser___ReduceAction118(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction242[] = "check new ReduceAction242";
+void CHECKNEW_parser___ReduceAction242(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction118;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction242;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -101293,36 +122378,36 @@ void CHECKNEW_parser___ReduceAction118(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction118_parser___ReduceAction___init[] = "new ReduceAction118 parser::ReduceAction::init";
-val_t NEW_ReduceAction118_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction242_parser___ReduceAction___init[] = "new ReduceAction242 parser::ReduceAction::init";
+val_t NEW_ReduceAction242_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction118_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction242_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction118();
-  INIT_ATTRIBUTES__parser___ReduceAction118(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction242();
+  INIT_ATTRIBUTES__parser___ReduceAction242(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction118(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction242(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction119[55] = {
-  {(bigint) 2403 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction243[55] = {
+  {(bigint) 2231 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction119" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction119 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction119 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2403 /* 5: ReduceAction119 < ReduceAction119: superclass typecheck marker */},
+  {(bigint) "ReduceAction243" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction243 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction243 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2231 /* 5: ReduceAction243 < ReduceAction243: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -101336,7 +122421,7 @@ const classtable_elt_t VFT_parser___ReduceAction119[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction119 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction243 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -101367,46 +122452,46 @@ const classtable_elt_t VFT_parser___ReduceAction119[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction119 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction119___action},
+  {(bigint) 0 /* 50: ReduceAction243 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction243___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction119 < ReduceAction119: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction243 < ReduceAction243: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction119::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction119[] = "init var of ReduceAction119";
-void INIT_ATTRIBUTES__parser___ReduceAction119(val_t p0){
+/* 2: Attribute ReduceAction243::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction243[] = "init var of ReduceAction243";
+void INIT_ATTRIBUTES__parser___ReduceAction243(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction119;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction243;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction119(void)
+val_t NEW_parser___ReduceAction243(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction119;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction243;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction119[] = "check new ReduceAction119";
-void CHECKNEW_parser___ReduceAction119(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction243[] = "check new ReduceAction243";
+void CHECKNEW_parser___ReduceAction243(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction119;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction243;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -101419,36 +122504,36 @@ void CHECKNEW_parser___ReduceAction119(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction119_parser___ReduceAction___init[] = "new ReduceAction119 parser::ReduceAction::init";
-val_t NEW_ReduceAction119_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction243_parser___ReduceAction___init[] = "new ReduceAction243 parser::ReduceAction::init";
+val_t NEW_ReduceAction243_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction119_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction243_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction119();
-  INIT_ATTRIBUTES__parser___ReduceAction119(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction243();
+  INIT_ATTRIBUTES__parser___ReduceAction243(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction119(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction243(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction120[55] = {
-  {(bigint) 2395 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction244[55] = {
+  {(bigint) 2227 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction120" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction120 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction120 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2395 /* 5: ReduceAction120 < ReduceAction120: superclass typecheck marker */},
+  {(bigint) "ReduceAction244" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction244 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction244 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2227 /* 5: ReduceAction244 < ReduceAction244: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -101462,7 +122547,7 @@ const classtable_elt_t VFT_parser___ReduceAction120[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction120 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction244 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -101493,46 +122578,46 @@ const classtable_elt_t VFT_parser___ReduceAction120[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction120 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction120___action},
+  {(bigint) 0 /* 50: ReduceAction244 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction244___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction120 < ReduceAction120: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction244 < ReduceAction244: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction120::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction120[] = "init var of ReduceAction120";
-void INIT_ATTRIBUTES__parser___ReduceAction120(val_t p0){
+/* 2: Attribute ReduceAction244::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction244[] = "init var of ReduceAction244";
+void INIT_ATTRIBUTES__parser___ReduceAction244(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction120;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction244;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction120(void)
+val_t NEW_parser___ReduceAction244(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction120;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction244;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction120[] = "check new ReduceAction120";
-void CHECKNEW_parser___ReduceAction120(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction244[] = "check new ReduceAction244";
+void CHECKNEW_parser___ReduceAction244(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction120;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction244;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -101545,36 +122630,36 @@ void CHECKNEW_parser___ReduceAction120(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction120_parser___ReduceAction___init[] = "new ReduceAction120 parser::ReduceAction::init";
-val_t NEW_ReduceAction120_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction244_parser___ReduceAction___init[] = "new ReduceAction244 parser::ReduceAction::init";
+val_t NEW_ReduceAction244_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction120_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction244_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction120();
-  INIT_ATTRIBUTES__parser___ReduceAction120(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction244();
+  INIT_ATTRIBUTES__parser___ReduceAction244(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction120(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction244(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction121[55] = {
-  {(bigint) 2391 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction245[55] = {
+  {(bigint) 2223 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction121" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction121 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction121 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2391 /* 5: ReduceAction121 < ReduceAction121: superclass typecheck marker */},
+  {(bigint) "ReduceAction245" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction245 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction245 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2223 /* 5: ReduceAction245 < ReduceAction245: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -101588,7 +122673,7 @@ const classtable_elt_t VFT_parser___ReduceAction121[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction121 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction245 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -101619,46 +122704,46 @@ const classtable_elt_t VFT_parser___ReduceAction121[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction121 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction121___action},
+  {(bigint) 0 /* 50: ReduceAction245 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction245___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction121 < ReduceAction121: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction245 < ReduceAction245: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction121::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction121[] = "init var of ReduceAction121";
-void INIT_ATTRIBUTES__parser___ReduceAction121(val_t p0){
+/* 2: Attribute ReduceAction245::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction245[] = "init var of ReduceAction245";
+void INIT_ATTRIBUTES__parser___ReduceAction245(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction121;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction245;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction121(void)
+val_t NEW_parser___ReduceAction245(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction121;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction245;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction121[] = "check new ReduceAction121";
-void CHECKNEW_parser___ReduceAction121(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction245[] = "check new ReduceAction245";
+void CHECKNEW_parser___ReduceAction245(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction121;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction245;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -101671,36 +122756,36 @@ void CHECKNEW_parser___ReduceAction121(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction121_parser___ReduceAction___init[] = "new ReduceAction121 parser::ReduceAction::init";
-val_t NEW_ReduceAction121_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction245_parser___ReduceAction___init[] = "new ReduceAction245 parser::ReduceAction::init";
+val_t NEW_ReduceAction245_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction121_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction245_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction121();
-  INIT_ATTRIBUTES__parser___ReduceAction121(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction245();
+  INIT_ATTRIBUTES__parser___ReduceAction245(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction121(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction245(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction122[55] = {
-  {(bigint) 2387 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction246[55] = {
+  {(bigint) 2219 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction122" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction122 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction122 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2387 /* 5: ReduceAction122 < ReduceAction122: superclass typecheck marker */},
+  {(bigint) "ReduceAction246" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction246 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction246 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2219 /* 5: ReduceAction246 < ReduceAction246: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -101714,7 +122799,7 @@ const classtable_elt_t VFT_parser___ReduceAction122[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction122 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction246 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -101745,46 +122830,46 @@ const classtable_elt_t VFT_parser___ReduceAction122[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction122 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction122___action},
+  {(bigint) 0 /* 50: ReduceAction246 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction246___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction122 < ReduceAction122: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction246 < ReduceAction246: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction122::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction122[] = "init var of ReduceAction122";
-void INIT_ATTRIBUTES__parser___ReduceAction122(val_t p0){
+/* 2: Attribute ReduceAction246::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction246[] = "init var of ReduceAction246";
+void INIT_ATTRIBUTES__parser___ReduceAction246(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction122;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction246;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction122(void)
+val_t NEW_parser___ReduceAction246(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction122;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction246;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction122[] = "check new ReduceAction122";
-void CHECKNEW_parser___ReduceAction122(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction246[] = "check new ReduceAction246";
+void CHECKNEW_parser___ReduceAction246(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction122;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction246;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -101797,36 +122882,36 @@ void CHECKNEW_parser___ReduceAction122(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction122_parser___ReduceAction___init[] = "new ReduceAction122 parser::ReduceAction::init";
-val_t NEW_ReduceAction122_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction246_parser___ReduceAction___init[] = "new ReduceAction246 parser::ReduceAction::init";
+val_t NEW_ReduceAction246_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction122_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction246_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction122();
-  INIT_ATTRIBUTES__parser___ReduceAction122(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction246();
+  INIT_ATTRIBUTES__parser___ReduceAction246(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction122(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction246(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction123[55] = {
-  {(bigint) 2383 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction247[55] = {
+  {(bigint) 2215 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction123" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction123 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction123 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2383 /* 5: ReduceAction123 < ReduceAction123: superclass typecheck marker */},
+  {(bigint) "ReduceAction247" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction247 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction247 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2215 /* 5: ReduceAction247 < ReduceAction247: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -101840,7 +122925,7 @@ const classtable_elt_t VFT_parser___ReduceAction123[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction123 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction247 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -101871,46 +122956,46 @@ const classtable_elt_t VFT_parser___ReduceAction123[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction123 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction123___action},
+  {(bigint) 0 /* 50: ReduceAction247 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction247___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction123 < ReduceAction123: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction247 < ReduceAction247: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction123::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction123[] = "init var of ReduceAction123";
-void INIT_ATTRIBUTES__parser___ReduceAction123(val_t p0){
+/* 2: Attribute ReduceAction247::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction247[] = "init var of ReduceAction247";
+void INIT_ATTRIBUTES__parser___ReduceAction247(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction123;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction247;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction123(void)
+val_t NEW_parser___ReduceAction247(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction123;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction247;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction123[] = "check new ReduceAction123";
-void CHECKNEW_parser___ReduceAction123(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction247[] = "check new ReduceAction247";
+void CHECKNEW_parser___ReduceAction247(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction123;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction247;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -101923,36 +123008,36 @@ void CHECKNEW_parser___ReduceAction123(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction123_parser___ReduceAction___init[] = "new ReduceAction123 parser::ReduceAction::init";
-val_t NEW_ReduceAction123_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction247_parser___ReduceAction___init[] = "new ReduceAction247 parser::ReduceAction::init";
+val_t NEW_ReduceAction247_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction123_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction247_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction123();
-  INIT_ATTRIBUTES__parser___ReduceAction123(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction247();
+  INIT_ATTRIBUTES__parser___ReduceAction247(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction123(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction247(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction124[55] = {
-  {(bigint) 2379 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction248[55] = {
+  {(bigint) 2211 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction124" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction124 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction124 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2379 /* 5: ReduceAction124 < ReduceAction124: superclass typecheck marker */},
+  {(bigint) "ReduceAction248" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction248 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction248 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2211 /* 5: ReduceAction248 < ReduceAction248: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -101966,7 +123051,7 @@ const classtable_elt_t VFT_parser___ReduceAction124[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction124 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction248 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -101997,46 +123082,46 @@ const classtable_elt_t VFT_parser___ReduceAction124[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction124 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction124___action},
+  {(bigint) 0 /* 50: ReduceAction248 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction248___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction124 < ReduceAction124: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction248 < ReduceAction248: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction124::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction124[] = "init var of ReduceAction124";
-void INIT_ATTRIBUTES__parser___ReduceAction124(val_t p0){
+/* 2: Attribute ReduceAction248::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction248[] = "init var of ReduceAction248";
+void INIT_ATTRIBUTES__parser___ReduceAction248(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction124;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction248;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction124(void)
+val_t NEW_parser___ReduceAction248(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction124;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction248;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction124[] = "check new ReduceAction124";
-void CHECKNEW_parser___ReduceAction124(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction248[] = "check new ReduceAction248";
+void CHECKNEW_parser___ReduceAction248(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction124;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction248;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -102049,36 +123134,36 @@ void CHECKNEW_parser___ReduceAction124(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction124_parser___ReduceAction___init[] = "new ReduceAction124 parser::ReduceAction::init";
-val_t NEW_ReduceAction124_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction248_parser___ReduceAction___init[] = "new ReduceAction248 parser::ReduceAction::init";
+val_t NEW_ReduceAction248_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction124_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction248_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction124();
-  INIT_ATTRIBUTES__parser___ReduceAction124(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction248();
+  INIT_ATTRIBUTES__parser___ReduceAction248(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction124(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction248(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction125[55] = {
-  {(bigint) 2375 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction249[55] = {
+  {(bigint) 2207 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction125" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction125 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction125 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2375 /* 5: ReduceAction125 < ReduceAction125: superclass typecheck marker */},
+  {(bigint) "ReduceAction249" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction249 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction249 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2207 /* 5: ReduceAction249 < ReduceAction249: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -102092,7 +123177,7 @@ const classtable_elt_t VFT_parser___ReduceAction125[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction125 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction249 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -102123,46 +123208,46 @@ const classtable_elt_t VFT_parser___ReduceAction125[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction125 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction125___action},
+  {(bigint) 0 /* 50: ReduceAction249 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction249___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction125 < ReduceAction125: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction249 < ReduceAction249: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction125::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction125[] = "init var of ReduceAction125";
-void INIT_ATTRIBUTES__parser___ReduceAction125(val_t p0){
+/* 2: Attribute ReduceAction249::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction249[] = "init var of ReduceAction249";
+void INIT_ATTRIBUTES__parser___ReduceAction249(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction125;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction249;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction125(void)
+val_t NEW_parser___ReduceAction249(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction125;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction249;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction125[] = "check new ReduceAction125";
-void CHECKNEW_parser___ReduceAction125(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction249[] = "check new ReduceAction249";
+void CHECKNEW_parser___ReduceAction249(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction125;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction249;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -102175,36 +123260,36 @@ void CHECKNEW_parser___ReduceAction125(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction125_parser___ReduceAction___init[] = "new ReduceAction125 parser::ReduceAction::init";
-val_t NEW_ReduceAction125_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction249_parser___ReduceAction___init[] = "new ReduceAction249 parser::ReduceAction::init";
+val_t NEW_ReduceAction249_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction125_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction249_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction125();
-  INIT_ATTRIBUTES__parser___ReduceAction125(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction249();
+  INIT_ATTRIBUTES__parser___ReduceAction249(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction125(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction249(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction126[55] = {
-  {(bigint) 2371 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction250[55] = {
+  {(bigint) 2199 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction126" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction126 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction126 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2371 /* 5: ReduceAction126 < ReduceAction126: superclass typecheck marker */},
+  {(bigint) "ReduceAction250" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction250 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction250 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2199 /* 5: ReduceAction250 < ReduceAction250: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -102218,7 +123303,7 @@ const classtable_elt_t VFT_parser___ReduceAction126[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction126 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction250 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -102249,46 +123334,46 @@ const classtable_elt_t VFT_parser___ReduceAction126[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction126 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction126___action},
+  {(bigint) 0 /* 50: ReduceAction250 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction250___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction126 < ReduceAction126: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction250 < ReduceAction250: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction126::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction126[] = "init var of ReduceAction126";
-void INIT_ATTRIBUTES__parser___ReduceAction126(val_t p0){
+/* 2: Attribute ReduceAction250::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction250[] = "init var of ReduceAction250";
+void INIT_ATTRIBUTES__parser___ReduceAction250(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction126;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction250;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction126(void)
+val_t NEW_parser___ReduceAction250(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction126;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction250;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction126[] = "check new ReduceAction126";
-void CHECKNEW_parser___ReduceAction126(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction250[] = "check new ReduceAction250";
+void CHECKNEW_parser___ReduceAction250(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction126;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction250;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -102301,36 +123386,36 @@ void CHECKNEW_parser___ReduceAction126(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction126_parser___ReduceAction___init[] = "new ReduceAction126 parser::ReduceAction::init";
-val_t NEW_ReduceAction126_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction250_parser___ReduceAction___init[] = "new ReduceAction250 parser::ReduceAction::init";
+val_t NEW_ReduceAction250_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction126_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction250_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction126();
-  INIT_ATTRIBUTES__parser___ReduceAction126(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction250();
+  INIT_ATTRIBUTES__parser___ReduceAction250(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction126(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction250(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction127[55] = {
-  {(bigint) 2367 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction251[55] = {
+  {(bigint) 2195 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction127" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction127 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction127 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2367 /* 5: ReduceAction127 < ReduceAction127: superclass typecheck marker */},
+  {(bigint) "ReduceAction251" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction251 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction251 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2195 /* 5: ReduceAction251 < ReduceAction251: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -102344,7 +123429,7 @@ const classtable_elt_t VFT_parser___ReduceAction127[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction127 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction251 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -102375,46 +123460,46 @@ const classtable_elt_t VFT_parser___ReduceAction127[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction127 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction127___action},
+  {(bigint) 0 /* 50: ReduceAction251 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction251___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction127 < ReduceAction127: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction251 < ReduceAction251: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction127::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction127[] = "init var of ReduceAction127";
-void INIT_ATTRIBUTES__parser___ReduceAction127(val_t p0){
+/* 2: Attribute ReduceAction251::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction251[] = "init var of ReduceAction251";
+void INIT_ATTRIBUTES__parser___ReduceAction251(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction127;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction251;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction127(void)
+val_t NEW_parser___ReduceAction251(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction127;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction251;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction127[] = "check new ReduceAction127";
-void CHECKNEW_parser___ReduceAction127(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction251[] = "check new ReduceAction251";
+void CHECKNEW_parser___ReduceAction251(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction127;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction251;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -102427,36 +123512,36 @@ void CHECKNEW_parser___ReduceAction127(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction127_parser___ReduceAction___init[] = "new ReduceAction127 parser::ReduceAction::init";
-val_t NEW_ReduceAction127_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction251_parser___ReduceAction___init[] = "new ReduceAction251 parser::ReduceAction::init";
+val_t NEW_ReduceAction251_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction127_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction251_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction127();
-  INIT_ATTRIBUTES__parser___ReduceAction127(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction251();
+  INIT_ATTRIBUTES__parser___ReduceAction251(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction127(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction251(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction128[55] = {
-  {(bigint) 2363 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction252[55] = {
+  {(bigint) 2191 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction128" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction128 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction128 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2363 /* 5: ReduceAction128 < ReduceAction128: superclass typecheck marker */},
+  {(bigint) "ReduceAction252" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction252 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction252 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2191 /* 5: ReduceAction252 < ReduceAction252: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -102470,7 +123555,7 @@ const classtable_elt_t VFT_parser___ReduceAction128[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction128 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction252 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -102501,46 +123586,46 @@ const classtable_elt_t VFT_parser___ReduceAction128[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction128 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction128___action},
+  {(bigint) 0 /* 50: ReduceAction252 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction252___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction128 < ReduceAction128: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction252 < ReduceAction252: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction128::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction128[] = "init var of ReduceAction128";
-void INIT_ATTRIBUTES__parser___ReduceAction128(val_t p0){
+/* 2: Attribute ReduceAction252::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction252[] = "init var of ReduceAction252";
+void INIT_ATTRIBUTES__parser___ReduceAction252(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction128;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction252;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction128(void)
+val_t NEW_parser___ReduceAction252(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction128;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction252;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction128[] = "check new ReduceAction128";
-void CHECKNEW_parser___ReduceAction128(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction252[] = "check new ReduceAction252";
+void CHECKNEW_parser___ReduceAction252(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction128;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction252;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -102553,36 +123638,36 @@ void CHECKNEW_parser___ReduceAction128(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction128_parser___ReduceAction___init[] = "new ReduceAction128 parser::ReduceAction::init";
-val_t NEW_ReduceAction128_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction252_parser___ReduceAction___init[] = "new ReduceAction252 parser::ReduceAction::init";
+val_t NEW_ReduceAction252_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction128_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction252_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction128();
-  INIT_ATTRIBUTES__parser___ReduceAction128(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction252();
+  INIT_ATTRIBUTES__parser___ReduceAction252(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction128(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction252(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction129[55] = {
-  {(bigint) 2359 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction253[55] = {
+  {(bigint) 2187 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction129" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction129 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction129 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2359 /* 5: ReduceAction129 < ReduceAction129: superclass typecheck marker */},
+  {(bigint) "ReduceAction253" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction253 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction253 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2187 /* 5: ReduceAction253 < ReduceAction253: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -102596,7 +123681,7 @@ const classtable_elt_t VFT_parser___ReduceAction129[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction129 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction253 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -102627,46 +123712,46 @@ const classtable_elt_t VFT_parser___ReduceAction129[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction129 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction129___action},
+  {(bigint) 0 /* 50: ReduceAction253 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction253___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction129 < ReduceAction129: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction253 < ReduceAction253: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction129::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction129[] = "init var of ReduceAction129";
-void INIT_ATTRIBUTES__parser___ReduceAction129(val_t p0){
+/* 2: Attribute ReduceAction253::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction253[] = "init var of ReduceAction253";
+void INIT_ATTRIBUTES__parser___ReduceAction253(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction129;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction253;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction129(void)
+val_t NEW_parser___ReduceAction253(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction129;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction253;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction129[] = "check new ReduceAction129";
-void CHECKNEW_parser___ReduceAction129(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction253[] = "check new ReduceAction253";
+void CHECKNEW_parser___ReduceAction253(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction129;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction253;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -102679,36 +123764,36 @@ void CHECKNEW_parser___ReduceAction129(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction129_parser___ReduceAction___init[] = "new ReduceAction129 parser::ReduceAction::init";
-val_t NEW_ReduceAction129_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction253_parser___ReduceAction___init[] = "new ReduceAction253 parser::ReduceAction::init";
+val_t NEW_ReduceAction253_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction129_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction253_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction129();
-  INIT_ATTRIBUTES__parser___ReduceAction129(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction253();
+  INIT_ATTRIBUTES__parser___ReduceAction253(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction129(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction253(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction130[55] = {
-  {(bigint) 2351 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction254[55] = {
+  {(bigint) 2183 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction130" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction130 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction130 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2351 /* 5: ReduceAction130 < ReduceAction130: superclass typecheck marker */},
+  {(bigint) "ReduceAction254" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction254 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction254 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2183 /* 5: ReduceAction254 < ReduceAction254: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -102722,7 +123807,7 @@ const classtable_elt_t VFT_parser___ReduceAction130[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction130 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction254 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -102753,46 +123838,46 @@ const classtable_elt_t VFT_parser___ReduceAction130[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction130 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction130___action},
+  {(bigint) 0 /* 50: ReduceAction254 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction254___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction130 < ReduceAction130: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction254 < ReduceAction254: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction130::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction130[] = "init var of ReduceAction130";
-void INIT_ATTRIBUTES__parser___ReduceAction130(val_t p0){
+/* 2: Attribute ReduceAction254::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction254[] = "init var of ReduceAction254";
+void INIT_ATTRIBUTES__parser___ReduceAction254(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction130;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction254;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction130(void)
+val_t NEW_parser___ReduceAction254(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction130;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction254;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction130[] = "check new ReduceAction130";
-void CHECKNEW_parser___ReduceAction130(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction254[] = "check new ReduceAction254";
+void CHECKNEW_parser___ReduceAction254(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction130;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction254;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -102805,36 +123890,36 @@ void CHECKNEW_parser___ReduceAction130(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction130_parser___ReduceAction___init[] = "new ReduceAction130 parser::ReduceAction::init";
-val_t NEW_ReduceAction130_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction254_parser___ReduceAction___init[] = "new ReduceAction254 parser::ReduceAction::init";
+val_t NEW_ReduceAction254_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction130_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction254_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction130();
-  INIT_ATTRIBUTES__parser___ReduceAction130(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction254();
+  INIT_ATTRIBUTES__parser___ReduceAction254(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction130(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction254(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction131[55] = {
-  {(bigint) 2347 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction255[55] = {
+  {(bigint) 2179 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction131" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction131 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction131 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2347 /* 5: ReduceAction131 < ReduceAction131: superclass typecheck marker */},
+  {(bigint) "ReduceAction255" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction255 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction255 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2179 /* 5: ReduceAction255 < ReduceAction255: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -102848,7 +123933,7 @@ const classtable_elt_t VFT_parser___ReduceAction131[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction131 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction255 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -102879,46 +123964,46 @@ const classtable_elt_t VFT_parser___ReduceAction131[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction131 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction131___action},
+  {(bigint) 0 /* 50: ReduceAction255 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction255___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction131 < ReduceAction131: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction255 < ReduceAction255: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction131::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction131[] = "init var of ReduceAction131";
-void INIT_ATTRIBUTES__parser___ReduceAction131(val_t p0){
+/* 2: Attribute ReduceAction255::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction255[] = "init var of ReduceAction255";
+void INIT_ATTRIBUTES__parser___ReduceAction255(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction131;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction255;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction131(void)
+val_t NEW_parser___ReduceAction255(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction131;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction255;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction131[] = "check new ReduceAction131";
-void CHECKNEW_parser___ReduceAction131(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction255[] = "check new ReduceAction255";
+void CHECKNEW_parser___ReduceAction255(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction131;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction255;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -102931,36 +124016,36 @@ void CHECKNEW_parser___ReduceAction131(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction131_parser___ReduceAction___init[] = "new ReduceAction131 parser::ReduceAction::init";
-val_t NEW_ReduceAction131_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction255_parser___ReduceAction___init[] = "new ReduceAction255 parser::ReduceAction::init";
+val_t NEW_ReduceAction255_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction131_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction255_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction131();
-  INIT_ATTRIBUTES__parser___ReduceAction131(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction255();
+  INIT_ATTRIBUTES__parser___ReduceAction255(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction131(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction255(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction132[55] = {
-  {(bigint) 2343 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction256[55] = {
+  {(bigint) 2175 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction132" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction132 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction132 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2343 /* 5: ReduceAction132 < ReduceAction132: superclass typecheck marker */},
+  {(bigint) "ReduceAction256" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction256 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction256 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2175 /* 5: ReduceAction256 < ReduceAction256: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -102974,7 +124059,7 @@ const classtable_elt_t VFT_parser___ReduceAction132[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction132 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction256 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -103005,46 +124090,46 @@ const classtable_elt_t VFT_parser___ReduceAction132[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction132 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction132___action},
+  {(bigint) 0 /* 50: ReduceAction256 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction256___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction132 < ReduceAction132: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction256 < ReduceAction256: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction132::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction132[] = "init var of ReduceAction132";
-void INIT_ATTRIBUTES__parser___ReduceAction132(val_t p0){
+/* 2: Attribute ReduceAction256::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction256[] = "init var of ReduceAction256";
+void INIT_ATTRIBUTES__parser___ReduceAction256(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction132;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction256;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction132(void)
+val_t NEW_parser___ReduceAction256(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction132;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction256;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction132[] = "check new ReduceAction132";
-void CHECKNEW_parser___ReduceAction132(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction256[] = "check new ReduceAction256";
+void CHECKNEW_parser___ReduceAction256(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction132;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction256;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -103057,36 +124142,36 @@ void CHECKNEW_parser___ReduceAction132(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction132_parser___ReduceAction___init[] = "new ReduceAction132 parser::ReduceAction::init";
-val_t NEW_ReduceAction132_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction256_parser___ReduceAction___init[] = "new ReduceAction256 parser::ReduceAction::init";
+val_t NEW_ReduceAction256_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction132_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction256_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction132();
-  INIT_ATTRIBUTES__parser___ReduceAction132(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction256();
+  INIT_ATTRIBUTES__parser___ReduceAction256(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction132(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction256(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction133[55] = {
-  {(bigint) 2339 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction257[55] = {
+  {(bigint) 2171 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction133" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction133 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction133 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2339 /* 5: ReduceAction133 < ReduceAction133: superclass typecheck marker */},
+  {(bigint) "ReduceAction257" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction257 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction257 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2171 /* 5: ReduceAction257 < ReduceAction257: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -103100,7 +124185,7 @@ const classtable_elt_t VFT_parser___ReduceAction133[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction133 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction257 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -103131,46 +124216,46 @@ const classtable_elt_t VFT_parser___ReduceAction133[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction133 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction133___action},
+  {(bigint) 0 /* 50: ReduceAction257 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction257___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction133 < ReduceAction133: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction257 < ReduceAction257: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction133::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction133[] = "init var of ReduceAction133";
-void INIT_ATTRIBUTES__parser___ReduceAction133(val_t p0){
+/* 2: Attribute ReduceAction257::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction257[] = "init var of ReduceAction257";
+void INIT_ATTRIBUTES__parser___ReduceAction257(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction133;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction257;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction133(void)
+val_t NEW_parser___ReduceAction257(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction133;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction257;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction133[] = "check new ReduceAction133";
-void CHECKNEW_parser___ReduceAction133(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction257[] = "check new ReduceAction257";
+void CHECKNEW_parser___ReduceAction257(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction133;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction257;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -103183,36 +124268,36 @@ void CHECKNEW_parser___ReduceAction133(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction133_parser___ReduceAction___init[] = "new ReduceAction133 parser::ReduceAction::init";
-val_t NEW_ReduceAction133_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction257_parser___ReduceAction___init[] = "new ReduceAction257 parser::ReduceAction::init";
+val_t NEW_ReduceAction257_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction133_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction257_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction133();
-  INIT_ATTRIBUTES__parser___ReduceAction133(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction257();
+  INIT_ATTRIBUTES__parser___ReduceAction257(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction133(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction257(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction134[55] = {
-  {(bigint) 2335 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction258[55] = {
+  {(bigint) 2167 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction134" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction134 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction134 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2335 /* 5: ReduceAction134 < ReduceAction134: superclass typecheck marker */},
+  {(bigint) "ReduceAction258" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction258 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction258 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2167 /* 5: ReduceAction258 < ReduceAction258: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -103226,7 +124311,7 @@ const classtable_elt_t VFT_parser___ReduceAction134[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction134 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction258 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -103257,46 +124342,46 @@ const classtable_elt_t VFT_parser___ReduceAction134[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction134 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction134___action},
+  {(bigint) 0 /* 50: ReduceAction258 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction258___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction134 < ReduceAction134: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction258 < ReduceAction258: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction134::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction134[] = "init var of ReduceAction134";
-void INIT_ATTRIBUTES__parser___ReduceAction134(val_t p0){
+/* 2: Attribute ReduceAction258::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction258[] = "init var of ReduceAction258";
+void INIT_ATTRIBUTES__parser___ReduceAction258(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction134;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction258;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction134(void)
+val_t NEW_parser___ReduceAction258(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction134;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction258;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction134[] = "check new ReduceAction134";
-void CHECKNEW_parser___ReduceAction134(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction258[] = "check new ReduceAction258";
+void CHECKNEW_parser___ReduceAction258(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction134;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction258;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -103309,36 +124394,36 @@ void CHECKNEW_parser___ReduceAction134(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction134_parser___ReduceAction___init[] = "new ReduceAction134 parser::ReduceAction::init";
-val_t NEW_ReduceAction134_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction258_parser___ReduceAction___init[] = "new ReduceAction258 parser::ReduceAction::init";
+val_t NEW_ReduceAction258_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction134_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction258_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction134();
-  INIT_ATTRIBUTES__parser___ReduceAction134(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction258();
+  INIT_ATTRIBUTES__parser___ReduceAction258(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction134(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction258(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction135[55] = {
-  {(bigint) 2331 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction259[55] = {
+  {(bigint) 2163 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction135" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction135 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction135 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2331 /* 5: ReduceAction135 < ReduceAction135: superclass typecheck marker */},
+  {(bigint) "ReduceAction259" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction259 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction259 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2163 /* 5: ReduceAction259 < ReduceAction259: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -103352,7 +124437,7 @@ const classtable_elt_t VFT_parser___ReduceAction135[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction135 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction259 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -103383,46 +124468,46 @@ const classtable_elt_t VFT_parser___ReduceAction135[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction135 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction135___action},
+  {(bigint) 0 /* 50: ReduceAction259 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction259___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction135 < ReduceAction135: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction259 < ReduceAction259: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction135::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction135[] = "init var of ReduceAction135";
-void INIT_ATTRIBUTES__parser___ReduceAction135(val_t p0){
+/* 2: Attribute ReduceAction259::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction259[] = "init var of ReduceAction259";
+void INIT_ATTRIBUTES__parser___ReduceAction259(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction135;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction259;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction135(void)
+val_t NEW_parser___ReduceAction259(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction135;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction259;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction135[] = "check new ReduceAction135";
-void CHECKNEW_parser___ReduceAction135(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction259[] = "check new ReduceAction259";
+void CHECKNEW_parser___ReduceAction259(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction135;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction259;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -103435,36 +124520,36 @@ void CHECKNEW_parser___ReduceAction135(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction135_parser___ReduceAction___init[] = "new ReduceAction135 parser::ReduceAction::init";
-val_t NEW_ReduceAction135_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction259_parser___ReduceAction___init[] = "new ReduceAction259 parser::ReduceAction::init";
+val_t NEW_ReduceAction259_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction135_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction259_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction135();
-  INIT_ATTRIBUTES__parser___ReduceAction135(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction259();
+  INIT_ATTRIBUTES__parser___ReduceAction259(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction135(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction259(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction136[55] = {
-  {(bigint) 2327 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction260[55] = {
+  {(bigint) 2155 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction136" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction136 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction136 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2327 /* 5: ReduceAction136 < ReduceAction136: superclass typecheck marker */},
+  {(bigint) "ReduceAction260" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction260 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction260 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2155 /* 5: ReduceAction260 < ReduceAction260: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -103478,7 +124563,7 @@ const classtable_elt_t VFT_parser___ReduceAction136[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction136 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction260 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -103509,46 +124594,46 @@ const classtable_elt_t VFT_parser___ReduceAction136[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction136 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction136___action},
+  {(bigint) 0 /* 50: ReduceAction260 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction260___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction136 < ReduceAction136: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction260 < ReduceAction260: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction136::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction136[] = "init var of ReduceAction136";
-void INIT_ATTRIBUTES__parser___ReduceAction136(val_t p0){
+/* 2: Attribute ReduceAction260::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction260[] = "init var of ReduceAction260";
+void INIT_ATTRIBUTES__parser___ReduceAction260(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction136;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction260;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction136(void)
+val_t NEW_parser___ReduceAction260(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction136;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction260;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction136[] = "check new ReduceAction136";
-void CHECKNEW_parser___ReduceAction136(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction260[] = "check new ReduceAction260";
+void CHECKNEW_parser___ReduceAction260(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction136;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction260;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -103561,36 +124646,36 @@ void CHECKNEW_parser___ReduceAction136(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction136_parser___ReduceAction___init[] = "new ReduceAction136 parser::ReduceAction::init";
-val_t NEW_ReduceAction136_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction260_parser___ReduceAction___init[] = "new ReduceAction260 parser::ReduceAction::init";
+val_t NEW_ReduceAction260_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction136_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction260_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction136();
-  INIT_ATTRIBUTES__parser___ReduceAction136(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction260();
+  INIT_ATTRIBUTES__parser___ReduceAction260(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction136(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction260(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction137[55] = {
-  {(bigint) 2323 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction261[55] = {
+  {(bigint) 2151 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction137" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction137 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction137 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2323 /* 5: ReduceAction137 < ReduceAction137: superclass typecheck marker */},
+  {(bigint) "ReduceAction261" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction261 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction261 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2151 /* 5: ReduceAction261 < ReduceAction261: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -103604,7 +124689,7 @@ const classtable_elt_t VFT_parser___ReduceAction137[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction137 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction261 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -103635,46 +124720,46 @@ const classtable_elt_t VFT_parser___ReduceAction137[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction137 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction137___action},
+  {(bigint) 0 /* 50: ReduceAction261 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction261___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction137 < ReduceAction137: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction261 < ReduceAction261: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction137::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction137[] = "init var of ReduceAction137";
-void INIT_ATTRIBUTES__parser___ReduceAction137(val_t p0){
+/* 2: Attribute ReduceAction261::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction261[] = "init var of ReduceAction261";
+void INIT_ATTRIBUTES__parser___ReduceAction261(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction137;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction261;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction137(void)
+val_t NEW_parser___ReduceAction261(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction137;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction261;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction137[] = "check new ReduceAction137";
-void CHECKNEW_parser___ReduceAction137(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction261[] = "check new ReduceAction261";
+void CHECKNEW_parser___ReduceAction261(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction137;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction261;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -103687,36 +124772,36 @@ void CHECKNEW_parser___ReduceAction137(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction137_parser___ReduceAction___init[] = "new ReduceAction137 parser::ReduceAction::init";
-val_t NEW_ReduceAction137_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction261_parser___ReduceAction___init[] = "new ReduceAction261 parser::ReduceAction::init";
+val_t NEW_ReduceAction261_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction137_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction261_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction137();
-  INIT_ATTRIBUTES__parser___ReduceAction137(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction261();
+  INIT_ATTRIBUTES__parser___ReduceAction261(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction137(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction261(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction138[55] = {
-  {(bigint) 2319 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction262[55] = {
+  {(bigint) 2147 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction138" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction138 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction138 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2319 /* 5: ReduceAction138 < ReduceAction138: superclass typecheck marker */},
+  {(bigint) "ReduceAction262" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction262 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction262 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2147 /* 5: ReduceAction262 < ReduceAction262: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -103730,7 +124815,7 @@ const classtable_elt_t VFT_parser___ReduceAction138[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction138 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction262 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -103761,46 +124846,46 @@ const classtable_elt_t VFT_parser___ReduceAction138[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction138 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction138___action},
+  {(bigint) 0 /* 50: ReduceAction262 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction262___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction138 < ReduceAction138: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction262 < ReduceAction262: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction138::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction138[] = "init var of ReduceAction138";
-void INIT_ATTRIBUTES__parser___ReduceAction138(val_t p0){
+/* 2: Attribute ReduceAction262::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction262[] = "init var of ReduceAction262";
+void INIT_ATTRIBUTES__parser___ReduceAction262(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction138;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction262;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction138(void)
+val_t NEW_parser___ReduceAction262(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction138;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction262;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction138[] = "check new ReduceAction138";
-void CHECKNEW_parser___ReduceAction138(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction262[] = "check new ReduceAction262";
+void CHECKNEW_parser___ReduceAction262(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction138;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction262;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -103813,36 +124898,36 @@ void CHECKNEW_parser___ReduceAction138(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction138_parser___ReduceAction___init[] = "new ReduceAction138 parser::ReduceAction::init";
-val_t NEW_ReduceAction138_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction262_parser___ReduceAction___init[] = "new ReduceAction262 parser::ReduceAction::init";
+val_t NEW_ReduceAction262_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction138_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction262_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction138();
-  INIT_ATTRIBUTES__parser___ReduceAction138(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction262();
+  INIT_ATTRIBUTES__parser___ReduceAction262(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction138(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction262(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction139[55] = {
-  {(bigint) 2315 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction263[55] = {
+  {(bigint) 2143 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction139" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction139 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction139 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2315 /* 5: ReduceAction139 < ReduceAction139: superclass typecheck marker */},
+  {(bigint) "ReduceAction263" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction263 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction263 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2143 /* 5: ReduceAction263 < ReduceAction263: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -103856,7 +124941,7 @@ const classtable_elt_t VFT_parser___ReduceAction139[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction139 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction263 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -103887,46 +124972,46 @@ const classtable_elt_t VFT_parser___ReduceAction139[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction139 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction139___action},
+  {(bigint) 0 /* 50: ReduceAction263 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction263___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction139 < ReduceAction139: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction263 < ReduceAction263: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction139::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction139[] = "init var of ReduceAction139";
-void INIT_ATTRIBUTES__parser___ReduceAction139(val_t p0){
+/* 2: Attribute ReduceAction263::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction263[] = "init var of ReduceAction263";
+void INIT_ATTRIBUTES__parser___ReduceAction263(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction139;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction263;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction139(void)
+val_t NEW_parser___ReduceAction263(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction139;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction263;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction139[] = "check new ReduceAction139";
-void CHECKNEW_parser___ReduceAction139(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction263[] = "check new ReduceAction263";
+void CHECKNEW_parser___ReduceAction263(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction139;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction263;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -103939,36 +125024,36 @@ void CHECKNEW_parser___ReduceAction139(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction139_parser___ReduceAction___init[] = "new ReduceAction139 parser::ReduceAction::init";
-val_t NEW_ReduceAction139_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction263_parser___ReduceAction___init[] = "new ReduceAction263 parser::ReduceAction::init";
+val_t NEW_ReduceAction263_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction139_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction263_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction139();
-  INIT_ATTRIBUTES__parser___ReduceAction139(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction263();
+  INIT_ATTRIBUTES__parser___ReduceAction263(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction139(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction263(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction140[55] = {
-  {(bigint) 2307 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction264[55] = {
+  {(bigint) 2139 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction140" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction140 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction140 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2307 /* 5: ReduceAction140 < ReduceAction140: superclass typecheck marker */},
+  {(bigint) "ReduceAction264" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction264 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction264 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2139 /* 5: ReduceAction264 < ReduceAction264: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -103982,7 +125067,7 @@ const classtable_elt_t VFT_parser___ReduceAction140[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction140 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction264 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -104013,46 +125098,46 @@ const classtable_elt_t VFT_parser___ReduceAction140[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction140 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction140___action},
+  {(bigint) 0 /* 50: ReduceAction264 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction264___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction140 < ReduceAction140: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction264 < ReduceAction264: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction140::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction140[] = "init var of ReduceAction140";
-void INIT_ATTRIBUTES__parser___ReduceAction140(val_t p0){
+/* 2: Attribute ReduceAction264::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction264[] = "init var of ReduceAction264";
+void INIT_ATTRIBUTES__parser___ReduceAction264(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction140;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction264;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction140(void)
+val_t NEW_parser___ReduceAction264(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction140;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction264;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction140[] = "check new ReduceAction140";
-void CHECKNEW_parser___ReduceAction140(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction264[] = "check new ReduceAction264";
+void CHECKNEW_parser___ReduceAction264(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction140;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction264;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -104065,36 +125150,36 @@ void CHECKNEW_parser___ReduceAction140(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction140_parser___ReduceAction___init[] = "new ReduceAction140 parser::ReduceAction::init";
-val_t NEW_ReduceAction140_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction264_parser___ReduceAction___init[] = "new ReduceAction264 parser::ReduceAction::init";
+val_t NEW_ReduceAction264_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction140_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction264_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction140();
-  INIT_ATTRIBUTES__parser___ReduceAction140(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction264();
+  INIT_ATTRIBUTES__parser___ReduceAction264(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction140(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction264(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction141[55] = {
-  {(bigint) 2303 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction265[55] = {
+  {(bigint) 2135 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction141" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction141 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction141 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2303 /* 5: ReduceAction141 < ReduceAction141: superclass typecheck marker */},
+  {(bigint) "ReduceAction265" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction265 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction265 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2135 /* 5: ReduceAction265 < ReduceAction265: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -104108,7 +125193,7 @@ const classtable_elt_t VFT_parser___ReduceAction141[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction141 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction265 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -104139,46 +125224,46 @@ const classtable_elt_t VFT_parser___ReduceAction141[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction141 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction141___action},
+  {(bigint) 0 /* 50: ReduceAction265 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction265___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction141 < ReduceAction141: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction265 < ReduceAction265: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction141::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction141[] = "init var of ReduceAction141";
-void INIT_ATTRIBUTES__parser___ReduceAction141(val_t p0){
+/* 2: Attribute ReduceAction265::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction265[] = "init var of ReduceAction265";
+void INIT_ATTRIBUTES__parser___ReduceAction265(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction141;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction265;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction141(void)
+val_t NEW_parser___ReduceAction265(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction141;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction265;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction141[] = "check new ReduceAction141";
-void CHECKNEW_parser___ReduceAction141(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction265[] = "check new ReduceAction265";
+void CHECKNEW_parser___ReduceAction265(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction141;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction265;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -104191,36 +125276,36 @@ void CHECKNEW_parser___ReduceAction141(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction141_parser___ReduceAction___init[] = "new ReduceAction141 parser::ReduceAction::init";
-val_t NEW_ReduceAction141_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction265_parser___ReduceAction___init[] = "new ReduceAction265 parser::ReduceAction::init";
+val_t NEW_ReduceAction265_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction141_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction265_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction141();
-  INIT_ATTRIBUTES__parser___ReduceAction141(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction265();
+  INIT_ATTRIBUTES__parser___ReduceAction265(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction141(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction265(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction142[55] = {
-  {(bigint) 2299 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction266[55] = {
+  {(bigint) 2131 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction142" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction142 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction142 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2299 /* 5: ReduceAction142 < ReduceAction142: superclass typecheck marker */},
+  {(bigint) "ReduceAction266" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction266 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction266 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2131 /* 5: ReduceAction266 < ReduceAction266: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -104234,7 +125319,7 @@ const classtable_elt_t VFT_parser___ReduceAction142[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction142 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction266 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -104265,46 +125350,46 @@ const classtable_elt_t VFT_parser___ReduceAction142[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction142 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction142___action},
+  {(bigint) 0 /* 50: ReduceAction266 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction266___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction142 < ReduceAction142: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction266 < ReduceAction266: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction142::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction142[] = "init var of ReduceAction142";
-void INIT_ATTRIBUTES__parser___ReduceAction142(val_t p0){
+/* 2: Attribute ReduceAction266::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction266[] = "init var of ReduceAction266";
+void INIT_ATTRIBUTES__parser___ReduceAction266(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction142;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction266;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction142(void)
+val_t NEW_parser___ReduceAction266(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction142;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction266;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction142[] = "check new ReduceAction142";
-void CHECKNEW_parser___ReduceAction142(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction266[] = "check new ReduceAction266";
+void CHECKNEW_parser___ReduceAction266(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction142;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction266;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -104317,36 +125402,36 @@ void CHECKNEW_parser___ReduceAction142(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction142_parser___ReduceAction___init[] = "new ReduceAction142 parser::ReduceAction::init";
-val_t NEW_ReduceAction142_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction266_parser___ReduceAction___init[] = "new ReduceAction266 parser::ReduceAction::init";
+val_t NEW_ReduceAction266_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction142_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction266_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction142();
-  INIT_ATTRIBUTES__parser___ReduceAction142(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction266();
+  INIT_ATTRIBUTES__parser___ReduceAction266(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction142(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction266(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction143[55] = {
-  {(bigint) 2295 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction267[55] = {
+  {(bigint) 2127 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction143" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction143 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction143 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2295 /* 5: ReduceAction143 < ReduceAction143: superclass typecheck marker */},
+  {(bigint) "ReduceAction267" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction267 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction267 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2127 /* 5: ReduceAction267 < ReduceAction267: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -104360,7 +125445,7 @@ const classtable_elt_t VFT_parser___ReduceAction143[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction143 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction267 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -104391,46 +125476,46 @@ const classtable_elt_t VFT_parser___ReduceAction143[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction143 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction143___action},
+  {(bigint) 0 /* 50: ReduceAction267 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction267___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction143 < ReduceAction143: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction267 < ReduceAction267: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction143::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction143[] = "init var of ReduceAction143";
-void INIT_ATTRIBUTES__parser___ReduceAction143(val_t p0){
+/* 2: Attribute ReduceAction267::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction267[] = "init var of ReduceAction267";
+void INIT_ATTRIBUTES__parser___ReduceAction267(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction143;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction267;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction143(void)
+val_t NEW_parser___ReduceAction267(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction143;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction267;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction143[] = "check new ReduceAction143";
-void CHECKNEW_parser___ReduceAction143(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction267[] = "check new ReduceAction267";
+void CHECKNEW_parser___ReduceAction267(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction143;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction267;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -104443,36 +125528,36 @@ void CHECKNEW_parser___ReduceAction143(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction143_parser___ReduceAction___init[] = "new ReduceAction143 parser::ReduceAction::init";
-val_t NEW_ReduceAction143_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction267_parser___ReduceAction___init[] = "new ReduceAction267 parser::ReduceAction::init";
+val_t NEW_ReduceAction267_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction143_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction267_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction143();
-  INIT_ATTRIBUTES__parser___ReduceAction143(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction267();
+  INIT_ATTRIBUTES__parser___ReduceAction267(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction143(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction267(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction144[55] = {
-  {(bigint) 2291 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction268[55] = {
+  {(bigint) 2123 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction144" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction144 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction144 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2291 /* 5: ReduceAction144 < ReduceAction144: superclass typecheck marker */},
+  {(bigint) "ReduceAction268" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction268 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction268 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2123 /* 5: ReduceAction268 < ReduceAction268: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -104486,7 +125571,7 @@ const classtable_elt_t VFT_parser___ReduceAction144[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction144 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction268 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -104517,46 +125602,46 @@ const classtable_elt_t VFT_parser___ReduceAction144[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction144 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction144___action},
+  {(bigint) 0 /* 50: ReduceAction268 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction268___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction144 < ReduceAction144: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction268 < ReduceAction268: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction144::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction144[] = "init var of ReduceAction144";
-void INIT_ATTRIBUTES__parser___ReduceAction144(val_t p0){
+/* 2: Attribute ReduceAction268::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction268[] = "init var of ReduceAction268";
+void INIT_ATTRIBUTES__parser___ReduceAction268(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction144;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction268;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction144(void)
+val_t NEW_parser___ReduceAction268(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction144;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction268;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction144[] = "check new ReduceAction144";
-void CHECKNEW_parser___ReduceAction144(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction268[] = "check new ReduceAction268";
+void CHECKNEW_parser___ReduceAction268(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction144;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction268;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -104569,36 +125654,36 @@ void CHECKNEW_parser___ReduceAction144(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction144_parser___ReduceAction___init[] = "new ReduceAction144 parser::ReduceAction::init";
-val_t NEW_ReduceAction144_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction268_parser___ReduceAction___init[] = "new ReduceAction268 parser::ReduceAction::init";
+val_t NEW_ReduceAction268_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction144_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction268_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction144();
-  INIT_ATTRIBUTES__parser___ReduceAction144(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction268();
+  INIT_ATTRIBUTES__parser___ReduceAction268(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction144(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction268(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction145[55] = {
-  {(bigint) 2287 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction269[55] = {
+  {(bigint) 2119 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction145" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction145 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction145 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2287 /* 5: ReduceAction145 < ReduceAction145: superclass typecheck marker */},
+  {(bigint) "ReduceAction269" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction269 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction269 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2119 /* 5: ReduceAction269 < ReduceAction269: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -104612,7 +125697,7 @@ const classtable_elt_t VFT_parser___ReduceAction145[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction145 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction269 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -104643,46 +125728,46 @@ const classtable_elt_t VFT_parser___ReduceAction145[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction145 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction145___action},
+  {(bigint) 0 /* 50: ReduceAction269 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction269___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction145 < ReduceAction145: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction269 < ReduceAction269: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction145::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction145[] = "init var of ReduceAction145";
-void INIT_ATTRIBUTES__parser___ReduceAction145(val_t p0){
+/* 2: Attribute ReduceAction269::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction269[] = "init var of ReduceAction269";
+void INIT_ATTRIBUTES__parser___ReduceAction269(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction145;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction269;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction145(void)
+val_t NEW_parser___ReduceAction269(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction145;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction269;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction145[] = "check new ReduceAction145";
-void CHECKNEW_parser___ReduceAction145(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction269[] = "check new ReduceAction269";
+void CHECKNEW_parser___ReduceAction269(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction145;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction269;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -104695,36 +125780,36 @@ void CHECKNEW_parser___ReduceAction145(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction145_parser___ReduceAction___init[] = "new ReduceAction145 parser::ReduceAction::init";
-val_t NEW_ReduceAction145_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction269_parser___ReduceAction___init[] = "new ReduceAction269 parser::ReduceAction::init";
+val_t NEW_ReduceAction269_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction145_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction269_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction145();
-  INIT_ATTRIBUTES__parser___ReduceAction145(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction269();
+  INIT_ATTRIBUTES__parser___ReduceAction269(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction145(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction269(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction146[55] = {
-  {(bigint) 2283 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction270[55] = {
+  {(bigint) 2111 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction146" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction146 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction146 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2283 /* 5: ReduceAction146 < ReduceAction146: superclass typecheck marker */},
+  {(bigint) "ReduceAction270" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction270 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction270 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2111 /* 5: ReduceAction270 < ReduceAction270: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -104738,7 +125823,7 @@ const classtable_elt_t VFT_parser___ReduceAction146[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction146 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction270 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -104769,46 +125854,46 @@ const classtable_elt_t VFT_parser___ReduceAction146[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction146 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction146___action},
+  {(bigint) 0 /* 50: ReduceAction270 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction270___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction146 < ReduceAction146: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction270 < ReduceAction270: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction146::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction146[] = "init var of ReduceAction146";
-void INIT_ATTRIBUTES__parser___ReduceAction146(val_t p0){
+/* 2: Attribute ReduceAction270::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction270[] = "init var of ReduceAction270";
+void INIT_ATTRIBUTES__parser___ReduceAction270(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction146;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction270;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction146(void)
+val_t NEW_parser___ReduceAction270(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction146;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction270;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction146[] = "check new ReduceAction146";
-void CHECKNEW_parser___ReduceAction146(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction270[] = "check new ReduceAction270";
+void CHECKNEW_parser___ReduceAction270(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction146;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction270;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -104821,36 +125906,36 @@ void CHECKNEW_parser___ReduceAction146(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction146_parser___ReduceAction___init[] = "new ReduceAction146 parser::ReduceAction::init";
-val_t NEW_ReduceAction146_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction270_parser___ReduceAction___init[] = "new ReduceAction270 parser::ReduceAction::init";
+val_t NEW_ReduceAction270_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction146_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction270_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction146();
-  INIT_ATTRIBUTES__parser___ReduceAction146(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction270();
+  INIT_ATTRIBUTES__parser___ReduceAction270(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction146(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction270(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction147[55] = {
-  {(bigint) 2279 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction271[55] = {
+  {(bigint) 2107 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction147" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction147 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction147 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2279 /* 5: ReduceAction147 < ReduceAction147: superclass typecheck marker */},
+  {(bigint) "ReduceAction271" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction271 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction271 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2107 /* 5: ReduceAction271 < ReduceAction271: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -104864,7 +125949,7 @@ const classtable_elt_t VFT_parser___ReduceAction147[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction147 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction271 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -104895,46 +125980,46 @@ const classtable_elt_t VFT_parser___ReduceAction147[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction147 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction147___action},
+  {(bigint) 0 /* 50: ReduceAction271 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction271___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction147 < ReduceAction147: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction271 < ReduceAction271: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction147::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction147[] = "init var of ReduceAction147";
-void INIT_ATTRIBUTES__parser___ReduceAction147(val_t p0){
+/* 2: Attribute ReduceAction271::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction271[] = "init var of ReduceAction271";
+void INIT_ATTRIBUTES__parser___ReduceAction271(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction147;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction271;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction147(void)
+val_t NEW_parser___ReduceAction271(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction147;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction271;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction147[] = "check new ReduceAction147";
-void CHECKNEW_parser___ReduceAction147(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction271[] = "check new ReduceAction271";
+void CHECKNEW_parser___ReduceAction271(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction147;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction271;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -104947,36 +126032,36 @@ void CHECKNEW_parser___ReduceAction147(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction147_parser___ReduceAction___init[] = "new ReduceAction147 parser::ReduceAction::init";
-val_t NEW_ReduceAction147_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction271_parser___ReduceAction___init[] = "new ReduceAction271 parser::ReduceAction::init";
+val_t NEW_ReduceAction271_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction147_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction271_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction147();
-  INIT_ATTRIBUTES__parser___ReduceAction147(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction271();
+  INIT_ATTRIBUTES__parser___ReduceAction271(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction147(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction271(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction148[55] = {
-  {(bigint) 2275 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction272[55] = {
+  {(bigint) 2103 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction148" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction148 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction148 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2275 /* 5: ReduceAction148 < ReduceAction148: superclass typecheck marker */},
+  {(bigint) "ReduceAction272" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction272 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction272 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2103 /* 5: ReduceAction272 < ReduceAction272: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -104990,7 +126075,7 @@ const classtable_elt_t VFT_parser___ReduceAction148[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction148 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction272 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -105021,46 +126106,46 @@ const classtable_elt_t VFT_parser___ReduceAction148[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction148 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction148___action},
+  {(bigint) 0 /* 50: ReduceAction272 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction272___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction148 < ReduceAction148: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction272 < ReduceAction272: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction148::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction148[] = "init var of ReduceAction148";
-void INIT_ATTRIBUTES__parser___ReduceAction148(val_t p0){
+/* 2: Attribute ReduceAction272::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction272[] = "init var of ReduceAction272";
+void INIT_ATTRIBUTES__parser___ReduceAction272(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction148;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction272;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction148(void)
+val_t NEW_parser___ReduceAction272(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction148;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction272;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction148[] = "check new ReduceAction148";
-void CHECKNEW_parser___ReduceAction148(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction272[] = "check new ReduceAction272";
+void CHECKNEW_parser___ReduceAction272(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction148;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction272;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -105073,36 +126158,36 @@ void CHECKNEW_parser___ReduceAction148(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction148_parser___ReduceAction___init[] = "new ReduceAction148 parser::ReduceAction::init";
-val_t NEW_ReduceAction148_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction272_parser___ReduceAction___init[] = "new ReduceAction272 parser::ReduceAction::init";
+val_t NEW_ReduceAction272_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction148_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction272_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction148();
-  INIT_ATTRIBUTES__parser___ReduceAction148(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction272();
+  INIT_ATTRIBUTES__parser___ReduceAction272(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction148(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction272(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction149[55] = {
-  {(bigint) 2271 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction273[55] = {
+  {(bigint) 2099 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction149" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction149 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction149 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2271 /* 5: ReduceAction149 < ReduceAction149: superclass typecheck marker */},
+  {(bigint) "ReduceAction273" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction273 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction273 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2099 /* 5: ReduceAction273 < ReduceAction273: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -105116,7 +126201,7 @@ const classtable_elt_t VFT_parser___ReduceAction149[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction149 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction273 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -105147,46 +126232,46 @@ const classtable_elt_t VFT_parser___ReduceAction149[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction149 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction149___action},
+  {(bigint) 0 /* 50: ReduceAction273 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction273___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction149 < ReduceAction149: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction273 < ReduceAction273: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction149::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction149[] = "init var of ReduceAction149";
-void INIT_ATTRIBUTES__parser___ReduceAction149(val_t p0){
+/* 2: Attribute ReduceAction273::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction273[] = "init var of ReduceAction273";
+void INIT_ATTRIBUTES__parser___ReduceAction273(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction149;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction273;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction149(void)
+val_t NEW_parser___ReduceAction273(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction149;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction273;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction149[] = "check new ReduceAction149";
-void CHECKNEW_parser___ReduceAction149(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction273[] = "check new ReduceAction273";
+void CHECKNEW_parser___ReduceAction273(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction149;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction273;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -105199,36 +126284,36 @@ void CHECKNEW_parser___ReduceAction149(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction149_parser___ReduceAction___init[] = "new ReduceAction149 parser::ReduceAction::init";
-val_t NEW_ReduceAction149_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction273_parser___ReduceAction___init[] = "new ReduceAction273 parser::ReduceAction::init";
+val_t NEW_ReduceAction273_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction149_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction273_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction149();
-  INIT_ATTRIBUTES__parser___ReduceAction149(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction273();
+  INIT_ATTRIBUTES__parser___ReduceAction273(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction149(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction273(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction150[55] = {
-  {(bigint) 2263 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction274[55] = {
+  {(bigint) 2095 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction150" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction150 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction150 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2263 /* 5: ReduceAction150 < ReduceAction150: superclass typecheck marker */},
+  {(bigint) "ReduceAction274" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction274 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction274 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2095 /* 5: ReduceAction274 < ReduceAction274: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -105242,7 +126327,7 @@ const classtable_elt_t VFT_parser___ReduceAction150[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction150 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction274 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -105273,46 +126358,46 @@ const classtable_elt_t VFT_parser___ReduceAction150[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction150 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction150___action},
+  {(bigint) 0 /* 50: ReduceAction274 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction274___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction150 < ReduceAction150: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction274 < ReduceAction274: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction150::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction150[] = "init var of ReduceAction150";
-void INIT_ATTRIBUTES__parser___ReduceAction150(val_t p0){
+/* 2: Attribute ReduceAction274::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction274[] = "init var of ReduceAction274";
+void INIT_ATTRIBUTES__parser___ReduceAction274(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction150;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction274;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction150(void)
+val_t NEW_parser___ReduceAction274(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction150;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction274;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction150[] = "check new ReduceAction150";
-void CHECKNEW_parser___ReduceAction150(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction274[] = "check new ReduceAction274";
+void CHECKNEW_parser___ReduceAction274(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction150;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction274;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -105325,36 +126410,36 @@ void CHECKNEW_parser___ReduceAction150(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction150_parser___ReduceAction___init[] = "new ReduceAction150 parser::ReduceAction::init";
-val_t NEW_ReduceAction150_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction274_parser___ReduceAction___init[] = "new ReduceAction274 parser::ReduceAction::init";
+val_t NEW_ReduceAction274_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction150_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction274_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction150();
-  INIT_ATTRIBUTES__parser___ReduceAction150(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction274();
+  INIT_ATTRIBUTES__parser___ReduceAction274(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction150(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction274(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction151[55] = {
-  {(bigint) 2259 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction275[55] = {
+  {(bigint) 2091 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction151" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction151 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction151 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2259 /* 5: ReduceAction151 < ReduceAction151: superclass typecheck marker */},
+  {(bigint) "ReduceAction275" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction275 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction275 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2091 /* 5: ReduceAction275 < ReduceAction275: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -105368,7 +126453,7 @@ const classtable_elt_t VFT_parser___ReduceAction151[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction151 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction275 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -105399,46 +126484,46 @@ const classtable_elt_t VFT_parser___ReduceAction151[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction151 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction151___action},
+  {(bigint) 0 /* 50: ReduceAction275 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction275___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction151 < ReduceAction151: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction275 < ReduceAction275: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction151::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction151[] = "init var of ReduceAction151";
-void INIT_ATTRIBUTES__parser___ReduceAction151(val_t p0){
+/* 2: Attribute ReduceAction275::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction275[] = "init var of ReduceAction275";
+void INIT_ATTRIBUTES__parser___ReduceAction275(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction151;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction275;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction151(void)
+val_t NEW_parser___ReduceAction275(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction151;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction275;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction151[] = "check new ReduceAction151";
-void CHECKNEW_parser___ReduceAction151(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction275[] = "check new ReduceAction275";
+void CHECKNEW_parser___ReduceAction275(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction151;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction275;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -105451,36 +126536,36 @@ void CHECKNEW_parser___ReduceAction151(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction151_parser___ReduceAction___init[] = "new ReduceAction151 parser::ReduceAction::init";
-val_t NEW_ReduceAction151_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction275_parser___ReduceAction___init[] = "new ReduceAction275 parser::ReduceAction::init";
+val_t NEW_ReduceAction275_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction151_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction275_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction151();
-  INIT_ATTRIBUTES__parser___ReduceAction151(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction275();
+  INIT_ATTRIBUTES__parser___ReduceAction275(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction151(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction275(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction152[55] = {
-  {(bigint) 2255 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction276[55] = {
+  {(bigint) 2087 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction152" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction152 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction152 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2255 /* 5: ReduceAction152 < ReduceAction152: superclass typecheck marker */},
+  {(bigint) "ReduceAction276" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction276 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction276 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2087 /* 5: ReduceAction276 < ReduceAction276: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -105494,7 +126579,7 @@ const classtable_elt_t VFT_parser___ReduceAction152[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction152 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction276 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -105525,46 +126610,46 @@ const classtable_elt_t VFT_parser___ReduceAction152[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction152 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction152___action},
+  {(bigint) 0 /* 50: ReduceAction276 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction276___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction152 < ReduceAction152: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction276 < ReduceAction276: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction152::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction152[] = "init var of ReduceAction152";
-void INIT_ATTRIBUTES__parser___ReduceAction152(val_t p0){
+/* 2: Attribute ReduceAction276::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction276[] = "init var of ReduceAction276";
+void INIT_ATTRIBUTES__parser___ReduceAction276(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction152;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction276;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction152(void)
+val_t NEW_parser___ReduceAction276(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction152;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction276;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction152[] = "check new ReduceAction152";
-void CHECKNEW_parser___ReduceAction152(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction276[] = "check new ReduceAction276";
+void CHECKNEW_parser___ReduceAction276(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction152;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction276;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -105577,36 +126662,36 @@ void CHECKNEW_parser___ReduceAction152(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction152_parser___ReduceAction___init[] = "new ReduceAction152 parser::ReduceAction::init";
-val_t NEW_ReduceAction152_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction276_parser___ReduceAction___init[] = "new ReduceAction276 parser::ReduceAction::init";
+val_t NEW_ReduceAction276_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction152_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction276_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction152();
-  INIT_ATTRIBUTES__parser___ReduceAction152(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction276();
+  INIT_ATTRIBUTES__parser___ReduceAction276(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction152(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction276(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction153[55] = {
-  {(bigint) 2251 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction277[55] = {
+  {(bigint) 2083 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction153" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction153 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction153 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2251 /* 5: ReduceAction153 < ReduceAction153: superclass typecheck marker */},
+  {(bigint) "ReduceAction277" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction277 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction277 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2083 /* 5: ReduceAction277 < ReduceAction277: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -105620,7 +126705,7 @@ const classtable_elt_t VFT_parser___ReduceAction153[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction153 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction277 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -105651,46 +126736,46 @@ const classtable_elt_t VFT_parser___ReduceAction153[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction153 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction153___action},
+  {(bigint) 0 /* 50: ReduceAction277 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction277___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction153 < ReduceAction153: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction277 < ReduceAction277: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction153::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction153[] = "init var of ReduceAction153";
-void INIT_ATTRIBUTES__parser___ReduceAction153(val_t p0){
+/* 2: Attribute ReduceAction277::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction277[] = "init var of ReduceAction277";
+void INIT_ATTRIBUTES__parser___ReduceAction277(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction153;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction277;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction153(void)
+val_t NEW_parser___ReduceAction277(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction153;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction277;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction153[] = "check new ReduceAction153";
-void CHECKNEW_parser___ReduceAction153(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction277[] = "check new ReduceAction277";
+void CHECKNEW_parser___ReduceAction277(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction153;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction277;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -105703,36 +126788,36 @@ void CHECKNEW_parser___ReduceAction153(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction153_parser___ReduceAction___init[] = "new ReduceAction153 parser::ReduceAction::init";
-val_t NEW_ReduceAction153_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction277_parser___ReduceAction___init[] = "new ReduceAction277 parser::ReduceAction::init";
+val_t NEW_ReduceAction277_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction153_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction277_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction153();
-  INIT_ATTRIBUTES__parser___ReduceAction153(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction277();
+  INIT_ATTRIBUTES__parser___ReduceAction277(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction153(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction277(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction154[55] = {
-  {(bigint) 2247 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction278[55] = {
+  {(bigint) 2079 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction154" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction154 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction154 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2247 /* 5: ReduceAction154 < ReduceAction154: superclass typecheck marker */},
+  {(bigint) "ReduceAction278" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction278 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction278 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2079 /* 5: ReduceAction278 < ReduceAction278: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -105746,7 +126831,7 @@ const classtable_elt_t VFT_parser___ReduceAction154[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction154 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction278 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -105777,46 +126862,46 @@ const classtable_elt_t VFT_parser___ReduceAction154[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction154 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction154___action},
+  {(bigint) 0 /* 50: ReduceAction278 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction278___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction154 < ReduceAction154: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction278 < ReduceAction278: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction154::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction154[] = "init var of ReduceAction154";
-void INIT_ATTRIBUTES__parser___ReduceAction154(val_t p0){
+/* 2: Attribute ReduceAction278::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction278[] = "init var of ReduceAction278";
+void INIT_ATTRIBUTES__parser___ReduceAction278(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction154;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction278;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction154(void)
+val_t NEW_parser___ReduceAction278(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction154;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction278;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction154[] = "check new ReduceAction154";
-void CHECKNEW_parser___ReduceAction154(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction278[] = "check new ReduceAction278";
+void CHECKNEW_parser___ReduceAction278(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction154;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction278;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -105829,36 +126914,36 @@ void CHECKNEW_parser___ReduceAction154(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction154_parser___ReduceAction___init[] = "new ReduceAction154 parser::ReduceAction::init";
-val_t NEW_ReduceAction154_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction278_parser___ReduceAction___init[] = "new ReduceAction278 parser::ReduceAction::init";
+val_t NEW_ReduceAction278_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction154_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction278_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction154();
-  INIT_ATTRIBUTES__parser___ReduceAction154(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction278();
+  INIT_ATTRIBUTES__parser___ReduceAction278(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction154(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction278(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction155[55] = {
-  {(bigint) 2243 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction279[55] = {
+  {(bigint) 2075 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction155" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction155 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction155 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2243 /* 5: ReduceAction155 < ReduceAction155: superclass typecheck marker */},
+  {(bigint) "ReduceAction279" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction279 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction279 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2075 /* 5: ReduceAction279 < ReduceAction279: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -105872,7 +126957,7 @@ const classtable_elt_t VFT_parser___ReduceAction155[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction155 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction279 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -105903,46 +126988,46 @@ const classtable_elt_t VFT_parser___ReduceAction155[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction155 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction155___action},
+  {(bigint) 0 /* 50: ReduceAction279 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction279___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction155 < ReduceAction155: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction279 < ReduceAction279: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction155::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction155[] = "init var of ReduceAction155";
-void INIT_ATTRIBUTES__parser___ReduceAction155(val_t p0){
+/* 2: Attribute ReduceAction279::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction279[] = "init var of ReduceAction279";
+void INIT_ATTRIBUTES__parser___ReduceAction279(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction155;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction279;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction155(void)
+val_t NEW_parser___ReduceAction279(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction155;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction279;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction155[] = "check new ReduceAction155";
-void CHECKNEW_parser___ReduceAction155(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction279[] = "check new ReduceAction279";
+void CHECKNEW_parser___ReduceAction279(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction155;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction279;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -105955,36 +127040,36 @@ void CHECKNEW_parser___ReduceAction155(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction155_parser___ReduceAction___init[] = "new ReduceAction155 parser::ReduceAction::init";
-val_t NEW_ReduceAction155_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction279_parser___ReduceAction___init[] = "new ReduceAction279 parser::ReduceAction::init";
+val_t NEW_ReduceAction279_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction155_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction279_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction155();
-  INIT_ATTRIBUTES__parser___ReduceAction155(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction279();
+  INIT_ATTRIBUTES__parser___ReduceAction279(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction155(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction279(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction156[55] = {
-  {(bigint) 2239 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction280[55] = {
+  {(bigint) 2067 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction156" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction156 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction156 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2239 /* 5: ReduceAction156 < ReduceAction156: superclass typecheck marker */},
+  {(bigint) "ReduceAction280" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction280 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction280 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2067 /* 5: ReduceAction280 < ReduceAction280: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -105998,7 +127083,7 @@ const classtable_elt_t VFT_parser___ReduceAction156[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction156 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction280 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -106029,46 +127114,46 @@ const classtable_elt_t VFT_parser___ReduceAction156[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction156 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction156___action},
+  {(bigint) 0 /* 50: ReduceAction280 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction280___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction156 < ReduceAction156: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction280 < ReduceAction280: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction156::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction156[] = "init var of ReduceAction156";
-void INIT_ATTRIBUTES__parser___ReduceAction156(val_t p0){
+/* 2: Attribute ReduceAction280::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction280[] = "init var of ReduceAction280";
+void INIT_ATTRIBUTES__parser___ReduceAction280(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction156;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction280;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction156(void)
+val_t NEW_parser___ReduceAction280(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction156;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction280;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction156[] = "check new ReduceAction156";
-void CHECKNEW_parser___ReduceAction156(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction280[] = "check new ReduceAction280";
+void CHECKNEW_parser___ReduceAction280(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction156;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction280;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -106081,36 +127166,36 @@ void CHECKNEW_parser___ReduceAction156(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction156_parser___ReduceAction___init[] = "new ReduceAction156 parser::ReduceAction::init";
-val_t NEW_ReduceAction156_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction280_parser___ReduceAction___init[] = "new ReduceAction280 parser::ReduceAction::init";
+val_t NEW_ReduceAction280_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction156_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction280_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction156();
-  INIT_ATTRIBUTES__parser___ReduceAction156(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction280();
+  INIT_ATTRIBUTES__parser___ReduceAction280(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction156(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction280(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction157[55] = {
-  {(bigint) 2235 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction281[55] = {
+  {(bigint) 2063 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction157" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction157 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction157 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2235 /* 5: ReduceAction157 < ReduceAction157: superclass typecheck marker */},
+  {(bigint) "ReduceAction281" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction281 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction281 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2063 /* 5: ReduceAction281 < ReduceAction281: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -106124,7 +127209,7 @@ const classtable_elt_t VFT_parser___ReduceAction157[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction157 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction281 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -106155,46 +127240,46 @@ const classtable_elt_t VFT_parser___ReduceAction157[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction157 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction157___action},
+  {(bigint) 0 /* 50: ReduceAction281 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction281___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction157 < ReduceAction157: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction281 < ReduceAction281: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction157::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction157[] = "init var of ReduceAction157";
-void INIT_ATTRIBUTES__parser___ReduceAction157(val_t p0){
+/* 2: Attribute ReduceAction281::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction281[] = "init var of ReduceAction281";
+void INIT_ATTRIBUTES__parser___ReduceAction281(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction157;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction281;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction157(void)
+val_t NEW_parser___ReduceAction281(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction157;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction281;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction157[] = "check new ReduceAction157";
-void CHECKNEW_parser___ReduceAction157(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction281[] = "check new ReduceAction281";
+void CHECKNEW_parser___ReduceAction281(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction157;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction281;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -106207,36 +127292,36 @@ void CHECKNEW_parser___ReduceAction157(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction157_parser___ReduceAction___init[] = "new ReduceAction157 parser::ReduceAction::init";
-val_t NEW_ReduceAction157_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction281_parser___ReduceAction___init[] = "new ReduceAction281 parser::ReduceAction::init";
+val_t NEW_ReduceAction281_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction157_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction281_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction157();
-  INIT_ATTRIBUTES__parser___ReduceAction157(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction281();
+  INIT_ATTRIBUTES__parser___ReduceAction281(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction157(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction281(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction158[55] = {
-  {(bigint) 2231 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction282[55] = {
+  {(bigint) 2059 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction158" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction158 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction158 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2231 /* 5: ReduceAction158 < ReduceAction158: superclass typecheck marker */},
+  {(bigint) "ReduceAction282" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction282 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction282 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2059 /* 5: ReduceAction282 < ReduceAction282: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -106250,7 +127335,7 @@ const classtable_elt_t VFT_parser___ReduceAction158[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction158 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction282 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -106281,46 +127366,46 @@ const classtable_elt_t VFT_parser___ReduceAction158[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction158 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction158___action},
+  {(bigint) 0 /* 50: ReduceAction282 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction282___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction158 < ReduceAction158: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction282 < ReduceAction282: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction158::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction158[] = "init var of ReduceAction158";
-void INIT_ATTRIBUTES__parser___ReduceAction158(val_t p0){
+/* 2: Attribute ReduceAction282::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction282[] = "init var of ReduceAction282";
+void INIT_ATTRIBUTES__parser___ReduceAction282(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction158;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction282;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction158(void)
+val_t NEW_parser___ReduceAction282(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction158;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction282;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction158[] = "check new ReduceAction158";
-void CHECKNEW_parser___ReduceAction158(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction282[] = "check new ReduceAction282";
+void CHECKNEW_parser___ReduceAction282(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction158;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction282;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -106333,36 +127418,36 @@ void CHECKNEW_parser___ReduceAction158(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction158_parser___ReduceAction___init[] = "new ReduceAction158 parser::ReduceAction::init";
-val_t NEW_ReduceAction158_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction282_parser___ReduceAction___init[] = "new ReduceAction282 parser::ReduceAction::init";
+val_t NEW_ReduceAction282_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction158_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction282_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction158();
-  INIT_ATTRIBUTES__parser___ReduceAction158(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction282();
+  INIT_ATTRIBUTES__parser___ReduceAction282(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction158(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction282(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction159[55] = {
-  {(bigint) 2227 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction283[55] = {
+  {(bigint) 2055 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction159" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction159 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction159 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2227 /* 5: ReduceAction159 < ReduceAction159: superclass typecheck marker */},
+  {(bigint) "ReduceAction283" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction283 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction283 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2055 /* 5: ReduceAction283 < ReduceAction283: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -106376,7 +127461,7 @@ const classtable_elt_t VFT_parser___ReduceAction159[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction159 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction283 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -106407,46 +127492,46 @@ const classtable_elt_t VFT_parser___ReduceAction159[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction159 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction159___action},
+  {(bigint) 0 /* 50: ReduceAction283 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction283___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction159 < ReduceAction159: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction283 < ReduceAction283: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction159::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction159[] = "init var of ReduceAction159";
-void INIT_ATTRIBUTES__parser___ReduceAction159(val_t p0){
+/* 2: Attribute ReduceAction283::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction283[] = "init var of ReduceAction283";
+void INIT_ATTRIBUTES__parser___ReduceAction283(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction159;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction283;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction159(void)
+val_t NEW_parser___ReduceAction283(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction159;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction283;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction159[] = "check new ReduceAction159";
-void CHECKNEW_parser___ReduceAction159(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction283[] = "check new ReduceAction283";
+void CHECKNEW_parser___ReduceAction283(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction159;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction283;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -106459,36 +127544,36 @@ void CHECKNEW_parser___ReduceAction159(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction159_parser___ReduceAction___init[] = "new ReduceAction159 parser::ReduceAction::init";
-val_t NEW_ReduceAction159_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction283_parser___ReduceAction___init[] = "new ReduceAction283 parser::ReduceAction::init";
+val_t NEW_ReduceAction283_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction159_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction283_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction159();
-  INIT_ATTRIBUTES__parser___ReduceAction159(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction283();
+  INIT_ATTRIBUTES__parser___ReduceAction283(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction159(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction283(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction160[55] = {
-  {(bigint) 2219 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction284[55] = {
+  {(bigint) 2051 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction160" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction160 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction160 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2219 /* 5: ReduceAction160 < ReduceAction160: superclass typecheck marker */},
+  {(bigint) "ReduceAction284" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction284 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction284 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2051 /* 5: ReduceAction284 < ReduceAction284: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -106502,7 +127587,7 @@ const classtable_elt_t VFT_parser___ReduceAction160[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction160 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction284 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -106533,46 +127618,46 @@ const classtable_elt_t VFT_parser___ReduceAction160[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction160 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction160___action},
+  {(bigint) 0 /* 50: ReduceAction284 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction284___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction160 < ReduceAction160: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction284 < ReduceAction284: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction160::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction160[] = "init var of ReduceAction160";
-void INIT_ATTRIBUTES__parser___ReduceAction160(val_t p0){
+/* 2: Attribute ReduceAction284::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction284[] = "init var of ReduceAction284";
+void INIT_ATTRIBUTES__parser___ReduceAction284(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction160;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction284;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction160(void)
+val_t NEW_parser___ReduceAction284(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction160;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction284;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction160[] = "check new ReduceAction160";
-void CHECKNEW_parser___ReduceAction160(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction284[] = "check new ReduceAction284";
+void CHECKNEW_parser___ReduceAction284(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction160;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction284;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -106585,36 +127670,36 @@ void CHECKNEW_parser___ReduceAction160(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction160_parser___ReduceAction___init[] = "new ReduceAction160 parser::ReduceAction::init";
-val_t NEW_ReduceAction160_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction284_parser___ReduceAction___init[] = "new ReduceAction284 parser::ReduceAction::init";
+val_t NEW_ReduceAction284_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction160_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction284_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction160();
-  INIT_ATTRIBUTES__parser___ReduceAction160(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction284();
+  INIT_ATTRIBUTES__parser___ReduceAction284(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction160(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction284(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction161[55] = {
-  {(bigint) 2215 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction285[55] = {
+  {(bigint) 2047 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction161" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction161 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction161 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2215 /* 5: ReduceAction161 < ReduceAction161: superclass typecheck marker */},
+  {(bigint) "ReduceAction285" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction285 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction285 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2047 /* 5: ReduceAction285 < ReduceAction285: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -106628,7 +127713,7 @@ const classtable_elt_t VFT_parser___ReduceAction161[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction161 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction285 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -106659,46 +127744,46 @@ const classtable_elt_t VFT_parser___ReduceAction161[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction161 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction161___action},
+  {(bigint) 0 /* 50: ReduceAction285 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction285___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction161 < ReduceAction161: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction285 < ReduceAction285: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction161::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction161[] = "init var of ReduceAction161";
-void INIT_ATTRIBUTES__parser___ReduceAction161(val_t p0){
+/* 2: Attribute ReduceAction285::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction285[] = "init var of ReduceAction285";
+void INIT_ATTRIBUTES__parser___ReduceAction285(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction161;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction285;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction161(void)
+val_t NEW_parser___ReduceAction285(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction161;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction285;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction161[] = "check new ReduceAction161";
-void CHECKNEW_parser___ReduceAction161(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction285[] = "check new ReduceAction285";
+void CHECKNEW_parser___ReduceAction285(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction161;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction285;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -106711,36 +127796,36 @@ void CHECKNEW_parser___ReduceAction161(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction161_parser___ReduceAction___init[] = "new ReduceAction161 parser::ReduceAction::init";
-val_t NEW_ReduceAction161_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction285_parser___ReduceAction___init[] = "new ReduceAction285 parser::ReduceAction::init";
+val_t NEW_ReduceAction285_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction161_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction285_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction161();
-  INIT_ATTRIBUTES__parser___ReduceAction161(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction285();
+  INIT_ATTRIBUTES__parser___ReduceAction285(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction161(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction285(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction162[55] = {
-  {(bigint) 2211 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction286[55] = {
+  {(bigint) 2043 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction162" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction162 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction162 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2211 /* 5: ReduceAction162 < ReduceAction162: superclass typecheck marker */},
+  {(bigint) "ReduceAction286" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction286 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction286 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2043 /* 5: ReduceAction286 < ReduceAction286: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -106754,7 +127839,7 @@ const classtable_elt_t VFT_parser___ReduceAction162[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction162 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction286 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -106785,46 +127870,46 @@ const classtable_elt_t VFT_parser___ReduceAction162[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction162 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction162___action},
+  {(bigint) 0 /* 50: ReduceAction286 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction286___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction162 < ReduceAction162: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction286 < ReduceAction286: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction162::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction162[] = "init var of ReduceAction162";
-void INIT_ATTRIBUTES__parser___ReduceAction162(val_t p0){
+/* 2: Attribute ReduceAction286::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction286[] = "init var of ReduceAction286";
+void INIT_ATTRIBUTES__parser___ReduceAction286(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction162;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction286;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction162(void)
+val_t NEW_parser___ReduceAction286(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction162;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction286;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction162[] = "check new ReduceAction162";
-void CHECKNEW_parser___ReduceAction162(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction286[] = "check new ReduceAction286";
+void CHECKNEW_parser___ReduceAction286(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction162;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction286;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -106837,36 +127922,36 @@ void CHECKNEW_parser___ReduceAction162(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction162_parser___ReduceAction___init[] = "new ReduceAction162 parser::ReduceAction::init";
-val_t NEW_ReduceAction162_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction286_parser___ReduceAction___init[] = "new ReduceAction286 parser::ReduceAction::init";
+val_t NEW_ReduceAction286_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction162_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction286_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction162();
-  INIT_ATTRIBUTES__parser___ReduceAction162(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction286();
+  INIT_ATTRIBUTES__parser___ReduceAction286(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction162(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction286(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction163[55] = {
-  {(bigint) 2207 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction287[55] = {
+  {(bigint) 2039 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction163" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction163 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction163 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2207 /* 5: ReduceAction163 < ReduceAction163: superclass typecheck marker */},
+  {(bigint) "ReduceAction287" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction287 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction287 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2039 /* 5: ReduceAction287 < ReduceAction287: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -106880,7 +127965,7 @@ const classtable_elt_t VFT_parser___ReduceAction163[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction163 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction287 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -106911,46 +127996,46 @@ const classtable_elt_t VFT_parser___ReduceAction163[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction163 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction163___action},
+  {(bigint) 0 /* 50: ReduceAction287 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction287___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction163 < ReduceAction163: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction287 < ReduceAction287: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction163::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction163[] = "init var of ReduceAction163";
-void INIT_ATTRIBUTES__parser___ReduceAction163(val_t p0){
+/* 2: Attribute ReduceAction287::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction287[] = "init var of ReduceAction287";
+void INIT_ATTRIBUTES__parser___ReduceAction287(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction163;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction287;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction163(void)
+val_t NEW_parser___ReduceAction287(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction163;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction287;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction163[] = "check new ReduceAction163";
-void CHECKNEW_parser___ReduceAction163(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction287[] = "check new ReduceAction287";
+void CHECKNEW_parser___ReduceAction287(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction163;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction287;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -106963,36 +128048,36 @@ void CHECKNEW_parser___ReduceAction163(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction163_parser___ReduceAction___init[] = "new ReduceAction163 parser::ReduceAction::init";
-val_t NEW_ReduceAction163_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction287_parser___ReduceAction___init[] = "new ReduceAction287 parser::ReduceAction::init";
+val_t NEW_ReduceAction287_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction163_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction287_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction163();
-  INIT_ATTRIBUTES__parser___ReduceAction163(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction287();
+  INIT_ATTRIBUTES__parser___ReduceAction287(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction163(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction287(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction164[55] = {
-  {(bigint) 2203 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction288[55] = {
+  {(bigint) 2035 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction164" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction164 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction164 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2203 /* 5: ReduceAction164 < ReduceAction164: superclass typecheck marker */},
+  {(bigint) "ReduceAction288" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction288 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction288 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2035 /* 5: ReduceAction288 < ReduceAction288: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -107006,7 +128091,7 @@ const classtable_elt_t VFT_parser___ReduceAction164[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction164 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction288 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -107037,46 +128122,46 @@ const classtable_elt_t VFT_parser___ReduceAction164[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction164 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction164___action},
+  {(bigint) 0 /* 50: ReduceAction288 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction288___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction164 < ReduceAction164: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction288 < ReduceAction288: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction164::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction164[] = "init var of ReduceAction164";
-void INIT_ATTRIBUTES__parser___ReduceAction164(val_t p0){
+/* 2: Attribute ReduceAction288::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction288[] = "init var of ReduceAction288";
+void INIT_ATTRIBUTES__parser___ReduceAction288(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction164;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction288;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction164(void)
+val_t NEW_parser___ReduceAction288(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction164;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction288;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction164[] = "check new ReduceAction164";
-void CHECKNEW_parser___ReduceAction164(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction288[] = "check new ReduceAction288";
+void CHECKNEW_parser___ReduceAction288(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction164;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction288;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -107089,36 +128174,36 @@ void CHECKNEW_parser___ReduceAction164(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction164_parser___ReduceAction___init[] = "new ReduceAction164 parser::ReduceAction::init";
-val_t NEW_ReduceAction164_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction288_parser___ReduceAction___init[] = "new ReduceAction288 parser::ReduceAction::init";
+val_t NEW_ReduceAction288_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction164_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction288_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction164();
-  INIT_ATTRIBUTES__parser___ReduceAction164(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction288();
+  INIT_ATTRIBUTES__parser___ReduceAction288(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction164(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction288(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction165[55] = {
-  {(bigint) 2199 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction289[55] = {
+  {(bigint) 2031 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction165" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction165 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction165 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2199 /* 5: ReduceAction165 < ReduceAction165: superclass typecheck marker */},
+  {(bigint) "ReduceAction289" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction289 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction289 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2031 /* 5: ReduceAction289 < ReduceAction289: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -107132,7 +128217,7 @@ const classtable_elt_t VFT_parser___ReduceAction165[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction165 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction289 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -107163,46 +128248,46 @@ const classtable_elt_t VFT_parser___ReduceAction165[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction165 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction165___action},
+  {(bigint) 0 /* 50: ReduceAction289 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction289___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction165 < ReduceAction165: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction289 < ReduceAction289: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction165::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction165[] = "init var of ReduceAction165";
-void INIT_ATTRIBUTES__parser___ReduceAction165(val_t p0){
+/* 2: Attribute ReduceAction289::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction289[] = "init var of ReduceAction289";
+void INIT_ATTRIBUTES__parser___ReduceAction289(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction165;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction289;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction165(void)
+val_t NEW_parser___ReduceAction289(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction165;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction289;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction165[] = "check new ReduceAction165";
-void CHECKNEW_parser___ReduceAction165(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction289[] = "check new ReduceAction289";
+void CHECKNEW_parser___ReduceAction289(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction165;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction289;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -107215,36 +128300,36 @@ void CHECKNEW_parser___ReduceAction165(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction165_parser___ReduceAction___init[] = "new ReduceAction165 parser::ReduceAction::init";
-val_t NEW_ReduceAction165_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction289_parser___ReduceAction___init[] = "new ReduceAction289 parser::ReduceAction::init";
+val_t NEW_ReduceAction289_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction165_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction289_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction165();
-  INIT_ATTRIBUTES__parser___ReduceAction165(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction289();
+  INIT_ATTRIBUTES__parser___ReduceAction289(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction165(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction289(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction166[55] = {
-  {(bigint) 2195 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction290[55] = {
+  {(bigint) 2023 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction166" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction166 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction166 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2195 /* 5: ReduceAction166 < ReduceAction166: superclass typecheck marker */},
+  {(bigint) "ReduceAction290" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction290 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction290 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2023 /* 5: ReduceAction290 < ReduceAction290: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -107258,7 +128343,7 @@ const classtable_elt_t VFT_parser___ReduceAction166[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction166 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction290 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -107289,46 +128374,46 @@ const classtable_elt_t VFT_parser___ReduceAction166[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction166 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction166___action},
+  {(bigint) 0 /* 50: ReduceAction290 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction290___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction166 < ReduceAction166: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction290 < ReduceAction290: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction166::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction166[] = "init var of ReduceAction166";
-void INIT_ATTRIBUTES__parser___ReduceAction166(val_t p0){
+/* 2: Attribute ReduceAction290::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction290[] = "init var of ReduceAction290";
+void INIT_ATTRIBUTES__parser___ReduceAction290(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction166;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction290;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction166(void)
+val_t NEW_parser___ReduceAction290(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction166;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction290;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction166[] = "check new ReduceAction166";
-void CHECKNEW_parser___ReduceAction166(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction290[] = "check new ReduceAction290";
+void CHECKNEW_parser___ReduceAction290(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction166;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction290;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -107341,36 +128426,36 @@ void CHECKNEW_parser___ReduceAction166(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction166_parser___ReduceAction___init[] = "new ReduceAction166 parser::ReduceAction::init";
-val_t NEW_ReduceAction166_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction290_parser___ReduceAction___init[] = "new ReduceAction290 parser::ReduceAction::init";
+val_t NEW_ReduceAction290_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction166_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction290_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction166();
-  INIT_ATTRIBUTES__parser___ReduceAction166(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction290();
+  INIT_ATTRIBUTES__parser___ReduceAction290(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction166(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction290(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction167[55] = {
-  {(bigint) 2191 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction291[55] = {
+  {(bigint) 2019 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction167" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction167 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction167 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2191 /* 5: ReduceAction167 < ReduceAction167: superclass typecheck marker */},
+  {(bigint) "ReduceAction291" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction291 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction291 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2019 /* 5: ReduceAction291 < ReduceAction291: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -107384,7 +128469,7 @@ const classtable_elt_t VFT_parser___ReduceAction167[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction167 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction291 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -107415,46 +128500,46 @@ const classtable_elt_t VFT_parser___ReduceAction167[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction167 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction167___action},
+  {(bigint) 0 /* 50: ReduceAction291 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction291___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction167 < ReduceAction167: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction291 < ReduceAction291: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction167::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction167[] = "init var of ReduceAction167";
-void INIT_ATTRIBUTES__parser___ReduceAction167(val_t p0){
+/* 2: Attribute ReduceAction291::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction291[] = "init var of ReduceAction291";
+void INIT_ATTRIBUTES__parser___ReduceAction291(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction167;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction291;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction167(void)
+val_t NEW_parser___ReduceAction291(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction167;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction291;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction167[] = "check new ReduceAction167";
-void CHECKNEW_parser___ReduceAction167(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction291[] = "check new ReduceAction291";
+void CHECKNEW_parser___ReduceAction291(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction167;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction291;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -107467,36 +128552,36 @@ void CHECKNEW_parser___ReduceAction167(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction167_parser___ReduceAction___init[] = "new ReduceAction167 parser::ReduceAction::init";
-val_t NEW_ReduceAction167_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction291_parser___ReduceAction___init[] = "new ReduceAction291 parser::ReduceAction::init";
+val_t NEW_ReduceAction291_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction167_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction291_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction167();
-  INIT_ATTRIBUTES__parser___ReduceAction167(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction291();
+  INIT_ATTRIBUTES__parser___ReduceAction291(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction167(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction291(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction168[55] = {
-  {(bigint) 2187 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction292[55] = {
+  {(bigint) 2015 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction168" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction168 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction168 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2187 /* 5: ReduceAction168 < ReduceAction168: superclass typecheck marker */},
+  {(bigint) "ReduceAction292" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction292 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction292 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2015 /* 5: ReduceAction292 < ReduceAction292: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -107510,7 +128595,7 @@ const classtable_elt_t VFT_parser___ReduceAction168[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction168 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction292 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -107541,46 +128626,46 @@ const classtable_elt_t VFT_parser___ReduceAction168[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction168 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction168___action},
+  {(bigint) 0 /* 50: ReduceAction292 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction292___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction168 < ReduceAction168: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction292 < ReduceAction292: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction168::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction168[] = "init var of ReduceAction168";
-void INIT_ATTRIBUTES__parser___ReduceAction168(val_t p0){
+/* 2: Attribute ReduceAction292::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction292[] = "init var of ReduceAction292";
+void INIT_ATTRIBUTES__parser___ReduceAction292(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction168;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction292;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction168(void)
+val_t NEW_parser___ReduceAction292(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction168;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction292;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction168[] = "check new ReduceAction168";
-void CHECKNEW_parser___ReduceAction168(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction292[] = "check new ReduceAction292";
+void CHECKNEW_parser___ReduceAction292(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction168;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction292;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -107593,36 +128678,36 @@ void CHECKNEW_parser___ReduceAction168(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction168_parser___ReduceAction___init[] = "new ReduceAction168 parser::ReduceAction::init";
-val_t NEW_ReduceAction168_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction292_parser___ReduceAction___init[] = "new ReduceAction292 parser::ReduceAction::init";
+val_t NEW_ReduceAction292_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction168_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction292_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction168();
-  INIT_ATTRIBUTES__parser___ReduceAction168(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction292();
+  INIT_ATTRIBUTES__parser___ReduceAction292(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction168(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction292(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction169[55] = {
-  {(bigint) 2183 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction293[55] = {
+  {(bigint) 2011 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction169" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction169 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction169 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2183 /* 5: ReduceAction169 < ReduceAction169: superclass typecheck marker */},
+  {(bigint) "ReduceAction293" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction293 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction293 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2011 /* 5: ReduceAction293 < ReduceAction293: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -107636,7 +128721,7 @@ const classtable_elt_t VFT_parser___ReduceAction169[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction169 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction293 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -107667,46 +128752,46 @@ const classtable_elt_t VFT_parser___ReduceAction169[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction169 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction169___action},
+  {(bigint) 0 /* 50: ReduceAction293 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction293___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction169 < ReduceAction169: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction293 < ReduceAction293: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction169::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction169[] = "init var of ReduceAction169";
-void INIT_ATTRIBUTES__parser___ReduceAction169(val_t p0){
+/* 2: Attribute ReduceAction293::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction293[] = "init var of ReduceAction293";
+void INIT_ATTRIBUTES__parser___ReduceAction293(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction169;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction293;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction169(void)
+val_t NEW_parser___ReduceAction293(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction169;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction293;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction169[] = "check new ReduceAction169";
-void CHECKNEW_parser___ReduceAction169(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction293[] = "check new ReduceAction293";
+void CHECKNEW_parser___ReduceAction293(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction169;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction293;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -107719,36 +128804,36 @@ void CHECKNEW_parser___ReduceAction169(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction169_parser___ReduceAction___init[] = "new ReduceAction169 parser::ReduceAction::init";
-val_t NEW_ReduceAction169_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction293_parser___ReduceAction___init[] = "new ReduceAction293 parser::ReduceAction::init";
+val_t NEW_ReduceAction293_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction169_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction293_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction169();
-  INIT_ATTRIBUTES__parser___ReduceAction169(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction293();
+  INIT_ATTRIBUTES__parser___ReduceAction293(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction169(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction293(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction170[55] = {
-  {(bigint) 2175 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction294[55] = {
+  {(bigint) 2007 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction170" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction170 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction170 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2175 /* 5: ReduceAction170 < ReduceAction170: superclass typecheck marker */},
+  {(bigint) "ReduceAction294" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction294 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction294 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2007 /* 5: ReduceAction294 < ReduceAction294: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -107762,7 +128847,7 @@ const classtable_elt_t VFT_parser___ReduceAction170[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction170 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction294 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -107793,46 +128878,46 @@ const classtable_elt_t VFT_parser___ReduceAction170[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction170 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction170___action},
+  {(bigint) 0 /* 50: ReduceAction294 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction294___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction170 < ReduceAction170: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction294 < ReduceAction294: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction170::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction170[] = "init var of ReduceAction170";
-void INIT_ATTRIBUTES__parser___ReduceAction170(val_t p0){
+/* 2: Attribute ReduceAction294::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction294[] = "init var of ReduceAction294";
+void INIT_ATTRIBUTES__parser___ReduceAction294(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction170;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction294;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction170(void)
+val_t NEW_parser___ReduceAction294(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction170;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction294;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction170[] = "check new ReduceAction170";
-void CHECKNEW_parser___ReduceAction170(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction294[] = "check new ReduceAction294";
+void CHECKNEW_parser___ReduceAction294(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction170;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction294;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -107845,36 +128930,36 @@ void CHECKNEW_parser___ReduceAction170(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction170_parser___ReduceAction___init[] = "new ReduceAction170 parser::ReduceAction::init";
-val_t NEW_ReduceAction170_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction294_parser___ReduceAction___init[] = "new ReduceAction294 parser::ReduceAction::init";
+val_t NEW_ReduceAction294_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction170_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction294_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction170();
-  INIT_ATTRIBUTES__parser___ReduceAction170(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction294();
+  INIT_ATTRIBUTES__parser___ReduceAction294(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction170(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction294(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction171[55] = {
-  {(bigint) 2171 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction295[55] = {
+  {(bigint) 2003 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction171" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction171 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction171 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2171 /* 5: ReduceAction171 < ReduceAction171: superclass typecheck marker */},
+  {(bigint) "ReduceAction295" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction295 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction295 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2003 /* 5: ReduceAction295 < ReduceAction295: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -107888,7 +128973,7 @@ const classtable_elt_t VFT_parser___ReduceAction171[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction171 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction295 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -107919,46 +129004,46 @@ const classtable_elt_t VFT_parser___ReduceAction171[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction171 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction171___action},
+  {(bigint) 0 /* 50: ReduceAction295 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction295___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction171 < ReduceAction171: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction295 < ReduceAction295: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction171::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction171[] = "init var of ReduceAction171";
-void INIT_ATTRIBUTES__parser___ReduceAction171(val_t p0){
+/* 2: Attribute ReduceAction295::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction295[] = "init var of ReduceAction295";
+void INIT_ATTRIBUTES__parser___ReduceAction295(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction171;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction295;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction171(void)
+val_t NEW_parser___ReduceAction295(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction171;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction295;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction171[] = "check new ReduceAction171";
-void CHECKNEW_parser___ReduceAction171(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction295[] = "check new ReduceAction295";
+void CHECKNEW_parser___ReduceAction295(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction171;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction295;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -107971,36 +129056,36 @@ void CHECKNEW_parser___ReduceAction171(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction171_parser___ReduceAction___init[] = "new ReduceAction171 parser::ReduceAction::init";
-val_t NEW_ReduceAction171_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction295_parser___ReduceAction___init[] = "new ReduceAction295 parser::ReduceAction::init";
+val_t NEW_ReduceAction295_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction171_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction295_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction171();
-  INIT_ATTRIBUTES__parser___ReduceAction171(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction295();
+  INIT_ATTRIBUTES__parser___ReduceAction295(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction171(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction295(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction172[55] = {
-  {(bigint) 2167 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction296[55] = {
+  {(bigint) 1999 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction172" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction172 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction172 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2167 /* 5: ReduceAction172 < ReduceAction172: superclass typecheck marker */},
+  {(bigint) "ReduceAction296" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction296 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction296 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1999 /* 5: ReduceAction296 < ReduceAction296: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -108014,7 +129099,7 @@ const classtable_elt_t VFT_parser___ReduceAction172[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction172 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction296 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -108045,46 +129130,46 @@ const classtable_elt_t VFT_parser___ReduceAction172[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction172 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction172___action},
+  {(bigint) 0 /* 50: ReduceAction296 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction296___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction172 < ReduceAction172: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction296 < ReduceAction296: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction172::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction172[] = "init var of ReduceAction172";
-void INIT_ATTRIBUTES__parser___ReduceAction172(val_t p0){
+/* 2: Attribute ReduceAction296::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction296[] = "init var of ReduceAction296";
+void INIT_ATTRIBUTES__parser___ReduceAction296(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction172;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction296;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction172(void)
+val_t NEW_parser___ReduceAction296(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction172;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction296;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction172[] = "check new ReduceAction172";
-void CHECKNEW_parser___ReduceAction172(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction296[] = "check new ReduceAction296";
+void CHECKNEW_parser___ReduceAction296(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction172;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction296;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -108097,36 +129182,36 @@ void CHECKNEW_parser___ReduceAction172(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction172_parser___ReduceAction___init[] = "new ReduceAction172 parser::ReduceAction::init";
-val_t NEW_ReduceAction172_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction296_parser___ReduceAction___init[] = "new ReduceAction296 parser::ReduceAction::init";
+val_t NEW_ReduceAction296_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction172_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction296_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction172();
-  INIT_ATTRIBUTES__parser___ReduceAction172(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction296();
+  INIT_ATTRIBUTES__parser___ReduceAction296(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction172(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction296(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction173[55] = {
-  {(bigint) 2163 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction297[55] = {
+  {(bigint) 1995 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction173" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction173 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction173 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2163 /* 5: ReduceAction173 < ReduceAction173: superclass typecheck marker */},
+  {(bigint) "ReduceAction297" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction297 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction297 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1995 /* 5: ReduceAction297 < ReduceAction297: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -108140,7 +129225,7 @@ const classtable_elt_t VFT_parser___ReduceAction173[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction173 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction297 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -108171,46 +129256,46 @@ const classtable_elt_t VFT_parser___ReduceAction173[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction173 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction173___action},
+  {(bigint) 0 /* 50: ReduceAction297 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction297___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction173 < ReduceAction173: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction297 < ReduceAction297: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction173::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction173[] = "init var of ReduceAction173";
-void INIT_ATTRIBUTES__parser___ReduceAction173(val_t p0){
+/* 2: Attribute ReduceAction297::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction297[] = "init var of ReduceAction297";
+void INIT_ATTRIBUTES__parser___ReduceAction297(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction173;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction297;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction173(void)
+val_t NEW_parser___ReduceAction297(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction173;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction297;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction173[] = "check new ReduceAction173";
-void CHECKNEW_parser___ReduceAction173(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction297[] = "check new ReduceAction297";
+void CHECKNEW_parser___ReduceAction297(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction173;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction297;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -108223,36 +129308,36 @@ void CHECKNEW_parser___ReduceAction173(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction173_parser___ReduceAction___init[] = "new ReduceAction173 parser::ReduceAction::init";
-val_t NEW_ReduceAction173_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction297_parser___ReduceAction___init[] = "new ReduceAction297 parser::ReduceAction::init";
+val_t NEW_ReduceAction297_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction173_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction297_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction173();
-  INIT_ATTRIBUTES__parser___ReduceAction173(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction297();
+  INIT_ATTRIBUTES__parser___ReduceAction297(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction173(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction297(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction174[55] = {
-  {(bigint) 2159 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction298[55] = {
+  {(bigint) 1991 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction174" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction174 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction174 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2159 /* 5: ReduceAction174 < ReduceAction174: superclass typecheck marker */},
+  {(bigint) "ReduceAction298" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction298 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction298 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1991 /* 5: ReduceAction298 < ReduceAction298: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -108266,7 +129351,7 @@ const classtable_elt_t VFT_parser___ReduceAction174[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction174 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction298 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -108297,46 +129382,46 @@ const classtable_elt_t VFT_parser___ReduceAction174[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction174 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction174___action},
+  {(bigint) 0 /* 50: ReduceAction298 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction298___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction174 < ReduceAction174: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction298 < ReduceAction298: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction174::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction174[] = "init var of ReduceAction174";
-void INIT_ATTRIBUTES__parser___ReduceAction174(val_t p0){
+/* 2: Attribute ReduceAction298::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction298[] = "init var of ReduceAction298";
+void INIT_ATTRIBUTES__parser___ReduceAction298(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction174;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction298;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction174(void)
+val_t NEW_parser___ReduceAction298(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction174;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction298;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction174[] = "check new ReduceAction174";
-void CHECKNEW_parser___ReduceAction174(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction298[] = "check new ReduceAction298";
+void CHECKNEW_parser___ReduceAction298(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction174;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction298;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -108349,36 +129434,36 @@ void CHECKNEW_parser___ReduceAction174(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction174_parser___ReduceAction___init[] = "new ReduceAction174 parser::ReduceAction::init";
-val_t NEW_ReduceAction174_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction298_parser___ReduceAction___init[] = "new ReduceAction298 parser::ReduceAction::init";
+val_t NEW_ReduceAction298_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction174_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction298_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction174();
-  INIT_ATTRIBUTES__parser___ReduceAction174(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction298();
+  INIT_ATTRIBUTES__parser___ReduceAction298(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction174(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction298(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction175[55] = {
-  {(bigint) 2155 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction299[55] = {
+  {(bigint) 1987 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction175" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction175 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction175 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2155 /* 5: ReduceAction175 < ReduceAction175: superclass typecheck marker */},
+  {(bigint) "ReduceAction299" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction299 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction299 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1987 /* 5: ReduceAction299 < ReduceAction299: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -108392,7 +129477,7 @@ const classtable_elt_t VFT_parser___ReduceAction175[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction175 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction299 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -108423,46 +129508,46 @@ const classtable_elt_t VFT_parser___ReduceAction175[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction175 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction175___action},
+  {(bigint) 0 /* 50: ReduceAction299 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction299___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction175 < ReduceAction175: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction299 < ReduceAction299: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction175::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction175[] = "init var of ReduceAction175";
-void INIT_ATTRIBUTES__parser___ReduceAction175(val_t p0){
+/* 2: Attribute ReduceAction299::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction299[] = "init var of ReduceAction299";
+void INIT_ATTRIBUTES__parser___ReduceAction299(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction175;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction299;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction175(void)
+val_t NEW_parser___ReduceAction299(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction175;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction299;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction175[] = "check new ReduceAction175";
-void CHECKNEW_parser___ReduceAction175(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction299[] = "check new ReduceAction299";
+void CHECKNEW_parser___ReduceAction299(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction175;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction299;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -108475,36 +129560,36 @@ void CHECKNEW_parser___ReduceAction175(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction175_parser___ReduceAction___init[] = "new ReduceAction175 parser::ReduceAction::init";
-val_t NEW_ReduceAction175_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction299_parser___ReduceAction___init[] = "new ReduceAction299 parser::ReduceAction::init";
+val_t NEW_ReduceAction299_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction175_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction299_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction175();
-  INIT_ATTRIBUTES__parser___ReduceAction175(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction299();
+  INIT_ATTRIBUTES__parser___ReduceAction299(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction175(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction299(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction176[55] = {
-  {(bigint) 2151 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction300[55] = {
+  {(bigint) 1975 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction176" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction176 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction176 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2151 /* 5: ReduceAction176 < ReduceAction176: superclass typecheck marker */},
+  {(bigint) "ReduceAction300" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction300 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction300 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1975 /* 5: ReduceAction300 < ReduceAction300: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -108518,7 +129603,7 @@ const classtable_elt_t VFT_parser___ReduceAction176[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction176 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction300 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -108549,46 +129634,46 @@ const classtable_elt_t VFT_parser___ReduceAction176[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction176 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction176___action},
+  {(bigint) 0 /* 50: ReduceAction300 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction300___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction176 < ReduceAction176: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction300 < ReduceAction300: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction176::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction176[] = "init var of ReduceAction176";
-void INIT_ATTRIBUTES__parser___ReduceAction176(val_t p0){
+/* 2: Attribute ReduceAction300::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction300[] = "init var of ReduceAction300";
+void INIT_ATTRIBUTES__parser___ReduceAction300(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction176;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction300;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction176(void)
+val_t NEW_parser___ReduceAction300(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction176;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction300;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction176[] = "check new ReduceAction176";
-void CHECKNEW_parser___ReduceAction176(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction300[] = "check new ReduceAction300";
+void CHECKNEW_parser___ReduceAction300(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction176;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction300;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -108601,36 +129686,36 @@ void CHECKNEW_parser___ReduceAction176(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction176_parser___ReduceAction___init[] = "new ReduceAction176 parser::ReduceAction::init";
-val_t NEW_ReduceAction176_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction300_parser___ReduceAction___init[] = "new ReduceAction300 parser::ReduceAction::init";
+val_t NEW_ReduceAction300_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction176_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction300_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction176();
-  INIT_ATTRIBUTES__parser___ReduceAction176(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction300();
+  INIT_ATTRIBUTES__parser___ReduceAction300(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction176(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction300(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction177[55] = {
-  {(bigint) 2147 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction301[55] = {
+  {(bigint) 1971 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction177" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction177 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction177 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2147 /* 5: ReduceAction177 < ReduceAction177: superclass typecheck marker */},
+  {(bigint) "ReduceAction301" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction301 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction301 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1971 /* 5: ReduceAction301 < ReduceAction301: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -108644,7 +129729,7 @@ const classtable_elt_t VFT_parser___ReduceAction177[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction177 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction301 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -108675,46 +129760,46 @@ const classtable_elt_t VFT_parser___ReduceAction177[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction177 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction177___action},
+  {(bigint) 0 /* 50: ReduceAction301 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction301___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction177 < ReduceAction177: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction301 < ReduceAction301: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction177::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction177[] = "init var of ReduceAction177";
-void INIT_ATTRIBUTES__parser___ReduceAction177(val_t p0){
+/* 2: Attribute ReduceAction301::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction301[] = "init var of ReduceAction301";
+void INIT_ATTRIBUTES__parser___ReduceAction301(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction177;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction301;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction177(void)
+val_t NEW_parser___ReduceAction301(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction177;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction301;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction177[] = "check new ReduceAction177";
-void CHECKNEW_parser___ReduceAction177(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction301[] = "check new ReduceAction301";
+void CHECKNEW_parser___ReduceAction301(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction177;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction301;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -108727,36 +129812,36 @@ void CHECKNEW_parser___ReduceAction177(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction177_parser___ReduceAction___init[] = "new ReduceAction177 parser::ReduceAction::init";
-val_t NEW_ReduceAction177_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction301_parser___ReduceAction___init[] = "new ReduceAction301 parser::ReduceAction::init";
+val_t NEW_ReduceAction301_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction177_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction301_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction177();
-  INIT_ATTRIBUTES__parser___ReduceAction177(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction301();
+  INIT_ATTRIBUTES__parser___ReduceAction301(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction177(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction301(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction178[55] = {
-  {(bigint) 2143 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction302[55] = {
+  {(bigint) 1967 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction178" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction178 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction178 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2143 /* 5: ReduceAction178 < ReduceAction178: superclass typecheck marker */},
+  {(bigint) "ReduceAction302" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction302 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction302 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1967 /* 5: ReduceAction302 < ReduceAction302: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -108770,7 +129855,7 @@ const classtable_elt_t VFT_parser___ReduceAction178[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction178 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction302 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -108801,46 +129886,46 @@ const classtable_elt_t VFT_parser___ReduceAction178[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction178 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction178___action},
+  {(bigint) 0 /* 50: ReduceAction302 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction302___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction178 < ReduceAction178: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction302 < ReduceAction302: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction178::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction178[] = "init var of ReduceAction178";
-void INIT_ATTRIBUTES__parser___ReduceAction178(val_t p0){
+/* 2: Attribute ReduceAction302::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction302[] = "init var of ReduceAction302";
+void INIT_ATTRIBUTES__parser___ReduceAction302(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction178;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction302;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction178(void)
+val_t NEW_parser___ReduceAction302(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction178;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction302;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction178[] = "check new ReduceAction178";
-void CHECKNEW_parser___ReduceAction178(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction302[] = "check new ReduceAction302";
+void CHECKNEW_parser___ReduceAction302(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction178;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction302;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -108853,36 +129938,36 @@ void CHECKNEW_parser___ReduceAction178(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction178_parser___ReduceAction___init[] = "new ReduceAction178 parser::ReduceAction::init";
-val_t NEW_ReduceAction178_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction302_parser___ReduceAction___init[] = "new ReduceAction302 parser::ReduceAction::init";
+val_t NEW_ReduceAction302_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction178_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction302_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction178();
-  INIT_ATTRIBUTES__parser___ReduceAction178(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction302();
+  INIT_ATTRIBUTES__parser___ReduceAction302(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction178(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction302(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction179[55] = {
-  {(bigint) 2139 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction303[55] = {
+  {(bigint) 1963 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction179" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction179 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction179 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2139 /* 5: ReduceAction179 < ReduceAction179: superclass typecheck marker */},
+  {(bigint) "ReduceAction303" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction303 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction303 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1963 /* 5: ReduceAction303 < ReduceAction303: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -108896,7 +129981,7 @@ const classtable_elt_t VFT_parser___ReduceAction179[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction179 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction303 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -108927,46 +130012,46 @@ const classtable_elt_t VFT_parser___ReduceAction179[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction179 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction179___action},
+  {(bigint) 0 /* 50: ReduceAction303 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction303___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction179 < ReduceAction179: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction303 < ReduceAction303: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction179::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction179[] = "init var of ReduceAction179";
-void INIT_ATTRIBUTES__parser___ReduceAction179(val_t p0){
+/* 2: Attribute ReduceAction303::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction303[] = "init var of ReduceAction303";
+void INIT_ATTRIBUTES__parser___ReduceAction303(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction179;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction303;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction179(void)
+val_t NEW_parser___ReduceAction303(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction179;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction303;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction179[] = "check new ReduceAction179";
-void CHECKNEW_parser___ReduceAction179(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction303[] = "check new ReduceAction303";
+void CHECKNEW_parser___ReduceAction303(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction179;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction303;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -108979,36 +130064,36 @@ void CHECKNEW_parser___ReduceAction179(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction179_parser___ReduceAction___init[] = "new ReduceAction179 parser::ReduceAction::init";
-val_t NEW_ReduceAction179_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction303_parser___ReduceAction___init[] = "new ReduceAction303 parser::ReduceAction::init";
+val_t NEW_ReduceAction303_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction179_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction303_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction179();
-  INIT_ATTRIBUTES__parser___ReduceAction179(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction303();
+  INIT_ATTRIBUTES__parser___ReduceAction303(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction179(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction303(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction180[55] = {
-  {(bigint) 2131 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction304[55] = {
+  {(bigint) 1959 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction180" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction180 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction180 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2131 /* 5: ReduceAction180 < ReduceAction180: superclass typecheck marker */},
+  {(bigint) "ReduceAction304" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction304 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction304 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1959 /* 5: ReduceAction304 < ReduceAction304: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -109022,7 +130107,7 @@ const classtable_elt_t VFT_parser___ReduceAction180[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction180 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction304 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -109053,46 +130138,46 @@ const classtable_elt_t VFT_parser___ReduceAction180[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction180 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction180___action},
+  {(bigint) 0 /* 50: ReduceAction304 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction304___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction180 < ReduceAction180: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction304 < ReduceAction304: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction180::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction180[] = "init var of ReduceAction180";
-void INIT_ATTRIBUTES__parser___ReduceAction180(val_t p0){
+/* 2: Attribute ReduceAction304::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction304[] = "init var of ReduceAction304";
+void INIT_ATTRIBUTES__parser___ReduceAction304(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction180;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction304;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction180(void)
+val_t NEW_parser___ReduceAction304(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction180;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction304;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction180[] = "check new ReduceAction180";
-void CHECKNEW_parser___ReduceAction180(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction304[] = "check new ReduceAction304";
+void CHECKNEW_parser___ReduceAction304(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction180;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction304;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -109105,36 +130190,36 @@ void CHECKNEW_parser___ReduceAction180(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction180_parser___ReduceAction___init[] = "new ReduceAction180 parser::ReduceAction::init";
-val_t NEW_ReduceAction180_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction304_parser___ReduceAction___init[] = "new ReduceAction304 parser::ReduceAction::init";
+val_t NEW_ReduceAction304_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction180_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction304_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction180();
-  INIT_ATTRIBUTES__parser___ReduceAction180(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction304();
+  INIT_ATTRIBUTES__parser___ReduceAction304(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction180(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction304(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction181[55] = {
-  {(bigint) 2127 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction305[55] = {
+  {(bigint) 1955 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction181" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction181 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction181 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2127 /* 5: ReduceAction181 < ReduceAction181: superclass typecheck marker */},
+  {(bigint) "ReduceAction305" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction305 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction305 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1955 /* 5: ReduceAction305 < ReduceAction305: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -109148,7 +130233,7 @@ const classtable_elt_t VFT_parser___ReduceAction181[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction181 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction305 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -109179,46 +130264,46 @@ const classtable_elt_t VFT_parser___ReduceAction181[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction181 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction181___action},
+  {(bigint) 0 /* 50: ReduceAction305 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction305___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction181 < ReduceAction181: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction305 < ReduceAction305: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction181::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction181[] = "init var of ReduceAction181";
-void INIT_ATTRIBUTES__parser___ReduceAction181(val_t p0){
+/* 2: Attribute ReduceAction305::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction305[] = "init var of ReduceAction305";
+void INIT_ATTRIBUTES__parser___ReduceAction305(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction181;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction305;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction181(void)
+val_t NEW_parser___ReduceAction305(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction181;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction305;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction181[] = "check new ReduceAction181";
-void CHECKNEW_parser___ReduceAction181(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction305[] = "check new ReduceAction305";
+void CHECKNEW_parser___ReduceAction305(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction181;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction305;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -109231,36 +130316,36 @@ void CHECKNEW_parser___ReduceAction181(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction181_parser___ReduceAction___init[] = "new ReduceAction181 parser::ReduceAction::init";
-val_t NEW_ReduceAction181_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction305_parser___ReduceAction___init[] = "new ReduceAction305 parser::ReduceAction::init";
+val_t NEW_ReduceAction305_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction181_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction305_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction181();
-  INIT_ATTRIBUTES__parser___ReduceAction181(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction305();
+  INIT_ATTRIBUTES__parser___ReduceAction305(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction181(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction305(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction182[55] = {
-  {(bigint) 2123 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction306[55] = {
+  {(bigint) 1951 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction182" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction182 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction182 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2123 /* 5: ReduceAction182 < ReduceAction182: superclass typecheck marker */},
+  {(bigint) "ReduceAction306" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction306 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction306 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1951 /* 5: ReduceAction306 < ReduceAction306: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -109274,7 +130359,7 @@ const classtable_elt_t VFT_parser___ReduceAction182[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction182 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction306 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -109305,46 +130390,46 @@ const classtable_elt_t VFT_parser___ReduceAction182[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction182 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction182___action},
+  {(bigint) 0 /* 50: ReduceAction306 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction306___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction182 < ReduceAction182: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction306 < ReduceAction306: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction182::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction182[] = "init var of ReduceAction182";
-void INIT_ATTRIBUTES__parser___ReduceAction182(val_t p0){
+/* 2: Attribute ReduceAction306::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction306[] = "init var of ReduceAction306";
+void INIT_ATTRIBUTES__parser___ReduceAction306(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction182;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction306;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction182(void)
+val_t NEW_parser___ReduceAction306(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction182;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction306;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction182[] = "check new ReduceAction182";
-void CHECKNEW_parser___ReduceAction182(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction306[] = "check new ReduceAction306";
+void CHECKNEW_parser___ReduceAction306(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction182;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction306;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -109357,36 +130442,36 @@ void CHECKNEW_parser___ReduceAction182(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction182_parser___ReduceAction___init[] = "new ReduceAction182 parser::ReduceAction::init";
-val_t NEW_ReduceAction182_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction306_parser___ReduceAction___init[] = "new ReduceAction306 parser::ReduceAction::init";
+val_t NEW_ReduceAction306_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction182_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction306_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction182();
-  INIT_ATTRIBUTES__parser___ReduceAction182(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction306();
+  INIT_ATTRIBUTES__parser___ReduceAction306(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction182(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction306(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction183[55] = {
-  {(bigint) 2119 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction307[55] = {
+  {(bigint) 1947 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction183" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction183 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction183 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2119 /* 5: ReduceAction183 < ReduceAction183: superclass typecheck marker */},
+  {(bigint) "ReduceAction307" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction307 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction307 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1947 /* 5: ReduceAction307 < ReduceAction307: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -109400,7 +130485,7 @@ const classtable_elt_t VFT_parser___ReduceAction183[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction183 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction307 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -109431,46 +130516,46 @@ const classtable_elt_t VFT_parser___ReduceAction183[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction183 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction183___action},
+  {(bigint) 0 /* 50: ReduceAction307 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction307___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction183 < ReduceAction183: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction307 < ReduceAction307: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction183::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction183[] = "init var of ReduceAction183";
-void INIT_ATTRIBUTES__parser___ReduceAction183(val_t p0){
+/* 2: Attribute ReduceAction307::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction307[] = "init var of ReduceAction307";
+void INIT_ATTRIBUTES__parser___ReduceAction307(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction183;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction307;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction183(void)
+val_t NEW_parser___ReduceAction307(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction183;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction307;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction183[] = "check new ReduceAction183";
-void CHECKNEW_parser___ReduceAction183(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction307[] = "check new ReduceAction307";
+void CHECKNEW_parser___ReduceAction307(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction183;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction307;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -109483,36 +130568,36 @@ void CHECKNEW_parser___ReduceAction183(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction183_parser___ReduceAction___init[] = "new ReduceAction183 parser::ReduceAction::init";
-val_t NEW_ReduceAction183_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction307_parser___ReduceAction___init[] = "new ReduceAction307 parser::ReduceAction::init";
+val_t NEW_ReduceAction307_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction183_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction307_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction183();
-  INIT_ATTRIBUTES__parser___ReduceAction183(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction307();
+  INIT_ATTRIBUTES__parser___ReduceAction307(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction183(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction307(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction184[55] = {
-  {(bigint) 2115 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction308[55] = {
+  {(bigint) 1943 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction184" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction184 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction184 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2115 /* 5: ReduceAction184 < ReduceAction184: superclass typecheck marker */},
+  {(bigint) "ReduceAction308" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction308 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction308 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1943 /* 5: ReduceAction308 < ReduceAction308: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -109526,7 +130611,7 @@ const classtable_elt_t VFT_parser___ReduceAction184[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction184 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction308 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -109557,46 +130642,46 @@ const classtable_elt_t VFT_parser___ReduceAction184[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction184 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction184___action},
+  {(bigint) 0 /* 50: ReduceAction308 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction308___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction184 < ReduceAction184: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction308 < ReduceAction308: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction184::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction184[] = "init var of ReduceAction184";
-void INIT_ATTRIBUTES__parser___ReduceAction184(val_t p0){
+/* 2: Attribute ReduceAction308::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction308[] = "init var of ReduceAction308";
+void INIT_ATTRIBUTES__parser___ReduceAction308(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction184;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction308;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction184(void)
+val_t NEW_parser___ReduceAction308(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction184;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction308;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction184[] = "check new ReduceAction184";
-void CHECKNEW_parser___ReduceAction184(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction308[] = "check new ReduceAction308";
+void CHECKNEW_parser___ReduceAction308(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction184;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction308;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -109609,36 +130694,36 @@ void CHECKNEW_parser___ReduceAction184(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction184_parser___ReduceAction___init[] = "new ReduceAction184 parser::ReduceAction::init";
-val_t NEW_ReduceAction184_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction308_parser___ReduceAction___init[] = "new ReduceAction308 parser::ReduceAction::init";
+val_t NEW_ReduceAction308_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction184_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction308_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction184();
-  INIT_ATTRIBUTES__parser___ReduceAction184(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction308();
+  INIT_ATTRIBUTES__parser___ReduceAction308(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction184(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction308(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction185[55] = {
-  {(bigint) 2111 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction309[55] = {
+  {(bigint) 1939 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction185" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction185 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction185 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2111 /* 5: ReduceAction185 < ReduceAction185: superclass typecheck marker */},
+  {(bigint) "ReduceAction309" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction309 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction309 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1939 /* 5: ReduceAction309 < ReduceAction309: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -109652,7 +130737,7 @@ const classtable_elt_t VFT_parser___ReduceAction185[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction185 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction309 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -109683,46 +130768,46 @@ const classtable_elt_t VFT_parser___ReduceAction185[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction185 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction185___action},
+  {(bigint) 0 /* 50: ReduceAction309 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction309___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction185 < ReduceAction185: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction309 < ReduceAction309: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction185::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction185[] = "init var of ReduceAction185";
-void INIT_ATTRIBUTES__parser___ReduceAction185(val_t p0){
+/* 2: Attribute ReduceAction309::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction309[] = "init var of ReduceAction309";
+void INIT_ATTRIBUTES__parser___ReduceAction309(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction185;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction309;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction185(void)
+val_t NEW_parser___ReduceAction309(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction185;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction309;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction185[] = "check new ReduceAction185";
-void CHECKNEW_parser___ReduceAction185(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction309[] = "check new ReduceAction309";
+void CHECKNEW_parser___ReduceAction309(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction185;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction309;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -109735,36 +130820,36 @@ void CHECKNEW_parser___ReduceAction185(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction185_parser___ReduceAction___init[] = "new ReduceAction185 parser::ReduceAction::init";
-val_t NEW_ReduceAction185_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction309_parser___ReduceAction___init[] = "new ReduceAction309 parser::ReduceAction::init";
+val_t NEW_ReduceAction309_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction185_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction309_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction185();
-  INIT_ATTRIBUTES__parser___ReduceAction185(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction309();
+  INIT_ATTRIBUTES__parser___ReduceAction309(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction185(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction309(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction186[55] = {
-  {(bigint) 2107 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction310[55] = {
+  {(bigint) 1931 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction186" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction186 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction186 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2107 /* 5: ReduceAction186 < ReduceAction186: superclass typecheck marker */},
+  {(bigint) "ReduceAction310" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction310 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction310 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1931 /* 5: ReduceAction310 < ReduceAction310: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -109778,7 +130863,7 @@ const classtable_elt_t VFT_parser___ReduceAction186[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction186 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction310 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -109809,46 +130894,46 @@ const classtable_elt_t VFT_parser___ReduceAction186[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction186 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction186___action},
+  {(bigint) 0 /* 50: ReduceAction310 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction310___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction186 < ReduceAction186: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction310 < ReduceAction310: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction186::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction186[] = "init var of ReduceAction186";
-void INIT_ATTRIBUTES__parser___ReduceAction186(val_t p0){
+/* 2: Attribute ReduceAction310::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction310[] = "init var of ReduceAction310";
+void INIT_ATTRIBUTES__parser___ReduceAction310(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction186;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction310;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction186(void)
+val_t NEW_parser___ReduceAction310(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction186;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction310;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction186[] = "check new ReduceAction186";
-void CHECKNEW_parser___ReduceAction186(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction310[] = "check new ReduceAction310";
+void CHECKNEW_parser___ReduceAction310(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction186;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction310;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -109861,36 +130946,36 @@ void CHECKNEW_parser___ReduceAction186(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction186_parser___ReduceAction___init[] = "new ReduceAction186 parser::ReduceAction::init";
-val_t NEW_ReduceAction186_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction310_parser___ReduceAction___init[] = "new ReduceAction310 parser::ReduceAction::init";
+val_t NEW_ReduceAction310_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction186_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction310_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction186();
-  INIT_ATTRIBUTES__parser___ReduceAction186(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction310();
+  INIT_ATTRIBUTES__parser___ReduceAction310(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction186(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction310(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction187[55] = {
-  {(bigint) 2103 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction311[55] = {
+  {(bigint) 1927 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction187" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction187 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction187 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2103 /* 5: ReduceAction187 < ReduceAction187: superclass typecheck marker */},
+  {(bigint) "ReduceAction311" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction311 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction311 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1927 /* 5: ReduceAction311 < ReduceAction311: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -109904,7 +130989,7 @@ const classtable_elt_t VFT_parser___ReduceAction187[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction187 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction311 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -109935,46 +131020,46 @@ const classtable_elt_t VFT_parser___ReduceAction187[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction187 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction187___action},
+  {(bigint) 0 /* 50: ReduceAction311 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction311___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction187 < ReduceAction187: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction311 < ReduceAction311: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction187::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction187[] = "init var of ReduceAction187";
-void INIT_ATTRIBUTES__parser___ReduceAction187(val_t p0){
+/* 2: Attribute ReduceAction311::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction311[] = "init var of ReduceAction311";
+void INIT_ATTRIBUTES__parser___ReduceAction311(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction187;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction311;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction187(void)
+val_t NEW_parser___ReduceAction311(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction187;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction311;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction187[] = "check new ReduceAction187";
-void CHECKNEW_parser___ReduceAction187(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction311[] = "check new ReduceAction311";
+void CHECKNEW_parser___ReduceAction311(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction187;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction311;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -109987,36 +131072,36 @@ void CHECKNEW_parser___ReduceAction187(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction187_parser___ReduceAction___init[] = "new ReduceAction187 parser::ReduceAction::init";
-val_t NEW_ReduceAction187_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction311_parser___ReduceAction___init[] = "new ReduceAction311 parser::ReduceAction::init";
+val_t NEW_ReduceAction311_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction187_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction311_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction187();
-  INIT_ATTRIBUTES__parser___ReduceAction187(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction311();
+  INIT_ATTRIBUTES__parser___ReduceAction311(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction187(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction311(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction188[55] = {
-  {(bigint) 2099 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction312[55] = {
+  {(bigint) 1923 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction188" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction188 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction188 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2099 /* 5: ReduceAction188 < ReduceAction188: superclass typecheck marker */},
+  {(bigint) "ReduceAction312" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction312 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction312 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1923 /* 5: ReduceAction312 < ReduceAction312: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -110030,7 +131115,7 @@ const classtable_elt_t VFT_parser___ReduceAction188[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction188 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction312 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -110061,46 +131146,46 @@ const classtable_elt_t VFT_parser___ReduceAction188[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction188 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction188___action},
+  {(bigint) 0 /* 50: ReduceAction312 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction312___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction188 < ReduceAction188: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction312 < ReduceAction312: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction188::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction188[] = "init var of ReduceAction188";
-void INIT_ATTRIBUTES__parser___ReduceAction188(val_t p0){
+/* 2: Attribute ReduceAction312::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction312[] = "init var of ReduceAction312";
+void INIT_ATTRIBUTES__parser___ReduceAction312(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction188;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction312;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction188(void)
+val_t NEW_parser___ReduceAction312(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction188;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction312;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction188[] = "check new ReduceAction188";
-void CHECKNEW_parser___ReduceAction188(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction312[] = "check new ReduceAction312";
+void CHECKNEW_parser___ReduceAction312(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction188;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction312;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -110113,36 +131198,36 @@ void CHECKNEW_parser___ReduceAction188(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction188_parser___ReduceAction___init[] = "new ReduceAction188 parser::ReduceAction::init";
-val_t NEW_ReduceAction188_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction312_parser___ReduceAction___init[] = "new ReduceAction312 parser::ReduceAction::init";
+val_t NEW_ReduceAction312_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction188_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction312_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction188();
-  INIT_ATTRIBUTES__parser___ReduceAction188(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction312();
+  INIT_ATTRIBUTES__parser___ReduceAction312(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction188(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction312(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction189[55] = {
-  {(bigint) 2095 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction313[55] = {
+  {(bigint) 1919 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction189" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction189 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction189 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2095 /* 5: ReduceAction189 < ReduceAction189: superclass typecheck marker */},
+  {(bigint) "ReduceAction313" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction313 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction313 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1919 /* 5: ReduceAction313 < ReduceAction313: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -110156,7 +131241,7 @@ const classtable_elt_t VFT_parser___ReduceAction189[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction189 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction313 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -110187,46 +131272,46 @@ const classtable_elt_t VFT_parser___ReduceAction189[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction189 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction189___action},
+  {(bigint) 0 /* 50: ReduceAction313 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction313___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction189 < ReduceAction189: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction313 < ReduceAction313: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction189::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction189[] = "init var of ReduceAction189";
-void INIT_ATTRIBUTES__parser___ReduceAction189(val_t p0){
+/* 2: Attribute ReduceAction313::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction313[] = "init var of ReduceAction313";
+void INIT_ATTRIBUTES__parser___ReduceAction313(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction189;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction313;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction189(void)
+val_t NEW_parser___ReduceAction313(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction189;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction313;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction189[] = "check new ReduceAction189";
-void CHECKNEW_parser___ReduceAction189(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction313[] = "check new ReduceAction313";
+void CHECKNEW_parser___ReduceAction313(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction189;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction313;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -110239,36 +131324,36 @@ void CHECKNEW_parser___ReduceAction189(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction189_parser___ReduceAction___init[] = "new ReduceAction189 parser::ReduceAction::init";
-val_t NEW_ReduceAction189_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction313_parser___ReduceAction___init[] = "new ReduceAction313 parser::ReduceAction::init";
+val_t NEW_ReduceAction313_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction189_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction313_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction189();
-  INIT_ATTRIBUTES__parser___ReduceAction189(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction313();
+  INIT_ATTRIBUTES__parser___ReduceAction313(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction189(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction313(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction190[55] = {
-  {(bigint) 2087 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction314[55] = {
+  {(bigint) 1915 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction190" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction190 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction190 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2087 /* 5: ReduceAction190 < ReduceAction190: superclass typecheck marker */},
+  {(bigint) "ReduceAction314" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction314 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction314 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1915 /* 5: ReduceAction314 < ReduceAction314: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -110282,7 +131367,7 @@ const classtable_elt_t VFT_parser___ReduceAction190[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction190 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction314 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -110313,46 +131398,46 @@ const classtable_elt_t VFT_parser___ReduceAction190[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction190 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction190___action},
+  {(bigint) 0 /* 50: ReduceAction314 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction314___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction190 < ReduceAction190: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction314 < ReduceAction314: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction190::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction190[] = "init var of ReduceAction190";
-void INIT_ATTRIBUTES__parser___ReduceAction190(val_t p0){
+/* 2: Attribute ReduceAction314::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction314[] = "init var of ReduceAction314";
+void INIT_ATTRIBUTES__parser___ReduceAction314(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction190;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction314;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction190(void)
+val_t NEW_parser___ReduceAction314(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction190;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction314;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction190[] = "check new ReduceAction190";
-void CHECKNEW_parser___ReduceAction190(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction314[] = "check new ReduceAction314";
+void CHECKNEW_parser___ReduceAction314(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction190;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction314;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -110365,36 +131450,36 @@ void CHECKNEW_parser___ReduceAction190(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction190_parser___ReduceAction___init[] = "new ReduceAction190 parser::ReduceAction::init";
-val_t NEW_ReduceAction190_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction314_parser___ReduceAction___init[] = "new ReduceAction314 parser::ReduceAction::init";
+val_t NEW_ReduceAction314_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction190_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction314_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction190();
-  INIT_ATTRIBUTES__parser___ReduceAction190(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction314();
+  INIT_ATTRIBUTES__parser___ReduceAction314(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction190(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction314(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction191[55] = {
-  {(bigint) 2083 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction315[55] = {
+  {(bigint) 1911 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction191" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction191 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction191 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2083 /* 5: ReduceAction191 < ReduceAction191: superclass typecheck marker */},
+  {(bigint) "ReduceAction315" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction315 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction315 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1911 /* 5: ReduceAction315 < ReduceAction315: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -110408,7 +131493,7 @@ const classtable_elt_t VFT_parser___ReduceAction191[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction191 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction315 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -110439,46 +131524,46 @@ const classtable_elt_t VFT_parser___ReduceAction191[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction191 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction191___action},
+  {(bigint) 0 /* 50: ReduceAction315 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction315___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction191 < ReduceAction191: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction315 < ReduceAction315: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction191::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction191[] = "init var of ReduceAction191";
-void INIT_ATTRIBUTES__parser___ReduceAction191(val_t p0){
+/* 2: Attribute ReduceAction315::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction315[] = "init var of ReduceAction315";
+void INIT_ATTRIBUTES__parser___ReduceAction315(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction191;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction315;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction191(void)
+val_t NEW_parser___ReduceAction315(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction191;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction315;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction191[] = "check new ReduceAction191";
-void CHECKNEW_parser___ReduceAction191(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction315[] = "check new ReduceAction315";
+void CHECKNEW_parser___ReduceAction315(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction191;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction315;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -110491,36 +131576,36 @@ void CHECKNEW_parser___ReduceAction191(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction191_parser___ReduceAction___init[] = "new ReduceAction191 parser::ReduceAction::init";
-val_t NEW_ReduceAction191_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction315_parser___ReduceAction___init[] = "new ReduceAction315 parser::ReduceAction::init";
+val_t NEW_ReduceAction315_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction191_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction315_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction191();
-  INIT_ATTRIBUTES__parser___ReduceAction191(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction315();
+  INIT_ATTRIBUTES__parser___ReduceAction315(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction191(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction315(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction192[55] = {
-  {(bigint) 2079 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction316[55] = {
+  {(bigint) 1907 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction192" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction192 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction192 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2079 /* 5: ReduceAction192 < ReduceAction192: superclass typecheck marker */},
+  {(bigint) "ReduceAction316" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction316 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction316 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1907 /* 5: ReduceAction316 < ReduceAction316: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -110534,7 +131619,7 @@ const classtable_elt_t VFT_parser___ReduceAction192[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction192 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction316 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -110565,46 +131650,46 @@ const classtable_elt_t VFT_parser___ReduceAction192[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction192 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction192___action},
+  {(bigint) 0 /* 50: ReduceAction316 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction316___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction192 < ReduceAction192: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction316 < ReduceAction316: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction192::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction192[] = "init var of ReduceAction192";
-void INIT_ATTRIBUTES__parser___ReduceAction192(val_t p0){
+/* 2: Attribute ReduceAction316::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction316[] = "init var of ReduceAction316";
+void INIT_ATTRIBUTES__parser___ReduceAction316(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction192;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction316;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction192(void)
+val_t NEW_parser___ReduceAction316(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction192;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction316;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction192[] = "check new ReduceAction192";
-void CHECKNEW_parser___ReduceAction192(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction316[] = "check new ReduceAction316";
+void CHECKNEW_parser___ReduceAction316(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction192;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction316;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -110617,36 +131702,36 @@ void CHECKNEW_parser___ReduceAction192(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction192_parser___ReduceAction___init[] = "new ReduceAction192 parser::ReduceAction::init";
-val_t NEW_ReduceAction192_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction316_parser___ReduceAction___init[] = "new ReduceAction316 parser::ReduceAction::init";
+val_t NEW_ReduceAction316_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction192_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction316_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction192();
-  INIT_ATTRIBUTES__parser___ReduceAction192(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction316();
+  INIT_ATTRIBUTES__parser___ReduceAction316(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction192(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction316(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction193[55] = {
-  {(bigint) 2075 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction317[55] = {
+  {(bigint) 1903 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction193" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction193 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction193 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2075 /* 5: ReduceAction193 < ReduceAction193: superclass typecheck marker */},
+  {(bigint) "ReduceAction317" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction317 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction317 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1903 /* 5: ReduceAction317 < ReduceAction317: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -110660,7 +131745,7 @@ const classtable_elt_t VFT_parser___ReduceAction193[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction193 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction317 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -110691,46 +131776,46 @@ const classtable_elt_t VFT_parser___ReduceAction193[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction193 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction193___action},
+  {(bigint) 0 /* 50: ReduceAction317 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction317___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction193 < ReduceAction193: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction317 < ReduceAction317: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction193::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction193[] = "init var of ReduceAction193";
-void INIT_ATTRIBUTES__parser___ReduceAction193(val_t p0){
+/* 2: Attribute ReduceAction317::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction317[] = "init var of ReduceAction317";
+void INIT_ATTRIBUTES__parser___ReduceAction317(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction193;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction317;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction193(void)
+val_t NEW_parser___ReduceAction317(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction193;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction317;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction193[] = "check new ReduceAction193";
-void CHECKNEW_parser___ReduceAction193(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction317[] = "check new ReduceAction317";
+void CHECKNEW_parser___ReduceAction317(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction193;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction317;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -110743,36 +131828,36 @@ void CHECKNEW_parser___ReduceAction193(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction193_parser___ReduceAction___init[] = "new ReduceAction193 parser::ReduceAction::init";
-val_t NEW_ReduceAction193_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction317_parser___ReduceAction___init[] = "new ReduceAction317 parser::ReduceAction::init";
+val_t NEW_ReduceAction317_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction193_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction317_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction193();
-  INIT_ATTRIBUTES__parser___ReduceAction193(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction317();
+  INIT_ATTRIBUTES__parser___ReduceAction317(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction193(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction317(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction194[55] = {
-  {(bigint) 2071 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction318[55] = {
+  {(bigint) 1899 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction194" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction194 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction194 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2071 /* 5: ReduceAction194 < ReduceAction194: superclass typecheck marker */},
+  {(bigint) "ReduceAction318" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction318 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction318 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1899 /* 5: ReduceAction318 < ReduceAction318: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -110786,7 +131871,7 @@ const classtable_elt_t VFT_parser___ReduceAction194[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction194 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction318 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -110817,46 +131902,46 @@ const classtable_elt_t VFT_parser___ReduceAction194[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction194 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction194___action},
+  {(bigint) 0 /* 50: ReduceAction318 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction318___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction194 < ReduceAction194: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction318 < ReduceAction318: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction194::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction194[] = "init var of ReduceAction194";
-void INIT_ATTRIBUTES__parser___ReduceAction194(val_t p0){
+/* 2: Attribute ReduceAction318::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction318[] = "init var of ReduceAction318";
+void INIT_ATTRIBUTES__parser___ReduceAction318(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction194;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction318;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction194(void)
+val_t NEW_parser___ReduceAction318(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction194;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction318;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction194[] = "check new ReduceAction194";
-void CHECKNEW_parser___ReduceAction194(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction318[] = "check new ReduceAction318";
+void CHECKNEW_parser___ReduceAction318(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction194;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction318;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -110869,36 +131954,36 @@ void CHECKNEW_parser___ReduceAction194(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction194_parser___ReduceAction___init[] = "new ReduceAction194 parser::ReduceAction::init";
-val_t NEW_ReduceAction194_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction318_parser___ReduceAction___init[] = "new ReduceAction318 parser::ReduceAction::init";
+val_t NEW_ReduceAction318_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction194_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction318_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction194();
-  INIT_ATTRIBUTES__parser___ReduceAction194(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction318();
+  INIT_ATTRIBUTES__parser___ReduceAction318(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction194(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction318(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction195[55] = {
-  {(bigint) 2067 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction319[55] = {
+  {(bigint) 1895 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction195" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction195 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction195 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2067 /* 5: ReduceAction195 < ReduceAction195: superclass typecheck marker */},
+  {(bigint) "ReduceAction319" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction319 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction319 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1895 /* 5: ReduceAction319 < ReduceAction319: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -110912,7 +131997,7 @@ const classtable_elt_t VFT_parser___ReduceAction195[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction195 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction319 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -110943,46 +132028,46 @@ const classtable_elt_t VFT_parser___ReduceAction195[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction195 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction195___action},
+  {(bigint) 0 /* 50: ReduceAction319 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction319___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction195 < ReduceAction195: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction319 < ReduceAction319: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction195::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction195[] = "init var of ReduceAction195";
-void INIT_ATTRIBUTES__parser___ReduceAction195(val_t p0){
+/* 2: Attribute ReduceAction319::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction319[] = "init var of ReduceAction319";
+void INIT_ATTRIBUTES__parser___ReduceAction319(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction195;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction319;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction195(void)
+val_t NEW_parser___ReduceAction319(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction195;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction319;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction195[] = "check new ReduceAction195";
-void CHECKNEW_parser___ReduceAction195(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction319[] = "check new ReduceAction319";
+void CHECKNEW_parser___ReduceAction319(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction195;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction319;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -110995,36 +132080,36 @@ void CHECKNEW_parser___ReduceAction195(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction195_parser___ReduceAction___init[] = "new ReduceAction195 parser::ReduceAction::init";
-val_t NEW_ReduceAction195_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction319_parser___ReduceAction___init[] = "new ReduceAction319 parser::ReduceAction::init";
+val_t NEW_ReduceAction319_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction195_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction319_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction195();
-  INIT_ATTRIBUTES__parser___ReduceAction195(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction319();
+  INIT_ATTRIBUTES__parser___ReduceAction319(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction195(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction319(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction196[55] = {
-  {(bigint) 2063 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction320[55] = {
+  {(bigint) 1887 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction196" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction196 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction196 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2063 /* 5: ReduceAction196 < ReduceAction196: superclass typecheck marker */},
+  {(bigint) "ReduceAction320" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction320 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction320 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1887 /* 5: ReduceAction320 < ReduceAction320: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -111038,7 +132123,7 @@ const classtable_elt_t VFT_parser___ReduceAction196[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction196 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction320 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -111069,46 +132154,46 @@ const classtable_elt_t VFT_parser___ReduceAction196[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction196 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction196___action},
+  {(bigint) 0 /* 50: ReduceAction320 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction320___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction196 < ReduceAction196: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction320 < ReduceAction320: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction196::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction196[] = "init var of ReduceAction196";
-void INIT_ATTRIBUTES__parser___ReduceAction196(val_t p0){
+/* 2: Attribute ReduceAction320::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction320[] = "init var of ReduceAction320";
+void INIT_ATTRIBUTES__parser___ReduceAction320(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction196;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction320;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction196(void)
+val_t NEW_parser___ReduceAction320(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction196;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction320;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction196[] = "check new ReduceAction196";
-void CHECKNEW_parser___ReduceAction196(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction320[] = "check new ReduceAction320";
+void CHECKNEW_parser___ReduceAction320(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction196;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction320;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -111121,36 +132206,36 @@ void CHECKNEW_parser___ReduceAction196(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction196_parser___ReduceAction___init[] = "new ReduceAction196 parser::ReduceAction::init";
-val_t NEW_ReduceAction196_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction320_parser___ReduceAction___init[] = "new ReduceAction320 parser::ReduceAction::init";
+val_t NEW_ReduceAction320_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction196_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction320_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction196();
-  INIT_ATTRIBUTES__parser___ReduceAction196(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction320();
+  INIT_ATTRIBUTES__parser___ReduceAction320(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction196(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction320(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction197[55] = {
-  {(bigint) 2059 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction321[55] = {
+  {(bigint) 1883 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction197" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction197 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction197 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2059 /* 5: ReduceAction197 < ReduceAction197: superclass typecheck marker */},
+  {(bigint) "ReduceAction321" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction321 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction321 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1883 /* 5: ReduceAction321 < ReduceAction321: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -111164,7 +132249,7 @@ const classtable_elt_t VFT_parser___ReduceAction197[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction197 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction321 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -111195,46 +132280,46 @@ const classtable_elt_t VFT_parser___ReduceAction197[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction197 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction197___action},
+  {(bigint) 0 /* 50: ReduceAction321 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction321___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction197 < ReduceAction197: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction321 < ReduceAction321: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction197::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction197[] = "init var of ReduceAction197";
-void INIT_ATTRIBUTES__parser___ReduceAction197(val_t p0){
+/* 2: Attribute ReduceAction321::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction321[] = "init var of ReduceAction321";
+void INIT_ATTRIBUTES__parser___ReduceAction321(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction197;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction321;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction197(void)
+val_t NEW_parser___ReduceAction321(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction197;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction321;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction197[] = "check new ReduceAction197";
-void CHECKNEW_parser___ReduceAction197(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction321[] = "check new ReduceAction321";
+void CHECKNEW_parser___ReduceAction321(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction197;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction321;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -111247,36 +132332,36 @@ void CHECKNEW_parser___ReduceAction197(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction197_parser___ReduceAction___init[] = "new ReduceAction197 parser::ReduceAction::init";
-val_t NEW_ReduceAction197_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction321_parser___ReduceAction___init[] = "new ReduceAction321 parser::ReduceAction::init";
+val_t NEW_ReduceAction321_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction197_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction321_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction197();
-  INIT_ATTRIBUTES__parser___ReduceAction197(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction321();
+  INIT_ATTRIBUTES__parser___ReduceAction321(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction197(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction321(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction198[55] = {
-  {(bigint) 2055 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction322[55] = {
+  {(bigint) 1879 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction198" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction198 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction198 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2055 /* 5: ReduceAction198 < ReduceAction198: superclass typecheck marker */},
+  {(bigint) "ReduceAction322" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction322 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction322 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1879 /* 5: ReduceAction322 < ReduceAction322: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -111290,7 +132375,7 @@ const classtable_elt_t VFT_parser___ReduceAction198[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction198 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction322 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -111321,46 +132406,46 @@ const classtable_elt_t VFT_parser___ReduceAction198[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction198 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction198___action},
+  {(bigint) 0 /* 50: ReduceAction322 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction322___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction198 < ReduceAction198: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction322 < ReduceAction322: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction198::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction198[] = "init var of ReduceAction198";
-void INIT_ATTRIBUTES__parser___ReduceAction198(val_t p0){
+/* 2: Attribute ReduceAction322::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction322[] = "init var of ReduceAction322";
+void INIT_ATTRIBUTES__parser___ReduceAction322(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction198;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction322;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction198(void)
+val_t NEW_parser___ReduceAction322(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction198;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction322;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction198[] = "check new ReduceAction198";
-void CHECKNEW_parser___ReduceAction198(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction322[] = "check new ReduceAction322";
+void CHECKNEW_parser___ReduceAction322(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction198;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction322;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -111373,36 +132458,36 @@ void CHECKNEW_parser___ReduceAction198(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction198_parser___ReduceAction___init[] = "new ReduceAction198 parser::ReduceAction::init";
-val_t NEW_ReduceAction198_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction322_parser___ReduceAction___init[] = "new ReduceAction322 parser::ReduceAction::init";
+val_t NEW_ReduceAction322_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction198_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction322_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction198();
-  INIT_ATTRIBUTES__parser___ReduceAction198(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction322();
+  INIT_ATTRIBUTES__parser___ReduceAction322(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction198(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction322(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction199[55] = {
-  {(bigint) 2051 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction324[55] = {
+  {(bigint) 1875 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction199" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction199 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction199 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2051 /* 5: ReduceAction199 < ReduceAction199: superclass typecheck marker */},
+  {(bigint) "ReduceAction324" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction324 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction324 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1875 /* 5: ReduceAction324 < ReduceAction324: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -111416,7 +132501,7 @@ const classtable_elt_t VFT_parser___ReduceAction199[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction199 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction324 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -111447,46 +132532,46 @@ const classtable_elt_t VFT_parser___ReduceAction199[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction199 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction199___action},
+  {(bigint) 0 /* 50: ReduceAction324 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction324___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction199 < ReduceAction199: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction324 < ReduceAction324: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction199::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction199[] = "init var of ReduceAction199";
-void INIT_ATTRIBUTES__parser___ReduceAction199(val_t p0){
+/* 2: Attribute ReduceAction324::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction324[] = "init var of ReduceAction324";
+void INIT_ATTRIBUTES__parser___ReduceAction324(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction199;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction324;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction199(void)
+val_t NEW_parser___ReduceAction324(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction199;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction324;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction199[] = "check new ReduceAction199";
-void CHECKNEW_parser___ReduceAction199(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction324[] = "check new ReduceAction324";
+void CHECKNEW_parser___ReduceAction324(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction199;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction324;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -111499,36 +132584,36 @@ void CHECKNEW_parser___ReduceAction199(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction199_parser___ReduceAction___init[] = "new ReduceAction199 parser::ReduceAction::init";
-val_t NEW_ReduceAction199_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction324_parser___ReduceAction___init[] = "new ReduceAction324 parser::ReduceAction::init";
+val_t NEW_ReduceAction324_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction199_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction324_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction199();
-  INIT_ATTRIBUTES__parser___ReduceAction199(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction324();
+  INIT_ATTRIBUTES__parser___ReduceAction324(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction199(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction324(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction200[55] = {
-  {(bigint) 2039 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction325[55] = {
+  {(bigint) 1871 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction200" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction200 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction200 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2039 /* 5: ReduceAction200 < ReduceAction200: superclass typecheck marker */},
+  {(bigint) "ReduceAction325" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction325 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction325 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1871 /* 5: ReduceAction325 < ReduceAction325: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -111542,7 +132627,7 @@ const classtable_elt_t VFT_parser___ReduceAction200[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction200 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction325 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -111573,46 +132658,46 @@ const classtable_elt_t VFT_parser___ReduceAction200[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction200 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction200___action},
+  {(bigint) 0 /* 50: ReduceAction325 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction325___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction200 < ReduceAction200: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction325 < ReduceAction325: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction200::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction200[] = "init var of ReduceAction200";
-void INIT_ATTRIBUTES__parser___ReduceAction200(val_t p0){
+/* 2: Attribute ReduceAction325::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction325[] = "init var of ReduceAction325";
+void INIT_ATTRIBUTES__parser___ReduceAction325(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction200;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction325;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction200(void)
+val_t NEW_parser___ReduceAction325(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction200;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction325;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction200[] = "check new ReduceAction200";
-void CHECKNEW_parser___ReduceAction200(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction325[] = "check new ReduceAction325";
+void CHECKNEW_parser___ReduceAction325(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction200;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction325;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -111625,36 +132710,36 @@ void CHECKNEW_parser___ReduceAction200(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction200_parser___ReduceAction___init[] = "new ReduceAction200 parser::ReduceAction::init";
-val_t NEW_ReduceAction200_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction325_parser___ReduceAction___init[] = "new ReduceAction325 parser::ReduceAction::init";
+val_t NEW_ReduceAction325_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction200_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction325_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction200();
-  INIT_ATTRIBUTES__parser___ReduceAction200(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction325();
+  INIT_ATTRIBUTES__parser___ReduceAction325(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction200(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction325(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction201[55] = {
-  {(bigint) 2035 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction326[55] = {
+  {(bigint) 1867 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction201" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction201 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction201 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2035 /* 5: ReduceAction201 < ReduceAction201: superclass typecheck marker */},
+  {(bigint) "ReduceAction326" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction326 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction326 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1867 /* 5: ReduceAction326 < ReduceAction326: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -111668,7 +132753,7 @@ const classtable_elt_t VFT_parser___ReduceAction201[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction201 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction326 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -111699,46 +132784,46 @@ const classtable_elt_t VFT_parser___ReduceAction201[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction201 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction201___action},
+  {(bigint) 0 /* 50: ReduceAction326 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction326___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction201 < ReduceAction201: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction326 < ReduceAction326: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction201::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction201[] = "init var of ReduceAction201";
-void INIT_ATTRIBUTES__parser___ReduceAction201(val_t p0){
+/* 2: Attribute ReduceAction326::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction326[] = "init var of ReduceAction326";
+void INIT_ATTRIBUTES__parser___ReduceAction326(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction201;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction326;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction201(void)
+val_t NEW_parser___ReduceAction326(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction201;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction326;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction201[] = "check new ReduceAction201";
-void CHECKNEW_parser___ReduceAction201(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction326[] = "check new ReduceAction326";
+void CHECKNEW_parser___ReduceAction326(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction201;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction326;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -111751,36 +132836,36 @@ void CHECKNEW_parser___ReduceAction201(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction201_parser___ReduceAction___init[] = "new ReduceAction201 parser::ReduceAction::init";
-val_t NEW_ReduceAction201_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction326_parser___ReduceAction___init[] = "new ReduceAction326 parser::ReduceAction::init";
+val_t NEW_ReduceAction326_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction201_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction326_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction201();
-  INIT_ATTRIBUTES__parser___ReduceAction201(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction326();
+  INIT_ATTRIBUTES__parser___ReduceAction326(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction201(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction326(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction202[55] = {
-  {(bigint) 2031 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction327[55] = {
+  {(bigint) 1863 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction202" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction202 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction202 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2031 /* 5: ReduceAction202 < ReduceAction202: superclass typecheck marker */},
+  {(bigint) "ReduceAction327" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction327 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction327 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1863 /* 5: ReduceAction327 < ReduceAction327: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -111794,7 +132879,7 @@ const classtable_elt_t VFT_parser___ReduceAction202[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction202 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction327 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -111825,46 +132910,46 @@ const classtable_elt_t VFT_parser___ReduceAction202[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction202 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction202___action},
+  {(bigint) 0 /* 50: ReduceAction327 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction327___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction202 < ReduceAction202: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction327 < ReduceAction327: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction202::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction202[] = "init var of ReduceAction202";
-void INIT_ATTRIBUTES__parser___ReduceAction202(val_t p0){
+/* 2: Attribute ReduceAction327::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction327[] = "init var of ReduceAction327";
+void INIT_ATTRIBUTES__parser___ReduceAction327(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction202;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction327;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction202(void)
+val_t NEW_parser___ReduceAction327(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction202;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction327;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction202[] = "check new ReduceAction202";
-void CHECKNEW_parser___ReduceAction202(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction327[] = "check new ReduceAction327";
+void CHECKNEW_parser___ReduceAction327(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction202;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction327;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -111877,36 +132962,36 @@ void CHECKNEW_parser___ReduceAction202(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction202_parser___ReduceAction___init[] = "new ReduceAction202 parser::ReduceAction::init";
-val_t NEW_ReduceAction202_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction327_parser___ReduceAction___init[] = "new ReduceAction327 parser::ReduceAction::init";
+val_t NEW_ReduceAction327_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction202_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction327_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction202();
-  INIT_ATTRIBUTES__parser___ReduceAction202(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction327();
+  INIT_ATTRIBUTES__parser___ReduceAction327(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction202(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction327(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction203[55] = {
-  {(bigint) 2027 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction328[55] = {
+  {(bigint) 1859 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction203" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction203 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction203 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2027 /* 5: ReduceAction203 < ReduceAction203: superclass typecheck marker */},
+  {(bigint) "ReduceAction328" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction328 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction328 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1859 /* 5: ReduceAction328 < ReduceAction328: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -111920,7 +133005,7 @@ const classtable_elt_t VFT_parser___ReduceAction203[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction203 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction328 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -111951,46 +133036,46 @@ const classtable_elt_t VFT_parser___ReduceAction203[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction203 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction203___action},
+  {(bigint) 0 /* 50: ReduceAction328 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction328___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction203 < ReduceAction203: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction328 < ReduceAction328: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction203::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction203[] = "init var of ReduceAction203";
-void INIT_ATTRIBUTES__parser___ReduceAction203(val_t p0){
+/* 2: Attribute ReduceAction328::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction328[] = "init var of ReduceAction328";
+void INIT_ATTRIBUTES__parser___ReduceAction328(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction203;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction328;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction203(void)
+val_t NEW_parser___ReduceAction328(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction203;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction328;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction203[] = "check new ReduceAction203";
-void CHECKNEW_parser___ReduceAction203(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction328[] = "check new ReduceAction328";
+void CHECKNEW_parser___ReduceAction328(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction203;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction328;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -112003,36 +133088,36 @@ void CHECKNEW_parser___ReduceAction203(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction203_parser___ReduceAction___init[] = "new ReduceAction203 parser::ReduceAction::init";
-val_t NEW_ReduceAction203_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction328_parser___ReduceAction___init[] = "new ReduceAction328 parser::ReduceAction::init";
+val_t NEW_ReduceAction328_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction203_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction328_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction203();
-  INIT_ATTRIBUTES__parser___ReduceAction203(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction328();
+  INIT_ATTRIBUTES__parser___ReduceAction328(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction203(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction328(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction204[55] = {
-  {(bigint) 2023 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction329[55] = {
+  {(bigint) 1855 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction204" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction204 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction204 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2023 /* 5: ReduceAction204 < ReduceAction204: superclass typecheck marker */},
+  {(bigint) "ReduceAction329" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction329 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction329 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1855 /* 5: ReduceAction329 < ReduceAction329: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -112046,7 +133131,7 @@ const classtable_elt_t VFT_parser___ReduceAction204[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction204 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction329 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -112077,46 +133162,46 @@ const classtable_elt_t VFT_parser___ReduceAction204[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction204 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction204___action},
+  {(bigint) 0 /* 50: ReduceAction329 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction329___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction204 < ReduceAction204: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction329 < ReduceAction329: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction204::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction204[] = "init var of ReduceAction204";
-void INIT_ATTRIBUTES__parser___ReduceAction204(val_t p0){
+/* 2: Attribute ReduceAction329::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction329[] = "init var of ReduceAction329";
+void INIT_ATTRIBUTES__parser___ReduceAction329(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction204;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction329;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction204(void)
+val_t NEW_parser___ReduceAction329(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction204;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction329;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction204[] = "check new ReduceAction204";
-void CHECKNEW_parser___ReduceAction204(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction329[] = "check new ReduceAction329";
+void CHECKNEW_parser___ReduceAction329(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction204;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction329;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -112129,36 +133214,36 @@ void CHECKNEW_parser___ReduceAction204(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction204_parser___ReduceAction___init[] = "new ReduceAction204 parser::ReduceAction::init";
-val_t NEW_ReduceAction204_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction329_parser___ReduceAction___init[] = "new ReduceAction329 parser::ReduceAction::init";
+val_t NEW_ReduceAction329_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction204_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction329_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction204();
-  INIT_ATTRIBUTES__parser___ReduceAction204(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction329();
+  INIT_ATTRIBUTES__parser___ReduceAction329(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction204(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction329(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction205[55] = {
-  {(bigint) 2019 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction330[55] = {
+  {(bigint) 1847 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction205" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction205 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction205 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2019 /* 5: ReduceAction205 < ReduceAction205: superclass typecheck marker */},
+  {(bigint) "ReduceAction330" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction330 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction330 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1847 /* 5: ReduceAction330 < ReduceAction330: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -112172,7 +133257,7 @@ const classtable_elt_t VFT_parser___ReduceAction205[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction205 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction330 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -112203,46 +133288,46 @@ const classtable_elt_t VFT_parser___ReduceAction205[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction205 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction205___action},
+  {(bigint) 0 /* 50: ReduceAction330 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction330___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction205 < ReduceAction205: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction330 < ReduceAction330: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction205::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction205[] = "init var of ReduceAction205";
-void INIT_ATTRIBUTES__parser___ReduceAction205(val_t p0){
+/* 2: Attribute ReduceAction330::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction330[] = "init var of ReduceAction330";
+void INIT_ATTRIBUTES__parser___ReduceAction330(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction205;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction330;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction205(void)
+val_t NEW_parser___ReduceAction330(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction205;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction330;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction205[] = "check new ReduceAction205";
-void CHECKNEW_parser___ReduceAction205(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction330[] = "check new ReduceAction330";
+void CHECKNEW_parser___ReduceAction330(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction205;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction330;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -112255,36 +133340,36 @@ void CHECKNEW_parser___ReduceAction205(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction205_parser___ReduceAction___init[] = "new ReduceAction205 parser::ReduceAction::init";
-val_t NEW_ReduceAction205_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction330_parser___ReduceAction___init[] = "new ReduceAction330 parser::ReduceAction::init";
+val_t NEW_ReduceAction330_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction205_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction330_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction205();
-  INIT_ATTRIBUTES__parser___ReduceAction205(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction330();
+  INIT_ATTRIBUTES__parser___ReduceAction330(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction205(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction330(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction206[55] = {
-  {(bigint) 2015 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction331[55] = {
+  {(bigint) 1843 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction206" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction206 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction206 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2015 /* 5: ReduceAction206 < ReduceAction206: superclass typecheck marker */},
+  {(bigint) "ReduceAction331" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction331 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction331 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1843 /* 5: ReduceAction331 < ReduceAction331: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -112298,7 +133383,7 @@ const classtable_elt_t VFT_parser___ReduceAction206[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction206 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction331 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -112329,46 +133414,46 @@ const classtable_elt_t VFT_parser___ReduceAction206[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction206 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction206___action},
+  {(bigint) 0 /* 50: ReduceAction331 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction331___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction206 < ReduceAction206: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction331 < ReduceAction331: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction206::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction206[] = "init var of ReduceAction206";
-void INIT_ATTRIBUTES__parser___ReduceAction206(val_t p0){
+/* 2: Attribute ReduceAction331::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction331[] = "init var of ReduceAction331";
+void INIT_ATTRIBUTES__parser___ReduceAction331(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction206;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction331;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction206(void)
+val_t NEW_parser___ReduceAction331(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction206;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction331;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction206[] = "check new ReduceAction206";
-void CHECKNEW_parser___ReduceAction206(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction331[] = "check new ReduceAction331";
+void CHECKNEW_parser___ReduceAction331(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction206;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction331;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -112381,36 +133466,36 @@ void CHECKNEW_parser___ReduceAction206(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction206_parser___ReduceAction___init[] = "new ReduceAction206 parser::ReduceAction::init";
-val_t NEW_ReduceAction206_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction331_parser___ReduceAction___init[] = "new ReduceAction331 parser::ReduceAction::init";
+val_t NEW_ReduceAction331_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction206_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction331_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction206();
-  INIT_ATTRIBUTES__parser___ReduceAction206(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction331();
+  INIT_ATTRIBUTES__parser___ReduceAction331(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction206(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction331(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction207[55] = {
-  {(bigint) 2011 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction332[55] = {
+  {(bigint) 1839 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction207" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction207 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction207 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2011 /* 5: ReduceAction207 < ReduceAction207: superclass typecheck marker */},
+  {(bigint) "ReduceAction332" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction332 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction332 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1839 /* 5: ReduceAction332 < ReduceAction332: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -112424,7 +133509,7 @@ const classtable_elt_t VFT_parser___ReduceAction207[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction207 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction332 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -112455,46 +133540,46 @@ const classtable_elt_t VFT_parser___ReduceAction207[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction207 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction207___action},
+  {(bigint) 0 /* 50: ReduceAction332 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction332___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction207 < ReduceAction207: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction332 < ReduceAction332: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction207::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction207[] = "init var of ReduceAction207";
-void INIT_ATTRIBUTES__parser___ReduceAction207(val_t p0){
+/* 2: Attribute ReduceAction332::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction332[] = "init var of ReduceAction332";
+void INIT_ATTRIBUTES__parser___ReduceAction332(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction207;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction332;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction207(void)
+val_t NEW_parser___ReduceAction332(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction207;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction332;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction207[] = "check new ReduceAction207";
-void CHECKNEW_parser___ReduceAction207(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction332[] = "check new ReduceAction332";
+void CHECKNEW_parser___ReduceAction332(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction207;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction332;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -112507,36 +133592,36 @@ void CHECKNEW_parser___ReduceAction207(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction207_parser___ReduceAction___init[] = "new ReduceAction207 parser::ReduceAction::init";
-val_t NEW_ReduceAction207_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction332_parser___ReduceAction___init[] = "new ReduceAction332 parser::ReduceAction::init";
+val_t NEW_ReduceAction332_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction207_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction332_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction207();
-  INIT_ATTRIBUTES__parser___ReduceAction207(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction332();
+  INIT_ATTRIBUTES__parser___ReduceAction332(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction207(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction332(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction208[55] = {
-  {(bigint) 2007 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction333[55] = {
+  {(bigint) 1835 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction208" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction208 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction208 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2007 /* 5: ReduceAction208 < ReduceAction208: superclass typecheck marker */},
+  {(bigint) "ReduceAction333" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction333 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction333 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1835 /* 5: ReduceAction333 < ReduceAction333: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -112550,7 +133635,7 @@ const classtable_elt_t VFT_parser___ReduceAction208[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction208 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction333 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -112581,46 +133666,46 @@ const classtable_elt_t VFT_parser___ReduceAction208[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction208 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction208___action},
+  {(bigint) 0 /* 50: ReduceAction333 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction333___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction208 < ReduceAction208: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction333 < ReduceAction333: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction208::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction208[] = "init var of ReduceAction208";
-void INIT_ATTRIBUTES__parser___ReduceAction208(val_t p0){
+/* 2: Attribute ReduceAction333::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction333[] = "init var of ReduceAction333";
+void INIT_ATTRIBUTES__parser___ReduceAction333(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction208;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction333;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction208(void)
+val_t NEW_parser___ReduceAction333(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction208;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction333;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction208[] = "check new ReduceAction208";
-void CHECKNEW_parser___ReduceAction208(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction333[] = "check new ReduceAction333";
+void CHECKNEW_parser___ReduceAction333(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction208;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction333;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -112633,36 +133718,36 @@ void CHECKNEW_parser___ReduceAction208(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction208_parser___ReduceAction___init[] = "new ReduceAction208 parser::ReduceAction::init";
-val_t NEW_ReduceAction208_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction333_parser___ReduceAction___init[] = "new ReduceAction333 parser::ReduceAction::init";
+val_t NEW_ReduceAction333_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction208_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction333_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction208();
-  INIT_ATTRIBUTES__parser___ReduceAction208(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction333();
+  INIT_ATTRIBUTES__parser___ReduceAction333(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction208(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction333(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction209[55] = {
-  {(bigint) 2003 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction334[55] = {
+  {(bigint) 1831 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction209" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction209 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction209 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 2003 /* 5: ReduceAction209 < ReduceAction209: superclass typecheck marker */},
+  {(bigint) "ReduceAction334" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction334 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction334 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1831 /* 5: ReduceAction334 < ReduceAction334: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -112676,7 +133761,7 @@ const classtable_elt_t VFT_parser___ReduceAction209[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction209 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction334 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -112707,46 +133792,46 @@ const classtable_elt_t VFT_parser___ReduceAction209[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction209 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction209___action},
+  {(bigint) 0 /* 50: ReduceAction334 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction334___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction209 < ReduceAction209: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction334 < ReduceAction334: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction209::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction209[] = "init var of ReduceAction209";
-void INIT_ATTRIBUTES__parser___ReduceAction209(val_t p0){
+/* 2: Attribute ReduceAction334::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction334[] = "init var of ReduceAction334";
+void INIT_ATTRIBUTES__parser___ReduceAction334(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction209;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction334;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction209(void)
+val_t NEW_parser___ReduceAction334(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction209;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction334;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction209[] = "check new ReduceAction209";
-void CHECKNEW_parser___ReduceAction209(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction334[] = "check new ReduceAction334";
+void CHECKNEW_parser___ReduceAction334(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction209;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction334;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -112759,36 +133844,36 @@ void CHECKNEW_parser___ReduceAction209(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction209_parser___ReduceAction___init[] = "new ReduceAction209 parser::ReduceAction::init";
-val_t NEW_ReduceAction209_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction334_parser___ReduceAction___init[] = "new ReduceAction334 parser::ReduceAction::init";
+val_t NEW_ReduceAction334_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction209_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction334_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction209();
-  INIT_ATTRIBUTES__parser___ReduceAction209(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction334();
+  INIT_ATTRIBUTES__parser___ReduceAction334(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction209(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction334(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction210[55] = {
-  {(bigint) 1995 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction335[55] = {
+  {(bigint) 1827 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction210" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction210 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction210 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1995 /* 5: ReduceAction210 < ReduceAction210: superclass typecheck marker */},
+  {(bigint) "ReduceAction335" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction335 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction335 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1827 /* 5: ReduceAction335 < ReduceAction335: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -112802,7 +133887,7 @@ const classtable_elt_t VFT_parser___ReduceAction210[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction210 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction335 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -112833,46 +133918,46 @@ const classtable_elt_t VFT_parser___ReduceAction210[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction210 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction210___action},
+  {(bigint) 0 /* 50: ReduceAction335 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction335___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction210 < ReduceAction210: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction335 < ReduceAction335: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction210::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction210[] = "init var of ReduceAction210";
-void INIT_ATTRIBUTES__parser___ReduceAction210(val_t p0){
+/* 2: Attribute ReduceAction335::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction335[] = "init var of ReduceAction335";
+void INIT_ATTRIBUTES__parser___ReduceAction335(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction210;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction335;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction210(void)
+val_t NEW_parser___ReduceAction335(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction210;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction335;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction210[] = "check new ReduceAction210";
-void CHECKNEW_parser___ReduceAction210(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction335[] = "check new ReduceAction335";
+void CHECKNEW_parser___ReduceAction335(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction210;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction335;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -112885,36 +133970,36 @@ void CHECKNEW_parser___ReduceAction210(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction210_parser___ReduceAction___init[] = "new ReduceAction210 parser::ReduceAction::init";
-val_t NEW_ReduceAction210_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction335_parser___ReduceAction___init[] = "new ReduceAction335 parser::ReduceAction::init";
+val_t NEW_ReduceAction335_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction210_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction335_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction210();
-  INIT_ATTRIBUTES__parser___ReduceAction210(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction335();
+  INIT_ATTRIBUTES__parser___ReduceAction335(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction210(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction335(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction211[55] = {
-  {(bigint) 1991 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction336[55] = {
+  {(bigint) 1823 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction211" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction211 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction211 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1991 /* 5: ReduceAction211 < ReduceAction211: superclass typecheck marker */},
+  {(bigint) "ReduceAction336" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction336 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction336 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1823 /* 5: ReduceAction336 < ReduceAction336: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -112928,7 +134013,7 @@ const classtable_elt_t VFT_parser___ReduceAction211[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction211 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction336 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -112959,46 +134044,46 @@ const classtable_elt_t VFT_parser___ReduceAction211[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction211 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction211___action},
+  {(bigint) 0 /* 50: ReduceAction336 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction336___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction211 < ReduceAction211: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction336 < ReduceAction336: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction211::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction211[] = "init var of ReduceAction211";
-void INIT_ATTRIBUTES__parser___ReduceAction211(val_t p0){
+/* 2: Attribute ReduceAction336::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction336[] = "init var of ReduceAction336";
+void INIT_ATTRIBUTES__parser___ReduceAction336(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction211;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction336;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction211(void)
+val_t NEW_parser___ReduceAction336(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction211;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction336;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction211[] = "check new ReduceAction211";
-void CHECKNEW_parser___ReduceAction211(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction336[] = "check new ReduceAction336";
+void CHECKNEW_parser___ReduceAction336(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction211;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction336;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -113011,36 +134096,36 @@ void CHECKNEW_parser___ReduceAction211(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction211_parser___ReduceAction___init[] = "new ReduceAction211 parser::ReduceAction::init";
-val_t NEW_ReduceAction211_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction336_parser___ReduceAction___init[] = "new ReduceAction336 parser::ReduceAction::init";
+val_t NEW_ReduceAction336_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction211_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction336_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction211();
-  INIT_ATTRIBUTES__parser___ReduceAction211(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction336();
+  INIT_ATTRIBUTES__parser___ReduceAction336(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction211(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction336(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction212[55] = {
-  {(bigint) 1987 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction337[55] = {
+  {(bigint) 1819 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction212" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction212 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction212 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1987 /* 5: ReduceAction212 < ReduceAction212: superclass typecheck marker */},
+  {(bigint) "ReduceAction337" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction337 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction337 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1819 /* 5: ReduceAction337 < ReduceAction337: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -113054,7 +134139,7 @@ const classtable_elt_t VFT_parser___ReduceAction212[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction212 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction337 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -113085,46 +134170,46 @@ const classtable_elt_t VFT_parser___ReduceAction212[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction212 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction212___action},
+  {(bigint) 0 /* 50: ReduceAction337 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction337___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction212 < ReduceAction212: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction337 < ReduceAction337: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction212::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction212[] = "init var of ReduceAction212";
-void INIT_ATTRIBUTES__parser___ReduceAction212(val_t p0){
+/* 2: Attribute ReduceAction337::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction337[] = "init var of ReduceAction337";
+void INIT_ATTRIBUTES__parser___ReduceAction337(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction212;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction337;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction212(void)
+val_t NEW_parser___ReduceAction337(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction212;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction337;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction212[] = "check new ReduceAction212";
-void CHECKNEW_parser___ReduceAction212(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction337[] = "check new ReduceAction337";
+void CHECKNEW_parser___ReduceAction337(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction212;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction337;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -113137,36 +134222,36 @@ void CHECKNEW_parser___ReduceAction212(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction212_parser___ReduceAction___init[] = "new ReduceAction212 parser::ReduceAction::init";
-val_t NEW_ReduceAction212_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction337_parser___ReduceAction___init[] = "new ReduceAction337 parser::ReduceAction::init";
+val_t NEW_ReduceAction337_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction212_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction337_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction212();
-  INIT_ATTRIBUTES__parser___ReduceAction212(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction337();
+  INIT_ATTRIBUTES__parser___ReduceAction337(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction212(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction337(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction213[55] = {
-  {(bigint) 1983 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction338[55] = {
+  {(bigint) 1815 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction213" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction213 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction213 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1983 /* 5: ReduceAction213 < ReduceAction213: superclass typecheck marker */},
+  {(bigint) "ReduceAction338" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction338 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction338 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1815 /* 5: ReduceAction338 < ReduceAction338: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -113180,7 +134265,7 @@ const classtable_elt_t VFT_parser___ReduceAction213[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction213 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction338 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -113211,46 +134296,46 @@ const classtable_elt_t VFT_parser___ReduceAction213[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction213 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction213___action},
+  {(bigint) 0 /* 50: ReduceAction338 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction338___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction213 < ReduceAction213: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction338 < ReduceAction338: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction213::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction213[] = "init var of ReduceAction213";
-void INIT_ATTRIBUTES__parser___ReduceAction213(val_t p0){
+/* 2: Attribute ReduceAction338::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction338[] = "init var of ReduceAction338";
+void INIT_ATTRIBUTES__parser___ReduceAction338(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction213;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction338;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction213(void)
+val_t NEW_parser___ReduceAction338(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction213;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction338;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction213[] = "check new ReduceAction213";
-void CHECKNEW_parser___ReduceAction213(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction338[] = "check new ReduceAction338";
+void CHECKNEW_parser___ReduceAction338(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction213;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction338;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -113263,36 +134348,36 @@ void CHECKNEW_parser___ReduceAction213(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction213_parser___ReduceAction___init[] = "new ReduceAction213 parser::ReduceAction::init";
-val_t NEW_ReduceAction213_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction338_parser___ReduceAction___init[] = "new ReduceAction338 parser::ReduceAction::init";
+val_t NEW_ReduceAction338_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction213_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction338_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction213();
-  INIT_ATTRIBUTES__parser___ReduceAction213(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction338();
+  INIT_ATTRIBUTES__parser___ReduceAction338(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction213(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction338(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction214[55] = {
-  {(bigint) 1979 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction339[55] = {
+  {(bigint) 1811 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction214" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction214 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction214 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1979 /* 5: ReduceAction214 < ReduceAction214: superclass typecheck marker */},
+  {(bigint) "ReduceAction339" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction339 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction339 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1811 /* 5: ReduceAction339 < ReduceAction339: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -113306,7 +134391,7 @@ const classtable_elt_t VFT_parser___ReduceAction214[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction214 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction339 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -113337,46 +134422,46 @@ const classtable_elt_t VFT_parser___ReduceAction214[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction214 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction214___action},
+  {(bigint) 0 /* 50: ReduceAction339 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction339___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction214 < ReduceAction214: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction339 < ReduceAction339: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction214::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction214[] = "init var of ReduceAction214";
-void INIT_ATTRIBUTES__parser___ReduceAction214(val_t p0){
+/* 2: Attribute ReduceAction339::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction339[] = "init var of ReduceAction339";
+void INIT_ATTRIBUTES__parser___ReduceAction339(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction214;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction339;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction214(void)
+val_t NEW_parser___ReduceAction339(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction214;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction339;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction214[] = "check new ReduceAction214";
-void CHECKNEW_parser___ReduceAction214(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction339[] = "check new ReduceAction339";
+void CHECKNEW_parser___ReduceAction339(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction214;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction339;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -113389,36 +134474,36 @@ void CHECKNEW_parser___ReduceAction214(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction214_parser___ReduceAction___init[] = "new ReduceAction214 parser::ReduceAction::init";
-val_t NEW_ReduceAction214_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction339_parser___ReduceAction___init[] = "new ReduceAction339 parser::ReduceAction::init";
+val_t NEW_ReduceAction339_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction214_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction339_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction214();
-  INIT_ATTRIBUTES__parser___ReduceAction214(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction339();
+  INIT_ATTRIBUTES__parser___ReduceAction339(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction214(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction339(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction215[55] = {
-  {(bigint) 1975 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction340[55] = {
+  {(bigint) 1803 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction215" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction215 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction215 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1975 /* 5: ReduceAction215 < ReduceAction215: superclass typecheck marker */},
+  {(bigint) "ReduceAction340" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction340 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction340 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1803 /* 5: ReduceAction340 < ReduceAction340: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -113432,7 +134517,7 @@ const classtable_elt_t VFT_parser___ReduceAction215[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction215 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction340 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -113463,46 +134548,46 @@ const classtable_elt_t VFT_parser___ReduceAction215[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction215 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction215___action},
+  {(bigint) 0 /* 50: ReduceAction340 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction340___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction215 < ReduceAction215: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction340 < ReduceAction340: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction215::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction215[] = "init var of ReduceAction215";
-void INIT_ATTRIBUTES__parser___ReduceAction215(val_t p0){
+/* 2: Attribute ReduceAction340::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction340[] = "init var of ReduceAction340";
+void INIT_ATTRIBUTES__parser___ReduceAction340(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction215;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction340;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction215(void)
+val_t NEW_parser___ReduceAction340(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction215;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction340;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction215[] = "check new ReduceAction215";
-void CHECKNEW_parser___ReduceAction215(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction340[] = "check new ReduceAction340";
+void CHECKNEW_parser___ReduceAction340(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction215;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction340;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -113515,36 +134600,36 @@ void CHECKNEW_parser___ReduceAction215(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction215_parser___ReduceAction___init[] = "new ReduceAction215 parser::ReduceAction::init";
-val_t NEW_ReduceAction215_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction340_parser___ReduceAction___init[] = "new ReduceAction340 parser::ReduceAction::init";
+val_t NEW_ReduceAction340_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction215_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction340_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction215();
-  INIT_ATTRIBUTES__parser___ReduceAction215(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction340();
+  INIT_ATTRIBUTES__parser___ReduceAction340(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction215(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction340(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction216[55] = {
-  {(bigint) 1971 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction341[55] = {
+  {(bigint) 1799 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction216" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction216 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction216 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1971 /* 5: ReduceAction216 < ReduceAction216: superclass typecheck marker */},
+  {(bigint) "ReduceAction341" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction341 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction341 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1799 /* 5: ReduceAction341 < ReduceAction341: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -113558,7 +134643,7 @@ const classtable_elt_t VFT_parser___ReduceAction216[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction216 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction341 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -113589,46 +134674,46 @@ const classtable_elt_t VFT_parser___ReduceAction216[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction216 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction216___action},
+  {(bigint) 0 /* 50: ReduceAction341 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction341___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction216 < ReduceAction216: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction341 < ReduceAction341: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction216::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction216[] = "init var of ReduceAction216";
-void INIT_ATTRIBUTES__parser___ReduceAction216(val_t p0){
+/* 2: Attribute ReduceAction341::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction341[] = "init var of ReduceAction341";
+void INIT_ATTRIBUTES__parser___ReduceAction341(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction216;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction341;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction216(void)
+val_t NEW_parser___ReduceAction341(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction216;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction341;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction216[] = "check new ReduceAction216";
-void CHECKNEW_parser___ReduceAction216(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction341[] = "check new ReduceAction341";
+void CHECKNEW_parser___ReduceAction341(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction216;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction341;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -113641,36 +134726,36 @@ void CHECKNEW_parser___ReduceAction216(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction216_parser___ReduceAction___init[] = "new ReduceAction216 parser::ReduceAction::init";
-val_t NEW_ReduceAction216_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction341_parser___ReduceAction___init[] = "new ReduceAction341 parser::ReduceAction::init";
+val_t NEW_ReduceAction341_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction216_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction341_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction216();
-  INIT_ATTRIBUTES__parser___ReduceAction216(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction341();
+  INIT_ATTRIBUTES__parser___ReduceAction341(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction216(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction341(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction217[55] = {
-  {(bigint) 1967 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction342[55] = {
+  {(bigint) 1795 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction217" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction217 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction217 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1967 /* 5: ReduceAction217 < ReduceAction217: superclass typecheck marker */},
+  {(bigint) "ReduceAction342" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction342 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction342 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1795 /* 5: ReduceAction342 < ReduceAction342: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -113684,7 +134769,7 @@ const classtable_elt_t VFT_parser___ReduceAction217[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction217 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction342 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -113715,46 +134800,46 @@ const classtable_elt_t VFT_parser___ReduceAction217[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction217 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction217___action},
+  {(bigint) 0 /* 50: ReduceAction342 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction342___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction217 < ReduceAction217: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction342 < ReduceAction342: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction217::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction217[] = "init var of ReduceAction217";
-void INIT_ATTRIBUTES__parser___ReduceAction217(val_t p0){
+/* 2: Attribute ReduceAction342::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction342[] = "init var of ReduceAction342";
+void INIT_ATTRIBUTES__parser___ReduceAction342(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction217;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction342;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction217(void)
+val_t NEW_parser___ReduceAction342(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction217;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction342;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction217[] = "check new ReduceAction217";
-void CHECKNEW_parser___ReduceAction217(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction342[] = "check new ReduceAction342";
+void CHECKNEW_parser___ReduceAction342(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction217;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction342;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -113767,36 +134852,36 @@ void CHECKNEW_parser___ReduceAction217(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction217_parser___ReduceAction___init[] = "new ReduceAction217 parser::ReduceAction::init";
-val_t NEW_ReduceAction217_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction342_parser___ReduceAction___init[] = "new ReduceAction342 parser::ReduceAction::init";
+val_t NEW_ReduceAction342_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction217_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction342_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction217();
-  INIT_ATTRIBUTES__parser___ReduceAction217(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction342();
+  INIT_ATTRIBUTES__parser___ReduceAction342(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction217(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction342(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction218[55] = {
-  {(bigint) 1963 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction343[55] = {
+  {(bigint) 1791 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction218" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction218 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction218 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1963 /* 5: ReduceAction218 < ReduceAction218: superclass typecheck marker */},
+  {(bigint) "ReduceAction343" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction343 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction343 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1791 /* 5: ReduceAction343 < ReduceAction343: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -113810,7 +134895,7 @@ const classtable_elt_t VFT_parser___ReduceAction218[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction218 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction343 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -113841,46 +134926,46 @@ const classtable_elt_t VFT_parser___ReduceAction218[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction218 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction218___action},
+  {(bigint) 0 /* 50: ReduceAction343 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction343___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction218 < ReduceAction218: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction343 < ReduceAction343: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction218::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction218[] = "init var of ReduceAction218";
-void INIT_ATTRIBUTES__parser___ReduceAction218(val_t p0){
+/* 2: Attribute ReduceAction343::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction343[] = "init var of ReduceAction343";
+void INIT_ATTRIBUTES__parser___ReduceAction343(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction218;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction343;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction218(void)
+val_t NEW_parser___ReduceAction343(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction218;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction343;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction218[] = "check new ReduceAction218";
-void CHECKNEW_parser___ReduceAction218(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction343[] = "check new ReduceAction343";
+void CHECKNEW_parser___ReduceAction343(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction218;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction343;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -113893,36 +134978,36 @@ void CHECKNEW_parser___ReduceAction218(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction218_parser___ReduceAction___init[] = "new ReduceAction218 parser::ReduceAction::init";
-val_t NEW_ReduceAction218_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction343_parser___ReduceAction___init[] = "new ReduceAction343 parser::ReduceAction::init";
+val_t NEW_ReduceAction343_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction218_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction343_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction218();
-  INIT_ATTRIBUTES__parser___ReduceAction218(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction343();
+  INIT_ATTRIBUTES__parser___ReduceAction343(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction218(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction343(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction219[55] = {
-  {(bigint) 1959 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction344[55] = {
+  {(bigint) 1787 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction219" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction219 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction219 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1959 /* 5: ReduceAction219 < ReduceAction219: superclass typecheck marker */},
+  {(bigint) "ReduceAction344" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction344 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction344 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1787 /* 5: ReduceAction344 < ReduceAction344: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -113936,7 +135021,7 @@ const classtable_elt_t VFT_parser___ReduceAction219[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction219 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction344 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -113967,46 +135052,46 @@ const classtable_elt_t VFT_parser___ReduceAction219[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction219 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction219___action},
+  {(bigint) 0 /* 50: ReduceAction344 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction344___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction219 < ReduceAction219: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction344 < ReduceAction344: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction219::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction219[] = "init var of ReduceAction219";
-void INIT_ATTRIBUTES__parser___ReduceAction219(val_t p0){
+/* 2: Attribute ReduceAction344::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction344[] = "init var of ReduceAction344";
+void INIT_ATTRIBUTES__parser___ReduceAction344(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction219;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction344;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction219(void)
+val_t NEW_parser___ReduceAction344(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction219;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction344;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction219[] = "check new ReduceAction219";
-void CHECKNEW_parser___ReduceAction219(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction344[] = "check new ReduceAction344";
+void CHECKNEW_parser___ReduceAction344(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction219;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction344;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -114019,36 +135104,36 @@ void CHECKNEW_parser___ReduceAction219(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction219_parser___ReduceAction___init[] = "new ReduceAction219 parser::ReduceAction::init";
-val_t NEW_ReduceAction219_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction344_parser___ReduceAction___init[] = "new ReduceAction344 parser::ReduceAction::init";
+val_t NEW_ReduceAction344_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction219_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction344_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction219();
-  INIT_ATTRIBUTES__parser___ReduceAction219(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction344();
+  INIT_ATTRIBUTES__parser___ReduceAction344(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction219(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction344(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction220[55] = {
-  {(bigint) 1951 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction345[55] = {
+  {(bigint) 1783 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction220" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction220 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction220 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1951 /* 5: ReduceAction220 < ReduceAction220: superclass typecheck marker */},
+  {(bigint) "ReduceAction345" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction345 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction345 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1783 /* 5: ReduceAction345 < ReduceAction345: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -114062,7 +135147,7 @@ const classtable_elt_t VFT_parser___ReduceAction220[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction220 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction345 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -114093,46 +135178,46 @@ const classtable_elt_t VFT_parser___ReduceAction220[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction220 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction220___action},
+  {(bigint) 0 /* 50: ReduceAction345 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction345___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction220 < ReduceAction220: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction345 < ReduceAction345: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction220::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction220[] = "init var of ReduceAction220";
-void INIT_ATTRIBUTES__parser___ReduceAction220(val_t p0){
+/* 2: Attribute ReduceAction345::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction345[] = "init var of ReduceAction345";
+void INIT_ATTRIBUTES__parser___ReduceAction345(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction220;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction345;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction220(void)
+val_t NEW_parser___ReduceAction345(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction220;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction345;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction220[] = "check new ReduceAction220";
-void CHECKNEW_parser___ReduceAction220(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction345[] = "check new ReduceAction345";
+void CHECKNEW_parser___ReduceAction345(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction220;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction345;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -114145,36 +135230,36 @@ void CHECKNEW_parser___ReduceAction220(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction220_parser___ReduceAction___init[] = "new ReduceAction220 parser::ReduceAction::init";
-val_t NEW_ReduceAction220_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction345_parser___ReduceAction___init[] = "new ReduceAction345 parser::ReduceAction::init";
+val_t NEW_ReduceAction345_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction220_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction345_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction220();
-  INIT_ATTRIBUTES__parser___ReduceAction220(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction345();
+  INIT_ATTRIBUTES__parser___ReduceAction345(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction220(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction345(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction221[55] = {
-  {(bigint) 1947 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction346[55] = {
+  {(bigint) 1779 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction221" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction221 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction221 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1947 /* 5: ReduceAction221 < ReduceAction221: superclass typecheck marker */},
+  {(bigint) "ReduceAction346" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction346 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction346 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1779 /* 5: ReduceAction346 < ReduceAction346: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -114188,7 +135273,7 @@ const classtable_elt_t VFT_parser___ReduceAction221[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction221 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction346 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -114219,46 +135304,46 @@ const classtable_elt_t VFT_parser___ReduceAction221[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction221 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction221___action},
+  {(bigint) 0 /* 50: ReduceAction346 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction346___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction221 < ReduceAction221: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction346 < ReduceAction346: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction221::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction221[] = "init var of ReduceAction221";
-void INIT_ATTRIBUTES__parser___ReduceAction221(val_t p0){
+/* 2: Attribute ReduceAction346::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction346[] = "init var of ReduceAction346";
+void INIT_ATTRIBUTES__parser___ReduceAction346(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction221;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction346;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction221(void)
+val_t NEW_parser___ReduceAction346(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction221;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction346;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction221[] = "check new ReduceAction221";
-void CHECKNEW_parser___ReduceAction221(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction346[] = "check new ReduceAction346";
+void CHECKNEW_parser___ReduceAction346(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction221;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction346;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -114271,36 +135356,36 @@ void CHECKNEW_parser___ReduceAction221(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction221_parser___ReduceAction___init[] = "new ReduceAction221 parser::ReduceAction::init";
-val_t NEW_ReduceAction221_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction346_parser___ReduceAction___init[] = "new ReduceAction346 parser::ReduceAction::init";
+val_t NEW_ReduceAction346_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction221_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction346_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction221();
-  INIT_ATTRIBUTES__parser___ReduceAction221(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction346();
+  INIT_ATTRIBUTES__parser___ReduceAction346(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction221(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction346(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction222[55] = {
-  {(bigint) 1943 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction347[55] = {
+  {(bigint) 1775 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction222" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction222 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction222 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1943 /* 5: ReduceAction222 < ReduceAction222: superclass typecheck marker */},
+  {(bigint) "ReduceAction347" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction347 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction347 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1775 /* 5: ReduceAction347 < ReduceAction347: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -114314,7 +135399,7 @@ const classtable_elt_t VFT_parser___ReduceAction222[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction222 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction347 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -114345,46 +135430,46 @@ const classtable_elt_t VFT_parser___ReduceAction222[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction222 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction222___action},
+  {(bigint) 0 /* 50: ReduceAction347 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction347___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction222 < ReduceAction222: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction347 < ReduceAction347: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction222::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction222[] = "init var of ReduceAction222";
-void INIT_ATTRIBUTES__parser___ReduceAction222(val_t p0){
+/* 2: Attribute ReduceAction347::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction347[] = "init var of ReduceAction347";
+void INIT_ATTRIBUTES__parser___ReduceAction347(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction222;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction347;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction222(void)
+val_t NEW_parser___ReduceAction347(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction222;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction347;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction222[] = "check new ReduceAction222";
-void CHECKNEW_parser___ReduceAction222(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction347[] = "check new ReduceAction347";
+void CHECKNEW_parser___ReduceAction347(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction222;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction347;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -114397,36 +135482,36 @@ void CHECKNEW_parser___ReduceAction222(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction222_parser___ReduceAction___init[] = "new ReduceAction222 parser::ReduceAction::init";
-val_t NEW_ReduceAction222_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction347_parser___ReduceAction___init[] = "new ReduceAction347 parser::ReduceAction::init";
+val_t NEW_ReduceAction347_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction222_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction347_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction222();
-  INIT_ATTRIBUTES__parser___ReduceAction222(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction347();
+  INIT_ATTRIBUTES__parser___ReduceAction347(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction222(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction347(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction223[55] = {
-  {(bigint) 1939 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction348[55] = {
+  {(bigint) 1771 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction223" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction223 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction223 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1939 /* 5: ReduceAction223 < ReduceAction223: superclass typecheck marker */},
+  {(bigint) "ReduceAction348" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction348 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction348 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1771 /* 5: ReduceAction348 < ReduceAction348: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -114440,7 +135525,7 @@ const classtable_elt_t VFT_parser___ReduceAction223[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction223 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction348 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -114471,46 +135556,46 @@ const classtable_elt_t VFT_parser___ReduceAction223[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction223 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction223___action},
+  {(bigint) 0 /* 50: ReduceAction348 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction348___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction223 < ReduceAction223: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction348 < ReduceAction348: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction223::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction223[] = "init var of ReduceAction223";
-void INIT_ATTRIBUTES__parser___ReduceAction223(val_t p0){
+/* 2: Attribute ReduceAction348::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction348[] = "init var of ReduceAction348";
+void INIT_ATTRIBUTES__parser___ReduceAction348(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction223;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction348;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction223(void)
+val_t NEW_parser___ReduceAction348(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction223;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction348;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction223[] = "check new ReduceAction223";
-void CHECKNEW_parser___ReduceAction223(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction348[] = "check new ReduceAction348";
+void CHECKNEW_parser___ReduceAction348(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction223;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction348;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -114523,36 +135608,36 @@ void CHECKNEW_parser___ReduceAction223(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction223_parser___ReduceAction___init[] = "new ReduceAction223 parser::ReduceAction::init";
-val_t NEW_ReduceAction223_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction348_parser___ReduceAction___init[] = "new ReduceAction348 parser::ReduceAction::init";
+val_t NEW_ReduceAction348_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction223_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction348_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction223();
-  INIT_ATTRIBUTES__parser___ReduceAction223(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction348();
+  INIT_ATTRIBUTES__parser___ReduceAction348(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction223(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction348(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction224[55] = {
-  {(bigint) 1935 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction349[55] = {
+  {(bigint) 1767 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction224" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction224 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction224 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1935 /* 5: ReduceAction224 < ReduceAction224: superclass typecheck marker */},
+  {(bigint) "ReduceAction349" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction349 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction349 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1767 /* 5: ReduceAction349 < ReduceAction349: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -114566,7 +135651,7 @@ const classtable_elt_t VFT_parser___ReduceAction224[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction224 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction349 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -114597,46 +135682,46 @@ const classtable_elt_t VFT_parser___ReduceAction224[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction224 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction224___action},
+  {(bigint) 0 /* 50: ReduceAction349 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction349___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction224 < ReduceAction224: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction349 < ReduceAction349: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction224::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction224[] = "init var of ReduceAction224";
-void INIT_ATTRIBUTES__parser___ReduceAction224(val_t p0){
+/* 2: Attribute ReduceAction349::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction349[] = "init var of ReduceAction349";
+void INIT_ATTRIBUTES__parser___ReduceAction349(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction224;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction349;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction224(void)
+val_t NEW_parser___ReduceAction349(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction224;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction349;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction224[] = "check new ReduceAction224";
-void CHECKNEW_parser___ReduceAction224(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction349[] = "check new ReduceAction349";
+void CHECKNEW_parser___ReduceAction349(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction224;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction349;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -114649,36 +135734,36 @@ void CHECKNEW_parser___ReduceAction224(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction224_parser___ReduceAction___init[] = "new ReduceAction224 parser::ReduceAction::init";
-val_t NEW_ReduceAction224_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction349_parser___ReduceAction___init[] = "new ReduceAction349 parser::ReduceAction::init";
+val_t NEW_ReduceAction349_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction224_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction349_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction224();
-  INIT_ATTRIBUTES__parser___ReduceAction224(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction349();
+  INIT_ATTRIBUTES__parser___ReduceAction349(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction224(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction349(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction225[55] = {
-  {(bigint) 1931 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction350[55] = {
+  {(bigint) 1759 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction225" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction225 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction225 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1931 /* 5: ReduceAction225 < ReduceAction225: superclass typecheck marker */},
+  {(bigint) "ReduceAction350" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction350 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction350 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1759 /* 5: ReduceAction350 < ReduceAction350: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -114692,7 +135777,7 @@ const classtable_elt_t VFT_parser___ReduceAction225[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction225 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction350 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -114723,46 +135808,46 @@ const classtable_elt_t VFT_parser___ReduceAction225[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction225 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction225___action},
+  {(bigint) 0 /* 50: ReduceAction350 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction350___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction225 < ReduceAction225: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction350 < ReduceAction350: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction225::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction225[] = "init var of ReduceAction225";
-void INIT_ATTRIBUTES__parser___ReduceAction225(val_t p0){
+/* 2: Attribute ReduceAction350::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction350[] = "init var of ReduceAction350";
+void INIT_ATTRIBUTES__parser___ReduceAction350(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction225;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction350;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction225(void)
+val_t NEW_parser___ReduceAction350(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction225;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction350;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction225[] = "check new ReduceAction225";
-void CHECKNEW_parser___ReduceAction225(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction350[] = "check new ReduceAction350";
+void CHECKNEW_parser___ReduceAction350(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction225;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction350;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -114775,36 +135860,36 @@ void CHECKNEW_parser___ReduceAction225(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction225_parser___ReduceAction___init[] = "new ReduceAction225 parser::ReduceAction::init";
-val_t NEW_ReduceAction225_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction350_parser___ReduceAction___init[] = "new ReduceAction350 parser::ReduceAction::init";
+val_t NEW_ReduceAction350_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction225_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction350_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction225();
-  INIT_ATTRIBUTES__parser___ReduceAction225(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction350();
+  INIT_ATTRIBUTES__parser___ReduceAction350(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction225(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction350(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction226[55] = {
-  {(bigint) 1927 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction351[55] = {
+  {(bigint) 1755 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction226" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction226 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction226 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1927 /* 5: ReduceAction226 < ReduceAction226: superclass typecheck marker */},
+  {(bigint) "ReduceAction351" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction351 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction351 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1755 /* 5: ReduceAction351 < ReduceAction351: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -114818,7 +135903,7 @@ const classtable_elt_t VFT_parser___ReduceAction226[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction226 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction351 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -114849,46 +135934,46 @@ const classtable_elt_t VFT_parser___ReduceAction226[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction226 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction226___action},
+  {(bigint) 0 /* 50: ReduceAction351 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction351___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction226 < ReduceAction226: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction351 < ReduceAction351: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction226::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction226[] = "init var of ReduceAction226";
-void INIT_ATTRIBUTES__parser___ReduceAction226(val_t p0){
+/* 2: Attribute ReduceAction351::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction351[] = "init var of ReduceAction351";
+void INIT_ATTRIBUTES__parser___ReduceAction351(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction226;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction351;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction226(void)
+val_t NEW_parser___ReduceAction351(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction226;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction351;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction226[] = "check new ReduceAction226";
-void CHECKNEW_parser___ReduceAction226(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction351[] = "check new ReduceAction351";
+void CHECKNEW_parser___ReduceAction351(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction226;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction351;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -114901,36 +135986,36 @@ void CHECKNEW_parser___ReduceAction226(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction226_parser___ReduceAction___init[] = "new ReduceAction226 parser::ReduceAction::init";
-val_t NEW_ReduceAction226_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction351_parser___ReduceAction___init[] = "new ReduceAction351 parser::ReduceAction::init";
+val_t NEW_ReduceAction351_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction226_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction351_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction226();
-  INIT_ATTRIBUTES__parser___ReduceAction226(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction351();
+  INIT_ATTRIBUTES__parser___ReduceAction351(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction226(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction351(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction227[55] = {
-  {(bigint) 1923 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction352[55] = {
+  {(bigint) 1751 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction227" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction227 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction227 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1923 /* 5: ReduceAction227 < ReduceAction227: superclass typecheck marker */},
+  {(bigint) "ReduceAction352" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction352 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction352 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1751 /* 5: ReduceAction352 < ReduceAction352: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -114944,7 +136029,7 @@ const classtable_elt_t VFT_parser___ReduceAction227[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction227 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction352 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -114975,46 +136060,46 @@ const classtable_elt_t VFT_parser___ReduceAction227[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction227 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction227___action},
+  {(bigint) 0 /* 50: ReduceAction352 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction352___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction227 < ReduceAction227: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction352 < ReduceAction352: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction227::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction227[] = "init var of ReduceAction227";
-void INIT_ATTRIBUTES__parser___ReduceAction227(val_t p0){
+/* 2: Attribute ReduceAction352::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction352[] = "init var of ReduceAction352";
+void INIT_ATTRIBUTES__parser___ReduceAction352(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction227;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction352;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction227(void)
+val_t NEW_parser___ReduceAction352(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction227;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction352;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction227[] = "check new ReduceAction227";
-void CHECKNEW_parser___ReduceAction227(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction352[] = "check new ReduceAction352";
+void CHECKNEW_parser___ReduceAction352(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction227;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction352;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -115027,36 +136112,36 @@ void CHECKNEW_parser___ReduceAction227(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction227_parser___ReduceAction___init[] = "new ReduceAction227 parser::ReduceAction::init";
-val_t NEW_ReduceAction227_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction352_parser___ReduceAction___init[] = "new ReduceAction352 parser::ReduceAction::init";
+val_t NEW_ReduceAction352_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction227_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction352_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction227();
-  INIT_ATTRIBUTES__parser___ReduceAction227(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction352();
+  INIT_ATTRIBUTES__parser___ReduceAction352(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction227(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction352(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction228[55] = {
-  {(bigint) 1919 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction353[55] = {
+  {(bigint) 1747 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction228" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction228 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction228 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1919 /* 5: ReduceAction228 < ReduceAction228: superclass typecheck marker */},
+  {(bigint) "ReduceAction353" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction353 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction353 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1747 /* 5: ReduceAction353 < ReduceAction353: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -115070,7 +136155,7 @@ const classtable_elt_t VFT_parser___ReduceAction228[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction228 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction353 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -115101,46 +136186,46 @@ const classtable_elt_t VFT_parser___ReduceAction228[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction228 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction228___action},
+  {(bigint) 0 /* 50: ReduceAction353 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction353___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction228 < ReduceAction228: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction353 < ReduceAction353: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction228::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction228[] = "init var of ReduceAction228";
-void INIT_ATTRIBUTES__parser___ReduceAction228(val_t p0){
+/* 2: Attribute ReduceAction353::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction353[] = "init var of ReduceAction353";
+void INIT_ATTRIBUTES__parser___ReduceAction353(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction228;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction353;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction228(void)
+val_t NEW_parser___ReduceAction353(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction228;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction353;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction228[] = "check new ReduceAction228";
-void CHECKNEW_parser___ReduceAction228(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction353[] = "check new ReduceAction353";
+void CHECKNEW_parser___ReduceAction353(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction228;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction353;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -115153,36 +136238,36 @@ void CHECKNEW_parser___ReduceAction228(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction228_parser___ReduceAction___init[] = "new ReduceAction228 parser::ReduceAction::init";
-val_t NEW_ReduceAction228_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction353_parser___ReduceAction___init[] = "new ReduceAction353 parser::ReduceAction::init";
+val_t NEW_ReduceAction353_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction228_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction353_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction228();
-  INIT_ATTRIBUTES__parser___ReduceAction228(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction353();
+  INIT_ATTRIBUTES__parser___ReduceAction353(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction228(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction353(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction229[55] = {
-  {(bigint) 1915 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction354[55] = {
+  {(bigint) 1743 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction229" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction229 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction229 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1915 /* 5: ReduceAction229 < ReduceAction229: superclass typecheck marker */},
+  {(bigint) "ReduceAction354" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction354 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction354 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1743 /* 5: ReduceAction354 < ReduceAction354: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -115196,7 +136281,7 @@ const classtable_elt_t VFT_parser___ReduceAction229[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction229 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction354 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -115227,46 +136312,46 @@ const classtable_elt_t VFT_parser___ReduceAction229[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction229 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction229___action},
+  {(bigint) 0 /* 50: ReduceAction354 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction354___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction229 < ReduceAction229: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction354 < ReduceAction354: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction229::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction229[] = "init var of ReduceAction229";
-void INIT_ATTRIBUTES__parser___ReduceAction229(val_t p0){
+/* 2: Attribute ReduceAction354::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction354[] = "init var of ReduceAction354";
+void INIT_ATTRIBUTES__parser___ReduceAction354(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction229;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction354;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction229(void)
+val_t NEW_parser___ReduceAction354(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction229;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction354;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction229[] = "check new ReduceAction229";
-void CHECKNEW_parser___ReduceAction229(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction354[] = "check new ReduceAction354";
+void CHECKNEW_parser___ReduceAction354(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction229;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction354;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -115279,36 +136364,36 @@ void CHECKNEW_parser___ReduceAction229(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction229_parser___ReduceAction___init[] = "new ReduceAction229 parser::ReduceAction::init";
-val_t NEW_ReduceAction229_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction354_parser___ReduceAction___init[] = "new ReduceAction354 parser::ReduceAction::init";
+val_t NEW_ReduceAction354_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction229_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction354_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction229();
-  INIT_ATTRIBUTES__parser___ReduceAction229(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction354();
+  INIT_ATTRIBUTES__parser___ReduceAction354(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction229(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction354(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction230[55] = {
-  {(bigint) 1907 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction355[55] = {
+  {(bigint) 1739 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction230" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction230 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction230 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1907 /* 5: ReduceAction230 < ReduceAction230: superclass typecheck marker */},
+  {(bigint) "ReduceAction355" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction355 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction355 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1739 /* 5: ReduceAction355 < ReduceAction355: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -115322,7 +136407,7 @@ const classtable_elt_t VFT_parser___ReduceAction230[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction230 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction355 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -115353,46 +136438,46 @@ const classtable_elt_t VFT_parser___ReduceAction230[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction230 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction230___action},
+  {(bigint) 0 /* 50: ReduceAction355 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction355___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction230 < ReduceAction230: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction355 < ReduceAction355: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction230::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction230[] = "init var of ReduceAction230";
-void INIT_ATTRIBUTES__parser___ReduceAction230(val_t p0){
+/* 2: Attribute ReduceAction355::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction355[] = "init var of ReduceAction355";
+void INIT_ATTRIBUTES__parser___ReduceAction355(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction230;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction355;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction230(void)
+val_t NEW_parser___ReduceAction355(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction230;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction355;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction230[] = "check new ReduceAction230";
-void CHECKNEW_parser___ReduceAction230(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction355[] = "check new ReduceAction355";
+void CHECKNEW_parser___ReduceAction355(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction230;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction355;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -115405,36 +136490,36 @@ void CHECKNEW_parser___ReduceAction230(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction230_parser___ReduceAction___init[] = "new ReduceAction230 parser::ReduceAction::init";
-val_t NEW_ReduceAction230_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction355_parser___ReduceAction___init[] = "new ReduceAction355 parser::ReduceAction::init";
+val_t NEW_ReduceAction355_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction230_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction355_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction230();
-  INIT_ATTRIBUTES__parser___ReduceAction230(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction355();
+  INIT_ATTRIBUTES__parser___ReduceAction355(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction230(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction355(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction231[55] = {
-  {(bigint) 1903 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction356[55] = {
+  {(bigint) 1735 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction231" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction231 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction231 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1903 /* 5: ReduceAction231 < ReduceAction231: superclass typecheck marker */},
+  {(bigint) "ReduceAction356" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction356 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction356 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1735 /* 5: ReduceAction356 < ReduceAction356: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -115448,7 +136533,7 @@ const classtable_elt_t VFT_parser___ReduceAction231[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction231 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction356 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -115479,46 +136564,46 @@ const classtable_elt_t VFT_parser___ReduceAction231[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction231 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction231___action},
+  {(bigint) 0 /* 50: ReduceAction356 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction356___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction231 < ReduceAction231: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction356 < ReduceAction356: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction231::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction231[] = "init var of ReduceAction231";
-void INIT_ATTRIBUTES__parser___ReduceAction231(val_t p0){
+/* 2: Attribute ReduceAction356::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction356[] = "init var of ReduceAction356";
+void INIT_ATTRIBUTES__parser___ReduceAction356(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction231;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction356;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction231(void)
+val_t NEW_parser___ReduceAction356(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction231;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction356;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction231[] = "check new ReduceAction231";
-void CHECKNEW_parser___ReduceAction231(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction356[] = "check new ReduceAction356";
+void CHECKNEW_parser___ReduceAction356(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction231;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction356;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -115531,36 +136616,36 @@ void CHECKNEW_parser___ReduceAction231(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction231_parser___ReduceAction___init[] = "new ReduceAction231 parser::ReduceAction::init";
-val_t NEW_ReduceAction231_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction356_parser___ReduceAction___init[] = "new ReduceAction356 parser::ReduceAction::init";
+val_t NEW_ReduceAction356_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction231_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction356_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction231();
-  INIT_ATTRIBUTES__parser___ReduceAction231(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction356();
+  INIT_ATTRIBUTES__parser___ReduceAction356(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction231(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction356(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction232[55] = {
-  {(bigint) 1899 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction357[55] = {
+  {(bigint) 1731 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction232" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction232 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction232 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1899 /* 5: ReduceAction232 < ReduceAction232: superclass typecheck marker */},
+  {(bigint) "ReduceAction357" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction357 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction357 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1731 /* 5: ReduceAction357 < ReduceAction357: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -115574,7 +136659,7 @@ const classtable_elt_t VFT_parser___ReduceAction232[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction232 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction357 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -115605,46 +136690,46 @@ const classtable_elt_t VFT_parser___ReduceAction232[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction232 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction232___action},
+  {(bigint) 0 /* 50: ReduceAction357 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction357___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction232 < ReduceAction232: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction357 < ReduceAction357: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction232::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction232[] = "init var of ReduceAction232";
-void INIT_ATTRIBUTES__parser___ReduceAction232(val_t p0){
+/* 2: Attribute ReduceAction357::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction357[] = "init var of ReduceAction357";
+void INIT_ATTRIBUTES__parser___ReduceAction357(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction232;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction357;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction232(void)
+val_t NEW_parser___ReduceAction357(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction232;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction357;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction232[] = "check new ReduceAction232";
-void CHECKNEW_parser___ReduceAction232(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction357[] = "check new ReduceAction357";
+void CHECKNEW_parser___ReduceAction357(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction232;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction357;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -115657,36 +136742,36 @@ void CHECKNEW_parser___ReduceAction232(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction232_parser___ReduceAction___init[] = "new ReduceAction232 parser::ReduceAction::init";
-val_t NEW_ReduceAction232_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction357_parser___ReduceAction___init[] = "new ReduceAction357 parser::ReduceAction::init";
+val_t NEW_ReduceAction357_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction232_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction357_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction232();
-  INIT_ATTRIBUTES__parser___ReduceAction232(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction357();
+  INIT_ATTRIBUTES__parser___ReduceAction357(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction232(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction357(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction233[55] = {
-  {(bigint) 1895 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction358[55] = {
+  {(bigint) 1727 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction233" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction233 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction233 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1895 /* 5: ReduceAction233 < ReduceAction233: superclass typecheck marker */},
+  {(bigint) "ReduceAction358" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction358 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction358 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1727 /* 5: ReduceAction358 < ReduceAction358: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -115700,7 +136785,7 @@ const classtable_elt_t VFT_parser___ReduceAction233[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction233 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction358 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -115731,46 +136816,46 @@ const classtable_elt_t VFT_parser___ReduceAction233[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction233 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction233___action},
+  {(bigint) 0 /* 50: ReduceAction358 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction358___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction233 < ReduceAction233: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction358 < ReduceAction358: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction233::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction233[] = "init var of ReduceAction233";
-void INIT_ATTRIBUTES__parser___ReduceAction233(val_t p0){
+/* 2: Attribute ReduceAction358::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction358[] = "init var of ReduceAction358";
+void INIT_ATTRIBUTES__parser___ReduceAction358(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction233;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction358;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction233(void)
+val_t NEW_parser___ReduceAction358(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction233;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction358;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction233[] = "check new ReduceAction233";
-void CHECKNEW_parser___ReduceAction233(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction358[] = "check new ReduceAction358";
+void CHECKNEW_parser___ReduceAction358(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction233;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction358;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -115783,36 +136868,36 @@ void CHECKNEW_parser___ReduceAction233(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction233_parser___ReduceAction___init[] = "new ReduceAction233 parser::ReduceAction::init";
-val_t NEW_ReduceAction233_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction358_parser___ReduceAction___init[] = "new ReduceAction358 parser::ReduceAction::init";
+val_t NEW_ReduceAction358_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction233_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction358_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction233();
-  INIT_ATTRIBUTES__parser___ReduceAction233(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction358();
+  INIT_ATTRIBUTES__parser___ReduceAction358(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction233(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction358(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction234[55] = {
-  {(bigint) 1891 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction359[55] = {
+  {(bigint) 1723 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction234" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction234 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction234 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1891 /* 5: ReduceAction234 < ReduceAction234: superclass typecheck marker */},
+  {(bigint) "ReduceAction359" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction359 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction359 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1723 /* 5: ReduceAction359 < ReduceAction359: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -115826,7 +136911,7 @@ const classtable_elt_t VFT_parser___ReduceAction234[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction234 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction359 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -115857,46 +136942,46 @@ const classtable_elt_t VFT_parser___ReduceAction234[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction234 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction234___action},
+  {(bigint) 0 /* 50: ReduceAction359 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction359___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction234 < ReduceAction234: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction359 < ReduceAction359: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction234::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction234[] = "init var of ReduceAction234";
-void INIT_ATTRIBUTES__parser___ReduceAction234(val_t p0){
+/* 2: Attribute ReduceAction359::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction359[] = "init var of ReduceAction359";
+void INIT_ATTRIBUTES__parser___ReduceAction359(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction234;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction359;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction234(void)
+val_t NEW_parser___ReduceAction359(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction234;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction359;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction234[] = "check new ReduceAction234";
-void CHECKNEW_parser___ReduceAction234(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction359[] = "check new ReduceAction359";
+void CHECKNEW_parser___ReduceAction359(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction234;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction359;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -115909,36 +136994,36 @@ void CHECKNEW_parser___ReduceAction234(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction234_parser___ReduceAction___init[] = "new ReduceAction234 parser::ReduceAction::init";
-val_t NEW_ReduceAction234_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction359_parser___ReduceAction___init[] = "new ReduceAction359 parser::ReduceAction::init";
+val_t NEW_ReduceAction359_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction234_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction359_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction234();
-  INIT_ATTRIBUTES__parser___ReduceAction234(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction359();
+  INIT_ATTRIBUTES__parser___ReduceAction359(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction234(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction359(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction235[55] = {
-  {(bigint) 1887 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction360[55] = {
+  {(bigint) 1715 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction235" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction235 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction235 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1887 /* 5: ReduceAction235 < ReduceAction235: superclass typecheck marker */},
+  {(bigint) "ReduceAction360" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction360 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction360 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1715 /* 5: ReduceAction360 < ReduceAction360: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -115952,7 +137037,7 @@ const classtable_elt_t VFT_parser___ReduceAction235[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction235 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction360 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -115983,46 +137068,46 @@ const classtable_elt_t VFT_parser___ReduceAction235[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction235 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction235___action},
+  {(bigint) 0 /* 50: ReduceAction360 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction360___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction235 < ReduceAction235: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction360 < ReduceAction360: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction235::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction235[] = "init var of ReduceAction235";
-void INIT_ATTRIBUTES__parser___ReduceAction235(val_t p0){
+/* 2: Attribute ReduceAction360::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction360[] = "init var of ReduceAction360";
+void INIT_ATTRIBUTES__parser___ReduceAction360(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction235;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction360;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction235(void)
+val_t NEW_parser___ReduceAction360(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction235;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction360;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction235[] = "check new ReduceAction235";
-void CHECKNEW_parser___ReduceAction235(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction360[] = "check new ReduceAction360";
+void CHECKNEW_parser___ReduceAction360(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction235;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction360;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -116035,36 +137120,36 @@ void CHECKNEW_parser___ReduceAction235(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction235_parser___ReduceAction___init[] = "new ReduceAction235 parser::ReduceAction::init";
-val_t NEW_ReduceAction235_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction360_parser___ReduceAction___init[] = "new ReduceAction360 parser::ReduceAction::init";
+val_t NEW_ReduceAction360_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction235_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction360_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction235();
-  INIT_ATTRIBUTES__parser___ReduceAction235(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction360();
+  INIT_ATTRIBUTES__parser___ReduceAction360(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction235(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction360(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction236[55] = {
-  {(bigint) 1883 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction361[55] = {
+  {(bigint) 1711 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction236" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction236 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction236 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1883 /* 5: ReduceAction236 < ReduceAction236: superclass typecheck marker */},
+  {(bigint) "ReduceAction361" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction361 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction361 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1711 /* 5: ReduceAction361 < ReduceAction361: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -116078,7 +137163,7 @@ const classtable_elt_t VFT_parser___ReduceAction236[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction236 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction361 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -116109,46 +137194,46 @@ const classtable_elt_t VFT_parser___ReduceAction236[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction236 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction236___action},
+  {(bigint) 0 /* 50: ReduceAction361 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction361___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction236 < ReduceAction236: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction361 < ReduceAction361: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction236::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction236[] = "init var of ReduceAction236";
-void INIT_ATTRIBUTES__parser___ReduceAction236(val_t p0){
+/* 2: Attribute ReduceAction361::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction361[] = "init var of ReduceAction361";
+void INIT_ATTRIBUTES__parser___ReduceAction361(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction236;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction361;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction236(void)
+val_t NEW_parser___ReduceAction361(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction236;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction361;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction236[] = "check new ReduceAction236";
-void CHECKNEW_parser___ReduceAction236(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction361[] = "check new ReduceAction361";
+void CHECKNEW_parser___ReduceAction361(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction236;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction361;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -116161,36 +137246,36 @@ void CHECKNEW_parser___ReduceAction236(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction236_parser___ReduceAction___init[] = "new ReduceAction236 parser::ReduceAction::init";
-val_t NEW_ReduceAction236_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction361_parser___ReduceAction___init[] = "new ReduceAction361 parser::ReduceAction::init";
+val_t NEW_ReduceAction361_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction236_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction361_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction236();
-  INIT_ATTRIBUTES__parser___ReduceAction236(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction361();
+  INIT_ATTRIBUTES__parser___ReduceAction361(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction236(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction361(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction237[55] = {
-  {(bigint) 1879 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction362[55] = {
+  {(bigint) 1707 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction237" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction237 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction237 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1879 /* 5: ReduceAction237 < ReduceAction237: superclass typecheck marker */},
+  {(bigint) "ReduceAction362" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction362 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction362 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1707 /* 5: ReduceAction362 < ReduceAction362: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -116204,7 +137289,7 @@ const classtable_elt_t VFT_parser___ReduceAction237[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction237 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction362 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -116235,46 +137320,46 @@ const classtable_elt_t VFT_parser___ReduceAction237[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction237 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction237___action},
+  {(bigint) 0 /* 50: ReduceAction362 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction362___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction237 < ReduceAction237: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction362 < ReduceAction362: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction237::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction237[] = "init var of ReduceAction237";
-void INIT_ATTRIBUTES__parser___ReduceAction237(val_t p0){
+/* 2: Attribute ReduceAction362::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction362[] = "init var of ReduceAction362";
+void INIT_ATTRIBUTES__parser___ReduceAction362(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction237;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction362;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction237(void)
+val_t NEW_parser___ReduceAction362(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction237;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction362;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction237[] = "check new ReduceAction237";
-void CHECKNEW_parser___ReduceAction237(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction362[] = "check new ReduceAction362";
+void CHECKNEW_parser___ReduceAction362(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction237;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction362;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -116287,36 +137372,36 @@ void CHECKNEW_parser___ReduceAction237(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction237_parser___ReduceAction___init[] = "new ReduceAction237 parser::ReduceAction::init";
-val_t NEW_ReduceAction237_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction362_parser___ReduceAction___init[] = "new ReduceAction362 parser::ReduceAction::init";
+val_t NEW_ReduceAction362_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction237_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction362_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction237();
-  INIT_ATTRIBUTES__parser___ReduceAction237(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction362();
+  INIT_ATTRIBUTES__parser___ReduceAction362(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction237(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction362(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction238[55] = {
-  {(bigint) 1875 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction363[55] = {
+  {(bigint) 1703 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction238" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction238 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction238 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1875 /* 5: ReduceAction238 < ReduceAction238: superclass typecheck marker */},
+  {(bigint) "ReduceAction363" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction363 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction363 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1703 /* 5: ReduceAction363 < ReduceAction363: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -116330,7 +137415,7 @@ const classtable_elt_t VFT_parser___ReduceAction238[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction238 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction363 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -116361,46 +137446,46 @@ const classtable_elt_t VFT_parser___ReduceAction238[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction238 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction238___action},
+  {(bigint) 0 /* 50: ReduceAction363 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction363___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction238 < ReduceAction238: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction363 < ReduceAction363: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction238::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction238[] = "init var of ReduceAction238";
-void INIT_ATTRIBUTES__parser___ReduceAction238(val_t p0){
+/* 2: Attribute ReduceAction363::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction363[] = "init var of ReduceAction363";
+void INIT_ATTRIBUTES__parser___ReduceAction363(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction238;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction363;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction238(void)
+val_t NEW_parser___ReduceAction363(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction238;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction363;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction238[] = "check new ReduceAction238";
-void CHECKNEW_parser___ReduceAction238(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction363[] = "check new ReduceAction363";
+void CHECKNEW_parser___ReduceAction363(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction238;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction363;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -116413,36 +137498,36 @@ void CHECKNEW_parser___ReduceAction238(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction238_parser___ReduceAction___init[] = "new ReduceAction238 parser::ReduceAction::init";
-val_t NEW_ReduceAction238_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction363_parser___ReduceAction___init[] = "new ReduceAction363 parser::ReduceAction::init";
+val_t NEW_ReduceAction363_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction238_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction363_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction238();
-  INIT_ATTRIBUTES__parser___ReduceAction238(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction363();
+  INIT_ATTRIBUTES__parser___ReduceAction363(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction238(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction363(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction239[55] = {
-  {(bigint) 1871 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction364[55] = {
+  {(bigint) 1699 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction239" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction239 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction239 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1871 /* 5: ReduceAction239 < ReduceAction239: superclass typecheck marker */},
+  {(bigint) "ReduceAction364" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction364 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction364 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1699 /* 5: ReduceAction364 < ReduceAction364: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -116456,7 +137541,7 @@ const classtable_elt_t VFT_parser___ReduceAction239[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction239 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction364 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -116487,46 +137572,46 @@ const classtable_elt_t VFT_parser___ReduceAction239[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction239 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction239___action},
+  {(bigint) 0 /* 50: ReduceAction364 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction364___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction239 < ReduceAction239: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction364 < ReduceAction364: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction239::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction239[] = "init var of ReduceAction239";
-void INIT_ATTRIBUTES__parser___ReduceAction239(val_t p0){
+/* 2: Attribute ReduceAction364::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction364[] = "init var of ReduceAction364";
+void INIT_ATTRIBUTES__parser___ReduceAction364(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction239;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction364;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction239(void)
+val_t NEW_parser___ReduceAction364(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction239;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction364;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction239[] = "check new ReduceAction239";
-void CHECKNEW_parser___ReduceAction239(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction364[] = "check new ReduceAction364";
+void CHECKNEW_parser___ReduceAction364(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction239;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction364;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -116539,36 +137624,36 @@ void CHECKNEW_parser___ReduceAction239(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction239_parser___ReduceAction___init[] = "new ReduceAction239 parser::ReduceAction::init";
-val_t NEW_ReduceAction239_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction364_parser___ReduceAction___init[] = "new ReduceAction364 parser::ReduceAction::init";
+val_t NEW_ReduceAction364_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction239_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction364_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction239();
-  INIT_ATTRIBUTES__parser___ReduceAction239(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction364();
+  INIT_ATTRIBUTES__parser___ReduceAction364(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction239(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction364(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction240[55] = {
-  {(bigint) 1863 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction365[55] = {
+  {(bigint) 1695 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction240" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction240 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction240 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1863 /* 5: ReduceAction240 < ReduceAction240: superclass typecheck marker */},
+  {(bigint) "ReduceAction365" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction365 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction365 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1695 /* 5: ReduceAction365 < ReduceAction365: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -116582,7 +137667,7 @@ const classtable_elt_t VFT_parser___ReduceAction240[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction240 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction365 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -116613,46 +137698,46 @@ const classtable_elt_t VFT_parser___ReduceAction240[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction240 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction240___action},
+  {(bigint) 0 /* 50: ReduceAction365 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction365___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction240 < ReduceAction240: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction365 < ReduceAction365: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction240::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction240[] = "init var of ReduceAction240";
-void INIT_ATTRIBUTES__parser___ReduceAction240(val_t p0){
+/* 2: Attribute ReduceAction365::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction365[] = "init var of ReduceAction365";
+void INIT_ATTRIBUTES__parser___ReduceAction365(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction240;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction365;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction240(void)
+val_t NEW_parser___ReduceAction365(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction240;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction365;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction240[] = "check new ReduceAction240";
-void CHECKNEW_parser___ReduceAction240(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction365[] = "check new ReduceAction365";
+void CHECKNEW_parser___ReduceAction365(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction240;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction365;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -116665,36 +137750,36 @@ void CHECKNEW_parser___ReduceAction240(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction240_parser___ReduceAction___init[] = "new ReduceAction240 parser::ReduceAction::init";
-val_t NEW_ReduceAction240_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction365_parser___ReduceAction___init[] = "new ReduceAction365 parser::ReduceAction::init";
+val_t NEW_ReduceAction365_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction240_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction365_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction240();
-  INIT_ATTRIBUTES__parser___ReduceAction240(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction365();
+  INIT_ATTRIBUTES__parser___ReduceAction365(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction240(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction365(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction241[55] = {
-  {(bigint) 1859 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction366[55] = {
+  {(bigint) 1691 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction241" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction241 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction241 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1859 /* 5: ReduceAction241 < ReduceAction241: superclass typecheck marker */},
+  {(bigint) "ReduceAction366" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction366 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction366 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1691 /* 5: ReduceAction366 < ReduceAction366: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -116708,7 +137793,7 @@ const classtable_elt_t VFT_parser___ReduceAction241[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction241 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction366 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -116739,46 +137824,46 @@ const classtable_elt_t VFT_parser___ReduceAction241[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction241 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction241___action},
+  {(bigint) 0 /* 50: ReduceAction366 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction366___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction241 < ReduceAction241: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction366 < ReduceAction366: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction241::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction241[] = "init var of ReduceAction241";
-void INIT_ATTRIBUTES__parser___ReduceAction241(val_t p0){
+/* 2: Attribute ReduceAction366::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction366[] = "init var of ReduceAction366";
+void INIT_ATTRIBUTES__parser___ReduceAction366(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction241;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction366;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction241(void)
+val_t NEW_parser___ReduceAction366(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction241;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction366;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction241[] = "check new ReduceAction241";
-void CHECKNEW_parser___ReduceAction241(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction366[] = "check new ReduceAction366";
+void CHECKNEW_parser___ReduceAction366(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction241;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction366;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -116791,36 +137876,36 @@ void CHECKNEW_parser___ReduceAction241(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction241_parser___ReduceAction___init[] = "new ReduceAction241 parser::ReduceAction::init";
-val_t NEW_ReduceAction241_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction366_parser___ReduceAction___init[] = "new ReduceAction366 parser::ReduceAction::init";
+val_t NEW_ReduceAction366_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction241_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction366_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction241();
-  INIT_ATTRIBUTES__parser___ReduceAction241(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction366();
+  INIT_ATTRIBUTES__parser___ReduceAction366(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction241(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction366(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction242[55] = {
-  {(bigint) 1855 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction367[55] = {
+  {(bigint) 1687 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction242" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction242 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction242 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1855 /* 5: ReduceAction242 < ReduceAction242: superclass typecheck marker */},
+  {(bigint) "ReduceAction367" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction367 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction367 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1687 /* 5: ReduceAction367 < ReduceAction367: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -116834,7 +137919,7 @@ const classtable_elt_t VFT_parser___ReduceAction242[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction242 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction367 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -116865,46 +137950,46 @@ const classtable_elt_t VFT_parser___ReduceAction242[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction242 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction242___action},
+  {(bigint) 0 /* 50: ReduceAction367 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction367___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction242 < ReduceAction242: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction367 < ReduceAction367: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction242::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction242[] = "init var of ReduceAction242";
-void INIT_ATTRIBUTES__parser___ReduceAction242(val_t p0){
+/* 2: Attribute ReduceAction367::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction367[] = "init var of ReduceAction367";
+void INIT_ATTRIBUTES__parser___ReduceAction367(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction242;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction367;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction242(void)
+val_t NEW_parser___ReduceAction367(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction242;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction367;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction242[] = "check new ReduceAction242";
-void CHECKNEW_parser___ReduceAction242(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction367[] = "check new ReduceAction367";
+void CHECKNEW_parser___ReduceAction367(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction242;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction367;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -116917,36 +138002,36 @@ void CHECKNEW_parser___ReduceAction242(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction242_parser___ReduceAction___init[] = "new ReduceAction242 parser::ReduceAction::init";
-val_t NEW_ReduceAction242_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction367_parser___ReduceAction___init[] = "new ReduceAction367 parser::ReduceAction::init";
+val_t NEW_ReduceAction367_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction242_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction367_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction242();
-  INIT_ATTRIBUTES__parser___ReduceAction242(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction367();
+  INIT_ATTRIBUTES__parser___ReduceAction367(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction242(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction367(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction243[55] = {
-  {(bigint) 1851 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction368[55] = {
+  {(bigint) 1683 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction243" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction243 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction243 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1851 /* 5: ReduceAction243 < ReduceAction243: superclass typecheck marker */},
+  {(bigint) "ReduceAction368" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction368 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction368 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1683 /* 5: ReduceAction368 < ReduceAction368: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -116960,7 +138045,7 @@ const classtable_elt_t VFT_parser___ReduceAction243[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction243 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction368 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -116991,46 +138076,46 @@ const classtable_elt_t VFT_parser___ReduceAction243[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction243 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction243___action},
+  {(bigint) 0 /* 50: ReduceAction368 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction368___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction243 < ReduceAction243: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction368 < ReduceAction368: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction243::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction243[] = "init var of ReduceAction243";
-void INIT_ATTRIBUTES__parser___ReduceAction243(val_t p0){
+/* 2: Attribute ReduceAction368::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction368[] = "init var of ReduceAction368";
+void INIT_ATTRIBUTES__parser___ReduceAction368(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction243;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction368;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction243(void)
+val_t NEW_parser___ReduceAction368(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction243;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction368;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction243[] = "check new ReduceAction243";
-void CHECKNEW_parser___ReduceAction243(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction368[] = "check new ReduceAction368";
+void CHECKNEW_parser___ReduceAction368(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction243;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction368;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -117043,36 +138128,36 @@ void CHECKNEW_parser___ReduceAction243(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction243_parser___ReduceAction___init[] = "new ReduceAction243 parser::ReduceAction::init";
-val_t NEW_ReduceAction243_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction368_parser___ReduceAction___init[] = "new ReduceAction368 parser::ReduceAction::init";
+val_t NEW_ReduceAction368_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction243_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction368_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction243();
-  INIT_ATTRIBUTES__parser___ReduceAction243(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction368();
+  INIT_ATTRIBUTES__parser___ReduceAction368(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction243(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction368(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction244[55] = {
-  {(bigint) 1847 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction369[55] = {
+  {(bigint) 1679 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction244" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction244 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction244 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1847 /* 5: ReduceAction244 < ReduceAction244: superclass typecheck marker */},
+  {(bigint) "ReduceAction369" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction369 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction369 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1679 /* 5: ReduceAction369 < ReduceAction369: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -117086,7 +138171,7 @@ const classtable_elt_t VFT_parser___ReduceAction244[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction244 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction369 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -117117,46 +138202,46 @@ const classtable_elt_t VFT_parser___ReduceAction244[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction244 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction244___action},
+  {(bigint) 0 /* 50: ReduceAction369 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction369___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction244 < ReduceAction244: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction369 < ReduceAction369: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction244::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction244[] = "init var of ReduceAction244";
-void INIT_ATTRIBUTES__parser___ReduceAction244(val_t p0){
+/* 2: Attribute ReduceAction369::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction369[] = "init var of ReduceAction369";
+void INIT_ATTRIBUTES__parser___ReduceAction369(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction244;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction369;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction244(void)
+val_t NEW_parser___ReduceAction369(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction244;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction369;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction244[] = "check new ReduceAction244";
-void CHECKNEW_parser___ReduceAction244(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction369[] = "check new ReduceAction369";
+void CHECKNEW_parser___ReduceAction369(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction244;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction369;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -117169,36 +138254,36 @@ void CHECKNEW_parser___ReduceAction244(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction244_parser___ReduceAction___init[] = "new ReduceAction244 parser::ReduceAction::init";
-val_t NEW_ReduceAction244_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction369_parser___ReduceAction___init[] = "new ReduceAction369 parser::ReduceAction::init";
+val_t NEW_ReduceAction369_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction244_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction369_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction244();
-  INIT_ATTRIBUTES__parser___ReduceAction244(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction369();
+  INIT_ATTRIBUTES__parser___ReduceAction369(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction244(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction369(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction245[55] = {
-  {(bigint) 1843 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction370[55] = {
+  {(bigint) 1671 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction245" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction245 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction245 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1843 /* 5: ReduceAction245 < ReduceAction245: superclass typecheck marker */},
+  {(bigint) "ReduceAction370" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction370 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction370 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1671 /* 5: ReduceAction370 < ReduceAction370: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -117212,7 +138297,7 @@ const classtable_elt_t VFT_parser___ReduceAction245[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction245 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction370 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -117243,46 +138328,46 @@ const classtable_elt_t VFT_parser___ReduceAction245[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction245 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction245___action},
+  {(bigint) 0 /* 50: ReduceAction370 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction370___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction245 < ReduceAction245: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction370 < ReduceAction370: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction245::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction245[] = "init var of ReduceAction245";
-void INIT_ATTRIBUTES__parser___ReduceAction245(val_t p0){
+/* 2: Attribute ReduceAction370::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction370[] = "init var of ReduceAction370";
+void INIT_ATTRIBUTES__parser___ReduceAction370(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction245;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction370;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction245(void)
+val_t NEW_parser___ReduceAction370(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction245;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction370;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction245[] = "check new ReduceAction245";
-void CHECKNEW_parser___ReduceAction245(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction370[] = "check new ReduceAction370";
+void CHECKNEW_parser___ReduceAction370(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction245;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction370;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -117295,36 +138380,36 @@ void CHECKNEW_parser___ReduceAction245(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction245_parser___ReduceAction___init[] = "new ReduceAction245 parser::ReduceAction::init";
-val_t NEW_ReduceAction245_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction370_parser___ReduceAction___init[] = "new ReduceAction370 parser::ReduceAction::init";
+val_t NEW_ReduceAction370_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction245_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction370_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction245();
-  INIT_ATTRIBUTES__parser___ReduceAction245(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction370();
+  INIT_ATTRIBUTES__parser___ReduceAction370(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction245(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction370(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction246[55] = {
-  {(bigint) 1839 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction371[55] = {
+  {(bigint) 1667 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction246" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction246 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction246 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1839 /* 5: ReduceAction246 < ReduceAction246: superclass typecheck marker */},
+  {(bigint) "ReduceAction371" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction371 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction371 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1667 /* 5: ReduceAction371 < ReduceAction371: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -117338,7 +138423,7 @@ const classtable_elt_t VFT_parser___ReduceAction246[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction246 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction371 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -117369,46 +138454,46 @@ const classtable_elt_t VFT_parser___ReduceAction246[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction246 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction246___action},
+  {(bigint) 0 /* 50: ReduceAction371 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction371___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction246 < ReduceAction246: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction371 < ReduceAction371: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction246::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction246[] = "init var of ReduceAction246";
-void INIT_ATTRIBUTES__parser___ReduceAction246(val_t p0){
+/* 2: Attribute ReduceAction371::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction371[] = "init var of ReduceAction371";
+void INIT_ATTRIBUTES__parser___ReduceAction371(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction246;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction371;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction246(void)
+val_t NEW_parser___ReduceAction371(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction246;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction371;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction246[] = "check new ReduceAction246";
-void CHECKNEW_parser___ReduceAction246(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction371[] = "check new ReduceAction371";
+void CHECKNEW_parser___ReduceAction371(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction246;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction371;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -117421,36 +138506,36 @@ void CHECKNEW_parser___ReduceAction246(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction246_parser___ReduceAction___init[] = "new ReduceAction246 parser::ReduceAction::init";
-val_t NEW_ReduceAction246_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction371_parser___ReduceAction___init[] = "new ReduceAction371 parser::ReduceAction::init";
+val_t NEW_ReduceAction371_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction246_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction371_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction246();
-  INIT_ATTRIBUTES__parser___ReduceAction246(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction371();
+  INIT_ATTRIBUTES__parser___ReduceAction371(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction246(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction371(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction247[55] = {
-  {(bigint) 1835 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction372[55] = {
+  {(bigint) 1663 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction247" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction247 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction247 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1835 /* 5: ReduceAction247 < ReduceAction247: superclass typecheck marker */},
+  {(bigint) "ReduceAction372" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction372 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction372 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1663 /* 5: ReduceAction372 < ReduceAction372: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -117464,7 +138549,7 @@ const classtable_elt_t VFT_parser___ReduceAction247[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction247 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction372 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -117495,46 +138580,46 @@ const classtable_elt_t VFT_parser___ReduceAction247[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction247 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction247___action},
+  {(bigint) 0 /* 50: ReduceAction372 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction372___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction247 < ReduceAction247: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction372 < ReduceAction372: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction247::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction247[] = "init var of ReduceAction247";
-void INIT_ATTRIBUTES__parser___ReduceAction247(val_t p0){
+/* 2: Attribute ReduceAction372::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction372[] = "init var of ReduceAction372";
+void INIT_ATTRIBUTES__parser___ReduceAction372(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction247;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction372;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction247(void)
+val_t NEW_parser___ReduceAction372(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction247;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction372;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction247[] = "check new ReduceAction247";
-void CHECKNEW_parser___ReduceAction247(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction372[] = "check new ReduceAction372";
+void CHECKNEW_parser___ReduceAction372(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction247;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction372;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -117547,36 +138632,36 @@ void CHECKNEW_parser___ReduceAction247(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction247_parser___ReduceAction___init[] = "new ReduceAction247 parser::ReduceAction::init";
-val_t NEW_ReduceAction247_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction372_parser___ReduceAction___init[] = "new ReduceAction372 parser::ReduceAction::init";
+val_t NEW_ReduceAction372_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction247_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction372_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction247();
-  INIT_ATTRIBUTES__parser___ReduceAction247(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction372();
+  INIT_ATTRIBUTES__parser___ReduceAction372(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction247(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction372(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction248[55] = {
-  {(bigint) 1831 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction373[55] = {
+  {(bigint) 1659 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction248" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction248 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction248 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1831 /* 5: ReduceAction248 < ReduceAction248: superclass typecheck marker */},
+  {(bigint) "ReduceAction373" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction373 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction373 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1659 /* 5: ReduceAction373 < ReduceAction373: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -117590,7 +138675,7 @@ const classtable_elt_t VFT_parser___ReduceAction248[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction248 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction373 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -117621,46 +138706,46 @@ const classtable_elt_t VFT_parser___ReduceAction248[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction248 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction248___action},
+  {(bigint) 0 /* 50: ReduceAction373 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction373___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction248 < ReduceAction248: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction373 < ReduceAction373: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction248::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction248[] = "init var of ReduceAction248";
-void INIT_ATTRIBUTES__parser___ReduceAction248(val_t p0){
+/* 2: Attribute ReduceAction373::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction373[] = "init var of ReduceAction373";
+void INIT_ATTRIBUTES__parser___ReduceAction373(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction248;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction373;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction248(void)
+val_t NEW_parser___ReduceAction373(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction248;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction373;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction248[] = "check new ReduceAction248";
-void CHECKNEW_parser___ReduceAction248(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction373[] = "check new ReduceAction373";
+void CHECKNEW_parser___ReduceAction373(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction248;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction373;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -117673,36 +138758,36 @@ void CHECKNEW_parser___ReduceAction248(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction248_parser___ReduceAction___init[] = "new ReduceAction248 parser::ReduceAction::init";
-val_t NEW_ReduceAction248_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction373_parser___ReduceAction___init[] = "new ReduceAction373 parser::ReduceAction::init";
+val_t NEW_ReduceAction373_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction248_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction373_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction248();
-  INIT_ATTRIBUTES__parser___ReduceAction248(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction373();
+  INIT_ATTRIBUTES__parser___ReduceAction373(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction248(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction373(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction249[55] = {
-  {(bigint) 1827 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction374[55] = {
+  {(bigint) 1655 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction249" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction249 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction249 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1827 /* 5: ReduceAction249 < ReduceAction249: superclass typecheck marker */},
+  {(bigint) "ReduceAction374" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction374 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction374 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1655 /* 5: ReduceAction374 < ReduceAction374: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -117716,7 +138801,7 @@ const classtable_elt_t VFT_parser___ReduceAction249[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction249 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction374 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -117747,46 +138832,46 @@ const classtable_elt_t VFT_parser___ReduceAction249[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction249 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction249___action},
+  {(bigint) 0 /* 50: ReduceAction374 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction374___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction249 < ReduceAction249: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction374 < ReduceAction374: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction249::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction249[] = "init var of ReduceAction249";
-void INIT_ATTRIBUTES__parser___ReduceAction249(val_t p0){
+/* 2: Attribute ReduceAction374::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction374[] = "init var of ReduceAction374";
+void INIT_ATTRIBUTES__parser___ReduceAction374(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction249;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction374;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction249(void)
+val_t NEW_parser___ReduceAction374(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction249;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction374;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction249[] = "check new ReduceAction249";
-void CHECKNEW_parser___ReduceAction249(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction374[] = "check new ReduceAction374";
+void CHECKNEW_parser___ReduceAction374(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction249;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction374;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -117799,36 +138884,36 @@ void CHECKNEW_parser___ReduceAction249(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction249_parser___ReduceAction___init[] = "new ReduceAction249 parser::ReduceAction::init";
-val_t NEW_ReduceAction249_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction374_parser___ReduceAction___init[] = "new ReduceAction374 parser::ReduceAction::init";
+val_t NEW_ReduceAction374_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction249_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction374_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction249();
-  INIT_ATTRIBUTES__parser___ReduceAction249(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction374();
+  INIT_ATTRIBUTES__parser___ReduceAction374(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction249(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction374(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction250[55] = {
-  {(bigint) 1819 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction375[55] = {
+  {(bigint) 1651 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction250" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction250 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction250 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1819 /* 5: ReduceAction250 < ReduceAction250: superclass typecheck marker */},
+  {(bigint) "ReduceAction375" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction375 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction375 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1651 /* 5: ReduceAction375 < ReduceAction375: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -117842,7 +138927,7 @@ const classtable_elt_t VFT_parser___ReduceAction250[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction250 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction375 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -117873,46 +138958,46 @@ const classtable_elt_t VFT_parser___ReduceAction250[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction250 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction250___action},
+  {(bigint) 0 /* 50: ReduceAction375 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction375___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction250 < ReduceAction250: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction375 < ReduceAction375: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction250::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction250[] = "init var of ReduceAction250";
-void INIT_ATTRIBUTES__parser___ReduceAction250(val_t p0){
+/* 2: Attribute ReduceAction375::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction375[] = "init var of ReduceAction375";
+void INIT_ATTRIBUTES__parser___ReduceAction375(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction250;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction375;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction250(void)
+val_t NEW_parser___ReduceAction375(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction250;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction375;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction250[] = "check new ReduceAction250";
-void CHECKNEW_parser___ReduceAction250(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction375[] = "check new ReduceAction375";
+void CHECKNEW_parser___ReduceAction375(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction250;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction375;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -117925,36 +139010,36 @@ void CHECKNEW_parser___ReduceAction250(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction250_parser___ReduceAction___init[] = "new ReduceAction250 parser::ReduceAction::init";
-val_t NEW_ReduceAction250_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction375_parser___ReduceAction___init[] = "new ReduceAction375 parser::ReduceAction::init";
+val_t NEW_ReduceAction375_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction250_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction375_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction250();
-  INIT_ATTRIBUTES__parser___ReduceAction250(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction375();
+  INIT_ATTRIBUTES__parser___ReduceAction375(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction250(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction375(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction251[55] = {
-  {(bigint) 1815 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction376[55] = {
+  {(bigint) 1647 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction251" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction251 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction251 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1815 /* 5: ReduceAction251 < ReduceAction251: superclass typecheck marker */},
+  {(bigint) "ReduceAction376" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction376 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction376 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1647 /* 5: ReduceAction376 < ReduceAction376: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -117968,7 +139053,7 @@ const classtable_elt_t VFT_parser___ReduceAction251[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction251 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction376 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -117999,46 +139084,46 @@ const classtable_elt_t VFT_parser___ReduceAction251[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction251 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction251___action},
+  {(bigint) 0 /* 50: ReduceAction376 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction376___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction251 < ReduceAction251: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction376 < ReduceAction376: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction251::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction251[] = "init var of ReduceAction251";
-void INIT_ATTRIBUTES__parser___ReduceAction251(val_t p0){
+/* 2: Attribute ReduceAction376::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction376[] = "init var of ReduceAction376";
+void INIT_ATTRIBUTES__parser___ReduceAction376(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction251;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction376;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction251(void)
+val_t NEW_parser___ReduceAction376(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction251;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction376;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction251[] = "check new ReduceAction251";
-void CHECKNEW_parser___ReduceAction251(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction376[] = "check new ReduceAction376";
+void CHECKNEW_parser___ReduceAction376(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction251;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction376;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -118051,36 +139136,36 @@ void CHECKNEW_parser___ReduceAction251(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction251_parser___ReduceAction___init[] = "new ReduceAction251 parser::ReduceAction::init";
-val_t NEW_ReduceAction251_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction376_parser___ReduceAction___init[] = "new ReduceAction376 parser::ReduceAction::init";
+val_t NEW_ReduceAction376_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction251_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction376_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction251();
-  INIT_ATTRIBUTES__parser___ReduceAction251(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction376();
+  INIT_ATTRIBUTES__parser___ReduceAction376(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction251(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction376(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction252[55] = {
-  {(bigint) 1811 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction377[55] = {
+  {(bigint) 1643 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction252" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction252 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction252 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1811 /* 5: ReduceAction252 < ReduceAction252: superclass typecheck marker */},
+  {(bigint) "ReduceAction377" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction377 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction377 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1643 /* 5: ReduceAction377 < ReduceAction377: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -118094,7 +139179,7 @@ const classtable_elt_t VFT_parser___ReduceAction252[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction252 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction377 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -118125,46 +139210,46 @@ const classtable_elt_t VFT_parser___ReduceAction252[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction252 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction252___action},
+  {(bigint) 0 /* 50: ReduceAction377 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction377___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction252 < ReduceAction252: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction377 < ReduceAction377: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction252::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction252[] = "init var of ReduceAction252";
-void INIT_ATTRIBUTES__parser___ReduceAction252(val_t p0){
+/* 2: Attribute ReduceAction377::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction377[] = "init var of ReduceAction377";
+void INIT_ATTRIBUTES__parser___ReduceAction377(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction252;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction377;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction252(void)
+val_t NEW_parser___ReduceAction377(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction252;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction377;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction252[] = "check new ReduceAction252";
-void CHECKNEW_parser___ReduceAction252(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction377[] = "check new ReduceAction377";
+void CHECKNEW_parser___ReduceAction377(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction252;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction377;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -118177,36 +139262,36 @@ void CHECKNEW_parser___ReduceAction252(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction252_parser___ReduceAction___init[] = "new ReduceAction252 parser::ReduceAction::init";
-val_t NEW_ReduceAction252_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction377_parser___ReduceAction___init[] = "new ReduceAction377 parser::ReduceAction::init";
+val_t NEW_ReduceAction377_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction252_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction377_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction252();
-  INIT_ATTRIBUTES__parser___ReduceAction252(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction377();
+  INIT_ATTRIBUTES__parser___ReduceAction377(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction252(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction377(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction253[55] = {
-  {(bigint) 1807 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction378[55] = {
+  {(bigint) 1639 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction253" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction253 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction253 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1807 /* 5: ReduceAction253 < ReduceAction253: superclass typecheck marker */},
+  {(bigint) "ReduceAction378" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction378 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction378 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1639 /* 5: ReduceAction378 < ReduceAction378: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -118220,7 +139305,7 @@ const classtable_elt_t VFT_parser___ReduceAction253[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction253 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction378 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -118251,46 +139336,46 @@ const classtable_elt_t VFT_parser___ReduceAction253[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction253 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction253___action},
+  {(bigint) 0 /* 50: ReduceAction378 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction378___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction253 < ReduceAction253: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction378 < ReduceAction378: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction253::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction253[] = "init var of ReduceAction253";
-void INIT_ATTRIBUTES__parser___ReduceAction253(val_t p0){
+/* 2: Attribute ReduceAction378::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction378[] = "init var of ReduceAction378";
+void INIT_ATTRIBUTES__parser___ReduceAction378(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction253;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction378;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction253(void)
+val_t NEW_parser___ReduceAction378(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction253;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction378;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction253[] = "check new ReduceAction253";
-void CHECKNEW_parser___ReduceAction253(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction378[] = "check new ReduceAction378";
+void CHECKNEW_parser___ReduceAction378(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction253;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction378;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -118303,36 +139388,36 @@ void CHECKNEW_parser___ReduceAction253(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction253_parser___ReduceAction___init[] = "new ReduceAction253 parser::ReduceAction::init";
-val_t NEW_ReduceAction253_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction378_parser___ReduceAction___init[] = "new ReduceAction378 parser::ReduceAction::init";
+val_t NEW_ReduceAction378_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction253_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction378_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction253();
-  INIT_ATTRIBUTES__parser___ReduceAction253(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction378();
+  INIT_ATTRIBUTES__parser___ReduceAction378(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction253(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction378(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction254[55] = {
-  {(bigint) 1803 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction379[55] = {
+  {(bigint) 1635 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction254" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction254 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction254 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1803 /* 5: ReduceAction254 < ReduceAction254: superclass typecheck marker */},
+  {(bigint) "ReduceAction379" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction379 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction379 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1635 /* 5: ReduceAction379 < ReduceAction379: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -118346,7 +139431,7 @@ const classtable_elt_t VFT_parser___ReduceAction254[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction254 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction379 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -118377,46 +139462,46 @@ const classtable_elt_t VFT_parser___ReduceAction254[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction254 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction254___action},
+  {(bigint) 0 /* 50: ReduceAction379 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction379___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction254 < ReduceAction254: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction379 < ReduceAction379: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction254::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction254[] = "init var of ReduceAction254";
-void INIT_ATTRIBUTES__parser___ReduceAction254(val_t p0){
+/* 2: Attribute ReduceAction379::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction379[] = "init var of ReduceAction379";
+void INIT_ATTRIBUTES__parser___ReduceAction379(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction254;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction379;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction254(void)
+val_t NEW_parser___ReduceAction379(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction254;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction379;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction254[] = "check new ReduceAction254";
-void CHECKNEW_parser___ReduceAction254(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction379[] = "check new ReduceAction379";
+void CHECKNEW_parser___ReduceAction379(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction254;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction379;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -118429,36 +139514,36 @@ void CHECKNEW_parser___ReduceAction254(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction254_parser___ReduceAction___init[] = "new ReduceAction254 parser::ReduceAction::init";
-val_t NEW_ReduceAction254_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction379_parser___ReduceAction___init[] = "new ReduceAction379 parser::ReduceAction::init";
+val_t NEW_ReduceAction379_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction254_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction379_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction254();
-  INIT_ATTRIBUTES__parser___ReduceAction254(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction379();
+  INIT_ATTRIBUTES__parser___ReduceAction379(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction254(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction379(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction255[55] = {
-  {(bigint) 1799 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction380[55] = {
+  {(bigint) 1627 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction255" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction255 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction255 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1799 /* 5: ReduceAction255 < ReduceAction255: superclass typecheck marker */},
+  {(bigint) "ReduceAction380" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction380 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction380 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1627 /* 5: ReduceAction380 < ReduceAction380: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -118472,7 +139557,7 @@ const classtable_elt_t VFT_parser___ReduceAction255[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction255 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction380 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -118503,46 +139588,46 @@ const classtable_elt_t VFT_parser___ReduceAction255[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction255 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction255___action},
+  {(bigint) 0 /* 50: ReduceAction380 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction380___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction255 < ReduceAction255: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction380 < ReduceAction380: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction255::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction255[] = "init var of ReduceAction255";
-void INIT_ATTRIBUTES__parser___ReduceAction255(val_t p0){
+/* 2: Attribute ReduceAction380::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction380[] = "init var of ReduceAction380";
+void INIT_ATTRIBUTES__parser___ReduceAction380(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction255;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction380;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction255(void)
+val_t NEW_parser___ReduceAction380(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction255;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction380;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction255[] = "check new ReduceAction255";
-void CHECKNEW_parser___ReduceAction255(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction380[] = "check new ReduceAction380";
+void CHECKNEW_parser___ReduceAction380(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction255;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction380;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -118555,36 +139640,36 @@ void CHECKNEW_parser___ReduceAction255(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction255_parser___ReduceAction___init[] = "new ReduceAction255 parser::ReduceAction::init";
-val_t NEW_ReduceAction255_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction380_parser___ReduceAction___init[] = "new ReduceAction380 parser::ReduceAction::init";
+val_t NEW_ReduceAction380_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction255_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction380_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction255();
-  INIT_ATTRIBUTES__parser___ReduceAction255(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction380();
+  INIT_ATTRIBUTES__parser___ReduceAction380(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction255(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction380(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction256[55] = {
-  {(bigint) 1795 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction381[55] = {
+  {(bigint) 1623 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction256" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction256 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction256 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1795 /* 5: ReduceAction256 < ReduceAction256: superclass typecheck marker */},
+  {(bigint) "ReduceAction381" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction381 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction381 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1623 /* 5: ReduceAction381 < ReduceAction381: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -118598,7 +139683,7 @@ const classtable_elt_t VFT_parser___ReduceAction256[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction256 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction381 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -118629,46 +139714,46 @@ const classtable_elt_t VFT_parser___ReduceAction256[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction256 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction256___action},
+  {(bigint) 0 /* 50: ReduceAction381 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction381___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction256 < ReduceAction256: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction381 < ReduceAction381: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction256::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction256[] = "init var of ReduceAction256";
-void INIT_ATTRIBUTES__parser___ReduceAction256(val_t p0){
+/* 2: Attribute ReduceAction381::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction381[] = "init var of ReduceAction381";
+void INIT_ATTRIBUTES__parser___ReduceAction381(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction256;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction381;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction256(void)
+val_t NEW_parser___ReduceAction381(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction256;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction381;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction256[] = "check new ReduceAction256";
-void CHECKNEW_parser___ReduceAction256(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction381[] = "check new ReduceAction381";
+void CHECKNEW_parser___ReduceAction381(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction256;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction381;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -118681,36 +139766,36 @@ void CHECKNEW_parser___ReduceAction256(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction256_parser___ReduceAction___init[] = "new ReduceAction256 parser::ReduceAction::init";
-val_t NEW_ReduceAction256_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction381_parser___ReduceAction___init[] = "new ReduceAction381 parser::ReduceAction::init";
+val_t NEW_ReduceAction381_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction256_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction381_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction256();
-  INIT_ATTRIBUTES__parser___ReduceAction256(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction381();
+  INIT_ATTRIBUTES__parser___ReduceAction381(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction256(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction381(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction257[55] = {
-  {(bigint) 1791 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction382[55] = {
+  {(bigint) 1619 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction257" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction257 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction257 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1791 /* 5: ReduceAction257 < ReduceAction257: superclass typecheck marker */},
+  {(bigint) "ReduceAction382" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction382 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction382 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1619 /* 5: ReduceAction382 < ReduceAction382: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -118724,7 +139809,7 @@ const classtable_elt_t VFT_parser___ReduceAction257[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction257 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction382 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -118755,46 +139840,46 @@ const classtable_elt_t VFT_parser___ReduceAction257[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction257 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction257___action},
+  {(bigint) 0 /* 50: ReduceAction382 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction382___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction257 < ReduceAction257: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction382 < ReduceAction382: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction257::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction257[] = "init var of ReduceAction257";
-void INIT_ATTRIBUTES__parser___ReduceAction257(val_t p0){
+/* 2: Attribute ReduceAction382::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction382[] = "init var of ReduceAction382";
+void INIT_ATTRIBUTES__parser___ReduceAction382(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction257;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction382;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction257(void)
+val_t NEW_parser___ReduceAction382(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction257;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction382;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction257[] = "check new ReduceAction257";
-void CHECKNEW_parser___ReduceAction257(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction382[] = "check new ReduceAction382";
+void CHECKNEW_parser___ReduceAction382(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction257;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction382;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -118807,36 +139892,36 @@ void CHECKNEW_parser___ReduceAction257(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction257_parser___ReduceAction___init[] = "new ReduceAction257 parser::ReduceAction::init";
-val_t NEW_ReduceAction257_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction382_parser___ReduceAction___init[] = "new ReduceAction382 parser::ReduceAction::init";
+val_t NEW_ReduceAction382_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction257_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction382_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction257();
-  INIT_ATTRIBUTES__parser___ReduceAction257(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction382();
+  INIT_ATTRIBUTES__parser___ReduceAction382(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction257(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction382(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction258[55] = {
-  {(bigint) 1787 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction383[55] = {
+  {(bigint) 1615 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction258" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction258 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction258 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1787 /* 5: ReduceAction258 < ReduceAction258: superclass typecheck marker */},
+  {(bigint) "ReduceAction383" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction383 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction383 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1615 /* 5: ReduceAction383 < ReduceAction383: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -118850,7 +139935,7 @@ const classtable_elt_t VFT_parser___ReduceAction258[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction258 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction383 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -118881,46 +139966,46 @@ const classtable_elt_t VFT_parser___ReduceAction258[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction258 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction258___action},
+  {(bigint) 0 /* 50: ReduceAction383 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction383___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction258 < ReduceAction258: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction383 < ReduceAction383: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction258::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction258[] = "init var of ReduceAction258";
-void INIT_ATTRIBUTES__parser___ReduceAction258(val_t p0){
+/* 2: Attribute ReduceAction383::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction383[] = "init var of ReduceAction383";
+void INIT_ATTRIBUTES__parser___ReduceAction383(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction258;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction383;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction258(void)
+val_t NEW_parser___ReduceAction383(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction258;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction383;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction258[] = "check new ReduceAction258";
-void CHECKNEW_parser___ReduceAction258(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction383[] = "check new ReduceAction383";
+void CHECKNEW_parser___ReduceAction383(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction258;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction383;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -118933,36 +140018,36 @@ void CHECKNEW_parser___ReduceAction258(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction258_parser___ReduceAction___init[] = "new ReduceAction258 parser::ReduceAction::init";
-val_t NEW_ReduceAction258_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction383_parser___ReduceAction___init[] = "new ReduceAction383 parser::ReduceAction::init";
+val_t NEW_ReduceAction383_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction258_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction383_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction258();
-  INIT_ATTRIBUTES__parser___ReduceAction258(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction383();
+  INIT_ATTRIBUTES__parser___ReduceAction383(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction258(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction383(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction259[55] = {
-  {(bigint) 1783 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction384[55] = {
+  {(bigint) 1611 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction259" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction259 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction259 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1783 /* 5: ReduceAction259 < ReduceAction259: superclass typecheck marker */},
+  {(bigint) "ReduceAction384" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction384 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction384 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1611 /* 5: ReduceAction384 < ReduceAction384: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -118976,7 +140061,7 @@ const classtable_elt_t VFT_parser___ReduceAction259[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction259 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction384 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -119007,46 +140092,46 @@ const classtable_elt_t VFT_parser___ReduceAction259[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction259 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction259___action},
+  {(bigint) 0 /* 50: ReduceAction384 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction384___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction259 < ReduceAction259: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction384 < ReduceAction384: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction259::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction259[] = "init var of ReduceAction259";
-void INIT_ATTRIBUTES__parser___ReduceAction259(val_t p0){
+/* 2: Attribute ReduceAction384::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction384[] = "init var of ReduceAction384";
+void INIT_ATTRIBUTES__parser___ReduceAction384(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction259;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction384;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction259(void)
+val_t NEW_parser___ReduceAction384(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction259;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction384;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction259[] = "check new ReduceAction259";
-void CHECKNEW_parser___ReduceAction259(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction384[] = "check new ReduceAction384";
+void CHECKNEW_parser___ReduceAction384(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction259;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction384;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -119059,36 +140144,36 @@ void CHECKNEW_parser___ReduceAction259(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction259_parser___ReduceAction___init[] = "new ReduceAction259 parser::ReduceAction::init";
-val_t NEW_ReduceAction259_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction384_parser___ReduceAction___init[] = "new ReduceAction384 parser::ReduceAction::init";
+val_t NEW_ReduceAction384_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction259_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction384_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction259();
-  INIT_ATTRIBUTES__parser___ReduceAction259(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction384();
+  INIT_ATTRIBUTES__parser___ReduceAction384(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction259(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction384(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction260[55] = {
-  {(bigint) 1775 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction385[55] = {
+  {(bigint) 1607 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction260" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction260 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction260 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1775 /* 5: ReduceAction260 < ReduceAction260: superclass typecheck marker */},
+  {(bigint) "ReduceAction385" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction385 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction385 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1607 /* 5: ReduceAction385 < ReduceAction385: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -119102,7 +140187,7 @@ const classtable_elt_t VFT_parser___ReduceAction260[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction260 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction385 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -119133,46 +140218,46 @@ const classtable_elt_t VFT_parser___ReduceAction260[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction260 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction260___action},
+  {(bigint) 0 /* 50: ReduceAction385 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction385___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction260 < ReduceAction260: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction385 < ReduceAction385: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction260::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction260[] = "init var of ReduceAction260";
-void INIT_ATTRIBUTES__parser___ReduceAction260(val_t p0){
+/* 2: Attribute ReduceAction385::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction385[] = "init var of ReduceAction385";
+void INIT_ATTRIBUTES__parser___ReduceAction385(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction260;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction385;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction260(void)
+val_t NEW_parser___ReduceAction385(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction260;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction385;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction260[] = "check new ReduceAction260";
-void CHECKNEW_parser___ReduceAction260(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction385[] = "check new ReduceAction385";
+void CHECKNEW_parser___ReduceAction385(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction260;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction385;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -119185,36 +140270,36 @@ void CHECKNEW_parser___ReduceAction260(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction260_parser___ReduceAction___init[] = "new ReduceAction260 parser::ReduceAction::init";
-val_t NEW_ReduceAction260_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction385_parser___ReduceAction___init[] = "new ReduceAction385 parser::ReduceAction::init";
+val_t NEW_ReduceAction385_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction260_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction385_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction260();
-  INIT_ATTRIBUTES__parser___ReduceAction260(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction385();
+  INIT_ATTRIBUTES__parser___ReduceAction385(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction260(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction385(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction261[55] = {
-  {(bigint) 1771 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction386[55] = {
+  {(bigint) 1603 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction261" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction261 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction261 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1771 /* 5: ReduceAction261 < ReduceAction261: superclass typecheck marker */},
+  {(bigint) "ReduceAction386" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction386 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction386 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1603 /* 5: ReduceAction386 < ReduceAction386: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -119228,7 +140313,7 @@ const classtable_elt_t VFT_parser___ReduceAction261[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction261 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction386 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -119259,46 +140344,46 @@ const classtable_elt_t VFT_parser___ReduceAction261[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction261 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction261___action},
+  {(bigint) 0 /* 50: ReduceAction386 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction386___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction261 < ReduceAction261: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction386 < ReduceAction386: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction261::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction261[] = "init var of ReduceAction261";
-void INIT_ATTRIBUTES__parser___ReduceAction261(val_t p0){
+/* 2: Attribute ReduceAction386::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction386[] = "init var of ReduceAction386";
+void INIT_ATTRIBUTES__parser___ReduceAction386(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction261;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction386;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction261(void)
+val_t NEW_parser___ReduceAction386(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction261;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction386;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction261[] = "check new ReduceAction261";
-void CHECKNEW_parser___ReduceAction261(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction386[] = "check new ReduceAction386";
+void CHECKNEW_parser___ReduceAction386(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction261;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction386;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -119311,36 +140396,36 @@ void CHECKNEW_parser___ReduceAction261(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction261_parser___ReduceAction___init[] = "new ReduceAction261 parser::ReduceAction::init";
-val_t NEW_ReduceAction261_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction386_parser___ReduceAction___init[] = "new ReduceAction386 parser::ReduceAction::init";
+val_t NEW_ReduceAction386_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction261_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction386_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction261();
-  INIT_ATTRIBUTES__parser___ReduceAction261(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction386();
+  INIT_ATTRIBUTES__parser___ReduceAction386(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction261(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction386(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction262[55] = {
-  {(bigint) 1767 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction387[55] = {
+  {(bigint) 1599 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction262" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction262 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction262 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1767 /* 5: ReduceAction262 < ReduceAction262: superclass typecheck marker */},
+  {(bigint) "ReduceAction387" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction387 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction387 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1599 /* 5: ReduceAction387 < ReduceAction387: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -119354,7 +140439,7 @@ const classtable_elt_t VFT_parser___ReduceAction262[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction262 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction387 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -119385,46 +140470,46 @@ const classtable_elt_t VFT_parser___ReduceAction262[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction262 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction262___action},
+  {(bigint) 0 /* 50: ReduceAction387 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction387___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction262 < ReduceAction262: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction387 < ReduceAction387: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction262::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction262[] = "init var of ReduceAction262";
-void INIT_ATTRIBUTES__parser___ReduceAction262(val_t p0){
+/* 2: Attribute ReduceAction387::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction387[] = "init var of ReduceAction387";
+void INIT_ATTRIBUTES__parser___ReduceAction387(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction262;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction387;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction262(void)
+val_t NEW_parser___ReduceAction387(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction262;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction387;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction262[] = "check new ReduceAction262";
-void CHECKNEW_parser___ReduceAction262(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction387[] = "check new ReduceAction387";
+void CHECKNEW_parser___ReduceAction387(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction262;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction387;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -119437,36 +140522,36 @@ void CHECKNEW_parser___ReduceAction262(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction262_parser___ReduceAction___init[] = "new ReduceAction262 parser::ReduceAction::init";
-val_t NEW_ReduceAction262_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction387_parser___ReduceAction___init[] = "new ReduceAction387 parser::ReduceAction::init";
+val_t NEW_ReduceAction387_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction262_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction387_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction262();
-  INIT_ATTRIBUTES__parser___ReduceAction262(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction387();
+  INIT_ATTRIBUTES__parser___ReduceAction387(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction262(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction387(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction263[55] = {
-  {(bigint) 1763 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction388[55] = {
+  {(bigint) 1595 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction263" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction263 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction263 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1763 /* 5: ReduceAction263 < ReduceAction263: superclass typecheck marker */},
+  {(bigint) "ReduceAction388" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction388 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction388 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1595 /* 5: ReduceAction388 < ReduceAction388: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -119480,7 +140565,7 @@ const classtable_elt_t VFT_parser___ReduceAction263[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction263 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction388 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -119511,46 +140596,46 @@ const classtable_elt_t VFT_parser___ReduceAction263[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction263 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction263___action},
+  {(bigint) 0 /* 50: ReduceAction388 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction388___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction263 < ReduceAction263: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction388 < ReduceAction388: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction263::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction263[] = "init var of ReduceAction263";
-void INIT_ATTRIBUTES__parser___ReduceAction263(val_t p0){
+/* 2: Attribute ReduceAction388::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction388[] = "init var of ReduceAction388";
+void INIT_ATTRIBUTES__parser___ReduceAction388(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction263;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction388;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction263(void)
+val_t NEW_parser___ReduceAction388(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction263;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction388;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction263[] = "check new ReduceAction263";
-void CHECKNEW_parser___ReduceAction263(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction388[] = "check new ReduceAction388";
+void CHECKNEW_parser___ReduceAction388(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction263;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction388;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -119563,36 +140648,36 @@ void CHECKNEW_parser___ReduceAction263(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction263_parser___ReduceAction___init[] = "new ReduceAction263 parser::ReduceAction::init";
-val_t NEW_ReduceAction263_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction388_parser___ReduceAction___init[] = "new ReduceAction388 parser::ReduceAction::init";
+val_t NEW_ReduceAction388_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction263_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction388_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction263();
-  INIT_ATTRIBUTES__parser___ReduceAction263(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction388();
+  INIT_ATTRIBUTES__parser___ReduceAction388(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction263(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction388(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction264[55] = {
-  {(bigint) 1759 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction389[55] = {
+  {(bigint) 1591 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction264" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction264 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction264 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1759 /* 5: ReduceAction264 < ReduceAction264: superclass typecheck marker */},
+  {(bigint) "ReduceAction389" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction389 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction389 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1591 /* 5: ReduceAction389 < ReduceAction389: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -119606,7 +140691,7 @@ const classtable_elt_t VFT_parser___ReduceAction264[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction264 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction389 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -119637,46 +140722,46 @@ const classtable_elt_t VFT_parser___ReduceAction264[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction264 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction264___action},
+  {(bigint) 0 /* 50: ReduceAction389 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction389___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction264 < ReduceAction264: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction389 < ReduceAction389: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction264::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction264[] = "init var of ReduceAction264";
-void INIT_ATTRIBUTES__parser___ReduceAction264(val_t p0){
+/* 2: Attribute ReduceAction389::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction389[] = "init var of ReduceAction389";
+void INIT_ATTRIBUTES__parser___ReduceAction389(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction264;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction389;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction264(void)
+val_t NEW_parser___ReduceAction389(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction264;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction389;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction264[] = "check new ReduceAction264";
-void CHECKNEW_parser___ReduceAction264(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction389[] = "check new ReduceAction389";
+void CHECKNEW_parser___ReduceAction389(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction264;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction389;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -119689,36 +140774,36 @@ void CHECKNEW_parser___ReduceAction264(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction264_parser___ReduceAction___init[] = "new ReduceAction264 parser::ReduceAction::init";
-val_t NEW_ReduceAction264_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction389_parser___ReduceAction___init[] = "new ReduceAction389 parser::ReduceAction::init";
+val_t NEW_ReduceAction389_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction264_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction389_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction264();
-  INIT_ATTRIBUTES__parser___ReduceAction264(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction389();
+  INIT_ATTRIBUTES__parser___ReduceAction389(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction264(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction389(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction265[55] = {
-  {(bigint) 1755 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction390[55] = {
+  {(bigint) 1583 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction265" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction265 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction265 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1755 /* 5: ReduceAction265 < ReduceAction265: superclass typecheck marker */},
+  {(bigint) "ReduceAction390" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction390 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction390 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1583 /* 5: ReduceAction390 < ReduceAction390: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -119732,7 +140817,7 @@ const classtable_elt_t VFT_parser___ReduceAction265[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction265 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction390 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -119763,46 +140848,46 @@ const classtable_elt_t VFT_parser___ReduceAction265[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction265 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction265___action},
+  {(bigint) 0 /* 50: ReduceAction390 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction390___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction265 < ReduceAction265: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction390 < ReduceAction390: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction265::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction265[] = "init var of ReduceAction265";
-void INIT_ATTRIBUTES__parser___ReduceAction265(val_t p0){
+/* 2: Attribute ReduceAction390::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction390[] = "init var of ReduceAction390";
+void INIT_ATTRIBUTES__parser___ReduceAction390(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction265;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction390;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction265(void)
+val_t NEW_parser___ReduceAction390(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction265;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction390;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction265[] = "check new ReduceAction265";
-void CHECKNEW_parser___ReduceAction265(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction390[] = "check new ReduceAction390";
+void CHECKNEW_parser___ReduceAction390(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction265;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction390;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -119815,36 +140900,36 @@ void CHECKNEW_parser___ReduceAction265(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction265_parser___ReduceAction___init[] = "new ReduceAction265 parser::ReduceAction::init";
-val_t NEW_ReduceAction265_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction390_parser___ReduceAction___init[] = "new ReduceAction390 parser::ReduceAction::init";
+val_t NEW_ReduceAction390_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction265_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction390_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction265();
-  INIT_ATTRIBUTES__parser___ReduceAction265(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction390();
+  INIT_ATTRIBUTES__parser___ReduceAction390(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction265(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction390(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction266[55] = {
-  {(bigint) 1751 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction391[55] = {
+  {(bigint) 1579 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction266" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction266 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction266 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1751 /* 5: ReduceAction266 < ReduceAction266: superclass typecheck marker */},
+  {(bigint) "ReduceAction391" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction391 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction391 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1579 /* 5: ReduceAction391 < ReduceAction391: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -119858,7 +140943,7 @@ const classtable_elt_t VFT_parser___ReduceAction266[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction266 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction391 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -119889,46 +140974,46 @@ const classtable_elt_t VFT_parser___ReduceAction266[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction266 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction266___action},
+  {(bigint) 0 /* 50: ReduceAction391 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction391___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction266 < ReduceAction266: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction391 < ReduceAction391: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction266::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction266[] = "init var of ReduceAction266";
-void INIT_ATTRIBUTES__parser___ReduceAction266(val_t p0){
+/* 2: Attribute ReduceAction391::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction391[] = "init var of ReduceAction391";
+void INIT_ATTRIBUTES__parser___ReduceAction391(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction266;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction391;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction266(void)
+val_t NEW_parser___ReduceAction391(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction266;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction391;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction266[] = "check new ReduceAction266";
-void CHECKNEW_parser___ReduceAction266(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction391[] = "check new ReduceAction391";
+void CHECKNEW_parser___ReduceAction391(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction266;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction391;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -119941,36 +141026,36 @@ void CHECKNEW_parser___ReduceAction266(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction266_parser___ReduceAction___init[] = "new ReduceAction266 parser::ReduceAction::init";
-val_t NEW_ReduceAction266_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction391_parser___ReduceAction___init[] = "new ReduceAction391 parser::ReduceAction::init";
+val_t NEW_ReduceAction391_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction266_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction391_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction266();
-  INIT_ATTRIBUTES__parser___ReduceAction266(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction391();
+  INIT_ATTRIBUTES__parser___ReduceAction391(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction266(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction391(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction267[55] = {
-  {(bigint) 1747 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction393[55] = {
+  {(bigint) 1575 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction267" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction267 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction267 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1747 /* 5: ReduceAction267 < ReduceAction267: superclass typecheck marker */},
+  {(bigint) "ReduceAction393" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction393 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction393 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1575 /* 5: ReduceAction393 < ReduceAction393: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -119984,7 +141069,7 @@ const classtable_elt_t VFT_parser___ReduceAction267[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction267 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction393 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -120015,46 +141100,46 @@ const classtable_elt_t VFT_parser___ReduceAction267[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction267 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction267___action},
+  {(bigint) 0 /* 50: ReduceAction393 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction393___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction267 < ReduceAction267: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction393 < ReduceAction393: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction267::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction267[] = "init var of ReduceAction267";
-void INIT_ATTRIBUTES__parser___ReduceAction267(val_t p0){
+/* 2: Attribute ReduceAction393::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction393[] = "init var of ReduceAction393";
+void INIT_ATTRIBUTES__parser___ReduceAction393(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction267;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction393;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction267(void)
+val_t NEW_parser___ReduceAction393(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction267;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction393;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction267[] = "check new ReduceAction267";
-void CHECKNEW_parser___ReduceAction267(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction393[] = "check new ReduceAction393";
+void CHECKNEW_parser___ReduceAction393(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction267;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction393;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -120067,36 +141152,36 @@ void CHECKNEW_parser___ReduceAction267(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction267_parser___ReduceAction___init[] = "new ReduceAction267 parser::ReduceAction::init";
-val_t NEW_ReduceAction267_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction393_parser___ReduceAction___init[] = "new ReduceAction393 parser::ReduceAction::init";
+val_t NEW_ReduceAction393_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction267_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction393_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction267();
-  INIT_ATTRIBUTES__parser___ReduceAction267(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction393();
+  INIT_ATTRIBUTES__parser___ReduceAction393(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction267(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction393(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction268[55] = {
-  {(bigint) 1743 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction394[55] = {
+  {(bigint) 1571 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction268" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction268 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction268 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1743 /* 5: ReduceAction268 < ReduceAction268: superclass typecheck marker */},
+  {(bigint) "ReduceAction394" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction394 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction394 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1571 /* 5: ReduceAction394 < ReduceAction394: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -120110,7 +141195,7 @@ const classtable_elt_t VFT_parser___ReduceAction268[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction268 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction394 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -120141,46 +141226,46 @@ const classtable_elt_t VFT_parser___ReduceAction268[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction268 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction268___action},
+  {(bigint) 0 /* 50: ReduceAction394 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction394___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction268 < ReduceAction268: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction394 < ReduceAction394: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction268::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction268[] = "init var of ReduceAction268";
-void INIT_ATTRIBUTES__parser___ReduceAction268(val_t p0){
+/* 2: Attribute ReduceAction394::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction394[] = "init var of ReduceAction394";
+void INIT_ATTRIBUTES__parser___ReduceAction394(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction268;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction394;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction268(void)
+val_t NEW_parser___ReduceAction394(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction268;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction394;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction268[] = "check new ReduceAction268";
-void CHECKNEW_parser___ReduceAction268(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction394[] = "check new ReduceAction394";
+void CHECKNEW_parser___ReduceAction394(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction268;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction394;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -120193,36 +141278,36 @@ void CHECKNEW_parser___ReduceAction268(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction268_parser___ReduceAction___init[] = "new ReduceAction268 parser::ReduceAction::init";
-val_t NEW_ReduceAction268_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction394_parser___ReduceAction___init[] = "new ReduceAction394 parser::ReduceAction::init";
+val_t NEW_ReduceAction394_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction268_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction394_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction268();
-  INIT_ATTRIBUTES__parser___ReduceAction268(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction394();
+  INIT_ATTRIBUTES__parser___ReduceAction394(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction268(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction394(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction269[55] = {
-  {(bigint) 1739 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction395[55] = {
+  {(bigint) 1567 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction269" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction269 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction269 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1739 /* 5: ReduceAction269 < ReduceAction269: superclass typecheck marker */},
+  {(bigint) "ReduceAction395" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction395 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction395 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1567 /* 5: ReduceAction395 < ReduceAction395: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -120236,7 +141321,7 @@ const classtable_elt_t VFT_parser___ReduceAction269[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction269 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction395 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -120267,46 +141352,46 @@ const classtable_elt_t VFT_parser___ReduceAction269[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction269 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction269___action},
+  {(bigint) 0 /* 50: ReduceAction395 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction395___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction269 < ReduceAction269: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction395 < ReduceAction395: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction269::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction269[] = "init var of ReduceAction269";
-void INIT_ATTRIBUTES__parser___ReduceAction269(val_t p0){
+/* 2: Attribute ReduceAction395::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction395[] = "init var of ReduceAction395";
+void INIT_ATTRIBUTES__parser___ReduceAction395(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction269;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction395;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction269(void)
+val_t NEW_parser___ReduceAction395(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction269;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction395;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction269[] = "check new ReduceAction269";
-void CHECKNEW_parser___ReduceAction269(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction395[] = "check new ReduceAction395";
+void CHECKNEW_parser___ReduceAction395(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction269;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction395;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -120319,36 +141404,36 @@ void CHECKNEW_parser___ReduceAction269(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction269_parser___ReduceAction___init[] = "new ReduceAction269 parser::ReduceAction::init";
-val_t NEW_ReduceAction269_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction395_parser___ReduceAction___init[] = "new ReduceAction395 parser::ReduceAction::init";
+val_t NEW_ReduceAction395_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction269_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction395_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction269();
-  INIT_ATTRIBUTES__parser___ReduceAction269(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction395();
+  INIT_ATTRIBUTES__parser___ReduceAction395(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction269(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction395(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction270[55] = {
-  {(bigint) 1731 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction396[55] = {
+  {(bigint) 1563 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction270" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction270 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction270 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1731 /* 5: ReduceAction270 < ReduceAction270: superclass typecheck marker */},
+  {(bigint) "ReduceAction396" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction396 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction396 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1563 /* 5: ReduceAction396 < ReduceAction396: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -120362,7 +141447,7 @@ const classtable_elt_t VFT_parser___ReduceAction270[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction270 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction396 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -120393,46 +141478,46 @@ const classtable_elt_t VFT_parser___ReduceAction270[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction270 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction270___action},
+  {(bigint) 0 /* 50: ReduceAction396 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction396___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction270 < ReduceAction270: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction396 < ReduceAction396: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction270::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction270[] = "init var of ReduceAction270";
-void INIT_ATTRIBUTES__parser___ReduceAction270(val_t p0){
+/* 2: Attribute ReduceAction396::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction396[] = "init var of ReduceAction396";
+void INIT_ATTRIBUTES__parser___ReduceAction396(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction270;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction396;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction270(void)
+val_t NEW_parser___ReduceAction396(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction270;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction396;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction270[] = "check new ReduceAction270";
-void CHECKNEW_parser___ReduceAction270(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction396[] = "check new ReduceAction396";
+void CHECKNEW_parser___ReduceAction396(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction270;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction396;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -120445,36 +141530,36 @@ void CHECKNEW_parser___ReduceAction270(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction270_parser___ReduceAction___init[] = "new ReduceAction270 parser::ReduceAction::init";
-val_t NEW_ReduceAction270_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction396_parser___ReduceAction___init[] = "new ReduceAction396 parser::ReduceAction::init";
+val_t NEW_ReduceAction396_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction270_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction396_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction270();
-  INIT_ATTRIBUTES__parser___ReduceAction270(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction396();
+  INIT_ATTRIBUTES__parser___ReduceAction396(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction270(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction396(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction271[55] = {
-  {(bigint) 1727 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction397[55] = {
+  {(bigint) 1559 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction271" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction271 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction271 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1727 /* 5: ReduceAction271 < ReduceAction271: superclass typecheck marker */},
+  {(bigint) "ReduceAction397" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction397 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction397 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1559 /* 5: ReduceAction397 < ReduceAction397: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -120488,7 +141573,7 @@ const classtable_elt_t VFT_parser___ReduceAction271[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction271 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction397 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -120519,46 +141604,46 @@ const classtable_elt_t VFT_parser___ReduceAction271[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction271 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction271___action},
+  {(bigint) 0 /* 50: ReduceAction397 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction397___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction271 < ReduceAction271: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction397 < ReduceAction397: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction271::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction271[] = "init var of ReduceAction271";
-void INIT_ATTRIBUTES__parser___ReduceAction271(val_t p0){
+/* 2: Attribute ReduceAction397::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction397[] = "init var of ReduceAction397";
+void INIT_ATTRIBUTES__parser___ReduceAction397(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction271;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction397;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction271(void)
+val_t NEW_parser___ReduceAction397(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction271;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction397;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction271[] = "check new ReduceAction271";
-void CHECKNEW_parser___ReduceAction271(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction397[] = "check new ReduceAction397";
+void CHECKNEW_parser___ReduceAction397(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction271;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction397;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -120571,36 +141656,36 @@ void CHECKNEW_parser___ReduceAction271(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction271_parser___ReduceAction___init[] = "new ReduceAction271 parser::ReduceAction::init";
-val_t NEW_ReduceAction271_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction397_parser___ReduceAction___init[] = "new ReduceAction397 parser::ReduceAction::init";
+val_t NEW_ReduceAction397_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction271_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction397_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction271();
-  INIT_ATTRIBUTES__parser___ReduceAction271(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction397();
+  INIT_ATTRIBUTES__parser___ReduceAction397(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction271(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction397(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction272[55] = {
-  {(bigint) 1723 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction398[55] = {
+  {(bigint) 1555 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction272" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction272 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction272 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1723 /* 5: ReduceAction272 < ReduceAction272: superclass typecheck marker */},
+  {(bigint) "ReduceAction398" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction398 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction398 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1555 /* 5: ReduceAction398 < ReduceAction398: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -120614,7 +141699,7 @@ const classtable_elt_t VFT_parser___ReduceAction272[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction272 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction398 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -120645,46 +141730,46 @@ const classtable_elt_t VFT_parser___ReduceAction272[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction272 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction272___action},
+  {(bigint) 0 /* 50: ReduceAction398 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction398___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction272 < ReduceAction272: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction398 < ReduceAction398: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction272::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction272[] = "init var of ReduceAction272";
-void INIT_ATTRIBUTES__parser___ReduceAction272(val_t p0){
+/* 2: Attribute ReduceAction398::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction398[] = "init var of ReduceAction398";
+void INIT_ATTRIBUTES__parser___ReduceAction398(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction272;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction398;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction272(void)
+val_t NEW_parser___ReduceAction398(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction272;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction398;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction272[] = "check new ReduceAction272";
-void CHECKNEW_parser___ReduceAction272(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction398[] = "check new ReduceAction398";
+void CHECKNEW_parser___ReduceAction398(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction272;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction398;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -120697,36 +141782,36 @@ void CHECKNEW_parser___ReduceAction272(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction272_parser___ReduceAction___init[] = "new ReduceAction272 parser::ReduceAction::init";
-val_t NEW_ReduceAction272_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction398_parser___ReduceAction___init[] = "new ReduceAction398 parser::ReduceAction::init";
+val_t NEW_ReduceAction398_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction272_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction398_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction272();
-  INIT_ATTRIBUTES__parser___ReduceAction272(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction398();
+  INIT_ATTRIBUTES__parser___ReduceAction398(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction272(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction398(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction273[55] = {
-  {(bigint) 1719 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction399[55] = {
+  {(bigint) 1551 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction273" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction273 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction273 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1719 /* 5: ReduceAction273 < ReduceAction273: superclass typecheck marker */},
+  {(bigint) "ReduceAction399" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction399 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction399 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1551 /* 5: ReduceAction399 < ReduceAction399: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -120740,7 +141825,7 @@ const classtable_elt_t VFT_parser___ReduceAction273[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction273 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction399 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -120771,46 +141856,46 @@ const classtable_elt_t VFT_parser___ReduceAction273[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction273 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction273___action},
+  {(bigint) 0 /* 50: ReduceAction399 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction399___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction273 < ReduceAction273: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction399 < ReduceAction399: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction273::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction273[] = "init var of ReduceAction273";
-void INIT_ATTRIBUTES__parser___ReduceAction273(val_t p0){
+/* 2: Attribute ReduceAction399::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction399[] = "init var of ReduceAction399";
+void INIT_ATTRIBUTES__parser___ReduceAction399(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction273;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction399;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction273(void)
+val_t NEW_parser___ReduceAction399(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction273;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction399;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction273[] = "check new ReduceAction273";
-void CHECKNEW_parser___ReduceAction273(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction399[] = "check new ReduceAction399";
+void CHECKNEW_parser___ReduceAction399(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction273;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction399;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -120823,36 +141908,36 @@ void CHECKNEW_parser___ReduceAction273(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction273_parser___ReduceAction___init[] = "new ReduceAction273 parser::ReduceAction::init";
-val_t NEW_ReduceAction273_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction399_parser___ReduceAction___init[] = "new ReduceAction399 parser::ReduceAction::init";
+val_t NEW_ReduceAction399_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction273_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction399_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction273();
-  INIT_ATTRIBUTES__parser___ReduceAction273(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction399();
+  INIT_ATTRIBUTES__parser___ReduceAction399(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction273(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction399(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction274[55] = {
-  {(bigint) 1715 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction400[55] = {
+  {(bigint) 1539 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction274" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction274 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction274 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1715 /* 5: ReduceAction274 < ReduceAction274: superclass typecheck marker */},
+  {(bigint) "ReduceAction400" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction400 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction400 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1539 /* 5: ReduceAction400 < ReduceAction400: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -120866,7 +141951,7 @@ const classtable_elt_t VFT_parser___ReduceAction274[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction274 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction400 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -120897,46 +141982,46 @@ const classtable_elt_t VFT_parser___ReduceAction274[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction274 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction274___action},
+  {(bigint) 0 /* 50: ReduceAction400 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction400___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction274 < ReduceAction274: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction400 < ReduceAction400: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction274::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction274[] = "init var of ReduceAction274";
-void INIT_ATTRIBUTES__parser___ReduceAction274(val_t p0){
+/* 2: Attribute ReduceAction400::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction400[] = "init var of ReduceAction400";
+void INIT_ATTRIBUTES__parser___ReduceAction400(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction274;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction400;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction274(void)
+val_t NEW_parser___ReduceAction400(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction274;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction400;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction274[] = "check new ReduceAction274";
-void CHECKNEW_parser___ReduceAction274(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction400[] = "check new ReduceAction400";
+void CHECKNEW_parser___ReduceAction400(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction274;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction400;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -120949,36 +142034,36 @@ void CHECKNEW_parser___ReduceAction274(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction274_parser___ReduceAction___init[] = "new ReduceAction274 parser::ReduceAction::init";
-val_t NEW_ReduceAction274_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction400_parser___ReduceAction___init[] = "new ReduceAction400 parser::ReduceAction::init";
+val_t NEW_ReduceAction400_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction274_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction400_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction274();
-  INIT_ATTRIBUTES__parser___ReduceAction274(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction400();
+  INIT_ATTRIBUTES__parser___ReduceAction400(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction274(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction400(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction275[55] = {
-  {(bigint) 1711 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction401[55] = {
+  {(bigint) 1535 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction275" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction275 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction275 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1711 /* 5: ReduceAction275 < ReduceAction275: superclass typecheck marker */},
+  {(bigint) "ReduceAction401" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction401 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction401 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1535 /* 5: ReduceAction401 < ReduceAction401: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -120992,7 +142077,7 @@ const classtable_elt_t VFT_parser___ReduceAction275[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction275 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction401 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -121023,46 +142108,46 @@ const classtable_elt_t VFT_parser___ReduceAction275[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction275 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction275___action},
+  {(bigint) 0 /* 50: ReduceAction401 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction401___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction275 < ReduceAction275: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction401 < ReduceAction401: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction275::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction275[] = "init var of ReduceAction275";
-void INIT_ATTRIBUTES__parser___ReduceAction275(val_t p0){
+/* 2: Attribute ReduceAction401::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction401[] = "init var of ReduceAction401";
+void INIT_ATTRIBUTES__parser___ReduceAction401(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction275;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction401;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction275(void)
+val_t NEW_parser___ReduceAction401(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction275;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction401;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction275[] = "check new ReduceAction275";
-void CHECKNEW_parser___ReduceAction275(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction401[] = "check new ReduceAction401";
+void CHECKNEW_parser___ReduceAction401(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction275;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction401;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -121075,36 +142160,36 @@ void CHECKNEW_parser___ReduceAction275(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction275_parser___ReduceAction___init[] = "new ReduceAction275 parser::ReduceAction::init";
-val_t NEW_ReduceAction275_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction401_parser___ReduceAction___init[] = "new ReduceAction401 parser::ReduceAction::init";
+val_t NEW_ReduceAction401_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction275_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction401_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction275();
-  INIT_ATTRIBUTES__parser___ReduceAction275(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction401();
+  INIT_ATTRIBUTES__parser___ReduceAction401(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction275(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction401(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction276[55] = {
-  {(bigint) 1707 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction402[55] = {
+  {(bigint) 1531 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction276" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction276 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction276 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1707 /* 5: ReduceAction276 < ReduceAction276: superclass typecheck marker */},
+  {(bigint) "ReduceAction402" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction402 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction402 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1531 /* 5: ReduceAction402 < ReduceAction402: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -121118,7 +142203,7 @@ const classtable_elt_t VFT_parser___ReduceAction276[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction276 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction402 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -121149,46 +142234,46 @@ const classtable_elt_t VFT_parser___ReduceAction276[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction276 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction276___action},
+  {(bigint) 0 /* 50: ReduceAction402 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction402___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction276 < ReduceAction276: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction402 < ReduceAction402: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction276::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction276[] = "init var of ReduceAction276";
-void INIT_ATTRIBUTES__parser___ReduceAction276(val_t p0){
+/* 2: Attribute ReduceAction402::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction402[] = "init var of ReduceAction402";
+void INIT_ATTRIBUTES__parser___ReduceAction402(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction276;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction402;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction276(void)
+val_t NEW_parser___ReduceAction402(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction276;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction402;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction276[] = "check new ReduceAction276";
-void CHECKNEW_parser___ReduceAction276(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction402[] = "check new ReduceAction402";
+void CHECKNEW_parser___ReduceAction402(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction276;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction402;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -121201,36 +142286,36 @@ void CHECKNEW_parser___ReduceAction276(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction276_parser___ReduceAction___init[] = "new ReduceAction276 parser::ReduceAction::init";
-val_t NEW_ReduceAction276_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction402_parser___ReduceAction___init[] = "new ReduceAction402 parser::ReduceAction::init";
+val_t NEW_ReduceAction402_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction276_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction402_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction276();
-  INIT_ATTRIBUTES__parser___ReduceAction276(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction402();
+  INIT_ATTRIBUTES__parser___ReduceAction402(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction276(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction402(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction277[55] = {
-  {(bigint) 1703 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction403[55] = {
+  {(bigint) 1527 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction277" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction277 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction277 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1703 /* 5: ReduceAction277 < ReduceAction277: superclass typecheck marker */},
+  {(bigint) "ReduceAction403" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction403 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction403 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1527 /* 5: ReduceAction403 < ReduceAction403: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -121244,7 +142329,7 @@ const classtable_elt_t VFT_parser___ReduceAction277[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction277 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction403 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -121275,46 +142360,46 @@ const classtable_elt_t VFT_parser___ReduceAction277[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction277 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction277___action},
+  {(bigint) 0 /* 50: ReduceAction403 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction403___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction277 < ReduceAction277: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction403 < ReduceAction403: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction277::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction277[] = "init var of ReduceAction277";
-void INIT_ATTRIBUTES__parser___ReduceAction277(val_t p0){
+/* 2: Attribute ReduceAction403::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction403[] = "init var of ReduceAction403";
+void INIT_ATTRIBUTES__parser___ReduceAction403(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction277;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction403;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction277(void)
+val_t NEW_parser___ReduceAction403(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction277;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction403;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction277[] = "check new ReduceAction277";
-void CHECKNEW_parser___ReduceAction277(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction403[] = "check new ReduceAction403";
+void CHECKNEW_parser___ReduceAction403(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction277;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction403;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -121327,36 +142412,36 @@ void CHECKNEW_parser___ReduceAction277(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction277_parser___ReduceAction___init[] = "new ReduceAction277 parser::ReduceAction::init";
-val_t NEW_ReduceAction277_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction403_parser___ReduceAction___init[] = "new ReduceAction403 parser::ReduceAction::init";
+val_t NEW_ReduceAction403_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction277_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction403_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction277();
-  INIT_ATTRIBUTES__parser___ReduceAction277(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction403();
+  INIT_ATTRIBUTES__parser___ReduceAction403(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction277(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction403(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction278[55] = {
-  {(bigint) 1699 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction404[55] = {
+  {(bigint) 1523 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction278" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction278 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction278 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1699 /* 5: ReduceAction278 < ReduceAction278: superclass typecheck marker */},
+  {(bigint) "ReduceAction404" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction404 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction404 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1523 /* 5: ReduceAction404 < ReduceAction404: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -121370,7 +142455,7 @@ const classtable_elt_t VFT_parser___ReduceAction278[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction278 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction404 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -121401,46 +142486,46 @@ const classtable_elt_t VFT_parser___ReduceAction278[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction278 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction278___action},
+  {(bigint) 0 /* 50: ReduceAction404 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction404___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction278 < ReduceAction278: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction404 < ReduceAction404: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction278::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction278[] = "init var of ReduceAction278";
-void INIT_ATTRIBUTES__parser___ReduceAction278(val_t p0){
+/* 2: Attribute ReduceAction404::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction404[] = "init var of ReduceAction404";
+void INIT_ATTRIBUTES__parser___ReduceAction404(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction278;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction404;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction278(void)
+val_t NEW_parser___ReduceAction404(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction278;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction404;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction278[] = "check new ReduceAction278";
-void CHECKNEW_parser___ReduceAction278(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction404[] = "check new ReduceAction404";
+void CHECKNEW_parser___ReduceAction404(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction278;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction404;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -121453,36 +142538,36 @@ void CHECKNEW_parser___ReduceAction278(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction278_parser___ReduceAction___init[] = "new ReduceAction278 parser::ReduceAction::init";
-val_t NEW_ReduceAction278_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction404_parser___ReduceAction___init[] = "new ReduceAction404 parser::ReduceAction::init";
+val_t NEW_ReduceAction404_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction278_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction404_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction278();
-  INIT_ATTRIBUTES__parser___ReduceAction278(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction404();
+  INIT_ATTRIBUTES__parser___ReduceAction404(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction278(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction404(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction279[55] = {
-  {(bigint) 1695 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction405[55] = {
+  {(bigint) 1519 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction279" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction279 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction279 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1695 /* 5: ReduceAction279 < ReduceAction279: superclass typecheck marker */},
+  {(bigint) "ReduceAction405" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction405 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction405 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1519 /* 5: ReduceAction405 < ReduceAction405: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -121496,7 +142581,7 @@ const classtable_elt_t VFT_parser___ReduceAction279[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction279 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction405 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -121527,46 +142612,46 @@ const classtable_elt_t VFT_parser___ReduceAction279[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction279 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction279___action},
+  {(bigint) 0 /* 50: ReduceAction405 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction405___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction279 < ReduceAction279: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction405 < ReduceAction405: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction279::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction279[] = "init var of ReduceAction279";
-void INIT_ATTRIBUTES__parser___ReduceAction279(val_t p0){
+/* 2: Attribute ReduceAction405::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction405[] = "init var of ReduceAction405";
+void INIT_ATTRIBUTES__parser___ReduceAction405(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction279;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction405;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction279(void)
+val_t NEW_parser___ReduceAction405(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction279;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction405;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction279[] = "check new ReduceAction279";
-void CHECKNEW_parser___ReduceAction279(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction405[] = "check new ReduceAction405";
+void CHECKNEW_parser___ReduceAction405(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction279;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction405;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -121579,36 +142664,36 @@ void CHECKNEW_parser___ReduceAction279(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction279_parser___ReduceAction___init[] = "new ReduceAction279 parser::ReduceAction::init";
-val_t NEW_ReduceAction279_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction405_parser___ReduceAction___init[] = "new ReduceAction405 parser::ReduceAction::init";
+val_t NEW_ReduceAction405_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction279_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction405_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction279();
-  INIT_ATTRIBUTES__parser___ReduceAction279(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction405();
+  INIT_ATTRIBUTES__parser___ReduceAction405(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction279(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction405(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction280[55] = {
-  {(bigint) 1687 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction406[55] = {
+  {(bigint) 1515 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction280" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction280 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction280 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1687 /* 5: ReduceAction280 < ReduceAction280: superclass typecheck marker */},
+  {(bigint) "ReduceAction406" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction406 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction406 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1515 /* 5: ReduceAction406 < ReduceAction406: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -121622,7 +142707,7 @@ const classtable_elt_t VFT_parser___ReduceAction280[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction280 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction406 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -121653,46 +142738,46 @@ const classtable_elt_t VFT_parser___ReduceAction280[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction280 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction280___action},
+  {(bigint) 0 /* 50: ReduceAction406 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction406___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction280 < ReduceAction280: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction406 < ReduceAction406: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction280::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction280[] = "init var of ReduceAction280";
-void INIT_ATTRIBUTES__parser___ReduceAction280(val_t p0){
+/* 2: Attribute ReduceAction406::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction406[] = "init var of ReduceAction406";
+void INIT_ATTRIBUTES__parser___ReduceAction406(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction280;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction406;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction280(void)
+val_t NEW_parser___ReduceAction406(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction280;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction406;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction280[] = "check new ReduceAction280";
-void CHECKNEW_parser___ReduceAction280(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction406[] = "check new ReduceAction406";
+void CHECKNEW_parser___ReduceAction406(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction280;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction406;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -121705,36 +142790,36 @@ void CHECKNEW_parser___ReduceAction280(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction280_parser___ReduceAction___init[] = "new ReduceAction280 parser::ReduceAction::init";
-val_t NEW_ReduceAction280_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction406_parser___ReduceAction___init[] = "new ReduceAction406 parser::ReduceAction::init";
+val_t NEW_ReduceAction406_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction280_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction406_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction280();
-  INIT_ATTRIBUTES__parser___ReduceAction280(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction406();
+  INIT_ATTRIBUTES__parser___ReduceAction406(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction280(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction406(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction281[55] = {
-  {(bigint) 1683 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction407[55] = {
+  {(bigint) 1511 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction281" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction281 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction281 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1683 /* 5: ReduceAction281 < ReduceAction281: superclass typecheck marker */},
+  {(bigint) "ReduceAction407" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction407 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction407 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1511 /* 5: ReduceAction407 < ReduceAction407: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -121748,7 +142833,7 @@ const classtable_elt_t VFT_parser___ReduceAction281[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction281 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction407 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -121779,46 +142864,46 @@ const classtable_elt_t VFT_parser___ReduceAction281[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction281 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction281___action},
+  {(bigint) 0 /* 50: ReduceAction407 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction407___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction281 < ReduceAction281: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction407 < ReduceAction407: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction281::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction281[] = "init var of ReduceAction281";
-void INIT_ATTRIBUTES__parser___ReduceAction281(val_t p0){
+/* 2: Attribute ReduceAction407::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction407[] = "init var of ReduceAction407";
+void INIT_ATTRIBUTES__parser___ReduceAction407(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction281;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction407;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction281(void)
+val_t NEW_parser___ReduceAction407(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction281;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction407;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction281[] = "check new ReduceAction281";
-void CHECKNEW_parser___ReduceAction281(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction407[] = "check new ReduceAction407";
+void CHECKNEW_parser___ReduceAction407(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction281;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction407;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -121831,36 +142916,36 @@ void CHECKNEW_parser___ReduceAction281(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction281_parser___ReduceAction___init[] = "new ReduceAction281 parser::ReduceAction::init";
-val_t NEW_ReduceAction281_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction407_parser___ReduceAction___init[] = "new ReduceAction407 parser::ReduceAction::init";
+val_t NEW_ReduceAction407_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction281_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction407_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction281();
-  INIT_ATTRIBUTES__parser___ReduceAction281(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction407();
+  INIT_ATTRIBUTES__parser___ReduceAction407(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction281(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction407(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction282[55] = {
-  {(bigint) 1679 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction408[55] = {
+  {(bigint) 1507 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction282" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction282 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction282 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1679 /* 5: ReduceAction282 < ReduceAction282: superclass typecheck marker */},
+  {(bigint) "ReduceAction408" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction408 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction408 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1507 /* 5: ReduceAction408 < ReduceAction408: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -121874,7 +142959,7 @@ const classtable_elt_t VFT_parser___ReduceAction282[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction282 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction408 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -121905,46 +142990,46 @@ const classtable_elt_t VFT_parser___ReduceAction282[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction282 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction282___action},
+  {(bigint) 0 /* 50: ReduceAction408 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction408___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction282 < ReduceAction282: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction408 < ReduceAction408: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction282::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction282[] = "init var of ReduceAction282";
-void INIT_ATTRIBUTES__parser___ReduceAction282(val_t p0){
+/* 2: Attribute ReduceAction408::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction408[] = "init var of ReduceAction408";
+void INIT_ATTRIBUTES__parser___ReduceAction408(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction282;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction408;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction282(void)
+val_t NEW_parser___ReduceAction408(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction282;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction408;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction282[] = "check new ReduceAction282";
-void CHECKNEW_parser___ReduceAction282(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction408[] = "check new ReduceAction408";
+void CHECKNEW_parser___ReduceAction408(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction282;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction408;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -121957,36 +143042,36 @@ void CHECKNEW_parser___ReduceAction282(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction282_parser___ReduceAction___init[] = "new ReduceAction282 parser::ReduceAction::init";
-val_t NEW_ReduceAction282_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction408_parser___ReduceAction___init[] = "new ReduceAction408 parser::ReduceAction::init";
+val_t NEW_ReduceAction408_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction282_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction408_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction282();
-  INIT_ATTRIBUTES__parser___ReduceAction282(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction408();
+  INIT_ATTRIBUTES__parser___ReduceAction408(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction282(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction408(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction283[55] = {
-  {(bigint) 1675 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction409[55] = {
+  {(bigint) 1503 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction283" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction283 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction283 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1675 /* 5: ReduceAction283 < ReduceAction283: superclass typecheck marker */},
+  {(bigint) "ReduceAction409" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction409 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction409 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1503 /* 5: ReduceAction409 < ReduceAction409: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -122000,7 +143085,7 @@ const classtable_elt_t VFT_parser___ReduceAction283[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction283 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction409 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -122031,46 +143116,46 @@ const classtable_elt_t VFT_parser___ReduceAction283[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction283 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction283___action},
+  {(bigint) 0 /* 50: ReduceAction409 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction409___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction283 < ReduceAction283: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction409 < ReduceAction409: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction283::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction283[] = "init var of ReduceAction283";
-void INIT_ATTRIBUTES__parser___ReduceAction283(val_t p0){
+/* 2: Attribute ReduceAction409::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction409[] = "init var of ReduceAction409";
+void INIT_ATTRIBUTES__parser___ReduceAction409(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction283;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction409;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction283(void)
+val_t NEW_parser___ReduceAction409(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction283;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction409;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction283[] = "check new ReduceAction283";
-void CHECKNEW_parser___ReduceAction283(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction409[] = "check new ReduceAction409";
+void CHECKNEW_parser___ReduceAction409(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction283;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction409;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -122083,36 +143168,36 @@ void CHECKNEW_parser___ReduceAction283(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction283_parser___ReduceAction___init[] = "new ReduceAction283 parser::ReduceAction::init";
-val_t NEW_ReduceAction283_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction409_parser___ReduceAction___init[] = "new ReduceAction409 parser::ReduceAction::init";
+val_t NEW_ReduceAction409_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction283_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction409_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction283();
-  INIT_ATTRIBUTES__parser___ReduceAction283(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction409();
+  INIT_ATTRIBUTES__parser___ReduceAction409(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction283(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction409(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction284[55] = {
-  {(bigint) 1671 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction410[55] = {
+  {(bigint) 1495 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction284" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction284 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction284 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1671 /* 5: ReduceAction284 < ReduceAction284: superclass typecheck marker */},
+  {(bigint) "ReduceAction410" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction410 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction410 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1495 /* 5: ReduceAction410 < ReduceAction410: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -122126,7 +143211,7 @@ const classtable_elt_t VFT_parser___ReduceAction284[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction284 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction410 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -122157,46 +143242,46 @@ const classtable_elt_t VFT_parser___ReduceAction284[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction284 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction284___action},
+  {(bigint) 0 /* 50: ReduceAction410 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction410___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction284 < ReduceAction284: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction410 < ReduceAction410: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction284::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction284[] = "init var of ReduceAction284";
-void INIT_ATTRIBUTES__parser___ReduceAction284(val_t p0){
+/* 2: Attribute ReduceAction410::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction410[] = "init var of ReduceAction410";
+void INIT_ATTRIBUTES__parser___ReduceAction410(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction284;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction410;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction284(void)
+val_t NEW_parser___ReduceAction410(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction284;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction410;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction284[] = "check new ReduceAction284";
-void CHECKNEW_parser___ReduceAction284(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction410[] = "check new ReduceAction410";
+void CHECKNEW_parser___ReduceAction410(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction284;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction410;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -122209,36 +143294,36 @@ void CHECKNEW_parser___ReduceAction284(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction284_parser___ReduceAction___init[] = "new ReduceAction284 parser::ReduceAction::init";
-val_t NEW_ReduceAction284_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction410_parser___ReduceAction___init[] = "new ReduceAction410 parser::ReduceAction::init";
+val_t NEW_ReduceAction410_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction284_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction410_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction284();
-  INIT_ATTRIBUTES__parser___ReduceAction284(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction410();
+  INIT_ATTRIBUTES__parser___ReduceAction410(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction284(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction410(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction285[55] = {
-  {(bigint) 1667 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction411[55] = {
+  {(bigint) 1491 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction285" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction285 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction285 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1667 /* 5: ReduceAction285 < ReduceAction285: superclass typecheck marker */},
+  {(bigint) "ReduceAction411" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction411 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction411 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1491 /* 5: ReduceAction411 < ReduceAction411: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -122252,7 +143337,7 @@ const classtable_elt_t VFT_parser___ReduceAction285[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction285 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction411 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -122283,46 +143368,46 @@ const classtable_elt_t VFT_parser___ReduceAction285[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction285 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction285___action},
+  {(bigint) 0 /* 50: ReduceAction411 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction411___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction285 < ReduceAction285: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction411 < ReduceAction411: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction285::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction285[] = "init var of ReduceAction285";
-void INIT_ATTRIBUTES__parser___ReduceAction285(val_t p0){
+/* 2: Attribute ReduceAction411::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction411[] = "init var of ReduceAction411";
+void INIT_ATTRIBUTES__parser___ReduceAction411(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction285;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction411;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction285(void)
+val_t NEW_parser___ReduceAction411(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction285;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction411;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction285[] = "check new ReduceAction285";
-void CHECKNEW_parser___ReduceAction285(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction411[] = "check new ReduceAction411";
+void CHECKNEW_parser___ReduceAction411(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction285;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction411;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -122335,36 +143420,36 @@ void CHECKNEW_parser___ReduceAction285(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction285_parser___ReduceAction___init[] = "new ReduceAction285 parser::ReduceAction::init";
-val_t NEW_ReduceAction285_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction411_parser___ReduceAction___init[] = "new ReduceAction411 parser::ReduceAction::init";
+val_t NEW_ReduceAction411_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction285_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction411_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction285();
-  INIT_ATTRIBUTES__parser___ReduceAction285(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction411();
+  INIT_ATTRIBUTES__parser___ReduceAction411(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction285(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction411(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction286[55] = {
-  {(bigint) 1663 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction412[55] = {
+  {(bigint) 1487 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction286" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction286 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction286 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1663 /* 5: ReduceAction286 < ReduceAction286: superclass typecheck marker */},
+  {(bigint) "ReduceAction412" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction412 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction412 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1487 /* 5: ReduceAction412 < ReduceAction412: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -122378,7 +143463,7 @@ const classtable_elt_t VFT_parser___ReduceAction286[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction286 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction412 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -122409,46 +143494,46 @@ const classtable_elt_t VFT_parser___ReduceAction286[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction286 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction286___action},
+  {(bigint) 0 /* 50: ReduceAction412 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction412___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction286 < ReduceAction286: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction412 < ReduceAction412: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction286::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction286[] = "init var of ReduceAction286";
-void INIT_ATTRIBUTES__parser___ReduceAction286(val_t p0){
+/* 2: Attribute ReduceAction412::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction412[] = "init var of ReduceAction412";
+void INIT_ATTRIBUTES__parser___ReduceAction412(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction286;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction412;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction286(void)
+val_t NEW_parser___ReduceAction412(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction286;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction412;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction286[] = "check new ReduceAction286";
-void CHECKNEW_parser___ReduceAction286(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction412[] = "check new ReduceAction412";
+void CHECKNEW_parser___ReduceAction412(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction286;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction412;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -122461,36 +143546,36 @@ void CHECKNEW_parser___ReduceAction286(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction286_parser___ReduceAction___init[] = "new ReduceAction286 parser::ReduceAction::init";
-val_t NEW_ReduceAction286_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction412_parser___ReduceAction___init[] = "new ReduceAction412 parser::ReduceAction::init";
+val_t NEW_ReduceAction412_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction286_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction412_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction286();
-  INIT_ATTRIBUTES__parser___ReduceAction286(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction412();
+  INIT_ATTRIBUTES__parser___ReduceAction412(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction286(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction412(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction287[55] = {
-  {(bigint) 1659 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction413[55] = {
+  {(bigint) 1483 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction287" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction287 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction287 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1659 /* 5: ReduceAction287 < ReduceAction287: superclass typecheck marker */},
+  {(bigint) "ReduceAction413" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction413 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction413 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1483 /* 5: ReduceAction413 < ReduceAction413: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -122504,7 +143589,7 @@ const classtable_elt_t VFT_parser___ReduceAction287[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction287 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction413 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -122535,46 +143620,46 @@ const classtable_elt_t VFT_parser___ReduceAction287[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction287 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction287___action},
+  {(bigint) 0 /* 50: ReduceAction413 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction413___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction287 < ReduceAction287: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction413 < ReduceAction413: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction287::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction287[] = "init var of ReduceAction287";
-void INIT_ATTRIBUTES__parser___ReduceAction287(val_t p0){
+/* 2: Attribute ReduceAction413::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction413[] = "init var of ReduceAction413";
+void INIT_ATTRIBUTES__parser___ReduceAction413(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction287;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction413;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction287(void)
+val_t NEW_parser___ReduceAction413(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction287;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction413;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction287[] = "check new ReduceAction287";
-void CHECKNEW_parser___ReduceAction287(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction413[] = "check new ReduceAction413";
+void CHECKNEW_parser___ReduceAction413(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction287;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction413;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -122587,36 +143672,36 @@ void CHECKNEW_parser___ReduceAction287(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction287_parser___ReduceAction___init[] = "new ReduceAction287 parser::ReduceAction::init";
-val_t NEW_ReduceAction287_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction413_parser___ReduceAction___init[] = "new ReduceAction413 parser::ReduceAction::init";
+val_t NEW_ReduceAction413_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction287_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction413_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction287();
-  INIT_ATTRIBUTES__parser___ReduceAction287(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction413();
+  INIT_ATTRIBUTES__parser___ReduceAction413(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction287(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction413(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction288[55] = {
-  {(bigint) 1655 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction414[55] = {
+  {(bigint) 1479 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction288" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction288 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction288 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1655 /* 5: ReduceAction288 < ReduceAction288: superclass typecheck marker */},
+  {(bigint) "ReduceAction414" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction414 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction414 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1479 /* 5: ReduceAction414 < ReduceAction414: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -122630,7 +143715,7 @@ const classtable_elt_t VFT_parser___ReduceAction288[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction288 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction414 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -122661,46 +143746,46 @@ const classtable_elt_t VFT_parser___ReduceAction288[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction288 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction288___action},
+  {(bigint) 0 /* 50: ReduceAction414 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction414___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction288 < ReduceAction288: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction414 < ReduceAction414: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction288::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction288[] = "init var of ReduceAction288";
-void INIT_ATTRIBUTES__parser___ReduceAction288(val_t p0){
+/* 2: Attribute ReduceAction414::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction414[] = "init var of ReduceAction414";
+void INIT_ATTRIBUTES__parser___ReduceAction414(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction288;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction414;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction288(void)
+val_t NEW_parser___ReduceAction414(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction288;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction414;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction288[] = "check new ReduceAction288";
-void CHECKNEW_parser___ReduceAction288(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction414[] = "check new ReduceAction414";
+void CHECKNEW_parser___ReduceAction414(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction288;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction414;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -122713,36 +143798,36 @@ void CHECKNEW_parser___ReduceAction288(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction288_parser___ReduceAction___init[] = "new ReduceAction288 parser::ReduceAction::init";
-val_t NEW_ReduceAction288_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction414_parser___ReduceAction___init[] = "new ReduceAction414 parser::ReduceAction::init";
+val_t NEW_ReduceAction414_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction288_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction414_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction288();
-  INIT_ATTRIBUTES__parser___ReduceAction288(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction414();
+  INIT_ATTRIBUTES__parser___ReduceAction414(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction288(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction414(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction289[55] = {
-  {(bigint) 1651 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction416[55] = {
+  {(bigint) 1475 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction289" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction289 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction289 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1651 /* 5: ReduceAction289 < ReduceAction289: superclass typecheck marker */},
+  {(bigint) "ReduceAction416" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction416 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction416 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1475 /* 5: ReduceAction416 < ReduceAction416: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -122756,7 +143841,7 @@ const classtable_elt_t VFT_parser___ReduceAction289[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction289 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction416 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -122787,46 +143872,46 @@ const classtable_elt_t VFT_parser___ReduceAction289[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction289 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction289___action},
+  {(bigint) 0 /* 50: ReduceAction416 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction416___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction289 < ReduceAction289: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction416 < ReduceAction416: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction289::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction289[] = "init var of ReduceAction289";
-void INIT_ATTRIBUTES__parser___ReduceAction289(val_t p0){
+/* 2: Attribute ReduceAction416::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction416[] = "init var of ReduceAction416";
+void INIT_ATTRIBUTES__parser___ReduceAction416(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction289;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction416;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction289(void)
+val_t NEW_parser___ReduceAction416(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction289;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction416;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction289[] = "check new ReduceAction289";
-void CHECKNEW_parser___ReduceAction289(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction416[] = "check new ReduceAction416";
+void CHECKNEW_parser___ReduceAction416(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction289;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction416;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -122839,36 +143924,36 @@ void CHECKNEW_parser___ReduceAction289(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction289_parser___ReduceAction___init[] = "new ReduceAction289 parser::ReduceAction::init";
-val_t NEW_ReduceAction289_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction416_parser___ReduceAction___init[] = "new ReduceAction416 parser::ReduceAction::init";
+val_t NEW_ReduceAction416_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction289_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction416_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction289();
-  INIT_ATTRIBUTES__parser___ReduceAction289(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction416();
+  INIT_ATTRIBUTES__parser___ReduceAction416(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction289(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction416(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction290[55] = {
-  {(bigint) 1643 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction417[55] = {
+  {(bigint) 1471 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction290" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction290 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction290 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1643 /* 5: ReduceAction290 < ReduceAction290: superclass typecheck marker */},
+  {(bigint) "ReduceAction417" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction417 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction417 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1471 /* 5: ReduceAction417 < ReduceAction417: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -122882,7 +143967,7 @@ const classtable_elt_t VFT_parser___ReduceAction290[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction290 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction417 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -122913,46 +143998,46 @@ const classtable_elt_t VFT_parser___ReduceAction290[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction290 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction290___action},
+  {(bigint) 0 /* 50: ReduceAction417 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction417___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction290 < ReduceAction290: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction417 < ReduceAction417: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction290::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction290[] = "init var of ReduceAction290";
-void INIT_ATTRIBUTES__parser___ReduceAction290(val_t p0){
+/* 2: Attribute ReduceAction417::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction417[] = "init var of ReduceAction417";
+void INIT_ATTRIBUTES__parser___ReduceAction417(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction290;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction417;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction290(void)
+val_t NEW_parser___ReduceAction417(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction290;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction417;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction290[] = "check new ReduceAction290";
-void CHECKNEW_parser___ReduceAction290(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction417[] = "check new ReduceAction417";
+void CHECKNEW_parser___ReduceAction417(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction290;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction417;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -122965,36 +144050,36 @@ void CHECKNEW_parser___ReduceAction290(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction290_parser___ReduceAction___init[] = "new ReduceAction290 parser::ReduceAction::init";
-val_t NEW_ReduceAction290_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction417_parser___ReduceAction___init[] = "new ReduceAction417 parser::ReduceAction::init";
+val_t NEW_ReduceAction417_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction290_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction417_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction290();
-  INIT_ATTRIBUTES__parser___ReduceAction290(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction417();
+  INIT_ATTRIBUTES__parser___ReduceAction417(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction290(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction417(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction291[55] = {
-  {(bigint) 1639 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction418[55] = {
+  {(bigint) 1467 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction291" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction291 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction291 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1639 /* 5: ReduceAction291 < ReduceAction291: superclass typecheck marker */},
+  {(bigint) "ReduceAction418" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction418 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction418 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1467 /* 5: ReduceAction418 < ReduceAction418: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -123008,7 +144093,7 @@ const classtable_elt_t VFT_parser___ReduceAction291[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction291 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction418 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -123039,46 +144124,46 @@ const classtable_elt_t VFT_parser___ReduceAction291[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction291 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction291___action},
+  {(bigint) 0 /* 50: ReduceAction418 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction418___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction291 < ReduceAction291: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction418 < ReduceAction418: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction291::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction291[] = "init var of ReduceAction291";
-void INIT_ATTRIBUTES__parser___ReduceAction291(val_t p0){
+/* 2: Attribute ReduceAction418::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction418[] = "init var of ReduceAction418";
+void INIT_ATTRIBUTES__parser___ReduceAction418(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction291;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction418;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction291(void)
+val_t NEW_parser___ReduceAction418(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction291;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction418;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction291[] = "check new ReduceAction291";
-void CHECKNEW_parser___ReduceAction291(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction418[] = "check new ReduceAction418";
+void CHECKNEW_parser___ReduceAction418(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction291;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction418;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -123091,36 +144176,36 @@ void CHECKNEW_parser___ReduceAction291(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction291_parser___ReduceAction___init[] = "new ReduceAction291 parser::ReduceAction::init";
-val_t NEW_ReduceAction291_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction418_parser___ReduceAction___init[] = "new ReduceAction418 parser::ReduceAction::init";
+val_t NEW_ReduceAction418_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction291_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction418_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction291();
-  INIT_ATTRIBUTES__parser___ReduceAction291(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction418();
+  INIT_ATTRIBUTES__parser___ReduceAction418(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction291(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction418(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction292[55] = {
-  {(bigint) 1635 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction419[55] = {
+  {(bigint) 1463 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction292" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction292 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction292 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1635 /* 5: ReduceAction292 < ReduceAction292: superclass typecheck marker */},
+  {(bigint) "ReduceAction419" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction419 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction419 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1463 /* 5: ReduceAction419 < ReduceAction419: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -123134,7 +144219,7 @@ const classtable_elt_t VFT_parser___ReduceAction292[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction292 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction419 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -123165,46 +144250,46 @@ const classtable_elt_t VFT_parser___ReduceAction292[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction292 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction292___action},
+  {(bigint) 0 /* 50: ReduceAction419 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction419___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction292 < ReduceAction292: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction419 < ReduceAction419: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction292::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction292[] = "init var of ReduceAction292";
-void INIT_ATTRIBUTES__parser___ReduceAction292(val_t p0){
+/* 2: Attribute ReduceAction419::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction419[] = "init var of ReduceAction419";
+void INIT_ATTRIBUTES__parser___ReduceAction419(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction292;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction419;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction292(void)
+val_t NEW_parser___ReduceAction419(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction292;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction419;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction292[] = "check new ReduceAction292";
-void CHECKNEW_parser___ReduceAction292(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction419[] = "check new ReduceAction419";
+void CHECKNEW_parser___ReduceAction419(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction292;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction419;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -123217,36 +144302,36 @@ void CHECKNEW_parser___ReduceAction292(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction292_parser___ReduceAction___init[] = "new ReduceAction292 parser::ReduceAction::init";
-val_t NEW_ReduceAction292_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction419_parser___ReduceAction___init[] = "new ReduceAction419 parser::ReduceAction::init";
+val_t NEW_ReduceAction419_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction292_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction419_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction292();
-  INIT_ATTRIBUTES__parser___ReduceAction292(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction419();
+  INIT_ATTRIBUTES__parser___ReduceAction419(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction292(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction419(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction293[55] = {
-  {(bigint) 1631 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction420[55] = {
+  {(bigint) 1455 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction293" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction293 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction293 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1631 /* 5: ReduceAction293 < ReduceAction293: superclass typecheck marker */},
+  {(bigint) "ReduceAction420" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction420 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction420 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1455 /* 5: ReduceAction420 < ReduceAction420: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -123260,7 +144345,7 @@ const classtable_elt_t VFT_parser___ReduceAction293[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction293 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction420 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -123291,46 +144376,46 @@ const classtable_elt_t VFT_parser___ReduceAction293[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction293 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction293___action},
+  {(bigint) 0 /* 50: ReduceAction420 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction420___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction293 < ReduceAction293: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction420 < ReduceAction420: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction293::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction293[] = "init var of ReduceAction293";
-void INIT_ATTRIBUTES__parser___ReduceAction293(val_t p0){
+/* 2: Attribute ReduceAction420::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction420[] = "init var of ReduceAction420";
+void INIT_ATTRIBUTES__parser___ReduceAction420(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction293;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction420;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction293(void)
+val_t NEW_parser___ReduceAction420(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction293;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction420;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction293[] = "check new ReduceAction293";
-void CHECKNEW_parser___ReduceAction293(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction420[] = "check new ReduceAction420";
+void CHECKNEW_parser___ReduceAction420(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction293;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction420;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -123343,36 +144428,36 @@ void CHECKNEW_parser___ReduceAction293(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction293_parser___ReduceAction___init[] = "new ReduceAction293 parser::ReduceAction::init";
-val_t NEW_ReduceAction293_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction420_parser___ReduceAction___init[] = "new ReduceAction420 parser::ReduceAction::init";
+val_t NEW_ReduceAction420_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction293_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction420_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction293();
-  INIT_ATTRIBUTES__parser___ReduceAction293(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction420();
+  INIT_ATTRIBUTES__parser___ReduceAction420(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction293(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction420(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction294[55] = {
-  {(bigint) 1627 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction421[55] = {
+  {(bigint) 1451 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction294" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction294 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction294 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1627 /* 5: ReduceAction294 < ReduceAction294: superclass typecheck marker */},
+  {(bigint) "ReduceAction421" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction421 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction421 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1451 /* 5: ReduceAction421 < ReduceAction421: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -123386,7 +144471,7 @@ const classtable_elt_t VFT_parser___ReduceAction294[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction294 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction421 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -123417,46 +144502,46 @@ const classtable_elt_t VFT_parser___ReduceAction294[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction294 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction294___action},
+  {(bigint) 0 /* 50: ReduceAction421 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction421___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction294 < ReduceAction294: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction421 < ReduceAction421: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction294::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction294[] = "init var of ReduceAction294";
-void INIT_ATTRIBUTES__parser___ReduceAction294(val_t p0){
+/* 2: Attribute ReduceAction421::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction421[] = "init var of ReduceAction421";
+void INIT_ATTRIBUTES__parser___ReduceAction421(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction294;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction421;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction294(void)
+val_t NEW_parser___ReduceAction421(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction294;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction421;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction294[] = "check new ReduceAction294";
-void CHECKNEW_parser___ReduceAction294(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction421[] = "check new ReduceAction421";
+void CHECKNEW_parser___ReduceAction421(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction294;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction421;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -123469,36 +144554,36 @@ void CHECKNEW_parser___ReduceAction294(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction294_parser___ReduceAction___init[] = "new ReduceAction294 parser::ReduceAction::init";
-val_t NEW_ReduceAction294_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction421_parser___ReduceAction___init[] = "new ReduceAction421 parser::ReduceAction::init";
+val_t NEW_ReduceAction421_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction294_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction421_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction294();
-  INIT_ATTRIBUTES__parser___ReduceAction294(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction421();
+  INIT_ATTRIBUTES__parser___ReduceAction421(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction294(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction421(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction295[55] = {
-  {(bigint) 1623 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction422[55] = {
+  {(bigint) 1447 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction295" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction295 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction295 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1623 /* 5: ReduceAction295 < ReduceAction295: superclass typecheck marker */},
+  {(bigint) "ReduceAction422" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction422 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction422 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1447 /* 5: ReduceAction422 < ReduceAction422: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -123512,7 +144597,7 @@ const classtable_elt_t VFT_parser___ReduceAction295[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction295 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction422 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -123543,46 +144628,46 @@ const classtable_elt_t VFT_parser___ReduceAction295[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction295 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction295___action},
+  {(bigint) 0 /* 50: ReduceAction422 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction422___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction295 < ReduceAction295: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction422 < ReduceAction422: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction295::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction295[] = "init var of ReduceAction295";
-void INIT_ATTRIBUTES__parser___ReduceAction295(val_t p0){
+/* 2: Attribute ReduceAction422::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction422[] = "init var of ReduceAction422";
+void INIT_ATTRIBUTES__parser___ReduceAction422(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction295;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction422;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction295(void)
+val_t NEW_parser___ReduceAction422(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction295;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction422;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction295[] = "check new ReduceAction295";
-void CHECKNEW_parser___ReduceAction295(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction422[] = "check new ReduceAction422";
+void CHECKNEW_parser___ReduceAction422(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction295;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction422;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -123595,36 +144680,36 @@ void CHECKNEW_parser___ReduceAction295(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction295_parser___ReduceAction___init[] = "new ReduceAction295 parser::ReduceAction::init";
-val_t NEW_ReduceAction295_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction422_parser___ReduceAction___init[] = "new ReduceAction422 parser::ReduceAction::init";
+val_t NEW_ReduceAction422_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction295_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction422_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction295();
-  INIT_ATTRIBUTES__parser___ReduceAction295(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction422();
+  INIT_ATTRIBUTES__parser___ReduceAction422(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction295(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction422(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction296[55] = {
-  {(bigint) 1619 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction423[55] = {
+  {(bigint) 1443 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction296" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction296 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction296 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1619 /* 5: ReduceAction296 < ReduceAction296: superclass typecheck marker */},
+  {(bigint) "ReduceAction423" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction423 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction423 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1443 /* 5: ReduceAction423 < ReduceAction423: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -123638,7 +144723,7 @@ const classtable_elt_t VFT_parser___ReduceAction296[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction296 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction423 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -123669,46 +144754,46 @@ const classtable_elt_t VFT_parser___ReduceAction296[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction296 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction296___action},
+  {(bigint) 0 /* 50: ReduceAction423 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction423___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction296 < ReduceAction296: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction423 < ReduceAction423: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction296::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction296[] = "init var of ReduceAction296";
-void INIT_ATTRIBUTES__parser___ReduceAction296(val_t p0){
+/* 2: Attribute ReduceAction423::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction423[] = "init var of ReduceAction423";
+void INIT_ATTRIBUTES__parser___ReduceAction423(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction296;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction423;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction296(void)
+val_t NEW_parser___ReduceAction423(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction296;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction423;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction296[] = "check new ReduceAction296";
-void CHECKNEW_parser___ReduceAction296(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction423[] = "check new ReduceAction423";
+void CHECKNEW_parser___ReduceAction423(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction296;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction423;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -123721,36 +144806,36 @@ void CHECKNEW_parser___ReduceAction296(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction296_parser___ReduceAction___init[] = "new ReduceAction296 parser::ReduceAction::init";
-val_t NEW_ReduceAction296_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction423_parser___ReduceAction___init[] = "new ReduceAction423 parser::ReduceAction::init";
+val_t NEW_ReduceAction423_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction296_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction423_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction296();
-  INIT_ATTRIBUTES__parser___ReduceAction296(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction423();
+  INIT_ATTRIBUTES__parser___ReduceAction423(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction296(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction423(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction297[55] = {
-  {(bigint) 1615 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction424[55] = {
+  {(bigint) 1439 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction297" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction297 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction297 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1615 /* 5: ReduceAction297 < ReduceAction297: superclass typecheck marker */},
+  {(bigint) "ReduceAction424" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction424 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction424 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1439 /* 5: ReduceAction424 < ReduceAction424: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -123764,7 +144849,7 @@ const classtable_elt_t VFT_parser___ReduceAction297[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction297 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction424 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -123795,46 +144880,46 @@ const classtable_elt_t VFT_parser___ReduceAction297[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction297 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction297___action},
+  {(bigint) 0 /* 50: ReduceAction424 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction424___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction297 < ReduceAction297: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction424 < ReduceAction424: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction297::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction297[] = "init var of ReduceAction297";
-void INIT_ATTRIBUTES__parser___ReduceAction297(val_t p0){
+/* 2: Attribute ReduceAction424::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction424[] = "init var of ReduceAction424";
+void INIT_ATTRIBUTES__parser___ReduceAction424(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction297;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction424;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction297(void)
+val_t NEW_parser___ReduceAction424(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction297;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction424;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction297[] = "check new ReduceAction297";
-void CHECKNEW_parser___ReduceAction297(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction424[] = "check new ReduceAction424";
+void CHECKNEW_parser___ReduceAction424(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction297;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction424;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -123847,36 +144932,36 @@ void CHECKNEW_parser___ReduceAction297(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction297_parser___ReduceAction___init[] = "new ReduceAction297 parser::ReduceAction::init";
-val_t NEW_ReduceAction297_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction424_parser___ReduceAction___init[] = "new ReduceAction424 parser::ReduceAction::init";
+val_t NEW_ReduceAction424_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction297_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction424_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction297();
-  INIT_ATTRIBUTES__parser___ReduceAction297(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction424();
+  INIT_ATTRIBUTES__parser___ReduceAction424(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction297(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction424(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction298[55] = {
-  {(bigint) 1611 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction425[55] = {
+  {(bigint) 1435 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction298" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction298 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction298 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1611 /* 5: ReduceAction298 < ReduceAction298: superclass typecheck marker */},
+  {(bigint) "ReduceAction425" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction425 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction425 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1435 /* 5: ReduceAction425 < ReduceAction425: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -123890,7 +144975,7 @@ const classtable_elt_t VFT_parser___ReduceAction298[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction298 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction425 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -123921,46 +145006,46 @@ const classtable_elt_t VFT_parser___ReduceAction298[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction298 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction298___action},
+  {(bigint) 0 /* 50: ReduceAction425 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction425___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction298 < ReduceAction298: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction425 < ReduceAction425: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction298::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction298[] = "init var of ReduceAction298";
-void INIT_ATTRIBUTES__parser___ReduceAction298(val_t p0){
+/* 2: Attribute ReduceAction425::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction425[] = "init var of ReduceAction425";
+void INIT_ATTRIBUTES__parser___ReduceAction425(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction298;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction425;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction298(void)
+val_t NEW_parser___ReduceAction425(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction298;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction425;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction298[] = "check new ReduceAction298";
-void CHECKNEW_parser___ReduceAction298(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction425[] = "check new ReduceAction425";
+void CHECKNEW_parser___ReduceAction425(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction298;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction425;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -123973,36 +145058,36 @@ void CHECKNEW_parser___ReduceAction298(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction298_parser___ReduceAction___init[] = "new ReduceAction298 parser::ReduceAction::init";
-val_t NEW_ReduceAction298_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction425_parser___ReduceAction___init[] = "new ReduceAction425 parser::ReduceAction::init";
+val_t NEW_ReduceAction425_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction298_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction425_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction298();
-  INIT_ATTRIBUTES__parser___ReduceAction298(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction425();
+  INIT_ATTRIBUTES__parser___ReduceAction425(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction298(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction425(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction299[55] = {
-  {(bigint) 1607 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction429[55] = {
+  {(bigint) 1431 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction299" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction299 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction299 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1607 /* 5: ReduceAction299 < ReduceAction299: superclass typecheck marker */},
+  {(bigint) "ReduceAction429" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction429 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction429 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1431 /* 5: ReduceAction429 < ReduceAction429: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -124016,7 +145101,7 @@ const classtable_elt_t VFT_parser___ReduceAction299[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction299 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction429 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -124047,46 +145132,46 @@ const classtable_elt_t VFT_parser___ReduceAction299[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction299 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction299___action},
+  {(bigint) 0 /* 50: ReduceAction429 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction429___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction299 < ReduceAction299: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction429 < ReduceAction429: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction299::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction299[] = "init var of ReduceAction299";
-void INIT_ATTRIBUTES__parser___ReduceAction299(val_t p0){
+/* 2: Attribute ReduceAction429::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction429[] = "init var of ReduceAction429";
+void INIT_ATTRIBUTES__parser___ReduceAction429(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction299;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction429;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction299(void)
+val_t NEW_parser___ReduceAction429(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction299;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction429;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction299[] = "check new ReduceAction299";
-void CHECKNEW_parser___ReduceAction299(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction429[] = "check new ReduceAction429";
+void CHECKNEW_parser___ReduceAction429(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction299;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction429;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -124099,36 +145184,36 @@ void CHECKNEW_parser___ReduceAction299(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction299_parser___ReduceAction___init[] = "new ReduceAction299 parser::ReduceAction::init";
-val_t NEW_ReduceAction299_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction429_parser___ReduceAction___init[] = "new ReduceAction429 parser::ReduceAction::init";
+val_t NEW_ReduceAction429_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction299_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction429_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction299();
-  INIT_ATTRIBUTES__parser___ReduceAction299(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction429();
+  INIT_ATTRIBUTES__parser___ReduceAction429(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction299(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction429(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction300[55] = {
-  {(bigint) 1595 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction430[55] = {
+  {(bigint) 1423 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction300" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction300 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction300 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1595 /* 5: ReduceAction300 < ReduceAction300: superclass typecheck marker */},
+  {(bigint) "ReduceAction430" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction430 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction430 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1423 /* 5: ReduceAction430 < ReduceAction430: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -124142,7 +145227,7 @@ const classtable_elt_t VFT_parser___ReduceAction300[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction300 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction430 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -124173,46 +145258,46 @@ const classtable_elt_t VFT_parser___ReduceAction300[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction300 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction300___action},
+  {(bigint) 0 /* 50: ReduceAction430 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction430___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction300 < ReduceAction300: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction430 < ReduceAction430: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction300::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction300[] = "init var of ReduceAction300";
-void INIT_ATTRIBUTES__parser___ReduceAction300(val_t p0){
+/* 2: Attribute ReduceAction430::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction430[] = "init var of ReduceAction430";
+void INIT_ATTRIBUTES__parser___ReduceAction430(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction300;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction430;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction300(void)
+val_t NEW_parser___ReduceAction430(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction300;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction430;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction300[] = "check new ReduceAction300";
-void CHECKNEW_parser___ReduceAction300(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction430[] = "check new ReduceAction430";
+void CHECKNEW_parser___ReduceAction430(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction300;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction430;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -124225,36 +145310,36 @@ void CHECKNEW_parser___ReduceAction300(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction300_parser___ReduceAction___init[] = "new ReduceAction300 parser::ReduceAction::init";
-val_t NEW_ReduceAction300_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction430_parser___ReduceAction___init[] = "new ReduceAction430 parser::ReduceAction::init";
+val_t NEW_ReduceAction430_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction300_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction430_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction300();
-  INIT_ATTRIBUTES__parser___ReduceAction300(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction430();
+  INIT_ATTRIBUTES__parser___ReduceAction430(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction300(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction430(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction301[55] = {
-  {(bigint) 1591 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction431[55] = {
+  {(bigint) 1419 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction301" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction301 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction301 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1591 /* 5: ReduceAction301 < ReduceAction301: superclass typecheck marker */},
+  {(bigint) "ReduceAction431" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction431 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction431 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1419 /* 5: ReduceAction431 < ReduceAction431: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -124268,7 +145353,7 @@ const classtable_elt_t VFT_parser___ReduceAction301[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction301 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction431 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -124299,46 +145384,46 @@ const classtable_elt_t VFT_parser___ReduceAction301[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction301 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction301___action},
+  {(bigint) 0 /* 50: ReduceAction431 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction431___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction301 < ReduceAction301: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction431 < ReduceAction431: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction301::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction301[] = "init var of ReduceAction301";
-void INIT_ATTRIBUTES__parser___ReduceAction301(val_t p0){
+/* 2: Attribute ReduceAction431::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction431[] = "init var of ReduceAction431";
+void INIT_ATTRIBUTES__parser___ReduceAction431(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction301;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction431;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction301(void)
+val_t NEW_parser___ReduceAction431(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction301;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction431;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction301[] = "check new ReduceAction301";
-void CHECKNEW_parser___ReduceAction301(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction431[] = "check new ReduceAction431";
+void CHECKNEW_parser___ReduceAction431(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction301;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction431;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -124351,36 +145436,36 @@ void CHECKNEW_parser___ReduceAction301(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction301_parser___ReduceAction___init[] = "new ReduceAction301 parser::ReduceAction::init";
-val_t NEW_ReduceAction301_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction431_parser___ReduceAction___init[] = "new ReduceAction431 parser::ReduceAction::init";
+val_t NEW_ReduceAction431_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction301_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction431_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction301();
-  INIT_ATTRIBUTES__parser___ReduceAction301(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction431();
+  INIT_ATTRIBUTES__parser___ReduceAction431(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction301(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction431(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction302[55] = {
-  {(bigint) 1587 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction432[55] = {
+  {(bigint) 1415 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction302" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction302 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction302 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1587 /* 5: ReduceAction302 < ReduceAction302: superclass typecheck marker */},
+  {(bigint) "ReduceAction432" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction432 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction432 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1415 /* 5: ReduceAction432 < ReduceAction432: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -124394,7 +145479,7 @@ const classtable_elt_t VFT_parser___ReduceAction302[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction302 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction432 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -124425,46 +145510,46 @@ const classtable_elt_t VFT_parser___ReduceAction302[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction302 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction302___action},
+  {(bigint) 0 /* 50: ReduceAction432 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction432___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction302 < ReduceAction302: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction432 < ReduceAction432: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction302::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction302[] = "init var of ReduceAction302";
-void INIT_ATTRIBUTES__parser___ReduceAction302(val_t p0){
+/* 2: Attribute ReduceAction432::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction432[] = "init var of ReduceAction432";
+void INIT_ATTRIBUTES__parser___ReduceAction432(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction302;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction432;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction302(void)
+val_t NEW_parser___ReduceAction432(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction302;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction432;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction302[] = "check new ReduceAction302";
-void CHECKNEW_parser___ReduceAction302(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction432[] = "check new ReduceAction432";
+void CHECKNEW_parser___ReduceAction432(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction302;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction432;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -124477,36 +145562,36 @@ void CHECKNEW_parser___ReduceAction302(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction302_parser___ReduceAction___init[] = "new ReduceAction302 parser::ReduceAction::init";
-val_t NEW_ReduceAction302_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction432_parser___ReduceAction___init[] = "new ReduceAction432 parser::ReduceAction::init";
+val_t NEW_ReduceAction432_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction302_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction432_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction302();
-  INIT_ATTRIBUTES__parser___ReduceAction302(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction432();
+  INIT_ATTRIBUTES__parser___ReduceAction432(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction302(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction432(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction303[55] = {
-  {(bigint) 1583 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction433[55] = {
+  {(bigint) 1411 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction303" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction303 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction303 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1583 /* 5: ReduceAction303 < ReduceAction303: superclass typecheck marker */},
+  {(bigint) "ReduceAction433" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction433 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction433 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1411 /* 5: ReduceAction433 < ReduceAction433: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -124520,7 +145605,7 @@ const classtable_elt_t VFT_parser___ReduceAction303[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction303 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction433 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -124551,46 +145636,46 @@ const classtable_elt_t VFT_parser___ReduceAction303[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction303 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction303___action},
+  {(bigint) 0 /* 50: ReduceAction433 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction433___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction303 < ReduceAction303: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction433 < ReduceAction433: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction303::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction303[] = "init var of ReduceAction303";
-void INIT_ATTRIBUTES__parser___ReduceAction303(val_t p0){
+/* 2: Attribute ReduceAction433::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction433[] = "init var of ReduceAction433";
+void INIT_ATTRIBUTES__parser___ReduceAction433(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction303;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction433;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction303(void)
+val_t NEW_parser___ReduceAction433(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction303;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction433;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction303[] = "check new ReduceAction303";
-void CHECKNEW_parser___ReduceAction303(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction433[] = "check new ReduceAction433";
+void CHECKNEW_parser___ReduceAction433(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction303;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction433;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -124603,36 +145688,36 @@ void CHECKNEW_parser___ReduceAction303(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction303_parser___ReduceAction___init[] = "new ReduceAction303 parser::ReduceAction::init";
-val_t NEW_ReduceAction303_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction433_parser___ReduceAction___init[] = "new ReduceAction433 parser::ReduceAction::init";
+val_t NEW_ReduceAction433_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction303_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction433_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction303();
-  INIT_ATTRIBUTES__parser___ReduceAction303(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction433();
+  INIT_ATTRIBUTES__parser___ReduceAction433(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction303(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction433(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction304[55] = {
-  {(bigint) 1579 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction434[55] = {
+  {(bigint) 1407 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction304" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction304 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction304 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1579 /* 5: ReduceAction304 < ReduceAction304: superclass typecheck marker */},
+  {(bigint) "ReduceAction434" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction434 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction434 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1407 /* 5: ReduceAction434 < ReduceAction434: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -124646,7 +145731,7 @@ const classtable_elt_t VFT_parser___ReduceAction304[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction304 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction434 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -124677,46 +145762,46 @@ const classtable_elt_t VFT_parser___ReduceAction304[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction304 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction304___action},
+  {(bigint) 0 /* 50: ReduceAction434 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction434___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction304 < ReduceAction304: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction434 < ReduceAction434: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction304::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction304[] = "init var of ReduceAction304";
-void INIT_ATTRIBUTES__parser___ReduceAction304(val_t p0){
+/* 2: Attribute ReduceAction434::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction434[] = "init var of ReduceAction434";
+void INIT_ATTRIBUTES__parser___ReduceAction434(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction304;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction434;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction304(void)
+val_t NEW_parser___ReduceAction434(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction304;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction434;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction304[] = "check new ReduceAction304";
-void CHECKNEW_parser___ReduceAction304(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction434[] = "check new ReduceAction434";
+void CHECKNEW_parser___ReduceAction434(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction304;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction434;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -124729,36 +145814,36 @@ void CHECKNEW_parser___ReduceAction304(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction304_parser___ReduceAction___init[] = "new ReduceAction304 parser::ReduceAction::init";
-val_t NEW_ReduceAction304_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction434_parser___ReduceAction___init[] = "new ReduceAction434 parser::ReduceAction::init";
+val_t NEW_ReduceAction434_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction304_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction434_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction304();
-  INIT_ATTRIBUTES__parser___ReduceAction304(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction434();
+  INIT_ATTRIBUTES__parser___ReduceAction434(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction304(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction434(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction305[55] = {
-  {(bigint) 1575 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction435[55] = {
+  {(bigint) 1403 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction305" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction305 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction305 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1575 /* 5: ReduceAction305 < ReduceAction305: superclass typecheck marker */},
+  {(bigint) "ReduceAction435" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction435 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction435 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1403 /* 5: ReduceAction435 < ReduceAction435: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -124772,7 +145857,7 @@ const classtable_elt_t VFT_parser___ReduceAction305[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction305 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction435 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -124803,46 +145888,46 @@ const classtable_elt_t VFT_parser___ReduceAction305[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction305 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction305___action},
+  {(bigint) 0 /* 50: ReduceAction435 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction435___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction305 < ReduceAction305: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction435 < ReduceAction435: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction305::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction305[] = "init var of ReduceAction305";
-void INIT_ATTRIBUTES__parser___ReduceAction305(val_t p0){
+/* 2: Attribute ReduceAction435::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction435[] = "init var of ReduceAction435";
+void INIT_ATTRIBUTES__parser___ReduceAction435(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction305;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction435;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction305(void)
+val_t NEW_parser___ReduceAction435(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction305;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction435;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction305[] = "check new ReduceAction305";
-void CHECKNEW_parser___ReduceAction305(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction435[] = "check new ReduceAction435";
+void CHECKNEW_parser___ReduceAction435(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction305;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction435;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -124855,36 +145940,36 @@ void CHECKNEW_parser___ReduceAction305(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction305_parser___ReduceAction___init[] = "new ReduceAction305 parser::ReduceAction::init";
-val_t NEW_ReduceAction305_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction435_parser___ReduceAction___init[] = "new ReduceAction435 parser::ReduceAction::init";
+val_t NEW_ReduceAction435_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction305_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction435_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction305();
-  INIT_ATTRIBUTES__parser___ReduceAction305(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction435();
+  INIT_ATTRIBUTES__parser___ReduceAction435(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction305(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction435(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction306[55] = {
-  {(bigint) 1571 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction436[55] = {
+  {(bigint) 1399 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction306" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction306 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction306 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1571 /* 5: ReduceAction306 < ReduceAction306: superclass typecheck marker */},
+  {(bigint) "ReduceAction436" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction436 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction436 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1399 /* 5: ReduceAction436 < ReduceAction436: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -124898,7 +145983,7 @@ const classtable_elt_t VFT_parser___ReduceAction306[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction306 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction436 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -124929,46 +146014,46 @@ const classtable_elt_t VFT_parser___ReduceAction306[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction306 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction306___action},
+  {(bigint) 0 /* 50: ReduceAction436 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction436___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction306 < ReduceAction306: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction436 < ReduceAction436: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction306::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction306[] = "init var of ReduceAction306";
-void INIT_ATTRIBUTES__parser___ReduceAction306(val_t p0){
+/* 2: Attribute ReduceAction436::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction436[] = "init var of ReduceAction436";
+void INIT_ATTRIBUTES__parser___ReduceAction436(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction306;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction436;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction306(void)
+val_t NEW_parser___ReduceAction436(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction306;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction436;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction306[] = "check new ReduceAction306";
-void CHECKNEW_parser___ReduceAction306(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction436[] = "check new ReduceAction436";
+void CHECKNEW_parser___ReduceAction436(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction306;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction436;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -124981,36 +146066,36 @@ void CHECKNEW_parser___ReduceAction306(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction306_parser___ReduceAction___init[] = "new ReduceAction306 parser::ReduceAction::init";
-val_t NEW_ReduceAction306_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction436_parser___ReduceAction___init[] = "new ReduceAction436 parser::ReduceAction::init";
+val_t NEW_ReduceAction436_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction306_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction436_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction306();
-  INIT_ATTRIBUTES__parser___ReduceAction306(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction436();
+  INIT_ATTRIBUTES__parser___ReduceAction436(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction306(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction436(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction307[55] = {
-  {(bigint) 1567 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction437[55] = {
+  {(bigint) 1395 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction307" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction307 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction307 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1567 /* 5: ReduceAction307 < ReduceAction307: superclass typecheck marker */},
+  {(bigint) "ReduceAction437" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction437 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction437 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1395 /* 5: ReduceAction437 < ReduceAction437: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -125024,7 +146109,7 @@ const classtable_elt_t VFT_parser___ReduceAction307[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction307 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction437 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -125055,46 +146140,46 @@ const classtable_elt_t VFT_parser___ReduceAction307[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction307 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction307___action},
+  {(bigint) 0 /* 50: ReduceAction437 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction437___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction307 < ReduceAction307: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction437 < ReduceAction437: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction307::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction307[] = "init var of ReduceAction307";
-void INIT_ATTRIBUTES__parser___ReduceAction307(val_t p0){
+/* 2: Attribute ReduceAction437::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction437[] = "init var of ReduceAction437";
+void INIT_ATTRIBUTES__parser___ReduceAction437(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction307;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction437;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction307(void)
+val_t NEW_parser___ReduceAction437(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction307;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction437;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction307[] = "check new ReduceAction307";
-void CHECKNEW_parser___ReduceAction307(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction437[] = "check new ReduceAction437";
+void CHECKNEW_parser___ReduceAction437(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction307;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction437;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -125107,36 +146192,36 @@ void CHECKNEW_parser___ReduceAction307(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction307_parser___ReduceAction___init[] = "new ReduceAction307 parser::ReduceAction::init";
-val_t NEW_ReduceAction307_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction437_parser___ReduceAction___init[] = "new ReduceAction437 parser::ReduceAction::init";
+val_t NEW_ReduceAction437_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction307_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction437_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction307();
-  INIT_ATTRIBUTES__parser___ReduceAction307(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction437();
+  INIT_ATTRIBUTES__parser___ReduceAction437(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction307(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction437(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction308[55] = {
-  {(bigint) 1563 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction438[55] = {
+  {(bigint) 1391 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction308" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction308 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction308 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1563 /* 5: ReduceAction308 < ReduceAction308: superclass typecheck marker */},
+  {(bigint) "ReduceAction438" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction438 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction438 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1391 /* 5: ReduceAction438 < ReduceAction438: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -125150,7 +146235,7 @@ const classtable_elt_t VFT_parser___ReduceAction308[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction308 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction438 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -125181,46 +146266,46 @@ const classtable_elt_t VFT_parser___ReduceAction308[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction308 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction308___action},
+  {(bigint) 0 /* 50: ReduceAction438 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction438___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction308 < ReduceAction308: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction438 < ReduceAction438: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction308::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction308[] = "init var of ReduceAction308";
-void INIT_ATTRIBUTES__parser___ReduceAction308(val_t p0){
+/* 2: Attribute ReduceAction438::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction438[] = "init var of ReduceAction438";
+void INIT_ATTRIBUTES__parser___ReduceAction438(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction308;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction438;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction308(void)
+val_t NEW_parser___ReduceAction438(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction308;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction438;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction308[] = "check new ReduceAction308";
-void CHECKNEW_parser___ReduceAction308(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction438[] = "check new ReduceAction438";
+void CHECKNEW_parser___ReduceAction438(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction308;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction438;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -125233,36 +146318,36 @@ void CHECKNEW_parser___ReduceAction308(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction308_parser___ReduceAction___init[] = "new ReduceAction308 parser::ReduceAction::init";
-val_t NEW_ReduceAction308_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction438_parser___ReduceAction___init[] = "new ReduceAction438 parser::ReduceAction::init";
+val_t NEW_ReduceAction438_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction308_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction438_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction308();
-  INIT_ATTRIBUTES__parser___ReduceAction308(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction438();
+  INIT_ATTRIBUTES__parser___ReduceAction438(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction308(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction438(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction309[55] = {
-  {(bigint) 1559 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction439[55] = {
+  {(bigint) 1387 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction309" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction309 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction309 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1559 /* 5: ReduceAction309 < ReduceAction309: superclass typecheck marker */},
+  {(bigint) "ReduceAction439" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction439 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction439 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1387 /* 5: ReduceAction439 < ReduceAction439: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -125276,7 +146361,7 @@ const classtable_elt_t VFT_parser___ReduceAction309[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction309 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction439 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -125307,46 +146392,46 @@ const classtable_elt_t VFT_parser___ReduceAction309[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction309 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction309___action},
+  {(bigint) 0 /* 50: ReduceAction439 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction439___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction309 < ReduceAction309: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction439 < ReduceAction439: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction309::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction309[] = "init var of ReduceAction309";
-void INIT_ATTRIBUTES__parser___ReduceAction309(val_t p0){
+/* 2: Attribute ReduceAction439::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction439[] = "init var of ReduceAction439";
+void INIT_ATTRIBUTES__parser___ReduceAction439(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction309;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction439;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction309(void)
+val_t NEW_parser___ReduceAction439(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction309;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction439;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction309[] = "check new ReduceAction309";
-void CHECKNEW_parser___ReduceAction309(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction439[] = "check new ReduceAction439";
+void CHECKNEW_parser___ReduceAction439(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction309;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction439;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -125359,36 +146444,36 @@ void CHECKNEW_parser___ReduceAction309(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction309_parser___ReduceAction___init[] = "new ReduceAction309 parser::ReduceAction::init";
-val_t NEW_ReduceAction309_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction439_parser___ReduceAction___init[] = "new ReduceAction439 parser::ReduceAction::init";
+val_t NEW_ReduceAction439_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction309_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction439_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction309();
-  INIT_ATTRIBUTES__parser___ReduceAction309(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction439();
+  INIT_ATTRIBUTES__parser___ReduceAction439(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction309(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction439(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction310[55] = {
-  {(bigint) 1551 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction446[55] = {
+  {(bigint) 1379 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction310" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction310 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction310 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1551 /* 5: ReduceAction310 < ReduceAction310: superclass typecheck marker */},
+  {(bigint) "ReduceAction446" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction446 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction446 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1379 /* 5: ReduceAction446 < ReduceAction446: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -125402,7 +146487,7 @@ const classtable_elt_t VFT_parser___ReduceAction310[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction310 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction446 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -125433,46 +146518,46 @@ const classtable_elt_t VFT_parser___ReduceAction310[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction310 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction310___action},
+  {(bigint) 0 /* 50: ReduceAction446 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction446___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction310 < ReduceAction310: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction446 < ReduceAction446: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction310::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction310[] = "init var of ReduceAction310";
-void INIT_ATTRIBUTES__parser___ReduceAction310(val_t p0){
+/* 2: Attribute ReduceAction446::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction446[] = "init var of ReduceAction446";
+void INIT_ATTRIBUTES__parser___ReduceAction446(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction310;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction446;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction310(void)
+val_t NEW_parser___ReduceAction446(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction310;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction446;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction310[] = "check new ReduceAction310";
-void CHECKNEW_parser___ReduceAction310(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction446[] = "check new ReduceAction446";
+void CHECKNEW_parser___ReduceAction446(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction310;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction446;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -125485,36 +146570,36 @@ void CHECKNEW_parser___ReduceAction310(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction310_parser___ReduceAction___init[] = "new ReduceAction310 parser::ReduceAction::init";
-val_t NEW_ReduceAction310_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction446_parser___ReduceAction___init[] = "new ReduceAction446 parser::ReduceAction::init";
+val_t NEW_ReduceAction446_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction310_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction446_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction310();
-  INIT_ATTRIBUTES__parser___ReduceAction310(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction446();
+  INIT_ATTRIBUTES__parser___ReduceAction446(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction310(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction446(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction311[55] = {
-  {(bigint) 1547 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction447[55] = {
+  {(bigint) 1375 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction311" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction311 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction311 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1547 /* 5: ReduceAction311 < ReduceAction311: superclass typecheck marker */},
+  {(bigint) "ReduceAction447" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction447 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction447 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1375 /* 5: ReduceAction447 < ReduceAction447: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -125528,7 +146613,7 @@ const classtable_elt_t VFT_parser___ReduceAction311[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction311 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction447 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -125559,46 +146644,46 @@ const classtable_elt_t VFT_parser___ReduceAction311[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction311 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction311___action},
+  {(bigint) 0 /* 50: ReduceAction447 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction447___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction311 < ReduceAction311: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction447 < ReduceAction447: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction311::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction311[] = "init var of ReduceAction311";
-void INIT_ATTRIBUTES__parser___ReduceAction311(val_t p0){
+/* 2: Attribute ReduceAction447::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction447[] = "init var of ReduceAction447";
+void INIT_ATTRIBUTES__parser___ReduceAction447(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction311;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction447;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction311(void)
+val_t NEW_parser___ReduceAction447(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction311;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction447;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction311[] = "check new ReduceAction311";
-void CHECKNEW_parser___ReduceAction311(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction447[] = "check new ReduceAction447";
+void CHECKNEW_parser___ReduceAction447(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction311;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction447;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -125611,36 +146696,36 @@ void CHECKNEW_parser___ReduceAction311(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction311_parser___ReduceAction___init[] = "new ReduceAction311 parser::ReduceAction::init";
-val_t NEW_ReduceAction311_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction447_parser___ReduceAction___init[] = "new ReduceAction447 parser::ReduceAction::init";
+val_t NEW_ReduceAction447_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction311_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction447_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction311();
-  INIT_ATTRIBUTES__parser___ReduceAction311(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction447();
+  INIT_ATTRIBUTES__parser___ReduceAction447(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction311(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction447(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction312[55] = {
-  {(bigint) 1543 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction448[55] = {
+  {(bigint) 1371 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction312" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction312 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction312 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1543 /* 5: ReduceAction312 < ReduceAction312: superclass typecheck marker */},
+  {(bigint) "ReduceAction448" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction448 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction448 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1371 /* 5: ReduceAction448 < ReduceAction448: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -125654,7 +146739,7 @@ const classtable_elt_t VFT_parser___ReduceAction312[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction312 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction448 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -125685,46 +146770,46 @@ const classtable_elt_t VFT_parser___ReduceAction312[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction312 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction312___action},
+  {(bigint) 0 /* 50: ReduceAction448 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction448___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction312 < ReduceAction312: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction448 < ReduceAction448: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction312::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction312[] = "init var of ReduceAction312";
-void INIT_ATTRIBUTES__parser___ReduceAction312(val_t p0){
+/* 2: Attribute ReduceAction448::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction448[] = "init var of ReduceAction448";
+void INIT_ATTRIBUTES__parser___ReduceAction448(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction312;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction448;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction312(void)
+val_t NEW_parser___ReduceAction448(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction312;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction448;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction312[] = "check new ReduceAction312";
-void CHECKNEW_parser___ReduceAction312(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction448[] = "check new ReduceAction448";
+void CHECKNEW_parser___ReduceAction448(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction312;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction448;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -125737,36 +146822,36 @@ void CHECKNEW_parser___ReduceAction312(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction312_parser___ReduceAction___init[] = "new ReduceAction312 parser::ReduceAction::init";
-val_t NEW_ReduceAction312_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction448_parser___ReduceAction___init[] = "new ReduceAction448 parser::ReduceAction::init";
+val_t NEW_ReduceAction448_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction312_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction448_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction312();
-  INIT_ATTRIBUTES__parser___ReduceAction312(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction448();
+  INIT_ATTRIBUTES__parser___ReduceAction448(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction312(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction448(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction313[55] = {
-  {(bigint) 1539 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction449[55] = {
+  {(bigint) 1367 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction313" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction313 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction313 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1539 /* 5: ReduceAction313 < ReduceAction313: superclass typecheck marker */},
+  {(bigint) "ReduceAction449" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction449 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction449 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1367 /* 5: ReduceAction449 < ReduceAction449: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -125780,7 +146865,7 @@ const classtable_elt_t VFT_parser___ReduceAction313[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction313 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction449 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -125811,46 +146896,46 @@ const classtable_elt_t VFT_parser___ReduceAction313[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction313 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction313___action},
+  {(bigint) 0 /* 50: ReduceAction449 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction449___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction313 < ReduceAction313: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction449 < ReduceAction449: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction313::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction313[] = "init var of ReduceAction313";
-void INIT_ATTRIBUTES__parser___ReduceAction313(val_t p0){
+/* 2: Attribute ReduceAction449::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction449[] = "init var of ReduceAction449";
+void INIT_ATTRIBUTES__parser___ReduceAction449(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction313;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction449;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction313(void)
+val_t NEW_parser___ReduceAction449(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction313;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction449;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction313[] = "check new ReduceAction313";
-void CHECKNEW_parser___ReduceAction313(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction449[] = "check new ReduceAction449";
+void CHECKNEW_parser___ReduceAction449(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction313;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction449;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -125863,36 +146948,36 @@ void CHECKNEW_parser___ReduceAction313(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction313_parser___ReduceAction___init[] = "new ReduceAction313 parser::ReduceAction::init";
-val_t NEW_ReduceAction313_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction449_parser___ReduceAction___init[] = "new ReduceAction449 parser::ReduceAction::init";
+val_t NEW_ReduceAction449_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction313_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction449_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction313();
-  INIT_ATTRIBUTES__parser___ReduceAction313(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction449();
+  INIT_ATTRIBUTES__parser___ReduceAction449(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction313(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction449(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction314[55] = {
-  {(bigint) 1535 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction450[55] = {
+  {(bigint) 1359 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction314" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction314 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction314 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1535 /* 5: ReduceAction314 < ReduceAction314: superclass typecheck marker */},
+  {(bigint) "ReduceAction450" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction450 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction450 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1359 /* 5: ReduceAction450 < ReduceAction450: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -125906,7 +146991,7 @@ const classtable_elt_t VFT_parser___ReduceAction314[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction314 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction450 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -125937,46 +147022,46 @@ const classtable_elt_t VFT_parser___ReduceAction314[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction314 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction314___action},
+  {(bigint) 0 /* 50: ReduceAction450 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction450___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction314 < ReduceAction314: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction450 < ReduceAction450: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction314::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction314[] = "init var of ReduceAction314";
-void INIT_ATTRIBUTES__parser___ReduceAction314(val_t p0){
+/* 2: Attribute ReduceAction450::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction450[] = "init var of ReduceAction450";
+void INIT_ATTRIBUTES__parser___ReduceAction450(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction314;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction450;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction314(void)
+val_t NEW_parser___ReduceAction450(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction314;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction450;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction314[] = "check new ReduceAction314";
-void CHECKNEW_parser___ReduceAction314(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction450[] = "check new ReduceAction450";
+void CHECKNEW_parser___ReduceAction450(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction314;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction450;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -125989,36 +147074,36 @@ void CHECKNEW_parser___ReduceAction314(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction314_parser___ReduceAction___init[] = "new ReduceAction314 parser::ReduceAction::init";
-val_t NEW_ReduceAction314_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction450_parser___ReduceAction___init[] = "new ReduceAction450 parser::ReduceAction::init";
+val_t NEW_ReduceAction450_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction314_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction450_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction314();
-  INIT_ATTRIBUTES__parser___ReduceAction314(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction450();
+  INIT_ATTRIBUTES__parser___ReduceAction450(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction314(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction450(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction315[55] = {
-  {(bigint) 1531 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction451[55] = {
+  {(bigint) 1355 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction315" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction315 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction315 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1531 /* 5: ReduceAction315 < ReduceAction315: superclass typecheck marker */},
+  {(bigint) "ReduceAction451" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction451 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction451 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1355 /* 5: ReduceAction451 < ReduceAction451: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -126032,7 +147117,7 @@ const classtable_elt_t VFT_parser___ReduceAction315[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction315 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction451 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -126063,46 +147148,46 @@ const classtable_elt_t VFT_parser___ReduceAction315[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction315 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction315___action},
+  {(bigint) 0 /* 50: ReduceAction451 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction451___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction315 < ReduceAction315: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction451 < ReduceAction451: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction315::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction315[] = "init var of ReduceAction315";
-void INIT_ATTRIBUTES__parser___ReduceAction315(val_t p0){
+/* 2: Attribute ReduceAction451::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction451[] = "init var of ReduceAction451";
+void INIT_ATTRIBUTES__parser___ReduceAction451(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction315;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction451;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction315(void)
+val_t NEW_parser___ReduceAction451(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction315;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction451;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction315[] = "check new ReduceAction315";
-void CHECKNEW_parser___ReduceAction315(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction451[] = "check new ReduceAction451";
+void CHECKNEW_parser___ReduceAction451(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction315;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction451;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -126115,36 +147200,36 @@ void CHECKNEW_parser___ReduceAction315(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction315_parser___ReduceAction___init[] = "new ReduceAction315 parser::ReduceAction::init";
-val_t NEW_ReduceAction315_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction451_parser___ReduceAction___init[] = "new ReduceAction451 parser::ReduceAction::init";
+val_t NEW_ReduceAction451_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction315_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction451_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction315();
-  INIT_ATTRIBUTES__parser___ReduceAction315(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction451();
+  INIT_ATTRIBUTES__parser___ReduceAction451(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction315(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction451(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction317[55] = {
-  {(bigint) 1527 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction452[55] = {
+  {(bigint) 1351 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction317" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction317 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction317 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1527 /* 5: ReduceAction317 < ReduceAction317: superclass typecheck marker */},
+  {(bigint) "ReduceAction452" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction452 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction452 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1351 /* 5: ReduceAction452 < ReduceAction452: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -126158,7 +147243,7 @@ const classtable_elt_t VFT_parser___ReduceAction317[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction317 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction452 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -126189,46 +147274,46 @@ const classtable_elt_t VFT_parser___ReduceAction317[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction317 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction317___action},
+  {(bigint) 0 /* 50: ReduceAction452 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction452___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction317 < ReduceAction317: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction452 < ReduceAction452: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction317::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction317[] = "init var of ReduceAction317";
-void INIT_ATTRIBUTES__parser___ReduceAction317(val_t p0){
+/* 2: Attribute ReduceAction452::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction452[] = "init var of ReduceAction452";
+void INIT_ATTRIBUTES__parser___ReduceAction452(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction317;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction452;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction317(void)
+val_t NEW_parser___ReduceAction452(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction317;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction452;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction317[] = "check new ReduceAction317";
-void CHECKNEW_parser___ReduceAction317(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction452[] = "check new ReduceAction452";
+void CHECKNEW_parser___ReduceAction452(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction317;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction452;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -126241,36 +147326,36 @@ void CHECKNEW_parser___ReduceAction317(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction317_parser___ReduceAction___init[] = "new ReduceAction317 parser::ReduceAction::init";
-val_t NEW_ReduceAction317_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction452_parser___ReduceAction___init[] = "new ReduceAction452 parser::ReduceAction::init";
+val_t NEW_ReduceAction452_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction317_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction452_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction317();
-  INIT_ATTRIBUTES__parser___ReduceAction317(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction452();
+  INIT_ATTRIBUTES__parser___ReduceAction452(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction317(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction452(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction318[55] = {
-  {(bigint) 1523 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction453[55] = {
+  {(bigint) 1347 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction318" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction318 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction318 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1523 /* 5: ReduceAction318 < ReduceAction318: superclass typecheck marker */},
+  {(bigint) "ReduceAction453" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction453 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction453 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1347 /* 5: ReduceAction453 < ReduceAction453: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -126284,7 +147369,7 @@ const classtable_elt_t VFT_parser___ReduceAction318[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction318 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction453 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -126315,46 +147400,46 @@ const classtable_elt_t VFT_parser___ReduceAction318[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction318 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction318___action},
+  {(bigint) 0 /* 50: ReduceAction453 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction453___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction318 < ReduceAction318: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction453 < ReduceAction453: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction318::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction318[] = "init var of ReduceAction318";
-void INIT_ATTRIBUTES__parser___ReduceAction318(val_t p0){
+/* 2: Attribute ReduceAction453::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction453[] = "init var of ReduceAction453";
+void INIT_ATTRIBUTES__parser___ReduceAction453(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction318;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction453;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction318(void)
+val_t NEW_parser___ReduceAction453(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction318;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction453;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction318[] = "check new ReduceAction318";
-void CHECKNEW_parser___ReduceAction318(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction453[] = "check new ReduceAction453";
+void CHECKNEW_parser___ReduceAction453(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction318;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction453;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -126367,36 +147452,36 @@ void CHECKNEW_parser___ReduceAction318(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction318_parser___ReduceAction___init[] = "new ReduceAction318 parser::ReduceAction::init";
-val_t NEW_ReduceAction318_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction453_parser___ReduceAction___init[] = "new ReduceAction453 parser::ReduceAction::init";
+val_t NEW_ReduceAction453_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction318_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction453_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction318();
-  INIT_ATTRIBUTES__parser___ReduceAction318(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction453();
+  INIT_ATTRIBUTES__parser___ReduceAction453(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction318(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction453(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction319[55] = {
-  {(bigint) 1519 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction454[55] = {
+  {(bigint) 1343 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction319" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction319 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction319 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1519 /* 5: ReduceAction319 < ReduceAction319: superclass typecheck marker */},
+  {(bigint) "ReduceAction454" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction454 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction454 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1343 /* 5: ReduceAction454 < ReduceAction454: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -126410,7 +147495,7 @@ const classtable_elt_t VFT_parser___ReduceAction319[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction319 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction454 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -126441,46 +147526,46 @@ const classtable_elt_t VFT_parser___ReduceAction319[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction319 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction319___action},
+  {(bigint) 0 /* 50: ReduceAction454 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction454___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction319 < ReduceAction319: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction454 < ReduceAction454: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction319::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction319[] = "init var of ReduceAction319";
-void INIT_ATTRIBUTES__parser___ReduceAction319(val_t p0){
+/* 2: Attribute ReduceAction454::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction454[] = "init var of ReduceAction454";
+void INIT_ATTRIBUTES__parser___ReduceAction454(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction319;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction454;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction319(void)
+val_t NEW_parser___ReduceAction454(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction319;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction454;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction319[] = "check new ReduceAction319";
-void CHECKNEW_parser___ReduceAction319(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction454[] = "check new ReduceAction454";
+void CHECKNEW_parser___ReduceAction454(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction319;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction454;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -126493,36 +147578,36 @@ void CHECKNEW_parser___ReduceAction319(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction319_parser___ReduceAction___init[] = "new ReduceAction319 parser::ReduceAction::init";
-val_t NEW_ReduceAction319_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction454_parser___ReduceAction___init[] = "new ReduceAction454 parser::ReduceAction::init";
+val_t NEW_ReduceAction454_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction319_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction454_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction319();
-  INIT_ATTRIBUTES__parser___ReduceAction319(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction454();
+  INIT_ATTRIBUTES__parser___ReduceAction454(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction319(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction454(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction320[55] = {
-  {(bigint) 1511 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction455[55] = {
+  {(bigint) 1339 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction320" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction320 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction320 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1511 /* 5: ReduceAction320 < ReduceAction320: superclass typecheck marker */},
+  {(bigint) "ReduceAction455" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction455 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction455 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1339 /* 5: ReduceAction455 < ReduceAction455: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -126536,7 +147621,7 @@ const classtable_elt_t VFT_parser___ReduceAction320[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction320 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction455 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -126567,46 +147652,46 @@ const classtable_elt_t VFT_parser___ReduceAction320[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction320 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction320___action},
+  {(bigint) 0 /* 50: ReduceAction455 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction455___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction320 < ReduceAction320: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction455 < ReduceAction455: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction320::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction320[] = "init var of ReduceAction320";
-void INIT_ATTRIBUTES__parser___ReduceAction320(val_t p0){
+/* 2: Attribute ReduceAction455::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction455[] = "init var of ReduceAction455";
+void INIT_ATTRIBUTES__parser___ReduceAction455(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction320;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction455;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction320(void)
+val_t NEW_parser___ReduceAction455(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction320;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction455;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction320[] = "check new ReduceAction320";
-void CHECKNEW_parser___ReduceAction320(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction455[] = "check new ReduceAction455";
+void CHECKNEW_parser___ReduceAction455(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction320;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction455;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -126619,36 +147704,36 @@ void CHECKNEW_parser___ReduceAction320(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction320_parser___ReduceAction___init[] = "new ReduceAction320 parser::ReduceAction::init";
-val_t NEW_ReduceAction320_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction455_parser___ReduceAction___init[] = "new ReduceAction455 parser::ReduceAction::init";
+val_t NEW_ReduceAction455_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction320_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction455_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction320();
-  INIT_ATTRIBUTES__parser___ReduceAction320(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction455();
+  INIT_ATTRIBUTES__parser___ReduceAction455(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction320(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction455(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction321[55] = {
-  {(bigint) 1507 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction456[55] = {
+  {(bigint) 1335 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction321" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction321 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction321 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1507 /* 5: ReduceAction321 < ReduceAction321: superclass typecheck marker */},
+  {(bigint) "ReduceAction456" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction456 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction456 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1335 /* 5: ReduceAction456 < ReduceAction456: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -126662,7 +147747,7 @@ const classtable_elt_t VFT_parser___ReduceAction321[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction321 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction456 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -126693,46 +147778,46 @@ const classtable_elt_t VFT_parser___ReduceAction321[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction321 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction321___action},
+  {(bigint) 0 /* 50: ReduceAction456 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction456___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction321 < ReduceAction321: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction456 < ReduceAction456: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction321::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction321[] = "init var of ReduceAction321";
-void INIT_ATTRIBUTES__parser___ReduceAction321(val_t p0){
+/* 2: Attribute ReduceAction456::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction456[] = "init var of ReduceAction456";
+void INIT_ATTRIBUTES__parser___ReduceAction456(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction321;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction456;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction321(void)
+val_t NEW_parser___ReduceAction456(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction321;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction456;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction321[] = "check new ReduceAction321";
-void CHECKNEW_parser___ReduceAction321(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction456[] = "check new ReduceAction456";
+void CHECKNEW_parser___ReduceAction456(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction321;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction456;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -126745,36 +147830,36 @@ void CHECKNEW_parser___ReduceAction321(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction321_parser___ReduceAction___init[] = "new ReduceAction321 parser::ReduceAction::init";
-val_t NEW_ReduceAction321_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction456_parser___ReduceAction___init[] = "new ReduceAction456 parser::ReduceAction::init";
+val_t NEW_ReduceAction456_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction321_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction456_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction321();
-  INIT_ATTRIBUTES__parser___ReduceAction321(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction456();
+  INIT_ATTRIBUTES__parser___ReduceAction456(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction321(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction456(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction322[55] = {
-  {(bigint) 1503 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction457[55] = {
+  {(bigint) 1331 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction322" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction322 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction322 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1503 /* 5: ReduceAction322 < ReduceAction322: superclass typecheck marker */},
+  {(bigint) "ReduceAction457" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction457 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction457 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1331 /* 5: ReduceAction457 < ReduceAction457: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -126788,7 +147873,7 @@ const classtable_elt_t VFT_parser___ReduceAction322[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction322 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction457 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -126819,46 +147904,46 @@ const classtable_elt_t VFT_parser___ReduceAction322[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction322 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction322___action},
+  {(bigint) 0 /* 50: ReduceAction457 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction457___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction322 < ReduceAction322: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction457 < ReduceAction457: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction322::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction322[] = "init var of ReduceAction322";
-void INIT_ATTRIBUTES__parser___ReduceAction322(val_t p0){
+/* 2: Attribute ReduceAction457::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction457[] = "init var of ReduceAction457";
+void INIT_ATTRIBUTES__parser___ReduceAction457(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction322;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction457;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction322(void)
+val_t NEW_parser___ReduceAction457(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction322;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction457;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction322[] = "check new ReduceAction322";
-void CHECKNEW_parser___ReduceAction322(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction457[] = "check new ReduceAction457";
+void CHECKNEW_parser___ReduceAction457(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction322;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction457;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -126871,36 +147956,36 @@ void CHECKNEW_parser___ReduceAction322(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction322_parser___ReduceAction___init[] = "new ReduceAction322 parser::ReduceAction::init";
-val_t NEW_ReduceAction322_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction457_parser___ReduceAction___init[] = "new ReduceAction457 parser::ReduceAction::init";
+val_t NEW_ReduceAction457_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction322_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction457_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction322();
-  INIT_ATTRIBUTES__parser___ReduceAction322(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction457();
+  INIT_ATTRIBUTES__parser___ReduceAction457(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction322(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction457(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction323[55] = {
-  {(bigint) 1499 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction458[55] = {
+  {(bigint) 1327 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction323" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction323 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction323 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1499 /* 5: ReduceAction323 < ReduceAction323: superclass typecheck marker */},
+  {(bigint) "ReduceAction458" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction458 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction458 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1327 /* 5: ReduceAction458 < ReduceAction458: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -126914,7 +147999,7 @@ const classtable_elt_t VFT_parser___ReduceAction323[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction323 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction458 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -126945,46 +148030,46 @@ const classtable_elt_t VFT_parser___ReduceAction323[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction323 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction323___action},
+  {(bigint) 0 /* 50: ReduceAction458 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction458___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction323 < ReduceAction323: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction458 < ReduceAction458: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction323::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction323[] = "init var of ReduceAction323";
-void INIT_ATTRIBUTES__parser___ReduceAction323(val_t p0){
+/* 2: Attribute ReduceAction458::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction458[] = "init var of ReduceAction458";
+void INIT_ATTRIBUTES__parser___ReduceAction458(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction323;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction458;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction323(void)
+val_t NEW_parser___ReduceAction458(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction323;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction458;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction323[] = "check new ReduceAction323";
-void CHECKNEW_parser___ReduceAction323(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction458[] = "check new ReduceAction458";
+void CHECKNEW_parser___ReduceAction458(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction323;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction458;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -126997,36 +148082,36 @@ void CHECKNEW_parser___ReduceAction323(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction323_parser___ReduceAction___init[] = "new ReduceAction323 parser::ReduceAction::init";
-val_t NEW_ReduceAction323_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction458_parser___ReduceAction___init[] = "new ReduceAction458 parser::ReduceAction::init";
+val_t NEW_ReduceAction458_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction323_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction458_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction323();
-  INIT_ATTRIBUTES__parser___ReduceAction323(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction458();
+  INIT_ATTRIBUTES__parser___ReduceAction458(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction323(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction458(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction324[55] = {
-  {(bigint) 1495 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction459[55] = {
+  {(bigint) 1323 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction324" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction324 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction324 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1495 /* 5: ReduceAction324 < ReduceAction324: superclass typecheck marker */},
+  {(bigint) "ReduceAction459" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction459 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction459 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1323 /* 5: ReduceAction459 < ReduceAction459: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -127040,7 +148125,7 @@ const classtable_elt_t VFT_parser___ReduceAction324[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction324 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction459 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -127071,46 +148156,46 @@ const classtable_elt_t VFT_parser___ReduceAction324[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction324 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction324___action},
+  {(bigint) 0 /* 50: ReduceAction459 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction459___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction324 < ReduceAction324: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction459 < ReduceAction459: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction324::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction324[] = "init var of ReduceAction324";
-void INIT_ATTRIBUTES__parser___ReduceAction324(val_t p0){
+/* 2: Attribute ReduceAction459::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction459[] = "init var of ReduceAction459";
+void INIT_ATTRIBUTES__parser___ReduceAction459(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction324;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction459;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction324(void)
+val_t NEW_parser___ReduceAction459(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction324;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction459;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction324[] = "check new ReduceAction324";
-void CHECKNEW_parser___ReduceAction324(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction459[] = "check new ReduceAction459";
+void CHECKNEW_parser___ReduceAction459(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction324;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction459;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -127123,36 +148208,36 @@ void CHECKNEW_parser___ReduceAction324(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction324_parser___ReduceAction___init[] = "new ReduceAction324 parser::ReduceAction::init";
-val_t NEW_ReduceAction324_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction459_parser___ReduceAction___init[] = "new ReduceAction459 parser::ReduceAction::init";
+val_t NEW_ReduceAction459_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction324_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction459_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction324();
-  INIT_ATTRIBUTES__parser___ReduceAction324(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction459();
+  INIT_ATTRIBUTES__parser___ReduceAction459(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction324(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction459(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction325[55] = {
-  {(bigint) 1491 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction460[55] = {
+  {(bigint) 1315 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction325" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction325 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction325 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1491 /* 5: ReduceAction325 < ReduceAction325: superclass typecheck marker */},
+  {(bigint) "ReduceAction460" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction460 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction460 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1315 /* 5: ReduceAction460 < ReduceAction460: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -127166,7 +148251,7 @@ const classtable_elt_t VFT_parser___ReduceAction325[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction325 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction460 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -127197,46 +148282,46 @@ const classtable_elt_t VFT_parser___ReduceAction325[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction325 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction325___action},
+  {(bigint) 0 /* 50: ReduceAction460 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction460___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction325 < ReduceAction325: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction460 < ReduceAction460: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction325::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction325[] = "init var of ReduceAction325";
-void INIT_ATTRIBUTES__parser___ReduceAction325(val_t p0){
+/* 2: Attribute ReduceAction460::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction460[] = "init var of ReduceAction460";
+void INIT_ATTRIBUTES__parser___ReduceAction460(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction325;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction460;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction325(void)
+val_t NEW_parser___ReduceAction460(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction325;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction460;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction325[] = "check new ReduceAction325";
-void CHECKNEW_parser___ReduceAction325(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction460[] = "check new ReduceAction460";
+void CHECKNEW_parser___ReduceAction460(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction325;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction460;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -127249,36 +148334,36 @@ void CHECKNEW_parser___ReduceAction325(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction325_parser___ReduceAction___init[] = "new ReduceAction325 parser::ReduceAction::init";
-val_t NEW_ReduceAction325_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction460_parser___ReduceAction___init[] = "new ReduceAction460 parser::ReduceAction::init";
+val_t NEW_ReduceAction460_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction325_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction460_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction325();
-  INIT_ATTRIBUTES__parser___ReduceAction325(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction460();
+  INIT_ATTRIBUTES__parser___ReduceAction460(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction325(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction460(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction326[55] = {
-  {(bigint) 1487 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction461[55] = {
+  {(bigint) 1311 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction326" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction326 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction326 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1487 /* 5: ReduceAction326 < ReduceAction326: superclass typecheck marker */},
+  {(bigint) "ReduceAction461" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction461 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction461 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1311 /* 5: ReduceAction461 < ReduceAction461: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -127292,7 +148377,7 @@ const classtable_elt_t VFT_parser___ReduceAction326[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction326 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction461 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -127323,46 +148408,46 @@ const classtable_elt_t VFT_parser___ReduceAction326[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction326 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction326___action},
+  {(bigint) 0 /* 50: ReduceAction461 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction461___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction326 < ReduceAction326: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction461 < ReduceAction461: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction326::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction326[] = "init var of ReduceAction326";
-void INIT_ATTRIBUTES__parser___ReduceAction326(val_t p0){
+/* 2: Attribute ReduceAction461::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction461[] = "init var of ReduceAction461";
+void INIT_ATTRIBUTES__parser___ReduceAction461(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction326;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction461;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction326(void)
+val_t NEW_parser___ReduceAction461(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction326;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction461;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction326[] = "check new ReduceAction326";
-void CHECKNEW_parser___ReduceAction326(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction461[] = "check new ReduceAction461";
+void CHECKNEW_parser___ReduceAction461(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction326;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction461;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -127375,36 +148460,36 @@ void CHECKNEW_parser___ReduceAction326(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction326_parser___ReduceAction___init[] = "new ReduceAction326 parser::ReduceAction::init";
-val_t NEW_ReduceAction326_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction461_parser___ReduceAction___init[] = "new ReduceAction461 parser::ReduceAction::init";
+val_t NEW_ReduceAction461_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction326_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction461_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction326();
-  INIT_ATTRIBUTES__parser___ReduceAction326(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction461();
+  INIT_ATTRIBUTES__parser___ReduceAction461(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction326(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction461(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction327[55] = {
-  {(bigint) 1483 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction462[55] = {
+  {(bigint) 1307 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction327" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction327 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction327 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1483 /* 5: ReduceAction327 < ReduceAction327: superclass typecheck marker */},
+  {(bigint) "ReduceAction462" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction462 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction462 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1307 /* 5: ReduceAction462 < ReduceAction462: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -127418,7 +148503,7 @@ const classtable_elt_t VFT_parser___ReduceAction327[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction327 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction462 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -127449,46 +148534,46 @@ const classtable_elt_t VFT_parser___ReduceAction327[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction327 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction327___action},
+  {(bigint) 0 /* 50: ReduceAction462 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction462___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction327 < ReduceAction327: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction462 < ReduceAction462: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction327::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction327[] = "init var of ReduceAction327";
-void INIT_ATTRIBUTES__parser___ReduceAction327(val_t p0){
+/* 2: Attribute ReduceAction462::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction462[] = "init var of ReduceAction462";
+void INIT_ATTRIBUTES__parser___ReduceAction462(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction327;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction462;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction327(void)
+val_t NEW_parser___ReduceAction462(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction327;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction462;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction327[] = "check new ReduceAction327";
-void CHECKNEW_parser___ReduceAction327(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction462[] = "check new ReduceAction462";
+void CHECKNEW_parser___ReduceAction462(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction327;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction462;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -127501,36 +148586,36 @@ void CHECKNEW_parser___ReduceAction327(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction327_parser___ReduceAction___init[] = "new ReduceAction327 parser::ReduceAction::init";
-val_t NEW_ReduceAction327_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction462_parser___ReduceAction___init[] = "new ReduceAction462 parser::ReduceAction::init";
+val_t NEW_ReduceAction462_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction327_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction462_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction327();
-  INIT_ATTRIBUTES__parser___ReduceAction327(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction462();
+  INIT_ATTRIBUTES__parser___ReduceAction462(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction327(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction462(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction328[55] = {
-  {(bigint) 1479 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction463[55] = {
+  {(bigint) 1303 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction328" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction328 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction328 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1479 /* 5: ReduceAction328 < ReduceAction328: superclass typecheck marker */},
+  {(bigint) "ReduceAction463" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction463 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction463 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1303 /* 5: ReduceAction463 < ReduceAction463: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -127544,7 +148629,7 @@ const classtable_elt_t VFT_parser___ReduceAction328[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction328 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction463 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -127575,46 +148660,46 @@ const classtable_elt_t VFT_parser___ReduceAction328[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction328 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction328___action},
+  {(bigint) 0 /* 50: ReduceAction463 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction463___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction328 < ReduceAction328: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction463 < ReduceAction463: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction328::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction328[] = "init var of ReduceAction328";
-void INIT_ATTRIBUTES__parser___ReduceAction328(val_t p0){
+/* 2: Attribute ReduceAction463::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction463[] = "init var of ReduceAction463";
+void INIT_ATTRIBUTES__parser___ReduceAction463(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction328;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction463;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction328(void)
+val_t NEW_parser___ReduceAction463(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction328;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction463;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction328[] = "check new ReduceAction328";
-void CHECKNEW_parser___ReduceAction328(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction463[] = "check new ReduceAction463";
+void CHECKNEW_parser___ReduceAction463(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction328;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction463;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -127627,36 +148712,36 @@ void CHECKNEW_parser___ReduceAction328(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction328_parser___ReduceAction___init[] = "new ReduceAction328 parser::ReduceAction::init";
-val_t NEW_ReduceAction328_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction463_parser___ReduceAction___init[] = "new ReduceAction463 parser::ReduceAction::init";
+val_t NEW_ReduceAction463_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction328_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction463_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction328();
-  INIT_ATTRIBUTES__parser___ReduceAction328(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction463();
+  INIT_ATTRIBUTES__parser___ReduceAction463(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction328(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction463(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction329[55] = {
-  {(bigint) 1475 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction464[55] = {
+  {(bigint) 1299 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction329" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction329 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction329 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1475 /* 5: ReduceAction329 < ReduceAction329: superclass typecheck marker */},
+  {(bigint) "ReduceAction464" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction464 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction464 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1299 /* 5: ReduceAction464 < ReduceAction464: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -127670,7 +148755,7 @@ const classtable_elt_t VFT_parser___ReduceAction329[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction329 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction464 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -127701,46 +148786,46 @@ const classtable_elt_t VFT_parser___ReduceAction329[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction329 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction329___action},
+  {(bigint) 0 /* 50: ReduceAction464 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction464___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction329 < ReduceAction329: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction464 < ReduceAction464: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction329::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction329[] = "init var of ReduceAction329";
-void INIT_ATTRIBUTES__parser___ReduceAction329(val_t p0){
+/* 2: Attribute ReduceAction464::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction464[] = "init var of ReduceAction464";
+void INIT_ATTRIBUTES__parser___ReduceAction464(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction329;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction464;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction329(void)
+val_t NEW_parser___ReduceAction464(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction329;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction464;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction329[] = "check new ReduceAction329";
-void CHECKNEW_parser___ReduceAction329(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction464[] = "check new ReduceAction464";
+void CHECKNEW_parser___ReduceAction464(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction329;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction464;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -127753,36 +148838,36 @@ void CHECKNEW_parser___ReduceAction329(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction329_parser___ReduceAction___init[] = "new ReduceAction329 parser::ReduceAction::init";
-val_t NEW_ReduceAction329_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction464_parser___ReduceAction___init[] = "new ReduceAction464 parser::ReduceAction::init";
+val_t NEW_ReduceAction464_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction329_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction464_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction329();
-  INIT_ATTRIBUTES__parser___ReduceAction329(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction464();
+  INIT_ATTRIBUTES__parser___ReduceAction464(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction329(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction464(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction330[55] = {
-  {(bigint) 1467 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction465[55] = {
+  {(bigint) 1295 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction330" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction330 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction330 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1467 /* 5: ReduceAction330 < ReduceAction330: superclass typecheck marker */},
+  {(bigint) "ReduceAction465" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction465 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction465 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1295 /* 5: ReduceAction465 < ReduceAction465: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -127796,7 +148881,7 @@ const classtable_elt_t VFT_parser___ReduceAction330[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction330 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction465 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -127827,46 +148912,46 @@ const classtable_elt_t VFT_parser___ReduceAction330[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction330 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction330___action},
+  {(bigint) 0 /* 50: ReduceAction465 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction465___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction330 < ReduceAction330: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction465 < ReduceAction465: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction330::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction330[] = "init var of ReduceAction330";
-void INIT_ATTRIBUTES__parser___ReduceAction330(val_t p0){
+/* 2: Attribute ReduceAction465::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction465[] = "init var of ReduceAction465";
+void INIT_ATTRIBUTES__parser___ReduceAction465(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction330;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction465;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction330(void)
+val_t NEW_parser___ReduceAction465(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction330;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction465;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction330[] = "check new ReduceAction330";
-void CHECKNEW_parser___ReduceAction330(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction465[] = "check new ReduceAction465";
+void CHECKNEW_parser___ReduceAction465(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction330;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction465;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -127879,36 +148964,36 @@ void CHECKNEW_parser___ReduceAction330(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction330_parser___ReduceAction___init[] = "new ReduceAction330 parser::ReduceAction::init";
-val_t NEW_ReduceAction330_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction465_parser___ReduceAction___init[] = "new ReduceAction465 parser::ReduceAction::init";
+val_t NEW_ReduceAction465_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction330_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction465_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction330();
-  INIT_ATTRIBUTES__parser___ReduceAction330(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction465();
+  INIT_ATTRIBUTES__parser___ReduceAction465(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction330(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction465(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction331[55] = {
-  {(bigint) 1463 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction466[55] = {
+  {(bigint) 1291 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction331" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction331 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction331 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1463 /* 5: ReduceAction331 < ReduceAction331: superclass typecheck marker */},
+  {(bigint) "ReduceAction466" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction466 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction466 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1291 /* 5: ReduceAction466 < ReduceAction466: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -127922,7 +149007,7 @@ const classtable_elt_t VFT_parser___ReduceAction331[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction331 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction466 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -127953,46 +149038,46 @@ const classtable_elt_t VFT_parser___ReduceAction331[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction331 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction331___action},
+  {(bigint) 0 /* 50: ReduceAction466 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction466___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction331 < ReduceAction331: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction466 < ReduceAction466: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction331::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction331[] = "init var of ReduceAction331";
-void INIT_ATTRIBUTES__parser___ReduceAction331(val_t p0){
+/* 2: Attribute ReduceAction466::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction466[] = "init var of ReduceAction466";
+void INIT_ATTRIBUTES__parser___ReduceAction466(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction331;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction466;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction331(void)
+val_t NEW_parser___ReduceAction466(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction331;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction466;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction331[] = "check new ReduceAction331";
-void CHECKNEW_parser___ReduceAction331(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction466[] = "check new ReduceAction466";
+void CHECKNEW_parser___ReduceAction466(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction331;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction466;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -128005,36 +149090,36 @@ void CHECKNEW_parser___ReduceAction331(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction331_parser___ReduceAction___init[] = "new ReduceAction331 parser::ReduceAction::init";
-val_t NEW_ReduceAction331_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction466_parser___ReduceAction___init[] = "new ReduceAction466 parser::ReduceAction::init";
+val_t NEW_ReduceAction466_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction331_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction466_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction331();
-  INIT_ATTRIBUTES__parser___ReduceAction331(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction466();
+  INIT_ATTRIBUTES__parser___ReduceAction466(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction331(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction466(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction332[55] = {
-  {(bigint) 1459 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction467[55] = {
+  {(bigint) 1287 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction332" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction332 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction332 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1459 /* 5: ReduceAction332 < ReduceAction332: superclass typecheck marker */},
+  {(bigint) "ReduceAction467" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction467 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction467 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1287 /* 5: ReduceAction467 < ReduceAction467: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -128048,7 +149133,7 @@ const classtable_elt_t VFT_parser___ReduceAction332[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction332 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction467 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -128079,46 +149164,46 @@ const classtable_elt_t VFT_parser___ReduceAction332[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction332 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction332___action},
+  {(bigint) 0 /* 50: ReduceAction467 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction467___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction332 < ReduceAction332: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction467 < ReduceAction467: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction332::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction332[] = "init var of ReduceAction332";
-void INIT_ATTRIBUTES__parser___ReduceAction332(val_t p0){
+/* 2: Attribute ReduceAction467::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction467[] = "init var of ReduceAction467";
+void INIT_ATTRIBUTES__parser___ReduceAction467(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction332;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction467;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction332(void)
+val_t NEW_parser___ReduceAction467(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction332;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction467;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction332[] = "check new ReduceAction332";
-void CHECKNEW_parser___ReduceAction332(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction467[] = "check new ReduceAction467";
+void CHECKNEW_parser___ReduceAction467(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction332;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction467;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -128131,36 +149216,36 @@ void CHECKNEW_parser___ReduceAction332(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction332_parser___ReduceAction___init[] = "new ReduceAction332 parser::ReduceAction::init";
-val_t NEW_ReduceAction332_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction467_parser___ReduceAction___init[] = "new ReduceAction467 parser::ReduceAction::init";
+val_t NEW_ReduceAction467_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction332_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction467_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction332();
-  INIT_ATTRIBUTES__parser___ReduceAction332(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction467();
+  INIT_ATTRIBUTES__parser___ReduceAction467(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction332(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction467(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction333[55] = {
-  {(bigint) 1455 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction468[55] = {
+  {(bigint) 1283 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction333" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction333 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction333 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1455 /* 5: ReduceAction333 < ReduceAction333: superclass typecheck marker */},
+  {(bigint) "ReduceAction468" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction468 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction468 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1283 /* 5: ReduceAction468 < ReduceAction468: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -128174,7 +149259,7 @@ const classtable_elt_t VFT_parser___ReduceAction333[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction333 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction468 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -128205,46 +149290,46 @@ const classtable_elt_t VFT_parser___ReduceAction333[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction333 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction333___action},
+  {(bigint) 0 /* 50: ReduceAction468 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction468___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction333 < ReduceAction333: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction468 < ReduceAction468: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction333::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction333[] = "init var of ReduceAction333";
-void INIT_ATTRIBUTES__parser___ReduceAction333(val_t p0){
+/* 2: Attribute ReduceAction468::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction468[] = "init var of ReduceAction468";
+void INIT_ATTRIBUTES__parser___ReduceAction468(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction333;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction468;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction333(void)
+val_t NEW_parser___ReduceAction468(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction333;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction468;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction333[] = "check new ReduceAction333";
-void CHECKNEW_parser___ReduceAction333(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction468[] = "check new ReduceAction468";
+void CHECKNEW_parser___ReduceAction468(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction333;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction468;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -128257,36 +149342,36 @@ void CHECKNEW_parser___ReduceAction333(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction333_parser___ReduceAction___init[] = "new ReduceAction333 parser::ReduceAction::init";
-val_t NEW_ReduceAction333_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction468_parser___ReduceAction___init[] = "new ReduceAction468 parser::ReduceAction::init";
+val_t NEW_ReduceAction468_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction333_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction468_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction333();
-  INIT_ATTRIBUTES__parser___ReduceAction333(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction468();
+  INIT_ATTRIBUTES__parser___ReduceAction468(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction333(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction468(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction334[55] = {
-  {(bigint) 1451 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction469[55] = {
+  {(bigint) 1279 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction334" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction334 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction334 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1451 /* 5: ReduceAction334 < ReduceAction334: superclass typecheck marker */},
+  {(bigint) "ReduceAction469" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction469 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction469 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1279 /* 5: ReduceAction469 < ReduceAction469: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -128300,7 +149385,7 @@ const classtable_elt_t VFT_parser___ReduceAction334[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction334 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction469 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -128331,46 +149416,46 @@ const classtable_elt_t VFT_parser___ReduceAction334[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction334 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction334___action},
+  {(bigint) 0 /* 50: ReduceAction469 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction469___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction334 < ReduceAction334: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction469 < ReduceAction469: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction334::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction334[] = "init var of ReduceAction334";
-void INIT_ATTRIBUTES__parser___ReduceAction334(val_t p0){
+/* 2: Attribute ReduceAction469::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction469[] = "init var of ReduceAction469";
+void INIT_ATTRIBUTES__parser___ReduceAction469(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction334;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction469;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction334(void)
+val_t NEW_parser___ReduceAction469(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction334;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction469;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction334[] = "check new ReduceAction334";
-void CHECKNEW_parser___ReduceAction334(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction469[] = "check new ReduceAction469";
+void CHECKNEW_parser___ReduceAction469(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction334;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction469;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -128383,36 +149468,36 @@ void CHECKNEW_parser___ReduceAction334(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction334_parser___ReduceAction___init[] = "new ReduceAction334 parser::ReduceAction::init";
-val_t NEW_ReduceAction334_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction469_parser___ReduceAction___init[] = "new ReduceAction469 parser::ReduceAction::init";
+val_t NEW_ReduceAction469_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction334_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction469_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction334();
-  INIT_ATTRIBUTES__parser___ReduceAction334(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction469();
+  INIT_ATTRIBUTES__parser___ReduceAction469(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction334(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction469(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction336[55] = {
-  {(bigint) 1447 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction470[55] = {
+  {(bigint) 1271 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction336" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction336 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction336 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1447 /* 5: ReduceAction336 < ReduceAction336: superclass typecheck marker */},
+  {(bigint) "ReduceAction470" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction470 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction470 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1271 /* 5: ReduceAction470 < ReduceAction470: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -128426,7 +149511,7 @@ const classtable_elt_t VFT_parser___ReduceAction336[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction336 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction470 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -128457,46 +149542,46 @@ const classtable_elt_t VFT_parser___ReduceAction336[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction336 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction336___action},
+  {(bigint) 0 /* 50: ReduceAction470 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction470___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction336 < ReduceAction336: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction470 < ReduceAction470: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction336::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction336[] = "init var of ReduceAction336";
-void INIT_ATTRIBUTES__parser___ReduceAction336(val_t p0){
+/* 2: Attribute ReduceAction470::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction470[] = "init var of ReduceAction470";
+void INIT_ATTRIBUTES__parser___ReduceAction470(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction336;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction470;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction336(void)
+val_t NEW_parser___ReduceAction470(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction336;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction470;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction336[] = "check new ReduceAction336";
-void CHECKNEW_parser___ReduceAction336(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction470[] = "check new ReduceAction470";
+void CHECKNEW_parser___ReduceAction470(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction336;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction470;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -128509,36 +149594,36 @@ void CHECKNEW_parser___ReduceAction336(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction336_parser___ReduceAction___init[] = "new ReduceAction336 parser::ReduceAction::init";
-val_t NEW_ReduceAction336_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction470_parser___ReduceAction___init[] = "new ReduceAction470 parser::ReduceAction::init";
+val_t NEW_ReduceAction470_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction336_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction470_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction336();
-  INIT_ATTRIBUTES__parser___ReduceAction336(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction470();
+  INIT_ATTRIBUTES__parser___ReduceAction470(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction336(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction470(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction337[55] = {
-  {(bigint) 1443 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction471[55] = {
+  {(bigint) 1267 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction337" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction337 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction337 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1443 /* 5: ReduceAction337 < ReduceAction337: superclass typecheck marker */},
+  {(bigint) "ReduceAction471" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction471 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction471 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1267 /* 5: ReduceAction471 < ReduceAction471: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -128552,7 +149637,7 @@ const classtable_elt_t VFT_parser___ReduceAction337[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction337 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction471 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -128583,46 +149668,46 @@ const classtable_elt_t VFT_parser___ReduceAction337[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction337 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction337___action},
+  {(bigint) 0 /* 50: ReduceAction471 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction471___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction337 < ReduceAction337: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction471 < ReduceAction471: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction337::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction337[] = "init var of ReduceAction337";
-void INIT_ATTRIBUTES__parser___ReduceAction337(val_t p0){
+/* 2: Attribute ReduceAction471::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction471[] = "init var of ReduceAction471";
+void INIT_ATTRIBUTES__parser___ReduceAction471(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction337;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction471;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction337(void)
+val_t NEW_parser___ReduceAction471(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction337;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction471;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction337[] = "check new ReduceAction337";
-void CHECKNEW_parser___ReduceAction337(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction471[] = "check new ReduceAction471";
+void CHECKNEW_parser___ReduceAction471(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction337;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction471;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -128635,36 +149720,36 @@ void CHECKNEW_parser___ReduceAction337(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction337_parser___ReduceAction___init[] = "new ReduceAction337 parser::ReduceAction::init";
-val_t NEW_ReduceAction337_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction471_parser___ReduceAction___init[] = "new ReduceAction471 parser::ReduceAction::init";
+val_t NEW_ReduceAction471_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction337_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction471_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction337();
-  INIT_ATTRIBUTES__parser___ReduceAction337(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction471();
+  INIT_ATTRIBUTES__parser___ReduceAction471(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction337(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction471(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction338[55] = {
-  {(bigint) 1439 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction472[55] = {
+  {(bigint) 1263 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction338" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction338 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction338 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1439 /* 5: ReduceAction338 < ReduceAction338: superclass typecheck marker */},
+  {(bigint) "ReduceAction472" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction472 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction472 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1263 /* 5: ReduceAction472 < ReduceAction472: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -128678,7 +149763,7 @@ const classtable_elt_t VFT_parser___ReduceAction338[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction338 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction472 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -128709,46 +149794,46 @@ const classtable_elt_t VFT_parser___ReduceAction338[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction338 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction338___action},
+  {(bigint) 0 /* 50: ReduceAction472 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction472___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction338 < ReduceAction338: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction472 < ReduceAction472: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction338::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction338[] = "init var of ReduceAction338";
-void INIT_ATTRIBUTES__parser___ReduceAction338(val_t p0){
+/* 2: Attribute ReduceAction472::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction472[] = "init var of ReduceAction472";
+void INIT_ATTRIBUTES__parser___ReduceAction472(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction338;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction472;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction338(void)
+val_t NEW_parser___ReduceAction472(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction338;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction472;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction338[] = "check new ReduceAction338";
-void CHECKNEW_parser___ReduceAction338(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction472[] = "check new ReduceAction472";
+void CHECKNEW_parser___ReduceAction472(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction338;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction472;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -128761,36 +149846,36 @@ void CHECKNEW_parser___ReduceAction338(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction338_parser___ReduceAction___init[] = "new ReduceAction338 parser::ReduceAction::init";
-val_t NEW_ReduceAction338_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction472_parser___ReduceAction___init[] = "new ReduceAction472 parser::ReduceAction::init";
+val_t NEW_ReduceAction472_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction338_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction472_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction338();
-  INIT_ATTRIBUTES__parser___ReduceAction338(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction472();
+  INIT_ATTRIBUTES__parser___ReduceAction472(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction338(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction472(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction339[55] = {
-  {(bigint) 1435 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction473[55] = {
+  {(bigint) 1259 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction339" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction339 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction339 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1435 /* 5: ReduceAction339 < ReduceAction339: superclass typecheck marker */},
+  {(bigint) "ReduceAction473" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction473 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction473 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1259 /* 5: ReduceAction473 < ReduceAction473: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -128804,7 +149889,7 @@ const classtable_elt_t VFT_parser___ReduceAction339[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction339 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction473 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -128835,46 +149920,46 @@ const classtable_elt_t VFT_parser___ReduceAction339[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction339 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction339___action},
+  {(bigint) 0 /* 50: ReduceAction473 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction473___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction339 < ReduceAction339: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction473 < ReduceAction473: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction339::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction339[] = "init var of ReduceAction339";
-void INIT_ATTRIBUTES__parser___ReduceAction339(val_t p0){
+/* 2: Attribute ReduceAction473::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction473[] = "init var of ReduceAction473";
+void INIT_ATTRIBUTES__parser___ReduceAction473(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction339;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction473;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction339(void)
+val_t NEW_parser___ReduceAction473(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction339;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction473;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction339[] = "check new ReduceAction339";
-void CHECKNEW_parser___ReduceAction339(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction473[] = "check new ReduceAction473";
+void CHECKNEW_parser___ReduceAction473(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction339;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction473;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -128887,36 +149972,36 @@ void CHECKNEW_parser___ReduceAction339(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction339_parser___ReduceAction___init[] = "new ReduceAction339 parser::ReduceAction::init";
-val_t NEW_ReduceAction339_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction473_parser___ReduceAction___init[] = "new ReduceAction473 parser::ReduceAction::init";
+val_t NEW_ReduceAction473_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction339_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction473_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction339();
-  INIT_ATTRIBUTES__parser___ReduceAction339(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction473();
+  INIT_ATTRIBUTES__parser___ReduceAction473(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction339(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction473(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction340[55] = {
-  {(bigint) 1427 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction474[55] = {
+  {(bigint) 1255 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction340" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction340 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction340 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1427 /* 5: ReduceAction340 < ReduceAction340: superclass typecheck marker */},
+  {(bigint) "ReduceAction474" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction474 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction474 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1255 /* 5: ReduceAction474 < ReduceAction474: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -128930,7 +150015,7 @@ const classtable_elt_t VFT_parser___ReduceAction340[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction340 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction474 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -128961,46 +150046,46 @@ const classtable_elt_t VFT_parser___ReduceAction340[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction340 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction340___action},
+  {(bigint) 0 /* 50: ReduceAction474 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction474___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction340 < ReduceAction340: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction474 < ReduceAction474: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction340::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction340[] = "init var of ReduceAction340";
-void INIT_ATTRIBUTES__parser___ReduceAction340(val_t p0){
+/* 2: Attribute ReduceAction474::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction474[] = "init var of ReduceAction474";
+void INIT_ATTRIBUTES__parser___ReduceAction474(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction340;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction474;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction340(void)
+val_t NEW_parser___ReduceAction474(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction340;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction474;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction340[] = "check new ReduceAction340";
-void CHECKNEW_parser___ReduceAction340(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction474[] = "check new ReduceAction474";
+void CHECKNEW_parser___ReduceAction474(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction340;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction474;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -129013,36 +150098,36 @@ void CHECKNEW_parser___ReduceAction340(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction340_parser___ReduceAction___init[] = "new ReduceAction340 parser::ReduceAction::init";
-val_t NEW_ReduceAction340_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction474_parser___ReduceAction___init[] = "new ReduceAction474 parser::ReduceAction::init";
+val_t NEW_ReduceAction474_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction340_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction474_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction340();
-  INIT_ATTRIBUTES__parser___ReduceAction340(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction474();
+  INIT_ATTRIBUTES__parser___ReduceAction474(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction340(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction474(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction341[55] = {
-  {(bigint) 1423 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction475[55] = {
+  {(bigint) 1251 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction341" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction341 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction341 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1423 /* 5: ReduceAction341 < ReduceAction341: superclass typecheck marker */},
+  {(bigint) "ReduceAction475" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction475 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction475 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1251 /* 5: ReduceAction475 < ReduceAction475: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -129056,7 +150141,7 @@ const classtable_elt_t VFT_parser___ReduceAction341[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction341 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction475 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -129087,46 +150172,46 @@ const classtable_elt_t VFT_parser___ReduceAction341[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction341 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction341___action},
+  {(bigint) 0 /* 50: ReduceAction475 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction475___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction341 < ReduceAction341: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction475 < ReduceAction475: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction341::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction341[] = "init var of ReduceAction341";
-void INIT_ATTRIBUTES__parser___ReduceAction341(val_t p0){
+/* 2: Attribute ReduceAction475::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction475[] = "init var of ReduceAction475";
+void INIT_ATTRIBUTES__parser___ReduceAction475(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction341;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction475;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction341(void)
+val_t NEW_parser___ReduceAction475(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction341;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction475;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction341[] = "check new ReduceAction341";
-void CHECKNEW_parser___ReduceAction341(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction475[] = "check new ReduceAction475";
+void CHECKNEW_parser___ReduceAction475(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction341;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction475;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -129139,36 +150224,36 @@ void CHECKNEW_parser___ReduceAction341(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction341_parser___ReduceAction___init[] = "new ReduceAction341 parser::ReduceAction::init";
-val_t NEW_ReduceAction341_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction475_parser___ReduceAction___init[] = "new ReduceAction475 parser::ReduceAction::init";
+val_t NEW_ReduceAction475_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction341_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction475_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction341();
-  INIT_ATTRIBUTES__parser___ReduceAction341(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction475();
+  INIT_ATTRIBUTES__parser___ReduceAction475(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction341(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction475(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction342[55] = {
-  {(bigint) 1419 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction476[55] = {
+  {(bigint) 1247 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction342" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction342 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction342 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1419 /* 5: ReduceAction342 < ReduceAction342: superclass typecheck marker */},
+  {(bigint) "ReduceAction476" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction476 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction476 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1247 /* 5: ReduceAction476 < ReduceAction476: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -129182,7 +150267,7 @@ const classtable_elt_t VFT_parser___ReduceAction342[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction342 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction476 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -129213,46 +150298,46 @@ const classtable_elt_t VFT_parser___ReduceAction342[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction342 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction342___action},
+  {(bigint) 0 /* 50: ReduceAction476 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction476___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction342 < ReduceAction342: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction476 < ReduceAction476: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction342::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction342[] = "init var of ReduceAction342";
-void INIT_ATTRIBUTES__parser___ReduceAction342(val_t p0){
+/* 2: Attribute ReduceAction476::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction476[] = "init var of ReduceAction476";
+void INIT_ATTRIBUTES__parser___ReduceAction476(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction342;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction476;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction342(void)
+val_t NEW_parser___ReduceAction476(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction342;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction476;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction342[] = "check new ReduceAction342";
-void CHECKNEW_parser___ReduceAction342(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction476[] = "check new ReduceAction476";
+void CHECKNEW_parser___ReduceAction476(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction342;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction476;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -129265,36 +150350,36 @@ void CHECKNEW_parser___ReduceAction342(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction342_parser___ReduceAction___init[] = "new ReduceAction342 parser::ReduceAction::init";
-val_t NEW_ReduceAction342_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction476_parser___ReduceAction___init[] = "new ReduceAction476 parser::ReduceAction::init";
+val_t NEW_ReduceAction476_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction342_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction476_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction342();
-  INIT_ATTRIBUTES__parser___ReduceAction342(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction476();
+  INIT_ATTRIBUTES__parser___ReduceAction476(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction342(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction476(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction343[55] = {
-  {(bigint) 1415 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction477[55] = {
+  {(bigint) 1243 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction343" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction343 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction343 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1415 /* 5: ReduceAction343 < ReduceAction343: superclass typecheck marker */},
+  {(bigint) "ReduceAction477" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction477 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction477 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1243 /* 5: ReduceAction477 < ReduceAction477: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -129308,7 +150393,7 @@ const classtable_elt_t VFT_parser___ReduceAction343[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction343 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction477 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -129339,46 +150424,46 @@ const classtable_elt_t VFT_parser___ReduceAction343[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction343 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction343___action},
+  {(bigint) 0 /* 50: ReduceAction477 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction477___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction343 < ReduceAction343: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction477 < ReduceAction477: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction343::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction343[] = "init var of ReduceAction343";
-void INIT_ATTRIBUTES__parser___ReduceAction343(val_t p0){
+/* 2: Attribute ReduceAction477::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction477[] = "init var of ReduceAction477";
+void INIT_ATTRIBUTES__parser___ReduceAction477(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction343;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction477;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction343(void)
+val_t NEW_parser___ReduceAction477(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction343;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction477;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction343[] = "check new ReduceAction343";
-void CHECKNEW_parser___ReduceAction343(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction477[] = "check new ReduceAction477";
+void CHECKNEW_parser___ReduceAction477(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction343;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction477;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -129391,36 +150476,36 @@ void CHECKNEW_parser___ReduceAction343(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction343_parser___ReduceAction___init[] = "new ReduceAction343 parser::ReduceAction::init";
-val_t NEW_ReduceAction343_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction477_parser___ReduceAction___init[] = "new ReduceAction477 parser::ReduceAction::init";
+val_t NEW_ReduceAction477_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction343_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction477_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction343();
-  INIT_ATTRIBUTES__parser___ReduceAction343(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction477();
+  INIT_ATTRIBUTES__parser___ReduceAction477(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction343(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction477(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction344[55] = {
-  {(bigint) 1411 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction478[55] = {
+  {(bigint) 1239 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction344" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction344 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction344 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1411 /* 5: ReduceAction344 < ReduceAction344: superclass typecheck marker */},
+  {(bigint) "ReduceAction478" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction478 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction478 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1239 /* 5: ReduceAction478 < ReduceAction478: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -129434,7 +150519,7 @@ const classtable_elt_t VFT_parser___ReduceAction344[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction344 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction478 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -129465,46 +150550,46 @@ const classtable_elt_t VFT_parser___ReduceAction344[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction344 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction344___action},
+  {(bigint) 0 /* 50: ReduceAction478 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction478___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction344 < ReduceAction344: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction478 < ReduceAction478: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction344::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction344[] = "init var of ReduceAction344";
-void INIT_ATTRIBUTES__parser___ReduceAction344(val_t p0){
+/* 2: Attribute ReduceAction478::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction478[] = "init var of ReduceAction478";
+void INIT_ATTRIBUTES__parser___ReduceAction478(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction344;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction478;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction344(void)
+val_t NEW_parser___ReduceAction478(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction344;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction478;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction344[] = "check new ReduceAction344";
-void CHECKNEW_parser___ReduceAction344(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction478[] = "check new ReduceAction478";
+void CHECKNEW_parser___ReduceAction478(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction344;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction478;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -129517,36 +150602,36 @@ void CHECKNEW_parser___ReduceAction344(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction344_parser___ReduceAction___init[] = "new ReduceAction344 parser::ReduceAction::init";
-val_t NEW_ReduceAction344_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction478_parser___ReduceAction___init[] = "new ReduceAction478 parser::ReduceAction::init";
+val_t NEW_ReduceAction478_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction344_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction478_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction344();
-  INIT_ATTRIBUTES__parser___ReduceAction344(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction478();
+  INIT_ATTRIBUTES__parser___ReduceAction478(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction344(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction478(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction345[55] = {
-  {(bigint) 1407 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction479[55] = {
+  {(bigint) 1235 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction345" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction345 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction345 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1407 /* 5: ReduceAction345 < ReduceAction345: superclass typecheck marker */},
+  {(bigint) "ReduceAction479" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction479 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction479 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1235 /* 5: ReduceAction479 < ReduceAction479: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -129560,7 +150645,7 @@ const classtable_elt_t VFT_parser___ReduceAction345[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction345 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction479 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -129591,46 +150676,46 @@ const classtable_elt_t VFT_parser___ReduceAction345[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction345 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction345___action},
+  {(bigint) 0 /* 50: ReduceAction479 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction479___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction345 < ReduceAction345: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction479 < ReduceAction479: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction345::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction345[] = "init var of ReduceAction345";
-void INIT_ATTRIBUTES__parser___ReduceAction345(val_t p0){
+/* 2: Attribute ReduceAction479::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction479[] = "init var of ReduceAction479";
+void INIT_ATTRIBUTES__parser___ReduceAction479(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction345;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction479;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction345(void)
+val_t NEW_parser___ReduceAction479(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction345;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction479;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction345[] = "check new ReduceAction345";
-void CHECKNEW_parser___ReduceAction345(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction479[] = "check new ReduceAction479";
+void CHECKNEW_parser___ReduceAction479(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction345;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction479;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -129643,36 +150728,36 @@ void CHECKNEW_parser___ReduceAction345(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction345_parser___ReduceAction___init[] = "new ReduceAction345 parser::ReduceAction::init";
-val_t NEW_ReduceAction345_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction479_parser___ReduceAction___init[] = "new ReduceAction479 parser::ReduceAction::init";
+val_t NEW_ReduceAction479_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction345_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction479_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction345();
-  INIT_ATTRIBUTES__parser___ReduceAction345(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction479();
+  INIT_ATTRIBUTES__parser___ReduceAction479(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction345(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction479(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction349[55] = {
-  {(bigint) 1403 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction480[55] = {
+  {(bigint) 1227 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction349" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction349 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction349 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1403 /* 5: ReduceAction349 < ReduceAction349: superclass typecheck marker */},
+  {(bigint) "ReduceAction480" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction480 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction480 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1227 /* 5: ReduceAction480 < ReduceAction480: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -129686,7 +150771,7 @@ const classtable_elt_t VFT_parser___ReduceAction349[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction349 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction480 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -129717,46 +150802,46 @@ const classtable_elt_t VFT_parser___ReduceAction349[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction349 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction349___action},
+  {(bigint) 0 /* 50: ReduceAction480 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction480___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction349 < ReduceAction349: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction480 < ReduceAction480: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction349::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction349[] = "init var of ReduceAction349";
-void INIT_ATTRIBUTES__parser___ReduceAction349(val_t p0){
+/* 2: Attribute ReduceAction480::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction480[] = "init var of ReduceAction480";
+void INIT_ATTRIBUTES__parser___ReduceAction480(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction349;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction480;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction349(void)
+val_t NEW_parser___ReduceAction480(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction349;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction480;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction349[] = "check new ReduceAction349";
-void CHECKNEW_parser___ReduceAction349(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction480[] = "check new ReduceAction480";
+void CHECKNEW_parser___ReduceAction480(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction349;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction480;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -129769,36 +150854,36 @@ void CHECKNEW_parser___ReduceAction349(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction349_parser___ReduceAction___init[] = "new ReduceAction349 parser::ReduceAction::init";
-val_t NEW_ReduceAction349_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction480_parser___ReduceAction___init[] = "new ReduceAction480 parser::ReduceAction::init";
+val_t NEW_ReduceAction480_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction349_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction480_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction349();
-  INIT_ATTRIBUTES__parser___ReduceAction349(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction480();
+  INIT_ATTRIBUTES__parser___ReduceAction480(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction349(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction480(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction350[55] = {
-  {(bigint) 1395 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction481[55] = {
+  {(bigint) 1223 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction350" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction350 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction350 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1395 /* 5: ReduceAction350 < ReduceAction350: superclass typecheck marker */},
+  {(bigint) "ReduceAction481" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction481 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction481 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1223 /* 5: ReduceAction481 < ReduceAction481: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -129812,7 +150897,7 @@ const classtable_elt_t VFT_parser___ReduceAction350[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction350 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction481 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -129843,46 +150928,46 @@ const classtable_elt_t VFT_parser___ReduceAction350[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction350 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction350___action},
+  {(bigint) 0 /* 50: ReduceAction481 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction481___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction350 < ReduceAction350: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction481 < ReduceAction481: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction350::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction350[] = "init var of ReduceAction350";
-void INIT_ATTRIBUTES__parser___ReduceAction350(val_t p0){
+/* 2: Attribute ReduceAction481::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction481[] = "init var of ReduceAction481";
+void INIT_ATTRIBUTES__parser___ReduceAction481(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction350;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction481;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction350(void)
+val_t NEW_parser___ReduceAction481(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction350;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction481;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction350[] = "check new ReduceAction350";
-void CHECKNEW_parser___ReduceAction350(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction481[] = "check new ReduceAction481";
+void CHECKNEW_parser___ReduceAction481(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction350;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction481;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -129895,36 +150980,36 @@ void CHECKNEW_parser___ReduceAction350(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction350_parser___ReduceAction___init[] = "new ReduceAction350 parser::ReduceAction::init";
-val_t NEW_ReduceAction350_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction481_parser___ReduceAction___init[] = "new ReduceAction481 parser::ReduceAction::init";
+val_t NEW_ReduceAction481_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction350_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction481_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction350();
-  INIT_ATTRIBUTES__parser___ReduceAction350(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction481();
+  INIT_ATTRIBUTES__parser___ReduceAction481(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction350(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction481(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction351[55] = {
-  {(bigint) 1391 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction482[55] = {
+  {(bigint) 1219 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction351" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction351 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction351 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1391 /* 5: ReduceAction351 < ReduceAction351: superclass typecheck marker */},
+  {(bigint) "ReduceAction482" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction482 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction482 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1219 /* 5: ReduceAction482 < ReduceAction482: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -129938,7 +151023,7 @@ const classtable_elt_t VFT_parser___ReduceAction351[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction351 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction482 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -129969,46 +151054,46 @@ const classtable_elt_t VFT_parser___ReduceAction351[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction351 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction351___action},
+  {(bigint) 0 /* 50: ReduceAction482 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction482___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction351 < ReduceAction351: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction482 < ReduceAction482: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction351::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction351[] = "init var of ReduceAction351";
-void INIT_ATTRIBUTES__parser___ReduceAction351(val_t p0){
+/* 2: Attribute ReduceAction482::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction482[] = "init var of ReduceAction482";
+void INIT_ATTRIBUTES__parser___ReduceAction482(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction351;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction482;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction351(void)
+val_t NEW_parser___ReduceAction482(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction351;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction482;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction351[] = "check new ReduceAction351";
-void CHECKNEW_parser___ReduceAction351(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction482[] = "check new ReduceAction482";
+void CHECKNEW_parser___ReduceAction482(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction351;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction482;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -130021,36 +151106,36 @@ void CHECKNEW_parser___ReduceAction351(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction351_parser___ReduceAction___init[] = "new ReduceAction351 parser::ReduceAction::init";
-val_t NEW_ReduceAction351_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction482_parser___ReduceAction___init[] = "new ReduceAction482 parser::ReduceAction::init";
+val_t NEW_ReduceAction482_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction351_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction482_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction351();
-  INIT_ATTRIBUTES__parser___ReduceAction351(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction482();
+  INIT_ATTRIBUTES__parser___ReduceAction482(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction351(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction482(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction352[55] = {
-  {(bigint) 1387 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction483[55] = {
+  {(bigint) 1215 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction352" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction352 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction352 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1387 /* 5: ReduceAction352 < ReduceAction352: superclass typecheck marker */},
+  {(bigint) "ReduceAction483" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction483 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction483 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1215 /* 5: ReduceAction483 < ReduceAction483: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -130064,7 +151149,7 @@ const classtable_elt_t VFT_parser___ReduceAction352[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction352 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction483 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -130095,46 +151180,46 @@ const classtable_elt_t VFT_parser___ReduceAction352[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction352 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction352___action},
+  {(bigint) 0 /* 50: ReduceAction483 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction483___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction352 < ReduceAction352: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction483 < ReduceAction483: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction352::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction352[] = "init var of ReduceAction352";
-void INIT_ATTRIBUTES__parser___ReduceAction352(val_t p0){
+/* 2: Attribute ReduceAction483::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction483[] = "init var of ReduceAction483";
+void INIT_ATTRIBUTES__parser___ReduceAction483(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction352;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction483;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction352(void)
+val_t NEW_parser___ReduceAction483(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction352;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction483;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction352[] = "check new ReduceAction352";
-void CHECKNEW_parser___ReduceAction352(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction483[] = "check new ReduceAction483";
+void CHECKNEW_parser___ReduceAction483(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction352;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction483;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -130147,36 +151232,36 @@ void CHECKNEW_parser___ReduceAction352(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction352_parser___ReduceAction___init[] = "new ReduceAction352 parser::ReduceAction::init";
-val_t NEW_ReduceAction352_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction483_parser___ReduceAction___init[] = "new ReduceAction483 parser::ReduceAction::init";
+val_t NEW_ReduceAction483_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction352_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction483_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction352();
-  INIT_ATTRIBUTES__parser___ReduceAction352(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction483();
+  INIT_ATTRIBUTES__parser___ReduceAction483(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction352(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction483(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction353[55] = {
-  {(bigint) 1383 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction484[55] = {
+  {(bigint) 1211 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction353" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction353 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction353 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1383 /* 5: ReduceAction353 < ReduceAction353: superclass typecheck marker */},
+  {(bigint) "ReduceAction484" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction484 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction484 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1211 /* 5: ReduceAction484 < ReduceAction484: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -130190,7 +151275,7 @@ const classtable_elt_t VFT_parser___ReduceAction353[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction353 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction484 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -130221,46 +151306,46 @@ const classtable_elt_t VFT_parser___ReduceAction353[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction353 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction353___action},
+  {(bigint) 0 /* 50: ReduceAction484 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction484___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction353 < ReduceAction353: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction484 < ReduceAction484: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction353::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction353[] = "init var of ReduceAction353";
-void INIT_ATTRIBUTES__parser___ReduceAction353(val_t p0){
+/* 2: Attribute ReduceAction484::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction484[] = "init var of ReduceAction484";
+void INIT_ATTRIBUTES__parser___ReduceAction484(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction353;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction484;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction353(void)
+val_t NEW_parser___ReduceAction484(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction353;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction484;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction353[] = "check new ReduceAction353";
-void CHECKNEW_parser___ReduceAction353(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction484[] = "check new ReduceAction484";
+void CHECKNEW_parser___ReduceAction484(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction353;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction484;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -130273,36 +151358,36 @@ void CHECKNEW_parser___ReduceAction353(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction353_parser___ReduceAction___init[] = "new ReduceAction353 parser::ReduceAction::init";
-val_t NEW_ReduceAction353_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction484_parser___ReduceAction___init[] = "new ReduceAction484 parser::ReduceAction::init";
+val_t NEW_ReduceAction484_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction353_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction484_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction353();
-  INIT_ATTRIBUTES__parser___ReduceAction353(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction484();
+  INIT_ATTRIBUTES__parser___ReduceAction484(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction353(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction484(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction354[55] = {
-  {(bigint) 1379 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction485[55] = {
+  {(bigint) 1207 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction354" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction354 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction354 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1379 /* 5: ReduceAction354 < ReduceAction354: superclass typecheck marker */},
+  {(bigint) "ReduceAction485" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction485 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction485 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1207 /* 5: ReduceAction485 < ReduceAction485: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -130316,7 +151401,7 @@ const classtable_elt_t VFT_parser___ReduceAction354[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction354 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction485 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -130347,46 +151432,46 @@ const classtable_elt_t VFT_parser___ReduceAction354[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction354 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction354___action},
+  {(bigint) 0 /* 50: ReduceAction485 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction485___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction354 < ReduceAction354: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction485 < ReduceAction485: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction354::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction354[] = "init var of ReduceAction354";
-void INIT_ATTRIBUTES__parser___ReduceAction354(val_t p0){
+/* 2: Attribute ReduceAction485::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction485[] = "init var of ReduceAction485";
+void INIT_ATTRIBUTES__parser___ReduceAction485(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction354;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction485;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction354(void)
+val_t NEW_parser___ReduceAction485(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction354;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction485;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction354[] = "check new ReduceAction354";
-void CHECKNEW_parser___ReduceAction354(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction485[] = "check new ReduceAction485";
+void CHECKNEW_parser___ReduceAction485(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction354;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction485;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -130399,36 +151484,36 @@ void CHECKNEW_parser___ReduceAction354(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction354_parser___ReduceAction___init[] = "new ReduceAction354 parser::ReduceAction::init";
-val_t NEW_ReduceAction354_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction485_parser___ReduceAction___init[] = "new ReduceAction485 parser::ReduceAction::init";
+val_t NEW_ReduceAction485_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction354_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction485_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction354();
-  INIT_ATTRIBUTES__parser___ReduceAction354(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction485();
+  INIT_ATTRIBUTES__parser___ReduceAction485(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction354(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction485(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction355[55] = {
-  {(bigint) 1375 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction486[55] = {
+  {(bigint) 1203 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction355" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction355 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction355 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1375 /* 5: ReduceAction355 < ReduceAction355: superclass typecheck marker */},
+  {(bigint) "ReduceAction486" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction486 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction486 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1203 /* 5: ReduceAction486 < ReduceAction486: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -130442,7 +151527,7 @@ const classtable_elt_t VFT_parser___ReduceAction355[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction355 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction486 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -130473,46 +151558,46 @@ const classtable_elt_t VFT_parser___ReduceAction355[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction355 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction355___action},
+  {(bigint) 0 /* 50: ReduceAction486 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction486___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction355 < ReduceAction355: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction486 < ReduceAction486: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction355::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction355[] = "init var of ReduceAction355";
-void INIT_ATTRIBUTES__parser___ReduceAction355(val_t p0){
+/* 2: Attribute ReduceAction486::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction486[] = "init var of ReduceAction486";
+void INIT_ATTRIBUTES__parser___ReduceAction486(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction355;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction486;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction355(void)
+val_t NEW_parser___ReduceAction486(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction355;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction486;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction355[] = "check new ReduceAction355";
-void CHECKNEW_parser___ReduceAction355(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction486[] = "check new ReduceAction486";
+void CHECKNEW_parser___ReduceAction486(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction355;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction486;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -130525,36 +151610,36 @@ void CHECKNEW_parser___ReduceAction355(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction355_parser___ReduceAction___init[] = "new ReduceAction355 parser::ReduceAction::init";
-val_t NEW_ReduceAction355_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction486_parser___ReduceAction___init[] = "new ReduceAction486 parser::ReduceAction::init";
+val_t NEW_ReduceAction486_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction355_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction486_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction355();
-  INIT_ATTRIBUTES__parser___ReduceAction355(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction486();
+  INIT_ATTRIBUTES__parser___ReduceAction486(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction355(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction486(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction356[55] = {
-  {(bigint) 1371 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction487[55] = {
+  {(bigint) 1199 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction356" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction356 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction356 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1371 /* 5: ReduceAction356 < ReduceAction356: superclass typecheck marker */},
+  {(bigint) "ReduceAction487" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction487 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction487 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1199 /* 5: ReduceAction487 < ReduceAction487: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -130568,7 +151653,7 @@ const classtable_elt_t VFT_parser___ReduceAction356[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction356 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction487 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -130599,46 +151684,46 @@ const classtable_elt_t VFT_parser___ReduceAction356[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction356 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction356___action},
+  {(bigint) 0 /* 50: ReduceAction487 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction487___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction356 < ReduceAction356: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction487 < ReduceAction487: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction356::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction356[] = "init var of ReduceAction356";
-void INIT_ATTRIBUTES__parser___ReduceAction356(val_t p0){
+/* 2: Attribute ReduceAction487::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction487[] = "init var of ReduceAction487";
+void INIT_ATTRIBUTES__parser___ReduceAction487(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction356;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction487;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction356(void)
+val_t NEW_parser___ReduceAction487(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction356;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction487;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction356[] = "check new ReduceAction356";
-void CHECKNEW_parser___ReduceAction356(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction487[] = "check new ReduceAction487";
+void CHECKNEW_parser___ReduceAction487(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction356;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction487;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -130651,36 +151736,36 @@ void CHECKNEW_parser___ReduceAction356(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction356_parser___ReduceAction___init[] = "new ReduceAction356 parser::ReduceAction::init";
-val_t NEW_ReduceAction356_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction487_parser___ReduceAction___init[] = "new ReduceAction487 parser::ReduceAction::init";
+val_t NEW_ReduceAction487_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction356_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction487_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction356();
-  INIT_ATTRIBUTES__parser___ReduceAction356(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction487();
+  INIT_ATTRIBUTES__parser___ReduceAction487(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction356(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction487(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction357[55] = {
-  {(bigint) 1367 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction488[55] = {
+  {(bigint) 1195 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction357" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction357 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction357 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1367 /* 5: ReduceAction357 < ReduceAction357: superclass typecheck marker */},
+  {(bigint) "ReduceAction488" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction488 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction488 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1195 /* 5: ReduceAction488 < ReduceAction488: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -130694,7 +151779,7 @@ const classtable_elt_t VFT_parser___ReduceAction357[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction357 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction488 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -130725,46 +151810,46 @@ const classtable_elt_t VFT_parser___ReduceAction357[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction357 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction357___action},
+  {(bigint) 0 /* 50: ReduceAction488 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction488___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction357 < ReduceAction357: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction488 < ReduceAction488: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction357::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction357[] = "init var of ReduceAction357";
-void INIT_ATTRIBUTES__parser___ReduceAction357(val_t p0){
+/* 2: Attribute ReduceAction488::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction488[] = "init var of ReduceAction488";
+void INIT_ATTRIBUTES__parser___ReduceAction488(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction357;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction488;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction357(void)
+val_t NEW_parser___ReduceAction488(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction357;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction488;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction357[] = "check new ReduceAction357";
-void CHECKNEW_parser___ReduceAction357(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction488[] = "check new ReduceAction488";
+void CHECKNEW_parser___ReduceAction488(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction357;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction488;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -130777,36 +151862,36 @@ void CHECKNEW_parser___ReduceAction357(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction357_parser___ReduceAction___init[] = "new ReduceAction357 parser::ReduceAction::init";
-val_t NEW_ReduceAction357_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction488_parser___ReduceAction___init[] = "new ReduceAction488 parser::ReduceAction::init";
+val_t NEW_ReduceAction488_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction357_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction488_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction357();
-  INIT_ATTRIBUTES__parser___ReduceAction357(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction488();
+  INIT_ATTRIBUTES__parser___ReduceAction488(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction357(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction488(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction358[55] = {
-  {(bigint) 1363 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction489[55] = {
+  {(bigint) 1191 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction358" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction358 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction358 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1363 /* 5: ReduceAction358 < ReduceAction358: superclass typecheck marker */},
+  {(bigint) "ReduceAction489" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction489 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction489 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1191 /* 5: ReduceAction489 < ReduceAction489: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -130820,7 +151905,7 @@ const classtable_elt_t VFT_parser___ReduceAction358[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction358 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction489 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -130851,46 +151936,46 @@ const classtable_elt_t VFT_parser___ReduceAction358[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction358 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction358___action},
+  {(bigint) 0 /* 50: ReduceAction489 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction489___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction358 < ReduceAction358: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction489 < ReduceAction489: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction358::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction358[] = "init var of ReduceAction358";
-void INIT_ATTRIBUTES__parser___ReduceAction358(val_t p0){
+/* 2: Attribute ReduceAction489::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction489[] = "init var of ReduceAction489";
+void INIT_ATTRIBUTES__parser___ReduceAction489(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction358;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction489;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction358(void)
+val_t NEW_parser___ReduceAction489(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction358;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction489;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction358[] = "check new ReduceAction358";
-void CHECKNEW_parser___ReduceAction358(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction489[] = "check new ReduceAction489";
+void CHECKNEW_parser___ReduceAction489(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction358;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction489;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -130903,36 +151988,36 @@ void CHECKNEW_parser___ReduceAction358(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction358_parser___ReduceAction___init[] = "new ReduceAction358 parser::ReduceAction::init";
-val_t NEW_ReduceAction358_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction489_parser___ReduceAction___init[] = "new ReduceAction489 parser::ReduceAction::init";
+val_t NEW_ReduceAction489_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction358_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction489_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction358();
-  INIT_ATTRIBUTES__parser___ReduceAction358(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction489();
+  INIT_ATTRIBUTES__parser___ReduceAction489(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction358(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction489(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction359[55] = {
-  {(bigint) 1359 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction490[55] = {
+  {(bigint) 1183 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction359" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction359 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction359 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1359 /* 5: ReduceAction359 < ReduceAction359: superclass typecheck marker */},
+  {(bigint) "ReduceAction490" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction490 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction490 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1183 /* 5: ReduceAction490 < ReduceAction490: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -130946,7 +152031,7 @@ const classtable_elt_t VFT_parser___ReduceAction359[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction359 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction490 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -130977,46 +152062,46 @@ const classtable_elt_t VFT_parser___ReduceAction359[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction359 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction359___action},
+  {(bigint) 0 /* 50: ReduceAction490 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction490___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction359 < ReduceAction359: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction490 < ReduceAction490: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction359::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction359[] = "init var of ReduceAction359";
-void INIT_ATTRIBUTES__parser___ReduceAction359(val_t p0){
+/* 2: Attribute ReduceAction490::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction490[] = "init var of ReduceAction490";
+void INIT_ATTRIBUTES__parser___ReduceAction490(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction359;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction490;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction359(void)
+val_t NEW_parser___ReduceAction490(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction359;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction490;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction359[] = "check new ReduceAction359";
-void CHECKNEW_parser___ReduceAction359(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction490[] = "check new ReduceAction490";
+void CHECKNEW_parser___ReduceAction490(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction359;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction490;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -131029,36 +152114,36 @@ void CHECKNEW_parser___ReduceAction359(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction359_parser___ReduceAction___init[] = "new ReduceAction359 parser::ReduceAction::init";
-val_t NEW_ReduceAction359_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction490_parser___ReduceAction___init[] = "new ReduceAction490 parser::ReduceAction::init";
+val_t NEW_ReduceAction490_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction359_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction490_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction359();
-  INIT_ATTRIBUTES__parser___ReduceAction359(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction490();
+  INIT_ATTRIBUTES__parser___ReduceAction490(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction359(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction490(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction366[55] = {
-  {(bigint) 1351 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction491[55] = {
+  {(bigint) 1179 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction366" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction366 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction366 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1351 /* 5: ReduceAction366 < ReduceAction366: superclass typecheck marker */},
+  {(bigint) "ReduceAction491" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction491 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction491 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1179 /* 5: ReduceAction491 < ReduceAction491: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -131072,7 +152157,7 @@ const classtable_elt_t VFT_parser___ReduceAction366[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction366 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction491 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -131103,46 +152188,46 @@ const classtable_elt_t VFT_parser___ReduceAction366[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction366 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction366___action},
+  {(bigint) 0 /* 50: ReduceAction491 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction491___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction366 < ReduceAction366: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction491 < ReduceAction491: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction366::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction366[] = "init var of ReduceAction366";
-void INIT_ATTRIBUTES__parser___ReduceAction366(val_t p0){
+/* 2: Attribute ReduceAction491::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction491[] = "init var of ReduceAction491";
+void INIT_ATTRIBUTES__parser___ReduceAction491(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction366;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction491;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction366(void)
+val_t NEW_parser___ReduceAction491(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction366;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction491;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction366[] = "check new ReduceAction366";
-void CHECKNEW_parser___ReduceAction366(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction491[] = "check new ReduceAction491";
+void CHECKNEW_parser___ReduceAction491(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction366;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction491;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -131155,36 +152240,36 @@ void CHECKNEW_parser___ReduceAction366(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction366_parser___ReduceAction___init[] = "new ReduceAction366 parser::ReduceAction::init";
-val_t NEW_ReduceAction366_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction491_parser___ReduceAction___init[] = "new ReduceAction491 parser::ReduceAction::init";
+val_t NEW_ReduceAction491_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction366_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction491_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction366();
-  INIT_ATTRIBUTES__parser___ReduceAction366(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction491();
+  INIT_ATTRIBUTES__parser___ReduceAction491(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction366(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction491(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction367[55] = {
-  {(bigint) 1347 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction492[55] = {
+  {(bigint) 1175 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction367" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction367 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction367 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1347 /* 5: ReduceAction367 < ReduceAction367: superclass typecheck marker */},
+  {(bigint) "ReduceAction492" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction492 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction492 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1175 /* 5: ReduceAction492 < ReduceAction492: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -131198,7 +152283,7 @@ const classtable_elt_t VFT_parser___ReduceAction367[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction367 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction492 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -131229,46 +152314,46 @@ const classtable_elt_t VFT_parser___ReduceAction367[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction367 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction367___action},
+  {(bigint) 0 /* 50: ReduceAction492 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction492___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction367 < ReduceAction367: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction492 < ReduceAction492: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction367::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction367[] = "init var of ReduceAction367";
-void INIT_ATTRIBUTES__parser___ReduceAction367(val_t p0){
+/* 2: Attribute ReduceAction492::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction492[] = "init var of ReduceAction492";
+void INIT_ATTRIBUTES__parser___ReduceAction492(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction367;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction492;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction367(void)
+val_t NEW_parser___ReduceAction492(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction367;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction492;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction367[] = "check new ReduceAction367";
-void CHECKNEW_parser___ReduceAction367(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction492[] = "check new ReduceAction492";
+void CHECKNEW_parser___ReduceAction492(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction367;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction492;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -131281,36 +152366,36 @@ void CHECKNEW_parser___ReduceAction367(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction367_parser___ReduceAction___init[] = "new ReduceAction367 parser::ReduceAction::init";
-val_t NEW_ReduceAction367_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction492_parser___ReduceAction___init[] = "new ReduceAction492 parser::ReduceAction::init";
+val_t NEW_ReduceAction492_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction367_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction492_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction367();
-  INIT_ATTRIBUTES__parser___ReduceAction367(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction492();
+  INIT_ATTRIBUTES__parser___ReduceAction492(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction367(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction492(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction368[55] = {
-  {(bigint) 1343 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction493[55] = {
+  {(bigint) 1171 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction368" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction368 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction368 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1343 /* 5: ReduceAction368 < ReduceAction368: superclass typecheck marker */},
+  {(bigint) "ReduceAction493" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction493 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction493 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1171 /* 5: ReduceAction493 < ReduceAction493: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -131324,7 +152409,7 @@ const classtable_elt_t VFT_parser___ReduceAction368[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction368 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction493 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -131355,46 +152440,46 @@ const classtable_elt_t VFT_parser___ReduceAction368[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction368 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction368___action},
+  {(bigint) 0 /* 50: ReduceAction493 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction493___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction368 < ReduceAction368: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction493 < ReduceAction493: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction368::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction368[] = "init var of ReduceAction368";
-void INIT_ATTRIBUTES__parser___ReduceAction368(val_t p0){
+/* 2: Attribute ReduceAction493::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction493[] = "init var of ReduceAction493";
+void INIT_ATTRIBUTES__parser___ReduceAction493(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction368;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction493;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction368(void)
+val_t NEW_parser___ReduceAction493(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction368;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction493;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction368[] = "check new ReduceAction368";
-void CHECKNEW_parser___ReduceAction368(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction493[] = "check new ReduceAction493";
+void CHECKNEW_parser___ReduceAction493(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction368;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction493;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -131407,36 +152492,36 @@ void CHECKNEW_parser___ReduceAction368(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction368_parser___ReduceAction___init[] = "new ReduceAction368 parser::ReduceAction::init";
-val_t NEW_ReduceAction368_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction493_parser___ReduceAction___init[] = "new ReduceAction493 parser::ReduceAction::init";
+val_t NEW_ReduceAction493_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction368_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction493_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction368();
-  INIT_ATTRIBUTES__parser___ReduceAction368(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction493();
+  INIT_ATTRIBUTES__parser___ReduceAction493(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction368(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction493(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction369[55] = {
-  {(bigint) 1339 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction494[55] = {
+  {(bigint) 1167 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction369" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction369 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction369 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1339 /* 5: ReduceAction369 < ReduceAction369: superclass typecheck marker */},
+  {(bigint) "ReduceAction494" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction494 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction494 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1167 /* 5: ReduceAction494 < ReduceAction494: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -131450,7 +152535,7 @@ const classtable_elt_t VFT_parser___ReduceAction369[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction369 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction494 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -131481,46 +152566,46 @@ const classtable_elt_t VFT_parser___ReduceAction369[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction369 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction369___action},
+  {(bigint) 0 /* 50: ReduceAction494 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction494___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction369 < ReduceAction369: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction494 < ReduceAction494: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction369::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction369[] = "init var of ReduceAction369";
-void INIT_ATTRIBUTES__parser___ReduceAction369(val_t p0){
+/* 2: Attribute ReduceAction494::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction494[] = "init var of ReduceAction494";
+void INIT_ATTRIBUTES__parser___ReduceAction494(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction369;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction494;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction369(void)
+val_t NEW_parser___ReduceAction494(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction369;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction494;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction369[] = "check new ReduceAction369";
-void CHECKNEW_parser___ReduceAction369(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction494[] = "check new ReduceAction494";
+void CHECKNEW_parser___ReduceAction494(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction369;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction494;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -131533,36 +152618,36 @@ void CHECKNEW_parser___ReduceAction369(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction369_parser___ReduceAction___init[] = "new ReduceAction369 parser::ReduceAction::init";
-val_t NEW_ReduceAction369_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction494_parser___ReduceAction___init[] = "new ReduceAction494 parser::ReduceAction::init";
+val_t NEW_ReduceAction494_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction369_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction494_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction369();
-  INIT_ATTRIBUTES__parser___ReduceAction369(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction494();
+  INIT_ATTRIBUTES__parser___ReduceAction494(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction369(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction494(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction370[55] = {
-  {(bigint) 1331 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction495[55] = {
+  {(bigint) 1163 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction370" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction370 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction370 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1331 /* 5: ReduceAction370 < ReduceAction370: superclass typecheck marker */},
+  {(bigint) "ReduceAction495" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction495 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction495 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1163 /* 5: ReduceAction495 < ReduceAction495: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -131576,7 +152661,7 @@ const classtable_elt_t VFT_parser___ReduceAction370[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction370 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction495 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -131607,46 +152692,46 @@ const classtable_elt_t VFT_parser___ReduceAction370[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction370 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction370___action},
+  {(bigint) 0 /* 50: ReduceAction495 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction495___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction370 < ReduceAction370: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction495 < ReduceAction495: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction370::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction370[] = "init var of ReduceAction370";
-void INIT_ATTRIBUTES__parser___ReduceAction370(val_t p0){
+/* 2: Attribute ReduceAction495::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction495[] = "init var of ReduceAction495";
+void INIT_ATTRIBUTES__parser___ReduceAction495(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction370;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction495;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction370(void)
+val_t NEW_parser___ReduceAction495(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction370;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction495;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction370[] = "check new ReduceAction370";
-void CHECKNEW_parser___ReduceAction370(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction495[] = "check new ReduceAction495";
+void CHECKNEW_parser___ReduceAction495(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction370;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction495;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -131659,36 +152744,36 @@ void CHECKNEW_parser___ReduceAction370(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction370_parser___ReduceAction___init[] = "new ReduceAction370 parser::ReduceAction::init";
-val_t NEW_ReduceAction370_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction495_parser___ReduceAction___init[] = "new ReduceAction495 parser::ReduceAction::init";
+val_t NEW_ReduceAction495_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction370_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction495_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction370();
-  INIT_ATTRIBUTES__parser___ReduceAction370(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction495();
+  INIT_ATTRIBUTES__parser___ReduceAction495(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction370(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction495(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction371[55] = {
-  {(bigint) 1327 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction496[55] = {
+  {(bigint) 1159 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction371" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction371 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction371 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1327 /* 5: ReduceAction371 < ReduceAction371: superclass typecheck marker */},
+  {(bigint) "ReduceAction496" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction496 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction496 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1159 /* 5: ReduceAction496 < ReduceAction496: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -131702,7 +152787,7 @@ const classtable_elt_t VFT_parser___ReduceAction371[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction371 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction496 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -131733,46 +152818,46 @@ const classtable_elt_t VFT_parser___ReduceAction371[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction371 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction371___action},
+  {(bigint) 0 /* 50: ReduceAction496 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction496___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction371 < ReduceAction371: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction496 < ReduceAction496: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction371::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction371[] = "init var of ReduceAction371";
-void INIT_ATTRIBUTES__parser___ReduceAction371(val_t p0){
+/* 2: Attribute ReduceAction496::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction496[] = "init var of ReduceAction496";
+void INIT_ATTRIBUTES__parser___ReduceAction496(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction371;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction496;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction371(void)
+val_t NEW_parser___ReduceAction496(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction371;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction496;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction371[] = "check new ReduceAction371";
-void CHECKNEW_parser___ReduceAction371(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction496[] = "check new ReduceAction496";
+void CHECKNEW_parser___ReduceAction496(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction371;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction496;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -131785,36 +152870,36 @@ void CHECKNEW_parser___ReduceAction371(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction371_parser___ReduceAction___init[] = "new ReduceAction371 parser::ReduceAction::init";
-val_t NEW_ReduceAction371_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction496_parser___ReduceAction___init[] = "new ReduceAction496 parser::ReduceAction::init";
+val_t NEW_ReduceAction496_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction371_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction496_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction371();
-  INIT_ATTRIBUTES__parser___ReduceAction371(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction496();
+  INIT_ATTRIBUTES__parser___ReduceAction496(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction371(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction496(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction372[55] = {
-  {(bigint) 1323 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction497[55] = {
+  {(bigint) 1155 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction372" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction372 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction372 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1323 /* 5: ReduceAction372 < ReduceAction372: superclass typecheck marker */},
+  {(bigint) "ReduceAction497" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction497 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction497 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1155 /* 5: ReduceAction497 < ReduceAction497: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -131828,7 +152913,7 @@ const classtable_elt_t VFT_parser___ReduceAction372[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction372 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction497 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -131859,46 +152944,46 @@ const classtable_elt_t VFT_parser___ReduceAction372[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction372 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction372___action},
+  {(bigint) 0 /* 50: ReduceAction497 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction497___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction372 < ReduceAction372: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction497 < ReduceAction497: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction372::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction372[] = "init var of ReduceAction372";
-void INIT_ATTRIBUTES__parser___ReduceAction372(val_t p0){
+/* 2: Attribute ReduceAction497::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction497[] = "init var of ReduceAction497";
+void INIT_ATTRIBUTES__parser___ReduceAction497(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction372;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction497;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction372(void)
+val_t NEW_parser___ReduceAction497(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction372;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction497;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction372[] = "check new ReduceAction372";
-void CHECKNEW_parser___ReduceAction372(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction497[] = "check new ReduceAction497";
+void CHECKNEW_parser___ReduceAction497(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction372;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction497;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -131911,36 +152996,36 @@ void CHECKNEW_parser___ReduceAction372(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction372_parser___ReduceAction___init[] = "new ReduceAction372 parser::ReduceAction::init";
-val_t NEW_ReduceAction372_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction497_parser___ReduceAction___init[] = "new ReduceAction497 parser::ReduceAction::init";
+val_t NEW_ReduceAction497_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction372_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction497_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction372();
-  INIT_ATTRIBUTES__parser___ReduceAction372(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction497();
+  INIT_ATTRIBUTES__parser___ReduceAction497(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction372(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction497(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction373[55] = {
-  {(bigint) 1319 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction498[55] = {
+  {(bigint) 1151 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction373" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction373 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction373 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1319 /* 5: ReduceAction373 < ReduceAction373: superclass typecheck marker */},
+  {(bigint) "ReduceAction498" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction498 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction498 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1151 /* 5: ReduceAction498 < ReduceAction498: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -131954,7 +153039,7 @@ const classtable_elt_t VFT_parser___ReduceAction373[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction373 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction498 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -131985,46 +153070,46 @@ const classtable_elt_t VFT_parser___ReduceAction373[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction373 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction373___action},
+  {(bigint) 0 /* 50: ReduceAction498 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction498___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction373 < ReduceAction373: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction498 < ReduceAction498: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction373::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction373[] = "init var of ReduceAction373";
-void INIT_ATTRIBUTES__parser___ReduceAction373(val_t p0){
+/* 2: Attribute ReduceAction498::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction498[] = "init var of ReduceAction498";
+void INIT_ATTRIBUTES__parser___ReduceAction498(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction373;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction498;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction373(void)
+val_t NEW_parser___ReduceAction498(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction373;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction498;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction373[] = "check new ReduceAction373";
-void CHECKNEW_parser___ReduceAction373(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction498[] = "check new ReduceAction498";
+void CHECKNEW_parser___ReduceAction498(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction373;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction498;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -132037,36 +153122,36 @@ void CHECKNEW_parser___ReduceAction373(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction373_parser___ReduceAction___init[] = "new ReduceAction373 parser::ReduceAction::init";
-val_t NEW_ReduceAction373_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction498_parser___ReduceAction___init[] = "new ReduceAction498 parser::ReduceAction::init";
+val_t NEW_ReduceAction498_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction373_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction498_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction373();
-  INIT_ATTRIBUTES__parser___ReduceAction373(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction498();
+  INIT_ATTRIBUTES__parser___ReduceAction498(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction373(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction498(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction374[55] = {
-  {(bigint) 1315 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction499[55] = {
+  {(bigint) 1147 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction374" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction374 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction374 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1315 /* 5: ReduceAction374 < ReduceAction374: superclass typecheck marker */},
+  {(bigint) "ReduceAction499" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction499 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction499 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1147 /* 5: ReduceAction499 < ReduceAction499: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -132080,7 +153165,7 @@ const classtable_elt_t VFT_parser___ReduceAction374[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction374 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction499 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -132111,46 +153196,46 @@ const classtable_elt_t VFT_parser___ReduceAction374[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction374 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction374___action},
+  {(bigint) 0 /* 50: ReduceAction499 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction499___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction374 < ReduceAction374: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction499 < ReduceAction499: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction374::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction374[] = "init var of ReduceAction374";
-void INIT_ATTRIBUTES__parser___ReduceAction374(val_t p0){
+/* 2: Attribute ReduceAction499::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction499[] = "init var of ReduceAction499";
+void INIT_ATTRIBUTES__parser___ReduceAction499(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction374;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction499;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction374(void)
+val_t NEW_parser___ReduceAction499(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction374;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction499;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction374[] = "check new ReduceAction374";
-void CHECKNEW_parser___ReduceAction374(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction499[] = "check new ReduceAction499";
+void CHECKNEW_parser___ReduceAction499(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction374;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction499;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -132163,36 +153248,36 @@ void CHECKNEW_parser___ReduceAction374(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction374_parser___ReduceAction___init[] = "new ReduceAction374 parser::ReduceAction::init";
-val_t NEW_ReduceAction374_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction499_parser___ReduceAction___init[] = "new ReduceAction499 parser::ReduceAction::init";
+val_t NEW_ReduceAction499_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction374_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction499_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction374();
-  INIT_ATTRIBUTES__parser___ReduceAction374(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction499();
+  INIT_ATTRIBUTES__parser___ReduceAction499(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction374(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction499(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction375[55] = {
-  {(bigint) 1311 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction500[55] = {
+  {(bigint) 1135 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction375" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction375 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction375 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1311 /* 5: ReduceAction375 < ReduceAction375: superclass typecheck marker */},
+  {(bigint) "ReduceAction500" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction500 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction500 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1135 /* 5: ReduceAction500 < ReduceAction500: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -132206,7 +153291,7 @@ const classtable_elt_t VFT_parser___ReduceAction375[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction375 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction500 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -132237,46 +153322,46 @@ const classtable_elt_t VFT_parser___ReduceAction375[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction375 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction375___action},
+  {(bigint) 0 /* 50: ReduceAction500 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction500___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction375 < ReduceAction375: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction500 < ReduceAction500: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction375::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction375[] = "init var of ReduceAction375";
-void INIT_ATTRIBUTES__parser___ReduceAction375(val_t p0){
+/* 2: Attribute ReduceAction500::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction500[] = "init var of ReduceAction500";
+void INIT_ATTRIBUTES__parser___ReduceAction500(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction375;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction500;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction375(void)
+val_t NEW_parser___ReduceAction500(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction375;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction500;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction375[] = "check new ReduceAction375";
-void CHECKNEW_parser___ReduceAction375(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction500[] = "check new ReduceAction500";
+void CHECKNEW_parser___ReduceAction500(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction375;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction500;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -132289,36 +153374,36 @@ void CHECKNEW_parser___ReduceAction375(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction375_parser___ReduceAction___init[] = "new ReduceAction375 parser::ReduceAction::init";
-val_t NEW_ReduceAction375_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction500_parser___ReduceAction___init[] = "new ReduceAction500 parser::ReduceAction::init";
+val_t NEW_ReduceAction500_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction375_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction500_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction375();
-  INIT_ATTRIBUTES__parser___ReduceAction375(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction500();
+  INIT_ATTRIBUTES__parser___ReduceAction500(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction375(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction500(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction376[55] = {
-  {(bigint) 1307 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction501[55] = {
+  {(bigint) 1131 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction376" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction376 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction376 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1307 /* 5: ReduceAction376 < ReduceAction376: superclass typecheck marker */},
+  {(bigint) "ReduceAction501" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction501 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction501 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1131 /* 5: ReduceAction501 < ReduceAction501: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -132332,7 +153417,7 @@ const classtable_elt_t VFT_parser___ReduceAction376[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction376 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction501 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -132363,46 +153448,46 @@ const classtable_elt_t VFT_parser___ReduceAction376[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction376 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction376___action},
+  {(bigint) 0 /* 50: ReduceAction501 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction501___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction376 < ReduceAction376: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction501 < ReduceAction501: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction376::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction376[] = "init var of ReduceAction376";
-void INIT_ATTRIBUTES__parser___ReduceAction376(val_t p0){
+/* 2: Attribute ReduceAction501::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction501[] = "init var of ReduceAction501";
+void INIT_ATTRIBUTES__parser___ReduceAction501(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction376;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction501;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction376(void)
+val_t NEW_parser___ReduceAction501(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction376;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction501;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction376[] = "check new ReduceAction376";
-void CHECKNEW_parser___ReduceAction376(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction501[] = "check new ReduceAction501";
+void CHECKNEW_parser___ReduceAction501(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction376;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction501;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -132415,36 +153500,36 @@ void CHECKNEW_parser___ReduceAction376(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction376_parser___ReduceAction___init[] = "new ReduceAction376 parser::ReduceAction::init";
-val_t NEW_ReduceAction376_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction501_parser___ReduceAction___init[] = "new ReduceAction501 parser::ReduceAction::init";
+val_t NEW_ReduceAction501_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction376_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction501_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction376();
-  INIT_ATTRIBUTES__parser___ReduceAction376(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction501();
+  INIT_ATTRIBUTES__parser___ReduceAction501(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction376(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction501(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction377[55] = {
-  {(bigint) 1303 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction502[55] = {
+  {(bigint) 1127 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction377" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction377 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction377 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1303 /* 5: ReduceAction377 < ReduceAction377: superclass typecheck marker */},
+  {(bigint) "ReduceAction502" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction502 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction502 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1127 /* 5: ReduceAction502 < ReduceAction502: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -132458,7 +153543,7 @@ const classtable_elt_t VFT_parser___ReduceAction377[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction377 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction502 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -132489,46 +153574,46 @@ const classtable_elt_t VFT_parser___ReduceAction377[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction377 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction377___action},
+  {(bigint) 0 /* 50: ReduceAction502 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction502___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction377 < ReduceAction377: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction502 < ReduceAction502: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction377::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction377[] = "init var of ReduceAction377";
-void INIT_ATTRIBUTES__parser___ReduceAction377(val_t p0){
+/* 2: Attribute ReduceAction502::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction502[] = "init var of ReduceAction502";
+void INIT_ATTRIBUTES__parser___ReduceAction502(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction377;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction502;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction377(void)
+val_t NEW_parser___ReduceAction502(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction377;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction502;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction377[] = "check new ReduceAction377";
-void CHECKNEW_parser___ReduceAction377(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction502[] = "check new ReduceAction502";
+void CHECKNEW_parser___ReduceAction502(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction377;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction502;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -132541,36 +153626,36 @@ void CHECKNEW_parser___ReduceAction377(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction377_parser___ReduceAction___init[] = "new ReduceAction377 parser::ReduceAction::init";
-val_t NEW_ReduceAction377_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction502_parser___ReduceAction___init[] = "new ReduceAction502 parser::ReduceAction::init";
+val_t NEW_ReduceAction502_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction377_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction502_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction377();
-  INIT_ATTRIBUTES__parser___ReduceAction377(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction502();
+  INIT_ATTRIBUTES__parser___ReduceAction502(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction377(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction502(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction378[55] = {
-  {(bigint) 1299 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction505[55] = {
+  {(bigint) 1123 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction378" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction378 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction378 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1299 /* 5: ReduceAction378 < ReduceAction378: superclass typecheck marker */},
+  {(bigint) "ReduceAction505" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction505 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction505 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1123 /* 5: ReduceAction505 < ReduceAction505: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -132584,7 +153669,7 @@ const classtable_elt_t VFT_parser___ReduceAction378[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction378 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction505 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -132615,46 +153700,46 @@ const classtable_elt_t VFT_parser___ReduceAction378[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction378 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction378___action},
+  {(bigint) 0 /* 50: ReduceAction505 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction505___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction378 < ReduceAction378: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction505 < ReduceAction505: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction378::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction378[] = "init var of ReduceAction378";
-void INIT_ATTRIBUTES__parser___ReduceAction378(val_t p0){
+/* 2: Attribute ReduceAction505::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction505[] = "init var of ReduceAction505";
+void INIT_ATTRIBUTES__parser___ReduceAction505(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction378;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction505;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction378(void)
+val_t NEW_parser___ReduceAction505(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction378;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction505;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction378[] = "check new ReduceAction378";
-void CHECKNEW_parser___ReduceAction378(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction505[] = "check new ReduceAction505";
+void CHECKNEW_parser___ReduceAction505(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction378;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction505;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -132667,36 +153752,36 @@ void CHECKNEW_parser___ReduceAction378(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction378_parser___ReduceAction___init[] = "new ReduceAction378 parser::ReduceAction::init";
-val_t NEW_ReduceAction378_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction505_parser___ReduceAction___init[] = "new ReduceAction505 parser::ReduceAction::init";
+val_t NEW_ReduceAction505_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction378_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction505_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction378();
-  INIT_ATTRIBUTES__parser___ReduceAction378(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction505();
+  INIT_ATTRIBUTES__parser___ReduceAction505(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction378(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction505(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction379[55] = {
-  {(bigint) 1295 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction506[55] = {
+  {(bigint) 1119 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction379" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction379 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction379 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1295 /* 5: ReduceAction379 < ReduceAction379: superclass typecheck marker */},
+  {(bigint) "ReduceAction506" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction506 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction506 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1119 /* 5: ReduceAction506 < ReduceAction506: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -132710,7 +153795,7 @@ const classtable_elt_t VFT_parser___ReduceAction379[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction379 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction506 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -132741,46 +153826,46 @@ const classtable_elt_t VFT_parser___ReduceAction379[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction379 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction379___action},
+  {(bigint) 0 /* 50: ReduceAction506 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction506___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction379 < ReduceAction379: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction506 < ReduceAction506: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction379::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction379[] = "init var of ReduceAction379";
-void INIT_ATTRIBUTES__parser___ReduceAction379(val_t p0){
+/* 2: Attribute ReduceAction506::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction506[] = "init var of ReduceAction506";
+void INIT_ATTRIBUTES__parser___ReduceAction506(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction379;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction506;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction379(void)
+val_t NEW_parser___ReduceAction506(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction379;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction506;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction379[] = "check new ReduceAction379";
-void CHECKNEW_parser___ReduceAction379(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction506[] = "check new ReduceAction506";
+void CHECKNEW_parser___ReduceAction506(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction379;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction506;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -132793,36 +153878,36 @@ void CHECKNEW_parser___ReduceAction379(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction379_parser___ReduceAction___init[] = "new ReduceAction379 parser::ReduceAction::init";
-val_t NEW_ReduceAction379_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction506_parser___ReduceAction___init[] = "new ReduceAction506 parser::ReduceAction::init";
+val_t NEW_ReduceAction506_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction379_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction506_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction379();
-  INIT_ATTRIBUTES__parser___ReduceAction379(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction506();
+  INIT_ATTRIBUTES__parser___ReduceAction506(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction379(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction506(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction380[55] = {
-  {(bigint) 1287 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction507[55] = {
+  {(bigint) 1115 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction380" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction380 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction380 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1287 /* 5: ReduceAction380 < ReduceAction380: superclass typecheck marker */},
+  {(bigint) "ReduceAction507" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction507 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction507 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1115 /* 5: ReduceAction507 < ReduceAction507: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -132836,7 +153921,7 @@ const classtable_elt_t VFT_parser___ReduceAction380[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction380 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction507 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -132867,46 +153952,46 @@ const classtable_elt_t VFT_parser___ReduceAction380[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction380 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction380___action},
+  {(bigint) 0 /* 50: ReduceAction507 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction507___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction380 < ReduceAction380: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction507 < ReduceAction507: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction380::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction380[] = "init var of ReduceAction380";
-void INIT_ATTRIBUTES__parser___ReduceAction380(val_t p0){
+/* 2: Attribute ReduceAction507::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction507[] = "init var of ReduceAction507";
+void INIT_ATTRIBUTES__parser___ReduceAction507(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction380;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction507;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction380(void)
+val_t NEW_parser___ReduceAction507(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction380;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction507;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction380[] = "check new ReduceAction380";
-void CHECKNEW_parser___ReduceAction380(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction507[] = "check new ReduceAction507";
+void CHECKNEW_parser___ReduceAction507(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction380;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction507;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -132919,36 +154004,36 @@ void CHECKNEW_parser___ReduceAction380(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction380_parser___ReduceAction___init[] = "new ReduceAction380 parser::ReduceAction::init";
-val_t NEW_ReduceAction380_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction507_parser___ReduceAction___init[] = "new ReduceAction507 parser::ReduceAction::init";
+val_t NEW_ReduceAction507_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction380_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction507_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction380();
-  INIT_ATTRIBUTES__parser___ReduceAction380(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction507();
+  INIT_ATTRIBUTES__parser___ReduceAction507(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction380(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction507(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction381[55] = {
-  {(bigint) 1283 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction508[55] = {
+  {(bigint) 1111 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction381" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction381 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction381 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1283 /* 5: ReduceAction381 < ReduceAction381: superclass typecheck marker */},
+  {(bigint) "ReduceAction508" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction508 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction508 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1111 /* 5: ReduceAction508 < ReduceAction508: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -132962,7 +154047,7 @@ const classtable_elt_t VFT_parser___ReduceAction381[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction381 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction508 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -132993,46 +154078,46 @@ const classtable_elt_t VFT_parser___ReduceAction381[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction381 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction381___action},
+  {(bigint) 0 /* 50: ReduceAction508 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction508___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction381 < ReduceAction381: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction508 < ReduceAction508: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction381::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction381[] = "init var of ReduceAction381";
-void INIT_ATTRIBUTES__parser___ReduceAction381(val_t p0){
+/* 2: Attribute ReduceAction508::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction508[] = "init var of ReduceAction508";
+void INIT_ATTRIBUTES__parser___ReduceAction508(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction381;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction508;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction381(void)
+val_t NEW_parser___ReduceAction508(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction381;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction508;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction381[] = "check new ReduceAction381";
-void CHECKNEW_parser___ReduceAction381(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction508[] = "check new ReduceAction508";
+void CHECKNEW_parser___ReduceAction508(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction381;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction508;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -133045,36 +154130,36 @@ void CHECKNEW_parser___ReduceAction381(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction381_parser___ReduceAction___init[] = "new ReduceAction381 parser::ReduceAction::init";
-val_t NEW_ReduceAction381_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction508_parser___ReduceAction___init[] = "new ReduceAction508 parser::ReduceAction::init";
+val_t NEW_ReduceAction508_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction381_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction508_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction381();
-  INIT_ATTRIBUTES__parser___ReduceAction381(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction508();
+  INIT_ATTRIBUTES__parser___ReduceAction508(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction381(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction508(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction382[55] = {
-  {(bigint) 1279 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction509[55] = {
+  {(bigint) 1107 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction382" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction382 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction382 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1279 /* 5: ReduceAction382 < ReduceAction382: superclass typecheck marker */},
+  {(bigint) "ReduceAction509" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction509 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction509 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1107 /* 5: ReduceAction509 < ReduceAction509: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -133088,7 +154173,7 @@ const classtable_elt_t VFT_parser___ReduceAction382[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction382 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction509 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -133119,46 +154204,46 @@ const classtable_elt_t VFT_parser___ReduceAction382[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction382 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction382___action},
+  {(bigint) 0 /* 50: ReduceAction509 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction509___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction382 < ReduceAction382: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction509 < ReduceAction509: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction382::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction382[] = "init var of ReduceAction382";
-void INIT_ATTRIBUTES__parser___ReduceAction382(val_t p0){
+/* 2: Attribute ReduceAction509::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction509[] = "init var of ReduceAction509";
+void INIT_ATTRIBUTES__parser___ReduceAction509(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction382;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction509;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction382(void)
+val_t NEW_parser___ReduceAction509(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction382;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction509;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction382[] = "check new ReduceAction382";
-void CHECKNEW_parser___ReduceAction382(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction509[] = "check new ReduceAction509";
+void CHECKNEW_parser___ReduceAction509(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction382;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction509;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -133171,36 +154256,36 @@ void CHECKNEW_parser___ReduceAction382(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction382_parser___ReduceAction___init[] = "new ReduceAction382 parser::ReduceAction::init";
-val_t NEW_ReduceAction382_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction509_parser___ReduceAction___init[] = "new ReduceAction509 parser::ReduceAction::init";
+val_t NEW_ReduceAction509_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction382_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction509_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction382();
-  INIT_ATTRIBUTES__parser___ReduceAction382(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction509();
+  INIT_ATTRIBUTES__parser___ReduceAction509(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction382(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction509(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction383[55] = {
-  {(bigint) 1275 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction510[55] = {
+  {(bigint) 1099 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction383" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction383 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction383 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1275 /* 5: ReduceAction383 < ReduceAction383: superclass typecheck marker */},
+  {(bigint) "ReduceAction510" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction510 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction510 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1099 /* 5: ReduceAction510 < ReduceAction510: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -133214,7 +154299,7 @@ const classtable_elt_t VFT_parser___ReduceAction383[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction383 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction510 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -133245,46 +154330,46 @@ const classtable_elt_t VFT_parser___ReduceAction383[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction383 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction383___action},
+  {(bigint) 0 /* 50: ReduceAction510 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction510___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction383 < ReduceAction383: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction510 < ReduceAction510: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction383::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction383[] = "init var of ReduceAction383";
-void INIT_ATTRIBUTES__parser___ReduceAction383(val_t p0){
+/* 2: Attribute ReduceAction510::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction510[] = "init var of ReduceAction510";
+void INIT_ATTRIBUTES__parser___ReduceAction510(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction383;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction510;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction383(void)
+val_t NEW_parser___ReduceAction510(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction383;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction510;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction383[] = "check new ReduceAction383";
-void CHECKNEW_parser___ReduceAction383(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction510[] = "check new ReduceAction510";
+void CHECKNEW_parser___ReduceAction510(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction383;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction510;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -133297,36 +154382,36 @@ void CHECKNEW_parser___ReduceAction383(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction383_parser___ReduceAction___init[] = "new ReduceAction383 parser::ReduceAction::init";
-val_t NEW_ReduceAction383_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction510_parser___ReduceAction___init[] = "new ReduceAction510 parser::ReduceAction::init";
+val_t NEW_ReduceAction510_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction383_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction510_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction383();
-  INIT_ATTRIBUTES__parser___ReduceAction383(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction510();
+  INIT_ATTRIBUTES__parser___ReduceAction510(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction383(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction510(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction384[55] = {
-  {(bigint) 1271 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction511[55] = {
+  {(bigint) 1095 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction384" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction384 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction384 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1271 /* 5: ReduceAction384 < ReduceAction384: superclass typecheck marker */},
+  {(bigint) "ReduceAction511" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction511 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction511 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1095 /* 5: ReduceAction511 < ReduceAction511: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -133340,7 +154425,7 @@ const classtable_elt_t VFT_parser___ReduceAction384[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction384 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction511 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -133371,46 +154456,46 @@ const classtable_elt_t VFT_parser___ReduceAction384[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction384 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction384___action},
+  {(bigint) 0 /* 50: ReduceAction511 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction511___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction384 < ReduceAction384: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction511 < ReduceAction511: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction384::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction384[] = "init var of ReduceAction384";
-void INIT_ATTRIBUTES__parser___ReduceAction384(val_t p0){
+/* 2: Attribute ReduceAction511::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction511[] = "init var of ReduceAction511";
+void INIT_ATTRIBUTES__parser___ReduceAction511(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction384;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction511;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction384(void)
+val_t NEW_parser___ReduceAction511(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction384;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction511;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction384[] = "check new ReduceAction384";
-void CHECKNEW_parser___ReduceAction384(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction511[] = "check new ReduceAction511";
+void CHECKNEW_parser___ReduceAction511(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction384;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction511;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -133423,36 +154508,36 @@ void CHECKNEW_parser___ReduceAction384(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction384_parser___ReduceAction___init[] = "new ReduceAction384 parser::ReduceAction::init";
-val_t NEW_ReduceAction384_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction511_parser___ReduceAction___init[] = "new ReduceAction511 parser::ReduceAction::init";
+val_t NEW_ReduceAction511_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction384_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction511_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction384();
-  INIT_ATTRIBUTES__parser___ReduceAction384(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction511();
+  INIT_ATTRIBUTES__parser___ReduceAction511(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction384(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction511(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction385[55] = {
-  {(bigint) 1267 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction512[55] = {
+  {(bigint) 1091 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction385" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction385 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction385 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1267 /* 5: ReduceAction385 < ReduceAction385: superclass typecheck marker */},
+  {(bigint) "ReduceAction512" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction512 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction512 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1091 /* 5: ReduceAction512 < ReduceAction512: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -133466,7 +154551,7 @@ const classtable_elt_t VFT_parser___ReduceAction385[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction385 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction512 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -133497,46 +154582,46 @@ const classtable_elt_t VFT_parser___ReduceAction385[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction385 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction385___action},
+  {(bigint) 0 /* 50: ReduceAction512 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction512___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction385 < ReduceAction385: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction512 < ReduceAction512: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction385::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction385[] = "init var of ReduceAction385";
-void INIT_ATTRIBUTES__parser___ReduceAction385(val_t p0){
+/* 2: Attribute ReduceAction512::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction512[] = "init var of ReduceAction512";
+void INIT_ATTRIBUTES__parser___ReduceAction512(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction385;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction512;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction385(void)
+val_t NEW_parser___ReduceAction512(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction385;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction512;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction385[] = "check new ReduceAction385";
-void CHECKNEW_parser___ReduceAction385(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction512[] = "check new ReduceAction512";
+void CHECKNEW_parser___ReduceAction512(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction385;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction512;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -133549,36 +154634,36 @@ void CHECKNEW_parser___ReduceAction385(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction385_parser___ReduceAction___init[] = "new ReduceAction385 parser::ReduceAction::init";
-val_t NEW_ReduceAction385_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction512_parser___ReduceAction___init[] = "new ReduceAction512 parser::ReduceAction::init";
+val_t NEW_ReduceAction512_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction385_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction512_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction385();
-  INIT_ATTRIBUTES__parser___ReduceAction385(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction512();
+  INIT_ATTRIBUTES__parser___ReduceAction512(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction385(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction512(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction386[55] = {
-  {(bigint) 1263 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction513[55] = {
+  {(bigint) 1087 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction386" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction386 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction386 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1263 /* 5: ReduceAction386 < ReduceAction386: superclass typecheck marker */},
+  {(bigint) "ReduceAction513" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction513 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction513 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1087 /* 5: ReduceAction513 < ReduceAction513: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -133592,7 +154677,7 @@ const classtable_elt_t VFT_parser___ReduceAction386[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction386 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction513 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -133623,46 +154708,46 @@ const classtable_elt_t VFT_parser___ReduceAction386[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction386 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction386___action},
+  {(bigint) 0 /* 50: ReduceAction513 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction513___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction386 < ReduceAction386: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction513 < ReduceAction513: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction386::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction386[] = "init var of ReduceAction386";
-void INIT_ATTRIBUTES__parser___ReduceAction386(val_t p0){
+/* 2: Attribute ReduceAction513::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction513[] = "init var of ReduceAction513";
+void INIT_ATTRIBUTES__parser___ReduceAction513(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction386;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction513;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction386(void)
+val_t NEW_parser___ReduceAction513(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction386;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction513;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction386[] = "check new ReduceAction386";
-void CHECKNEW_parser___ReduceAction386(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction513[] = "check new ReduceAction513";
+void CHECKNEW_parser___ReduceAction513(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction386;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction513;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -133675,36 +154760,36 @@ void CHECKNEW_parser___ReduceAction386(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction386_parser___ReduceAction___init[] = "new ReduceAction386 parser::ReduceAction::init";
-val_t NEW_ReduceAction386_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction513_parser___ReduceAction___init[] = "new ReduceAction513 parser::ReduceAction::init";
+val_t NEW_ReduceAction513_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction386_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction513_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction386();
-  INIT_ATTRIBUTES__parser___ReduceAction386(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction513();
+  INIT_ATTRIBUTES__parser___ReduceAction513(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction386(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction513(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction387[55] = {
-  {(bigint) 1259 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction514[55] = {
+  {(bigint) 1083 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction387" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction387 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction387 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1259 /* 5: ReduceAction387 < ReduceAction387: superclass typecheck marker */},
+  {(bigint) "ReduceAction514" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction514 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction514 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1083 /* 5: ReduceAction514 < ReduceAction514: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -133718,7 +154803,7 @@ const classtable_elt_t VFT_parser___ReduceAction387[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction387 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction514 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -133749,46 +154834,46 @@ const classtable_elt_t VFT_parser___ReduceAction387[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction387 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction387___action},
+  {(bigint) 0 /* 50: ReduceAction514 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction514___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction387 < ReduceAction387: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction514 < ReduceAction514: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction387::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction387[] = "init var of ReduceAction387";
-void INIT_ATTRIBUTES__parser___ReduceAction387(val_t p0){
+/* 2: Attribute ReduceAction514::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction514[] = "init var of ReduceAction514";
+void INIT_ATTRIBUTES__parser___ReduceAction514(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction387;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction514;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction387(void)
+val_t NEW_parser___ReduceAction514(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction387;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction514;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction387[] = "check new ReduceAction387";
-void CHECKNEW_parser___ReduceAction387(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction514[] = "check new ReduceAction514";
+void CHECKNEW_parser___ReduceAction514(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction387;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction514;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -133801,36 +154886,36 @@ void CHECKNEW_parser___ReduceAction387(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction387_parser___ReduceAction___init[] = "new ReduceAction387 parser::ReduceAction::init";
-val_t NEW_ReduceAction387_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction514_parser___ReduceAction___init[] = "new ReduceAction514 parser::ReduceAction::init";
+val_t NEW_ReduceAction514_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction387_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction514_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction387();
-  INIT_ATTRIBUTES__parser___ReduceAction387(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction514();
+  INIT_ATTRIBUTES__parser___ReduceAction514(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction387(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction514(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction388[55] = {
-  {(bigint) 1255 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction515[55] = {
+  {(bigint) 1079 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction388" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction388 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction388 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1255 /* 5: ReduceAction388 < ReduceAction388: superclass typecheck marker */},
+  {(bigint) "ReduceAction515" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction515 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction515 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1079 /* 5: ReduceAction515 < ReduceAction515: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -133844,7 +154929,7 @@ const classtable_elt_t VFT_parser___ReduceAction388[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction388 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction515 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -133875,46 +154960,46 @@ const classtable_elt_t VFT_parser___ReduceAction388[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction388 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction388___action},
+  {(bigint) 0 /* 50: ReduceAction515 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction515___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction388 < ReduceAction388: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction515 < ReduceAction515: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction388::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction388[] = "init var of ReduceAction388";
-void INIT_ATTRIBUTES__parser___ReduceAction388(val_t p0){
+/* 2: Attribute ReduceAction515::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction515[] = "init var of ReduceAction515";
+void INIT_ATTRIBUTES__parser___ReduceAction515(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction388;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction515;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction388(void)
+val_t NEW_parser___ReduceAction515(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction388;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction515;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction388[] = "check new ReduceAction388";
-void CHECKNEW_parser___ReduceAction388(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction515[] = "check new ReduceAction515";
+void CHECKNEW_parser___ReduceAction515(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction388;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction515;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -133927,36 +155012,36 @@ void CHECKNEW_parser___ReduceAction388(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction388_parser___ReduceAction___init[] = "new ReduceAction388 parser::ReduceAction::init";
-val_t NEW_ReduceAction388_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction515_parser___ReduceAction___init[] = "new ReduceAction515 parser::ReduceAction::init";
+val_t NEW_ReduceAction515_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction388_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction515_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction388();
-  INIT_ATTRIBUTES__parser___ReduceAction388(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction515();
+  INIT_ATTRIBUTES__parser___ReduceAction515(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction388(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction515(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction389[55] = {
-  {(bigint) 1251 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction516[55] = {
+  {(bigint) 1075 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction389" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction389 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction389 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1251 /* 5: ReduceAction389 < ReduceAction389: superclass typecheck marker */},
+  {(bigint) "ReduceAction516" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction516 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction516 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1075 /* 5: ReduceAction516 < ReduceAction516: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -133970,7 +155055,7 @@ const classtable_elt_t VFT_parser___ReduceAction389[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction389 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction516 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -134001,46 +155086,46 @@ const classtable_elt_t VFT_parser___ReduceAction389[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction389 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction389___action},
+  {(bigint) 0 /* 50: ReduceAction516 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction516___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction389 < ReduceAction389: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction516 < ReduceAction516: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction389::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction389[] = "init var of ReduceAction389";
-void INIT_ATTRIBUTES__parser___ReduceAction389(val_t p0){
+/* 2: Attribute ReduceAction516::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction516[] = "init var of ReduceAction516";
+void INIT_ATTRIBUTES__parser___ReduceAction516(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction389;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction516;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction389(void)
+val_t NEW_parser___ReduceAction516(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction389;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction516;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction389[] = "check new ReduceAction389";
-void CHECKNEW_parser___ReduceAction389(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction516[] = "check new ReduceAction516";
+void CHECKNEW_parser___ReduceAction516(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction389;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction516;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -134053,36 +155138,36 @@ void CHECKNEW_parser___ReduceAction389(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction389_parser___ReduceAction___init[] = "new ReduceAction389 parser::ReduceAction::init";
-val_t NEW_ReduceAction389_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction516_parser___ReduceAction___init[] = "new ReduceAction516 parser::ReduceAction::init";
+val_t NEW_ReduceAction516_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction389_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction516_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction389();
-  INIT_ATTRIBUTES__parser___ReduceAction389(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction516();
+  INIT_ATTRIBUTES__parser___ReduceAction516(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction389(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction516(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction390[55] = {
-  {(bigint) 1243 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction517[55] = {
+  {(bigint) 1071 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction390" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction390 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction390 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1243 /* 5: ReduceAction390 < ReduceAction390: superclass typecheck marker */},
+  {(bigint) "ReduceAction517" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction517 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction517 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1071 /* 5: ReduceAction517 < ReduceAction517: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -134096,7 +155181,7 @@ const classtable_elt_t VFT_parser___ReduceAction390[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction390 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction517 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -134127,46 +155212,46 @@ const classtable_elt_t VFT_parser___ReduceAction390[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction390 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction390___action},
+  {(bigint) 0 /* 50: ReduceAction517 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction517___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction390 < ReduceAction390: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction517 < ReduceAction517: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction390::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction390[] = "init var of ReduceAction390";
-void INIT_ATTRIBUTES__parser___ReduceAction390(val_t p0){
+/* 2: Attribute ReduceAction517::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction517[] = "init var of ReduceAction517";
+void INIT_ATTRIBUTES__parser___ReduceAction517(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction390;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction517;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction390(void)
+val_t NEW_parser___ReduceAction517(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction390;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction517;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction390[] = "check new ReduceAction390";
-void CHECKNEW_parser___ReduceAction390(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction517[] = "check new ReduceAction517";
+void CHECKNEW_parser___ReduceAction517(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction390;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction517;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -134179,36 +155264,36 @@ void CHECKNEW_parser___ReduceAction390(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction390_parser___ReduceAction___init[] = "new ReduceAction390 parser::ReduceAction::init";
-val_t NEW_ReduceAction390_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction517_parser___ReduceAction___init[] = "new ReduceAction517 parser::ReduceAction::init";
+val_t NEW_ReduceAction517_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction390_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction517_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction390();
-  INIT_ATTRIBUTES__parser___ReduceAction390(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction517();
+  INIT_ATTRIBUTES__parser___ReduceAction517(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction390(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction517(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction391[55] = {
-  {(bigint) 1239 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction521[55] = {
+  {(bigint) 1063 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction391" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction391 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction391 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1239 /* 5: ReduceAction391 < ReduceAction391: superclass typecheck marker */},
+  {(bigint) "ReduceAction521" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction521 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction521 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1063 /* 5: ReduceAction521 < ReduceAction521: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -134222,7 +155307,7 @@ const classtable_elt_t VFT_parser___ReduceAction391[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction391 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction521 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -134253,46 +155338,46 @@ const classtable_elt_t VFT_parser___ReduceAction391[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction391 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction391___action},
+  {(bigint) 0 /* 50: ReduceAction521 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction521___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction391 < ReduceAction391: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction521 < ReduceAction521: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction391::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction391[] = "init var of ReduceAction391";
-void INIT_ATTRIBUTES__parser___ReduceAction391(val_t p0){
+/* 2: Attribute ReduceAction521::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction521[] = "init var of ReduceAction521";
+void INIT_ATTRIBUTES__parser___ReduceAction521(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction391;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction521;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction391(void)
+val_t NEW_parser___ReduceAction521(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction391;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction521;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction391[] = "check new ReduceAction391";
-void CHECKNEW_parser___ReduceAction391(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction521[] = "check new ReduceAction521";
+void CHECKNEW_parser___ReduceAction521(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction391;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction521;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -134305,36 +155390,36 @@ void CHECKNEW_parser___ReduceAction391(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction391_parser___ReduceAction___init[] = "new ReduceAction391 parser::ReduceAction::init";
-val_t NEW_ReduceAction391_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction521_parser___ReduceAction___init[] = "new ReduceAction521 parser::ReduceAction::init";
+val_t NEW_ReduceAction521_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction391_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction521_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction391();
-  INIT_ATTRIBUTES__parser___ReduceAction391(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction521();
+  INIT_ATTRIBUTES__parser___ReduceAction521(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction391(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction521(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction392[55] = {
-  {(bigint) 1235 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction523[55] = {
+  {(bigint) 1059 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction392" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction392 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction392 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1235 /* 5: ReduceAction392 < ReduceAction392: superclass typecheck marker */},
+  {(bigint) "ReduceAction523" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction523 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction523 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1059 /* 5: ReduceAction523 < ReduceAction523: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -134348,7 +155433,7 @@ const classtable_elt_t VFT_parser___ReduceAction392[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction392 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction523 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -134379,46 +155464,46 @@ const classtable_elt_t VFT_parser___ReduceAction392[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction392 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction392___action},
+  {(bigint) 0 /* 50: ReduceAction523 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction523___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction392 < ReduceAction392: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction523 < ReduceAction523: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction392::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction392[] = "init var of ReduceAction392";
-void INIT_ATTRIBUTES__parser___ReduceAction392(val_t p0){
+/* 2: Attribute ReduceAction523::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction523[] = "init var of ReduceAction523";
+void INIT_ATTRIBUTES__parser___ReduceAction523(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction392;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction523;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction392(void)
+val_t NEW_parser___ReduceAction523(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction392;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction523;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction392[] = "check new ReduceAction392";
-void CHECKNEW_parser___ReduceAction392(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction523[] = "check new ReduceAction523";
+void CHECKNEW_parser___ReduceAction523(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction392;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction523;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -134431,36 +155516,36 @@ void CHECKNEW_parser___ReduceAction392(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction392_parser___ReduceAction___init[] = "new ReduceAction392 parser::ReduceAction::init";
-val_t NEW_ReduceAction392_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction523_parser___ReduceAction___init[] = "new ReduceAction523 parser::ReduceAction::init";
+val_t NEW_ReduceAction523_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction392_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction523_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction392();
-  INIT_ATTRIBUTES__parser___ReduceAction392(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction523();
+  INIT_ATTRIBUTES__parser___ReduceAction523(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction392(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction523(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction393[55] = {
-  {(bigint) 1231 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction525[55] = {
+  {(bigint) 1055 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction393" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction393 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction393 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1231 /* 5: ReduceAction393 < ReduceAction393: superclass typecheck marker */},
+  {(bigint) "ReduceAction525" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction525 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction525 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1055 /* 5: ReduceAction525 < ReduceAction525: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -134474,7 +155559,7 @@ const classtable_elt_t VFT_parser___ReduceAction393[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction393 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction525 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -134505,46 +155590,46 @@ const classtable_elt_t VFT_parser___ReduceAction393[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction393 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction393___action},
+  {(bigint) 0 /* 50: ReduceAction525 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction525___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction393 < ReduceAction393: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction525 < ReduceAction525: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction393::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction393[] = "init var of ReduceAction393";
-void INIT_ATTRIBUTES__parser___ReduceAction393(val_t p0){
+/* 2: Attribute ReduceAction525::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction525[] = "init var of ReduceAction525";
+void INIT_ATTRIBUTES__parser___ReduceAction525(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction393;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction525;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction393(void)
+val_t NEW_parser___ReduceAction525(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction393;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction525;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction393[] = "check new ReduceAction393";
-void CHECKNEW_parser___ReduceAction393(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction525[] = "check new ReduceAction525";
+void CHECKNEW_parser___ReduceAction525(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction393;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction525;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -134557,36 +155642,36 @@ void CHECKNEW_parser___ReduceAction393(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction393_parser___ReduceAction___init[] = "new ReduceAction393 parser::ReduceAction::init";
-val_t NEW_ReduceAction393_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction525_parser___ReduceAction___init[] = "new ReduceAction525 parser::ReduceAction::init";
+val_t NEW_ReduceAction525_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction393_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction525_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction393();
-  INIT_ATTRIBUTES__parser___ReduceAction393(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction525();
+  INIT_ATTRIBUTES__parser___ReduceAction525(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction393(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction525(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction394[55] = {
-  {(bigint) 1227 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction526[55] = {
+  {(bigint) 1051 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction394" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction394 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction394 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1227 /* 5: ReduceAction394 < ReduceAction394: superclass typecheck marker */},
+  {(bigint) "ReduceAction526" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction526 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction526 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1051 /* 5: ReduceAction526 < ReduceAction526: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -134600,7 +155685,7 @@ const classtable_elt_t VFT_parser___ReduceAction394[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction394 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction526 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -134631,46 +155716,46 @@ const classtable_elt_t VFT_parser___ReduceAction394[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction394 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction394___action},
+  {(bigint) 0 /* 50: ReduceAction526 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction526___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction394 < ReduceAction394: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction526 < ReduceAction526: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction394::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction394[] = "init var of ReduceAction394";
-void INIT_ATTRIBUTES__parser___ReduceAction394(val_t p0){
+/* 2: Attribute ReduceAction526::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction526[] = "init var of ReduceAction526";
+void INIT_ATTRIBUTES__parser___ReduceAction526(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction394;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction526;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction394(void)
+val_t NEW_parser___ReduceAction526(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction394;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction526;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction394[] = "check new ReduceAction394";
-void CHECKNEW_parser___ReduceAction394(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction526[] = "check new ReduceAction526";
+void CHECKNEW_parser___ReduceAction526(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction394;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction526;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -134683,36 +155768,36 @@ void CHECKNEW_parser___ReduceAction394(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction394_parser___ReduceAction___init[] = "new ReduceAction394 parser::ReduceAction::init";
-val_t NEW_ReduceAction394_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction526_parser___ReduceAction___init[] = "new ReduceAction526 parser::ReduceAction::init";
+val_t NEW_ReduceAction526_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction394_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction526_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction394();
-  INIT_ATTRIBUTES__parser___ReduceAction394(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction526();
+  INIT_ATTRIBUTES__parser___ReduceAction526(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction394(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction526(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction395[55] = {
-  {(bigint) 1223 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction527[55] = {
+  {(bigint) 1047 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction395" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction395 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction395 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1223 /* 5: ReduceAction395 < ReduceAction395: superclass typecheck marker */},
+  {(bigint) "ReduceAction527" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction527 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction527 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1047 /* 5: ReduceAction527 < ReduceAction527: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -134726,7 +155811,7 @@ const classtable_elt_t VFT_parser___ReduceAction395[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction395 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction527 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -134757,46 +155842,46 @@ const classtable_elt_t VFT_parser___ReduceAction395[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction395 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction395___action},
+  {(bigint) 0 /* 50: ReduceAction527 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction527___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction395 < ReduceAction395: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction527 < ReduceAction527: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction395::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction395[] = "init var of ReduceAction395";
-void INIT_ATTRIBUTES__parser___ReduceAction395(val_t p0){
+/* 2: Attribute ReduceAction527::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction527[] = "init var of ReduceAction527";
+void INIT_ATTRIBUTES__parser___ReduceAction527(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction395;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction527;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction395(void)
+val_t NEW_parser___ReduceAction527(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction395;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction527;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction395[] = "check new ReduceAction395";
-void CHECKNEW_parser___ReduceAction395(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction527[] = "check new ReduceAction527";
+void CHECKNEW_parser___ReduceAction527(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction395;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction527;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -134809,36 +155894,36 @@ void CHECKNEW_parser___ReduceAction395(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction395_parser___ReduceAction___init[] = "new ReduceAction395 parser::ReduceAction::init";
-val_t NEW_ReduceAction395_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction527_parser___ReduceAction___init[] = "new ReduceAction527 parser::ReduceAction::init";
+val_t NEW_ReduceAction527_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction395_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction527_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction395();
-  INIT_ATTRIBUTES__parser___ReduceAction395(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction527();
+  INIT_ATTRIBUTES__parser___ReduceAction527(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction395(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction527(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction396[55] = {
-  {(bigint) 1219 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction529[55] = {
+  {(bigint) 1043 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction396" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction396 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction396 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1219 /* 5: ReduceAction396 < ReduceAction396: superclass typecheck marker */},
+  {(bigint) "ReduceAction529" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction529 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction529 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1043 /* 5: ReduceAction529 < ReduceAction529: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -134852,7 +155937,7 @@ const classtable_elt_t VFT_parser___ReduceAction396[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction396 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction529 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -134883,46 +155968,46 @@ const classtable_elt_t VFT_parser___ReduceAction396[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction396 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction396___action},
+  {(bigint) 0 /* 50: ReduceAction529 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction529___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction396 < ReduceAction396: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction529 < ReduceAction529: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction396::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction396[] = "init var of ReduceAction396";
-void INIT_ATTRIBUTES__parser___ReduceAction396(val_t p0){
+/* 2: Attribute ReduceAction529::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction529[] = "init var of ReduceAction529";
+void INIT_ATTRIBUTES__parser___ReduceAction529(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction396;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction529;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction396(void)
+val_t NEW_parser___ReduceAction529(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction396;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction529;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction396[] = "check new ReduceAction396";
-void CHECKNEW_parser___ReduceAction396(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction529[] = "check new ReduceAction529";
+void CHECKNEW_parser___ReduceAction529(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction396;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction529;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -134935,36 +156020,36 @@ void CHECKNEW_parser___ReduceAction396(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction396_parser___ReduceAction___init[] = "new ReduceAction396 parser::ReduceAction::init";
-val_t NEW_ReduceAction396_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction529_parser___ReduceAction___init[] = "new ReduceAction529 parser::ReduceAction::init";
+val_t NEW_ReduceAction529_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction396_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction529_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction396();
-  INIT_ATTRIBUTES__parser___ReduceAction396(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction529();
+  INIT_ATTRIBUTES__parser___ReduceAction529(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction396(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction529(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction397[55] = {
-  {(bigint) 1215 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction531[55] = {
+  {(bigint) 1035 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction397" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction397 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction397 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1215 /* 5: ReduceAction397 < ReduceAction397: superclass typecheck marker */},
+  {(bigint) "ReduceAction531" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction531 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction531 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1035 /* 5: ReduceAction531 < ReduceAction531: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -134978,7 +156063,7 @@ const classtable_elt_t VFT_parser___ReduceAction397[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction397 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction531 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -135009,46 +156094,46 @@ const classtable_elt_t VFT_parser___ReduceAction397[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction397 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction397___action},
+  {(bigint) 0 /* 50: ReduceAction531 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction531___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction397 < ReduceAction397: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction531 < ReduceAction531: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction397::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction397[] = "init var of ReduceAction397";
-void INIT_ATTRIBUTES__parser___ReduceAction397(val_t p0){
+/* 2: Attribute ReduceAction531::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction531[] = "init var of ReduceAction531";
+void INIT_ATTRIBUTES__parser___ReduceAction531(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction397;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction531;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction397(void)
+val_t NEW_parser___ReduceAction531(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction397;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction531;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction397[] = "check new ReduceAction397";
-void CHECKNEW_parser___ReduceAction397(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction531[] = "check new ReduceAction531";
+void CHECKNEW_parser___ReduceAction531(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction397;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction531;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -135061,36 +156146,36 @@ void CHECKNEW_parser___ReduceAction397(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction397_parser___ReduceAction___init[] = "new ReduceAction397 parser::ReduceAction::init";
-val_t NEW_ReduceAction397_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction531_parser___ReduceAction___init[] = "new ReduceAction531 parser::ReduceAction::init";
+val_t NEW_ReduceAction531_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction397_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction531_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction397();
-  INIT_ATTRIBUTES__parser___ReduceAction397(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction531();
+  INIT_ATTRIBUTES__parser___ReduceAction531(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction397(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction531(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction398[55] = {
-  {(bigint) 1211 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction532[55] = {
+  {(bigint) 1031 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction398" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction398 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction398 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1211 /* 5: ReduceAction398 < ReduceAction398: superclass typecheck marker */},
+  {(bigint) "ReduceAction532" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction532 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction532 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1031 /* 5: ReduceAction532 < ReduceAction532: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -135104,7 +156189,7 @@ const classtable_elt_t VFT_parser___ReduceAction398[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction398 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction532 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -135135,46 +156220,46 @@ const classtable_elt_t VFT_parser___ReduceAction398[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction398 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction398___action},
+  {(bigint) 0 /* 50: ReduceAction532 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction532___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction398 < ReduceAction398: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction532 < ReduceAction532: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction398::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction398[] = "init var of ReduceAction398";
-void INIT_ATTRIBUTES__parser___ReduceAction398(val_t p0){
+/* 2: Attribute ReduceAction532::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction532[] = "init var of ReduceAction532";
+void INIT_ATTRIBUTES__parser___ReduceAction532(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction398;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction532;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction398(void)
+val_t NEW_parser___ReduceAction532(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction398;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction532;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction398[] = "check new ReduceAction398";
-void CHECKNEW_parser___ReduceAction398(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction532[] = "check new ReduceAction532";
+void CHECKNEW_parser___ReduceAction532(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction398;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction532;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -135187,36 +156272,36 @@ void CHECKNEW_parser___ReduceAction398(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction398_parser___ReduceAction___init[] = "new ReduceAction398 parser::ReduceAction::init";
-val_t NEW_ReduceAction398_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction532_parser___ReduceAction___init[] = "new ReduceAction532 parser::ReduceAction::init";
+val_t NEW_ReduceAction532_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction398_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction532_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction398();
-  INIT_ATTRIBUTES__parser___ReduceAction398(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction532();
+  INIT_ATTRIBUTES__parser___ReduceAction532(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction398(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction532(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction399[55] = {
-  {(bigint) 1207 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction533[55] = {
+  {(bigint) 1027 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction399" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction399 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction399 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1207 /* 5: ReduceAction399 < ReduceAction399: superclass typecheck marker */},
+  {(bigint) "ReduceAction533" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction533 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction533 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1027 /* 5: ReduceAction533 < ReduceAction533: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -135230,7 +156315,7 @@ const classtable_elt_t VFT_parser___ReduceAction399[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction399 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction533 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -135261,46 +156346,46 @@ const classtable_elt_t VFT_parser___ReduceAction399[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction399 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction399___action},
+  {(bigint) 0 /* 50: ReduceAction533 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction533___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction399 < ReduceAction399: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction533 < ReduceAction533: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction399::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction399[] = "init var of ReduceAction399";
-void INIT_ATTRIBUTES__parser___ReduceAction399(val_t p0){
+/* 2: Attribute ReduceAction533::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction533[] = "init var of ReduceAction533";
+void INIT_ATTRIBUTES__parser___ReduceAction533(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction399;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction533;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction399(void)
+val_t NEW_parser___ReduceAction533(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction399;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction533;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction399[] = "check new ReduceAction399";
-void CHECKNEW_parser___ReduceAction399(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction533[] = "check new ReduceAction533";
+void CHECKNEW_parser___ReduceAction533(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction399;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction533;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -135313,36 +156398,36 @@ void CHECKNEW_parser___ReduceAction399(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction399_parser___ReduceAction___init[] = "new ReduceAction399 parser::ReduceAction::init";
-val_t NEW_ReduceAction399_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction533_parser___ReduceAction___init[] = "new ReduceAction533 parser::ReduceAction::init";
+val_t NEW_ReduceAction533_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction399_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction533_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction399();
-  INIT_ATTRIBUTES__parser___ReduceAction399(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction533();
+  INIT_ATTRIBUTES__parser___ReduceAction533(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction399(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction533(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction400[55] = {
-  {(bigint) 1195 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction534[55] = {
+  {(bigint) 1023 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction400" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction400 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction400 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1195 /* 5: ReduceAction400 < ReduceAction400: superclass typecheck marker */},
+  {(bigint) "ReduceAction534" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction534 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction534 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1023 /* 5: ReduceAction534 < ReduceAction534: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -135356,7 +156441,7 @@ const classtable_elt_t VFT_parser___ReduceAction400[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction400 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction534 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -135387,46 +156472,46 @@ const classtable_elt_t VFT_parser___ReduceAction400[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction400 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction400___action},
+  {(bigint) 0 /* 50: ReduceAction534 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction534___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction400 < ReduceAction400: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction534 < ReduceAction534: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction400::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction400[] = "init var of ReduceAction400";
-void INIT_ATTRIBUTES__parser___ReduceAction400(val_t p0){
+/* 2: Attribute ReduceAction534::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction534[] = "init var of ReduceAction534";
+void INIT_ATTRIBUTES__parser___ReduceAction534(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction400;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction534;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction400(void)
+val_t NEW_parser___ReduceAction534(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction400;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction534;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction400[] = "check new ReduceAction400";
-void CHECKNEW_parser___ReduceAction400(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction534[] = "check new ReduceAction534";
+void CHECKNEW_parser___ReduceAction534(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction400;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction534;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -135439,36 +156524,36 @@ void CHECKNEW_parser___ReduceAction400(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction400_parser___ReduceAction___init[] = "new ReduceAction400 parser::ReduceAction::init";
-val_t NEW_ReduceAction400_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction534_parser___ReduceAction___init[] = "new ReduceAction534 parser::ReduceAction::init";
+val_t NEW_ReduceAction534_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction400_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction534_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction400();
-  INIT_ATTRIBUTES__parser___ReduceAction400(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction534();
+  INIT_ATTRIBUTES__parser___ReduceAction534(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction400(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction534(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction401[55] = {
-  {(bigint) 1191 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction535[55] = {
+  {(bigint) 1019 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction401" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction401 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction401 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1191 /* 5: ReduceAction401 < ReduceAction401: superclass typecheck marker */},
+  {(bigint) "ReduceAction535" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction535 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction535 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1019 /* 5: ReduceAction535 < ReduceAction535: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -135482,7 +156567,7 @@ const classtable_elt_t VFT_parser___ReduceAction401[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction401 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction535 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -135513,46 +156598,46 @@ const classtable_elt_t VFT_parser___ReduceAction401[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction401 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction401___action},
+  {(bigint) 0 /* 50: ReduceAction535 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction535___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction401 < ReduceAction401: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction535 < ReduceAction535: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction401::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction401[] = "init var of ReduceAction401";
-void INIT_ATTRIBUTES__parser___ReduceAction401(val_t p0){
+/* 2: Attribute ReduceAction535::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction535[] = "init var of ReduceAction535";
+void INIT_ATTRIBUTES__parser___ReduceAction535(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction401;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction535;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction401(void)
+val_t NEW_parser___ReduceAction535(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction401;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction535;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction401[] = "check new ReduceAction401";
-void CHECKNEW_parser___ReduceAction401(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction535[] = "check new ReduceAction535";
+void CHECKNEW_parser___ReduceAction535(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction401;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction535;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -135565,36 +156650,36 @@ void CHECKNEW_parser___ReduceAction401(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction401_parser___ReduceAction___init[] = "new ReduceAction401 parser::ReduceAction::init";
-val_t NEW_ReduceAction401_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction535_parser___ReduceAction___init[] = "new ReduceAction535 parser::ReduceAction::init";
+val_t NEW_ReduceAction535_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction401_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction535_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction401();
-  INIT_ATTRIBUTES__parser___ReduceAction401(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction535();
+  INIT_ATTRIBUTES__parser___ReduceAction535(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction401(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction535(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction402[55] = {
-  {(bigint) 1187 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction536[55] = {
+  {(bigint) 1015 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction402" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction402 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction402 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1187 /* 5: ReduceAction402 < ReduceAction402: superclass typecheck marker */},
+  {(bigint) "ReduceAction536" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction536 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction536 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1015 /* 5: ReduceAction536 < ReduceAction536: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -135608,7 +156693,7 @@ const classtable_elt_t VFT_parser___ReduceAction402[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction402 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction536 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -135639,46 +156724,46 @@ const classtable_elt_t VFT_parser___ReduceAction402[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction402 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction402___action},
+  {(bigint) 0 /* 50: ReduceAction536 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction536___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction402 < ReduceAction402: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction536 < ReduceAction536: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction402::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction402[] = "init var of ReduceAction402";
-void INIT_ATTRIBUTES__parser___ReduceAction402(val_t p0){
+/* 2: Attribute ReduceAction536::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction536[] = "init var of ReduceAction536";
+void INIT_ATTRIBUTES__parser___ReduceAction536(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction402;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction536;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction402(void)
+val_t NEW_parser___ReduceAction536(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction402;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction536;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction402[] = "check new ReduceAction402";
-void CHECKNEW_parser___ReduceAction402(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction536[] = "check new ReduceAction536";
+void CHECKNEW_parser___ReduceAction536(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction402;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction536;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -135691,36 +156776,36 @@ void CHECKNEW_parser___ReduceAction402(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction402_parser___ReduceAction___init[] = "new ReduceAction402 parser::ReduceAction::init";
-val_t NEW_ReduceAction402_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction536_parser___ReduceAction___init[] = "new ReduceAction536 parser::ReduceAction::init";
+val_t NEW_ReduceAction536_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction402_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction536_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction402();
-  INIT_ATTRIBUTES__parser___ReduceAction402(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction536();
+  INIT_ATTRIBUTES__parser___ReduceAction536(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction402(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction536(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction403[55] = {
-  {(bigint) 1183 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction537[55] = {
+  {(bigint) 1011 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction403" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction403 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction403 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1183 /* 5: ReduceAction403 < ReduceAction403: superclass typecheck marker */},
+  {(bigint) "ReduceAction537" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction537 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction537 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1011 /* 5: ReduceAction537 < ReduceAction537: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -135734,7 +156819,7 @@ const classtable_elt_t VFT_parser___ReduceAction403[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction403 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction537 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -135765,46 +156850,46 @@ const classtable_elt_t VFT_parser___ReduceAction403[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction403 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction403___action},
+  {(bigint) 0 /* 50: ReduceAction537 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction537___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction403 < ReduceAction403: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction537 < ReduceAction537: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction403::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction403[] = "init var of ReduceAction403";
-void INIT_ATTRIBUTES__parser___ReduceAction403(val_t p0){
+/* 2: Attribute ReduceAction537::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction537[] = "init var of ReduceAction537";
+void INIT_ATTRIBUTES__parser___ReduceAction537(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction403;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction537;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction403(void)
+val_t NEW_parser___ReduceAction537(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction403;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction537;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction403[] = "check new ReduceAction403";
-void CHECKNEW_parser___ReduceAction403(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction537[] = "check new ReduceAction537";
+void CHECKNEW_parser___ReduceAction537(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction403;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction537;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -135817,36 +156902,36 @@ void CHECKNEW_parser___ReduceAction403(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction403_parser___ReduceAction___init[] = "new ReduceAction403 parser::ReduceAction::init";
-val_t NEW_ReduceAction403_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction537_parser___ReduceAction___init[] = "new ReduceAction537 parser::ReduceAction::init";
+val_t NEW_ReduceAction537_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction403_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction537_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction403();
-  INIT_ATTRIBUTES__parser___ReduceAction403(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction537();
+  INIT_ATTRIBUTES__parser___ReduceAction537(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction403(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction537(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction404[55] = {
-  {(bigint) 1179 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction538[55] = {
+  {(bigint) 1007 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction404" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction404 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction404 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1179 /* 5: ReduceAction404 < ReduceAction404: superclass typecheck marker */},
+  {(bigint) "ReduceAction538" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction538 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction538 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1007 /* 5: ReduceAction538 < ReduceAction538: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -135860,7 +156945,7 @@ const classtable_elt_t VFT_parser___ReduceAction404[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction404 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction538 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -135891,46 +156976,46 @@ const classtable_elt_t VFT_parser___ReduceAction404[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction404 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction404___action},
+  {(bigint) 0 /* 50: ReduceAction538 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction538___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction404 < ReduceAction404: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction538 < ReduceAction538: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction404::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction404[] = "init var of ReduceAction404";
-void INIT_ATTRIBUTES__parser___ReduceAction404(val_t p0){
+/* 2: Attribute ReduceAction538::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction538[] = "init var of ReduceAction538";
+void INIT_ATTRIBUTES__parser___ReduceAction538(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction404;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction538;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction404(void)
+val_t NEW_parser___ReduceAction538(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction404;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction538;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction404[] = "check new ReduceAction404";
-void CHECKNEW_parser___ReduceAction404(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction538[] = "check new ReduceAction538";
+void CHECKNEW_parser___ReduceAction538(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction404;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction538;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -135943,36 +157028,36 @@ void CHECKNEW_parser___ReduceAction404(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction404_parser___ReduceAction___init[] = "new ReduceAction404 parser::ReduceAction::init";
-val_t NEW_ReduceAction404_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction538_parser___ReduceAction___init[] = "new ReduceAction538 parser::ReduceAction::init";
+val_t NEW_ReduceAction538_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction404_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction538_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction404();
-  INIT_ATTRIBUTES__parser___ReduceAction404(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction538();
+  INIT_ATTRIBUTES__parser___ReduceAction538(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction404(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction538(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction405[55] = {
-  {(bigint) 1175 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction539[55] = {
+  {(bigint) 1003 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction405" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction405 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction405 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1175 /* 5: ReduceAction405 < ReduceAction405: superclass typecheck marker */},
+  {(bigint) "ReduceAction539" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction539 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction539 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 1003 /* 5: ReduceAction539 < ReduceAction539: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -135986,7 +157071,7 @@ const classtable_elt_t VFT_parser___ReduceAction405[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction405 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction539 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -136017,46 +157102,46 @@ const classtable_elt_t VFT_parser___ReduceAction405[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction405 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction405___action},
+  {(bigint) 0 /* 50: ReduceAction539 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction539___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction405 < ReduceAction405: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction539 < ReduceAction539: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction405::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction405[] = "init var of ReduceAction405";
-void INIT_ATTRIBUTES__parser___ReduceAction405(val_t p0){
+/* 2: Attribute ReduceAction539::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction539[] = "init var of ReduceAction539";
+void INIT_ATTRIBUTES__parser___ReduceAction539(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction405;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction539;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction405(void)
+val_t NEW_parser___ReduceAction539(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction405;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction539;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction405[] = "check new ReduceAction405";
-void CHECKNEW_parser___ReduceAction405(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction539[] = "check new ReduceAction539";
+void CHECKNEW_parser___ReduceAction539(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction405;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction539;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -136069,36 +157154,36 @@ void CHECKNEW_parser___ReduceAction405(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction405_parser___ReduceAction___init[] = "new ReduceAction405 parser::ReduceAction::init";
-val_t NEW_ReduceAction405_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction539_parser___ReduceAction___init[] = "new ReduceAction539 parser::ReduceAction::init";
+val_t NEW_ReduceAction539_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction405_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction539_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction405();
-  INIT_ATTRIBUTES__parser___ReduceAction405(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction539();
+  INIT_ATTRIBUTES__parser___ReduceAction539(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction405(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction539(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction406[55] = {
-  {(bigint) 1171 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction540[55] = {
+  {(bigint) 995 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction406" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction406 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction406 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1171 /* 5: ReduceAction406 < ReduceAction406: superclass typecheck marker */},
+  {(bigint) "ReduceAction540" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction540 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction540 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 995 /* 5: ReduceAction540 < ReduceAction540: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -136112,7 +157197,7 @@ const classtable_elt_t VFT_parser___ReduceAction406[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction406 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction540 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -136143,46 +157228,46 @@ const classtable_elt_t VFT_parser___ReduceAction406[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction406 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction406___action},
+  {(bigint) 0 /* 50: ReduceAction540 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction540___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction406 < ReduceAction406: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction540 < ReduceAction540: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction406::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction406[] = "init var of ReduceAction406";
-void INIT_ATTRIBUTES__parser___ReduceAction406(val_t p0){
+/* 2: Attribute ReduceAction540::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction540[] = "init var of ReduceAction540";
+void INIT_ATTRIBUTES__parser___ReduceAction540(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction406;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction540;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction406(void)
+val_t NEW_parser___ReduceAction540(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction406;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction540;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction406[] = "check new ReduceAction406";
-void CHECKNEW_parser___ReduceAction406(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction540[] = "check new ReduceAction540";
+void CHECKNEW_parser___ReduceAction540(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction406;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction540;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -136195,36 +157280,36 @@ void CHECKNEW_parser___ReduceAction406(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction406_parser___ReduceAction___init[] = "new ReduceAction406 parser::ReduceAction::init";
-val_t NEW_ReduceAction406_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction540_parser___ReduceAction___init[] = "new ReduceAction540 parser::ReduceAction::init";
+val_t NEW_ReduceAction540_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction406_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction540_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction406();
-  INIT_ATTRIBUTES__parser___ReduceAction406(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction540();
+  INIT_ATTRIBUTES__parser___ReduceAction540(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction406(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction540(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction407[55] = {
-  {(bigint) 1167 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction541[55] = {
+  {(bigint) 991 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction407" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction407 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction407 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1167 /* 5: ReduceAction407 < ReduceAction407: superclass typecheck marker */},
+  {(bigint) "ReduceAction541" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction541 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction541 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 991 /* 5: ReduceAction541 < ReduceAction541: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -136238,7 +157323,7 @@ const classtable_elt_t VFT_parser___ReduceAction407[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction407 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction541 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -136269,46 +157354,46 @@ const classtable_elt_t VFT_parser___ReduceAction407[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction407 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction407___action},
+  {(bigint) 0 /* 50: ReduceAction541 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction541___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction407 < ReduceAction407: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction541 < ReduceAction541: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction407::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction407[] = "init var of ReduceAction407";
-void INIT_ATTRIBUTES__parser___ReduceAction407(val_t p0){
+/* 2: Attribute ReduceAction541::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction541[] = "init var of ReduceAction541";
+void INIT_ATTRIBUTES__parser___ReduceAction541(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction407;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction541;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction407(void)
+val_t NEW_parser___ReduceAction541(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction407;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction541;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction407[] = "check new ReduceAction407";
-void CHECKNEW_parser___ReduceAction407(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction541[] = "check new ReduceAction541";
+void CHECKNEW_parser___ReduceAction541(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction407;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction541;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -136321,36 +157406,36 @@ void CHECKNEW_parser___ReduceAction407(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction407_parser___ReduceAction___init[] = "new ReduceAction407 parser::ReduceAction::init";
-val_t NEW_ReduceAction407_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction541_parser___ReduceAction___init[] = "new ReduceAction541 parser::ReduceAction::init";
+val_t NEW_ReduceAction541_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction407_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction541_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction407();
-  INIT_ATTRIBUTES__parser___ReduceAction407(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction541();
+  INIT_ATTRIBUTES__parser___ReduceAction541(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction407(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction541(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction408[55] = {
-  {(bigint) 1163 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction543[55] = {
+  {(bigint) 987 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction408" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction408 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction408 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1163 /* 5: ReduceAction408 < ReduceAction408: superclass typecheck marker */},
+  {(bigint) "ReduceAction543" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction543 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction543 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 987 /* 5: ReduceAction543 < ReduceAction543: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -136364,7 +157449,7 @@ const classtable_elt_t VFT_parser___ReduceAction408[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction408 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction543 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -136395,46 +157480,46 @@ const classtable_elt_t VFT_parser___ReduceAction408[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction408 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction408___action},
+  {(bigint) 0 /* 50: ReduceAction543 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction543___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction408 < ReduceAction408: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction543 < ReduceAction543: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction408::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction408[] = "init var of ReduceAction408";
-void INIT_ATTRIBUTES__parser___ReduceAction408(val_t p0){
+/* 2: Attribute ReduceAction543::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction543[] = "init var of ReduceAction543";
+void INIT_ATTRIBUTES__parser___ReduceAction543(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction408;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction543;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction408(void)
+val_t NEW_parser___ReduceAction543(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction408;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction543;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction408[] = "check new ReduceAction408";
-void CHECKNEW_parser___ReduceAction408(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction543[] = "check new ReduceAction543";
+void CHECKNEW_parser___ReduceAction543(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction408;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction543;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -136447,36 +157532,36 @@ void CHECKNEW_parser___ReduceAction408(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction408_parser___ReduceAction___init[] = "new ReduceAction408 parser::ReduceAction::init";
-val_t NEW_ReduceAction408_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction543_parser___ReduceAction___init[] = "new ReduceAction543 parser::ReduceAction::init";
+val_t NEW_ReduceAction543_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction408_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction543_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction408();
-  INIT_ATTRIBUTES__parser___ReduceAction408(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction543();
+  INIT_ATTRIBUTES__parser___ReduceAction543(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction408(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction543(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction409[55] = {
-  {(bigint) 1159 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction544[55] = {
+  {(bigint) 983 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction409" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction409 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction409 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1159 /* 5: ReduceAction409 < ReduceAction409: superclass typecheck marker */},
+  {(bigint) "ReduceAction544" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction544 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction544 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 983 /* 5: ReduceAction544 < ReduceAction544: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -136490,7 +157575,7 @@ const classtable_elt_t VFT_parser___ReduceAction409[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction409 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction544 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -136521,46 +157606,46 @@ const classtable_elt_t VFT_parser___ReduceAction409[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction409 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction409___action},
+  {(bigint) 0 /* 50: ReduceAction544 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction544___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction409 < ReduceAction409: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction544 < ReduceAction544: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction409::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction409[] = "init var of ReduceAction409";
-void INIT_ATTRIBUTES__parser___ReduceAction409(val_t p0){
+/* 2: Attribute ReduceAction544::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction544[] = "init var of ReduceAction544";
+void INIT_ATTRIBUTES__parser___ReduceAction544(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction409;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction544;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction409(void)
+val_t NEW_parser___ReduceAction544(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction409;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction544;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction409[] = "check new ReduceAction409";
-void CHECKNEW_parser___ReduceAction409(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction544[] = "check new ReduceAction544";
+void CHECKNEW_parser___ReduceAction544(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction409;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction544;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -136573,36 +157658,36 @@ void CHECKNEW_parser___ReduceAction409(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction409_parser___ReduceAction___init[] = "new ReduceAction409 parser::ReduceAction::init";
-val_t NEW_ReduceAction409_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction544_parser___ReduceAction___init[] = "new ReduceAction544 parser::ReduceAction::init";
+val_t NEW_ReduceAction544_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction409_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction544_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction409();
-  INIT_ATTRIBUTES__parser___ReduceAction409(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction544();
+  INIT_ATTRIBUTES__parser___ReduceAction544(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction409(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction544(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction410[55] = {
-  {(bigint) 1151 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction546[55] = {
+  {(bigint) 979 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction410" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction410 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction410 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1151 /* 5: ReduceAction410 < ReduceAction410: superclass typecheck marker */},
+  {(bigint) "ReduceAction546" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction546 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction546 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 979 /* 5: ReduceAction546 < ReduceAction546: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -136616,7 +157701,7 @@ const classtable_elt_t VFT_parser___ReduceAction410[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction410 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction546 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -136647,46 +157732,46 @@ const classtable_elt_t VFT_parser___ReduceAction410[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction410 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction410___action},
+  {(bigint) 0 /* 50: ReduceAction546 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction546___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction410 < ReduceAction410: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction546 < ReduceAction546: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction410::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction410[] = "init var of ReduceAction410";
-void INIT_ATTRIBUTES__parser___ReduceAction410(val_t p0){
+/* 2: Attribute ReduceAction546::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction546[] = "init var of ReduceAction546";
+void INIT_ATTRIBUTES__parser___ReduceAction546(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction410;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction546;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction410(void)
+val_t NEW_parser___ReduceAction546(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction410;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction546;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction410[] = "check new ReduceAction410";
-void CHECKNEW_parser___ReduceAction410(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction546[] = "check new ReduceAction546";
+void CHECKNEW_parser___ReduceAction546(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction410;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction546;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -136699,36 +157784,36 @@ void CHECKNEW_parser___ReduceAction410(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction410_parser___ReduceAction___init[] = "new ReduceAction410 parser::ReduceAction::init";
-val_t NEW_ReduceAction410_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction546_parser___ReduceAction___init[] = "new ReduceAction546 parser::ReduceAction::init";
+val_t NEW_ReduceAction546_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction410_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction546_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction410();
-  INIT_ATTRIBUTES__parser___ReduceAction410(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction546();
+  INIT_ATTRIBUTES__parser___ReduceAction546(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction410(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction546(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction411[55] = {
-  {(bigint) 1147 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction547[55] = {
+  {(bigint) 975 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction411" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction411 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction411 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1147 /* 5: ReduceAction411 < ReduceAction411: superclass typecheck marker */},
+  {(bigint) "ReduceAction547" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction547 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction547 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 975 /* 5: ReduceAction547 < ReduceAction547: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -136742,7 +157827,7 @@ const classtable_elt_t VFT_parser___ReduceAction411[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction411 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction547 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -136773,46 +157858,46 @@ const classtable_elt_t VFT_parser___ReduceAction411[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction411 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction411___action},
+  {(bigint) 0 /* 50: ReduceAction547 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction547___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction411 < ReduceAction411: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction547 < ReduceAction547: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction411::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction411[] = "init var of ReduceAction411";
-void INIT_ATTRIBUTES__parser___ReduceAction411(val_t p0){
+/* 2: Attribute ReduceAction547::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction547[] = "init var of ReduceAction547";
+void INIT_ATTRIBUTES__parser___ReduceAction547(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction411;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction547;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction411(void)
+val_t NEW_parser___ReduceAction547(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction411;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction547;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction411[] = "check new ReduceAction411";
-void CHECKNEW_parser___ReduceAction411(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction547[] = "check new ReduceAction547";
+void CHECKNEW_parser___ReduceAction547(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction411;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction547;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -136825,36 +157910,36 @@ void CHECKNEW_parser___ReduceAction411(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction411_parser___ReduceAction___init[] = "new ReduceAction411 parser::ReduceAction::init";
-val_t NEW_ReduceAction411_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction547_parser___ReduceAction___init[] = "new ReduceAction547 parser::ReduceAction::init";
+val_t NEW_ReduceAction547_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction411_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction547_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction411();
-  INIT_ATTRIBUTES__parser___ReduceAction411(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction547();
+  INIT_ATTRIBUTES__parser___ReduceAction547(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction411(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction547(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction412[55] = {
-  {(bigint) 1143 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction548[55] = {
+  {(bigint) 971 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction412" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction412 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction412 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1143 /* 5: ReduceAction412 < ReduceAction412: superclass typecheck marker */},
+  {(bigint) "ReduceAction548" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction548 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction548 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 971 /* 5: ReduceAction548 < ReduceAction548: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -136868,7 +157953,7 @@ const classtable_elt_t VFT_parser___ReduceAction412[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction412 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction548 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -136899,46 +157984,46 @@ const classtable_elt_t VFT_parser___ReduceAction412[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction412 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction412___action},
+  {(bigint) 0 /* 50: ReduceAction548 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction548___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction412 < ReduceAction412: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction548 < ReduceAction548: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction412::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction412[] = "init var of ReduceAction412";
-void INIT_ATTRIBUTES__parser___ReduceAction412(val_t p0){
+/* 2: Attribute ReduceAction548::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction548[] = "init var of ReduceAction548";
+void INIT_ATTRIBUTES__parser___ReduceAction548(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction412;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction548;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction412(void)
+val_t NEW_parser___ReduceAction548(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction412;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction548;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction412[] = "check new ReduceAction412";
-void CHECKNEW_parser___ReduceAction412(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction548[] = "check new ReduceAction548";
+void CHECKNEW_parser___ReduceAction548(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction412;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction548;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -136951,36 +158036,36 @@ void CHECKNEW_parser___ReduceAction412(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction412_parser___ReduceAction___init[] = "new ReduceAction412 parser::ReduceAction::init";
-val_t NEW_ReduceAction412_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction548_parser___ReduceAction___init[] = "new ReduceAction548 parser::ReduceAction::init";
+val_t NEW_ReduceAction548_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction412_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction548_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction412();
-  INIT_ATTRIBUTES__parser___ReduceAction412(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction548();
+  INIT_ATTRIBUTES__parser___ReduceAction548(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction412(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction548(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction413[55] = {
-  {(bigint) 1139 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction550[55] = {
+  {(bigint) 963 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction413" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction413 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction413 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1139 /* 5: ReduceAction413 < ReduceAction413: superclass typecheck marker */},
+  {(bigint) "ReduceAction550" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction550 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction550 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 963 /* 5: ReduceAction550 < ReduceAction550: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -136994,7 +158079,7 @@ const classtable_elt_t VFT_parser___ReduceAction413[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction413 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction550 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -137025,46 +158110,46 @@ const classtable_elt_t VFT_parser___ReduceAction413[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction413 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction413___action},
+  {(bigint) 0 /* 50: ReduceAction550 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction550___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction413 < ReduceAction413: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction550 < ReduceAction550: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction413::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction413[] = "init var of ReduceAction413";
-void INIT_ATTRIBUTES__parser___ReduceAction413(val_t p0){
+/* 2: Attribute ReduceAction550::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction550[] = "init var of ReduceAction550";
+void INIT_ATTRIBUTES__parser___ReduceAction550(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction413;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction550;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction413(void)
+val_t NEW_parser___ReduceAction550(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction413;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction550;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction413[] = "check new ReduceAction413";
-void CHECKNEW_parser___ReduceAction413(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction550[] = "check new ReduceAction550";
+void CHECKNEW_parser___ReduceAction550(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction413;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction550;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -137077,36 +158162,36 @@ void CHECKNEW_parser___ReduceAction413(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction413_parser___ReduceAction___init[] = "new ReduceAction413 parser::ReduceAction::init";
-val_t NEW_ReduceAction413_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction550_parser___ReduceAction___init[] = "new ReduceAction550 parser::ReduceAction::init";
+val_t NEW_ReduceAction550_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction413_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction550_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction413();
-  INIT_ATTRIBUTES__parser___ReduceAction413(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction550();
+  INIT_ATTRIBUTES__parser___ReduceAction550(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction413(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction550(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction414[55] = {
-  {(bigint) 1135 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction551[55] = {
+  {(bigint) 959 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction414" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction414 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction414 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1135 /* 5: ReduceAction414 < ReduceAction414: superclass typecheck marker */},
+  {(bigint) "ReduceAction551" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction551 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction551 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 959 /* 5: ReduceAction551 < ReduceAction551: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -137120,7 +158205,7 @@ const classtable_elt_t VFT_parser___ReduceAction414[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction414 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction551 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -137151,46 +158236,46 @@ const classtable_elt_t VFT_parser___ReduceAction414[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction414 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction414___action},
+  {(bigint) 0 /* 50: ReduceAction551 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction551___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction414 < ReduceAction414: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction551 < ReduceAction551: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction414::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction414[] = "init var of ReduceAction414";
-void INIT_ATTRIBUTES__parser___ReduceAction414(val_t p0){
+/* 2: Attribute ReduceAction551::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction551[] = "init var of ReduceAction551";
+void INIT_ATTRIBUTES__parser___ReduceAction551(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction414;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction551;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction414(void)
+val_t NEW_parser___ReduceAction551(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction414;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction551;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction414[] = "check new ReduceAction414";
-void CHECKNEW_parser___ReduceAction414(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction551[] = "check new ReduceAction551";
+void CHECKNEW_parser___ReduceAction551(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction414;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction551;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -137203,36 +158288,36 @@ void CHECKNEW_parser___ReduceAction414(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction414_parser___ReduceAction___init[] = "new ReduceAction414 parser::ReduceAction::init";
-val_t NEW_ReduceAction414_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction551_parser___ReduceAction___init[] = "new ReduceAction551 parser::ReduceAction::init";
+val_t NEW_ReduceAction551_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction414_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction551_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction414();
-  INIT_ATTRIBUTES__parser___ReduceAction414(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction551();
+  INIT_ATTRIBUTES__parser___ReduceAction551(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction414(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction551(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction415[55] = {
-  {(bigint) 1131 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction553[55] = {
+  {(bigint) 955 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction415" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction415 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction415 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1131 /* 5: ReduceAction415 < ReduceAction415: superclass typecheck marker */},
+  {(bigint) "ReduceAction553" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction553 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction553 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 955 /* 5: ReduceAction553 < ReduceAction553: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -137246,7 +158331,7 @@ const classtable_elt_t VFT_parser___ReduceAction415[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction415 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction553 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -137277,46 +158362,46 @@ const classtable_elt_t VFT_parser___ReduceAction415[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction415 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction415___action},
+  {(bigint) 0 /* 50: ReduceAction553 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction553___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction415 < ReduceAction415: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction553 < ReduceAction553: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction415::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction415[] = "init var of ReduceAction415";
-void INIT_ATTRIBUTES__parser___ReduceAction415(val_t p0){
+/* 2: Attribute ReduceAction553::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction553[] = "init var of ReduceAction553";
+void INIT_ATTRIBUTES__parser___ReduceAction553(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction415;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction553;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction415(void)
+val_t NEW_parser___ReduceAction553(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction415;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction553;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction415[] = "check new ReduceAction415";
-void CHECKNEW_parser___ReduceAction415(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction553[] = "check new ReduceAction553";
+void CHECKNEW_parser___ReduceAction553(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction415;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction553;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -137329,36 +158414,36 @@ void CHECKNEW_parser___ReduceAction415(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction415_parser___ReduceAction___init[] = "new ReduceAction415 parser::ReduceAction::init";
-val_t NEW_ReduceAction415_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction553_parser___ReduceAction___init[] = "new ReduceAction553 parser::ReduceAction::init";
+val_t NEW_ReduceAction553_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction415_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction553_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction415();
-  INIT_ATTRIBUTES__parser___ReduceAction415(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction553();
+  INIT_ATTRIBUTES__parser___ReduceAction553(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction415(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction553(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction416[55] = {
-  {(bigint) 1127 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction554[55] = {
+  {(bigint) 951 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction416" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction416 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction416 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1127 /* 5: ReduceAction416 < ReduceAction416: superclass typecheck marker */},
+  {(bigint) "ReduceAction554" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction554 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction554 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 951 /* 5: ReduceAction554 < ReduceAction554: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -137372,7 +158457,7 @@ const classtable_elt_t VFT_parser___ReduceAction416[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction416 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction554 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -137403,46 +158488,46 @@ const classtable_elt_t VFT_parser___ReduceAction416[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction416 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction416___action},
+  {(bigint) 0 /* 50: ReduceAction554 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction554___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction416 < ReduceAction416: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction554 < ReduceAction554: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction416::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction416[] = "init var of ReduceAction416";
-void INIT_ATTRIBUTES__parser___ReduceAction416(val_t p0){
+/* 2: Attribute ReduceAction554::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction554[] = "init var of ReduceAction554";
+void INIT_ATTRIBUTES__parser___ReduceAction554(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction416;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction554;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction416(void)
+val_t NEW_parser___ReduceAction554(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction416;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction554;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction416[] = "check new ReduceAction416";
-void CHECKNEW_parser___ReduceAction416(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction554[] = "check new ReduceAction554";
+void CHECKNEW_parser___ReduceAction554(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction416;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction554;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -137455,36 +158540,36 @@ void CHECKNEW_parser___ReduceAction416(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction416_parser___ReduceAction___init[] = "new ReduceAction416 parser::ReduceAction::init";
-val_t NEW_ReduceAction416_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction554_parser___ReduceAction___init[] = "new ReduceAction554 parser::ReduceAction::init";
+val_t NEW_ReduceAction554_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction416_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction554_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction416();
-  INIT_ATTRIBUTES__parser___ReduceAction416(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction554();
+  INIT_ATTRIBUTES__parser___ReduceAction554(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction416(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction554(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction417[55] = {
-  {(bigint) 1123 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction555[55] = {
+  {(bigint) 947 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction417" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction417 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction417 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1123 /* 5: ReduceAction417 < ReduceAction417: superclass typecheck marker */},
+  {(bigint) "ReduceAction555" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction555 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction555 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 947 /* 5: ReduceAction555 < ReduceAction555: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -137498,7 +158583,7 @@ const classtable_elt_t VFT_parser___ReduceAction417[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction417 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction555 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -137529,46 +158614,46 @@ const classtable_elt_t VFT_parser___ReduceAction417[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction417 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction417___action},
+  {(bigint) 0 /* 50: ReduceAction555 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction555___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction417 < ReduceAction417: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction555 < ReduceAction555: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction417::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction417[] = "init var of ReduceAction417";
-void INIT_ATTRIBUTES__parser___ReduceAction417(val_t p0){
+/* 2: Attribute ReduceAction555::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction555[] = "init var of ReduceAction555";
+void INIT_ATTRIBUTES__parser___ReduceAction555(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction417;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction555;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction417(void)
+val_t NEW_parser___ReduceAction555(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction417;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction555;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction417[] = "check new ReduceAction417";
-void CHECKNEW_parser___ReduceAction417(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction555[] = "check new ReduceAction555";
+void CHECKNEW_parser___ReduceAction555(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction417;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction555;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -137581,36 +158666,36 @@ void CHECKNEW_parser___ReduceAction417(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction417_parser___ReduceAction___init[] = "new ReduceAction417 parser::ReduceAction::init";
-val_t NEW_ReduceAction417_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction555_parser___ReduceAction___init[] = "new ReduceAction555 parser::ReduceAction::init";
+val_t NEW_ReduceAction555_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction417_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction555_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction417();
-  INIT_ATTRIBUTES__parser___ReduceAction417(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction555();
+  INIT_ATTRIBUTES__parser___ReduceAction555(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction417(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction555(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction418[55] = {
-  {(bigint) 1119 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction556[55] = {
+  {(bigint) 943 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction418" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction418 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction418 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1119 /* 5: ReduceAction418 < ReduceAction418: superclass typecheck marker */},
+  {(bigint) "ReduceAction556" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction556 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction556 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 943 /* 5: ReduceAction556 < ReduceAction556: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -137624,7 +158709,7 @@ const classtable_elt_t VFT_parser___ReduceAction418[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction418 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction556 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -137655,46 +158740,46 @@ const classtable_elt_t VFT_parser___ReduceAction418[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction418 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction418___action},
+  {(bigint) 0 /* 50: ReduceAction556 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction556___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction418 < ReduceAction418: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction556 < ReduceAction556: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction418::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction418[] = "init var of ReduceAction418";
-void INIT_ATTRIBUTES__parser___ReduceAction418(val_t p0){
+/* 2: Attribute ReduceAction556::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction556[] = "init var of ReduceAction556";
+void INIT_ATTRIBUTES__parser___ReduceAction556(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction418;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction556;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction418(void)
+val_t NEW_parser___ReduceAction556(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction418;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction556;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction418[] = "check new ReduceAction418";
-void CHECKNEW_parser___ReduceAction418(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction556[] = "check new ReduceAction556";
+void CHECKNEW_parser___ReduceAction556(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction418;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction556;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -137707,36 +158792,36 @@ void CHECKNEW_parser___ReduceAction418(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction418_parser___ReduceAction___init[] = "new ReduceAction418 parser::ReduceAction::init";
-val_t NEW_ReduceAction418_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction556_parser___ReduceAction___init[] = "new ReduceAction556 parser::ReduceAction::init";
+val_t NEW_ReduceAction556_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction418_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction556_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction418();
-  INIT_ATTRIBUTES__parser___ReduceAction418(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction556();
+  INIT_ATTRIBUTES__parser___ReduceAction556(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction418(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction556(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction421[55] = {
-  {(bigint) 1111 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction557[55] = {
+  {(bigint) 939 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction421" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction421 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction421 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1111 /* 5: ReduceAction421 < ReduceAction421: superclass typecheck marker */},
+  {(bigint) "ReduceAction557" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction557 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction557 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 939 /* 5: ReduceAction557 < ReduceAction557: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -137750,7 +158835,7 @@ const classtable_elt_t VFT_parser___ReduceAction421[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction421 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction557 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -137781,46 +158866,46 @@ const classtable_elt_t VFT_parser___ReduceAction421[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction421 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction421___action},
+  {(bigint) 0 /* 50: ReduceAction557 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction557___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction421 < ReduceAction421: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction557 < ReduceAction557: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction421::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction421[] = "init var of ReduceAction421";
-void INIT_ATTRIBUTES__parser___ReduceAction421(val_t p0){
+/* 2: Attribute ReduceAction557::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction557[] = "init var of ReduceAction557";
+void INIT_ATTRIBUTES__parser___ReduceAction557(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction421;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction557;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction421(void)
+val_t NEW_parser___ReduceAction557(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction421;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction557;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction421[] = "check new ReduceAction421";
-void CHECKNEW_parser___ReduceAction421(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction557[] = "check new ReduceAction557";
+void CHECKNEW_parser___ReduceAction557(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction421;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction557;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -137833,36 +158918,36 @@ void CHECKNEW_parser___ReduceAction421(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction421_parser___ReduceAction___init[] = "new ReduceAction421 parser::ReduceAction::init";
-val_t NEW_ReduceAction421_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction557_parser___ReduceAction___init[] = "new ReduceAction557 parser::ReduceAction::init";
+val_t NEW_ReduceAction557_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction421_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction557_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction421();
-  INIT_ATTRIBUTES__parser___ReduceAction421(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction557();
+  INIT_ATTRIBUTES__parser___ReduceAction557(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction421(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction557(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction422[55] = {
-  {(bigint) 1107 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction564[55] = {
+  {(bigint) 931 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction422" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction422 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction422 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1107 /* 5: ReduceAction422 < ReduceAction422: superclass typecheck marker */},
+  {(bigint) "ReduceAction564" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction564 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction564 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 931 /* 5: ReduceAction564 < ReduceAction564: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -137876,7 +158961,7 @@ const classtable_elt_t VFT_parser___ReduceAction422[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction422 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction564 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -137907,46 +158992,46 @@ const classtable_elt_t VFT_parser___ReduceAction422[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction422 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction422___action},
+  {(bigint) 0 /* 50: ReduceAction564 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction564___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction422 < ReduceAction422: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction564 < ReduceAction564: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction422::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction422[] = "init var of ReduceAction422";
-void INIT_ATTRIBUTES__parser___ReduceAction422(val_t p0){
+/* 2: Attribute ReduceAction564::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction564[] = "init var of ReduceAction564";
+void INIT_ATTRIBUTES__parser___ReduceAction564(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction422;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction564;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction422(void)
+val_t NEW_parser___ReduceAction564(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction422;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction564;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction422[] = "check new ReduceAction422";
-void CHECKNEW_parser___ReduceAction422(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction564[] = "check new ReduceAction564";
+void CHECKNEW_parser___ReduceAction564(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction422;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction564;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -137959,36 +159044,36 @@ void CHECKNEW_parser___ReduceAction422(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction422_parser___ReduceAction___init[] = "new ReduceAction422 parser::ReduceAction::init";
-val_t NEW_ReduceAction422_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction564_parser___ReduceAction___init[] = "new ReduceAction564 parser::ReduceAction::init";
+val_t NEW_ReduceAction564_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction422_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction564_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction422();
-  INIT_ATTRIBUTES__parser___ReduceAction422(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction564();
+  INIT_ATTRIBUTES__parser___ReduceAction564(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction422(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction564(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction423[55] = {
-  {(bigint) 1103 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction565[55] = {
+  {(bigint) 927 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction423" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction423 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction423 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1103 /* 5: ReduceAction423 < ReduceAction423: superclass typecheck marker */},
+  {(bigint) "ReduceAction565" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction565 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction565 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 927 /* 5: ReduceAction565 < ReduceAction565: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -138002,7 +159087,7 @@ const classtable_elt_t VFT_parser___ReduceAction423[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction423 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction565 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -138033,46 +159118,46 @@ const classtable_elt_t VFT_parser___ReduceAction423[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction423 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction423___action},
+  {(bigint) 0 /* 50: ReduceAction565 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction565___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction423 < ReduceAction423: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction565 < ReduceAction565: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction423::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction423[] = "init var of ReduceAction423";
-void INIT_ATTRIBUTES__parser___ReduceAction423(val_t p0){
+/* 2: Attribute ReduceAction565::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction565[] = "init var of ReduceAction565";
+void INIT_ATTRIBUTES__parser___ReduceAction565(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction423;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction565;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction423(void)
+val_t NEW_parser___ReduceAction565(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction423;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction565;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction423[] = "check new ReduceAction423";
-void CHECKNEW_parser___ReduceAction423(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction565[] = "check new ReduceAction565";
+void CHECKNEW_parser___ReduceAction565(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction423;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction565;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -138085,36 +159170,36 @@ void CHECKNEW_parser___ReduceAction423(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction423_parser___ReduceAction___init[] = "new ReduceAction423 parser::ReduceAction::init";
-val_t NEW_ReduceAction423_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction565_parser___ReduceAction___init[] = "new ReduceAction565 parser::ReduceAction::init";
+val_t NEW_ReduceAction565_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction423_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction565_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction423();
-  INIT_ATTRIBUTES__parser___ReduceAction423(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction565();
+  INIT_ATTRIBUTES__parser___ReduceAction565(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction423(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction565(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction424[55] = {
-  {(bigint) 1099 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction566[55] = {
+  {(bigint) 923 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction424" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction424 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction424 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1099 /* 5: ReduceAction424 < ReduceAction424: superclass typecheck marker */},
+  {(bigint) "ReduceAction566" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction566 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction566 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 923 /* 5: ReduceAction566 < ReduceAction566: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -138128,7 +159213,7 @@ const classtable_elt_t VFT_parser___ReduceAction424[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction424 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction566 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -138159,46 +159244,46 @@ const classtable_elt_t VFT_parser___ReduceAction424[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction424 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction424___action},
+  {(bigint) 0 /* 50: ReduceAction566 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction566___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction424 < ReduceAction424: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction566 < ReduceAction566: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction424::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction424[] = "init var of ReduceAction424";
-void INIT_ATTRIBUTES__parser___ReduceAction424(val_t p0){
+/* 2: Attribute ReduceAction566::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction566[] = "init var of ReduceAction566";
+void INIT_ATTRIBUTES__parser___ReduceAction566(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction424;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction566;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction424(void)
+val_t NEW_parser___ReduceAction566(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction424;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction566;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction424[] = "check new ReduceAction424";
-void CHECKNEW_parser___ReduceAction424(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction566[] = "check new ReduceAction566";
+void CHECKNEW_parser___ReduceAction566(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction424;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction566;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -138211,36 +159296,36 @@ void CHECKNEW_parser___ReduceAction424(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction424_parser___ReduceAction___init[] = "new ReduceAction424 parser::ReduceAction::init";
-val_t NEW_ReduceAction424_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction566_parser___ReduceAction___init[] = "new ReduceAction566 parser::ReduceAction::init";
+val_t NEW_ReduceAction566_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction424_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction566_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction424();
-  INIT_ATTRIBUTES__parser___ReduceAction424(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction566();
+  INIT_ATTRIBUTES__parser___ReduceAction566(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction424(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction566(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction425[55] = {
-  {(bigint) 1095 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction567[55] = {
+  {(bigint) 919 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction425" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction425 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction425 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1095 /* 5: ReduceAction425 < ReduceAction425: superclass typecheck marker */},
+  {(bigint) "ReduceAction567" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction567 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction567 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 919 /* 5: ReduceAction567 < ReduceAction567: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -138254,7 +159339,7 @@ const classtable_elt_t VFT_parser___ReduceAction425[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction425 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction567 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -138285,46 +159370,46 @@ const classtable_elt_t VFT_parser___ReduceAction425[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction425 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction425___action},
+  {(bigint) 0 /* 50: ReduceAction567 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction567___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction425 < ReduceAction425: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction567 < ReduceAction567: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction425::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction425[] = "init var of ReduceAction425";
-void INIT_ATTRIBUTES__parser___ReduceAction425(val_t p0){
+/* 2: Attribute ReduceAction567::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction567[] = "init var of ReduceAction567";
+void INIT_ATTRIBUTES__parser___ReduceAction567(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction425;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction567;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction425(void)
+val_t NEW_parser___ReduceAction567(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction425;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction567;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction425[] = "check new ReduceAction425";
-void CHECKNEW_parser___ReduceAction425(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction567[] = "check new ReduceAction567";
+void CHECKNEW_parser___ReduceAction567(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction425;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction567;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -138337,36 +159422,36 @@ void CHECKNEW_parser___ReduceAction425(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction425_parser___ReduceAction___init[] = "new ReduceAction425 parser::ReduceAction::init";
-val_t NEW_ReduceAction425_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction567_parser___ReduceAction___init[] = "new ReduceAction567 parser::ReduceAction::init";
+val_t NEW_ReduceAction567_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction425_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction567_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction425();
-  INIT_ATTRIBUTES__parser___ReduceAction425(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction567();
+  INIT_ATTRIBUTES__parser___ReduceAction567(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction425(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction567(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction426[55] = {
-  {(bigint) 1091 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction568[55] = {
+  {(bigint) 915 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction426" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction426 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction426 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1091 /* 5: ReduceAction426 < ReduceAction426: superclass typecheck marker */},
+  {(bigint) "ReduceAction568" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction568 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction568 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 915 /* 5: ReduceAction568 < ReduceAction568: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -138380,7 +159465,7 @@ const classtable_elt_t VFT_parser___ReduceAction426[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction426 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction568 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -138411,46 +159496,46 @@ const classtable_elt_t VFT_parser___ReduceAction426[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction426 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction426___action},
+  {(bigint) 0 /* 50: ReduceAction568 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction568___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction426 < ReduceAction426: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction568 < ReduceAction568: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction426::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction426[] = "init var of ReduceAction426";
-void INIT_ATTRIBUTES__parser___ReduceAction426(val_t p0){
+/* 2: Attribute ReduceAction568::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction568[] = "init var of ReduceAction568";
+void INIT_ATTRIBUTES__parser___ReduceAction568(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction426;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction568;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction426(void)
+val_t NEW_parser___ReduceAction568(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction426;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction568;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction426[] = "check new ReduceAction426";
-void CHECKNEW_parser___ReduceAction426(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction568[] = "check new ReduceAction568";
+void CHECKNEW_parser___ReduceAction568(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction426;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction568;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -138463,36 +159548,36 @@ void CHECKNEW_parser___ReduceAction426(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction426_parser___ReduceAction___init[] = "new ReduceAction426 parser::ReduceAction::init";
-val_t NEW_ReduceAction426_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction568_parser___ReduceAction___init[] = "new ReduceAction568 parser::ReduceAction::init";
+val_t NEW_ReduceAction568_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction426_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction568_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction426();
-  INIT_ATTRIBUTES__parser___ReduceAction426(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction568();
+  INIT_ATTRIBUTES__parser___ReduceAction568(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction426(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction568(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction427[55] = {
-  {(bigint) 1087 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction569[55] = {
+  {(bigint) 911 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction427" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction427 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction427 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1087 /* 5: ReduceAction427 < ReduceAction427: superclass typecheck marker */},
+  {(bigint) "ReduceAction569" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction569 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction569 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 911 /* 5: ReduceAction569 < ReduceAction569: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -138506,7 +159591,7 @@ const classtable_elt_t VFT_parser___ReduceAction427[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction427 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction569 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -138537,46 +159622,46 @@ const classtable_elt_t VFT_parser___ReduceAction427[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction427 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction427___action},
+  {(bigint) 0 /* 50: ReduceAction569 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction569___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction427 < ReduceAction427: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction569 < ReduceAction569: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction427::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction427[] = "init var of ReduceAction427";
-void INIT_ATTRIBUTES__parser___ReduceAction427(val_t p0){
+/* 2: Attribute ReduceAction569::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction569[] = "init var of ReduceAction569";
+void INIT_ATTRIBUTES__parser___ReduceAction569(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction427;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction569;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction427(void)
+val_t NEW_parser___ReduceAction569(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction427;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction569;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction427[] = "check new ReduceAction427";
-void CHECKNEW_parser___ReduceAction427(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction569[] = "check new ReduceAction569";
+void CHECKNEW_parser___ReduceAction569(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction427;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction569;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -138589,36 +159674,36 @@ void CHECKNEW_parser___ReduceAction427(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction427_parser___ReduceAction___init[] = "new ReduceAction427 parser::ReduceAction::init";
-val_t NEW_ReduceAction427_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction569_parser___ReduceAction___init[] = "new ReduceAction569 parser::ReduceAction::init";
+val_t NEW_ReduceAction569_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction427_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction569_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction427();
-  INIT_ATTRIBUTES__parser___ReduceAction427(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction569();
+  INIT_ATTRIBUTES__parser___ReduceAction569(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction427(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction569(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction428[55] = {
-  {(bigint) 1083 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction570[55] = {
+  {(bigint) 903 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction428" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction428 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction428 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1083 /* 5: ReduceAction428 < ReduceAction428: superclass typecheck marker */},
+  {(bigint) "ReduceAction570" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction570 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction570 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 903 /* 5: ReduceAction570 < ReduceAction570: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -138632,7 +159717,7 @@ const classtable_elt_t VFT_parser___ReduceAction428[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction428 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction570 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -138663,46 +159748,46 @@ const classtable_elt_t VFT_parser___ReduceAction428[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction428 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction428___action},
+  {(bigint) 0 /* 50: ReduceAction570 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction570___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction428 < ReduceAction428: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction570 < ReduceAction570: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction428::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction428[] = "init var of ReduceAction428";
-void INIT_ATTRIBUTES__parser___ReduceAction428(val_t p0){
+/* 2: Attribute ReduceAction570::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction570[] = "init var of ReduceAction570";
+void INIT_ATTRIBUTES__parser___ReduceAction570(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction428;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction570;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction428(void)
+val_t NEW_parser___ReduceAction570(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction428;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction570;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction428[] = "check new ReduceAction428";
-void CHECKNEW_parser___ReduceAction428(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction570[] = "check new ReduceAction570";
+void CHECKNEW_parser___ReduceAction570(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction428;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction570;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -138715,36 +159800,36 @@ void CHECKNEW_parser___ReduceAction428(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction428_parser___ReduceAction___init[] = "new ReduceAction428 parser::ReduceAction::init";
-val_t NEW_ReduceAction428_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction570_parser___ReduceAction___init[] = "new ReduceAction570 parser::ReduceAction::init";
+val_t NEW_ReduceAction570_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction428_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction570_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction428();
-  INIT_ATTRIBUTES__parser___ReduceAction428(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction570();
+  INIT_ATTRIBUTES__parser___ReduceAction570(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction428(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction570(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction429[55] = {
-  {(bigint) 1079 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction571[55] = {
+  {(bigint) 899 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction429" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction429 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction429 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1079 /* 5: ReduceAction429 < ReduceAction429: superclass typecheck marker */},
+  {(bigint) "ReduceAction571" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction571 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction571 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 899 /* 5: ReduceAction571 < ReduceAction571: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -138758,7 +159843,7 @@ const classtable_elt_t VFT_parser___ReduceAction429[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction429 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction571 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -138789,46 +159874,46 @@ const classtable_elt_t VFT_parser___ReduceAction429[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction429 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction429___action},
+  {(bigint) 0 /* 50: ReduceAction571 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction571___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction429 < ReduceAction429: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction571 < ReduceAction571: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction429::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction429[] = "init var of ReduceAction429";
-void INIT_ATTRIBUTES__parser___ReduceAction429(val_t p0){
+/* 2: Attribute ReduceAction571::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction571[] = "init var of ReduceAction571";
+void INIT_ATTRIBUTES__parser___ReduceAction571(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction429;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction571;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction429(void)
+val_t NEW_parser___ReduceAction571(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction429;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction571;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction429[] = "check new ReduceAction429";
-void CHECKNEW_parser___ReduceAction429(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction571[] = "check new ReduceAction571";
+void CHECKNEW_parser___ReduceAction571(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction429;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction571;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -138841,36 +159926,36 @@ void CHECKNEW_parser___ReduceAction429(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction429_parser___ReduceAction___init[] = "new ReduceAction429 parser::ReduceAction::init";
-val_t NEW_ReduceAction429_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction571_parser___ReduceAction___init[] = "new ReduceAction571 parser::ReduceAction::init";
+val_t NEW_ReduceAction571_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction429_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction571_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction429();
-  INIT_ATTRIBUTES__parser___ReduceAction429(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction571();
+  INIT_ATTRIBUTES__parser___ReduceAction571(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction429(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction571(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction430[55] = {
-  {(bigint) 1071 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction572[55] = {
+  {(bigint) 895 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction430" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction430 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction430 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1071 /* 5: ReduceAction430 < ReduceAction430: superclass typecheck marker */},
+  {(bigint) "ReduceAction572" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction572 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction572 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 895 /* 5: ReduceAction572 < ReduceAction572: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -138884,7 +159969,7 @@ const classtable_elt_t VFT_parser___ReduceAction430[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction430 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction572 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -138915,46 +160000,46 @@ const classtable_elt_t VFT_parser___ReduceAction430[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction430 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction430___action},
+  {(bigint) 0 /* 50: ReduceAction572 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction572___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction430 < ReduceAction430: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction572 < ReduceAction572: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction430::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction430[] = "init var of ReduceAction430";
-void INIT_ATTRIBUTES__parser___ReduceAction430(val_t p0){
+/* 2: Attribute ReduceAction572::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction572[] = "init var of ReduceAction572";
+void INIT_ATTRIBUTES__parser___ReduceAction572(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction430;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction572;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction430(void)
+val_t NEW_parser___ReduceAction572(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction430;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction572;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction430[] = "check new ReduceAction430";
-void CHECKNEW_parser___ReduceAction430(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction572[] = "check new ReduceAction572";
+void CHECKNEW_parser___ReduceAction572(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction430;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction572;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -138967,36 +160052,36 @@ void CHECKNEW_parser___ReduceAction430(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction430_parser___ReduceAction___init[] = "new ReduceAction430 parser::ReduceAction::init";
-val_t NEW_ReduceAction430_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction572_parser___ReduceAction___init[] = "new ReduceAction572 parser::ReduceAction::init";
+val_t NEW_ReduceAction572_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction430_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction572_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction430();
-  INIT_ATTRIBUTES__parser___ReduceAction430(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction572();
+  INIT_ATTRIBUTES__parser___ReduceAction572(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction430(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction572(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction431[55] = {
-  {(bigint) 1067 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction573[55] = {
+  {(bigint) 891 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction431" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction431 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction431 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1067 /* 5: ReduceAction431 < ReduceAction431: superclass typecheck marker */},
+  {(bigint) "ReduceAction573" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction573 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction573 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 891 /* 5: ReduceAction573 < ReduceAction573: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -139010,7 +160095,7 @@ const classtable_elt_t VFT_parser___ReduceAction431[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction431 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction573 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -139041,46 +160126,46 @@ const classtable_elt_t VFT_parser___ReduceAction431[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction431 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction431___action},
+  {(bigint) 0 /* 50: ReduceAction573 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction573___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction431 < ReduceAction431: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction573 < ReduceAction573: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction431::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction431[] = "init var of ReduceAction431";
-void INIT_ATTRIBUTES__parser___ReduceAction431(val_t p0){
+/* 2: Attribute ReduceAction573::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction573[] = "init var of ReduceAction573";
+void INIT_ATTRIBUTES__parser___ReduceAction573(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction431;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction573;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction431(void)
+val_t NEW_parser___ReduceAction573(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction431;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction573;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction431[] = "check new ReduceAction431";
-void CHECKNEW_parser___ReduceAction431(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction573[] = "check new ReduceAction573";
+void CHECKNEW_parser___ReduceAction573(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction431;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction573;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -139093,36 +160178,36 @@ void CHECKNEW_parser___ReduceAction431(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction431_parser___ReduceAction___init[] = "new ReduceAction431 parser::ReduceAction::init";
-val_t NEW_ReduceAction431_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction573_parser___ReduceAction___init[] = "new ReduceAction573 parser::ReduceAction::init";
+val_t NEW_ReduceAction573_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction431_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction573_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction431();
-  INIT_ATTRIBUTES__parser___ReduceAction431(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction573();
+  INIT_ATTRIBUTES__parser___ReduceAction573(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction431(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction573(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction432[55] = {
-  {(bigint) 1063 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction574[55] = {
+  {(bigint) 887 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction432" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction432 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction432 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1063 /* 5: ReduceAction432 < ReduceAction432: superclass typecheck marker */},
+  {(bigint) "ReduceAction574" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction574 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction574 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 887 /* 5: ReduceAction574 < ReduceAction574: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -139136,7 +160221,7 @@ const classtable_elt_t VFT_parser___ReduceAction432[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction432 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction574 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -139167,46 +160252,46 @@ const classtable_elt_t VFT_parser___ReduceAction432[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction432 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction432___action},
+  {(bigint) 0 /* 50: ReduceAction574 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction574___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction432 < ReduceAction432: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction574 < ReduceAction574: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction432::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction432[] = "init var of ReduceAction432";
-void INIT_ATTRIBUTES__parser___ReduceAction432(val_t p0){
+/* 2: Attribute ReduceAction574::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction574[] = "init var of ReduceAction574";
+void INIT_ATTRIBUTES__parser___ReduceAction574(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction432;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction574;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction432(void)
+val_t NEW_parser___ReduceAction574(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction432;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction574;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction432[] = "check new ReduceAction432";
-void CHECKNEW_parser___ReduceAction432(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction574[] = "check new ReduceAction574";
+void CHECKNEW_parser___ReduceAction574(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction432;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction574;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -139219,36 +160304,36 @@ void CHECKNEW_parser___ReduceAction432(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction432_parser___ReduceAction___init[] = "new ReduceAction432 parser::ReduceAction::init";
-val_t NEW_ReduceAction432_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction574_parser___ReduceAction___init[] = "new ReduceAction574 parser::ReduceAction::init";
+val_t NEW_ReduceAction574_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction432_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction574_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction432();
-  INIT_ATTRIBUTES__parser___ReduceAction432(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction574();
+  INIT_ATTRIBUTES__parser___ReduceAction574(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction432(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction574(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction433[55] = {
-  {(bigint) 1059 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction575[55] = {
+  {(bigint) 883 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction433" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction433 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction433 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1059 /* 5: ReduceAction433 < ReduceAction433: superclass typecheck marker */},
+  {(bigint) "ReduceAction575" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction575 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction575 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 883 /* 5: ReduceAction575 < ReduceAction575: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -139262,7 +160347,7 @@ const classtable_elt_t VFT_parser___ReduceAction433[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction433 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction575 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -139293,46 +160378,46 @@ const classtable_elt_t VFT_parser___ReduceAction433[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction433 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction433___action},
+  {(bigint) 0 /* 50: ReduceAction575 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction575___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction433 < ReduceAction433: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction575 < ReduceAction575: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction433::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction433[] = "init var of ReduceAction433";
-void INIT_ATTRIBUTES__parser___ReduceAction433(val_t p0){
+/* 2: Attribute ReduceAction575::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction575[] = "init var of ReduceAction575";
+void INIT_ATTRIBUTES__parser___ReduceAction575(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction433;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction575;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction433(void)
+val_t NEW_parser___ReduceAction575(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction433;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction575;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction433[] = "check new ReduceAction433";
-void CHECKNEW_parser___ReduceAction433(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction575[] = "check new ReduceAction575";
+void CHECKNEW_parser___ReduceAction575(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction433;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction575;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -139345,36 +160430,36 @@ void CHECKNEW_parser___ReduceAction433(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction433_parser___ReduceAction___init[] = "new ReduceAction433 parser::ReduceAction::init";
-val_t NEW_ReduceAction433_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction575_parser___ReduceAction___init[] = "new ReduceAction575 parser::ReduceAction::init";
+val_t NEW_ReduceAction575_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction433_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction575_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction433();
-  INIT_ATTRIBUTES__parser___ReduceAction433(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction575();
+  INIT_ATTRIBUTES__parser___ReduceAction575(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction433(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction575(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction437[55] = {
-  {(bigint) 1055 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction576[55] = {
+  {(bigint) 879 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction437" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction437 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction437 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1055 /* 5: ReduceAction437 < ReduceAction437: superclass typecheck marker */},
+  {(bigint) "ReduceAction576" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction576 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction576 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 879 /* 5: ReduceAction576 < ReduceAction576: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -139388,7 +160473,7 @@ const classtable_elt_t VFT_parser___ReduceAction437[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction437 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction576 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -139419,46 +160504,46 @@ const classtable_elt_t VFT_parser___ReduceAction437[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction437 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction437___action},
+  {(bigint) 0 /* 50: ReduceAction576 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction576___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction437 < ReduceAction437: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction576 < ReduceAction576: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction437::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction437[] = "init var of ReduceAction437";
-void INIT_ATTRIBUTES__parser___ReduceAction437(val_t p0){
+/* 2: Attribute ReduceAction576::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction576[] = "init var of ReduceAction576";
+void INIT_ATTRIBUTES__parser___ReduceAction576(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction437;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction576;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction437(void)
+val_t NEW_parser___ReduceAction576(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction437;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction576;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction437[] = "check new ReduceAction437";
-void CHECKNEW_parser___ReduceAction437(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction576[] = "check new ReduceAction576";
+void CHECKNEW_parser___ReduceAction576(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction437;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction576;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -139471,36 +160556,36 @@ void CHECKNEW_parser___ReduceAction437(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction437_parser___ReduceAction___init[] = "new ReduceAction437 parser::ReduceAction::init";
-val_t NEW_ReduceAction437_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction576_parser___ReduceAction___init[] = "new ReduceAction576 parser::ReduceAction::init";
+val_t NEW_ReduceAction576_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction437_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction576_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction437();
-  INIT_ATTRIBUTES__parser___ReduceAction437(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction576();
+  INIT_ATTRIBUTES__parser___ReduceAction576(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction437(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction576(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction439[55] = {
-  {(bigint) 1051 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction577[55] = {
+  {(bigint) 875 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction439" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction439 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction439 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1051 /* 5: ReduceAction439 < ReduceAction439: superclass typecheck marker */},
+  {(bigint) "ReduceAction577" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction577 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction577 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 875 /* 5: ReduceAction577 < ReduceAction577: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -139514,7 +160599,7 @@ const classtable_elt_t VFT_parser___ReduceAction439[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction439 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction577 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -139545,46 +160630,46 @@ const classtable_elt_t VFT_parser___ReduceAction439[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction439 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction439___action},
+  {(bigint) 0 /* 50: ReduceAction577 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction577___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction439 < ReduceAction439: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction577 < ReduceAction577: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction439::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction439[] = "init var of ReduceAction439";
-void INIT_ATTRIBUTES__parser___ReduceAction439(val_t p0){
+/* 2: Attribute ReduceAction577::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction577[] = "init var of ReduceAction577";
+void INIT_ATTRIBUTES__parser___ReduceAction577(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction439;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction577;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction439(void)
+val_t NEW_parser___ReduceAction577(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction439;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction577;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction439[] = "check new ReduceAction439";
-void CHECKNEW_parser___ReduceAction439(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction577[] = "check new ReduceAction577";
+void CHECKNEW_parser___ReduceAction577(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction439;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction577;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -139597,36 +160682,36 @@ void CHECKNEW_parser___ReduceAction439(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction439_parser___ReduceAction___init[] = "new ReduceAction439 parser::ReduceAction::init";
-val_t NEW_ReduceAction439_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction577_parser___ReduceAction___init[] = "new ReduceAction577 parser::ReduceAction::init";
+val_t NEW_ReduceAction577_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction439_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction577_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction439();
-  INIT_ATTRIBUTES__parser___ReduceAction439(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction577();
+  INIT_ATTRIBUTES__parser___ReduceAction577(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction439(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction577(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction441[55] = {
-  {(bigint) 1043 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction578[55] = {
+  {(bigint) 871 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction441" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction441 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction441 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1043 /* 5: ReduceAction441 < ReduceAction441: superclass typecheck marker */},
+  {(bigint) "ReduceAction578" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction578 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction578 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 871 /* 5: ReduceAction578 < ReduceAction578: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -139640,7 +160725,7 @@ const classtable_elt_t VFT_parser___ReduceAction441[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction441 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction578 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -139671,46 +160756,46 @@ const classtable_elt_t VFT_parser___ReduceAction441[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction441 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction441___action},
+  {(bigint) 0 /* 50: ReduceAction578 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction578___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction441 < ReduceAction441: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction578 < ReduceAction578: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction441::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction441[] = "init var of ReduceAction441";
-void INIT_ATTRIBUTES__parser___ReduceAction441(val_t p0){
+/* 2: Attribute ReduceAction578::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction578[] = "init var of ReduceAction578";
+void INIT_ATTRIBUTES__parser___ReduceAction578(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction441;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction578;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction441(void)
+val_t NEW_parser___ReduceAction578(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction441;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction578;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction441[] = "check new ReduceAction441";
-void CHECKNEW_parser___ReduceAction441(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction578[] = "check new ReduceAction578";
+void CHECKNEW_parser___ReduceAction578(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction441;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction578;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -139723,36 +160808,36 @@ void CHECKNEW_parser___ReduceAction441(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction441_parser___ReduceAction___init[] = "new ReduceAction441 parser::ReduceAction::init";
-val_t NEW_ReduceAction441_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction578_parser___ReduceAction___init[] = "new ReduceAction578 parser::ReduceAction::init";
+val_t NEW_ReduceAction578_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction441_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction578_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction441();
-  INIT_ATTRIBUTES__parser___ReduceAction441(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction578();
+  INIT_ATTRIBUTES__parser___ReduceAction578(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction441(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction578(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction442[55] = {
-  {(bigint) 1039 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction579[55] = {
+  {(bigint) 867 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction442" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction442 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction442 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1039 /* 5: ReduceAction442 < ReduceAction442: superclass typecheck marker */},
+  {(bigint) "ReduceAction579" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction579 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction579 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 867 /* 5: ReduceAction579 < ReduceAction579: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -139766,7 +160851,7 @@ const classtable_elt_t VFT_parser___ReduceAction442[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction442 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction579 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -139797,46 +160882,46 @@ const classtable_elt_t VFT_parser___ReduceAction442[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction442 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction442___action},
+  {(bigint) 0 /* 50: ReduceAction579 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction579___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction442 < ReduceAction442: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction579 < ReduceAction579: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction442::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction442[] = "init var of ReduceAction442";
-void INIT_ATTRIBUTES__parser___ReduceAction442(val_t p0){
+/* 2: Attribute ReduceAction579::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction579[] = "init var of ReduceAction579";
+void INIT_ATTRIBUTES__parser___ReduceAction579(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction442;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction579;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction442(void)
+val_t NEW_parser___ReduceAction579(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction442;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction579;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction442[] = "check new ReduceAction442";
-void CHECKNEW_parser___ReduceAction442(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction579[] = "check new ReduceAction579";
+void CHECKNEW_parser___ReduceAction579(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction442;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction579;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -139849,36 +160934,36 @@ void CHECKNEW_parser___ReduceAction442(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction442_parser___ReduceAction___init[] = "new ReduceAction442 parser::ReduceAction::init";
-val_t NEW_ReduceAction442_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction579_parser___ReduceAction___init[] = "new ReduceAction579 parser::ReduceAction::init";
+val_t NEW_ReduceAction579_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction442_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction579_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction442();
-  INIT_ATTRIBUTES__parser___ReduceAction442(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction579();
+  INIT_ATTRIBUTES__parser___ReduceAction579(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction442(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction579(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction443[55] = {
-  {(bigint) 1035 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction580[55] = {
+  {(bigint) 859 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction443" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction443 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction443 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1035 /* 5: ReduceAction443 < ReduceAction443: superclass typecheck marker */},
+  {(bigint) "ReduceAction580" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction580 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction580 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 859 /* 5: ReduceAction580 < ReduceAction580: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -139892,7 +160977,7 @@ const classtable_elt_t VFT_parser___ReduceAction443[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction443 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction580 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -139923,46 +161008,46 @@ const classtable_elt_t VFT_parser___ReduceAction443[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction443 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction443___action},
+  {(bigint) 0 /* 50: ReduceAction580 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction580___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction443 < ReduceAction443: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction580 < ReduceAction580: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction443::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction443[] = "init var of ReduceAction443";
-void INIT_ATTRIBUTES__parser___ReduceAction443(val_t p0){
+/* 2: Attribute ReduceAction580::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction580[] = "init var of ReduceAction580";
+void INIT_ATTRIBUTES__parser___ReduceAction580(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction443;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction580;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction443(void)
+val_t NEW_parser___ReduceAction580(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction443;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction580;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction443[] = "check new ReduceAction443";
-void CHECKNEW_parser___ReduceAction443(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction580[] = "check new ReduceAction580";
+void CHECKNEW_parser___ReduceAction580(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction443;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction580;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -139975,36 +161060,36 @@ void CHECKNEW_parser___ReduceAction443(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction443_parser___ReduceAction___init[] = "new ReduceAction443 parser::ReduceAction::init";
-val_t NEW_ReduceAction443_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction580_parser___ReduceAction___init[] = "new ReduceAction580 parser::ReduceAction::init";
+val_t NEW_ReduceAction580_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction443_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction580_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction443();
-  INIT_ATTRIBUTES__parser___ReduceAction443(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction580();
+  INIT_ATTRIBUTES__parser___ReduceAction580(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction443(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction580(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction445[55] = {
-  {(bigint) 1031 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction581[55] = {
+  {(bigint) 855 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction445" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction445 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction445 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1031 /* 5: ReduceAction445 < ReduceAction445: superclass typecheck marker */},
+  {(bigint) "ReduceAction581" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction581 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction581 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 855 /* 5: ReduceAction581 < ReduceAction581: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -140018,7 +161103,7 @@ const classtable_elt_t VFT_parser___ReduceAction445[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction445 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction581 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -140049,46 +161134,46 @@ const classtable_elt_t VFT_parser___ReduceAction445[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction445 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction445___action},
+  {(bigint) 0 /* 50: ReduceAction581 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction581___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction445 < ReduceAction445: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction581 < ReduceAction581: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction445::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction445[] = "init var of ReduceAction445";
-void INIT_ATTRIBUTES__parser___ReduceAction445(val_t p0){
+/* 2: Attribute ReduceAction581::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction581[] = "init var of ReduceAction581";
+void INIT_ATTRIBUTES__parser___ReduceAction581(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction445;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction581;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction445(void)
+val_t NEW_parser___ReduceAction581(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction445;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction581;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction445[] = "check new ReduceAction445";
-void CHECKNEW_parser___ReduceAction445(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction581[] = "check new ReduceAction581";
+void CHECKNEW_parser___ReduceAction581(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction445;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction581;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -140101,36 +161186,36 @@ void CHECKNEW_parser___ReduceAction445(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction445_parser___ReduceAction___init[] = "new ReduceAction445 parser::ReduceAction::init";
-val_t NEW_ReduceAction445_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction581_parser___ReduceAction___init[] = "new ReduceAction581 parser::ReduceAction::init";
+val_t NEW_ReduceAction581_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction445_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction581_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction445();
-  INIT_ATTRIBUTES__parser___ReduceAction445(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction581();
+  INIT_ATTRIBUTES__parser___ReduceAction581(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction445(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction581(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction447[55] = {
-  {(bigint) 1027 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction582[55] = {
+  {(bigint) 851 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction447" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction447 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction447 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1027 /* 5: ReduceAction447 < ReduceAction447: superclass typecheck marker */},
+  {(bigint) "ReduceAction582" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction582 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction582 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 851 /* 5: ReduceAction582 < ReduceAction582: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -140144,7 +161229,7 @@ const classtable_elt_t VFT_parser___ReduceAction447[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction447 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction582 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -140175,46 +161260,46 @@ const classtable_elt_t VFT_parser___ReduceAction447[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction447 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction447___action},
+  {(bigint) 0 /* 50: ReduceAction582 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction582___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction447 < ReduceAction447: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction582 < ReduceAction582: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction447::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction447[] = "init var of ReduceAction447";
-void INIT_ATTRIBUTES__parser___ReduceAction447(val_t p0){
+/* 2: Attribute ReduceAction582::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction582[] = "init var of ReduceAction582";
+void INIT_ATTRIBUTES__parser___ReduceAction582(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction447;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction582;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction447(void)
+val_t NEW_parser___ReduceAction582(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction447;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction582;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction447[] = "check new ReduceAction447";
-void CHECKNEW_parser___ReduceAction447(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction582[] = "check new ReduceAction582";
+void CHECKNEW_parser___ReduceAction582(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction447;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction582;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -140227,36 +161312,36 @@ void CHECKNEW_parser___ReduceAction447(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction447_parser___ReduceAction___init[] = "new ReduceAction447 parser::ReduceAction::init";
-val_t NEW_ReduceAction447_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction582_parser___ReduceAction___init[] = "new ReduceAction582 parser::ReduceAction::init";
+val_t NEW_ReduceAction582_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction447_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction582_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction447();
-  INIT_ATTRIBUTES__parser___ReduceAction447(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction582();
+  INIT_ATTRIBUTES__parser___ReduceAction582(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction447(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction582(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction448[55] = {
-  {(bigint) 1023 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction583[55] = {
+  {(bigint) 847 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction448" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction448 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction448 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1023 /* 5: ReduceAction448 < ReduceAction448: superclass typecheck marker */},
+  {(bigint) "ReduceAction583" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction583 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction583 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 847 /* 5: ReduceAction583 < ReduceAction583: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -140270,7 +161355,7 @@ const classtable_elt_t VFT_parser___ReduceAction448[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction448 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction583 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -140301,46 +161386,46 @@ const classtable_elt_t VFT_parser___ReduceAction448[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction448 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction448___action},
+  {(bigint) 0 /* 50: ReduceAction583 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction583___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction448 < ReduceAction448: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction583 < ReduceAction583: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction448::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction448[] = "init var of ReduceAction448";
-void INIT_ATTRIBUTES__parser___ReduceAction448(val_t p0){
+/* 2: Attribute ReduceAction583::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction583[] = "init var of ReduceAction583";
+void INIT_ATTRIBUTES__parser___ReduceAction583(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction448;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction583;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction448(void)
+val_t NEW_parser___ReduceAction583(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction448;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction583;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction448[] = "check new ReduceAction448";
-void CHECKNEW_parser___ReduceAction448(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction583[] = "check new ReduceAction583";
+void CHECKNEW_parser___ReduceAction583(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction448;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction583;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -140353,36 +161438,36 @@ void CHECKNEW_parser___ReduceAction448(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction448_parser___ReduceAction___init[] = "new ReduceAction448 parser::ReduceAction::init";
-val_t NEW_ReduceAction448_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction583_parser___ReduceAction___init[] = "new ReduceAction583 parser::ReduceAction::init";
+val_t NEW_ReduceAction583_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction448_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction583_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction448();
-  INIT_ATTRIBUTES__parser___ReduceAction448(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction583();
+  INIT_ATTRIBUTES__parser___ReduceAction583(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction448(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction583(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction449[55] = {
-  {(bigint) 1019 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction584[55] = {
+  {(bigint) 843 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction449" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction449 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction449 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1019 /* 5: ReduceAction449 < ReduceAction449: superclass typecheck marker */},
+  {(bigint) "ReduceAction584" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction584 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction584 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 843 /* 5: ReduceAction584 < ReduceAction584: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -140396,7 +161481,7 @@ const classtable_elt_t VFT_parser___ReduceAction449[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction449 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction584 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -140427,46 +161512,46 @@ const classtable_elt_t VFT_parser___ReduceAction449[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction449 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction449___action},
+  {(bigint) 0 /* 50: ReduceAction584 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction584___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction449 < ReduceAction449: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction584 < ReduceAction584: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction449::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction449[] = "init var of ReduceAction449";
-void INIT_ATTRIBUTES__parser___ReduceAction449(val_t p0){
+/* 2: Attribute ReduceAction584::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction584[] = "init var of ReduceAction584";
+void INIT_ATTRIBUTES__parser___ReduceAction584(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction449;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction584;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction449(void)
+val_t NEW_parser___ReduceAction584(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction449;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction584;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction449[] = "check new ReduceAction449";
-void CHECKNEW_parser___ReduceAction449(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction584[] = "check new ReduceAction584";
+void CHECKNEW_parser___ReduceAction584(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction449;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction584;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -140479,36 +161564,36 @@ void CHECKNEW_parser___ReduceAction449(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction449_parser___ReduceAction___init[] = "new ReduceAction449 parser::ReduceAction::init";
-val_t NEW_ReduceAction449_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction584_parser___ReduceAction___init[] = "new ReduceAction584 parser::ReduceAction::init";
+val_t NEW_ReduceAction584_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction449_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction584_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction449();
-  INIT_ATTRIBUTES__parser___ReduceAction449(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction584();
+  INIT_ATTRIBUTES__parser___ReduceAction584(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction449(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction584(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction450[55] = {
-  {(bigint) 1011 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction585[55] = {
+  {(bigint) 839 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction450" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction450 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction450 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1011 /* 5: ReduceAction450 < ReduceAction450: superclass typecheck marker */},
+  {(bigint) "ReduceAction585" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction585 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction585 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 839 /* 5: ReduceAction585 < ReduceAction585: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -140522,7 +161607,7 @@ const classtable_elt_t VFT_parser___ReduceAction450[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction450 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction585 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -140553,46 +161638,46 @@ const classtable_elt_t VFT_parser___ReduceAction450[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction450 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction450___action},
+  {(bigint) 0 /* 50: ReduceAction585 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction585___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction450 < ReduceAction450: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction585 < ReduceAction585: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction450::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction450[] = "init var of ReduceAction450";
-void INIT_ATTRIBUTES__parser___ReduceAction450(val_t p0){
+/* 2: Attribute ReduceAction585::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction585[] = "init var of ReduceAction585";
+void INIT_ATTRIBUTES__parser___ReduceAction585(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction450;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction585;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction450(void)
+val_t NEW_parser___ReduceAction585(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction450;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction585;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction450[] = "check new ReduceAction450";
-void CHECKNEW_parser___ReduceAction450(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction585[] = "check new ReduceAction585";
+void CHECKNEW_parser___ReduceAction585(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction450;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction585;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -140605,36 +161690,36 @@ void CHECKNEW_parser___ReduceAction450(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction450_parser___ReduceAction___init[] = "new ReduceAction450 parser::ReduceAction::init";
-val_t NEW_ReduceAction450_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction585_parser___ReduceAction___init[] = "new ReduceAction585 parser::ReduceAction::init";
+val_t NEW_ReduceAction585_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction450_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction585_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction450();
-  INIT_ATTRIBUTES__parser___ReduceAction450(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction585();
+  INIT_ATTRIBUTES__parser___ReduceAction585(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction450(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction585(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction451[55] = {
-  {(bigint) 1007 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction586[55] = {
+  {(bigint) 835 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction451" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction451 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction451 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1007 /* 5: ReduceAction451 < ReduceAction451: superclass typecheck marker */},
+  {(bigint) "ReduceAction586" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction586 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction586 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 835 /* 5: ReduceAction586 < ReduceAction586: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -140648,7 +161733,7 @@ const classtable_elt_t VFT_parser___ReduceAction451[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction451 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction586 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -140679,46 +161764,46 @@ const classtable_elt_t VFT_parser___ReduceAction451[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction451 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction451___action},
+  {(bigint) 0 /* 50: ReduceAction586 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction586___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction451 < ReduceAction451: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction586 < ReduceAction586: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction451::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction451[] = "init var of ReduceAction451";
-void INIT_ATTRIBUTES__parser___ReduceAction451(val_t p0){
+/* 2: Attribute ReduceAction586::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction586[] = "init var of ReduceAction586";
+void INIT_ATTRIBUTES__parser___ReduceAction586(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction451;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction586;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction451(void)
+val_t NEW_parser___ReduceAction586(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction451;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction586;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction451[] = "check new ReduceAction451";
-void CHECKNEW_parser___ReduceAction451(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction586[] = "check new ReduceAction586";
+void CHECKNEW_parser___ReduceAction586(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction451;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction586;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -140731,36 +161816,36 @@ void CHECKNEW_parser___ReduceAction451(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction451_parser___ReduceAction___init[] = "new ReduceAction451 parser::ReduceAction::init";
-val_t NEW_ReduceAction451_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction586_parser___ReduceAction___init[] = "new ReduceAction586 parser::ReduceAction::init";
+val_t NEW_ReduceAction586_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction451_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction586_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction451();
-  INIT_ATTRIBUTES__parser___ReduceAction451(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction586();
+  INIT_ATTRIBUTES__parser___ReduceAction586(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction451(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction586(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction452[55] = {
-  {(bigint) 1003 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction587[55] = {
+  {(bigint) 831 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction452" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction452 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction452 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 1003 /* 5: ReduceAction452 < ReduceAction452: superclass typecheck marker */},
+  {(bigint) "ReduceAction587" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction587 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction587 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 831 /* 5: ReduceAction587 < ReduceAction587: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -140774,7 +161859,7 @@ const classtable_elt_t VFT_parser___ReduceAction452[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction452 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction587 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -140805,46 +161890,46 @@ const classtable_elt_t VFT_parser___ReduceAction452[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction452 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction452___action},
+  {(bigint) 0 /* 50: ReduceAction587 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction587___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction452 < ReduceAction452: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction587 < ReduceAction587: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction452::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction452[] = "init var of ReduceAction452";
-void INIT_ATTRIBUTES__parser___ReduceAction452(val_t p0){
+/* 2: Attribute ReduceAction587::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction587[] = "init var of ReduceAction587";
+void INIT_ATTRIBUTES__parser___ReduceAction587(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction452;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction587;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction452(void)
+val_t NEW_parser___ReduceAction587(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction452;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction587;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction452[] = "check new ReduceAction452";
-void CHECKNEW_parser___ReduceAction452(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction587[] = "check new ReduceAction587";
+void CHECKNEW_parser___ReduceAction587(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction452;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction587;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -140857,36 +161942,36 @@ void CHECKNEW_parser___ReduceAction452(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction452_parser___ReduceAction___init[] = "new ReduceAction452 parser::ReduceAction::init";
-val_t NEW_ReduceAction452_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction587_parser___ReduceAction___init[] = "new ReduceAction587 parser::ReduceAction::init";
+val_t NEW_ReduceAction587_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction452_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction587_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction452();
-  INIT_ATTRIBUTES__parser___ReduceAction452(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction587();
+  INIT_ATTRIBUTES__parser___ReduceAction587(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction452(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction587(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction453[55] = {
-  {(bigint) 999 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction589[55] = {
+  {(bigint) 827 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction453" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction453 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction453 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 999 /* 5: ReduceAction453 < ReduceAction453: superclass typecheck marker */},
+  {(bigint) "ReduceAction589" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction589 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction589 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 827 /* 5: ReduceAction589 < ReduceAction589: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -140900,7 +161985,7 @@ const classtable_elt_t VFT_parser___ReduceAction453[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction453 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction589 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -140931,46 +162016,46 @@ const classtable_elt_t VFT_parser___ReduceAction453[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction453 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction453___action},
+  {(bigint) 0 /* 50: ReduceAction589 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction589___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction453 < ReduceAction453: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction589 < ReduceAction589: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction453::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction453[] = "init var of ReduceAction453";
-void INIT_ATTRIBUTES__parser___ReduceAction453(val_t p0){
+/* 2: Attribute ReduceAction589::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction589[] = "init var of ReduceAction589";
+void INIT_ATTRIBUTES__parser___ReduceAction589(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction453;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction589;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction453(void)
+val_t NEW_parser___ReduceAction589(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction453;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction589;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction453[] = "check new ReduceAction453";
-void CHECKNEW_parser___ReduceAction453(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction589[] = "check new ReduceAction589";
+void CHECKNEW_parser___ReduceAction589(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction453;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction589;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -140983,36 +162068,36 @@ void CHECKNEW_parser___ReduceAction453(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction453_parser___ReduceAction___init[] = "new ReduceAction453 parser::ReduceAction::init";
-val_t NEW_ReduceAction453_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction589_parser___ReduceAction___init[] = "new ReduceAction589 parser::ReduceAction::init";
+val_t NEW_ReduceAction589_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction453_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction589_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction453();
-  INIT_ATTRIBUTES__parser___ReduceAction453(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction589();
+  INIT_ATTRIBUTES__parser___ReduceAction589(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction453(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction589(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction454[55] = {
-  {(bigint) 995 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction590[55] = {
+  {(bigint) 819 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction454" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction454 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction454 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 995 /* 5: ReduceAction454 < ReduceAction454: superclass typecheck marker */},
+  {(bigint) "ReduceAction590" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction590 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction590 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 819 /* 5: ReduceAction590 < ReduceAction590: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -141026,7 +162111,7 @@ const classtable_elt_t VFT_parser___ReduceAction454[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction454 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction590 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -141057,46 +162142,46 @@ const classtable_elt_t VFT_parser___ReduceAction454[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction454 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction454___action},
+  {(bigint) 0 /* 50: ReduceAction590 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction590___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction454 < ReduceAction454: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction590 < ReduceAction590: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction454::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction454[] = "init var of ReduceAction454";
-void INIT_ATTRIBUTES__parser___ReduceAction454(val_t p0){
+/* 2: Attribute ReduceAction590::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction590[] = "init var of ReduceAction590";
+void INIT_ATTRIBUTES__parser___ReduceAction590(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction454;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction590;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction454(void)
+val_t NEW_parser___ReduceAction590(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction454;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction590;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction454[] = "check new ReduceAction454";
-void CHECKNEW_parser___ReduceAction454(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction590[] = "check new ReduceAction590";
+void CHECKNEW_parser___ReduceAction590(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction454;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction590;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -141109,36 +162194,36 @@ void CHECKNEW_parser___ReduceAction454(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction454_parser___ReduceAction___init[] = "new ReduceAction454 parser::ReduceAction::init";
-val_t NEW_ReduceAction454_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction590_parser___ReduceAction___init[] = "new ReduceAction590 parser::ReduceAction::init";
+val_t NEW_ReduceAction590_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction454_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction590_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction454();
-  INIT_ATTRIBUTES__parser___ReduceAction454(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction590();
+  INIT_ATTRIBUTES__parser___ReduceAction590(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction454(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction590(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction455[55] = {
-  {(bigint) 991 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction591[55] = {
+  {(bigint) 815 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction455" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction455 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction455 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 991 /* 5: ReduceAction455 < ReduceAction455: superclass typecheck marker */},
+  {(bigint) "ReduceAction591" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction591 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction591 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 815 /* 5: ReduceAction591 < ReduceAction591: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -141152,7 +162237,7 @@ const classtable_elt_t VFT_parser___ReduceAction455[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction455 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction591 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -141183,46 +162268,46 @@ const classtable_elt_t VFT_parser___ReduceAction455[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction455 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction455___action},
+  {(bigint) 0 /* 50: ReduceAction591 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction591___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction455 < ReduceAction455: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction591 < ReduceAction591: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction455::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction455[] = "init var of ReduceAction455";
-void INIT_ATTRIBUTES__parser___ReduceAction455(val_t p0){
+/* 2: Attribute ReduceAction591::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction591[] = "init var of ReduceAction591";
+void INIT_ATTRIBUTES__parser___ReduceAction591(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction455;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction591;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction455(void)
+val_t NEW_parser___ReduceAction591(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction455;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction591;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction455[] = "check new ReduceAction455";
-void CHECKNEW_parser___ReduceAction455(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction591[] = "check new ReduceAction591";
+void CHECKNEW_parser___ReduceAction591(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction455;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction591;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -141235,36 +162320,36 @@ void CHECKNEW_parser___ReduceAction455(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction455_parser___ReduceAction___init[] = "new ReduceAction455 parser::ReduceAction::init";
-val_t NEW_ReduceAction455_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction591_parser___ReduceAction___init[] = "new ReduceAction591 parser::ReduceAction::init";
+val_t NEW_ReduceAction591_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction455_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction591_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction455();
-  INIT_ATTRIBUTES__parser___ReduceAction455(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction591();
+  INIT_ATTRIBUTES__parser___ReduceAction591(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction455(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction591(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction456[55] = {
-  {(bigint) 987 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction592[55] = {
+  {(bigint) 811 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction456" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction456 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction456 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 987 /* 5: ReduceAction456 < ReduceAction456: superclass typecheck marker */},
+  {(bigint) "ReduceAction592" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction592 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction592 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 811 /* 5: ReduceAction592 < ReduceAction592: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -141278,7 +162363,7 @@ const classtable_elt_t VFT_parser___ReduceAction456[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction456 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction592 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -141309,46 +162394,46 @@ const classtable_elt_t VFT_parser___ReduceAction456[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction456 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction456___action},
+  {(bigint) 0 /* 50: ReduceAction592 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction592___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction456 < ReduceAction456: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction592 < ReduceAction592: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction456::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction456[] = "init var of ReduceAction456";
-void INIT_ATTRIBUTES__parser___ReduceAction456(val_t p0){
+/* 2: Attribute ReduceAction592::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction592[] = "init var of ReduceAction592";
+void INIT_ATTRIBUTES__parser___ReduceAction592(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction456;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction592;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction456(void)
+val_t NEW_parser___ReduceAction592(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction456;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction592;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction456[] = "check new ReduceAction456";
-void CHECKNEW_parser___ReduceAction456(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction592[] = "check new ReduceAction592";
+void CHECKNEW_parser___ReduceAction592(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction456;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction592;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -141361,36 +162446,36 @@ void CHECKNEW_parser___ReduceAction456(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction456_parser___ReduceAction___init[] = "new ReduceAction456 parser::ReduceAction::init";
-val_t NEW_ReduceAction456_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction592_parser___ReduceAction___init[] = "new ReduceAction592 parser::ReduceAction::init";
+val_t NEW_ReduceAction592_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction456_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction592_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction456();
-  INIT_ATTRIBUTES__parser___ReduceAction456(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction592();
+  INIT_ATTRIBUTES__parser___ReduceAction592(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction456(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction592(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction457[55] = {
-  {(bigint) 983 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction593[55] = {
+  {(bigint) 807 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction457" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction457 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction457 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 983 /* 5: ReduceAction457 < ReduceAction457: superclass typecheck marker */},
+  {(bigint) "ReduceAction593" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction593 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction593 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 807 /* 5: ReduceAction593 < ReduceAction593: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -141404,7 +162489,7 @@ const classtable_elt_t VFT_parser___ReduceAction457[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction457 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction593 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -141435,46 +162520,46 @@ const classtable_elt_t VFT_parser___ReduceAction457[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction457 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction457___action},
+  {(bigint) 0 /* 50: ReduceAction593 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction593___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction457 < ReduceAction457: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction593 < ReduceAction593: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction457::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction457[] = "init var of ReduceAction457";
-void INIT_ATTRIBUTES__parser___ReduceAction457(val_t p0){
+/* 2: Attribute ReduceAction593::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction593[] = "init var of ReduceAction593";
+void INIT_ATTRIBUTES__parser___ReduceAction593(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction457;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction593;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction457(void)
+val_t NEW_parser___ReduceAction593(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction457;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction593;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction457[] = "check new ReduceAction457";
-void CHECKNEW_parser___ReduceAction457(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction593[] = "check new ReduceAction593";
+void CHECKNEW_parser___ReduceAction593(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction457;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction593;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -141487,36 +162572,36 @@ void CHECKNEW_parser___ReduceAction457(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction457_parser___ReduceAction___init[] = "new ReduceAction457 parser::ReduceAction::init";
-val_t NEW_ReduceAction457_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction593_parser___ReduceAction___init[] = "new ReduceAction593 parser::ReduceAction::init";
+val_t NEW_ReduceAction593_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction457_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction593_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction457();
-  INIT_ATTRIBUTES__parser___ReduceAction457(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction593();
+  INIT_ATTRIBUTES__parser___ReduceAction593(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction457(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction593(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction459[55] = {
-  {(bigint) 979 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction594[55] = {
+  {(bigint) 803 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction459" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction459 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction459 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 979 /* 5: ReduceAction459 < ReduceAction459: superclass typecheck marker */},
+  {(bigint) "ReduceAction594" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction594 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction594 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 803 /* 5: ReduceAction594 < ReduceAction594: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -141530,7 +162615,7 @@ const classtable_elt_t VFT_parser___ReduceAction459[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction459 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction594 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -141561,46 +162646,46 @@ const classtable_elt_t VFT_parser___ReduceAction459[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction459 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction459___action},
+  {(bigint) 0 /* 50: ReduceAction594 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction594___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction459 < ReduceAction459: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction594 < ReduceAction594: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction459::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction459[] = "init var of ReduceAction459";
-void INIT_ATTRIBUTES__parser___ReduceAction459(val_t p0){
+/* 2: Attribute ReduceAction594::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction594[] = "init var of ReduceAction594";
+void INIT_ATTRIBUTES__parser___ReduceAction594(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction459;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction594;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction459(void)
+val_t NEW_parser___ReduceAction594(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction459;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction594;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction459[] = "check new ReduceAction459";
-void CHECKNEW_parser___ReduceAction459(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction594[] = "check new ReduceAction594";
+void CHECKNEW_parser___ReduceAction594(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction459;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction594;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -141613,36 +162698,36 @@ void CHECKNEW_parser___ReduceAction459(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction459_parser___ReduceAction___init[] = "new ReduceAction459 parser::ReduceAction::init";
-val_t NEW_ReduceAction459_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction594_parser___ReduceAction___init[] = "new ReduceAction594 parser::ReduceAction::init";
+val_t NEW_ReduceAction594_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction459_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction594_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction459();
-  INIT_ATTRIBUTES__parser___ReduceAction459(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction594();
+  INIT_ATTRIBUTES__parser___ReduceAction594(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction459(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction594(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction460[55] = {
-  {(bigint) 971 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction595[55] = {
+  {(bigint) 799 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction460" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction460 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction460 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 971 /* 5: ReduceAction460 < ReduceAction460: superclass typecheck marker */},
+  {(bigint) "ReduceAction595" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction595 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction595 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 799 /* 5: ReduceAction595 < ReduceAction595: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -141656,7 +162741,7 @@ const classtable_elt_t VFT_parser___ReduceAction460[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction460 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction595 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -141687,46 +162772,46 @@ const classtable_elt_t VFT_parser___ReduceAction460[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction460 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction460___action},
+  {(bigint) 0 /* 50: ReduceAction595 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction595___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction460 < ReduceAction460: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction595 < ReduceAction595: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction460::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction460[] = "init var of ReduceAction460";
-void INIT_ATTRIBUTES__parser___ReduceAction460(val_t p0){
+/* 2: Attribute ReduceAction595::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction595[] = "init var of ReduceAction595";
+void INIT_ATTRIBUTES__parser___ReduceAction595(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction460;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction595;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction460(void)
+val_t NEW_parser___ReduceAction595(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction460;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction595;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction460[] = "check new ReduceAction460";
-void CHECKNEW_parser___ReduceAction460(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction595[] = "check new ReduceAction595";
+void CHECKNEW_parser___ReduceAction595(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction460;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction595;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -141739,36 +162824,36 @@ void CHECKNEW_parser___ReduceAction460(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction460_parser___ReduceAction___init[] = "new ReduceAction460 parser::ReduceAction::init";
-val_t NEW_ReduceAction460_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction595_parser___ReduceAction___init[] = "new ReduceAction595 parser::ReduceAction::init";
+val_t NEW_ReduceAction595_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction460_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction595_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction460();
-  INIT_ATTRIBUTES__parser___ReduceAction460(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction595();
+  INIT_ATTRIBUTES__parser___ReduceAction595(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction460(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction595(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction462[55] = {
-  {(bigint) 967 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction596[55] = {
+  {(bigint) 795 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction462" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction462 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction462 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 967 /* 5: ReduceAction462 < ReduceAction462: superclass typecheck marker */},
+  {(bigint) "ReduceAction596" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction596 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction596 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 795 /* 5: ReduceAction596 < ReduceAction596: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -141782,7 +162867,7 @@ const classtable_elt_t VFT_parser___ReduceAction462[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction462 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction596 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -141813,46 +162898,46 @@ const classtable_elt_t VFT_parser___ReduceAction462[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction462 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction462___action},
+  {(bigint) 0 /* 50: ReduceAction596 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction596___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction462 < ReduceAction462: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction596 < ReduceAction596: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction462::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction462[] = "init var of ReduceAction462";
-void INIT_ATTRIBUTES__parser___ReduceAction462(val_t p0){
+/* 2: Attribute ReduceAction596::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction596[] = "init var of ReduceAction596";
+void INIT_ATTRIBUTES__parser___ReduceAction596(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction462;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction596;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction462(void)
+val_t NEW_parser___ReduceAction596(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction462;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction596;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction462[] = "check new ReduceAction462";
-void CHECKNEW_parser___ReduceAction462(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction596[] = "check new ReduceAction596";
+void CHECKNEW_parser___ReduceAction596(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction462;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction596;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -141865,36 +162950,36 @@ void CHECKNEW_parser___ReduceAction462(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction462_parser___ReduceAction___init[] = "new ReduceAction462 parser::ReduceAction::init";
-val_t NEW_ReduceAction462_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction596_parser___ReduceAction___init[] = "new ReduceAction596 parser::ReduceAction::init";
+val_t NEW_ReduceAction596_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction462_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction596_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction462();
-  INIT_ATTRIBUTES__parser___ReduceAction462(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction596();
+  INIT_ATTRIBUTES__parser___ReduceAction596(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction462(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction596(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction463[55] = {
-  {(bigint) 963 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction597[55] = {
+  {(bigint) 791 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction463" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction463 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction463 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 963 /* 5: ReduceAction463 < ReduceAction463: superclass typecheck marker */},
+  {(bigint) "ReduceAction597" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction597 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction597 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 791 /* 5: ReduceAction597 < ReduceAction597: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -141908,7 +162993,7 @@ const classtable_elt_t VFT_parser___ReduceAction463[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction463 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction597 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -141939,46 +163024,46 @@ const classtable_elt_t VFT_parser___ReduceAction463[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction463 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction463___action},
+  {(bigint) 0 /* 50: ReduceAction597 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction597___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction463 < ReduceAction463: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction597 < ReduceAction597: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction463::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction463[] = "init var of ReduceAction463";
-void INIT_ATTRIBUTES__parser___ReduceAction463(val_t p0){
+/* 2: Attribute ReduceAction597::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction597[] = "init var of ReduceAction597";
+void INIT_ATTRIBUTES__parser___ReduceAction597(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction463;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction597;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction463(void)
+val_t NEW_parser___ReduceAction597(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction463;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction597;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction463[] = "check new ReduceAction463";
-void CHECKNEW_parser___ReduceAction463(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction597[] = "check new ReduceAction597";
+void CHECKNEW_parser___ReduceAction597(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction463;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction597;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -141991,36 +163076,36 @@ void CHECKNEW_parser___ReduceAction463(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction463_parser___ReduceAction___init[] = "new ReduceAction463 parser::ReduceAction::init";
-val_t NEW_ReduceAction463_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction597_parser___ReduceAction___init[] = "new ReduceAction597 parser::ReduceAction::init";
+val_t NEW_ReduceAction597_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction463_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction597_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction463();
-  INIT_ATTRIBUTES__parser___ReduceAction463(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction597();
+  INIT_ATTRIBUTES__parser___ReduceAction597(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction463(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction597(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction464[55] = {
-  {(bigint) 959 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction598[55] = {
+  {(bigint) 787 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction464" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction464 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction464 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 959 /* 5: ReduceAction464 < ReduceAction464: superclass typecheck marker */},
+  {(bigint) "ReduceAction598" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction598 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction598 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 787 /* 5: ReduceAction598 < ReduceAction598: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -142034,7 +163119,7 @@ const classtable_elt_t VFT_parser___ReduceAction464[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction464 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction598 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -142065,46 +163150,46 @@ const classtable_elt_t VFT_parser___ReduceAction464[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction464 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction464___action},
+  {(bigint) 0 /* 50: ReduceAction598 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction598___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction464 < ReduceAction464: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction598 < ReduceAction598: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction464::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction464[] = "init var of ReduceAction464";
-void INIT_ATTRIBUTES__parser___ReduceAction464(val_t p0){
+/* 2: Attribute ReduceAction598::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction598[] = "init var of ReduceAction598";
+void INIT_ATTRIBUTES__parser___ReduceAction598(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction464;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction598;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction464(void)
+val_t NEW_parser___ReduceAction598(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction464;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction598;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction464[] = "check new ReduceAction464";
-void CHECKNEW_parser___ReduceAction464(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction598[] = "check new ReduceAction598";
+void CHECKNEW_parser___ReduceAction598(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction464;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction598;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -142117,36 +163202,36 @@ void CHECKNEW_parser___ReduceAction464(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction464_parser___ReduceAction___init[] = "new ReduceAction464 parser::ReduceAction::init";
-val_t NEW_ReduceAction464_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction598_parser___ReduceAction___init[] = "new ReduceAction598 parser::ReduceAction::init";
+val_t NEW_ReduceAction598_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction464_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction598_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction464();
-  INIT_ATTRIBUTES__parser___ReduceAction464(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction598();
+  INIT_ATTRIBUTES__parser___ReduceAction598(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction464(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction598(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction466[55] = {
-  {(bigint) 955 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction600[55] = {
+  {(bigint) 775 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction466" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction466 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction466 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 955 /* 5: ReduceAction466 < ReduceAction466: superclass typecheck marker */},
+  {(bigint) "ReduceAction600" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction600 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction600 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 775 /* 5: ReduceAction600 < ReduceAction600: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -142160,7 +163245,7 @@ const classtable_elt_t VFT_parser___ReduceAction466[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction466 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction600 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -142191,46 +163276,46 @@ const classtable_elt_t VFT_parser___ReduceAction466[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction466 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction466___action},
+  {(bigint) 0 /* 50: ReduceAction600 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction600___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction466 < ReduceAction466: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction600 < ReduceAction600: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction466::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction466[] = "init var of ReduceAction466";
-void INIT_ATTRIBUTES__parser___ReduceAction466(val_t p0){
+/* 2: Attribute ReduceAction600::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction600[] = "init var of ReduceAction600";
+void INIT_ATTRIBUTES__parser___ReduceAction600(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction466;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction600;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction466(void)
+val_t NEW_parser___ReduceAction600(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction466;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction600;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction466[] = "check new ReduceAction466";
-void CHECKNEW_parser___ReduceAction466(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction600[] = "check new ReduceAction600";
+void CHECKNEW_parser___ReduceAction600(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction466;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction600;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -142243,36 +163328,36 @@ void CHECKNEW_parser___ReduceAction466(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction466_parser___ReduceAction___init[] = "new ReduceAction466 parser::ReduceAction::init";
-val_t NEW_ReduceAction466_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction600_parser___ReduceAction___init[] = "new ReduceAction600 parser::ReduceAction::init";
+val_t NEW_ReduceAction600_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction466_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction600_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction466();
-  INIT_ATTRIBUTES__parser___ReduceAction466(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction600();
+  INIT_ATTRIBUTES__parser___ReduceAction600(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction466(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction600(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction467[55] = {
-  {(bigint) 951 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction601[55] = {
+  {(bigint) 771 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction467" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction467 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction467 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 951 /* 5: ReduceAction467 < ReduceAction467: superclass typecheck marker */},
+  {(bigint) "ReduceAction601" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction601 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction601 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 771 /* 5: ReduceAction601 < ReduceAction601: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -142286,7 +163371,7 @@ const classtable_elt_t VFT_parser___ReduceAction467[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction467 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction601 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -142317,46 +163402,46 @@ const classtable_elt_t VFT_parser___ReduceAction467[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction467 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction467___action},
+  {(bigint) 0 /* 50: ReduceAction601 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction601___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction467 < ReduceAction467: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction601 < ReduceAction601: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction467::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction467[] = "init var of ReduceAction467";
-void INIT_ATTRIBUTES__parser___ReduceAction467(val_t p0){
+/* 2: Attribute ReduceAction601::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction601[] = "init var of ReduceAction601";
+void INIT_ATTRIBUTES__parser___ReduceAction601(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction467;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction601;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction467(void)
+val_t NEW_parser___ReduceAction601(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction467;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction601;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction467[] = "check new ReduceAction467";
-void CHECKNEW_parser___ReduceAction467(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction601[] = "check new ReduceAction601";
+void CHECKNEW_parser___ReduceAction601(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction467;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction601;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -142369,36 +163454,36 @@ void CHECKNEW_parser___ReduceAction467(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction467_parser___ReduceAction___init[] = "new ReduceAction467 parser::ReduceAction::init";
-val_t NEW_ReduceAction467_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction601_parser___ReduceAction___init[] = "new ReduceAction601 parser::ReduceAction::init";
+val_t NEW_ReduceAction601_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction467_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction601_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction467();
-  INIT_ATTRIBUTES__parser___ReduceAction467(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction601();
+  INIT_ATTRIBUTES__parser___ReduceAction601(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction467(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction601(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction469[55] = {
-  {(bigint) 947 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction602[55] = {
+  {(bigint) 767 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction469" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction469 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction469 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 947 /* 5: ReduceAction469 < ReduceAction469: superclass typecheck marker */},
+  {(bigint) "ReduceAction602" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction602 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction602 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 767 /* 5: ReduceAction602 < ReduceAction602: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -142412,7 +163497,7 @@ const classtable_elt_t VFT_parser___ReduceAction469[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction469 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction602 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -142443,46 +163528,46 @@ const classtable_elt_t VFT_parser___ReduceAction469[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction469 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction469___action},
+  {(bigint) 0 /* 50: ReduceAction602 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction602___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction469 < ReduceAction469: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction602 < ReduceAction602: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction469::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction469[] = "init var of ReduceAction469";
-void INIT_ATTRIBUTES__parser___ReduceAction469(val_t p0){
+/* 2: Attribute ReduceAction602::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction602[] = "init var of ReduceAction602";
+void INIT_ATTRIBUTES__parser___ReduceAction602(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction469;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction602;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction469(void)
+val_t NEW_parser___ReduceAction602(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction469;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction602;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction469[] = "check new ReduceAction469";
-void CHECKNEW_parser___ReduceAction469(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction602[] = "check new ReduceAction602";
+void CHECKNEW_parser___ReduceAction602(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction469;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction602;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -142495,36 +163580,36 @@ void CHECKNEW_parser___ReduceAction469(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction469_parser___ReduceAction___init[] = "new ReduceAction469 parser::ReduceAction::init";
-val_t NEW_ReduceAction469_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction602_parser___ReduceAction___init[] = "new ReduceAction602 parser::ReduceAction::init";
+val_t NEW_ReduceAction602_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction469_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction602_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction469();
-  INIT_ATTRIBUTES__parser___ReduceAction469(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction602();
+  INIT_ATTRIBUTES__parser___ReduceAction602(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction469(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction602(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction470[55] = {
-  {(bigint) 939 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction603[55] = {
+  {(bigint) 763 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction470" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction470 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction470 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 939 /* 5: ReduceAction470 < ReduceAction470: superclass typecheck marker */},
+  {(bigint) "ReduceAction603" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction603 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction603 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 763 /* 5: ReduceAction603 < ReduceAction603: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -142538,7 +163623,7 @@ const classtable_elt_t VFT_parser___ReduceAction470[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction470 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction603 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -142569,46 +163654,46 @@ const classtable_elt_t VFT_parser___ReduceAction470[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction470 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction470___action},
+  {(bigint) 0 /* 50: ReduceAction603 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction603___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction470 < ReduceAction470: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction603 < ReduceAction603: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction470::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction470[] = "init var of ReduceAction470";
-void INIT_ATTRIBUTES__parser___ReduceAction470(val_t p0){
+/* 2: Attribute ReduceAction603::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction603[] = "init var of ReduceAction603";
+void INIT_ATTRIBUTES__parser___ReduceAction603(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction470;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction603;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction470(void)
+val_t NEW_parser___ReduceAction603(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction470;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction603;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction470[] = "check new ReduceAction470";
-void CHECKNEW_parser___ReduceAction470(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction603[] = "check new ReduceAction603";
+void CHECKNEW_parser___ReduceAction603(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction470;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction603;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -142621,36 +163706,36 @@ void CHECKNEW_parser___ReduceAction470(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction470_parser___ReduceAction___init[] = "new ReduceAction470 parser::ReduceAction::init";
-val_t NEW_ReduceAction470_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction603_parser___ReduceAction___init[] = "new ReduceAction603 parser::ReduceAction::init";
+val_t NEW_ReduceAction603_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction470_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction603_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction470();
-  INIT_ATTRIBUTES__parser___ReduceAction470(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction603();
+  INIT_ATTRIBUTES__parser___ReduceAction603(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction470(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction603(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction471[55] = {
-  {(bigint) 935 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction604[55] = {
+  {(bigint) 759 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction471" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction471 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction471 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 935 /* 5: ReduceAction471 < ReduceAction471: superclass typecheck marker */},
+  {(bigint) "ReduceAction604" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction604 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction604 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 759 /* 5: ReduceAction604 < ReduceAction604: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -142664,7 +163749,7 @@ const classtable_elt_t VFT_parser___ReduceAction471[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction471 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction604 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -142695,46 +163780,46 @@ const classtable_elt_t VFT_parser___ReduceAction471[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction471 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction471___action},
+  {(bigint) 0 /* 50: ReduceAction604 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction604___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction471 < ReduceAction471: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction604 < ReduceAction604: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction471::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction471[] = "init var of ReduceAction471";
-void INIT_ATTRIBUTES__parser___ReduceAction471(val_t p0){
+/* 2: Attribute ReduceAction604::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction604[] = "init var of ReduceAction604";
+void INIT_ATTRIBUTES__parser___ReduceAction604(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction471;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction604;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction471(void)
+val_t NEW_parser___ReduceAction604(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction471;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction604;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction471[] = "check new ReduceAction471";
-void CHECKNEW_parser___ReduceAction471(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction604[] = "check new ReduceAction604";
+void CHECKNEW_parser___ReduceAction604(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction471;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction604;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -142747,36 +163832,36 @@ void CHECKNEW_parser___ReduceAction471(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction471_parser___ReduceAction___init[] = "new ReduceAction471 parser::ReduceAction::init";
-val_t NEW_ReduceAction471_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction604_parser___ReduceAction___init[] = "new ReduceAction604 parser::ReduceAction::init";
+val_t NEW_ReduceAction604_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction471_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction604_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction471();
-  INIT_ATTRIBUTES__parser___ReduceAction471(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction604();
+  INIT_ATTRIBUTES__parser___ReduceAction604(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction471(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction604(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction472[55] = {
-  {(bigint) 931 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction605[55] = {
+  {(bigint) 755 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction472" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction472 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction472 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 931 /* 5: ReduceAction472 < ReduceAction472: superclass typecheck marker */},
+  {(bigint) "ReduceAction605" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction605 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction605 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 755 /* 5: ReduceAction605 < ReduceAction605: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -142790,7 +163875,7 @@ const classtable_elt_t VFT_parser___ReduceAction472[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction472 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction605 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -142821,46 +163906,46 @@ const classtable_elt_t VFT_parser___ReduceAction472[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction472 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction472___action},
+  {(bigint) 0 /* 50: ReduceAction605 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction605___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction472 < ReduceAction472: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction605 < ReduceAction605: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction472::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction472[] = "init var of ReduceAction472";
-void INIT_ATTRIBUTES__parser___ReduceAction472(val_t p0){
+/* 2: Attribute ReduceAction605::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction605[] = "init var of ReduceAction605";
+void INIT_ATTRIBUTES__parser___ReduceAction605(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction472;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction605;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction472(void)
+val_t NEW_parser___ReduceAction605(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction472;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction605;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction472[] = "check new ReduceAction472";
-void CHECKNEW_parser___ReduceAction472(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction605[] = "check new ReduceAction605";
+void CHECKNEW_parser___ReduceAction605(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction472;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction605;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -142873,36 +163958,36 @@ void CHECKNEW_parser___ReduceAction472(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction472_parser___ReduceAction___init[] = "new ReduceAction472 parser::ReduceAction::init";
-val_t NEW_ReduceAction472_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction605_parser___ReduceAction___init[] = "new ReduceAction605 parser::ReduceAction::init";
+val_t NEW_ReduceAction605_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction472_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction605_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction472();
-  INIT_ATTRIBUTES__parser___ReduceAction472(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction605();
+  INIT_ATTRIBUTES__parser___ReduceAction605(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction472(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction605(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction473[55] = {
-  {(bigint) 927 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction606[55] = {
+  {(bigint) 751 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction473" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction473 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction473 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 927 /* 5: ReduceAction473 < ReduceAction473: superclass typecheck marker */},
+  {(bigint) "ReduceAction606" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction606 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction606 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 751 /* 5: ReduceAction606 < ReduceAction606: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -142916,7 +164001,7 @@ const classtable_elt_t VFT_parser___ReduceAction473[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction473 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction606 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -142947,46 +164032,46 @@ const classtable_elt_t VFT_parser___ReduceAction473[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction473 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction473___action},
+  {(bigint) 0 /* 50: ReduceAction606 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction606___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction473 < ReduceAction473: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction606 < ReduceAction606: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction473::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction473[] = "init var of ReduceAction473";
-void INIT_ATTRIBUTES__parser___ReduceAction473(val_t p0){
+/* 2: Attribute ReduceAction606::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction606[] = "init var of ReduceAction606";
+void INIT_ATTRIBUTES__parser___ReduceAction606(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction473;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction606;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction473(void)
+val_t NEW_parser___ReduceAction606(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction473;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction606;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction473[] = "check new ReduceAction473";
-void CHECKNEW_parser___ReduceAction473(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction606[] = "check new ReduceAction606";
+void CHECKNEW_parser___ReduceAction606(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction473;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction606;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -142999,36 +164084,36 @@ void CHECKNEW_parser___ReduceAction473(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction473_parser___ReduceAction___init[] = "new ReduceAction473 parser::ReduceAction::init";
-val_t NEW_ReduceAction473_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction606_parser___ReduceAction___init[] = "new ReduceAction606 parser::ReduceAction::init";
+val_t NEW_ReduceAction606_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction473_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction606_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction473();
-  INIT_ATTRIBUTES__parser___ReduceAction473(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction606();
+  INIT_ATTRIBUTES__parser___ReduceAction606(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction473(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction606(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction480[55] = {
-  {(bigint) 919 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction607[55] = {
+  {(bigint) 747 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction480" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction480 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction480 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 919 /* 5: ReduceAction480 < ReduceAction480: superclass typecheck marker */},
+  {(bigint) "ReduceAction607" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction607 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction607 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 747 /* 5: ReduceAction607 < ReduceAction607: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -143042,7 +164127,7 @@ const classtable_elt_t VFT_parser___ReduceAction480[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction480 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction607 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -143073,46 +164158,46 @@ const classtable_elt_t VFT_parser___ReduceAction480[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction480 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction480___action},
+  {(bigint) 0 /* 50: ReduceAction607 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction607___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction480 < ReduceAction480: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction607 < ReduceAction607: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction480::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction480[] = "init var of ReduceAction480";
-void INIT_ATTRIBUTES__parser___ReduceAction480(val_t p0){
+/* 2: Attribute ReduceAction607::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction607[] = "init var of ReduceAction607";
+void INIT_ATTRIBUTES__parser___ReduceAction607(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction480;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction607;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction480(void)
+val_t NEW_parser___ReduceAction607(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction480;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction607;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction480[] = "check new ReduceAction480";
-void CHECKNEW_parser___ReduceAction480(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction607[] = "check new ReduceAction607";
+void CHECKNEW_parser___ReduceAction607(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction480;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction607;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -143125,36 +164210,36 @@ void CHECKNEW_parser___ReduceAction480(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction480_parser___ReduceAction___init[] = "new ReduceAction480 parser::ReduceAction::init";
-val_t NEW_ReduceAction480_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction607_parser___ReduceAction___init[] = "new ReduceAction607 parser::ReduceAction::init";
+val_t NEW_ReduceAction607_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction480_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction607_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction480();
-  INIT_ATTRIBUTES__parser___ReduceAction480(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction607();
+  INIT_ATTRIBUTES__parser___ReduceAction607(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction480(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction607(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction481[55] = {
-  {(bigint) 915 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction608[55] = {
+  {(bigint) 743 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction481" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction481 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction481 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 915 /* 5: ReduceAction481 < ReduceAction481: superclass typecheck marker */},
+  {(bigint) "ReduceAction608" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction608 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction608 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 743 /* 5: ReduceAction608 < ReduceAction608: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -143168,7 +164253,7 @@ const classtable_elt_t VFT_parser___ReduceAction481[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction481 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction608 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -143199,46 +164284,46 @@ const classtable_elt_t VFT_parser___ReduceAction481[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction481 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction481___action},
+  {(bigint) 0 /* 50: ReduceAction608 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction608___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction481 < ReduceAction481: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction608 < ReduceAction608: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction481::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction481[] = "init var of ReduceAction481";
-void INIT_ATTRIBUTES__parser___ReduceAction481(val_t p0){
+/* 2: Attribute ReduceAction608::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction608[] = "init var of ReduceAction608";
+void INIT_ATTRIBUTES__parser___ReduceAction608(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction481;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction608;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction481(void)
+val_t NEW_parser___ReduceAction608(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction481;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction608;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction481[] = "check new ReduceAction481";
-void CHECKNEW_parser___ReduceAction481(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction608[] = "check new ReduceAction608";
+void CHECKNEW_parser___ReduceAction608(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction481;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction608;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -143251,36 +164336,36 @@ void CHECKNEW_parser___ReduceAction481(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction481_parser___ReduceAction___init[] = "new ReduceAction481 parser::ReduceAction::init";
-val_t NEW_ReduceAction481_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction608_parser___ReduceAction___init[] = "new ReduceAction608 parser::ReduceAction::init";
+val_t NEW_ReduceAction608_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction481_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction608_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction481();
-  INIT_ATTRIBUTES__parser___ReduceAction481(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction608();
+  INIT_ATTRIBUTES__parser___ReduceAction608(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction481(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction608(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction482[55] = {
-  {(bigint) 911 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction609[55] = {
+  {(bigint) 739 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction482" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction482 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction482 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 911 /* 5: ReduceAction482 < ReduceAction482: superclass typecheck marker */},
+  {(bigint) "ReduceAction609" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction609 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction609 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 739 /* 5: ReduceAction609 < ReduceAction609: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -143294,7 +164379,7 @@ const classtable_elt_t VFT_parser___ReduceAction482[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction482 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction609 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -143325,46 +164410,46 @@ const classtable_elt_t VFT_parser___ReduceAction482[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction482 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction482___action},
+  {(bigint) 0 /* 50: ReduceAction609 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction609___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction482 < ReduceAction482: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction609 < ReduceAction609: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction482::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction482[] = "init var of ReduceAction482";
-void INIT_ATTRIBUTES__parser___ReduceAction482(val_t p0){
+/* 2: Attribute ReduceAction609::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction609[] = "init var of ReduceAction609";
+void INIT_ATTRIBUTES__parser___ReduceAction609(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction482;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction609;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction482(void)
+val_t NEW_parser___ReduceAction609(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction482;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction609;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction482[] = "check new ReduceAction482";
-void CHECKNEW_parser___ReduceAction482(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction609[] = "check new ReduceAction609";
+void CHECKNEW_parser___ReduceAction609(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction482;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction609;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -143377,36 +164462,36 @@ void CHECKNEW_parser___ReduceAction482(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction482_parser___ReduceAction___init[] = "new ReduceAction482 parser::ReduceAction::init";
-val_t NEW_ReduceAction482_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction609_parser___ReduceAction___init[] = "new ReduceAction609 parser::ReduceAction::init";
+val_t NEW_ReduceAction609_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction482_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction609_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction482();
-  INIT_ATTRIBUTES__parser___ReduceAction482(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction609();
+  INIT_ATTRIBUTES__parser___ReduceAction609(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction482(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction609(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction483[55] = {
-  {(bigint) 907 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction610[55] = {
+  {(bigint) 731 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction483" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction483 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction483 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 907 /* 5: ReduceAction483 < ReduceAction483: superclass typecheck marker */},
+  {(bigint) "ReduceAction610" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction610 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction610 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 731 /* 5: ReduceAction610 < ReduceAction610: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -143420,7 +164505,7 @@ const classtable_elt_t VFT_parser___ReduceAction483[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction483 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction610 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -143451,46 +164536,46 @@ const classtable_elt_t VFT_parser___ReduceAction483[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction483 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction483___action},
+  {(bigint) 0 /* 50: ReduceAction610 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction610___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction483 < ReduceAction483: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction610 < ReduceAction610: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction483::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction483[] = "init var of ReduceAction483";
-void INIT_ATTRIBUTES__parser___ReduceAction483(val_t p0){
+/* 2: Attribute ReduceAction610::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction610[] = "init var of ReduceAction610";
+void INIT_ATTRIBUTES__parser___ReduceAction610(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction483;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction610;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction483(void)
+val_t NEW_parser___ReduceAction610(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction483;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction610;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction483[] = "check new ReduceAction483";
-void CHECKNEW_parser___ReduceAction483(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction610[] = "check new ReduceAction610";
+void CHECKNEW_parser___ReduceAction610(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction483;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction610;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -143503,36 +164588,36 @@ void CHECKNEW_parser___ReduceAction483(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction483_parser___ReduceAction___init[] = "new ReduceAction483 parser::ReduceAction::init";
-val_t NEW_ReduceAction483_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction610_parser___ReduceAction___init[] = "new ReduceAction610 parser::ReduceAction::init";
+val_t NEW_ReduceAction610_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction483_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction610_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction483();
-  INIT_ATTRIBUTES__parser___ReduceAction483(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction610();
+  INIT_ATTRIBUTES__parser___ReduceAction610(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction483(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction610(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction484[55] = {
-  {(bigint) 903 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction612[55] = {
+  {(bigint) 727 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction484" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction484 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction484 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 903 /* 5: ReduceAction484 < ReduceAction484: superclass typecheck marker */},
+  {(bigint) "ReduceAction612" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction612 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction612 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 727 /* 5: ReduceAction612 < ReduceAction612: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -143546,7 +164631,7 @@ const classtable_elt_t VFT_parser___ReduceAction484[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction484 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction612 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -143577,46 +164662,46 @@ const classtable_elt_t VFT_parser___ReduceAction484[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction484 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction484___action},
+  {(bigint) 0 /* 50: ReduceAction612 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction612___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction484 < ReduceAction484: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction612 < ReduceAction612: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction484::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction484[] = "init var of ReduceAction484";
-void INIT_ATTRIBUTES__parser___ReduceAction484(val_t p0){
+/* 2: Attribute ReduceAction612::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction612[] = "init var of ReduceAction612";
+void INIT_ATTRIBUTES__parser___ReduceAction612(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction484;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction612;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction484(void)
+val_t NEW_parser___ReduceAction612(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction484;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction612;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction484[] = "check new ReduceAction484";
-void CHECKNEW_parser___ReduceAction484(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction612[] = "check new ReduceAction612";
+void CHECKNEW_parser___ReduceAction612(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction484;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction612;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -143629,36 +164714,36 @@ void CHECKNEW_parser___ReduceAction484(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction484_parser___ReduceAction___init[] = "new ReduceAction484 parser::ReduceAction::init";
-val_t NEW_ReduceAction484_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction612_parser___ReduceAction___init[] = "new ReduceAction612 parser::ReduceAction::init";
+val_t NEW_ReduceAction612_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction484_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction612_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction484();
-  INIT_ATTRIBUTES__parser___ReduceAction484(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction612();
+  INIT_ATTRIBUTES__parser___ReduceAction612(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction484(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction612(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction485[55] = {
-  {(bigint) 899 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction613[55] = {
+  {(bigint) 723 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction485" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction485 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction485 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 899 /* 5: ReduceAction485 < ReduceAction485: superclass typecheck marker */},
+  {(bigint) "ReduceAction613" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction613 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction613 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 723 /* 5: ReduceAction613 < ReduceAction613: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -143672,7 +164757,7 @@ const classtable_elt_t VFT_parser___ReduceAction485[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction485 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction613 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -143703,46 +164788,46 @@ const classtable_elt_t VFT_parser___ReduceAction485[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction485 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction485___action},
+  {(bigint) 0 /* 50: ReduceAction613 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction613___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction485 < ReduceAction485: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction613 < ReduceAction613: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction485::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction485[] = "init var of ReduceAction485";
-void INIT_ATTRIBUTES__parser___ReduceAction485(val_t p0){
+/* 2: Attribute ReduceAction613::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction613[] = "init var of ReduceAction613";
+void INIT_ATTRIBUTES__parser___ReduceAction613(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction485;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction613;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction485(void)
+val_t NEW_parser___ReduceAction613(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction485;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction613;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction485[] = "check new ReduceAction485";
-void CHECKNEW_parser___ReduceAction485(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction613[] = "check new ReduceAction613";
+void CHECKNEW_parser___ReduceAction613(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction485;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction613;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -143755,36 +164840,36 @@ void CHECKNEW_parser___ReduceAction485(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction485_parser___ReduceAction___init[] = "new ReduceAction485 parser::ReduceAction::init";
-val_t NEW_ReduceAction485_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction613_parser___ReduceAction___init[] = "new ReduceAction613 parser::ReduceAction::init";
+val_t NEW_ReduceAction613_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction485_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction613_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction485();
-  INIT_ATTRIBUTES__parser___ReduceAction485(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction613();
+  INIT_ATTRIBUTES__parser___ReduceAction613(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction485(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction613(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction486[55] = {
-  {(bigint) 895 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction614[55] = {
+  {(bigint) 719 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction486" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction486 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction486 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 895 /* 5: ReduceAction486 < ReduceAction486: superclass typecheck marker */},
+  {(bigint) "ReduceAction614" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction614 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction614 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 719 /* 5: ReduceAction614 < ReduceAction614: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -143798,7 +164883,7 @@ const classtable_elt_t VFT_parser___ReduceAction486[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction486 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction614 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -143829,46 +164914,46 @@ const classtable_elt_t VFT_parser___ReduceAction486[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction486 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction486___action},
+  {(bigint) 0 /* 50: ReduceAction614 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction614___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction486 < ReduceAction486: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction614 < ReduceAction614: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction486::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction486[] = "init var of ReduceAction486";
-void INIT_ATTRIBUTES__parser___ReduceAction486(val_t p0){
+/* 2: Attribute ReduceAction614::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction614[] = "init var of ReduceAction614";
+void INIT_ATTRIBUTES__parser___ReduceAction614(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction486;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction614;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction486(void)
+val_t NEW_parser___ReduceAction614(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction486;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction614;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction486[] = "check new ReduceAction486";
-void CHECKNEW_parser___ReduceAction486(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction614[] = "check new ReduceAction614";
+void CHECKNEW_parser___ReduceAction614(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction486;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction614;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -143881,36 +164966,36 @@ void CHECKNEW_parser___ReduceAction486(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction486_parser___ReduceAction___init[] = "new ReduceAction486 parser::ReduceAction::init";
-val_t NEW_ReduceAction486_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction614_parser___ReduceAction___init[] = "new ReduceAction614 parser::ReduceAction::init";
+val_t NEW_ReduceAction614_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction486_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction614_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction486();
-  INIT_ATTRIBUTES__parser___ReduceAction486(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction614();
+  INIT_ATTRIBUTES__parser___ReduceAction614(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction486(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction614(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction487[55] = {
-  {(bigint) 891 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction615[55] = {
+  {(bigint) 715 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction487" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction487 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction487 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 891 /* 5: ReduceAction487 < ReduceAction487: superclass typecheck marker */},
+  {(bigint) "ReduceAction615" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction615 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction615 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 715 /* 5: ReduceAction615 < ReduceAction615: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -143924,7 +165009,7 @@ const classtable_elt_t VFT_parser___ReduceAction487[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction487 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction615 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -143955,46 +165040,46 @@ const classtable_elt_t VFT_parser___ReduceAction487[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction487 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction487___action},
+  {(bigint) 0 /* 50: ReduceAction615 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction615___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction487 < ReduceAction487: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction615 < ReduceAction615: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction487::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction487[] = "init var of ReduceAction487";
-void INIT_ATTRIBUTES__parser___ReduceAction487(val_t p0){
+/* 2: Attribute ReduceAction615::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction615[] = "init var of ReduceAction615";
+void INIT_ATTRIBUTES__parser___ReduceAction615(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction487;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction615;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction487(void)
+val_t NEW_parser___ReduceAction615(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction487;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction615;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction487[] = "check new ReduceAction487";
-void CHECKNEW_parser___ReduceAction487(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction615[] = "check new ReduceAction615";
+void CHECKNEW_parser___ReduceAction615(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction487;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction615;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -144007,36 +165092,36 @@ void CHECKNEW_parser___ReduceAction487(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction487_parser___ReduceAction___init[] = "new ReduceAction487 parser::ReduceAction::init";
-val_t NEW_ReduceAction487_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction615_parser___ReduceAction___init[] = "new ReduceAction615 parser::ReduceAction::init";
+val_t NEW_ReduceAction615_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction487_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction615_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction487();
-  INIT_ATTRIBUTES__parser___ReduceAction487(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction615();
+  INIT_ATTRIBUTES__parser___ReduceAction615(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction487(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction615(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction488[55] = {
-  {(bigint) 887 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction616[55] = {
+  {(bigint) 711 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction488" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction488 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction488 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 887 /* 5: ReduceAction488 < ReduceAction488: superclass typecheck marker */},
+  {(bigint) "ReduceAction616" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction616 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction616 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 711 /* 5: ReduceAction616 < ReduceAction616: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -144050,7 +165135,7 @@ const classtable_elt_t VFT_parser___ReduceAction488[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction488 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction616 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -144081,46 +165166,46 @@ const classtable_elt_t VFT_parser___ReduceAction488[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction488 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction488___action},
+  {(bigint) 0 /* 50: ReduceAction616 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction616___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction488 < ReduceAction488: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction616 < ReduceAction616: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction488::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction488[] = "init var of ReduceAction488";
-void INIT_ATTRIBUTES__parser___ReduceAction488(val_t p0){
+/* 2: Attribute ReduceAction616::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction616[] = "init var of ReduceAction616";
+void INIT_ATTRIBUTES__parser___ReduceAction616(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction488;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction616;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction488(void)
+val_t NEW_parser___ReduceAction616(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction488;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction616;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction488[] = "check new ReduceAction488";
-void CHECKNEW_parser___ReduceAction488(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction616[] = "check new ReduceAction616";
+void CHECKNEW_parser___ReduceAction616(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction488;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction616;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -144133,36 +165218,36 @@ void CHECKNEW_parser___ReduceAction488(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction488_parser___ReduceAction___init[] = "new ReduceAction488 parser::ReduceAction::init";
-val_t NEW_ReduceAction488_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction616_parser___ReduceAction___init[] = "new ReduceAction616 parser::ReduceAction::init";
+val_t NEW_ReduceAction616_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction488_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction616_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction488();
-  INIT_ATTRIBUTES__parser___ReduceAction488(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction616();
+  INIT_ATTRIBUTES__parser___ReduceAction616(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction488(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction616(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction489[55] = {
-  {(bigint) 883 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction617[55] = {
+  {(bigint) 707 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction489" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction489 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction489 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 883 /* 5: ReduceAction489 < ReduceAction489: superclass typecheck marker */},
+  {(bigint) "ReduceAction617" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction617 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction617 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 707 /* 5: ReduceAction617 < ReduceAction617: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -144176,7 +165261,7 @@ const classtable_elt_t VFT_parser___ReduceAction489[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction489 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction617 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -144207,46 +165292,46 @@ const classtable_elt_t VFT_parser___ReduceAction489[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction489 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction489___action},
+  {(bigint) 0 /* 50: ReduceAction617 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction617___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction489 < ReduceAction489: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction617 < ReduceAction617: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction489::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction489[] = "init var of ReduceAction489";
-void INIT_ATTRIBUTES__parser___ReduceAction489(val_t p0){
+/* 2: Attribute ReduceAction617::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction617[] = "init var of ReduceAction617";
+void INIT_ATTRIBUTES__parser___ReduceAction617(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction489;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction617;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction489(void)
+val_t NEW_parser___ReduceAction617(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction489;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction617;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction489[] = "check new ReduceAction489";
-void CHECKNEW_parser___ReduceAction489(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction617[] = "check new ReduceAction617";
+void CHECKNEW_parser___ReduceAction617(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction489;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction617;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -144259,36 +165344,36 @@ void CHECKNEW_parser___ReduceAction489(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction489_parser___ReduceAction___init[] = "new ReduceAction489 parser::ReduceAction::init";
-val_t NEW_ReduceAction489_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction617_parser___ReduceAction___init[] = "new ReduceAction617 parser::ReduceAction::init";
+val_t NEW_ReduceAction617_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction489_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction617_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction489();
-  INIT_ATTRIBUTES__parser___ReduceAction489(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction617();
+  INIT_ATTRIBUTES__parser___ReduceAction617(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction489(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction617(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction490[55] = {
-  {(bigint) 875 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction618[55] = {
+  {(bigint) 703 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction490" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction490 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction490 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 875 /* 5: ReduceAction490 < ReduceAction490: superclass typecheck marker */},
+  {(bigint) "ReduceAction618" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction618 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction618 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 703 /* 5: ReduceAction618 < ReduceAction618: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -144302,7 +165387,7 @@ const classtable_elt_t VFT_parser___ReduceAction490[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction490 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction618 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -144333,46 +165418,46 @@ const classtable_elt_t VFT_parser___ReduceAction490[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction490 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction490___action},
+  {(bigint) 0 /* 50: ReduceAction618 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction618___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction490 < ReduceAction490: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction618 < ReduceAction618: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction490::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction490[] = "init var of ReduceAction490";
-void INIT_ATTRIBUTES__parser___ReduceAction490(val_t p0){
+/* 2: Attribute ReduceAction618::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction618[] = "init var of ReduceAction618";
+void INIT_ATTRIBUTES__parser___ReduceAction618(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction490;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction618;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction490(void)
+val_t NEW_parser___ReduceAction618(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction490;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction618;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction490[] = "check new ReduceAction490";
-void CHECKNEW_parser___ReduceAction490(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction618[] = "check new ReduceAction618";
+void CHECKNEW_parser___ReduceAction618(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction490;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction618;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -144385,36 +165470,36 @@ void CHECKNEW_parser___ReduceAction490(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction490_parser___ReduceAction___init[] = "new ReduceAction490 parser::ReduceAction::init";
-val_t NEW_ReduceAction490_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction618_parser___ReduceAction___init[] = "new ReduceAction618 parser::ReduceAction::init";
+val_t NEW_ReduceAction618_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction490_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction618_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction490();
-  INIT_ATTRIBUTES__parser___ReduceAction490(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction618();
+  INIT_ATTRIBUTES__parser___ReduceAction618(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction490(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction618(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction491[55] = {
-  {(bigint) 871 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction619[55] = {
+  {(bigint) 699 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction491" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction491 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction491 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 871 /* 5: ReduceAction491 < ReduceAction491: superclass typecheck marker */},
+  {(bigint) "ReduceAction619" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction619 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction619 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 699 /* 5: ReduceAction619 < ReduceAction619: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -144428,7 +165513,7 @@ const classtable_elt_t VFT_parser___ReduceAction491[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction491 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction619 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -144459,46 +165544,46 @@ const classtable_elt_t VFT_parser___ReduceAction491[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction491 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction491___action},
+  {(bigint) 0 /* 50: ReduceAction619 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction619___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction491 < ReduceAction491: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction619 < ReduceAction619: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction491::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction491[] = "init var of ReduceAction491";
-void INIT_ATTRIBUTES__parser___ReduceAction491(val_t p0){
+/* 2: Attribute ReduceAction619::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction619[] = "init var of ReduceAction619";
+void INIT_ATTRIBUTES__parser___ReduceAction619(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction491;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction619;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction491(void)
+val_t NEW_parser___ReduceAction619(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction491;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction619;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction491[] = "check new ReduceAction491";
-void CHECKNEW_parser___ReduceAction491(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction619[] = "check new ReduceAction619";
+void CHECKNEW_parser___ReduceAction619(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction491;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction619;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -144511,36 +165596,36 @@ void CHECKNEW_parser___ReduceAction491(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction491_parser___ReduceAction___init[] = "new ReduceAction491 parser::ReduceAction::init";
-val_t NEW_ReduceAction491_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction619_parser___ReduceAction___init[] = "new ReduceAction619 parser::ReduceAction::init";
+val_t NEW_ReduceAction619_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction491_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction619_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction491();
-  INIT_ATTRIBUTES__parser___ReduceAction491(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction619();
+  INIT_ATTRIBUTES__parser___ReduceAction619(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction491(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction619(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction492[55] = {
-  {(bigint) 867 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction620[55] = {
+  {(bigint) 691 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction492" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction492 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction492 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 867 /* 5: ReduceAction492 < ReduceAction492: superclass typecheck marker */},
+  {(bigint) "ReduceAction620" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction620 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction620 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 691 /* 5: ReduceAction620 < ReduceAction620: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -144554,7 +165639,7 @@ const classtable_elt_t VFT_parser___ReduceAction492[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction492 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction620 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -144585,46 +165670,46 @@ const classtable_elt_t VFT_parser___ReduceAction492[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction492 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction492___action},
+  {(bigint) 0 /* 50: ReduceAction620 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction620___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction492 < ReduceAction492: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction620 < ReduceAction620: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction492::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction492[] = "init var of ReduceAction492";
-void INIT_ATTRIBUTES__parser___ReduceAction492(val_t p0){
+/* 2: Attribute ReduceAction620::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction620[] = "init var of ReduceAction620";
+void INIT_ATTRIBUTES__parser___ReduceAction620(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction492;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction620;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction492(void)
+val_t NEW_parser___ReduceAction620(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction492;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction620;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction492[] = "check new ReduceAction492";
-void CHECKNEW_parser___ReduceAction492(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction620[] = "check new ReduceAction620";
+void CHECKNEW_parser___ReduceAction620(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction492;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction620;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -144637,36 +165722,36 @@ void CHECKNEW_parser___ReduceAction492(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction492_parser___ReduceAction___init[] = "new ReduceAction492 parser::ReduceAction::init";
-val_t NEW_ReduceAction492_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction620_parser___ReduceAction___init[] = "new ReduceAction620 parser::ReduceAction::init";
+val_t NEW_ReduceAction620_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction492_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction620_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction492();
-  INIT_ATTRIBUTES__parser___ReduceAction492(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction620();
+  INIT_ATTRIBUTES__parser___ReduceAction620(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction492(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction620(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction494[55] = {
-  {(bigint) 863 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction621[55] = {
+  {(bigint) 687 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction494" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction494 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction494 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 863 /* 5: ReduceAction494 < ReduceAction494: superclass typecheck marker */},
+  {(bigint) "ReduceAction621" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction621 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction621 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 687 /* 5: ReduceAction621 < ReduceAction621: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -144680,7 +165765,7 @@ const classtable_elt_t VFT_parser___ReduceAction494[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction494 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction621 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -144711,46 +165796,46 @@ const classtable_elt_t VFT_parser___ReduceAction494[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction494 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction494___action},
+  {(bigint) 0 /* 50: ReduceAction621 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction621___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction494 < ReduceAction494: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction621 < ReduceAction621: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction494::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction494[] = "init var of ReduceAction494";
-void INIT_ATTRIBUTES__parser___ReduceAction494(val_t p0){
+/* 2: Attribute ReduceAction621::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction621[] = "init var of ReduceAction621";
+void INIT_ATTRIBUTES__parser___ReduceAction621(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction494;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction621;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction494(void)
+val_t NEW_parser___ReduceAction621(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction494;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction621;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction494[] = "check new ReduceAction494";
-void CHECKNEW_parser___ReduceAction494(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction621[] = "check new ReduceAction621";
+void CHECKNEW_parser___ReduceAction621(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction494;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction621;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -144763,36 +165848,36 @@ void CHECKNEW_parser___ReduceAction494(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction494_parser___ReduceAction___init[] = "new ReduceAction494 parser::ReduceAction::init";
-val_t NEW_ReduceAction494_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction621_parser___ReduceAction___init[] = "new ReduceAction621 parser::ReduceAction::init";
+val_t NEW_ReduceAction621_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction494_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction621_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction494();
-  INIT_ATTRIBUTES__parser___ReduceAction494(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction621();
+  INIT_ATTRIBUTES__parser___ReduceAction621(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction494(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction621(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction495[55] = {
-  {(bigint) 859 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction622[55] = {
+  {(bigint) 683 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction495" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction495 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction495 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 859 /* 5: ReduceAction495 < ReduceAction495: superclass typecheck marker */},
+  {(bigint) "ReduceAction622" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction622 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction622 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 683 /* 5: ReduceAction622 < ReduceAction622: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -144806,7 +165891,7 @@ const classtable_elt_t VFT_parser___ReduceAction495[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction495 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction622 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -144837,46 +165922,46 @@ const classtable_elt_t VFT_parser___ReduceAction495[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction495 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction495___action},
+  {(bigint) 0 /* 50: ReduceAction622 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction622___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction495 < ReduceAction495: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction622 < ReduceAction622: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction495::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction495[] = "init var of ReduceAction495";
-void INIT_ATTRIBUTES__parser___ReduceAction495(val_t p0){
+/* 2: Attribute ReduceAction622::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction622[] = "init var of ReduceAction622";
+void INIT_ATTRIBUTES__parser___ReduceAction622(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction495;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction622;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction495(void)
+val_t NEW_parser___ReduceAction622(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction495;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction622;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction495[] = "check new ReduceAction495";
-void CHECKNEW_parser___ReduceAction495(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction622[] = "check new ReduceAction622";
+void CHECKNEW_parser___ReduceAction622(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction495;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction622;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -144889,36 +165974,36 @@ void CHECKNEW_parser___ReduceAction495(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction495_parser___ReduceAction___init[] = "new ReduceAction495 parser::ReduceAction::init";
-val_t NEW_ReduceAction495_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction622_parser___ReduceAction___init[] = "new ReduceAction622 parser::ReduceAction::init";
+val_t NEW_ReduceAction622_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction495_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction622_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction495();
-  INIT_ATTRIBUTES__parser___ReduceAction495(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction622();
+  INIT_ATTRIBUTES__parser___ReduceAction622(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction495(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction622(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction496[55] = {
-  {(bigint) 855 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction624[55] = {
+  {(bigint) 679 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction496" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction496 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction496 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 855 /* 5: ReduceAction496 < ReduceAction496: superclass typecheck marker */},
+  {(bigint) "ReduceAction624" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction624 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction624 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 679 /* 5: ReduceAction624 < ReduceAction624: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -144932,7 +166017,7 @@ const classtable_elt_t VFT_parser___ReduceAction496[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction496 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction624 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -144963,46 +166048,46 @@ const classtable_elt_t VFT_parser___ReduceAction496[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction496 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction496___action},
+  {(bigint) 0 /* 50: ReduceAction624 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction624___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction496 < ReduceAction496: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction624 < ReduceAction624: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction496::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction496[] = "init var of ReduceAction496";
-void INIT_ATTRIBUTES__parser___ReduceAction496(val_t p0){
+/* 2: Attribute ReduceAction624::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction624[] = "init var of ReduceAction624";
+void INIT_ATTRIBUTES__parser___ReduceAction624(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction496;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction624;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction496(void)
+val_t NEW_parser___ReduceAction624(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction496;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction624;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction496[] = "check new ReduceAction496";
-void CHECKNEW_parser___ReduceAction496(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction624[] = "check new ReduceAction624";
+void CHECKNEW_parser___ReduceAction624(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction496;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction624;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -145015,36 +166100,36 @@ void CHECKNEW_parser___ReduceAction496(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction496_parser___ReduceAction___init[] = "new ReduceAction496 parser::ReduceAction::init";
-val_t NEW_ReduceAction496_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction624_parser___ReduceAction___init[] = "new ReduceAction624 parser::ReduceAction::init";
+val_t NEW_ReduceAction624_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction496_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction624_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction496();
-  INIT_ATTRIBUTES__parser___ReduceAction496(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction624();
+  INIT_ATTRIBUTES__parser___ReduceAction624(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction496(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction624(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction497[55] = {
-  {(bigint) 851 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction625[55] = {
+  {(bigint) 675 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction497" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction497 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction497 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 851 /* 5: ReduceAction497 < ReduceAction497: superclass typecheck marker */},
+  {(bigint) "ReduceAction625" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction625 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction625 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 675 /* 5: ReduceAction625 < ReduceAction625: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -145058,7 +166143,7 @@ const classtable_elt_t VFT_parser___ReduceAction497[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction497 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction625 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -145089,46 +166174,46 @@ const classtable_elt_t VFT_parser___ReduceAction497[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction497 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction497___action},
+  {(bigint) 0 /* 50: ReduceAction625 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction625___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction497 < ReduceAction497: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction625 < ReduceAction625: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction497::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction497[] = "init var of ReduceAction497";
-void INIT_ATTRIBUTES__parser___ReduceAction497(val_t p0){
+/* 2: Attribute ReduceAction625::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction625[] = "init var of ReduceAction625";
+void INIT_ATTRIBUTES__parser___ReduceAction625(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction497;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction625;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction497(void)
+val_t NEW_parser___ReduceAction625(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction497;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction625;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction497[] = "check new ReduceAction497";
-void CHECKNEW_parser___ReduceAction497(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction625[] = "check new ReduceAction625";
+void CHECKNEW_parser___ReduceAction625(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction497;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction625;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -145141,36 +166226,36 @@ void CHECKNEW_parser___ReduceAction497(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction497_parser___ReduceAction___init[] = "new ReduceAction497 parser::ReduceAction::init";
-val_t NEW_ReduceAction497_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction625_parser___ReduceAction___init[] = "new ReduceAction625 parser::ReduceAction::init";
+val_t NEW_ReduceAction625_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction497_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction625_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction497();
-  INIT_ATTRIBUTES__parser___ReduceAction497(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction625();
+  INIT_ATTRIBUTES__parser___ReduceAction625(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction497(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction625(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction498[55] = {
-  {(bigint) 847 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction626[55] = {
+  {(bigint) 671 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction498" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction498 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction498 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 847 /* 5: ReduceAction498 < ReduceAction498: superclass typecheck marker */},
+  {(bigint) "ReduceAction626" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction626 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction626 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 671 /* 5: ReduceAction626 < ReduceAction626: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -145184,7 +166269,7 @@ const classtable_elt_t VFT_parser___ReduceAction498[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction498 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction626 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -145215,46 +166300,46 @@ const classtable_elt_t VFT_parser___ReduceAction498[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction498 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction498___action},
+  {(bigint) 0 /* 50: ReduceAction626 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction626___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction498 < ReduceAction498: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction626 < ReduceAction626: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction498::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction498[] = "init var of ReduceAction498";
-void INIT_ATTRIBUTES__parser___ReduceAction498(val_t p0){
+/* 2: Attribute ReduceAction626::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction626[] = "init var of ReduceAction626";
+void INIT_ATTRIBUTES__parser___ReduceAction626(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction498;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction626;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction498(void)
+val_t NEW_parser___ReduceAction626(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction498;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction626;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction498[] = "check new ReduceAction498";
-void CHECKNEW_parser___ReduceAction498(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction626[] = "check new ReduceAction626";
+void CHECKNEW_parser___ReduceAction626(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction498;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction626;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -145267,36 +166352,36 @@ void CHECKNEW_parser___ReduceAction498(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction498_parser___ReduceAction___init[] = "new ReduceAction498 parser::ReduceAction::init";
-val_t NEW_ReduceAction498_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction626_parser___ReduceAction___init[] = "new ReduceAction626 parser::ReduceAction::init";
+val_t NEW_ReduceAction626_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction498_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction626_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction498();
-  INIT_ATTRIBUTES__parser___ReduceAction498(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction626();
+  INIT_ATTRIBUTES__parser___ReduceAction626(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction498(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction626(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction499[55] = {
-  {(bigint) 843 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction627[55] = {
+  {(bigint) 667 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction499" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction499 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction499 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 843 /* 5: ReduceAction499 < ReduceAction499: superclass typecheck marker */},
+  {(bigint) "ReduceAction627" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction627 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction627 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 667 /* 5: ReduceAction627 < ReduceAction627: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -145310,7 +166395,7 @@ const classtable_elt_t VFT_parser___ReduceAction499[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction499 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction627 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -145341,46 +166426,46 @@ const classtable_elt_t VFT_parser___ReduceAction499[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction499 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction499___action},
+  {(bigint) 0 /* 50: ReduceAction627 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction627___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction499 < ReduceAction499: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction627 < ReduceAction627: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction499::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction499[] = "init var of ReduceAction499";
-void INIT_ATTRIBUTES__parser___ReduceAction499(val_t p0){
+/* 2: Attribute ReduceAction627::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction627[] = "init var of ReduceAction627";
+void INIT_ATTRIBUTES__parser___ReduceAction627(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction499;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction627;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction499(void)
+val_t NEW_parser___ReduceAction627(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction499;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction627;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction499[] = "check new ReduceAction499";
-void CHECKNEW_parser___ReduceAction499(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction627[] = "check new ReduceAction627";
+void CHECKNEW_parser___ReduceAction627(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction499;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction627;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -145393,36 +166478,36 @@ void CHECKNEW_parser___ReduceAction499(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction499_parser___ReduceAction___init[] = "new ReduceAction499 parser::ReduceAction::init";
-val_t NEW_ReduceAction499_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction627_parser___ReduceAction___init[] = "new ReduceAction627 parser::ReduceAction::init";
+val_t NEW_ReduceAction627_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction499_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction627_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction499();
-  INIT_ATTRIBUTES__parser___ReduceAction499(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction627();
+  INIT_ATTRIBUTES__parser___ReduceAction627(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction499(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction627(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction500[55] = {
-  {(bigint) 831 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction628[55] = {
+  {(bigint) 663 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction500" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction500 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction500 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 831 /* 5: ReduceAction500 < ReduceAction500: superclass typecheck marker */},
+  {(bigint) "ReduceAction628" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction628 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction628 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 663 /* 5: ReduceAction628 < ReduceAction628: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -145436,7 +166521,7 @@ const classtable_elt_t VFT_parser___ReduceAction500[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction500 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction628 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -145467,46 +166552,46 @@ const classtable_elt_t VFT_parser___ReduceAction500[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction500 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction500___action},
+  {(bigint) 0 /* 50: ReduceAction628 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction628___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction500 < ReduceAction500: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction628 < ReduceAction628: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction500::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction500[] = "init var of ReduceAction500";
-void INIT_ATTRIBUTES__parser___ReduceAction500(val_t p0){
+/* 2: Attribute ReduceAction628::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction628[] = "init var of ReduceAction628";
+void INIT_ATTRIBUTES__parser___ReduceAction628(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction500;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction628;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction500(void)
+val_t NEW_parser___ReduceAction628(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction500;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction628;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction500[] = "check new ReduceAction500";
-void CHECKNEW_parser___ReduceAction500(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction628[] = "check new ReduceAction628";
+void CHECKNEW_parser___ReduceAction628(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction500;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction628;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -145519,36 +166604,36 @@ void CHECKNEW_parser___ReduceAction500(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction500_parser___ReduceAction___init[] = "new ReduceAction500 parser::ReduceAction::init";
-val_t NEW_ReduceAction500_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction628_parser___ReduceAction___init[] = "new ReduceAction628 parser::ReduceAction::init";
+val_t NEW_ReduceAction628_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction500_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction628_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction500();
-  INIT_ATTRIBUTES__parser___ReduceAction500(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction628();
+  INIT_ATTRIBUTES__parser___ReduceAction628(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction500(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction628(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction502[55] = {
-  {(bigint) 827 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction629[55] = {
+  {(bigint) 659 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction502" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction502 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction502 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 827 /* 5: ReduceAction502 < ReduceAction502: superclass typecheck marker */},
+  {(bigint) "ReduceAction629" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction629 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction629 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 659 /* 5: ReduceAction629 < ReduceAction629: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -145562,7 +166647,7 @@ const classtable_elt_t VFT_parser___ReduceAction502[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction502 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction629 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -145593,46 +166678,46 @@ const classtable_elt_t VFT_parser___ReduceAction502[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction502 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction502___action},
+  {(bigint) 0 /* 50: ReduceAction629 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction629___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction502 < ReduceAction502: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction629 < ReduceAction629: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction502::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction502[] = "init var of ReduceAction502";
-void INIT_ATTRIBUTES__parser___ReduceAction502(val_t p0){
+/* 2: Attribute ReduceAction629::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction629[] = "init var of ReduceAction629";
+void INIT_ATTRIBUTES__parser___ReduceAction629(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction502;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction629;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction502(void)
+val_t NEW_parser___ReduceAction629(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction502;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction629;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction502[] = "check new ReduceAction502";
-void CHECKNEW_parser___ReduceAction502(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction629[] = "check new ReduceAction629";
+void CHECKNEW_parser___ReduceAction629(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction502;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction629;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -145645,36 +166730,36 @@ void CHECKNEW_parser___ReduceAction502(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction502_parser___ReduceAction___init[] = "new ReduceAction502 parser::ReduceAction::init";
-val_t NEW_ReduceAction502_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction629_parser___ReduceAction___init[] = "new ReduceAction629 parser::ReduceAction::init";
+val_t NEW_ReduceAction629_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction502_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction629_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction502();
-  INIT_ATTRIBUTES__parser___ReduceAction502(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction629();
+  INIT_ATTRIBUTES__parser___ReduceAction629(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction502(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction629(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction503[55] = {
-  {(bigint) 823 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction630[55] = {
+  {(bigint) 651 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction503" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction503 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction503 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 823 /* 5: ReduceAction503 < ReduceAction503: superclass typecheck marker */},
+  {(bigint) "ReduceAction630" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction630 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction630 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 651 /* 5: ReduceAction630 < ReduceAction630: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -145688,7 +166773,7 @@ const classtable_elt_t VFT_parser___ReduceAction503[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction503 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction630 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -145719,46 +166804,46 @@ const classtable_elt_t VFT_parser___ReduceAction503[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction503 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction503___action},
+  {(bigint) 0 /* 50: ReduceAction630 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction630___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction503 < ReduceAction503: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction630 < ReduceAction630: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction503::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction503[] = "init var of ReduceAction503";
-void INIT_ATTRIBUTES__parser___ReduceAction503(val_t p0){
+/* 2: Attribute ReduceAction630::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction630[] = "init var of ReduceAction630";
+void INIT_ATTRIBUTES__parser___ReduceAction630(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction503;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction630;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction503(void)
+val_t NEW_parser___ReduceAction630(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction503;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction630;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction503[] = "check new ReduceAction503";
-void CHECKNEW_parser___ReduceAction503(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction630[] = "check new ReduceAction630";
+void CHECKNEW_parser___ReduceAction630(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction503;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction630;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -145771,36 +166856,36 @@ void CHECKNEW_parser___ReduceAction503(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction503_parser___ReduceAction___init[] = "new ReduceAction503 parser::ReduceAction::init";
-val_t NEW_ReduceAction503_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction630_parser___ReduceAction___init[] = "new ReduceAction630 parser::ReduceAction::init";
+val_t NEW_ReduceAction630_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction503_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction630_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction503();
-  INIT_ATTRIBUTES__parser___ReduceAction503(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction630();
+  INIT_ATTRIBUTES__parser___ReduceAction630(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction503(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction630(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction504[55] = {
-  {(bigint) 819 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction631[55] = {
+  {(bigint) 647 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction504" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction504 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction504 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 819 /* 5: ReduceAction504 < ReduceAction504: superclass typecheck marker */},
+  {(bigint) "ReduceAction631" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction631 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction631 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 647 /* 5: ReduceAction631 < ReduceAction631: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -145814,7 +166899,7 @@ const classtable_elt_t VFT_parser___ReduceAction504[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction504 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction631 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -145845,46 +166930,46 @@ const classtable_elt_t VFT_parser___ReduceAction504[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction504 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction504___action},
+  {(bigint) 0 /* 50: ReduceAction631 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction631___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction504 < ReduceAction504: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction631 < ReduceAction631: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction504::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction504[] = "init var of ReduceAction504";
-void INIT_ATTRIBUTES__parser___ReduceAction504(val_t p0){
+/* 2: Attribute ReduceAction631::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction631[] = "init var of ReduceAction631";
+void INIT_ATTRIBUTES__parser___ReduceAction631(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction504;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction631;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction504(void)
+val_t NEW_parser___ReduceAction631(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction504;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction631;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction504[] = "check new ReduceAction504";
-void CHECKNEW_parser___ReduceAction504(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction631[] = "check new ReduceAction631";
+void CHECKNEW_parser___ReduceAction631(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction504;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction631;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -145897,36 +166982,36 @@ void CHECKNEW_parser___ReduceAction504(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction504_parser___ReduceAction___init[] = "new ReduceAction504 parser::ReduceAction::init";
-val_t NEW_ReduceAction504_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction631_parser___ReduceAction___init[] = "new ReduceAction631 parser::ReduceAction::init";
+val_t NEW_ReduceAction631_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction504_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction631_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction504();
-  INIT_ATTRIBUTES__parser___ReduceAction504(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction631();
+  INIT_ATTRIBUTES__parser___ReduceAction631(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction504(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction631(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction505[55] = {
-  {(bigint) 815 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction633[55] = {
+  {(bigint) 643 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction505" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction505 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction505 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 815 /* 5: ReduceAction505 < ReduceAction505: superclass typecheck marker */},
+  {(bigint) "ReduceAction633" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction633 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction633 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 643 /* 5: ReduceAction633 < ReduceAction633: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -145940,7 +167025,7 @@ const classtable_elt_t VFT_parser___ReduceAction505[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction505 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction633 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -145971,46 +167056,46 @@ const classtable_elt_t VFT_parser___ReduceAction505[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction505 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction505___action},
+  {(bigint) 0 /* 50: ReduceAction633 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction633___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction505 < ReduceAction505: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction633 < ReduceAction633: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction505::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction505[] = "init var of ReduceAction505";
-void INIT_ATTRIBUTES__parser___ReduceAction505(val_t p0){
+/* 2: Attribute ReduceAction633::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction633[] = "init var of ReduceAction633";
+void INIT_ATTRIBUTES__parser___ReduceAction633(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction505;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction633;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction505(void)
+val_t NEW_parser___ReduceAction633(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction505;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction633;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction505[] = "check new ReduceAction505";
-void CHECKNEW_parser___ReduceAction505(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction633[] = "check new ReduceAction633";
+void CHECKNEW_parser___ReduceAction633(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction505;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction633;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -146023,36 +167108,36 @@ void CHECKNEW_parser___ReduceAction505(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction505_parser___ReduceAction___init[] = "new ReduceAction505 parser::ReduceAction::init";
-val_t NEW_ReduceAction505_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction633_parser___ReduceAction___init[] = "new ReduceAction633 parser::ReduceAction::init";
+val_t NEW_ReduceAction633_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction505_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction633_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction505();
-  INIT_ATTRIBUTES__parser___ReduceAction505(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction633();
+  INIT_ATTRIBUTES__parser___ReduceAction633(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction505(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction633(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction506[55] = {
-  {(bigint) 811 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction636[55] = {
+  {(bigint) 639 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction506" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction506 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction506 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 811 /* 5: ReduceAction506 < ReduceAction506: superclass typecheck marker */},
+  {(bigint) "ReduceAction636" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction636 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction636 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 639 /* 5: ReduceAction636 < ReduceAction636: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -146066,7 +167151,7 @@ const classtable_elt_t VFT_parser___ReduceAction506[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction506 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction636 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -146097,46 +167182,46 @@ const classtable_elt_t VFT_parser___ReduceAction506[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction506 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction506___action},
+  {(bigint) 0 /* 50: ReduceAction636 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction636___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction506 < ReduceAction506: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction636 < ReduceAction636: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction506::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction506[] = "init var of ReduceAction506";
-void INIT_ATTRIBUTES__parser___ReduceAction506(val_t p0){
+/* 2: Attribute ReduceAction636::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction636[] = "init var of ReduceAction636";
+void INIT_ATTRIBUTES__parser___ReduceAction636(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction506;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction636;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction506(void)
+val_t NEW_parser___ReduceAction636(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction506;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction636;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction506[] = "check new ReduceAction506";
-void CHECKNEW_parser___ReduceAction506(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction636[] = "check new ReduceAction636";
+void CHECKNEW_parser___ReduceAction636(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction506;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction636;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -146149,36 +167234,36 @@ void CHECKNEW_parser___ReduceAction506(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction506_parser___ReduceAction___init[] = "new ReduceAction506 parser::ReduceAction::init";
-val_t NEW_ReduceAction506_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction636_parser___ReduceAction___init[] = "new ReduceAction636 parser::ReduceAction::init";
+val_t NEW_ReduceAction636_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction506_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction636_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction506();
-  INIT_ATTRIBUTES__parser___ReduceAction506(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction636();
+  INIT_ATTRIBUTES__parser___ReduceAction636(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction506(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction636(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction508[55] = {
-  {(bigint) 807 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction637[55] = {
+  {(bigint) 635 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction508" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction508 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction508 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 807 /* 5: ReduceAction508 < ReduceAction508: superclass typecheck marker */},
+  {(bigint) "ReduceAction637" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction637 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction637 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 635 /* 5: ReduceAction637 < ReduceAction637: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -146192,7 +167277,7 @@ const classtable_elt_t VFT_parser___ReduceAction508[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction508 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction637 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -146223,46 +167308,46 @@ const classtable_elt_t VFT_parser___ReduceAction508[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction508 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction508___action},
+  {(bigint) 0 /* 50: ReduceAction637 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction637___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction508 < ReduceAction508: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction637 < ReduceAction637: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction508::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction508[] = "init var of ReduceAction508";
-void INIT_ATTRIBUTES__parser___ReduceAction508(val_t p0){
+/* 2: Attribute ReduceAction637::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction637[] = "init var of ReduceAction637";
+void INIT_ATTRIBUTES__parser___ReduceAction637(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction508;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction637;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction508(void)
+val_t NEW_parser___ReduceAction637(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction508;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction637;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction508[] = "check new ReduceAction508";
-void CHECKNEW_parser___ReduceAction508(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction637[] = "check new ReduceAction637";
+void CHECKNEW_parser___ReduceAction637(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction508;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction637;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -146275,36 +167360,36 @@ void CHECKNEW_parser___ReduceAction508(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction508_parser___ReduceAction___init[] = "new ReduceAction508 parser::ReduceAction::init";
-val_t NEW_ReduceAction508_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction637_parser___ReduceAction___init[] = "new ReduceAction637 parser::ReduceAction::init";
+val_t NEW_ReduceAction637_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction508_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction637_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction508();
-  INIT_ATTRIBUTES__parser___ReduceAction508(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction637();
+  INIT_ATTRIBUTES__parser___ReduceAction637(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction508(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction637(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction511[55] = {
-  {(bigint) 799 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction638[55] = {
+  {(bigint) 631 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction511" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction511 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction511 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 799 /* 5: ReduceAction511 < ReduceAction511: superclass typecheck marker */},
+  {(bigint) "ReduceAction638" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction638 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction638 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 631 /* 5: ReduceAction638 < ReduceAction638: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -146318,7 +167403,7 @@ const classtable_elt_t VFT_parser___ReduceAction511[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction511 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction638 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -146349,46 +167434,46 @@ const classtable_elt_t VFT_parser___ReduceAction511[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction511 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction511___action},
+  {(bigint) 0 /* 50: ReduceAction638 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction638___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction511 < ReduceAction511: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction638 < ReduceAction638: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction511::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction511[] = "init var of ReduceAction511";
-void INIT_ATTRIBUTES__parser___ReduceAction511(val_t p0){
+/* 2: Attribute ReduceAction638::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction638[] = "init var of ReduceAction638";
+void INIT_ATTRIBUTES__parser___ReduceAction638(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction511;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction638;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction511(void)
+val_t NEW_parser___ReduceAction638(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction511;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction638;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction511[] = "check new ReduceAction511";
-void CHECKNEW_parser___ReduceAction511(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction638[] = "check new ReduceAction638";
+void CHECKNEW_parser___ReduceAction638(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction511;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction638;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -146401,36 +167486,36 @@ void CHECKNEW_parser___ReduceAction511(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction511_parser___ReduceAction___init[] = "new ReduceAction511 parser::ReduceAction::init";
-val_t NEW_ReduceAction511_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction638_parser___ReduceAction___init[] = "new ReduceAction638 parser::ReduceAction::init";
+val_t NEW_ReduceAction638_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction511_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction638_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction511();
-  INIT_ATTRIBUTES__parser___ReduceAction511(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction638();
+  INIT_ATTRIBUTES__parser___ReduceAction638(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction511(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction638(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction512[55] = {
-  {(bigint) 795 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction639[55] = {
+  {(bigint) 627 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction512" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction512 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction512 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 795 /* 5: ReduceAction512 < ReduceAction512: superclass typecheck marker */},
+  {(bigint) "ReduceAction639" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction639 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction639 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 627 /* 5: ReduceAction639 < ReduceAction639: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -146444,7 +167529,7 @@ const classtable_elt_t VFT_parser___ReduceAction512[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction512 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction639 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -146475,46 +167560,46 @@ const classtable_elt_t VFT_parser___ReduceAction512[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction512 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction512___action},
+  {(bigint) 0 /* 50: ReduceAction639 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction639___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction512 < ReduceAction512: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction639 < ReduceAction639: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction512::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction512[] = "init var of ReduceAction512";
-void INIT_ATTRIBUTES__parser___ReduceAction512(val_t p0){
+/* 2: Attribute ReduceAction639::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction639[] = "init var of ReduceAction639";
+void INIT_ATTRIBUTES__parser___ReduceAction639(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction512;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction639;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction512(void)
+val_t NEW_parser___ReduceAction639(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction512;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction639;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction512[] = "check new ReduceAction512";
-void CHECKNEW_parser___ReduceAction512(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction639[] = "check new ReduceAction639";
+void CHECKNEW_parser___ReduceAction639(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction512;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction639;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -146527,36 +167612,36 @@ void CHECKNEW_parser___ReduceAction512(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction512_parser___ReduceAction___init[] = "new ReduceAction512 parser::ReduceAction::init";
-val_t NEW_ReduceAction512_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction639_parser___ReduceAction___init[] = "new ReduceAction639 parser::ReduceAction::init";
+val_t NEW_ReduceAction639_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction512_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction639_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction512();
-  INIT_ATTRIBUTES__parser___ReduceAction512(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction639();
+  INIT_ATTRIBUTES__parser___ReduceAction639(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction512(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction639(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction513[55] = {
-  {(bigint) 791 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction640[55] = {
+  {(bigint) 619 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction513" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction513 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction513 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 791 /* 5: ReduceAction513 < ReduceAction513: superclass typecheck marker */},
+  {(bigint) "ReduceAction640" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction640 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction640 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 619 /* 5: ReduceAction640 < ReduceAction640: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -146570,7 +167655,7 @@ const classtable_elt_t VFT_parser___ReduceAction513[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction513 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction640 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -146601,46 +167686,46 @@ const classtable_elt_t VFT_parser___ReduceAction513[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction513 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction513___action},
+  {(bigint) 0 /* 50: ReduceAction640 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction640___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction513 < ReduceAction513: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction640 < ReduceAction640: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction513::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction513[] = "init var of ReduceAction513";
-void INIT_ATTRIBUTES__parser___ReduceAction513(val_t p0){
+/* 2: Attribute ReduceAction640::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction640[] = "init var of ReduceAction640";
+void INIT_ATTRIBUTES__parser___ReduceAction640(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction513;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction640;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction513(void)
+val_t NEW_parser___ReduceAction640(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction513;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction640;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction513[] = "check new ReduceAction513";
-void CHECKNEW_parser___ReduceAction513(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction640[] = "check new ReduceAction640";
+void CHECKNEW_parser___ReduceAction640(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction513;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction640;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -146653,36 +167738,36 @@ void CHECKNEW_parser___ReduceAction513(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction513_parser___ReduceAction___init[] = "new ReduceAction513 parser::ReduceAction::init";
-val_t NEW_ReduceAction513_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction640_parser___ReduceAction___init[] = "new ReduceAction640 parser::ReduceAction::init";
+val_t NEW_ReduceAction640_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction513_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction640_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction513();
-  INIT_ATTRIBUTES__parser___ReduceAction513(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction640();
+  INIT_ATTRIBUTES__parser___ReduceAction640(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction513(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction640(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction514[55] = {
-  {(bigint) 787 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction641[55] = {
+  {(bigint) 615 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction514" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction514 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction514 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 787 /* 5: ReduceAction514 < ReduceAction514: superclass typecheck marker */},
+  {(bigint) "ReduceAction641" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction641 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction641 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 615 /* 5: ReduceAction641 < ReduceAction641: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -146696,7 +167781,7 @@ const classtable_elt_t VFT_parser___ReduceAction514[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction514 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction641 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -146727,46 +167812,46 @@ const classtable_elt_t VFT_parser___ReduceAction514[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction514 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction514___action},
+  {(bigint) 0 /* 50: ReduceAction641 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction641___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction514 < ReduceAction514: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction641 < ReduceAction641: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction514::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction514[] = "init var of ReduceAction514";
-void INIT_ATTRIBUTES__parser___ReduceAction514(val_t p0){
+/* 2: Attribute ReduceAction641::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction641[] = "init var of ReduceAction641";
+void INIT_ATTRIBUTES__parser___ReduceAction641(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction514;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction641;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction514(void)
+val_t NEW_parser___ReduceAction641(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction514;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction641;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction514[] = "check new ReduceAction514";
-void CHECKNEW_parser___ReduceAction514(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction641[] = "check new ReduceAction641";
+void CHECKNEW_parser___ReduceAction641(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction514;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction641;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -146779,36 +167864,36 @@ void CHECKNEW_parser___ReduceAction514(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction514_parser___ReduceAction___init[] = "new ReduceAction514 parser::ReduceAction::init";
-val_t NEW_ReduceAction514_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction641_parser___ReduceAction___init[] = "new ReduceAction641 parser::ReduceAction::init";
+val_t NEW_ReduceAction641_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction514_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction641_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction514();
-  INIT_ATTRIBUTES__parser___ReduceAction514(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction641();
+  INIT_ATTRIBUTES__parser___ReduceAction641(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction514(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction641(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction515[55] = {
-  {(bigint) 783 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction642[55] = {
+  {(bigint) 611 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction515" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction515 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction515 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 783 /* 5: ReduceAction515 < ReduceAction515: superclass typecheck marker */},
+  {(bigint) "ReduceAction642" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction642 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction642 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 611 /* 5: ReduceAction642 < ReduceAction642: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -146822,7 +167907,7 @@ const classtable_elt_t VFT_parser___ReduceAction515[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction515 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction642 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -146853,46 +167938,46 @@ const classtable_elt_t VFT_parser___ReduceAction515[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction515 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction515___action},
+  {(bigint) 0 /* 50: ReduceAction642 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction642___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction515 < ReduceAction515: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction642 < ReduceAction642: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction515::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction515[] = "init var of ReduceAction515";
-void INIT_ATTRIBUTES__parser___ReduceAction515(val_t p0){
+/* 2: Attribute ReduceAction642::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction642[] = "init var of ReduceAction642";
+void INIT_ATTRIBUTES__parser___ReduceAction642(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction515;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction642;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction515(void)
+val_t NEW_parser___ReduceAction642(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction515;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction642;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction515[] = "check new ReduceAction515";
-void CHECKNEW_parser___ReduceAction515(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction642[] = "check new ReduceAction642";
+void CHECKNEW_parser___ReduceAction642(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction515;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction642;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -146905,36 +167990,36 @@ void CHECKNEW_parser___ReduceAction515(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction515_parser___ReduceAction___init[] = "new ReduceAction515 parser::ReduceAction::init";
-val_t NEW_ReduceAction515_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction642_parser___ReduceAction___init[] = "new ReduceAction642 parser::ReduceAction::init";
+val_t NEW_ReduceAction642_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction515_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction642_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction515();
-  INIT_ATTRIBUTES__parser___ReduceAction515(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction642();
+  INIT_ATTRIBUTES__parser___ReduceAction642(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction515(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction642(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction516[55] = {
-  {(bigint) 779 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction643[55] = {
+  {(bigint) 607 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction516" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction516 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction516 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 779 /* 5: ReduceAction516 < ReduceAction516: superclass typecheck marker */},
+  {(bigint) "ReduceAction643" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction643 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction643 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 607 /* 5: ReduceAction643 < ReduceAction643: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -146948,7 +168033,7 @@ const classtable_elt_t VFT_parser___ReduceAction516[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction516 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction643 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -146979,46 +168064,46 @@ const classtable_elt_t VFT_parser___ReduceAction516[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction516 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction516___action},
+  {(bigint) 0 /* 50: ReduceAction643 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction643___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction516 < ReduceAction516: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction643 < ReduceAction643: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction516::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction516[] = "init var of ReduceAction516";
-void INIT_ATTRIBUTES__parser___ReduceAction516(val_t p0){
+/* 2: Attribute ReduceAction643::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction643[] = "init var of ReduceAction643";
+void INIT_ATTRIBUTES__parser___ReduceAction643(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction516;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction643;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction516(void)
+val_t NEW_parser___ReduceAction643(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction516;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction643;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction516[] = "check new ReduceAction516";
-void CHECKNEW_parser___ReduceAction516(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction643[] = "check new ReduceAction643";
+void CHECKNEW_parser___ReduceAction643(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction516;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction643;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -147031,36 +168116,36 @@ void CHECKNEW_parser___ReduceAction516(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction516_parser___ReduceAction___init[] = "new ReduceAction516 parser::ReduceAction::init";
-val_t NEW_ReduceAction516_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction643_parser___ReduceAction___init[] = "new ReduceAction643 parser::ReduceAction::init";
+val_t NEW_ReduceAction643_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction516_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction643_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction516();
-  INIT_ATTRIBUTES__parser___ReduceAction516(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction643();
+  INIT_ATTRIBUTES__parser___ReduceAction643(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction516(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction643(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction517[55] = {
-  {(bigint) 775 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction644[55] = {
+  {(bigint) 603 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction517" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction517 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction517 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 775 /* 5: ReduceAction517 < ReduceAction517: superclass typecheck marker */},
+  {(bigint) "ReduceAction644" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction644 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction644 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 603 /* 5: ReduceAction644 < ReduceAction644: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -147074,7 +168159,7 @@ const classtable_elt_t VFT_parser___ReduceAction517[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction517 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction644 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -147105,46 +168190,46 @@ const classtable_elt_t VFT_parser___ReduceAction517[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction517 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction517___action},
+  {(bigint) 0 /* 50: ReduceAction644 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction644___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction517 < ReduceAction517: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction644 < ReduceAction644: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction517::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction517[] = "init var of ReduceAction517";
-void INIT_ATTRIBUTES__parser___ReduceAction517(val_t p0){
+/* 2: Attribute ReduceAction644::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction644[] = "init var of ReduceAction644";
+void INIT_ATTRIBUTES__parser___ReduceAction644(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction517;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction644;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction517(void)
+val_t NEW_parser___ReduceAction644(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction517;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction644;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction517[] = "check new ReduceAction517";
-void CHECKNEW_parser___ReduceAction517(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction644[] = "check new ReduceAction644";
+void CHECKNEW_parser___ReduceAction644(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction517;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction644;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -147157,36 +168242,36 @@ void CHECKNEW_parser___ReduceAction517(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction517_parser___ReduceAction___init[] = "new ReduceAction517 parser::ReduceAction::init";
-val_t NEW_ReduceAction517_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction644_parser___ReduceAction___init[] = "new ReduceAction644 parser::ReduceAction::init";
+val_t NEW_ReduceAction644_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction517_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction644_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction517();
-  INIT_ATTRIBUTES__parser___ReduceAction517(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction644();
+  INIT_ATTRIBUTES__parser___ReduceAction644(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction517(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction644(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction518[55] = {
-  {(bigint) 771 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction645[55] = {
+  {(bigint) 599 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction518" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction518 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction518 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 771 /* 5: ReduceAction518 < ReduceAction518: superclass typecheck marker */},
+  {(bigint) "ReduceAction645" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction645 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction645 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 599 /* 5: ReduceAction645 < ReduceAction645: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -147200,7 +168285,7 @@ const classtable_elt_t VFT_parser___ReduceAction518[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction518 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction645 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -147231,46 +168316,46 @@ const classtable_elt_t VFT_parser___ReduceAction518[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction518 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction518___action},
+  {(bigint) 0 /* 50: ReduceAction645 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction645___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction518 < ReduceAction518: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction645 < ReduceAction645: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction518::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction518[] = "init var of ReduceAction518";
-void INIT_ATTRIBUTES__parser___ReduceAction518(val_t p0){
+/* 2: Attribute ReduceAction645::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction645[] = "init var of ReduceAction645";
+void INIT_ATTRIBUTES__parser___ReduceAction645(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction518;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction645;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction518(void)
+val_t NEW_parser___ReduceAction645(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction518;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction645;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction518[] = "check new ReduceAction518";
-void CHECKNEW_parser___ReduceAction518(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction645[] = "check new ReduceAction645";
+void CHECKNEW_parser___ReduceAction645(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction518;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction645;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -147283,36 +168368,36 @@ void CHECKNEW_parser___ReduceAction518(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction518_parser___ReduceAction___init[] = "new ReduceAction518 parser::ReduceAction::init";
-val_t NEW_ReduceAction518_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction645_parser___ReduceAction___init[] = "new ReduceAction645 parser::ReduceAction::init";
+val_t NEW_ReduceAction645_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction518_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction645_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction518();
-  INIT_ATTRIBUTES__parser___ReduceAction518(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction645();
+  INIT_ATTRIBUTES__parser___ReduceAction645(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction518(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction645(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction519[55] = {
-  {(bigint) 767 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction646[55] = {
+  {(bigint) 595 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction519" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction519 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction519 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 767 /* 5: ReduceAction519 < ReduceAction519: superclass typecheck marker */},
+  {(bigint) "ReduceAction646" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction646 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction646 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 595 /* 5: ReduceAction646 < ReduceAction646: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -147326,7 +168411,7 @@ const classtable_elt_t VFT_parser___ReduceAction519[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction519 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction646 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -147357,46 +168442,46 @@ const classtable_elt_t VFT_parser___ReduceAction519[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction519 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction519___action},
+  {(bigint) 0 /* 50: ReduceAction646 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction646___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction519 < ReduceAction519: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction646 < ReduceAction646: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction519::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction519[] = "init var of ReduceAction519";
-void INIT_ATTRIBUTES__parser___ReduceAction519(val_t p0){
+/* 2: Attribute ReduceAction646::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction646[] = "init var of ReduceAction646";
+void INIT_ATTRIBUTES__parser___ReduceAction646(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction519;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction646;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction519(void)
+val_t NEW_parser___ReduceAction646(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction519;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction646;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction519[] = "check new ReduceAction519";
-void CHECKNEW_parser___ReduceAction519(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction646[] = "check new ReduceAction646";
+void CHECKNEW_parser___ReduceAction646(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction519;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction646;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -147409,36 +168494,36 @@ void CHECKNEW_parser___ReduceAction519(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction519_parser___ReduceAction___init[] = "new ReduceAction519 parser::ReduceAction::init";
-val_t NEW_ReduceAction519_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction646_parser___ReduceAction___init[] = "new ReduceAction646 parser::ReduceAction::init";
+val_t NEW_ReduceAction646_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction519_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction646_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction519();
-  INIT_ATTRIBUTES__parser___ReduceAction519(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction646();
+  INIT_ATTRIBUTES__parser___ReduceAction646(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction519(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction646(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction520[55] = {
-  {(bigint) 759 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction647[55] = {
+  {(bigint) 591 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction520" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction520 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction520 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 759 /* 5: ReduceAction520 < ReduceAction520: superclass typecheck marker */},
+  {(bigint) "ReduceAction647" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction647 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction647 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 591 /* 5: ReduceAction647 < ReduceAction647: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -147452,7 +168537,7 @@ const classtable_elt_t VFT_parser___ReduceAction520[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction520 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction647 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -147483,46 +168568,46 @@ const classtable_elt_t VFT_parser___ReduceAction520[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction520 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction520___action},
+  {(bigint) 0 /* 50: ReduceAction647 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction647___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction520 < ReduceAction520: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction647 < ReduceAction647: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction520::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction520[] = "init var of ReduceAction520";
-void INIT_ATTRIBUTES__parser___ReduceAction520(val_t p0){
+/* 2: Attribute ReduceAction647::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction647[] = "init var of ReduceAction647";
+void INIT_ATTRIBUTES__parser___ReduceAction647(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction520;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction647;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction520(void)
+val_t NEW_parser___ReduceAction647(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction520;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction647;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction520[] = "check new ReduceAction520";
-void CHECKNEW_parser___ReduceAction520(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction647[] = "check new ReduceAction647";
+void CHECKNEW_parser___ReduceAction647(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction520;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction647;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -147535,36 +168620,36 @@ void CHECKNEW_parser___ReduceAction520(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction520_parser___ReduceAction___init[] = "new ReduceAction520 parser::ReduceAction::init";
-val_t NEW_ReduceAction520_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction647_parser___ReduceAction___init[] = "new ReduceAction647 parser::ReduceAction::init";
+val_t NEW_ReduceAction647_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction520_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction647_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction520();
-  INIT_ATTRIBUTES__parser___ReduceAction520(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction647();
+  INIT_ATTRIBUTES__parser___ReduceAction647(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction520(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction647(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction521[55] = {
-  {(bigint) 755 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction648[55] = {
+  {(bigint) 587 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction521" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction521 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction521 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 755 /* 5: ReduceAction521 < ReduceAction521: superclass typecheck marker */},
+  {(bigint) "ReduceAction648" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction648 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction648 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 587 /* 5: ReduceAction648 < ReduceAction648: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -147578,7 +168663,7 @@ const classtable_elt_t VFT_parser___ReduceAction521[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction521 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction648 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -147609,46 +168694,46 @@ const classtable_elt_t VFT_parser___ReduceAction521[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction521 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction521___action},
+  {(bigint) 0 /* 50: ReduceAction648 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction648___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction521 < ReduceAction521: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction648 < ReduceAction648: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction521::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction521[] = "init var of ReduceAction521";
-void INIT_ATTRIBUTES__parser___ReduceAction521(val_t p0){
+/* 2: Attribute ReduceAction648::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction648[] = "init var of ReduceAction648";
+void INIT_ATTRIBUTES__parser___ReduceAction648(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction521;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction648;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction521(void)
+val_t NEW_parser___ReduceAction648(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction521;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction648;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction521[] = "check new ReduceAction521";
-void CHECKNEW_parser___ReduceAction521(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction648[] = "check new ReduceAction648";
+void CHECKNEW_parser___ReduceAction648(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction521;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction648;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -147661,36 +168746,36 @@ void CHECKNEW_parser___ReduceAction521(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction521_parser___ReduceAction___init[] = "new ReduceAction521 parser::ReduceAction::init";
-val_t NEW_ReduceAction521_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction648_parser___ReduceAction___init[] = "new ReduceAction648 parser::ReduceAction::init";
+val_t NEW_ReduceAction648_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction521_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction648_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction521();
-  INIT_ATTRIBUTES__parser___ReduceAction521(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction648();
+  INIT_ATTRIBUTES__parser___ReduceAction648(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction521(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction648(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction522[55] = {
-  {(bigint) 751 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction649[55] = {
+  {(bigint) 583 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction522" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction522 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction522 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 751 /* 5: ReduceAction522 < ReduceAction522: superclass typecheck marker */},
+  {(bigint) "ReduceAction649" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction649 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction649 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 583 /* 5: ReduceAction649 < ReduceAction649: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -147704,7 +168789,7 @@ const classtable_elt_t VFT_parser___ReduceAction522[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction522 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction649 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -147735,46 +168820,46 @@ const classtable_elt_t VFT_parser___ReduceAction522[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction522 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction522___action},
+  {(bigint) 0 /* 50: ReduceAction649 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction649___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction522 < ReduceAction522: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction649 < ReduceAction649: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction522::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction522[] = "init var of ReduceAction522";
-void INIT_ATTRIBUTES__parser___ReduceAction522(val_t p0){
+/* 2: Attribute ReduceAction649::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction649[] = "init var of ReduceAction649";
+void INIT_ATTRIBUTES__parser___ReduceAction649(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction522;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction649;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction522(void)
+val_t NEW_parser___ReduceAction649(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction522;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction649;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction522[] = "check new ReduceAction522";
-void CHECKNEW_parser___ReduceAction522(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction649[] = "check new ReduceAction649";
+void CHECKNEW_parser___ReduceAction649(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction522;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction649;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -147787,36 +168872,36 @@ void CHECKNEW_parser___ReduceAction522(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction522_parser___ReduceAction___init[] = "new ReduceAction522 parser::ReduceAction::init";
-val_t NEW_ReduceAction522_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction649_parser___ReduceAction___init[] = "new ReduceAction649 parser::ReduceAction::init";
+val_t NEW_ReduceAction649_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction522_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction649_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction522();
-  INIT_ATTRIBUTES__parser___ReduceAction522(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction649();
+  INIT_ATTRIBUTES__parser___ReduceAction649(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction522(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction649(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction523[55] = {
-  {(bigint) 747 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction650[55] = {
+  {(bigint) 575 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction523" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction523 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction523 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 747 /* 5: ReduceAction523 < ReduceAction523: superclass typecheck marker */},
+  {(bigint) "ReduceAction650" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction650 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction650 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 575 /* 5: ReduceAction650 < ReduceAction650: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -147830,7 +168915,7 @@ const classtable_elt_t VFT_parser___ReduceAction523[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction523 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction650 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -147861,46 +168946,46 @@ const classtable_elt_t VFT_parser___ReduceAction523[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction523 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction523___action},
+  {(bigint) 0 /* 50: ReduceAction650 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction650___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction523 < ReduceAction523: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction650 < ReduceAction650: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction523::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction523[] = "init var of ReduceAction523";
-void INIT_ATTRIBUTES__parser___ReduceAction523(val_t p0){
+/* 2: Attribute ReduceAction650::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction650[] = "init var of ReduceAction650";
+void INIT_ATTRIBUTES__parser___ReduceAction650(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction523;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction650;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction523(void)
+val_t NEW_parser___ReduceAction650(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction523;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction650;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction523[] = "check new ReduceAction523";
-void CHECKNEW_parser___ReduceAction523(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction650[] = "check new ReduceAction650";
+void CHECKNEW_parser___ReduceAction650(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction523;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction650;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -147913,36 +168998,36 @@ void CHECKNEW_parser___ReduceAction523(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction523_parser___ReduceAction___init[] = "new ReduceAction523 parser::ReduceAction::init";
-val_t NEW_ReduceAction523_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction650_parser___ReduceAction___init[] = "new ReduceAction650 parser::ReduceAction::init";
+val_t NEW_ReduceAction650_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction523_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction650_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction523();
-  INIT_ATTRIBUTES__parser___ReduceAction523(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction650();
+  INIT_ATTRIBUTES__parser___ReduceAction650(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction523(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction650(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction524[55] = {
-  {(bigint) 743 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction651[55] = {
+  {(bigint) 571 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction524" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction524 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction524 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 743 /* 5: ReduceAction524 < ReduceAction524: superclass typecheck marker */},
+  {(bigint) "ReduceAction651" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction651 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction651 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 571 /* 5: ReduceAction651 < ReduceAction651: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -147956,7 +169041,7 @@ const classtable_elt_t VFT_parser___ReduceAction524[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction524 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction651 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -147987,46 +169072,46 @@ const classtable_elt_t VFT_parser___ReduceAction524[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction524 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction524___action},
+  {(bigint) 0 /* 50: ReduceAction651 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction651___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction524 < ReduceAction524: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction651 < ReduceAction651: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction524::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction524[] = "init var of ReduceAction524";
-void INIT_ATTRIBUTES__parser___ReduceAction524(val_t p0){
+/* 2: Attribute ReduceAction651::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction651[] = "init var of ReduceAction651";
+void INIT_ATTRIBUTES__parser___ReduceAction651(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction524;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction651;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction524(void)
+val_t NEW_parser___ReduceAction651(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction524;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction651;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction524[] = "check new ReduceAction524";
-void CHECKNEW_parser___ReduceAction524(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction651[] = "check new ReduceAction651";
+void CHECKNEW_parser___ReduceAction651(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction524;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction651;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -148039,36 +169124,36 @@ void CHECKNEW_parser___ReduceAction524(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction524_parser___ReduceAction___init[] = "new ReduceAction524 parser::ReduceAction::init";
-val_t NEW_ReduceAction524_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction651_parser___ReduceAction___init[] = "new ReduceAction651 parser::ReduceAction::init";
+val_t NEW_ReduceAction651_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction524_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction651_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction524();
-  INIT_ATTRIBUTES__parser___ReduceAction524(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction651();
+  INIT_ATTRIBUTES__parser___ReduceAction651(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction524(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction651(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction525[55] = {
-  {(bigint) 739 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction653[55] = {
+  {(bigint) 567 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction525" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction525 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction525 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 739 /* 5: ReduceAction525 < ReduceAction525: superclass typecheck marker */},
+  {(bigint) "ReduceAction653" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction653 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction653 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 567 /* 5: ReduceAction653 < ReduceAction653: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -148082,7 +169167,7 @@ const classtable_elt_t VFT_parser___ReduceAction525[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction525 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction653 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -148113,46 +169198,46 @@ const classtable_elt_t VFT_parser___ReduceAction525[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction525 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction525___action},
+  {(bigint) 0 /* 50: ReduceAction653 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction653___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction525 < ReduceAction525: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction653 < ReduceAction653: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction525::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction525[] = "init var of ReduceAction525";
-void INIT_ATTRIBUTES__parser___ReduceAction525(val_t p0){
+/* 2: Attribute ReduceAction653::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction653[] = "init var of ReduceAction653";
+void INIT_ATTRIBUTES__parser___ReduceAction653(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction525;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction653;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction525(void)
+val_t NEW_parser___ReduceAction653(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction525;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction653;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction525[] = "check new ReduceAction525";
-void CHECKNEW_parser___ReduceAction525(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction653[] = "check new ReduceAction653";
+void CHECKNEW_parser___ReduceAction653(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction525;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction653;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -148165,36 +169250,36 @@ void CHECKNEW_parser___ReduceAction525(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction525_parser___ReduceAction___init[] = "new ReduceAction525 parser::ReduceAction::init";
-val_t NEW_ReduceAction525_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction653_parser___ReduceAction___init[] = "new ReduceAction653 parser::ReduceAction::init";
+val_t NEW_ReduceAction653_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction525_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction653_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction525();
-  INIT_ATTRIBUTES__parser___ReduceAction525(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction653();
+  INIT_ATTRIBUTES__parser___ReduceAction653(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction525(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction653(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction526[55] = {
-  {(bigint) 735 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction654[55] = {
+  {(bigint) 563 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction526" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction526 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction526 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 735 /* 5: ReduceAction526 < ReduceAction526: superclass typecheck marker */},
+  {(bigint) "ReduceAction654" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction654 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction654 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 563 /* 5: ReduceAction654 < ReduceAction654: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -148208,7 +169293,7 @@ const classtable_elt_t VFT_parser___ReduceAction526[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction526 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction654 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -148239,46 +169324,46 @@ const classtable_elt_t VFT_parser___ReduceAction526[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction526 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction526___action},
+  {(bigint) 0 /* 50: ReduceAction654 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction654___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction526 < ReduceAction526: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction654 < ReduceAction654: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction526::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction526[] = "init var of ReduceAction526";
-void INIT_ATTRIBUTES__parser___ReduceAction526(val_t p0){
+/* 2: Attribute ReduceAction654::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction654[] = "init var of ReduceAction654";
+void INIT_ATTRIBUTES__parser___ReduceAction654(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction526;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction654;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction526(void)
+val_t NEW_parser___ReduceAction654(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction526;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction654;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction526[] = "check new ReduceAction526";
-void CHECKNEW_parser___ReduceAction526(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction654[] = "check new ReduceAction654";
+void CHECKNEW_parser___ReduceAction654(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction526;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction654;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -148291,36 +169376,36 @@ void CHECKNEW_parser___ReduceAction526(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction526_parser___ReduceAction___init[] = "new ReduceAction526 parser::ReduceAction::init";
-val_t NEW_ReduceAction526_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction654_parser___ReduceAction___init[] = "new ReduceAction654 parser::ReduceAction::init";
+val_t NEW_ReduceAction654_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction526_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction654_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction526();
-  INIT_ATTRIBUTES__parser___ReduceAction526(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction654();
+  INIT_ATTRIBUTES__parser___ReduceAction654(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction526(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction654(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction528[55] = {
-  {(bigint) 731 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction656[55] = {
+  {(bigint) 559 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction528" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction528 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction528 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 731 /* 5: ReduceAction528 < ReduceAction528: superclass typecheck marker */},
+  {(bigint) "ReduceAction656" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction656 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction656 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 559 /* 5: ReduceAction656 < ReduceAction656: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -148334,7 +169419,7 @@ const classtable_elt_t VFT_parser___ReduceAction528[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction528 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction656 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -148365,46 +169450,46 @@ const classtable_elt_t VFT_parser___ReduceAction528[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction528 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction528___action},
+  {(bigint) 0 /* 50: ReduceAction656 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction656___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction528 < ReduceAction528: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction656 < ReduceAction656: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction528::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction528[] = "init var of ReduceAction528";
-void INIT_ATTRIBUTES__parser___ReduceAction528(val_t p0){
+/* 2: Attribute ReduceAction656::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction656[] = "init var of ReduceAction656";
+void INIT_ATTRIBUTES__parser___ReduceAction656(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction528;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction656;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction528(void)
+val_t NEW_parser___ReduceAction656(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction528;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction656;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction528[] = "check new ReduceAction528";
-void CHECKNEW_parser___ReduceAction528(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction656[] = "check new ReduceAction656";
+void CHECKNEW_parser___ReduceAction656(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction528;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction656;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -148417,36 +169502,36 @@ void CHECKNEW_parser___ReduceAction528(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction528_parser___ReduceAction___init[] = "new ReduceAction528 parser::ReduceAction::init";
-val_t NEW_ReduceAction528_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction656_parser___ReduceAction___init[] = "new ReduceAction656 parser::ReduceAction::init";
+val_t NEW_ReduceAction656_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction528_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction656_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction528();
-  INIT_ATTRIBUTES__parser___ReduceAction528(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction656();
+  INIT_ATTRIBUTES__parser___ReduceAction656(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction528(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction656(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction529[55] = {
-  {(bigint) 727 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction657[55] = {
+  {(bigint) 555 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction529" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction529 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction529 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 727 /* 5: ReduceAction529 < ReduceAction529: superclass typecheck marker */},
+  {(bigint) "ReduceAction657" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction657 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction657 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 555 /* 5: ReduceAction657 < ReduceAction657: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -148460,7 +169545,7 @@ const classtable_elt_t VFT_parser___ReduceAction529[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction529 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction657 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -148491,46 +169576,46 @@ const classtable_elt_t VFT_parser___ReduceAction529[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction529 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction529___action},
+  {(bigint) 0 /* 50: ReduceAction657 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction657___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction529 < ReduceAction529: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction657 < ReduceAction657: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction529::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction529[] = "init var of ReduceAction529";
-void INIT_ATTRIBUTES__parser___ReduceAction529(val_t p0){
+/* 2: Attribute ReduceAction657::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction657[] = "init var of ReduceAction657";
+void INIT_ATTRIBUTES__parser___ReduceAction657(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction529;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction657;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction529(void)
+val_t NEW_parser___ReduceAction657(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction529;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction657;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction529[] = "check new ReduceAction529";
-void CHECKNEW_parser___ReduceAction529(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction657[] = "check new ReduceAction657";
+void CHECKNEW_parser___ReduceAction657(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction529;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction657;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -148543,36 +169628,36 @@ void CHECKNEW_parser___ReduceAction529(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction529_parser___ReduceAction___init[] = "new ReduceAction529 parser::ReduceAction::init";
-val_t NEW_ReduceAction529_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction657_parser___ReduceAction___init[] = "new ReduceAction657 parser::ReduceAction::init";
+val_t NEW_ReduceAction657_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction529_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction657_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction529();
-  INIT_ATTRIBUTES__parser___ReduceAction529(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction657();
+  INIT_ATTRIBUTES__parser___ReduceAction657(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction529(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction657(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction531[55] = {
-  {(bigint) 719 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction658[55] = {
+  {(bigint) 551 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction531" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction531 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction531 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 719 /* 5: ReduceAction531 < ReduceAction531: superclass typecheck marker */},
+  {(bigint) "ReduceAction658" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction658 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction658 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 551 /* 5: ReduceAction658 < ReduceAction658: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -148586,7 +169671,7 @@ const classtable_elt_t VFT_parser___ReduceAction531[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction531 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction658 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -148617,46 +169702,46 @@ const classtable_elt_t VFT_parser___ReduceAction531[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction531 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction531___action},
+  {(bigint) 0 /* 50: ReduceAction658 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction658___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction531 < ReduceAction531: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction658 < ReduceAction658: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction531::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction531[] = "init var of ReduceAction531";
-void INIT_ATTRIBUTES__parser___ReduceAction531(val_t p0){
+/* 2: Attribute ReduceAction658::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction658[] = "init var of ReduceAction658";
+void INIT_ATTRIBUTES__parser___ReduceAction658(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction531;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction658;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction531(void)
+val_t NEW_parser___ReduceAction658(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction531;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction658;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction531[] = "check new ReduceAction531";
-void CHECKNEW_parser___ReduceAction531(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction658[] = "check new ReduceAction658";
+void CHECKNEW_parser___ReduceAction658(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction531;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction658;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -148669,36 +169754,36 @@ void CHECKNEW_parser___ReduceAction531(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction531_parser___ReduceAction___init[] = "new ReduceAction531 parser::ReduceAction::init";
-val_t NEW_ReduceAction531_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction658_parser___ReduceAction___init[] = "new ReduceAction658 parser::ReduceAction::init";
+val_t NEW_ReduceAction658_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction531_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction658_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction531();
-  INIT_ATTRIBUTES__parser___ReduceAction531(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction658();
+  INIT_ATTRIBUTES__parser___ReduceAction658(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction531(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction658(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction532[55] = {
-  {(bigint) 715 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction659[55] = {
+  {(bigint) 547 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction532" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction532 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction532 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 715 /* 5: ReduceAction532 < ReduceAction532: superclass typecheck marker */},
+  {(bigint) "ReduceAction659" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction659 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction659 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 547 /* 5: ReduceAction659 < ReduceAction659: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -148712,7 +169797,7 @@ const classtable_elt_t VFT_parser___ReduceAction532[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction532 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction659 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -148743,46 +169828,46 @@ const classtable_elt_t VFT_parser___ReduceAction532[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction532 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction532___action},
+  {(bigint) 0 /* 50: ReduceAction659 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction659___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction532 < ReduceAction532: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction659 < ReduceAction659: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction532::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction532[] = "init var of ReduceAction532";
-void INIT_ATTRIBUTES__parser___ReduceAction532(val_t p0){
+/* 2: Attribute ReduceAction659::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction659[] = "init var of ReduceAction659";
+void INIT_ATTRIBUTES__parser___ReduceAction659(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction532;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction659;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction532(void)
+val_t NEW_parser___ReduceAction659(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction532;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction659;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction532[] = "check new ReduceAction532";
-void CHECKNEW_parser___ReduceAction532(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction659[] = "check new ReduceAction659";
+void CHECKNEW_parser___ReduceAction659(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction532;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction659;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -148795,36 +169880,36 @@ void CHECKNEW_parser___ReduceAction532(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction532_parser___ReduceAction___init[] = "new ReduceAction532 parser::ReduceAction::init";
-val_t NEW_ReduceAction532_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction659_parser___ReduceAction___init[] = "new ReduceAction659 parser::ReduceAction::init";
+val_t NEW_ReduceAction659_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction532_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction659_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction532();
-  INIT_ATTRIBUTES__parser___ReduceAction532(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction659();
+  INIT_ATTRIBUTES__parser___ReduceAction659(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction532(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction659(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction533[55] = {
-  {(bigint) 711 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction931[55] = {
+  {(bigint) 423 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction533" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction533 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction533 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 711 /* 5: ReduceAction533 < ReduceAction533: superclass typecheck marker */},
+  {(bigint) "ReduceAction931" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction931 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction931 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 423 /* 5: ReduceAction931 < ReduceAction931: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -148838,7 +169923,7 @@ const classtable_elt_t VFT_parser___ReduceAction533[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction533 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction931 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -148869,46 +169954,46 @@ const classtable_elt_t VFT_parser___ReduceAction533[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction533 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction533___action},
+  {(bigint) 0 /* 50: ReduceAction931 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction931___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction533 < ReduceAction533: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction931 < ReduceAction931: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction533::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction533[] = "init var of ReduceAction533";
-void INIT_ATTRIBUTES__parser___ReduceAction533(val_t p0){
+/* 2: Attribute ReduceAction931::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction931[] = "init var of ReduceAction931";
+void INIT_ATTRIBUTES__parser___ReduceAction931(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction533;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction931;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction533(void)
+val_t NEW_parser___ReduceAction931(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction533;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction931;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction533[] = "check new ReduceAction533";
-void CHECKNEW_parser___ReduceAction533(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction931[] = "check new ReduceAction931";
+void CHECKNEW_parser___ReduceAction931(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction533;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction931;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -148921,36 +170006,36 @@ void CHECKNEW_parser___ReduceAction533(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction533_parser___ReduceAction___init[] = "new ReduceAction533 parser::ReduceAction::init";
-val_t NEW_ReduceAction533_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction931_parser___ReduceAction___init[] = "new ReduceAction931 parser::ReduceAction::init";
+val_t NEW_ReduceAction931_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction533_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction931_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction533();
-  INIT_ATTRIBUTES__parser___ReduceAction533(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction931();
+  INIT_ATTRIBUTES__parser___ReduceAction931(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction533(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction931(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction534[55] = {
-  {(bigint) 707 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction932[55] = {
+  {(bigint) 419 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction534" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction534 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction534 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 707 /* 5: ReduceAction534 < ReduceAction534: superclass typecheck marker */},
+  {(bigint) "ReduceAction932" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction932 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction932 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 419 /* 5: ReduceAction932 < ReduceAction932: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -148964,7 +170049,7 @@ const classtable_elt_t VFT_parser___ReduceAction534[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction534 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction932 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -148995,46 +170080,46 @@ const classtable_elt_t VFT_parser___ReduceAction534[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction534 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction534___action},
+  {(bigint) 0 /* 50: ReduceAction932 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction932___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction534 < ReduceAction534: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction932 < ReduceAction932: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction534::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction534[] = "init var of ReduceAction534";
-void INIT_ATTRIBUTES__parser___ReduceAction534(val_t p0){
+/* 2: Attribute ReduceAction932::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction932[] = "init var of ReduceAction932";
+void INIT_ATTRIBUTES__parser___ReduceAction932(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction534;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction932;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction534(void)
+val_t NEW_parser___ReduceAction932(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction534;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction932;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction534[] = "check new ReduceAction534";
-void CHECKNEW_parser___ReduceAction534(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction932[] = "check new ReduceAction932";
+void CHECKNEW_parser___ReduceAction932(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction534;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction932;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -149047,36 +170132,36 @@ void CHECKNEW_parser___ReduceAction534(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction534_parser___ReduceAction___init[] = "new ReduceAction534 parser::ReduceAction::init";
-val_t NEW_ReduceAction534_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction932_parser___ReduceAction___init[] = "new ReduceAction932 parser::ReduceAction::init";
+val_t NEW_ReduceAction932_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction534_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction932_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction534();
-  INIT_ATTRIBUTES__parser___ReduceAction534(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction932();
+  INIT_ATTRIBUTES__parser___ReduceAction932(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction534(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction932(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction806[55] = {
-  {(bigint) 587 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction933[55] = {
+  {(bigint) 415 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction806" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction806 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction806 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 587 /* 5: ReduceAction806 < ReduceAction806: superclass typecheck marker */},
+  {(bigint) "ReduceAction933" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction933 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction933 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 415 /* 5: ReduceAction933 < ReduceAction933: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -149090,7 +170175,7 @@ const classtable_elt_t VFT_parser___ReduceAction806[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction806 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction933 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -149121,46 +170206,46 @@ const classtable_elt_t VFT_parser___ReduceAction806[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction806 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction806___action},
+  {(bigint) 0 /* 50: ReduceAction933 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction933___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction806 < ReduceAction806: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction933 < ReduceAction933: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction806::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction806[] = "init var of ReduceAction806";
-void INIT_ATTRIBUTES__parser___ReduceAction806(val_t p0){
+/* 2: Attribute ReduceAction933::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction933[] = "init var of ReduceAction933";
+void INIT_ATTRIBUTES__parser___ReduceAction933(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction806;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction933;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction806(void)
+val_t NEW_parser___ReduceAction933(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction806;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction933;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction806[] = "check new ReduceAction806";
-void CHECKNEW_parser___ReduceAction806(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction933[] = "check new ReduceAction933";
+void CHECKNEW_parser___ReduceAction933(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction806;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction933;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -149173,36 +170258,36 @@ void CHECKNEW_parser___ReduceAction806(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction806_parser___ReduceAction___init[] = "new ReduceAction806 parser::ReduceAction::init";
-val_t NEW_ReduceAction806_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction933_parser___ReduceAction___init[] = "new ReduceAction933 parser::ReduceAction::init";
+val_t NEW_ReduceAction933_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction806_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction933_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction806();
-  INIT_ATTRIBUTES__parser___ReduceAction806(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction933();
+  INIT_ATTRIBUTES__parser___ReduceAction933(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction806(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction933(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction807[55] = {
-  {(bigint) 583 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction936[55] = {
+  {(bigint) 411 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction807" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction807 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction807 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 583 /* 5: ReduceAction807 < ReduceAction807: superclass typecheck marker */},
+  {(bigint) "ReduceAction936" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction936 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction936 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 411 /* 5: ReduceAction936 < ReduceAction936: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -149216,7 +170301,7 @@ const classtable_elt_t VFT_parser___ReduceAction807[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction807 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction936 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -149247,46 +170332,46 @@ const classtable_elt_t VFT_parser___ReduceAction807[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction807 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction807___action},
+  {(bigint) 0 /* 50: ReduceAction936 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction936___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction807 < ReduceAction807: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction936 < ReduceAction936: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction807::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction807[] = "init var of ReduceAction807";
-void INIT_ATTRIBUTES__parser___ReduceAction807(val_t p0){
+/* 2: Attribute ReduceAction936::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction936[] = "init var of ReduceAction936";
+void INIT_ATTRIBUTES__parser___ReduceAction936(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction807;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction936;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction807(void)
+val_t NEW_parser___ReduceAction936(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction807;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction936;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction807[] = "check new ReduceAction807";
-void CHECKNEW_parser___ReduceAction807(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction936[] = "check new ReduceAction936";
+void CHECKNEW_parser___ReduceAction936(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction807;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction936;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -149299,36 +170384,36 @@ void CHECKNEW_parser___ReduceAction807(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction807_parser___ReduceAction___init[] = "new ReduceAction807 parser::ReduceAction::init";
-val_t NEW_ReduceAction807_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction936_parser___ReduceAction___init[] = "new ReduceAction936 parser::ReduceAction::init";
+val_t NEW_ReduceAction936_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction807_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction936_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction807();
-  INIT_ATTRIBUTES__parser___ReduceAction807(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction936();
+  INIT_ATTRIBUTES__parser___ReduceAction936(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction807(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction936(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction808[55] = {
-  {(bigint) 579 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction957[55] = {
+  {(bigint) 399 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction808" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction808 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction808 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 579 /* 5: ReduceAction808 < ReduceAction808: superclass typecheck marker */},
+  {(bigint) "ReduceAction957" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction957 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction957 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 399 /* 5: ReduceAction957 < ReduceAction957: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -149342,7 +170427,7 @@ const classtable_elt_t VFT_parser___ReduceAction808[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction808 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction957 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -149373,46 +170458,46 @@ const classtable_elt_t VFT_parser___ReduceAction808[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction808 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction808___action},
+  {(bigint) 0 /* 50: ReduceAction957 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction957___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction808 < ReduceAction808: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction957 < ReduceAction957: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction808::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction808[] = "init var of ReduceAction808";
-void INIT_ATTRIBUTES__parser___ReduceAction808(val_t p0){
+/* 2: Attribute ReduceAction957::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction957[] = "init var of ReduceAction957";
+void INIT_ATTRIBUTES__parser___ReduceAction957(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction808;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction957;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction808(void)
+val_t NEW_parser___ReduceAction957(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction808;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction957;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction808[] = "check new ReduceAction808";
-void CHECKNEW_parser___ReduceAction808(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction957[] = "check new ReduceAction957";
+void CHECKNEW_parser___ReduceAction957(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction808;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction957;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -149425,36 +170510,36 @@ void CHECKNEW_parser___ReduceAction808(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction808_parser___ReduceAction___init[] = "new ReduceAction808 parser::ReduceAction::init";
-val_t NEW_ReduceAction808_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction957_parser___ReduceAction___init[] = "new ReduceAction957 parser::ReduceAction::init";
+val_t NEW_ReduceAction957_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction808_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction957_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction808();
-  INIT_ATTRIBUTES__parser___ReduceAction808(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction957();
+  INIT_ATTRIBUTES__parser___ReduceAction957(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction808(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction957(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction811[55] = {
-  {(bigint) 571 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction958[55] = {
+  {(bigint) 395 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction811" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction811 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction811 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 571 /* 5: ReduceAction811 < ReduceAction811: superclass typecheck marker */},
+  {(bigint) "ReduceAction958" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction958 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction958 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 395 /* 5: ReduceAction958 < ReduceAction958: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -149468,7 +170553,7 @@ const classtable_elt_t VFT_parser___ReduceAction811[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction811 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction958 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -149499,46 +170584,46 @@ const classtable_elt_t VFT_parser___ReduceAction811[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction811 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction811___action},
+  {(bigint) 0 /* 50: ReduceAction958 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction958___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction811 < ReduceAction811: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction958 < ReduceAction958: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction811::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction811[] = "init var of ReduceAction811";
-void INIT_ATTRIBUTES__parser___ReduceAction811(val_t p0){
+/* 2: Attribute ReduceAction958::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction958[] = "init var of ReduceAction958";
+void INIT_ATTRIBUTES__parser___ReduceAction958(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction811;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction958;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction811(void)
+val_t NEW_parser___ReduceAction958(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction811;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction958;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction811[] = "check new ReduceAction811";
-void CHECKNEW_parser___ReduceAction811(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction958[] = "check new ReduceAction958";
+void CHECKNEW_parser___ReduceAction958(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction811;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction958;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -149551,36 +170636,36 @@ void CHECKNEW_parser___ReduceAction811(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction811_parser___ReduceAction___init[] = "new ReduceAction811 parser::ReduceAction::init";
-val_t NEW_ReduceAction811_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction958_parser___ReduceAction___init[] = "new ReduceAction958 parser::ReduceAction::init";
+val_t NEW_ReduceAction958_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction811_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction958_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction811();
-  INIT_ATTRIBUTES__parser___ReduceAction811(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction958();
+  INIT_ATTRIBUTES__parser___ReduceAction958(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction811(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction958(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction824[55] = {
-  {(bigint) 563 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1250[55] = {
+  {(bigint) 2867 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction824" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction824 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction824 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 563 /* 5: ReduceAction824 < ReduceAction824: superclass typecheck marker */},
+  {(bigint) "ReduceAction1250" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1250 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1250 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2867 /* 5: ReduceAction1250 < ReduceAction1250: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -149594,7 +170679,7 @@ const classtable_elt_t VFT_parser___ReduceAction824[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction824 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1250 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -149625,46 +170710,46 @@ const classtable_elt_t VFT_parser___ReduceAction824[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction824 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction824___action},
+  {(bigint) 0 /* 50: ReduceAction1250 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1250___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction824 < ReduceAction824: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1250 < ReduceAction1250: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction824::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction824[] = "init var of ReduceAction824";
-void INIT_ATTRIBUTES__parser___ReduceAction824(val_t p0){
+/* 2: Attribute ReduceAction1250::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1250[] = "init var of ReduceAction1250";
+void INIT_ATTRIBUTES__parser___ReduceAction1250(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction824;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1250;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction824(void)
+val_t NEW_parser___ReduceAction1250(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction824;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1250;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction824[] = "check new ReduceAction824";
-void CHECKNEW_parser___ReduceAction824(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1250[] = "check new ReduceAction1250";
+void CHECKNEW_parser___ReduceAction1250(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction824;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1250;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -149677,36 +170762,36 @@ void CHECKNEW_parser___ReduceAction824(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction824_parser___ReduceAction___init[] = "new ReduceAction824 parser::ReduceAction::init";
-val_t NEW_ReduceAction824_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1250_parser___ReduceAction___init[] = "new ReduceAction1250 parser::ReduceAction::init";
+val_t NEW_ReduceAction1250_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction824_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1250_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction824();
-  INIT_ATTRIBUTES__parser___ReduceAction824(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1250();
+  INIT_ATTRIBUTES__parser___ReduceAction1250(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction824(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1250(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction825[55] = {
-  {(bigint) 559 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1251[55] = {
+  {(bigint) 2863 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction825" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction825 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction825 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 559 /* 5: ReduceAction825 < ReduceAction825: superclass typecheck marker */},
+  {(bigint) "ReduceAction1251" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1251 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1251 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2863 /* 5: ReduceAction1251 < ReduceAction1251: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -149720,7 +170805,7 @@ const classtable_elt_t VFT_parser___ReduceAction825[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction825 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1251 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -149751,46 +170836,46 @@ const classtable_elt_t VFT_parser___ReduceAction825[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction825 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction825___action},
+  {(bigint) 0 /* 50: ReduceAction1251 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1251___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction825 < ReduceAction825: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1251 < ReduceAction1251: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction825::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction825[] = "init var of ReduceAction825";
-void INIT_ATTRIBUTES__parser___ReduceAction825(val_t p0){
+/* 2: Attribute ReduceAction1251::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1251[] = "init var of ReduceAction1251";
+void INIT_ATTRIBUTES__parser___ReduceAction1251(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction825;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1251;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction825(void)
+val_t NEW_parser___ReduceAction1251(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction825;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1251;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction825[] = "check new ReduceAction825";
-void CHECKNEW_parser___ReduceAction825(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1251[] = "check new ReduceAction1251";
+void CHECKNEW_parser___ReduceAction1251(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction825;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1251;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -149803,36 +170888,36 @@ void CHECKNEW_parser___ReduceAction825(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction825_parser___ReduceAction___init[] = "new ReduceAction825 parser::ReduceAction::init";
-val_t NEW_ReduceAction825_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1251_parser___ReduceAction___init[] = "new ReduceAction1251 parser::ReduceAction::init";
+val_t NEW_ReduceAction1251_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction825_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1251_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction825();
-  INIT_ATTRIBUTES__parser___ReduceAction825(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1251();
+  INIT_ATTRIBUTES__parser___ReduceAction1251(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction825(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1251(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction832[55] = {
-  {(bigint) 551 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1252[55] = {
+  {(bigint) 2859 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction832" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction832 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction832 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 551 /* 5: ReduceAction832 < ReduceAction832: superclass typecheck marker */},
+  {(bigint) "ReduceAction1252" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1252 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1252 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2859 /* 5: ReduceAction1252 < ReduceAction1252: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -149846,7 +170931,7 @@ const classtable_elt_t VFT_parser___ReduceAction832[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction832 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1252 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -149877,46 +170962,46 @@ const classtable_elt_t VFT_parser___ReduceAction832[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction832 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction832___action},
+  {(bigint) 0 /* 50: ReduceAction1252 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1252___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction832 < ReduceAction832: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1252 < ReduceAction1252: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction832::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction832[] = "init var of ReduceAction832";
-void INIT_ATTRIBUTES__parser___ReduceAction832(val_t p0){
+/* 2: Attribute ReduceAction1252::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1252[] = "init var of ReduceAction1252";
+void INIT_ATTRIBUTES__parser___ReduceAction1252(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction832;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1252;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction832(void)
+val_t NEW_parser___ReduceAction1252(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction832;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1252;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction832[] = "check new ReduceAction832";
-void CHECKNEW_parser___ReduceAction832(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1252[] = "check new ReduceAction1252";
+void CHECKNEW_parser___ReduceAction1252(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction832;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1252;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -149929,36 +171014,36 @@ void CHECKNEW_parser___ReduceAction832(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction832_parser___ReduceAction___init[] = "new ReduceAction832 parser::ReduceAction::init";
-val_t NEW_ReduceAction832_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1252_parser___ReduceAction___init[] = "new ReduceAction1252 parser::ReduceAction::init";
+val_t NEW_ReduceAction1252_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction832_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1252_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction832();
-  INIT_ATTRIBUTES__parser___ReduceAction832(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1252();
+  INIT_ATTRIBUTES__parser___ReduceAction1252(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction832(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1252(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction833[55] = {
-  {(bigint) 547 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1253[55] = {
+  {(bigint) 2855 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction833" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction833 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction833 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 547 /* 5: ReduceAction833 < ReduceAction833: superclass typecheck marker */},
+  {(bigint) "ReduceAction1253" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1253 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1253 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2855 /* 5: ReduceAction1253 < ReduceAction1253: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -149972,7 +171057,7 @@ const classtable_elt_t VFT_parser___ReduceAction833[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction833 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1253 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -150003,46 +171088,46 @@ const classtable_elt_t VFT_parser___ReduceAction833[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction833 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction833___action},
+  {(bigint) 0 /* 50: ReduceAction1253 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1253___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction833 < ReduceAction833: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1253 < ReduceAction1253: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction833::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction833[] = "init var of ReduceAction833";
-void INIT_ATTRIBUTES__parser___ReduceAction833(val_t p0){
+/* 2: Attribute ReduceAction1253::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1253[] = "init var of ReduceAction1253";
+void INIT_ATTRIBUTES__parser___ReduceAction1253(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction833;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1253;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction833(void)
+val_t NEW_parser___ReduceAction1253(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction833;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1253;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction833[] = "check new ReduceAction833";
-void CHECKNEW_parser___ReduceAction833(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1253[] = "check new ReduceAction1253";
+void CHECKNEW_parser___ReduceAction1253(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction833;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1253;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -150055,36 +171140,36 @@ void CHECKNEW_parser___ReduceAction833(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction833_parser___ReduceAction___init[] = "new ReduceAction833 parser::ReduceAction::init";
-val_t NEW_ReduceAction833_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1253_parser___ReduceAction___init[] = "new ReduceAction1253 parser::ReduceAction::init";
+val_t NEW_ReduceAction1253_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction833_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1253_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction833();
-  INIT_ATTRIBUTES__parser___ReduceAction833(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1253();
+  INIT_ATTRIBUTES__parser___ReduceAction1253(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction833(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1253(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction834[55] = {
-  {(bigint) 543 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1254[55] = {
+  {(bigint) 2851 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction834" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction834 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction834 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 543 /* 5: ReduceAction834 < ReduceAction834: superclass typecheck marker */},
+  {(bigint) "ReduceAction1254" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1254 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1254 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2851 /* 5: ReduceAction1254 < ReduceAction1254: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -150098,7 +171183,7 @@ const classtable_elt_t VFT_parser___ReduceAction834[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction834 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1254 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -150129,46 +171214,46 @@ const classtable_elt_t VFT_parser___ReduceAction834[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction834 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction834___action},
+  {(bigint) 0 /* 50: ReduceAction1254 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1254___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction834 < ReduceAction834: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1254 < ReduceAction1254: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction834::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction834[] = "init var of ReduceAction834";
-void INIT_ATTRIBUTES__parser___ReduceAction834(val_t p0){
+/* 2: Attribute ReduceAction1254::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1254[] = "init var of ReduceAction1254";
+void INIT_ATTRIBUTES__parser___ReduceAction1254(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction834;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1254;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction834(void)
+val_t NEW_parser___ReduceAction1254(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction834;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1254;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction834[] = "check new ReduceAction834";
-void CHECKNEW_parser___ReduceAction834(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1254[] = "check new ReduceAction1254";
+void CHECKNEW_parser___ReduceAction1254(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction834;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1254;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -150181,36 +171266,36 @@ void CHECKNEW_parser___ReduceAction834(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction834_parser___ReduceAction___init[] = "new ReduceAction834 parser::ReduceAction::init";
-val_t NEW_ReduceAction834_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1254_parser___ReduceAction___init[] = "new ReduceAction1254 parser::ReduceAction::init";
+val_t NEW_ReduceAction1254_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction834_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1254_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction834();
-  INIT_ATTRIBUTES__parser___ReduceAction834(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1254();
+  INIT_ATTRIBUTES__parser___ReduceAction1254(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction834(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1254(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction835[55] = {
-  {(bigint) 539 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1255[55] = {
+  {(bigint) 2847 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction835" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction835 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction835 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 539 /* 5: ReduceAction835 < ReduceAction835: superclass typecheck marker */},
+  {(bigint) "ReduceAction1255" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1255 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1255 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2847 /* 5: ReduceAction1255 < ReduceAction1255: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -150224,7 +171309,7 @@ const classtable_elt_t VFT_parser___ReduceAction835[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction835 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1255 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -150255,46 +171340,46 @@ const classtable_elt_t VFT_parser___ReduceAction835[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction835 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction835___action},
+  {(bigint) 0 /* 50: ReduceAction1255 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1255___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction835 < ReduceAction835: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1255 < ReduceAction1255: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction835::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction835[] = "init var of ReduceAction835";
-void INIT_ATTRIBUTES__parser___ReduceAction835(val_t p0){
+/* 2: Attribute ReduceAction1255::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1255[] = "init var of ReduceAction1255";
+void INIT_ATTRIBUTES__parser___ReduceAction1255(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction835;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1255;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction835(void)
+val_t NEW_parser___ReduceAction1255(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction835;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1255;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction835[] = "check new ReduceAction835";
-void CHECKNEW_parser___ReduceAction835(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1255[] = "check new ReduceAction1255";
+void CHECKNEW_parser___ReduceAction1255(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction835;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1255;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -150307,36 +171392,36 @@ void CHECKNEW_parser___ReduceAction835(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction835_parser___ReduceAction___init[] = "new ReduceAction835 parser::ReduceAction::init";
-val_t NEW_ReduceAction835_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1255_parser___ReduceAction___init[] = "new ReduceAction1255 parser::ReduceAction::init";
+val_t NEW_ReduceAction1255_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction835_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1255_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction835();
-  INIT_ATTRIBUTES__parser___ReduceAction835(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1255();
+  INIT_ATTRIBUTES__parser___ReduceAction1255(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction835(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1255(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction836[55] = {
-  {(bigint) 535 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1256[55] = {
+  {(bigint) 2843 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction836" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction836 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction836 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 535 /* 5: ReduceAction836 < ReduceAction836: superclass typecheck marker */},
+  {(bigint) "ReduceAction1256" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1256 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1256 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2843 /* 5: ReduceAction1256 < ReduceAction1256: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -150350,7 +171435,7 @@ const classtable_elt_t VFT_parser___ReduceAction836[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction836 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1256 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -150381,46 +171466,46 @@ const classtable_elt_t VFT_parser___ReduceAction836[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction836 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction836___action},
+  {(bigint) 0 /* 50: ReduceAction1256 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1256___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction836 < ReduceAction836: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1256 < ReduceAction1256: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction836::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction836[] = "init var of ReduceAction836";
-void INIT_ATTRIBUTES__parser___ReduceAction836(val_t p0){
+/* 2: Attribute ReduceAction1256::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1256[] = "init var of ReduceAction1256";
+void INIT_ATTRIBUTES__parser___ReduceAction1256(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction836;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1256;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction836(void)
+val_t NEW_parser___ReduceAction1256(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction836;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1256;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction836[] = "check new ReduceAction836";
-void CHECKNEW_parser___ReduceAction836(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1256[] = "check new ReduceAction1256";
+void CHECKNEW_parser___ReduceAction1256(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction836;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1256;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -150433,36 +171518,36 @@ void CHECKNEW_parser___ReduceAction836(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction836_parser___ReduceAction___init[] = "new ReduceAction836 parser::ReduceAction::init";
-val_t NEW_ReduceAction836_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1256_parser___ReduceAction___init[] = "new ReduceAction1256 parser::ReduceAction::init";
+val_t NEW_ReduceAction1256_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction836_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1256_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction836();
-  INIT_ATTRIBUTES__parser___ReduceAction836(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1256();
+  INIT_ATTRIBUTES__parser___ReduceAction1256(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction836(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1256(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction837[55] = {
-  {(bigint) 531 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1257[55] = {
+  {(bigint) 2839 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction837" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction837 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction837 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 531 /* 5: ReduceAction837 < ReduceAction837: superclass typecheck marker */},
+  {(bigint) "ReduceAction1257" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1257 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1257 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2839 /* 5: ReduceAction1257 < ReduceAction1257: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -150476,7 +171561,7 @@ const classtable_elt_t VFT_parser___ReduceAction837[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction837 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1257 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -150507,46 +171592,46 @@ const classtable_elt_t VFT_parser___ReduceAction837[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction837 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction837___action},
+  {(bigint) 0 /* 50: ReduceAction1257 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1257___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction837 < ReduceAction837: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1257 < ReduceAction1257: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction837::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction837[] = "init var of ReduceAction837";
-void INIT_ATTRIBUTES__parser___ReduceAction837(val_t p0){
+/* 2: Attribute ReduceAction1257::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1257[] = "init var of ReduceAction1257";
+void INIT_ATTRIBUTES__parser___ReduceAction1257(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction837;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1257;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction837(void)
+val_t NEW_parser___ReduceAction1257(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction837;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1257;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction837[] = "check new ReduceAction837";
-void CHECKNEW_parser___ReduceAction837(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1257[] = "check new ReduceAction1257";
+void CHECKNEW_parser___ReduceAction1257(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction837;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1257;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -150559,36 +171644,36 @@ void CHECKNEW_parser___ReduceAction837(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction837_parser___ReduceAction___init[] = "new ReduceAction837 parser::ReduceAction::init";
-val_t NEW_ReduceAction837_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1257_parser___ReduceAction___init[] = "new ReduceAction1257 parser::ReduceAction::init";
+val_t NEW_ReduceAction1257_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction837_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1257_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction837();
-  INIT_ATTRIBUTES__parser___ReduceAction837(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1257();
+  INIT_ATTRIBUTES__parser___ReduceAction1257(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction837(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1257(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction838[55] = {
-  {(bigint) 527 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1258[55] = {
+  {(bigint) 2835 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction838" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction838 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction838 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 527 /* 5: ReduceAction838 < ReduceAction838: superclass typecheck marker */},
+  {(bigint) "ReduceAction1258" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1258 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1258 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2835 /* 5: ReduceAction1258 < ReduceAction1258: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -150602,7 +171687,7 @@ const classtable_elt_t VFT_parser___ReduceAction838[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction838 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1258 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -150633,46 +171718,46 @@ const classtable_elt_t VFT_parser___ReduceAction838[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction838 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction838___action},
+  {(bigint) 0 /* 50: ReduceAction1258 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1258___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction838 < ReduceAction838: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1258 < ReduceAction1258: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction838::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction838[] = "init var of ReduceAction838";
-void INIT_ATTRIBUTES__parser___ReduceAction838(val_t p0){
+/* 2: Attribute ReduceAction1258::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1258[] = "init var of ReduceAction1258";
+void INIT_ATTRIBUTES__parser___ReduceAction1258(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction838;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1258;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction838(void)
+val_t NEW_parser___ReduceAction1258(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction838;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1258;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction838[] = "check new ReduceAction838";
-void CHECKNEW_parser___ReduceAction838(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1258[] = "check new ReduceAction1258";
+void CHECKNEW_parser___ReduceAction1258(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction838;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1258;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -150685,36 +171770,36 @@ void CHECKNEW_parser___ReduceAction838(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction838_parser___ReduceAction___init[] = "new ReduceAction838 parser::ReduceAction::init";
-val_t NEW_ReduceAction838_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1258_parser___ReduceAction___init[] = "new ReduceAction1258 parser::ReduceAction::init";
+val_t NEW_ReduceAction1258_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction838_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1258_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction838();
-  INIT_ATTRIBUTES__parser___ReduceAction838(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1258();
+  INIT_ATTRIBUTES__parser___ReduceAction1258(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction838(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1258(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction839[55] = {
-  {(bigint) 523 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1259[55] = {
+  {(bigint) 2831 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction839" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction839 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction839 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 523 /* 5: ReduceAction839 < ReduceAction839: superclass typecheck marker */},
+  {(bigint) "ReduceAction1259" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1259 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1259 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2831 /* 5: ReduceAction1259 < ReduceAction1259: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -150728,7 +171813,7 @@ const classtable_elt_t VFT_parser___ReduceAction839[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction839 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1259 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -150759,46 +171844,46 @@ const classtable_elt_t VFT_parser___ReduceAction839[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction839 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction839___action},
+  {(bigint) 0 /* 50: ReduceAction1259 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1259___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction839 < ReduceAction839: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1259 < ReduceAction1259: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction839::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction839[] = "init var of ReduceAction839";
-void INIT_ATTRIBUTES__parser___ReduceAction839(val_t p0){
+/* 2: Attribute ReduceAction1259::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1259[] = "init var of ReduceAction1259";
+void INIT_ATTRIBUTES__parser___ReduceAction1259(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction839;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1259;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction839(void)
+val_t NEW_parser___ReduceAction1259(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction839;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1259;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction839[] = "check new ReduceAction839";
-void CHECKNEW_parser___ReduceAction839(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1259[] = "check new ReduceAction1259";
+void CHECKNEW_parser___ReduceAction1259(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction839;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1259;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -150811,36 +171896,36 @@ void CHECKNEW_parser___ReduceAction839(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction839_parser___ReduceAction___init[] = "new ReduceAction839 parser::ReduceAction::init";
-val_t NEW_ReduceAction839_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1259_parser___ReduceAction___init[] = "new ReduceAction1259 parser::ReduceAction::init";
+val_t NEW_ReduceAction1259_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction839_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1259_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction839();
-  INIT_ATTRIBUTES__parser___ReduceAction839(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1259();
+  INIT_ATTRIBUTES__parser___ReduceAction1259(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction839(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1259(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction840[55] = {
-  {(bigint) 515 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1262[55] = {
+  {(bigint) 2823 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction840" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction840 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction840 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 515 /* 5: ReduceAction840 < ReduceAction840: superclass typecheck marker */},
+  {(bigint) "ReduceAction1262" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1262 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1262 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2823 /* 5: ReduceAction1262 < ReduceAction1262: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -150854,7 +171939,7 @@ const classtable_elt_t VFT_parser___ReduceAction840[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction840 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1262 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -150885,46 +171970,46 @@ const classtable_elt_t VFT_parser___ReduceAction840[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction840 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction840___action},
+  {(bigint) 0 /* 50: ReduceAction1262 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1262___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction840 < ReduceAction840: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1262 < ReduceAction1262: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction840::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction840[] = "init var of ReduceAction840";
-void INIT_ATTRIBUTES__parser___ReduceAction840(val_t p0){
+/* 2: Attribute ReduceAction1262::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1262[] = "init var of ReduceAction1262";
+void INIT_ATTRIBUTES__parser___ReduceAction1262(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction840;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1262;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction840(void)
+val_t NEW_parser___ReduceAction1262(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction840;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1262;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction840[] = "check new ReduceAction840";
-void CHECKNEW_parser___ReduceAction840(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1262[] = "check new ReduceAction1262";
+void CHECKNEW_parser___ReduceAction1262(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction840;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1262;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -150937,36 +172022,36 @@ void CHECKNEW_parser___ReduceAction840(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction840_parser___ReduceAction___init[] = "new ReduceAction840 parser::ReduceAction::init";
-val_t NEW_ReduceAction840_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1262_parser___ReduceAction___init[] = "new ReduceAction1262 parser::ReduceAction::init";
+val_t NEW_ReduceAction1262_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction840_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1262_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction840();
-  INIT_ATTRIBUTES__parser___ReduceAction840(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1262();
+  INIT_ATTRIBUTES__parser___ReduceAction1262(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction840(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1262(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction841[55] = {
-  {(bigint) 511 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1263[55] = {
+  {(bigint) 2819 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction841" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction841 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction841 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 511 /* 5: ReduceAction841 < ReduceAction841: superclass typecheck marker */},
+  {(bigint) "ReduceAction1263" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1263 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1263 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2819 /* 5: ReduceAction1263 < ReduceAction1263: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -150980,7 +172065,7 @@ const classtable_elt_t VFT_parser___ReduceAction841[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction841 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1263 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -151011,46 +172096,46 @@ const classtable_elt_t VFT_parser___ReduceAction841[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction841 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction841___action},
+  {(bigint) 0 /* 50: ReduceAction1263 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1263___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction841 < ReduceAction841: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1263 < ReduceAction1263: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction841::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction841[] = "init var of ReduceAction841";
-void INIT_ATTRIBUTES__parser___ReduceAction841(val_t p0){
+/* 2: Attribute ReduceAction1263::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1263[] = "init var of ReduceAction1263";
+void INIT_ATTRIBUTES__parser___ReduceAction1263(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction841;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1263;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction841(void)
+val_t NEW_parser___ReduceAction1263(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction841;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1263;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction841[] = "check new ReduceAction841";
-void CHECKNEW_parser___ReduceAction841(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1263[] = "check new ReduceAction1263";
+void CHECKNEW_parser___ReduceAction1263(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction841;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1263;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -151063,36 +172148,36 @@ void CHECKNEW_parser___ReduceAction841(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction841_parser___ReduceAction___init[] = "new ReduceAction841 parser::ReduceAction::init";
-val_t NEW_ReduceAction841_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1263_parser___ReduceAction___init[] = "new ReduceAction1263 parser::ReduceAction::init";
+val_t NEW_ReduceAction1263_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction841_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1263_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction841();
-  INIT_ATTRIBUTES__parser___ReduceAction841(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1263();
+  INIT_ATTRIBUTES__parser___ReduceAction1263(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction841(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1263(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction844[55] = {
-  {(bigint) 507 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1264[55] = {
+  {(bigint) 2815 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction844" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction844 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction844 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 507 /* 5: ReduceAction844 < ReduceAction844: superclass typecheck marker */},
+  {(bigint) "ReduceAction1264" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1264 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1264 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2815 /* 5: ReduceAction1264 < ReduceAction1264: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -151106,7 +172191,7 @@ const classtable_elt_t VFT_parser___ReduceAction844[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction844 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1264 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -151137,46 +172222,46 @@ const classtable_elt_t VFT_parser___ReduceAction844[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction844 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction844___action},
+  {(bigint) 0 /* 50: ReduceAction1264 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1264___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction844 < ReduceAction844: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1264 < ReduceAction1264: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction844::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction844[] = "init var of ReduceAction844";
-void INIT_ATTRIBUTES__parser___ReduceAction844(val_t p0){
+/* 2: Attribute ReduceAction1264::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1264[] = "init var of ReduceAction1264";
+void INIT_ATTRIBUTES__parser___ReduceAction1264(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction844;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1264;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction844(void)
+val_t NEW_parser___ReduceAction1264(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction844;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1264;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction844[] = "check new ReduceAction844";
-void CHECKNEW_parser___ReduceAction844(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1264[] = "check new ReduceAction1264";
+void CHECKNEW_parser___ReduceAction1264(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction844;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1264;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -151189,36 +172274,36 @@ void CHECKNEW_parser___ReduceAction844(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction844_parser___ReduceAction___init[] = "new ReduceAction844 parser::ReduceAction::init";
-val_t NEW_ReduceAction844_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1264_parser___ReduceAction___init[] = "new ReduceAction1264 parser::ReduceAction::init";
+val_t NEW_ReduceAction1264_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction844_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1264_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction844();
-  INIT_ATTRIBUTES__parser___ReduceAction844(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1264();
+  INIT_ATTRIBUTES__parser___ReduceAction1264(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction844(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1264(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction845[55] = {
-  {(bigint) 503 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1265[55] = {
+  {(bigint) 2811 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction845" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction845 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction845 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 503 /* 5: ReduceAction845 < ReduceAction845: superclass typecheck marker */},
+  {(bigint) "ReduceAction1265" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1265 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1265 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2811 /* 5: ReduceAction1265 < ReduceAction1265: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -151232,7 +172317,7 @@ const classtable_elt_t VFT_parser___ReduceAction845[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction845 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1265 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -151263,46 +172348,46 @@ const classtable_elt_t VFT_parser___ReduceAction845[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction845 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction845___action},
+  {(bigint) 0 /* 50: ReduceAction1265 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1265___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction845 < ReduceAction845: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1265 < ReduceAction1265: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction845::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction845[] = "init var of ReduceAction845";
-void INIT_ATTRIBUTES__parser___ReduceAction845(val_t p0){
+/* 2: Attribute ReduceAction1265::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1265[] = "init var of ReduceAction1265";
+void INIT_ATTRIBUTES__parser___ReduceAction1265(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction845;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1265;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction845(void)
+val_t NEW_parser___ReduceAction1265(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction845;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1265;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction845[] = "check new ReduceAction845";
-void CHECKNEW_parser___ReduceAction845(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1265[] = "check new ReduceAction1265";
+void CHECKNEW_parser___ReduceAction1265(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction845;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1265;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -151315,36 +172400,36 @@ void CHECKNEW_parser___ReduceAction845(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction845_parser___ReduceAction___init[] = "new ReduceAction845 parser::ReduceAction::init";
-val_t NEW_ReduceAction845_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1265_parser___ReduceAction___init[] = "new ReduceAction1265 parser::ReduceAction::init";
+val_t NEW_ReduceAction1265_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction845_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1265_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction845();
-  INIT_ATTRIBUTES__parser___ReduceAction845(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1265();
+  INIT_ATTRIBUTES__parser___ReduceAction1265(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction845(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1265(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction846[55] = {
-  {(bigint) 499 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1266[55] = {
+  {(bigint) 2807 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction846" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction846 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction846 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 499 /* 5: ReduceAction846 < ReduceAction846: superclass typecheck marker */},
+  {(bigint) "ReduceAction1266" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1266 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1266 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2807 /* 5: ReduceAction1266 < ReduceAction1266: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -151358,7 +172443,7 @@ const classtable_elt_t VFT_parser___ReduceAction846[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction846 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1266 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -151389,46 +172474,46 @@ const classtable_elt_t VFT_parser___ReduceAction846[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction846 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction846___action},
+  {(bigint) 0 /* 50: ReduceAction1266 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1266___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction846 < ReduceAction846: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1266 < ReduceAction1266: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction846::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction846[] = "init var of ReduceAction846";
-void INIT_ATTRIBUTES__parser___ReduceAction846(val_t p0){
+/* 2: Attribute ReduceAction1266::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1266[] = "init var of ReduceAction1266";
+void INIT_ATTRIBUTES__parser___ReduceAction1266(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction846;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1266;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction846(void)
+val_t NEW_parser___ReduceAction1266(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction846;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1266;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction846[] = "check new ReduceAction846";
-void CHECKNEW_parser___ReduceAction846(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1266[] = "check new ReduceAction1266";
+void CHECKNEW_parser___ReduceAction1266(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction846;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1266;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -151441,36 +172526,36 @@ void CHECKNEW_parser___ReduceAction846(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction846_parser___ReduceAction___init[] = "new ReduceAction846 parser::ReduceAction::init";
-val_t NEW_ReduceAction846_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1266_parser___ReduceAction___init[] = "new ReduceAction1266 parser::ReduceAction::init";
+val_t NEW_ReduceAction1266_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction846_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1266_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction846();
-  INIT_ATTRIBUTES__parser___ReduceAction846(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1266();
+  INIT_ATTRIBUTES__parser___ReduceAction1266(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction846(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1266(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction847[55] = {
-  {(bigint) 495 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1267[55] = {
+  {(bigint) 2803 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction847" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction847 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction847 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 495 /* 5: ReduceAction847 < ReduceAction847: superclass typecheck marker */},
+  {(bigint) "ReduceAction1267" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1267 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1267 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2803 /* 5: ReduceAction1267 < ReduceAction1267: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -151484,7 +172569,7 @@ const classtable_elt_t VFT_parser___ReduceAction847[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction847 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1267 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -151515,46 +172600,46 @@ const classtable_elt_t VFT_parser___ReduceAction847[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction847 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction847___action},
+  {(bigint) 0 /* 50: ReduceAction1267 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1267___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction847 < ReduceAction847: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1267 < ReduceAction1267: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction847::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction847[] = "init var of ReduceAction847";
-void INIT_ATTRIBUTES__parser___ReduceAction847(val_t p0){
+/* 2: Attribute ReduceAction1267::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1267[] = "init var of ReduceAction1267";
+void INIT_ATTRIBUTES__parser___ReduceAction1267(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction847;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1267;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction847(void)
+val_t NEW_parser___ReduceAction1267(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction847;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1267;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction847[] = "check new ReduceAction847";
-void CHECKNEW_parser___ReduceAction847(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1267[] = "check new ReduceAction1267";
+void CHECKNEW_parser___ReduceAction1267(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction847;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1267;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -151567,36 +172652,36 @@ void CHECKNEW_parser___ReduceAction847(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction847_parser___ReduceAction___init[] = "new ReduceAction847 parser::ReduceAction::init";
-val_t NEW_ReduceAction847_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1267_parser___ReduceAction___init[] = "new ReduceAction1267 parser::ReduceAction::init";
+val_t NEW_ReduceAction1267_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction847_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1267_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction847();
-  INIT_ATTRIBUTES__parser___ReduceAction847(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1267();
+  INIT_ATTRIBUTES__parser___ReduceAction1267(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction847(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1267(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction848[55] = {
-  {(bigint) 491 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1268[55] = {
+  {(bigint) 2799 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction848" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction848 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction848 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 491 /* 5: ReduceAction848 < ReduceAction848: superclass typecheck marker */},
+  {(bigint) "ReduceAction1268" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1268 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1268 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2799 /* 5: ReduceAction1268 < ReduceAction1268: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -151610,7 +172695,7 @@ const classtable_elt_t VFT_parser___ReduceAction848[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction848 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1268 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -151641,46 +172726,46 @@ const classtable_elt_t VFT_parser___ReduceAction848[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction848 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction848___action},
+  {(bigint) 0 /* 50: ReduceAction1268 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1268___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction848 < ReduceAction848: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1268 < ReduceAction1268: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction848::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction848[] = "init var of ReduceAction848";
-void INIT_ATTRIBUTES__parser___ReduceAction848(val_t p0){
+/* 2: Attribute ReduceAction1268::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1268[] = "init var of ReduceAction1268";
+void INIT_ATTRIBUTES__parser___ReduceAction1268(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction848;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1268;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction848(void)
+val_t NEW_parser___ReduceAction1268(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction848;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1268;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction848[] = "check new ReduceAction848";
-void CHECKNEW_parser___ReduceAction848(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1268[] = "check new ReduceAction1268";
+void CHECKNEW_parser___ReduceAction1268(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction848;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1268;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -151693,36 +172778,36 @@ void CHECKNEW_parser___ReduceAction848(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction848_parser___ReduceAction___init[] = "new ReduceAction848 parser::ReduceAction::init";
-val_t NEW_ReduceAction848_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1268_parser___ReduceAction___init[] = "new ReduceAction1268 parser::ReduceAction::init";
+val_t NEW_ReduceAction1268_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction848_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1268_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction848();
-  INIT_ATTRIBUTES__parser___ReduceAction848(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1268();
+  INIT_ATTRIBUTES__parser___ReduceAction1268(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction848(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1268(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction849[55] = {
-  {(bigint) 487 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1269[55] = {
+  {(bigint) 2795 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction849" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction849 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction849 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 487 /* 5: ReduceAction849 < ReduceAction849: superclass typecheck marker */},
+  {(bigint) "ReduceAction1269" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1269 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1269 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2795 /* 5: ReduceAction1269 < ReduceAction1269: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -151736,7 +172821,7 @@ const classtable_elt_t VFT_parser___ReduceAction849[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction849 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1269 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -151767,46 +172852,46 @@ const classtable_elt_t VFT_parser___ReduceAction849[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction849 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction849___action},
+  {(bigint) 0 /* 50: ReduceAction1269 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1269___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction849 < ReduceAction849: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1269 < ReduceAction1269: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction849::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction849[] = "init var of ReduceAction849";
-void INIT_ATTRIBUTES__parser___ReduceAction849(val_t p0){
+/* 2: Attribute ReduceAction1269::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1269[] = "init var of ReduceAction1269";
+void INIT_ATTRIBUTES__parser___ReduceAction1269(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction849;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1269;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction849(void)
+val_t NEW_parser___ReduceAction1269(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction849;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1269;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction849[] = "check new ReduceAction849";
-void CHECKNEW_parser___ReduceAction849(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1269[] = "check new ReduceAction1269";
+void CHECKNEW_parser___ReduceAction1269(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction849;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1269;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -151819,36 +172904,36 @@ void CHECKNEW_parser___ReduceAction849(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction849_parser___ReduceAction___init[] = "new ReduceAction849 parser::ReduceAction::init";
-val_t NEW_ReduceAction849_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1269_parser___ReduceAction___init[] = "new ReduceAction1269 parser::ReduceAction::init";
+val_t NEW_ReduceAction1269_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction849_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1269_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction849();
-  INIT_ATTRIBUTES__parser___ReduceAction849(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1269();
+  INIT_ATTRIBUTES__parser___ReduceAction1269(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction849(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1269(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction850[55] = {
-  {(bigint) 479 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1271[55] = {
+  {(bigint) 2787 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction850" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction850 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction850 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 479 /* 5: ReduceAction850 < ReduceAction850: superclass typecheck marker */},
+  {(bigint) "ReduceAction1271" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1271 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1271 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2787 /* 5: ReduceAction1271 < ReduceAction1271: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -151862,7 +172947,7 @@ const classtable_elt_t VFT_parser___ReduceAction850[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction850 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1271 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -151893,46 +172978,46 @@ const classtable_elt_t VFT_parser___ReduceAction850[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction850 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction850___action},
+  {(bigint) 0 /* 50: ReduceAction1271 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1271___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction850 < ReduceAction850: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1271 < ReduceAction1271: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction850::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction850[] = "init var of ReduceAction850";
-void INIT_ATTRIBUTES__parser___ReduceAction850(val_t p0){
+/* 2: Attribute ReduceAction1271::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1271[] = "init var of ReduceAction1271";
+void INIT_ATTRIBUTES__parser___ReduceAction1271(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction850;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1271;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction850(void)
+val_t NEW_parser___ReduceAction1271(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction850;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1271;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction850[] = "check new ReduceAction850";
-void CHECKNEW_parser___ReduceAction850(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1271[] = "check new ReduceAction1271";
+void CHECKNEW_parser___ReduceAction1271(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction850;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1271;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -151945,36 +173030,36 @@ void CHECKNEW_parser___ReduceAction850(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction850_parser___ReduceAction___init[] = "new ReduceAction850 parser::ReduceAction::init";
-val_t NEW_ReduceAction850_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1271_parser___ReduceAction___init[] = "new ReduceAction1271 parser::ReduceAction::init";
+val_t NEW_ReduceAction1271_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction850_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1271_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction850();
-  INIT_ATTRIBUTES__parser___ReduceAction850(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1271();
+  INIT_ATTRIBUTES__parser___ReduceAction1271(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction850(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1271(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction851[55] = {
-  {(bigint) 475 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1272[55] = {
+  {(bigint) 2783 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction851" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction851 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction851 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 475 /* 5: ReduceAction851 < ReduceAction851: superclass typecheck marker */},
+  {(bigint) "ReduceAction1272" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1272 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1272 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2783 /* 5: ReduceAction1272 < ReduceAction1272: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -151988,7 +173073,7 @@ const classtable_elt_t VFT_parser___ReduceAction851[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction851 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1272 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -152019,46 +173104,46 @@ const classtable_elt_t VFT_parser___ReduceAction851[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction851 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction851___action},
+  {(bigint) 0 /* 50: ReduceAction1272 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1272___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction851 < ReduceAction851: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1272 < ReduceAction1272: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction851::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction851[] = "init var of ReduceAction851";
-void INIT_ATTRIBUTES__parser___ReduceAction851(val_t p0){
+/* 2: Attribute ReduceAction1272::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1272[] = "init var of ReduceAction1272";
+void INIT_ATTRIBUTES__parser___ReduceAction1272(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction851;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1272;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction851(void)
+val_t NEW_parser___ReduceAction1272(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction851;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1272;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction851[] = "check new ReduceAction851";
-void CHECKNEW_parser___ReduceAction851(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1272[] = "check new ReduceAction1272";
+void CHECKNEW_parser___ReduceAction1272(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction851;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1272;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -152071,36 +173156,36 @@ void CHECKNEW_parser___ReduceAction851(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction851_parser___ReduceAction___init[] = "new ReduceAction851 parser::ReduceAction::init";
-val_t NEW_ReduceAction851_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1272_parser___ReduceAction___init[] = "new ReduceAction1272 parser::ReduceAction::init";
+val_t NEW_ReduceAction1272_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction851_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1272_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction851();
-  INIT_ATTRIBUTES__parser___ReduceAction851(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1272();
+  INIT_ATTRIBUTES__parser___ReduceAction1272(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction851(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1272(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction853[55] = {
-  {(bigint) 471 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1273[55] = {
+  {(bigint) 2779 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction853" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction853 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction853 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 471 /* 5: ReduceAction853 < ReduceAction853: superclass typecheck marker */},
+  {(bigint) "ReduceAction1273" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1273 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1273 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2779 /* 5: ReduceAction1273 < ReduceAction1273: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -152114,7 +173199,7 @@ const classtable_elt_t VFT_parser___ReduceAction853[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction853 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1273 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -152145,46 +173230,46 @@ const classtable_elt_t VFT_parser___ReduceAction853[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction853 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction853___action},
+  {(bigint) 0 /* 50: ReduceAction1273 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1273___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction853 < ReduceAction853: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1273 < ReduceAction1273: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction853::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction853[] = "init var of ReduceAction853";
-void INIT_ATTRIBUTES__parser___ReduceAction853(val_t p0){
+/* 2: Attribute ReduceAction1273::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1273[] = "init var of ReduceAction1273";
+void INIT_ATTRIBUTES__parser___ReduceAction1273(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction853;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1273;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction853(void)
+val_t NEW_parser___ReduceAction1273(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction853;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1273;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction853[] = "check new ReduceAction853";
-void CHECKNEW_parser___ReduceAction853(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1273[] = "check new ReduceAction1273";
+void CHECKNEW_parser___ReduceAction1273(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction853;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1273;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -152197,36 +173282,36 @@ void CHECKNEW_parser___ReduceAction853(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction853_parser___ReduceAction___init[] = "new ReduceAction853 parser::ReduceAction::init";
-val_t NEW_ReduceAction853_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1273_parser___ReduceAction___init[] = "new ReduceAction1273 parser::ReduceAction::init";
+val_t NEW_ReduceAction1273_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction853_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1273_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction853();
-  INIT_ATTRIBUTES__parser___ReduceAction853(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1273();
+  INIT_ATTRIBUTES__parser___ReduceAction1273(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction853(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1273(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction854[55] = {
-  {(bigint) 467 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1275[55] = {
+  {(bigint) 2775 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction854" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction854 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction854 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 467 /* 5: ReduceAction854 < ReduceAction854: superclass typecheck marker */},
+  {(bigint) "ReduceAction1275" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1275 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1275 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2775 /* 5: ReduceAction1275 < ReduceAction1275: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -152240,7 +173325,7 @@ const classtable_elt_t VFT_parser___ReduceAction854[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction854 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1275 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -152271,46 +173356,46 @@ const classtable_elt_t VFT_parser___ReduceAction854[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction854 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction854___action},
+  {(bigint) 0 /* 50: ReduceAction1275 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1275___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction854 < ReduceAction854: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1275 < ReduceAction1275: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction854::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction854[] = "init var of ReduceAction854";
-void INIT_ATTRIBUTES__parser___ReduceAction854(val_t p0){
+/* 2: Attribute ReduceAction1275::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1275[] = "init var of ReduceAction1275";
+void INIT_ATTRIBUTES__parser___ReduceAction1275(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction854;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1275;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction854(void)
+val_t NEW_parser___ReduceAction1275(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction854;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1275;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction854[] = "check new ReduceAction854";
-void CHECKNEW_parser___ReduceAction854(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1275[] = "check new ReduceAction1275";
+void CHECKNEW_parser___ReduceAction1275(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction854;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1275;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -152323,36 +173408,36 @@ void CHECKNEW_parser___ReduceAction854(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction854_parser___ReduceAction___init[] = "new ReduceAction854 parser::ReduceAction::init";
-val_t NEW_ReduceAction854_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1275_parser___ReduceAction___init[] = "new ReduceAction1275 parser::ReduceAction::init";
+val_t NEW_ReduceAction1275_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction854_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1275_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction854();
-  INIT_ATTRIBUTES__parser___ReduceAction854(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1275();
+  INIT_ATTRIBUTES__parser___ReduceAction1275(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction854(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1275(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction855[55] = {
-  {(bigint) 463 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1277[55] = {
+  {(bigint) 2771 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction855" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction855 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction855 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 463 /* 5: ReduceAction855 < ReduceAction855: superclass typecheck marker */},
+  {(bigint) "ReduceAction1277" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1277 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1277 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2771 /* 5: ReduceAction1277 < ReduceAction1277: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -152366,7 +173451,7 @@ const classtable_elt_t VFT_parser___ReduceAction855[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction855 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1277 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -152397,46 +173482,46 @@ const classtable_elt_t VFT_parser___ReduceAction855[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction855 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction855___action},
+  {(bigint) 0 /* 50: ReduceAction1277 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1277___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction855 < ReduceAction855: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1277 < ReduceAction1277: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction855::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction855[] = "init var of ReduceAction855";
-void INIT_ATTRIBUTES__parser___ReduceAction855(val_t p0){
+/* 2: Attribute ReduceAction1277::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1277[] = "init var of ReduceAction1277";
+void INIT_ATTRIBUTES__parser___ReduceAction1277(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction855;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1277;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction855(void)
+val_t NEW_parser___ReduceAction1277(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction855;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1277;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction855[] = "check new ReduceAction855";
-void CHECKNEW_parser___ReduceAction855(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1277[] = "check new ReduceAction1277";
+void CHECKNEW_parser___ReduceAction1277(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction855;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1277;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -152449,36 +173534,36 @@ void CHECKNEW_parser___ReduceAction855(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction855_parser___ReduceAction___init[] = "new ReduceAction855 parser::ReduceAction::init";
-val_t NEW_ReduceAction855_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1277_parser___ReduceAction___init[] = "new ReduceAction1277 parser::ReduceAction::init";
+val_t NEW_ReduceAction1277_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction855_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1277_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction855();
-  INIT_ATTRIBUTES__parser___ReduceAction855(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1277();
+  INIT_ATTRIBUTES__parser___ReduceAction1277(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction855(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1277(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction857[55] = {
-  {(bigint) 459 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1281[55] = {
+  {(bigint) 2763 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction857" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction857 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction857 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 459 /* 5: ReduceAction857 < ReduceAction857: superclass typecheck marker */},
+  {(bigint) "ReduceAction1281" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1281 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1281 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2763 /* 5: ReduceAction1281 < ReduceAction1281: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -152492,7 +173577,7 @@ const classtable_elt_t VFT_parser___ReduceAction857[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction857 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1281 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -152523,46 +173608,46 @@ const classtable_elt_t VFT_parser___ReduceAction857[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction857 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction857___action},
+  {(bigint) 0 /* 50: ReduceAction1281 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1281___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction857 < ReduceAction857: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1281 < ReduceAction1281: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction857::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction857[] = "init var of ReduceAction857";
-void INIT_ATTRIBUTES__parser___ReduceAction857(val_t p0){
+/* 2: Attribute ReduceAction1281::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1281[] = "init var of ReduceAction1281";
+void INIT_ATTRIBUTES__parser___ReduceAction1281(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction857;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1281;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction857(void)
+val_t NEW_parser___ReduceAction1281(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction857;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1281;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction857[] = "check new ReduceAction857";
-void CHECKNEW_parser___ReduceAction857(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1281[] = "check new ReduceAction1281";
+void CHECKNEW_parser___ReduceAction1281(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction857;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1281;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -152575,36 +173660,36 @@ void CHECKNEW_parser___ReduceAction857(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction857_parser___ReduceAction___init[] = "new ReduceAction857 parser::ReduceAction::init";
-val_t NEW_ReduceAction857_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1281_parser___ReduceAction___init[] = "new ReduceAction1281 parser::ReduceAction::init";
+val_t NEW_ReduceAction1281_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction857_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1281_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction857();
-  INIT_ATTRIBUTES__parser___ReduceAction857(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1281();
+  INIT_ATTRIBUTES__parser___ReduceAction1281(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction857(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1281(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction861[55] = {
-  {(bigint) 451 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1285[55] = {
+  {(bigint) 2759 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction861" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction861 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction861 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 451 /* 5: ReduceAction861 < ReduceAction861: superclass typecheck marker */},
+  {(bigint) "ReduceAction1285" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1285 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1285 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2759 /* 5: ReduceAction1285 < ReduceAction1285: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -152618,7 +173703,7 @@ const classtable_elt_t VFT_parser___ReduceAction861[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction861 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1285 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -152649,46 +173734,46 @@ const classtable_elt_t VFT_parser___ReduceAction861[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction861 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction861___action},
+  {(bigint) 0 /* 50: ReduceAction1285 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1285___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction861 < ReduceAction861: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1285 < ReduceAction1285: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction861::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction861[] = "init var of ReduceAction861";
-void INIT_ATTRIBUTES__parser___ReduceAction861(val_t p0){
+/* 2: Attribute ReduceAction1285::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1285[] = "init var of ReduceAction1285";
+void INIT_ATTRIBUTES__parser___ReduceAction1285(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction861;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1285;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction861(void)
+val_t NEW_parser___ReduceAction1285(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction861;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1285;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction861[] = "check new ReduceAction861";
-void CHECKNEW_parser___ReduceAction861(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1285[] = "check new ReduceAction1285";
+void CHECKNEW_parser___ReduceAction1285(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction861;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1285;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -152701,36 +173786,36 @@ void CHECKNEW_parser___ReduceAction861(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction861_parser___ReduceAction___init[] = "new ReduceAction861 parser::ReduceAction::init";
-val_t NEW_ReduceAction861_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1285_parser___ReduceAction___init[] = "new ReduceAction1285 parser::ReduceAction::init";
+val_t NEW_ReduceAction1285_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction861_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1285_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction861();
-  INIT_ATTRIBUTES__parser___ReduceAction861(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1285();
+  INIT_ATTRIBUTES__parser___ReduceAction1285(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction861(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1285(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction862[55] = {
-  {(bigint) 447 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1286[55] = {
+  {(bigint) 2755 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction862" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction862 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction862 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 447 /* 5: ReduceAction862 < ReduceAction862: superclass typecheck marker */},
+  {(bigint) "ReduceAction1286" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1286 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1286 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2755 /* 5: ReduceAction1286 < ReduceAction1286: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -152744,7 +173829,7 @@ const classtable_elt_t VFT_parser___ReduceAction862[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction862 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1286 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -152775,46 +173860,46 @@ const classtable_elt_t VFT_parser___ReduceAction862[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction862 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction862___action},
+  {(bigint) 0 /* 50: ReduceAction1286 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1286___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction862 < ReduceAction862: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1286 < ReduceAction1286: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction862::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction862[] = "init var of ReduceAction862";
-void INIT_ATTRIBUTES__parser___ReduceAction862(val_t p0){
+/* 2: Attribute ReduceAction1286::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1286[] = "init var of ReduceAction1286";
+void INIT_ATTRIBUTES__parser___ReduceAction1286(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction862;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1286;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction862(void)
+val_t NEW_parser___ReduceAction1286(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction862;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1286;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction862[] = "check new ReduceAction862";
-void CHECKNEW_parser___ReduceAction862(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1286[] = "check new ReduceAction1286";
+void CHECKNEW_parser___ReduceAction1286(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction862;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1286;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -152827,36 +173912,36 @@ void CHECKNEW_parser___ReduceAction862(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction862_parser___ReduceAction___init[] = "new ReduceAction862 parser::ReduceAction::init";
-val_t NEW_ReduceAction862_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1286_parser___ReduceAction___init[] = "new ReduceAction1286 parser::ReduceAction::init";
+val_t NEW_ReduceAction1286_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction862_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1286_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction862();
-  INIT_ATTRIBUTES__parser___ReduceAction862(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1286();
+  INIT_ATTRIBUTES__parser___ReduceAction1286(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction862(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1286(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction863[55] = {
-  {(bigint) 443 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1287[55] = {
+  {(bigint) 2751 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction863" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction863 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction863 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 443 /* 5: ReduceAction863 < ReduceAction863: superclass typecheck marker */},
+  {(bigint) "ReduceAction1287" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1287 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1287 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2751 /* 5: ReduceAction1287 < ReduceAction1287: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -152870,7 +173955,7 @@ const classtable_elt_t VFT_parser___ReduceAction863[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction863 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1287 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -152901,46 +173986,46 @@ const classtable_elt_t VFT_parser___ReduceAction863[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction863 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction863___action},
+  {(bigint) 0 /* 50: ReduceAction1287 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1287___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction863 < ReduceAction863: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1287 < ReduceAction1287: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction863::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction863[] = "init var of ReduceAction863";
-void INIT_ATTRIBUTES__parser___ReduceAction863(val_t p0){
+/* 2: Attribute ReduceAction1287::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1287[] = "init var of ReduceAction1287";
+void INIT_ATTRIBUTES__parser___ReduceAction1287(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction863;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1287;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction863(void)
+val_t NEW_parser___ReduceAction1287(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction863;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1287;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction863[] = "check new ReduceAction863";
-void CHECKNEW_parser___ReduceAction863(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1287[] = "check new ReduceAction1287";
+void CHECKNEW_parser___ReduceAction1287(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction863;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1287;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -152953,36 +174038,36 @@ void CHECKNEW_parser___ReduceAction863(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction863_parser___ReduceAction___init[] = "new ReduceAction863 parser::ReduceAction::init";
-val_t NEW_ReduceAction863_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1287_parser___ReduceAction___init[] = "new ReduceAction1287 parser::ReduceAction::init";
+val_t NEW_ReduceAction1287_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction863_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1287_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction863();
-  INIT_ATTRIBUTES__parser___ReduceAction863(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1287();
+  INIT_ATTRIBUTES__parser___ReduceAction1287(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction863(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1287(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction864[55] = {
-  {(bigint) 439 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1288[55] = {
+  {(bigint) 2747 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction864" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction864 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction864 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 439 /* 5: ReduceAction864 < ReduceAction864: superclass typecheck marker */},
+  {(bigint) "ReduceAction1288" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1288 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1288 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2747 /* 5: ReduceAction1288 < ReduceAction1288: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -152996,7 +174081,7 @@ const classtable_elt_t VFT_parser___ReduceAction864[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction864 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1288 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -153027,46 +174112,46 @@ const classtable_elt_t VFT_parser___ReduceAction864[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction864 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction864___action},
+  {(bigint) 0 /* 50: ReduceAction1288 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1288___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction864 < ReduceAction864: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1288 < ReduceAction1288: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction864::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction864[] = "init var of ReduceAction864";
-void INIT_ATTRIBUTES__parser___ReduceAction864(val_t p0){
+/* 2: Attribute ReduceAction1288::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1288[] = "init var of ReduceAction1288";
+void INIT_ATTRIBUTES__parser___ReduceAction1288(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction864;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1288;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction864(void)
+val_t NEW_parser___ReduceAction1288(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction864;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1288;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction864[] = "check new ReduceAction864";
-void CHECKNEW_parser___ReduceAction864(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1288[] = "check new ReduceAction1288";
+void CHECKNEW_parser___ReduceAction1288(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction864;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1288;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -153079,36 +174164,36 @@ void CHECKNEW_parser___ReduceAction864(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction864_parser___ReduceAction___init[] = "new ReduceAction864 parser::ReduceAction::init";
-val_t NEW_ReduceAction864_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1288_parser___ReduceAction___init[] = "new ReduceAction1288 parser::ReduceAction::init";
+val_t NEW_ReduceAction1288_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction864_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1288_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction864();
-  INIT_ATTRIBUTES__parser___ReduceAction864(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1288();
+  INIT_ATTRIBUTES__parser___ReduceAction1288(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction864(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1288(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_parser___ReduceAction865[55] = {
-  {(bigint) 435 /* 0: Identity */},
+const classtable_elt_t VFT_parser___ReduceAction1289[55] = {
+  {(bigint) 2743 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
-  {(bigint) "ReduceAction865" /* 2: Class Name */},
-  {(bigint) 3 /* 3: ReduceAction865 < Object: superclass typecheck marker */},
-  {(bigint) 67 /* 4: ReduceAction865 < ReduceAction: superclass typecheck marker */},
-  {(bigint) 435 /* 5: ReduceAction865 < ReduceAction865: superclass typecheck marker */},
+  {(bigint) "ReduceAction1289" /* 2: Class Name */},
+  {(bigint) 3 /* 3: ReduceAction1289 < Object: superclass typecheck marker */},
+  {(bigint) 67 /* 4: ReduceAction1289 < ReduceAction: superclass typecheck marker */},
+  {(bigint) 2743 /* 5: ReduceAction1289 < ReduceAction1289: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -153122,7 +174207,7 @@ const classtable_elt_t VFT_parser___ReduceAction865[55] = {
   {0} /* Class Hole :( */,
   {(bigint) nit_version___Object___nit_version},
   {(bigint) standard___time___Object___get_time},
-  {(bigint) 1 /* 19: ReduceAction865 < Object: superclass init_table position */},
+  {(bigint) 1 /* 19: ReduceAction1289 < Object: superclass init_table position */},
   {(bigint) standard___kernel___Object___object_id},
   {(bigint) standard___kernel___Object___is_same_type},
   {(bigint) standard___kernel___Object_____eqeq},
@@ -153153,46 +174238,46 @@ const classtable_elt_t VFT_parser___ReduceAction865[55] = {
   {(bigint) standard___math___Object___srand},
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
-  {(bigint) 0 /* 50: ReduceAction865 < ReduceAction: superclass init_table position */},
-  {(bigint) parser___ReduceAction865___action},
+  {(bigint) 0 /* 50: ReduceAction1289 < ReduceAction: superclass init_table position */},
+  {(bigint) parser___ReduceAction1289___action},
   {(bigint) parser___ReduceAction___concat},
   {(bigint) parser___ReduceAction___init},
-  {(bigint) 2 /* 54: ReduceAction865 < ReduceAction865: superclass init_table position */},
+  {(bigint) 2 /* 54: ReduceAction1289 < ReduceAction1289: superclass init_table position */},
 };
 /* 0: Pointer to the classtable */
 /* 1: Object_id */
-/* 2: Attribute ReduceAction865::_goto */
-static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction865[] = "init var of ReduceAction865";
-void INIT_ATTRIBUTES__parser___ReduceAction865(val_t p0){
+/* 2: Attribute ReduceAction1289::_goto */
+static const char LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1289[] = "init var of ReduceAction1289";
+void INIT_ATTRIBUTES__parser___ReduceAction1289(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction865;
+  fra.me.meth = LOCATE_INIT_ATTRIBUTES__parser___ReduceAction1289;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
 }
-val_t NEW_parser___ReduceAction865(void)
+val_t NEW_parser___ReduceAction1289(void)
 {
   obj_t obj;
   obj = alloc(sizeof(val_t) * 3);
-  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction865;
+  obj->vft = (classtable_elt_t*)VFT_parser___ReduceAction1289;
   obj[1].object_id = object_id_counter;
   object_id_counter = object_id_counter + 1;
   return OBJ2VAL(obj);
 }
-static const char LOCATE_CHECKNEW_parser___ReduceAction865[] = "check new ReduceAction865";
-void CHECKNEW_parser___ReduceAction865(val_t p0){
+static const char LOCATE_CHECKNEW_parser___ReduceAction1289[] = "check new ReduceAction1289";
+void CHECKNEW_parser___ReduceAction1289(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
   fra.me.line = 0;
-  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction865;
+  fra.me.meth = LOCATE_CHECKNEW_parser___ReduceAction1289;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
@@ -153205,36 +174290,36 @@ void CHECKNEW_parser___ReduceAction865(val_t p0){
   }
   stack_frame_head = fra.me.prev;
 }
-static const char LOCATE_NEW_ReduceAction865_parser___ReduceAction___init[] = "new ReduceAction865 parser::ReduceAction::init";
-val_t NEW_ReduceAction865_parser___ReduceAction___init(val_t p0){
+static const char LOCATE_NEW_ReduceAction1289_parser___ReduceAction___init[] = "new ReduceAction1289 parser::ReduceAction::init";
+val_t NEW_ReduceAction1289_parser___ReduceAction___init(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   int init_table[3] = {0, 0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_NEW_ReduceAction865_parser___ReduceAction___init;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_NEW_ReduceAction1289_parser___ReduceAction___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* parser/parser.nit:1140 */
-  fra.me.REG[0] = NEW_parser___ReduceAction865();
-  INIT_ATTRIBUTES__parser___ReduceAction865(fra.me.REG[0]);
+  /* parser/parser.nit:1566 */
+  fra.me.REG[0] = NEW_parser___ReduceAction1289();
+  INIT_ATTRIBUTES__parser___ReduceAction1289(fra.me.REG[0]);
   parser___ReduceAction___init(fra.me.REG[0], REGB0, init_table);
-  CHECKNEW_parser___ReduceAction865(fra.me.REG[0]);
+  CHECKNEW_parser___ReduceAction1289(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_opts___OptionText[70] = {
-  {(bigint) 2539 /* 0: Identity */},
+  {(bigint) 3035 /* 0: Identity */},
   {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "OptionText" /* 2: Class Name */},
   {(bigint) 3 /* 3: OptionText < Object: superclass typecheck marker */},
   {(bigint) 115 /* 4: OptionText < Option: superclass typecheck marker */},
-  {(bigint) 2539 /* 5: OptionText < OptionText: superclass typecheck marker */},
+  {(bigint) 3035 /* 5: OptionText < OptionText: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -153396,12 +174481,12 @@ val_t NEW_OptionText_opts___OptionText___init(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_opts___OptionBool[71] = {
-  {(bigint) 2551 /* 0: Identity */},
+  {(bigint) 3047 /* 0: Identity */},
   {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "OptionBool" /* 2: Class Name */},
   {(bigint) 3 /* 3: OptionBool < Object: superclass typecheck marker */},
   {(bigint) 115 /* 4: OptionBool < Option: superclass typecheck marker */},
-  {(bigint) 2551 /* 5: OptionBool < OptionBool: superclass typecheck marker */},
+  {(bigint) 3047 /* 5: OptionBool < OptionBool: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -153566,12 +174651,12 @@ val_t NEW_OptionBool_opts___OptionBool___init(val_t p0, val_t p1){
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_opts___OptionCount[71] = {
-  {(bigint) 2547 /* 0: Identity */},
+  {(bigint) 3043 /* 0: Identity */},
   {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "OptionCount" /* 2: Class Name */},
   {(bigint) 3 /* 3: OptionCount < Object: superclass typecheck marker */},
   {(bigint) 115 /* 4: OptionCount < Option: superclass typecheck marker */},
-  {(bigint) 2547 /* 5: OptionCount < OptionCount: superclass typecheck marker */},
+  {(bigint) 3043 /* 5: OptionCount < OptionCount: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -153736,13 +174821,13 @@ val_t NEW_OptionCount_opts___OptionCount___init(val_t p0, val_t p1){
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_opts___OptionString[76] = {
-  {(bigint) 2971 /* 0: Identity */},
+  {(bigint) 3471 /* 0: Identity */},
   {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "OptionString" /* 2: Class Name */},
   {(bigint) 3 /* 3: OptionString < Object: superclass typecheck marker */},
   {(bigint) 115 /* 4: OptionString < Option: superclass typecheck marker */},
-  {(bigint) 2543 /* 5: OptionString < OptionParameter: superclass typecheck marker */},
-  {(bigint) 2971 /* 6: OptionString < OptionString: superclass typecheck marker */},
+  {(bigint) 3039 /* 5: OptionString < OptionParameter: superclass typecheck marker */},
+  {(bigint) 3471 /* 6: OptionString < OptionString: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -153788,8 +174873,8 @@ const classtable_elt_t VFT_opts___OptionString[76] = {
   {(bigint) utils___Object___cmangle_table},
   {(bigint) 1 /* 50: OptionString < Option: superclass init_table position */},
   {(bigint) opts___Option___names},
-  {(bigint) 4055 /* 52: VT OptionString::VALUE : id of String */},
-  {(bigint) 8 /* 53: VT OptionString::VALUE : color of String */},
+  {(bigint) 4603 /* 52: VT OptionString::VALUE : id of String */},
+  {(bigint) 9 /* 53: VT OptionString::VALUE : color of String */},
   {(bigint) opts___Option___helptext},
   {(bigint) opts___Option___errors},
   {(bigint) opts___Option___mandatory},
@@ -153859,11 +174944,6 @@ void CHECKNEW_opts___OptionString(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_opts___OptionParameter____parameter_mandatory(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_parameter_mandatory", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_opts___Option____names(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -153889,6 +174969,11 @@ void CHECKNEW_opts___OptionString(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_read", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_opts___OptionParameter____parameter_mandatory(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_parameter_mandatory", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_OptionString_opts___OptionString___init[] = "new OptionString opts::OptionString::init";
@@ -153917,13 +175002,13 @@ val_t NEW_OptionString_opts___OptionString___init(val_t p0, val_t p1){
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_opts___OptionEnum[77] = {
-  {(bigint) 2979 /* 0: Identity */},
+  {(bigint) 3479 /* 0: Identity */},
   {(bigint) 11 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "OptionEnum" /* 2: Class Name */},
   {(bigint) 3 /* 3: OptionEnum < Object: superclass typecheck marker */},
   {(bigint) 115 /* 4: OptionEnum < Option: superclass typecheck marker */},
-  {(bigint) 2543 /* 5: OptionEnum < OptionParameter: superclass typecheck marker */},
-  {(bigint) 2979 /* 6: OptionEnum < OptionEnum: superclass typecheck marker */},
+  {(bigint) 3039 /* 5: OptionEnum < OptionParameter: superclass typecheck marker */},
+  {(bigint) 3479 /* 6: OptionEnum < OptionEnum: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -154042,16 +175127,6 @@ void CHECKNEW_opts___OptionEnum(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_opts___OptionEnum____values(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_values", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_opts___OptionParameter____parameter_mandatory(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_parameter_mandatory", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_opts___Option____names(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -154077,6 +175152,16 @@ void CHECKNEW_opts___OptionEnum(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_read", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_opts___OptionParameter____parameter_mandatory(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_parameter_mandatory", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_opts___OptionEnum____values(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_values", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_OptionEnum_opts___OptionEnum___init[] = "new OptionEnum opts::OptionEnum::init";
@@ -154109,13 +175194,13 @@ val_t NEW_OptionEnum_opts___OptionEnum___init(val_t p0, val_t p1, val_t p2, val_
   return fra.me.REG[3];
 }
 const classtable_elt_t VFT_opts___OptionInt[76] = {
-  {(bigint) 2975 /* 0: Identity */},
+  {(bigint) 3475 /* 0: Identity */},
   {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "OptionInt" /* 2: Class Name */},
   {(bigint) 3 /* 3: OptionInt < Object: superclass typecheck marker */},
   {(bigint) 115 /* 4: OptionInt < Option: superclass typecheck marker */},
-  {(bigint) 2543 /* 5: OptionInt < OptionParameter: superclass typecheck marker */},
-  {(bigint) 2975 /* 6: OptionInt < OptionInt: superclass typecheck marker */},
+  {(bigint) 3039 /* 5: OptionInt < OptionParameter: superclass typecheck marker */},
+  {(bigint) 3475 /* 6: OptionInt < OptionInt: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -154232,11 +175317,6 @@ void CHECKNEW_opts___OptionInt(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_opts___OptionParameter____parameter_mandatory(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_parameter_mandatory", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_opts___Option____names(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -154262,6 +175342,11 @@ void CHECKNEW_opts___OptionInt(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_read", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_opts___OptionParameter____parameter_mandatory(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_parameter_mandatory", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_OptionInt_opts___OptionInt___init[] = "new OptionInt opts::OptionInt::init";
@@ -154292,13 +175377,13 @@ val_t NEW_OptionInt_opts___OptionInt___init(val_t p0, val_t p1, val_t p2){
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_opts___OptionArray[76] = {
-  {(bigint) 2983 /* 0: Identity */},
+  {(bigint) 3483 /* 0: Identity */},
   {(bigint) 11 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "OptionArray" /* 2: Class Name */},
   {(bigint) 3 /* 3: OptionArray < Object: superclass typecheck marker */},
   {(bigint) 115 /* 4: OptionArray < Option: superclass typecheck marker */},
-  {(bigint) 2543 /* 5: OptionArray < OptionParameter: superclass typecheck marker */},
-  {(bigint) 2983 /* 6: OptionArray < OptionArray: superclass typecheck marker */},
+  {(bigint) 3039 /* 5: OptionArray < OptionParameter: superclass typecheck marker */},
+  {(bigint) 3483 /* 6: OptionArray < OptionArray: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -154344,7 +175429,7 @@ const classtable_elt_t VFT_opts___OptionArray[76] = {
   {(bigint) utils___Object___cmangle_table},
   {(bigint) 1 /* 50: OptionArray < Option: superclass init_table position */},
   {(bigint) opts___Option___names},
-  {(bigint) 4271 /* 52: VT OptionArray::VALUE : id of Array */},
+  {(bigint) 4827 /* 52: VT OptionArray::VALUE : id of Array */},
   {(bigint) 4 /* 53: VT OptionArray::VALUE : color of Array */},
   {(bigint) opts___Option___helptext},
   {(bigint) opts___Option___errors},
@@ -154416,16 +175501,6 @@ void CHECKNEW_opts___OptionArray(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_opts___OptionArray____values(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_values", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_opts___OptionParameter____parameter_mandatory(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_parameter_mandatory", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_opts___Option____names(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -154451,6 +175526,16 @@ void CHECKNEW_opts___OptionArray(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_read", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_opts___OptionParameter____parameter_mandatory(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_parameter_mandatory", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_opts___OptionArray____values(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_values", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_OptionArray_opts___OptionArray___init[] = "new OptionArray opts::OptionArray::init";
@@ -154626,15 +175711,15 @@ val_t NEW_OptionContext_opts___OptionContext___init(void){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-const classtable_elt_t VFT_toolcontext___Message[71] = {
-  {(bigint) 2571 /* 0: Identity */},
+const classtable_elt_t VFT_toolcontext___Message[73] = {
+  {(bigint) 3067 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "Message" /* 2: Class Name */},
   {(bigint) 3 /* 3: Message < Object: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 275 /* 5: Message < Comparable: superclass typecheck marker */},
-  {(bigint) 2571 /* 6: Message < Message: superclass typecheck marker */},
   {0} /* Class Hole :( */,
+  {(bigint) 275 /* 6: Message < Comparable: superclass typecheck marker */},
+  {(bigint) 3067 /* 7: Message < Message: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -154682,9 +175767,11 @@ const classtable_elt_t VFT_toolcontext___Message[71] = {
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
-  {(bigint) 0 /* 55: Message < Comparable: superclass init_table position */},
-  {(bigint) 2571 /* 56: VT Message::OTHER : id of Message */},
-  {(bigint) 6 /* 57: VT Message::OTHER : color of Message */},
+  {0} /* Class Hole :( */,
+  {0} /* Class Hole :( */,
+  {(bigint) 0 /* 57: Message < Comparable: superclass init_table position */},
+  {(bigint) 3067 /* 58: VT Message::OTHER : id of Message */},
+  {(bigint) 7 /* 59: VT Message::OTHER : color of Message */},
   {(bigint) toolcontext___Message_____l},
   {(bigint) standard___kernel___Comparable_____leq},
   {(bigint) standard___kernel___Comparable_____geq},
@@ -154693,7 +175780,7 @@ const classtable_elt_t VFT_toolcontext___Message[71] = {
   {(bigint) standard___kernel___Comparable___is_between},
   {(bigint) standard___kernel___Comparable___max},
   {(bigint) standard___kernel___Comparable___min},
-  {(bigint) 2 /* 66: Message < Message: superclass init_table position */},
+  {(bigint) 2 /* 68: Message < Message: superclass init_table position */},
   {(bigint) toolcontext___Message___location},
   {(bigint) toolcontext___Message___text},
   {(bigint) toolcontext___Message___to_color_string},
@@ -154771,14 +175858,14 @@ val_t NEW_Message_toolcontext___Message___init(val_t p0, val_t p1){
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_syntax___syntax_base___MMSrcModule[132] = {
-  {(bigint) 3019 /* 0: Identity */},
+  {(bigint) 3519 /* 0: Identity */},
   {(bigint) 25 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMSrcModule" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMSrcModule < Object: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {(bigint) 259 /* 5: MMSrcModule < FFIVisited: superclass typecheck marker */},
-  {(bigint) 2627 /* 6: MMSrcModule < MMModule: superclass typecheck marker */},
-  {(bigint) 3019 /* 7: MMSrcModule < MMSrcModule: superclass typecheck marker */},
+  {(bigint) 3123 /* 6: MMSrcModule < MMModule: superclass typecheck marker */},
+  {(bigint) 3519 /* 7: MMSrcModule < MMSrcModule: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -154944,23 +176031,9 @@ void INIT_ATTRIBUTES__syntax___syntax_base___MMSrcModule(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/syntax_base.nit:29 */
-  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
-  ATTR_syntax___syntax_base___MMSrcModule____nodes(fra.me.REG[0]) = fra.me.REG[1];
   /* metamodel/abstractmetamodel.nit:131 */
   fra.me.REG[1] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
   ATTR_metamodel___abstractmetamodel___MMModule____global_classes(fra.me.REG[0]) = fra.me.REG[1];
-  /* metamodel/abstractmetamodel.nit:155 */
-  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
-  ATTR_metamodel___abstractmetamodel___MMModule____global_class_by_name(fra.me.REG[0]) = fra.me.REG[1];
-  /* metamodel/abstractmetamodel.nit:152 */
-  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
-  ATTR_metamodel___abstractmetamodel___MMModule____local_class_by_global(fra.me.REG[0]) = fra.me.REG[1];
-  /* metamodel/static_type.nit:534 */
-  fra.me.REG[1] = fra.me.REG[0];
-  /* metamodel/static_type.nit:535 */
-  fra.me.REG[1] = NEW_MMTypeNone_metamodel___static_type___MMTypeNone___init(fra.me.REG[1]);
-  ATTR_metamodel___static_type___MMModule____type_none(fra.me.REG[0]) = fra.me.REG[1];
   /* metamodel/abstractmetamodel.nit:134 */
   fra.me.REG[1] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
   ATTR_metamodel___abstractmetamodel___MMModule____local_classes(fra.me.REG[0]) = fra.me.REG[1];
@@ -154979,9 +176052,20 @@ void INIT_ATTRIBUTES__syntax___syntax_base___MMSrcModule(val_t p0){
   /* metamodel/abstractmetamodel.nit:149 */
   fra.me.REG[1] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
   ATTR_metamodel___abstractmetamodel___MMModule____explicit_imported_modules(fra.me.REG[0]) = fra.me.REG[1];
+  /* metamodel/abstractmetamodel.nit:152 */
+  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
+  ATTR_metamodel___abstractmetamodel___MMModule____local_class_by_global(fra.me.REG[0]) = fra.me.REG[1];
+  /* metamodel/abstractmetamodel.nit:155 */
+  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
+  ATTR_metamodel___abstractmetamodel___MMModule____global_class_by_name(fra.me.REG[0]) = fra.me.REG[1];
   /* metamodel/abstractmetamodel.nit:160 */
   REGB0 = TAG_Bool(0);
   ATTR_metamodel___abstractmetamodel___MMModule_____atis_extern_hybrid(fra.me.REG[0]) = REGB0;
+  /* metamodel/static_type.nit:534 */
+  fra.me.REG[1] = fra.me.REG[0];
+  /* metamodel/static_type.nit:535 */
+  fra.me.REG[1] = NEW_MMTypeNone_metamodel___static_type___MMTypeNone___init(fra.me.REG[1]);
+  ATTR_metamodel___static_type___MMModule____type_none(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/extern_inline.nit:33 */
   fra.me.REG[1] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
   ATTR_syntax___extern_inline___MMModule_____atextern_code_blocks(fra.me.REG[0]) = fra.me.REG[1];
@@ -154991,6 +176075,9 @@ void INIT_ATTRIBUTES__syntax___syntax_base___MMSrcModule(val_t p0){
   /* compiling/table_computation.nit:398 */
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
   ATTR_compiling___table_computation___MMModule____local_table(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/syntax_base.nit:29 */
+  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
+  ATTR_syntax___syntax_base___MMSrcModule____nodes(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_syntax___syntax_base___MMSrcModule(void)
@@ -155016,31 +176103,6 @@ void CHECKNEW_syntax___syntax_base___MMSrcModule(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMSrcModule____src_local_classes(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_src_local_classes", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMModule____global_classes(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_global_classes", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMModule____global_class_by_name(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_global_class_by_name", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMModule____local_class_by_global(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_local_class_by_global", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_metamodel___static_type___MMModule____type_none(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_type_none", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMModule____context(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -155066,6 +176128,11 @@ void CHECKNEW_syntax___syntax_base___MMSrcModule(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_location", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMModule____global_classes(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_global_classes", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMModule____local_classes(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -155096,11 +176163,26 @@ void CHECKNEW_syntax___syntax_base___MMSrcModule(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_explicit_imported_modules", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMModule____local_class_by_global(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_local_class_by_global", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMModule____global_class_by_name(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_global_class_by_name", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMModule_____atis_extern_hybrid(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "@is_extern_hybrid", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_metamodel___static_type___MMModule____type_none(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_type_none", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_syntax___extern_inline___MMModule_____atextern_code_blocks(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -155116,6 +176198,11 @@ void CHECKNEW_syntax___syntax_base___MMSrcModule(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_local_table", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMSrcModule____src_local_classes(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_src_local_classes", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_MMSrcModule_syntax___syntax_base___MMSrcModule___init[] = "new MMSrcModule syntax_base::MMSrcModule::init";
@@ -155150,15 +176237,15 @@ val_t NEW_MMSrcModule_syntax___syntax_base___MMSrcModule___init(val_t p0, val_t
   return fra.me.REG[5];
 }
 const classtable_elt_t VFT_syntax___syntax_base___MMSrcLocalClass[164] = {
-  {(bigint) 3695 /* 0: Identity */},
+  {(bigint) 4207 /* 0: Identity */},
   {(bigint) 33 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMSrcLocalClass" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMSrcLocalClass < Object: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {(bigint) 259 /* 5: MMSrcLocalClass < FFIVisited: superclass typecheck marker */},
-  {(bigint) 2635 /* 6: MMSrcLocalClass < MMLocalClass: superclass typecheck marker */},
-  {(bigint) 3035 /* 7: MMSrcLocalClass < MMConcreteClass: superclass typecheck marker */},
-  {(bigint) 3695 /* 8: MMSrcLocalClass < MMSrcLocalClass: superclass typecheck marker */},
+  {(bigint) 3131 /* 6: MMSrcLocalClass < MMLocalClass: superclass typecheck marker */},
+  {(bigint) 3535 /* 7: MMSrcLocalClass < MMConcreteClass: superclass typecheck marker */},
+  {(bigint) 4207 /* 8: MMSrcLocalClass < MMSrcLocalClass: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -155363,9 +176450,6 @@ void INIT_ATTRIBUTES__syntax___syntax_base___MMSrcLocalClass(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/syntax_base.nit:91 */
-  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
-  ATTR_syntax___syntax_base___MMSrcLocalClass____formal_dict(fra.me.REG[0]) = fra.me.REG[1];
   /* metamodel/abstractmetamodel.nit:365 */
   fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
   ATTR_metamodel___abstractmetamodel___MMLocalClass____local_property_by_global(fra.me.REG[0]) = fra.me.REG[1];
@@ -155378,12 +176462,6 @@ void INIT_ATTRIBUTES__syntax___syntax_base___MMSrcLocalClass(val_t p0){
   /* metamodel/abstractmetamodel.nit:374 */
   fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
   ATTR_metamodel___abstractmetamodel___MMLocalClass____properties_by_name(fra.me.REG[0]) = fra.me.REG[1];
-  /* metamodel/genericity.nit:41 */
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_metamodel___genericity___MMLocalClass____types(fra.me.REG[0]) = fra.me.REG[1];
-  /* metamodel/genericity.nit:55 */
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_metamodel___genericity___MMLocalClass____formals_types(fra.me.REG[0]) = fra.me.REG[1];
   /* metamodel/inheritance.nit:82 */
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
   ATTR_metamodel___inheritance___MMLocalClass____direct_parents(fra.me.REG[0]) = fra.me.REG[1];
@@ -155393,36 +176471,45 @@ void INIT_ATTRIBUTES__syntax___syntax_base___MMSrcLocalClass(val_t p0){
   /* metamodel/inheritance.nit:133 */
   REGB0 = TAG_Bool(0);
   ATTR_metamodel___inheritance___MMLocalClass____are_global_properties_inherited(fra.me.REG[0]) = REGB0;
+  /* metamodel/genericity.nit:41 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_metamodel___genericity___MMLocalClass____types(fra.me.REG[0]) = fra.me.REG[1];
+  /* metamodel/genericity.nit:55 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_metamodel___genericity___MMLocalClass____formals_types(fra.me.REG[0]) = fra.me.REG[1];
   /* primitive_info.nit:28 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_primitive_info___MMLocalClass____primitive_info_cache(fra.me.REG[0]) = fra.me.REG[1];
   /* primitive_info.nit:32 */
   REGB0 = TAG_Bool(0);
   ATTR_primitive_info___MMLocalClass____primitive_info_b(fra.me.REG[0]) = REGB0;
-  /* compiling/table_computation.nit:90 */
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_compiling___table_computation___MMConcreteClass____class_layout(fra.me.REG[0]) = fra.me.REG[1];
-  /* compiling/table_computation.nit:93 */
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_compiling___table_computation___MMConcreteClass____instance_layout(fra.me.REG[0]) = fra.me.REG[1];
-  /* program.nit:227 */
+  /* program.nit:230 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_program___MMLocalClass____init_var_iroutine(fra.me.REG[0]) = fra.me.REG[1];
-  /* program.nit:229 */
+  /* program.nit:232 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_program___MMLocalClass____checknew_iroutine(fra.me.REG[0]) = fra.me.REG[1];
-  /* program.nit:234 */
+  /* program.nit:237 */
   fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
   ATTR_program___MMLocalClass____new_instance_iroutine(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/extern_inline.nit:38 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_syntax___extern_inline___MMLocalClass_____atextern_type(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/extern_type_inheritance.nit:35 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___extern_type_inheritance___MMLocalClass_____atextern_type_origin_cache(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/extern_type_inheritance.nit:38 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___extern_type_inheritance___MMLocalClass_____atextern_type_cache(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/extern_inline.nit:38 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_syntax___extern_inline___MMLocalClass_____atextern_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/table_computation.nit:90 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_compiling___table_computation___MMConcreteClass____class_layout(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/table_computation.nit:93 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_compiling___table_computation___MMConcreteClass____instance_layout(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/syntax_base.nit:91 */
+  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
+  ATTR_syntax___syntax_base___MMSrcLocalClass____formal_dict(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_syntax___syntax_base___MMSrcLocalClass(void)
@@ -155448,16 +176535,6 @@ void CHECKNEW_syntax___syntax_base___MMSrcLocalClass(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMSrcLocalClass____formal_dict(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_formal_dict", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMSrcLocalClass____src_local_properties(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_src_local_properties", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMLocalClass____name(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -155493,16 +176570,6 @@ void CHECKNEW_syntax___syntax_base___MMSrcLocalClass(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_properties_by_name", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_metamodel___genericity___MMLocalClass____types(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_types", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_metamodel___genericity___MMLocalClass____formals_types(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_formals_types", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_metamodel___inheritance___MMLocalClass____direct_parents(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -155518,11 +176585,26 @@ void CHECKNEW_syntax___syntax_base___MMSrcLocalClass(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_are_global_properties_inherited", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_metamodel___genericity___MMLocalClass____types(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_types", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_metamodel___genericity___MMLocalClass____formals_types(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_formals_types", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_primitive_info___MMLocalClass____primitive_info_b(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_primitive_info_b", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_program___MMLocalClass____new_instance_iroutine(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_new_instance_iroutine", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_compiling___table_computation___MMConcreteClass____class_layout(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -155533,10 +176615,15 @@ void CHECKNEW_syntax___syntax_base___MMSrcLocalClass(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_instance_layout", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_program___MMLocalClass____new_instance_iroutine(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMSrcLocalClass____formal_dict(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_new_instance_iroutine", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_formal_dict", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMSrcLocalClass____src_local_properties(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_src_local_properties", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -155570,13 +176657,13 @@ val_t NEW_MMSrcLocalClass_syntax___syntax_base___MMSrcLocalClass___init(val_t p0
   return fra.me.REG[3];
 }
 const classtable_elt_t VFT_syntax___syntax_base___MMSrcAttribute[78] = {
-  {(bigint) 3027 /* 0: Identity */},
+  {(bigint) 3527 /* 0: Identity */},
   {(bigint) 11 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMSrcAttribute" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMSrcAttribute < Object: superclass typecheck marker */},
   {(bigint) 151 /* 4: MMSrcAttribute < MMLocalProperty: superclass typecheck marker */},
-  {(bigint) 2643 /* 5: MMSrcAttribute < MMAttribute: superclass typecheck marker */},
-  {(bigint) 3027 /* 6: MMSrcAttribute < MMSrcAttribute: superclass typecheck marker */},
+  {(bigint) 3139 /* 5: MMSrcAttribute < MMAttribute: superclass typecheck marker */},
+  {(bigint) 3527 /* 6: MMSrcAttribute < MMSrcAttribute: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -155756,16 +176843,16 @@ val_t NEW_MMSrcAttribute_syntax___syntax_base___MMSrcAttribute___init(val_t p0,
   return fra.me.REG[3];
 }
 const classtable_elt_t VFT_syntax___syntax_base___MMReadImplementationMethod[113] = {
-  {(bigint) 4067 /* 0: Identity */},
+  {(bigint) 4615 /* 0: Identity */},
   {(bigint) 12 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMReadImplementationMethod" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMReadImplementationMethod < Object: superclass typecheck marker */},
   {(bigint) 151 /* 4: MMReadImplementationMethod < MMLocalProperty: superclass typecheck marker */},
   {(bigint) 259 /* 5: MMReadImplementationMethod < FFIVisited: superclass typecheck marker */},
-  {(bigint) 2631 /* 6: MMReadImplementationMethod < MMMethod: superclass typecheck marker */},
-  {(bigint) 3023 /* 7: MMReadImplementationMethod < MMSrcMethod: superclass typecheck marker */},
-  {(bigint) 3703 /* 8: MMReadImplementationMethod < MMAttrImplementationMethod: superclass typecheck marker */},
-  {(bigint) 4067 /* 9: MMReadImplementationMethod < MMReadImplementationMethod: superclass typecheck marker */},
+  {(bigint) 3127 /* 6: MMReadImplementationMethod < MMMethod: superclass typecheck marker */},
+  {(bigint) 3523 /* 7: MMReadImplementationMethod < MMSrcMethod: superclass typecheck marker */},
+  {(bigint) 4215 /* 8: MMReadImplementationMethod < MMAttrImplementationMethod: superclass typecheck marker */},
+  {(bigint) 4615 /* 9: MMReadImplementationMethod < MMReadImplementationMethod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -155981,16 +177068,16 @@ val_t NEW_MMReadImplementationMethod_syntax___syntax_base___MMReadImplementation
   return fra.me.REG[3];
 }
 const classtable_elt_t VFT_syntax___syntax_base___MMWriteImplementationMethod[113] = {
-  {(bigint) 4063 /* 0: Identity */},
+  {(bigint) 4611 /* 0: Identity */},
   {(bigint) 12 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMWriteImplementationMethod" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMWriteImplementationMethod < Object: superclass typecheck marker */},
   {(bigint) 151 /* 4: MMWriteImplementationMethod < MMLocalProperty: superclass typecheck marker */},
   {(bigint) 259 /* 5: MMWriteImplementationMethod < FFIVisited: superclass typecheck marker */},
-  {(bigint) 2631 /* 6: MMWriteImplementationMethod < MMMethod: superclass typecheck marker */},
-  {(bigint) 3023 /* 7: MMWriteImplementationMethod < MMSrcMethod: superclass typecheck marker */},
-  {(bigint) 3703 /* 8: MMWriteImplementationMethod < MMAttrImplementationMethod: superclass typecheck marker */},
-  {(bigint) 4063 /* 9: MMWriteImplementationMethod < MMWriteImplementationMethod: superclass typecheck marker */},
+  {(bigint) 3127 /* 6: MMWriteImplementationMethod < MMMethod: superclass typecheck marker */},
+  {(bigint) 3523 /* 7: MMWriteImplementationMethod < MMSrcMethod: superclass typecheck marker */},
+  {(bigint) 4215 /* 8: MMWriteImplementationMethod < MMAttrImplementationMethod: superclass typecheck marker */},
+  {(bigint) 4611 /* 9: MMWriteImplementationMethod < MMWriteImplementationMethod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -156206,15 +177293,15 @@ val_t NEW_MMWriteImplementationMethod_syntax___syntax_base___MMWriteImplementati
   return fra.me.REG[3];
 }
 const classtable_elt_t VFT_syntax___syntax_base___MMMethSrcMethod[112] = {
-  {(bigint) 3699 /* 0: Identity */},
+  {(bigint) 4211 /* 0: Identity */},
   {(bigint) 19 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMMethSrcMethod" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMMethSrcMethod < Object: superclass typecheck marker */},
   {(bigint) 151 /* 4: MMMethSrcMethod < MMLocalProperty: superclass typecheck marker */},
   {(bigint) 259 /* 5: MMMethSrcMethod < FFIVisited: superclass typecheck marker */},
-  {(bigint) 2631 /* 6: MMMethSrcMethod < MMMethod: superclass typecheck marker */},
-  {(bigint) 3023 /* 7: MMMethSrcMethod < MMSrcMethod: superclass typecheck marker */},
-  {(bigint) 3699 /* 8: MMMethSrcMethod < MMMethSrcMethod: superclass typecheck marker */},
+  {(bigint) 3127 /* 6: MMMethSrcMethod < MMMethod: superclass typecheck marker */},
+  {(bigint) 3523 /* 7: MMMethSrcMethod < MMSrcMethod: superclass typecheck marker */},
+  {(bigint) 4211 /* 8: MMMethSrcMethod < MMMethSrcMethod: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -156353,12 +177440,6 @@ void INIT_ATTRIBUTES__syntax___syntax_base___MMMethSrcMethod(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/syntax_base.nit:192 */
-  fra.me.REG[1] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
-  ATTR_syntax___syntax_base___MMMethSrcMethod____explicit_casts(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/syntax_base.nit:193 */
-  fra.me.REG[1] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
-  ATTR_syntax___syntax_base___MMMethSrcMethod____explicit_imports(fra.me.REG[0]) = fra.me.REG[1];
   /* metamodel/abstractmetamodel.nit:653 */
   REGB0 = TAG_Bool(0);
   ATTR_metamodel___abstractmetamodel___MMLocalProperty____need_super(fra.me.REG[0]) = REGB0;
@@ -156368,6 +177449,12 @@ void INIT_ATTRIBUTES__syntax___syntax_base___MMMethSrcMethod(val_t p0){
   /* syntax/extern_inline.nit:43 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___extern_inline___MMMethod_____atextern_implementation(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/syntax_base.nit:192 */
+  fra.me.REG[1] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
+  ATTR_syntax___syntax_base___MMMethSrcMethod____explicit_casts(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/syntax_base.nit:193 */
+  fra.me.REG[1] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
+  ATTR_syntax___syntax_base___MMMethSrcMethod____explicit_imports(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_syntax___syntax_base___MMMethSrcMethod(void)
@@ -156393,55 +177480,55 @@ void CHECKNEW_syntax___syntax_base___MMMethSrcMethod(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMMethSrcMethod____is_init(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMLocalProperty____name(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_init", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_name", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMMethSrcMethod____is_intern(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMLocalProperty____local_class(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_intern", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_local_class", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMMethSrcMethod____is_extern(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMLocalProperty____need_super(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_extern", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_need_super", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMMethSrcMethod____is_abstract(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_metamodel___static_type___MMLocalProperty____signatures_cache(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_is_abstract", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_signatures_cache", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMMethSrcMethod____explicit_casts(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMMethSrcMethod____is_init(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_explicit_casts", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_init", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMMethSrcMethod____explicit_imports(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMMethSrcMethod____is_intern(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_explicit_imports", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_intern", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMLocalProperty____name(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMMethSrcMethod____is_extern(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_name", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_extern", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMLocalProperty____local_class(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMMethSrcMethod____is_abstract(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_local_class", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_is_abstract", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMLocalProperty____need_super(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMMethSrcMethod____explicit_casts(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_need_super", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_explicit_casts", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_metamodel___static_type___MMLocalProperty____signatures_cache(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMMethSrcMethod____explicit_imports(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_signatures_cache", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_explicit_imports", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -156473,13 +177560,13 @@ val_t NEW_MMMethSrcMethod_syntax___syntax_base___MMMethSrcMethod___init(val_t p0
   return fra.me.REG[3];
 }
 const classtable_elt_t VFT_syntax___syntax_base___MMSrcTypeProperty[77] = {
-  {(bigint) 3015 /* 0: Identity */},
+  {(bigint) 3515 /* 0: Identity */},
   {(bigint) 11 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMSrcTypeProperty" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMSrcTypeProperty < Object: superclass typecheck marker */},
   {(bigint) 151 /* 4: MMSrcTypeProperty < MMLocalProperty: superclass typecheck marker */},
-  {(bigint) 2591 /* 5: MMSrcTypeProperty < MMTypeProperty: superclass typecheck marker */},
-  {(bigint) 3015 /* 6: MMSrcTypeProperty < MMSrcTypeProperty: superclass typecheck marker */},
+  {(bigint) 3087 /* 5: MMSrcTypeProperty < MMTypeProperty: superclass typecheck marker */},
+  {(bigint) 3515 /* 6: MMSrcTypeProperty < MMSrcTypeProperty: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -156577,15 +177664,15 @@ void INIT_ATTRIBUTES__syntax___syntax_base___MMSrcTypeProperty(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* metamodel/virtualtype.nit:40 */
-  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
-  ATTR_metamodel___virtualtype___MMTypeProperty____stypes_cache(fra.me.REG[0]) = fra.me.REG[1];
-  /* metamodel/static_type.nit:56 */
-  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
-  ATTR_metamodel___static_type___MMLocalProperty____signatures_cache(fra.me.REG[0]) = fra.me.REG[1];
   /* metamodel/abstractmetamodel.nit:653 */
   REGB0 = TAG_Bool(0);
   ATTR_metamodel___abstractmetamodel___MMLocalProperty____need_super(fra.me.REG[0]) = REGB0;
+  /* metamodel/static_type.nit:56 */
+  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
+  ATTR_metamodel___static_type___MMLocalProperty____signatures_cache(fra.me.REG[0]) = fra.me.REG[1];
+  /* metamodel/virtualtype.nit:40 */
+  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
+  ATTR_metamodel___virtualtype___MMTypeProperty____stypes_cache(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_syntax___syntax_base___MMSrcTypeProperty(void)
@@ -156611,16 +177698,6 @@ void CHECKNEW_syntax___syntax_base___MMSrcTypeProperty(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_metamodel___virtualtype___MMTypeProperty____stypes_cache(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_stypes_cache", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_metamodel___static_type___MMLocalProperty____signatures_cache(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_signatures_cache", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMLocalProperty____name(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -156636,6 +177713,16 @@ void CHECKNEW_syntax___syntax_base___MMSrcTypeProperty(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_need_super", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_metamodel___static_type___MMLocalProperty____signatures_cache(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_signatures_cache", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_metamodel___virtualtype___MMTypeProperty____stypes_cache(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_stypes_cache", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_MMSrcTypeProperty_syntax___syntax_base___MMSrcTypeProperty___init[] = "new MMSrcTypeProperty syntax_base::MMSrcTypeProperty::init";
@@ -156666,16 +177753,16 @@ val_t NEW_MMSrcTypeProperty_syntax___syntax_base___MMSrcTypeProperty___init(val_
   return fra.me.REG[3];
 }
 const classtable_elt_t VFT_syntax___syntax_base___MMImplicitInit[117] = {
-  {(bigint) 4071 /* 0: Identity */},
+  {(bigint) 4619 /* 0: Identity */},
   {(bigint) 22 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMImplicitInit" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMImplicitInit < Object: superclass typecheck marker */},
   {(bigint) 151 /* 4: MMImplicitInit < MMLocalProperty: superclass typecheck marker */},
   {(bigint) 259 /* 5: MMImplicitInit < FFIVisited: superclass typecheck marker */},
-  {(bigint) 2631 /* 6: MMImplicitInit < MMMethod: superclass typecheck marker */},
-  {(bigint) 3023 /* 7: MMImplicitInit < MMSrcMethod: superclass typecheck marker */},
-  {(bigint) 3699 /* 8: MMImplicitInit < MMMethSrcMethod: superclass typecheck marker */},
-  {(bigint) 4071 /* 9: MMImplicitInit < MMImplicitInit: superclass typecheck marker */},
+  {(bigint) 3127 /* 6: MMImplicitInit < MMMethod: superclass typecheck marker */},
+  {(bigint) 3523 /* 7: MMImplicitInit < MMSrcMethod: superclass typecheck marker */},
+  {(bigint) 4211 /* 8: MMImplicitInit < MMMethSrcMethod: superclass typecheck marker */},
+  {(bigint) 4619 /* 9: MMImplicitInit < MMImplicitInit: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -156821,15 +177908,6 @@ void INIT_ATTRIBUTES__syntax___syntax_base___MMImplicitInit(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/mmbuilder.nit:297 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_syntax___mmbuilder___MMImplicitInit____super_init(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/syntax_base.nit:192 */
-  fra.me.REG[1] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
-  ATTR_syntax___syntax_base___MMMethSrcMethod____explicit_casts(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/syntax_base.nit:193 */
-  fra.me.REG[1] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
-  ATTR_syntax___syntax_base___MMMethSrcMethod____explicit_imports(fra.me.REG[0]) = fra.me.REG[1];
   /* metamodel/abstractmetamodel.nit:653 */
   REGB0 = TAG_Bool(0);
   ATTR_metamodel___abstractmetamodel___MMLocalProperty____need_super(fra.me.REG[0]) = REGB0;
@@ -156839,6 +177917,15 @@ void INIT_ATTRIBUTES__syntax___syntax_base___MMImplicitInit(val_t p0){
   /* syntax/extern_inline.nit:43 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___extern_inline___MMMethod_____atextern_implementation(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/syntax_base.nit:192 */
+  fra.me.REG[1] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
+  ATTR_syntax___syntax_base___MMMethSrcMethod____explicit_casts(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/syntax_base.nit:193 */
+  fra.me.REG[1] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
+  ATTR_syntax___syntax_base___MMMethSrcMethod____explicit_imports(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/mmbuilder.nit:297 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_syntax___mmbuilder___MMImplicitInit____super_init(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_syntax___syntax_base___MMImplicitInit(void)
@@ -156864,15 +177951,25 @@ void CHECKNEW_syntax___syntax_base___MMImplicitInit(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMImplicitInit____unassigned_attributes(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMLocalProperty____name(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_unassigned_attributes", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_name", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMImplicitInit____super_inits(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMLocalProperty____local_class(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_super_inits", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_local_class", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMLocalProperty____need_super(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_need_super", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_metamodel___static_type___MMLocalProperty____signatures_cache(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_signatures_cache", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMMethSrcMethod____is_init(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -156904,25 +178001,15 @@ void CHECKNEW_syntax___syntax_base___MMImplicitInit(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_explicit_imports", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMLocalProperty____name(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_name", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMLocalProperty____local_class(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_local_class", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_metamodel___abstractmetamodel___MMLocalProperty____need_super(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMImplicitInit____unassigned_attributes(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_need_super", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_unassigned_attributes", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_metamodel___static_type___MMLocalProperty____signatures_cache(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___MMImplicitInit____super_inits(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_signatures_cache", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_super_inits", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -157089,12 +178176,12 @@ val_t NEW_VarVariable_syntax___syntax_base___VarVariable___init(val_t p0, val_t
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_syntax___syntax_base___ParamVariable[60] = {
-  {(bigint) 2535 /* 0: Identity */},
+  {(bigint) 3031 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ParamVariable" /* 2: Class Name */},
   {(bigint) 3 /* 3: ParamVariable < Object: superclass typecheck marker */},
   {(bigint) 19 /* 4: ParamVariable < Variable: superclass typecheck marker */},
-  {(bigint) 2535 /* 5: ParamVariable < ParamVariable: superclass typecheck marker */},
+  {(bigint) 3031 /* 5: ParamVariable < ParamVariable: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -157224,12 +178311,12 @@ val_t NEW_ParamVariable_syntax___syntax_base___ParamVariable___init(val_t p0, va
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_syntax___syntax_base___AutoVariable[60] = {
-  {(bigint) 2811 /* 0: Identity */},
+  {(bigint) 3307 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "AutoVariable" /* 2: Class Name */},
   {(bigint) 3 /* 3: AutoVariable < Object: superclass typecheck marker */},
   {(bigint) 19 /* 4: AutoVariable < Variable: superclass typecheck marker */},
-  {(bigint) 2811 /* 5: AutoVariable < AutoVariable: superclass typecheck marker */},
+  {(bigint) 3307 /* 5: AutoVariable < AutoVariable: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -157359,12 +178446,12 @@ val_t NEW_AutoVariable_syntax___syntax_base___AutoVariable___init(val_t p0, val_
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_syntax___syntax_base___ClosureVariable[61] = {
-  {(bigint) 2791 /* 0: Identity */},
+  {(bigint) 3287 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ClosureVariable" /* 2: Class Name */},
   {(bigint) 3 /* 3: ClosureVariable < Object: superclass typecheck marker */},
   {(bigint) 19 /* 4: ClosureVariable < Variable: superclass typecheck marker */},
-  {(bigint) 2791 /* 5: ClosureVariable < ClosureVariable: superclass typecheck marker */},
+  {(bigint) 3287 /* 5: ClosureVariable < ClosureVariable: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -157463,15 +178550,15 @@ void CHECKNEW_syntax___syntax_base___ClosureVariable(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___ClosureVariable____closure(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___Variable____name(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_closure", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_name", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___Variable____name(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___ClosureVariable____closure(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_name", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_closure", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -157806,11 +178893,6 @@ void CHECKNEW_syntax___flow___SubFlowContext(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___flow___SubFlowContext____prev(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_prev", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_syntax___flow___FlowContext____visitor(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -157836,6 +178918,11 @@ void CHECKNEW_syntax___flow___SubFlowContext(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_set_variables", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_syntax___flow___SubFlowContext____prev(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_prev", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_SubFlowContext_syntax___flow___SubFlowContext___with_prev[] = "new SubFlowContext flow::SubFlowContext::with_prev";
@@ -157864,13 +178951,13 @@ val_t NEW_SubFlowContext_syntax___flow___SubFlowContext___with_prev(val_t p0, va
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_syntax___flow___CastFlowContext[70] = {
-  {(bigint) 3199 /* 0: Identity */},
+  {(bigint) 3699 /* 0: Identity */},
   {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "CastFlowContext" /* 2: Class Name */},
   {(bigint) 3 /* 3: CastFlowContext < Object: superclass typecheck marker */},
   {(bigint) 251 /* 4: CastFlowContext < FlowContext: superclass typecheck marker */},
   {(bigint) 347 /* 5: CastFlowContext < SubFlowContext: superclass typecheck marker */},
-  {(bigint) 3199 /* 6: CastFlowContext < CastFlowContext: superclass typecheck marker */},
+  {(bigint) 3699 /* 6: CastFlowContext < CastFlowContext: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -157994,16 +179081,6 @@ void CHECKNEW_syntax___flow___CastFlowContext(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___flow___CastFlowContext____variable(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_variable", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_syntax___flow___SubFlowContext____prev(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_prev", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_syntax___flow___FlowContext____visitor(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -158029,6 +179106,16 @@ void CHECKNEW_syntax___flow___CastFlowContext(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_set_variables", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_syntax___flow___SubFlowContext____prev(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_prev", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_syntax___flow___CastFlowContext____variable(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_variable", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_CastFlowContext_syntax___flow___CastFlowContext___init[] = "new CastFlowContext flow::CastFlowContext::init";
@@ -158061,12 +179148,12 @@ val_t NEW_CastFlowContext_syntax___flow___CastFlowContext___init(val_t p0, val_t
   return fra.me.REG[4];
 }
 const classtable_elt_t VFT_syntax___flow___MergeFlowContext[68] = {
-  {(bigint) 2575 /* 0: Identity */},
+  {(bigint) 3071 /* 0: Identity */},
   {(bigint) 10 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MergeFlowContext" /* 2: Class Name */},
   {(bigint) 3 /* 3: MergeFlowContext < Object: superclass typecheck marker */},
   {(bigint) 251 /* 4: MergeFlowContext < FlowContext: superclass typecheck marker */},
-  {(bigint) 2575 /* 5: MergeFlowContext < MergeFlowContext: superclass typecheck marker */},
+  {(bigint) 3071 /* 5: MergeFlowContext < MergeFlowContext: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -158155,9 +179242,6 @@ void INIT_ATTRIBUTES__syntax___flow___MergeFlowContext(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/flow.nit:202 */
-  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
-  ATTR_syntax___flow___MergeFlowContext____stypes(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/flow.nit:121 */
   REGB0 = TAG_Bool(0);
   ATTR_syntax___flow___FlowContext____unreash(fra.me.REG[0]) = REGB0;
@@ -158167,6 +179251,9 @@ void INIT_ATTRIBUTES__syntax___flow___MergeFlowContext(val_t p0){
   /* syntax/flow.nit:128 */
   fra.me.REG[1] = NEW_HashSet_standard___collection___hash_collection___HashSet___init();
   ATTR_syntax___flow___FlowContext____set_variables(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/flow.nit:202 */
+  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
+  ATTR_syntax___flow___MergeFlowContext____stypes(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_syntax___flow___MergeFlowContext(void)
@@ -158192,21 +179279,6 @@ void CHECKNEW_syntax___flow___MergeFlowContext(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___flow___MergeFlowContext____base(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_base", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_syntax___flow___MergeFlowContext____alts(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_alts", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_syntax___flow___MergeFlowContext____stypes(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_stypes", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_syntax___flow___FlowContext____visitor(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -158232,6 +179304,21 @@ void CHECKNEW_syntax___flow___MergeFlowContext(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_set_variables", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_syntax___flow___MergeFlowContext____base(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_base", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_syntax___flow___MergeFlowContext____alts(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_alts", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_syntax___flow___MergeFlowContext____stypes(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_stypes", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_MergeFlowContext_syntax___flow___MergeFlowContext___init[] = "new MergeFlowContext flow::MergeFlowContext::init";
@@ -158547,12 +179634,12 @@ val_t NEW_ScopeBlock_syntax___scope___ScopeBlock___init(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_syntax___scope___EscapableBlock[71] = {
-  {(bigint) 2743 /* 0: Identity */},
+  {(bigint) 3239 /* 0: Identity */},
   {(bigint) 11 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "EscapableBlock" /* 2: Class Name */},
   {(bigint) 3 /* 3: EscapableBlock < Object: superclass typecheck marker */},
   {(bigint) 59 /* 4: EscapableBlock < ScopeBlock: superclass typecheck marker */},
-  {(bigint) 2743 /* 5: EscapableBlock < EscapableBlock: superclass typecheck marker */},
+  {(bigint) 3239 /* 5: EscapableBlock < EscapableBlock: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -158644,12 +179731,12 @@ void INIT_ATTRIBUTES__syntax___scope___EscapableBlock(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/scope.nit:195 */
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_syntax___scope___EscapableBlock____break_flow_contexts(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/scope.nit:141 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___scope___ScopeBlock____dico(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/scope.nit:195 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_syntax___scope___EscapableBlock____break_flow_contexts(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_syntax___scope___EscapableBlock(void)
@@ -158675,15 +179762,15 @@ void CHECKNEW_syntax___scope___EscapableBlock(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___scope___EscapableBlock____break_flow_contexts(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___scope___ScopeBlock____node(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_break_flow_contexts", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_node", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___scope___ScopeBlock____node(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___scope___EscapableBlock____break_flow_contexts(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_node", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_break_flow_contexts", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -158711,13 +179798,13 @@ val_t NEW_EscapableBlock_syntax___scope___EscapableBlock___init(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_syntax___scope___BreakOnlyEscapableBlock[73] = {
-  {(bigint) 3207 /* 0: Identity */},
+  {(bigint) 3707 /* 0: Identity */},
   {(bigint) 11 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "BreakOnlyEscapableBlock" /* 2: Class Name */},
   {(bigint) 3 /* 3: BreakOnlyEscapableBlock < Object: superclass typecheck marker */},
   {(bigint) 59 /* 4: BreakOnlyEscapableBlock < ScopeBlock: superclass typecheck marker */},
-  {(bigint) 2743 /* 5: BreakOnlyEscapableBlock < EscapableBlock: superclass typecheck marker */},
-  {(bigint) 3207 /* 6: BreakOnlyEscapableBlock < BreakOnlyEscapableBlock: superclass typecheck marker */},
+  {(bigint) 3239 /* 5: BreakOnlyEscapableBlock < EscapableBlock: superclass typecheck marker */},
+  {(bigint) 3707 /* 6: BreakOnlyEscapableBlock < BreakOnlyEscapableBlock: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -158810,12 +179897,12 @@ void INIT_ATTRIBUTES__syntax___scope___BreakOnlyEscapableBlock(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/scope.nit:195 */
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_syntax___scope___EscapableBlock____break_flow_contexts(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/scope.nit:141 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___scope___ScopeBlock____dico(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/scope.nit:195 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_syntax___scope___EscapableBlock____break_flow_contexts(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_syntax___scope___BreakOnlyEscapableBlock(void)
@@ -158841,15 +179928,15 @@ void CHECKNEW_syntax___scope___BreakOnlyEscapableBlock(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___scope___EscapableBlock____break_flow_contexts(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___scope___ScopeBlock____node(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_break_flow_contexts", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_node", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___scope___ScopeBlock____node(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___scope___EscapableBlock____break_flow_contexts(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_node", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_break_flow_contexts", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -158877,13 +179964,13 @@ val_t NEW_BreakOnlyEscapableBlock_syntax___scope___BreakOnlyEscapableBlock___ini
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_syntax___scope___EscapableClosure[74] = {
-  {(bigint) 3171 /* 0: Identity */},
+  {(bigint) 3671 /* 0: Identity */},
   {(bigint) 13 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "EscapableClosure" /* 2: Class Name */},
   {(bigint) 3 /* 3: EscapableClosure < Object: superclass typecheck marker */},
   {(bigint) 59 /* 4: EscapableClosure < ScopeBlock: superclass typecheck marker */},
-  {(bigint) 2743 /* 5: EscapableClosure < EscapableBlock: superclass typecheck marker */},
-  {(bigint) 3171 /* 6: EscapableClosure < EscapableClosure: superclass typecheck marker */},
+  {(bigint) 3239 /* 5: EscapableClosure < EscapableBlock: superclass typecheck marker */},
+  {(bigint) 3671 /* 6: EscapableClosure < EscapableClosure: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -158979,12 +180066,12 @@ void INIT_ATTRIBUTES__syntax___scope___EscapableClosure(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/scope.nit:195 */
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
-  ATTR_syntax___scope___EscapableBlock____break_flow_contexts(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/scope.nit:141 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___scope___ScopeBlock____dico(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/scope.nit:195 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
+  ATTR_syntax___scope___EscapableBlock____break_flow_contexts(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_syntax___scope___EscapableClosure(void)
@@ -159010,20 +180097,20 @@ void CHECKNEW_syntax___scope___EscapableClosure(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___scope___EscapableClosure____closure(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___scope___ScopeBlock____node(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_closure", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_node", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_syntax___scope___EscapableBlock____break_flow_contexts(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_break_flow_contexts", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___scope___ScopeBlock____node(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___scope___EscapableClosure____closure(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_node", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_closure", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -159055,13 +180142,13 @@ val_t NEW_EscapableClosure_syntax___scope___EscapableClosure___init(val_t p0, va
   return fra.me.REG[3];
 }
 const classtable_elt_t VFT_syntax___typing___TypingVisitor[109] = {
-  {(bigint) 2831 /* 0: Identity */},
+  {(bigint) 3327 /* 0: Identity */},
   {(bigint) 16 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TypingVisitor" /* 2: Class Name */},
   {(bigint) 3 /* 3: TypingVisitor < Object: superclass typecheck marker */},
   {(bigint) 15 /* 4: TypingVisitor < Visitor: superclass typecheck marker */},
-  {(bigint) 2823 /* 5: TypingVisitor < AbsSyntaxVisitor: superclass typecheck marker */},
-  {(bigint) 2831 /* 6: TypingVisitor < TypingVisitor: superclass typecheck marker */},
+  {(bigint) 3319 /* 5: TypingVisitor < AbsSyntaxVisitor: superclass typecheck marker */},
+  {(bigint) 3327 /* 6: TypingVisitor < TypingVisitor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -159196,6 +180283,9 @@ void INIT_ATTRIBUTES__syntax___typing___TypingVisitor(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* parser/parser_prod.nit:66 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_parser___parser_prod___Visitor____current_node(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/typing.nit:46 */
   fra.me.REG[1] = fra.me.REG[0];
   /* syntax/typing.nit:47 */
@@ -159210,9 +180300,6 @@ void INIT_ATTRIBUTES__syntax___typing___TypingVisitor(val_t p0){
   /* syntax/typing.nit:110 */
   REGB0 = TAG_Int(0);
   ATTR_syntax___typing___TypingVisitor____once_count(fra.me.REG[0]) = REGB0;
-  /* parser/parser_prod.nit:66 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_parser___parser_prod___Visitor____current_node(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_syntax___typing___TypingVisitor(void)
@@ -159238,6 +180325,16 @@ void CHECKNEW_syntax___typing___TypingVisitor(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___AbsSyntaxVisitor____mmmodule(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_mmmodule", LOCATE_nitc, 0);
+  }
+  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___AbsSyntaxVisitor____tc(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_tc", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_syntax___typing___TypingVisitor____scope_ctx(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -159258,16 +180355,6 @@ void CHECKNEW_syntax___typing___TypingVisitor(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_once_count", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___AbsSyntaxVisitor____mmmodule(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_mmmodule", LOCATE_nitc, 0);
-  }
-  REGB0 = TAG_Bool(ATTR_syntax___syntax_base___AbsSyntaxVisitor____tc(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_tc", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_TypingVisitor_syntax___typing___TypingVisitor___init[] = "new TypingVisitor typing::TypingVisitor::init";
@@ -159438,12 +180525,12 @@ val_t NEW_PrimitiveInfo_primitive_info___PrimitiveInfo___init(val_t p0, val_t p1
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_syntax___icode_generation___A2IContext[92] = {
-  {(bigint) 2827 /* 0: Identity */},
+  {(bigint) 3323 /* 0: Identity */},
   {(bigint) 14 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "A2IContext" /* 2: Class Name */},
   {(bigint) 3 /* 3: A2IContext < Object: superclass typecheck marker */},
   {(bigint) 223 /* 4: A2IContext < ICodeBuilder: superclass typecheck marker */},
-  {(bigint) 2827 /* 5: A2IContext < A2IContext: superclass typecheck marker */},
+  {(bigint) 3323 /* 5: A2IContext < A2IContext: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -159559,6 +180646,9 @@ void INIT_ATTRIBUTES__syntax___icode_generation___A2IContext(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* icode/icode_builder.nit:220 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_icode___icode_builder___ICodeBuilder____current_location(fra.me.REG[0]) = fra.me.REG[1];
   /* syntax/icode_generation.nit:68 */
   fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
   ATTR_syntax___icode_generation___A2IContext____variables(fra.me.REG[0]) = fra.me.REG[1];
@@ -159568,9 +180658,6 @@ void INIT_ATTRIBUTES__syntax___icode_generation___A2IContext(val_t p0){
   /* syntax/icode_generation.nit:140 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_syntax___icode_generation___A2IContext____current_node(fra.me.REG[0]) = fra.me.REG[1];
-  /* icode/icode_builder.nit:220 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_icode___icode_builder___ICodeBuilder____current_location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_syntax___icode_generation___A2IContext(void)
@@ -159596,35 +180683,35 @@ void CHECKNEW_syntax___icode_generation___A2IContext(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___icode_generation___A2IContext____variables(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_icode___icode_builder___ICodeBuilder____mmmodule(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_variables", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_mmmodule", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___icode_generation___A2IContext____closurevariables(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_icode___icode_builder___ICodeBuilder____iroutine(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_closurevariables", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_iroutine", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_syntax___icode_generation___A2IContext____visitor(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_icode___icode_builder___ICodeBuilder____seq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_visitor", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_seq", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_icode___icode_builder___ICodeBuilder____mmmodule(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___icode_generation___A2IContext____variables(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_mmmodule", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_variables", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_icode___icode_builder___ICodeBuilder____iroutine(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___icode_generation___A2IContext____closurevariables(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_iroutine", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_closurevariables", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_icode___icode_builder___ICodeBuilder____seq(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_syntax___icode_generation___A2IContext____visitor(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_seq", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_visitor", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -159656,13 +180743,13 @@ val_t NEW_A2IContext_syntax___icode_generation___A2IContext___init(val_t p0, val
   return fra.me.REG[3];
 }
 const classtable_elt_t VFT_syntax___icode_generation___A2IVisitor[88] = {
-  {(bigint) 3343 /* 0: Identity */},
+  {(bigint) 3859 /* 0: Identity */},
   {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "A2IVisitor" /* 2: Class Name */},
   {(bigint) 3 /* 3: A2IVisitor < Object: superclass typecheck marker */},
   {(bigint) 15 /* 4: A2IVisitor < Visitor: superclass typecheck marker */},
-  {(bigint) 2823 /* 5: A2IVisitor < AbsSyntaxVisitor: superclass typecheck marker */},
-  {(bigint) 3343 /* 6: A2IVisitor < A2IVisitor: superclass typecheck marker */},
+  {(bigint) 3319 /* 5: A2IVisitor < AbsSyntaxVisitor: superclass typecheck marker */},
+  {(bigint) 3859 /* 6: A2IVisitor < A2IVisitor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -159833,12 +180920,12 @@ val_t NEW_A2IVisitor_syntax___icode_generation___A2IVisitor___init(val_t p0, val
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_syntax___mmbuilder___CSHSorter[58] = {
-  {(bigint) 2803 /* 0: Identity */},
+  {(bigint) 3299 /* 0: Identity */},
   {(bigint) 2 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "CSHSorter" /* 2: Class Name */},
   {(bigint) 3 /* 3: CSHSorter < Object: superclass typecheck marker */},
   {(bigint) 307 /* 4: CSHSorter < AbstractSorter: superclass typecheck marker */},
-  {(bigint) 2803 /* 5: CSHSorter < CSHSorter: superclass typecheck marker */},
+  {(bigint) 3299 /* 5: CSHSorter < CSHSorter: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -159951,12 +181038,12 @@ val_t NEW_CSHSorter_syntax___mmbuilder___CSHSorter___init(void){
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_syntax___mmbuilder___MMSrcAncestor[62] = {
-  {(bigint) 2607 /* 0: Identity */},
+  {(bigint) 3103 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MMSrcAncestor" /* 2: Class Name */},
   {(bigint) 3 /* 3: MMSrcAncestor < Object: superclass typecheck marker */},
   {(bigint) 183 /* 4: MMSrcAncestor < MMAncestor: superclass typecheck marker */},
-  {(bigint) 2607 /* 5: MMSrcAncestor < MMSrcAncestor: superclass typecheck marker */},
+  {(bigint) 3103 /* 5: MMSrcAncestor < MMSrcAncestor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -160095,13 +181182,13 @@ val_t NEW_MMSrcAncestor_syntax___mmbuilder___MMSrcAncestor___init(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_syntax___mmbuilder___ClassBuilderVisitor[90] = {
-  {(bigint) 3191 /* 0: Identity */},
+  {(bigint) 3691 /* 0: Identity */},
   {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ClassBuilderVisitor" /* 2: Class Name */},
   {(bigint) 3 /* 3: ClassBuilderVisitor < Object: superclass typecheck marker */},
   {(bigint) 15 /* 4: ClassBuilderVisitor < Visitor: superclass typecheck marker */},
-  {(bigint) 2823 /* 5: ClassBuilderVisitor < AbsSyntaxVisitor: superclass typecheck marker */},
-  {(bigint) 3191 /* 6: ClassBuilderVisitor < ClassBuilderVisitor: superclass typecheck marker */},
+  {(bigint) 3319 /* 5: ClassBuilderVisitor < AbsSyntaxVisitor: superclass typecheck marker */},
+  {(bigint) 3691 /* 6: ClassBuilderVisitor < ClassBuilderVisitor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -160210,12 +181297,12 @@ void INIT_ATTRIBUTES__syntax___mmbuilder___ClassBuilderVisitor(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/mmbuilder.nit:353 */
-  REGB0 = TAG_Int(0);
-  ATTR_syntax___mmbuilder___ClassBuilderVisitor____local_class_arity(fra.me.REG[0]) = REGB0;
   /* parser/parser_prod.nit:66 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_prod___Visitor____current_node(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/mmbuilder.nit:353 */
+  REGB0 = TAG_Int(0);
+  ATTR_syntax___mmbuilder___ClassBuilderVisitor____local_class_arity(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_syntax___mmbuilder___ClassBuilderVisitor(void)
@@ -160241,11 +181328,6 @@ void CHECKNEW_syntax___mmbuilder___ClassBuilderVisitor(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___mmbuilder___ClassBuilderVisitor____local_class_arity(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_local_class_arity", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_syntax___syntax_base___AbsSyntaxVisitor____mmmodule(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -160256,6 +181338,11 @@ void CHECKNEW_syntax___mmbuilder___ClassBuilderVisitor(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_tc", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_syntax___mmbuilder___ClassBuilderVisitor____local_class_arity(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_local_class_arity", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_ClassBuilderVisitor_syntax___mmbuilder___ClassBuilderVisitor___init[] = "new ClassBuilderVisitor mmbuilder::ClassBuilderVisitor::init";
@@ -160284,13 +181371,13 @@ val_t NEW_ClassBuilderVisitor_syntax___mmbuilder___ClassBuilderVisitor___init(va
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_syntax___mmbuilder___ClassSpecializationBuilderVisitor[86] = {
-  {(bigint) 3187 /* 0: Identity */},
+  {(bigint) 3687 /* 0: Identity */},
   {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ClassSpecializationBuilderVisitor" /* 2: Class Name */},
   {(bigint) 3 /* 3: ClassSpecializationBuilderVisitor < Object: superclass typecheck marker */},
   {(bigint) 15 /* 4: ClassSpecializationBuilderVisitor < Visitor: superclass typecheck marker */},
-  {(bigint) 2823 /* 5: ClassSpecializationBuilderVisitor < AbsSyntaxVisitor: superclass typecheck marker */},
-  {(bigint) 3187 /* 6: ClassSpecializationBuilderVisitor < ClassSpecializationBuilderVisitor: superclass typecheck marker */},
+  {(bigint) 3319 /* 5: ClassSpecializationBuilderVisitor < AbsSyntaxVisitor: superclass typecheck marker */},
+  {(bigint) 3687 /* 6: ClassSpecializationBuilderVisitor < ClassSpecializationBuilderVisitor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -160458,13 +181545,13 @@ val_t NEW_ClassSpecializationBuilderVisitor_syntax___mmbuilder___ClassSpecializa
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_syntax___mmbuilder___ClassAncestorBuilder[86] = {
-  {(bigint) 3195 /* 0: Identity */},
+  {(bigint) 3695 /* 0: Identity */},
   {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ClassAncestorBuilder" /* 2: Class Name */},
   {(bigint) 3 /* 3: ClassAncestorBuilder < Object: superclass typecheck marker */},
   {(bigint) 15 /* 4: ClassAncestorBuilder < Visitor: superclass typecheck marker */},
-  {(bigint) 2823 /* 5: ClassAncestorBuilder < AbsSyntaxVisitor: superclass typecheck marker */},
-  {(bigint) 3195 /* 6: ClassAncestorBuilder < ClassAncestorBuilder: superclass typecheck marker */},
+  {(bigint) 3319 /* 5: ClassAncestorBuilder < AbsSyntaxVisitor: superclass typecheck marker */},
+  {(bigint) 3695 /* 6: ClassAncestorBuilder < ClassAncestorBuilder: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -160632,13 +181719,13 @@ val_t NEW_ClassAncestorBuilder_syntax___mmbuilder___ClassAncestorBuilder___init(
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_syntax___mmbuilder___ClassVerifierVisitor[86] = {
-  {(bigint) 3183 /* 0: Identity */},
+  {(bigint) 3683 /* 0: Identity */},
   {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ClassVerifierVisitor" /* 2: Class Name */},
   {(bigint) 3 /* 3: ClassVerifierVisitor < Object: superclass typecheck marker */},
   {(bigint) 15 /* 4: ClassVerifierVisitor < Visitor: superclass typecheck marker */},
-  {(bigint) 2823 /* 5: ClassVerifierVisitor < AbsSyntaxVisitor: superclass typecheck marker */},
-  {(bigint) 3183 /* 6: ClassVerifierVisitor < ClassVerifierVisitor: superclass typecheck marker */},
+  {(bigint) 3319 /* 5: ClassVerifierVisitor < AbsSyntaxVisitor: superclass typecheck marker */},
+  {(bigint) 3683 /* 6: ClassVerifierVisitor < ClassVerifierVisitor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -160806,13 +181893,13 @@ val_t NEW_ClassVerifierVisitor_syntax___mmbuilder___ClassVerifierVisitor___init(
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_syntax___mmbuilder___PropertyBuilderVisitor[86] = {
-  {(bigint) 2967 /* 0: Identity */},
+  {(bigint) 3467 /* 0: Identity */},
   {(bigint) 7 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "PropertyBuilderVisitor" /* 2: Class Name */},
   {(bigint) 3 /* 3: PropertyBuilderVisitor < Object: superclass typecheck marker */},
   {(bigint) 15 /* 4: PropertyBuilderVisitor < Visitor: superclass typecheck marker */},
-  {(bigint) 2823 /* 5: PropertyBuilderVisitor < AbsSyntaxVisitor: superclass typecheck marker */},
-  {(bigint) 2967 /* 6: PropertyBuilderVisitor < PropertyBuilderVisitor: superclass typecheck marker */},
+  {(bigint) 3319 /* 5: PropertyBuilderVisitor < AbsSyntaxVisitor: superclass typecheck marker */},
+  {(bigint) 3467 /* 6: PropertyBuilderVisitor < PropertyBuilderVisitor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -160980,13 +182067,13 @@ val_t NEW_PropertyBuilderVisitor_syntax___mmbuilder___PropertyBuilderVisitor___i
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_syntax___mmbuilder___PropertyVerifierVisitor[88] = {
-  {(bigint) 2963 /* 0: Identity */},
+  {(bigint) 3463 /* 0: Identity */},
   {(bigint) 8 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "PropertyVerifierVisitor" /* 2: Class Name */},
   {(bigint) 3 /* 3: PropertyVerifierVisitor < Object: superclass typecheck marker */},
   {(bigint) 15 /* 4: PropertyVerifierVisitor < Visitor: superclass typecheck marker */},
-  {(bigint) 2823 /* 5: PropertyVerifierVisitor < AbsSyntaxVisitor: superclass typecheck marker */},
-  {(bigint) 2963 /* 6: PropertyVerifierVisitor < PropertyVerifierVisitor: superclass typecheck marker */},
+  {(bigint) 3319 /* 5: PropertyVerifierVisitor < AbsSyntaxVisitor: superclass typecheck marker */},
+  {(bigint) 3463 /* 6: PropertyVerifierVisitor < PropertyVerifierVisitor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -161119,11 +182206,6 @@ void CHECKNEW_syntax___mmbuilder___PropertyVerifierVisitor(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_syntax___mmbuilder___PropertyVerifierVisitor____signature_builder(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_signature_builder", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_syntax___syntax_base___AbsSyntaxVisitor____mmmodule(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -161134,6 +182216,11 @@ void CHECKNEW_syntax___mmbuilder___PropertyVerifierVisitor(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_tc", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_syntax___mmbuilder___PropertyVerifierVisitor____signature_builder(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_signature_builder", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_PropertyVerifierVisitor_syntax___mmbuilder___PropertyVerifierVisitor___init[] = "new PropertyVerifierVisitor mmbuilder::PropertyVerifierVisitor::init";
@@ -161343,12 +182430,12 @@ val_t NEW_SignatureBuilder_syntax___mmbuilder___SignatureBuilder___init(void){
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_syntax___mmbuilder___MethidAccumulator[57] = {
-  {(bigint) 2567 /* 0: Identity */},
+  {(bigint) 3063 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "MethidAccumulator" /* 2: Class Name */},
   {(bigint) 3 /* 3: MethidAccumulator < Object: superclass typecheck marker */},
   {(bigint) 15 /* 4: MethidAccumulator < Visitor: superclass typecheck marker */},
-  {(bigint) 2567 /* 5: MethidAccumulator < MethidAccumulator: superclass typecheck marker */},
+  {(bigint) 3063 /* 5: MethidAccumulator < MethidAccumulator: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -161419,12 +182506,12 @@ void INIT_ATTRIBUTES__syntax___mmbuilder___MethidAccumulator(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/mmbuilder.nit:1254 */
-  fra.me.REG[1] = NEW_Buffer_standard___string___Buffer___init();
-  ATTR_syntax___mmbuilder___MethidAccumulator____name(fra.me.REG[0]) = fra.me.REG[1];
   /* parser/parser_prod.nit:66 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_parser___parser_prod___Visitor____current_node(fra.me.REG[0]) = fra.me.REG[1];
+  /* syntax/mmbuilder.nit:1254 */
+  fra.me.REG[1] = NEW_Buffer_standard___string___Buffer___init();
+  ATTR_syntax___mmbuilder___MethidAccumulator____name(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_syntax___mmbuilder___MethidAccumulator(void)
@@ -161478,13 +182565,13 @@ val_t NEW_MethidAccumulator_parser___parser_prod___Visitor___init(void){
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_syntax___extern_inline___ExternCode[88] = {
-  {(bigint) 2739 /* 0: Identity */},
+  {(bigint) 3235 /* 0: Identity */},
   {(bigint) 6 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ExternCode" /* 2: Class Name */},
   {(bigint) 3 /* 3: ExternCode < Object: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {(bigint) 259 /* 5: ExternCode < FFIVisited: superclass typecheck marker */},
-  {(bigint) 2739 /* 6: ExternCode < ExternCode: superclass typecheck marker */},
+  {(bigint) 3235 /* 6: ExternCode < ExternCode: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -161701,7 +182788,7 @@ const classtable_elt_t VFT_syntax___SrcModuleLoader[62] = {
   {(bigint) utils___Object___cmangle},
   {(bigint) utils___Object___cmangle_table},
   {(bigint) 0 /* 50: SrcModuleLoader < ModuleLoader: superclass init_table position */},
-  {(bigint) 3019 /* 51: VT SrcModuleLoader::MODULE : id of MMSrcModule */},
+  {(bigint) 3519 /* 51: VT SrcModuleLoader::MODULE : id of MMSrcModule */},
   {(bigint) 7 /* 52: VT SrcModuleLoader::MODULE : color of MMSrcModule */},
   {(bigint) syntax___SrcModuleLoader___file_type},
   {(bigint) mmloader___ModuleLoader___try_to_load_dir},
@@ -161911,36 +182998,18 @@ void INIT_ATTRIBUTES__program___Program(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* global/instantiated_type_analysis.nit:23 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_global___instantiated_type_analysis___Program____ita(fra.me.REG[0]) = fra.me.REG[1];
   /* program.nit:44 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_program___Program____main_method(fra.me.REG[0]) = fra.me.REG[1];
   /* program.nit:48 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_program___Program____main_class(fra.me.REG[0]) = fra.me.REG[1];
-  /* global/reachable_as_init.nit:24 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_global___reachable_as_init___Program____rai(fra.me.REG[0]) = fra.me.REG[1];
-  /* global/dead_method_removal.nit:23 */
-  REGB0 = TAG_Int(0);
-  ATTR_global___dead_method_removal___Program____nb_removed_iroutines(fra.me.REG[0]) = REGB0;
-  /* global/dead_method_removal.nit:24 */
-  REGB0 = TAG_Int(0);
-  ATTR_global___dead_method_removal___Program____nb_not_removed_iroutines(fra.me.REG[0]) = REGB0;
-  /* global/reachable_method_analysis.nit:24 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_global___reachable_method_analysis___Program____rma(fra.me.REG[0]) = fra.me.REG[1];
-  /* global/inline_get_and_set.nit:26 */
-  REGB0 = TAG_Int(0);
-  ATTR_global___inline_get_and_set___Program____number_getter_setter_inlined(fra.me.REG[0]) = REGB0;
-  /* global/remove_out_of_init_get_test.nit:24 */
-  REGB0 = TAG_Int(0);
-  ATTR_global___remove_out_of_init_get_test___Program____nb_optimized_isset(fra.me.REG[0]) = REGB0;
-  /* global/reachable_from_init_method_analysis.nit:25 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_global___reachable_from_init_method_analysis___Program____rfima(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/table_computation.nit:141 */
+  fra.me.REG[1] = NEW_TableInformation_compiling___table_computation___ColorContext___init();
+  ATTR_compiling___table_computation___Program____table_information(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/table_computation.nit:144 */
+  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
+  ATTR_compiling___table_computation___Program____compiled_classes(fra.me.REG[0]) = fra.me.REG[1];
   /* compiling/compiling.nit:29 */
   if (!once_value_1) {
     fra.me.REG[1] = BOX_NativeString("none");
@@ -161951,12 +183020,30 @@ void INIT_ATTRIBUTES__program___Program(val_t p0){
   } else fra.me.REG[1] = once_value_1;
   fra.me.REG[1] = fra.me.REG[1];
   ATTR_compiling___Program____output_format(fra.me.REG[0]) = fra.me.REG[1];
-  /* compiling/table_computation.nit:141 */
-  fra.me.REG[1] = NEW_TableInformation_compiling___table_computation___ColorContext___init();
-  ATTR_compiling___table_computation___Program____table_information(fra.me.REG[0]) = fra.me.REG[1];
-  /* compiling/table_computation.nit:144 */
-  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
-  ATTR_compiling___table_computation___Program____compiled_classes(fra.me.REG[0]) = fra.me.REG[1];
+  /* global/reachable_method_analysis.nit:24 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_global___reachable_method_analysis___Program____rma(fra.me.REG[0]) = fra.me.REG[1];
+  /* global/reachable_from_init_method_analysis.nit:25 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_global___reachable_from_init_method_analysis___Program____rfima(fra.me.REG[0]) = fra.me.REG[1];
+  /* global/remove_out_of_init_get_test.nit:24 */
+  REGB0 = TAG_Int(0);
+  ATTR_global___remove_out_of_init_get_test___Program____nb_optimized_isset(fra.me.REG[0]) = REGB0;
+  /* global/inline_get_and_set.nit:26 */
+  REGB0 = TAG_Int(0);
+  ATTR_global___inline_get_and_set___Program____number_getter_setter_inlined(fra.me.REG[0]) = REGB0;
+  /* global/dead_method_removal.nit:23 */
+  REGB0 = TAG_Int(0);
+  ATTR_global___dead_method_removal___Program____nb_removed_iroutines(fra.me.REG[0]) = REGB0;
+  /* global/dead_method_removal.nit:24 */
+  REGB0 = TAG_Int(0);
+  ATTR_global___dead_method_removal___Program____nb_not_removed_iroutines(fra.me.REG[0]) = REGB0;
+  /* global/reachable_as_init.nit:24 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_global___reachable_as_init___Program____rai(fra.me.REG[0]) = fra.me.REG[1];
+  /* global/instantiated_type_analysis.nit:23 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_global___instantiated_type_analysis___Program____ita(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_program___Program(void)
@@ -161992,40 +183079,40 @@ void CHECKNEW_program___Program(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_main_module", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_global___dead_method_removal___Program____nb_removed_iroutines(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_compiling___table_computation___Program____table_information(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_nb_removed_iroutines", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_table_information", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_global___dead_method_removal___Program____nb_not_removed_iroutines(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_compiling___table_computation___Program____compiled_classes(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_nb_not_removed_iroutines", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_compiled_classes", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_global___inline_get_and_set___Program____number_getter_setter_inlined(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_compiling___Program____output_format(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_number_getter_setter_inlined", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_output_format", LOCATE_nitc, 0);
   }
   REGB0 = TAG_Bool(ATTR_global___remove_out_of_init_get_test___Program____nb_optimized_isset(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_nb_optimized_isset", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_compiling___Program____output_format(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_global___inline_get_and_set___Program____number_getter_setter_inlined(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_output_format", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_number_getter_setter_inlined", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_compiling___table_computation___Program____table_information(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_global___dead_method_removal___Program____nb_removed_iroutines(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_table_information", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_nb_removed_iroutines", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_compiling___table_computation___Program____compiled_classes(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_global___dead_method_removal___Program____nb_not_removed_iroutines(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_compiled_classes", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_nb_not_removed_iroutines", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -162036,7 +183123,7 @@ val_t NEW_Program_program___Program___init(val_t p0, val_t p1){
   int init_table[2] = {0, 0};
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_nitc;
-  fra.me.line = 219;
+  fra.me.line = 222;
   fra.me.meth = LOCATE_NEW_Program_program___Program___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -162046,7 +183133,7 @@ val_t NEW_Program_program___Program___init(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* program.nit:219 */
+  /* program.nit:222 */
   fra.me.REG[2] = NEW_program___Program();
   INIT_ATTRIBUTES__program___Program(fra.me.REG[2]);
   program___Program___init(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1], init_table);
@@ -162055,12 +183142,12 @@ val_t NEW_Program_program___Program___init(val_t p0, val_t p1){
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_global___reachable_method_analysis___DefaultReachableMethodAnalysis[55] = {
-  {(bigint) 2751 /* 0: Identity */},
+  {(bigint) 3247 /* 0: Identity */},
   {(bigint) 2 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "DefaultReachableMethodAnalysis" /* 2: Class Name */},
   {(bigint) 3 /* 3: DefaultReachableMethodAnalysis < Object: superclass typecheck marker */},
   {(bigint) 71 /* 4: DefaultReachableMethodAnalysis < ReachableMethodAnalysis: superclass typecheck marker */},
-  {(bigint) 2751 /* 5: DefaultReachableMethodAnalysis < DefaultReachableMethodAnalysis: superclass typecheck marker */},
+  {(bigint) 3247 /* 5: DefaultReachableMethodAnalysis < DefaultReachableMethodAnalysis: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -162170,12 +183257,12 @@ val_t NEW_DefaultReachableMethodAnalysis_global___reachable_method_analysis___De
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_global___cha_analysis___ChaContext[56] = {
-  {(bigint) 2799 /* 0: Identity */},
+  {(bigint) 3295 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ChaContext" /* 2: Class Name */},
   {(bigint) 3 /* 3: ChaContext < Object: superclass typecheck marker */},
   {(bigint) 71 /* 4: ChaContext < ReachableMethodAnalysis: superclass typecheck marker */},
-  {(bigint) 2799 /* 5: ChaContext < ChaContext: superclass typecheck marker */},
+  {(bigint) 3295 /* 5: ChaContext < ChaContext: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -162446,12 +183533,12 @@ val_t NEW_ChaBuilder_global___cha_analysis___ChaBuilder___init(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_global___cha_analysis___ChaVisitor[62] = {
-  {(bigint) 2795 /* 0: Identity */},
+  {(bigint) 3291 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ChaVisitor" /* 2: Class Name */},
   {(bigint) 3 /* 3: ChaVisitor < Object: superclass typecheck marker */},
   {(bigint) 211 /* 4: ChaVisitor < ICodeVisitor: superclass typecheck marker */},
-  {(bigint) 2795 /* 5: ChaVisitor < ChaVisitor: superclass typecheck marker */},
+  {(bigint) 3291 /* 5: ChaVisitor < ChaVisitor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -162586,13 +183673,13 @@ val_t NEW_ChaVisitor_global___cha_analysis___ChaVisitor___init(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_global___instantiated_type_analysis___DefaultInstantiatedTypeAnalysis[57] = {
-  {(bigint) 2763 /* 0: Identity */},
+  {(bigint) 3259 /* 0: Identity */},
   {(bigint) 2 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "DefaultInstantiatedTypeAnalysis" /* 2: Class Name */},
   {(bigint) 3 /* 3: DefaultInstantiatedTypeAnalysis < Object: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {(bigint) 191 /* 5: DefaultInstantiatedTypeAnalysis < InstantiatedTypeAnalysis: superclass typecheck marker */},
-  {(bigint) 2763 /* 6: DefaultInstantiatedTypeAnalysis < DefaultInstantiatedTypeAnalysis: superclass typecheck marker */},
+  {(bigint) 3259 /* 6: DefaultInstantiatedTypeAnalysis < DefaultInstantiatedTypeAnalysis: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -163157,12 +184244,12 @@ val_t NEW_RtaVisitor_global___rta_analysis___RtaVisitor___init(val_t p0){
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_global___reachable_as_init___DefaultReachableAsInitAnalysis[54] = {
-  {(bigint) 2759 /* 0: Identity */},
+  {(bigint) 3255 /* 0: Identity */},
   {(bigint) 2 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "DefaultReachableAsInitAnalysis" /* 2: Class Name */},
   {(bigint) 3 /* 3: DefaultReachableAsInitAnalysis < Object: superclass typecheck marker */},
   {(bigint) 83 /* 4: DefaultReachableAsInitAnalysis < ReachableAsInitAnalysis: superclass typecheck marker */},
-  {(bigint) 2759 /* 5: DefaultReachableAsInitAnalysis < DefaultReachableAsInitAnalysis: superclass typecheck marker */},
+  {(bigint) 3255 /* 5: DefaultReachableAsInitAnalysis < DefaultReachableAsInitAnalysis: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -163409,12 +184496,12 @@ val_t NEW_ReachableAsInitBuilder_global___reachable_as_init_impl___ReachableAsIn
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_global___reachable_as_init_impl___ReachableAsInitAnalysisImpl[54] = {
-  {(bigint) 2503 /* 0: Identity */},
+  {(bigint) 2999 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ReachableAsInitAnalysisImpl" /* 2: Class Name */},
   {(bigint) 3 /* 3: ReachableAsInitAnalysisImpl < Object: superclass typecheck marker */},
   {(bigint) 83 /* 4: ReachableAsInitAnalysisImpl < ReachableAsInitAnalysis: superclass typecheck marker */},
-  {(bigint) 2503 /* 5: ReachableAsInitAnalysisImpl < ReachableAsInitAnalysisImpl: superclass typecheck marker */},
+  {(bigint) 2999 /* 5: ReachableAsInitAnalysisImpl < ReachableAsInitAnalysisImpl: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -163538,12 +184625,12 @@ val_t NEW_ReachableAsInitAnalysisImpl_global___reachable_as_init_impl___Reachabl
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_global___reachable_as_init_impl___RAIVisitor[62] = {
-  {(bigint) 2519 /* 0: Identity */},
+  {(bigint) 3015 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "RAIVisitor" /* 2: Class Name */},
   {(bigint) 3 /* 3: RAIVisitor < Object: superclass typecheck marker */},
   {(bigint) 211 /* 4: RAIVisitor < ICodeVisitor: superclass typecheck marker */},
-  {(bigint) 2519 /* 5: RAIVisitor < RAIVisitor: superclass typecheck marker */},
+  {(bigint) 3015 /* 5: RAIVisitor < RAIVisitor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -163678,12 +184765,12 @@ val_t NEW_RAIVisitor_global___reachable_as_init_impl___RAIVisitor___init(val_t p
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_global___reachable_from_init_method_analysis___DefaultReachableFromInitMethodAnalysis[55] = {
-  {(bigint) 2755 /* 0: Identity */},
+  {(bigint) 3251 /* 0: Identity */},
   {(bigint) 2 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "DefaultReachableFromInitMethodAnalysis" /* 2: Class Name */},
   {(bigint) 3 /* 3: DefaultReachableFromInitMethodAnalysis < Object: superclass typecheck marker */},
   {(bigint) 75 /* 4: DefaultReachableFromInitMethodAnalysis < ReachableFromInitMethodAnalysis: superclass typecheck marker */},
-  {(bigint) 2755 /* 5: DefaultReachableFromInitMethodAnalysis < DefaultReachableFromInitMethodAnalysis: superclass typecheck marker */},
+  {(bigint) 3251 /* 5: DefaultReachableFromInitMethodAnalysis < DefaultReachableFromInitMethodAnalysis: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -163931,12 +185018,12 @@ val_t NEW_RFIMABuilder_global___reachable_from_init_method_analysis_impl___RFIMA
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_global___reachable_from_init_method_analysis_impl___RFIMAContext[56] = {
-  {(bigint) 2515 /* 0: Identity */},
+  {(bigint) 3011 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "RFIMAContext" /* 2: Class Name */},
   {(bigint) 3 /* 3: RFIMAContext < Object: superclass typecheck marker */},
   {(bigint) 75 /* 4: RFIMAContext < ReachableFromInitMethodAnalysis: superclass typecheck marker */},
-  {(bigint) 2515 /* 5: RFIMAContext < RFIMAContext: superclass typecheck marker */},
+  {(bigint) 3011 /* 5: RFIMAContext < RFIMAContext: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -164061,12 +185148,12 @@ val_t NEW_RFIMAContext_global___reachable_from_init_method_analysis_impl___RFIMA
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_global___reachable_from_init_method_analysis_impl___RFIMAVisitor[64] = {
-  {(bigint) 2511 /* 0: Identity */},
+  {(bigint) 3007 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "RFIMAVisitor" /* 2: Class Name */},
   {(bigint) 3 /* 3: RFIMAVisitor < Object: superclass typecheck marker */},
   {(bigint) 211 /* 4: RFIMAVisitor < ICodeVisitor: superclass typecheck marker */},
-  {(bigint) 2511 /* 5: RFIMAVisitor < RFIMAVisitor: superclass typecheck marker */},
+  {(bigint) 3007 /* 5: RFIMAVisitor < RFIMAVisitor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -164211,12 +185298,12 @@ val_t NEW_RFIMAVisitor_global___reachable_from_init_method_analysis_impl___RFIMA
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_global___inline_get_and_set___InlineGetSetVisitor[62] = {
-  {(bigint) 2667 /* 0: Identity */},
+  {(bigint) 3163 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "InlineGetSetVisitor" /* 2: Class Name */},
   {(bigint) 3 /* 3: InlineGetSetVisitor < Object: superclass typecheck marker */},
   {(bigint) 211 /* 4: InlineGetSetVisitor < ICodeVisitor: superclass typecheck marker */},
-  {(bigint) 2667 /* 5: InlineGetSetVisitor < InlineGetSetVisitor: superclass typecheck marker */},
+  {(bigint) 3163 /* 5: InlineGetSetVisitor < InlineGetSetVisitor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -164294,12 +185381,12 @@ void INIT_ATTRIBUTES__global___inline_get_and_set___InlineGetSetVisitor(val_t p0
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* global/inline_get_and_set.nit:50 */
-  REGB0 = TAG_Int(0);
-  ATTR_global___inline_get_and_set___InlineGetSetVisitor____number_inlined(fra.me.REG[0]) = REGB0;
   /* icode/icode_tools.nit:29 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_tools___ICodeVisitor____current_icode(fra.me.REG[0]) = fra.me.REG[1];
+  /* global/inline_get_and_set.nit:50 */
+  REGB0 = TAG_Int(0);
+  ATTR_global___inline_get_and_set___InlineGetSetVisitor____number_inlined(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_global___inline_get_and_set___InlineGetSetVisitor(void)
@@ -164363,12 +185450,12 @@ val_t NEW_InlineGetSetVisitor_global___inline_get_and_set___InlineGetSetVisitor_
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_global___remove_out_of_init_get_test___IssetCounter[61] = {
-  {(bigint) 2659 /* 0: Identity */},
+  {(bigint) 3155 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IssetCounter" /* 2: Class Name */},
   {(bigint) 3 /* 3: IssetCounter < Object: superclass typecheck marker */},
   {(bigint) 211 /* 4: IssetCounter < ICodeVisitor: superclass typecheck marker */},
-  {(bigint) 2659 /* 5: IssetCounter < IssetCounter: superclass typecheck marker */},
+  {(bigint) 3155 /* 5: IssetCounter < IssetCounter: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -164444,12 +185531,12 @@ void INIT_ATTRIBUTES__global___remove_out_of_init_get_test___IssetCounter(val_t
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* global/remove_out_of_init_get_test.nit:59 */
-  REGB0 = TAG_Int(0);
-  ATTR_global___remove_out_of_init_get_test___IssetCounter____nb_isset(fra.me.REG[0]) = REGB0;
   /* icode/icode_tools.nit:29 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_tools___ICodeVisitor____current_icode(fra.me.REG[0]) = fra.me.REG[1];
+  /* global/remove_out_of_init_get_test.nit:59 */
+  REGB0 = TAG_Int(0);
+  ATTR_global___remove_out_of_init_get_test___IssetCounter____nb_isset(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_global___remove_out_of_init_get_test___IssetCounter(void)
@@ -164503,12 +185590,12 @@ val_t NEW_IssetCounter_icode___icode_tools___ICodeVisitor___init(void){
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_global___remove_out_of_init_get_test___GetterTestRemover[61] = {
-  {(bigint) 2723 /* 0: Identity */},
+  {(bigint) 3219 /* 0: Identity */},
   {(bigint) 4 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "GetterTestRemover" /* 2: Class Name */},
   {(bigint) 3 /* 3: GetterTestRemover < Object: superclass typecheck marker */},
   {(bigint) 211 /* 4: GetterTestRemover < ICodeVisitor: superclass typecheck marker */},
-  {(bigint) 2723 /* 5: GetterTestRemover < GetterTestRemover: superclass typecheck marker */},
+  {(bigint) 3219 /* 5: GetterTestRemover < GetterTestRemover: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -164584,12 +185671,12 @@ void INIT_ATTRIBUTES__global___remove_out_of_init_get_test___GetterTestRemover(v
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* global/remove_out_of_init_get_test.nit:73 */
-  REGB0 = TAG_Int(0);
-  ATTR_global___remove_out_of_init_get_test___GetterTestRemover____nb_optimized_isset(fra.me.REG[0]) = REGB0;
   /* icode/icode_tools.nit:29 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_tools___ICodeVisitor____current_icode(fra.me.REG[0]) = fra.me.REG[1];
+  /* global/remove_out_of_init_get_test.nit:73 */
+  REGB0 = TAG_Int(0);
+  ATTR_global___remove_out_of_init_get_test___GetterTestRemover____nb_optimized_isset(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_global___remove_out_of_init_get_test___GetterTestRemover(void)
@@ -165008,12 +186095,12 @@ void INIT_ATTRIBUTES__compiling_writer___WriterStrings(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* compiling_writer.nit:135 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_compiling_writer___WriterStrings____next(fra.me.REG[0]) = fra.me.REG[1];
   /* compiling_writer.nit:112 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_compiling_writer___WriterNode____next_writer(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling_writer.nit:135 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_compiling_writer___WriterStrings____next(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_compiling_writer___WriterStrings(void)
@@ -165455,12 +186542,12 @@ val_t NEW_CompilerVisitor_compiling___compiling_base___CompilerVisitor___init(va
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_analysis___allocate_iregister_slots___IRegisterSlotAllocationVisitor[68] = {
-  {(bigint) 2679 /* 0: Identity */},
+  {(bigint) 3175 /* 0: Identity */},
   {(bigint) 11 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "IRegisterSlotAllocationVisitor" /* 2: Class Name */},
   {(bigint) 3 /* 3: IRegisterSlotAllocationVisitor < Object: superclass typecheck marker */},
   {(bigint) 211 /* 4: IRegisterSlotAllocationVisitor < ICodeVisitor: superclass typecheck marker */},
-  {(bigint) 2679 /* 5: IRegisterSlotAllocationVisitor < IRegisterSlotAllocationVisitor: superclass typecheck marker */},
+  {(bigint) 3175 /* 5: IRegisterSlotAllocationVisitor < IRegisterSlotAllocationVisitor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -165550,6 +186637,9 @@ void INIT_ATTRIBUTES__analysis___allocate_iregister_slots___IRegisterSlotAllocat
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* icode/icode_tools.nit:29 */
+  fra.me.REG[1] = NIT_NULL;
+  ATTR_icode___icode_tools___ICodeVisitor____current_icode(fra.me.REG[0]) = fra.me.REG[1];
   /* analysis/allocate_iregister_slots.nit:34 */
   REGB0 = TAG_Int(0);
   ATTR_analysis___allocate_iregister_slots___IRegisterSlotAllocationVisitor____pass(fra.me.REG[0]) = REGB0;
@@ -165568,9 +186658,6 @@ void INIT_ATTRIBUTES__analysis___allocate_iregister_slots___IRegisterSlotAllocat
   /* analysis/allocate_iregister_slots.nit:185 */
   fra.me.REG[1] = NEW_SlotGroup_analysis___allocate_iregister_slots___SlotGroup___init();
   ATTR_analysis___allocate_iregister_slots___IRegisterSlotAllocationVisitor____tag_slots(fra.me.REG[0]) = fra.me.REG[1];
-  /* icode/icode_tools.nit:29 */
-  fra.me.REG[1] = NIT_NULL;
-  ATTR_icode___icode_tools___ICodeVisitor____current_icode(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_analysis___allocate_iregister_slots___IRegisterSlotAllocationVisitor(void)
@@ -166001,12 +187088,12 @@ val_t NEW_ICodeDumper_analysis___icode_dump___ICodeDumper___init(val_t p0, val_t
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_analysis___inline_methods___InlineMethodVisitor[61] = {
-  {(bigint) 2663 /* 0: Identity */},
+  {(bigint) 3159 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "InlineMethodVisitor" /* 2: Class Name */},
   {(bigint) 3 /* 3: InlineMethodVisitor < Object: superclass typecheck marker */},
   {(bigint) 211 /* 4: InlineMethodVisitor < ICodeVisitor: superclass typecheck marker */},
-  {(bigint) 2663 /* 5: InlineMethodVisitor < InlineMethodVisitor: superclass typecheck marker */},
+  {(bigint) 3159 /* 5: InlineMethodVisitor < InlineMethodVisitor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -166083,12 +187170,12 @@ void INIT_ATTRIBUTES__analysis___inline_methods___InlineMethodVisitor(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* analysis/inline_methods.nit:24 */
-  REGB0 = TAG_Int(0);
-  ATTR_analysis___inline_methods___InlineMethodVisitor____pass(fra.me.REG[0]) = REGB0;
   /* icode/icode_tools.nit:29 */
   fra.me.REG[1] = NIT_NULL;
   ATTR_icode___icode_tools___ICodeVisitor____current_icode(fra.me.REG[0]) = fra.me.REG[1];
+  /* analysis/inline_methods.nit:24 */
+  REGB0 = TAG_Int(0);
+  ATTR_analysis___inline_methods___InlineMethodVisitor____pass(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_analysis___inline_methods___InlineMethodVisitor(void)
@@ -166152,12 +187239,12 @@ val_t NEW_InlineMethodVisitor_analysis___inline_methods___InlineMethodVisitor___
   return fra.me.REG[2];
 }
 const classtable_elt_t VFT_compiling___icode_generator___FileICodeDumper[66] = {
-  {(bigint) 2727 /* 0: Identity */},
+  {(bigint) 3223 /* 0: Identity */},
   {(bigint) 11 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "FileICodeDumper" /* 2: Class Name */},
   {(bigint) 3 /* 3: FileICodeDumper < Object: superclass typecheck marker */},
   {(bigint) 219 /* 4: FileICodeDumper < ICodeDumper: superclass typecheck marker */},
-  {(bigint) 2727 /* 5: FileICodeDumper < FileICodeDumper: superclass typecheck marker */},
+  {(bigint) 3223 /* 5: FileICodeDumper < FileICodeDumper: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -166288,11 +187375,6 @@ void CHECKNEW_compiling___icode_generator___FileICodeDumper(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_compiling___icode_generator___FileICodeDumper____file(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_file", LOCATE_nitc, 0);
-  }
   REGB0 = TAG_Bool(ATTR_analysis___icode_dump___ICodeDumper____dump_locations(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -166333,6 +187415,11 @@ void CHECKNEW_compiling___icode_generator___FileICodeDumper(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_indent_level", LOCATE_nitc, 0);
   }
+  REGB0 = TAG_Bool(ATTR_compiling___icode_generator___FileICodeDumper____file(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_file", LOCATE_nitc, 0);
+  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_FileICodeDumper_compiling___icode_generator___FileICodeDumper___init[] = "new FileICodeDumper icode_generator::FileICodeDumper::init";
@@ -166437,12 +187524,12 @@ void INIT_ATTRIBUTES__compiling___table_computation___TableInformation(val_t p0)
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* compiling/table_computation.nit:57 */
-  REGB0 = TAG_Int(0);
-  ATTR_compiling___table_computation___TableInformation____max_class_table_length(fra.me.REG[0]) = REGB0;
   /* compiling/table_computation.nit:27 */
   fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
   ATTR_compiling___table_computation___ColorContext____colors(fra.me.REG[0]) = fra.me.REG[1];
+  /* compiling/table_computation.nit:57 */
+  REGB0 = TAG_Int(0);
+  ATTR_compiling___table_computation___TableInformation____max_class_table_length(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_compiling___table_computation___TableInformation(void)
@@ -166468,15 +187555,15 @@ void CHECKNEW_compiling___table_computation___TableInformation(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_compiling___table_computation___TableInformation____max_class_table_length(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_compiling___table_computation___ColorContext____colors(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_max_class_table_length", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_colors", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_compiling___table_computation___ColorContext____colors(fra.me.REG[0])!=NIT_NULL);
+  REGB0 = TAG_Bool(ATTR_compiling___table_computation___TableInformation____max_class_table_length(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_colors", LOCATE_nitc, 0);
+    nit_abort("Uninitialized attribute %s", "_max_class_table_length", LOCATE_nitc, 0);
   }
   stack_frame_head = fra.me.prev;
 }
@@ -166501,12 +187588,12 @@ val_t NEW_TableInformation_compiling___table_computation___ColorContext___init(v
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_compiling___table_computation___CompiledClass[66] = {
-  {(bigint) 2783 /* 0: Identity */},
+  {(bigint) 3279 /* 0: Identity */},
   {(bigint) 9 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "CompiledClass" /* 2: Class Name */},
   {(bigint) 3 /* 3: CompiledClass < Object: superclass typecheck marker */},
   {(bigint) 279 /* 4: CompiledClass < ColorContext: superclass typecheck marker */},
-  {(bigint) 2783 /* 5: CompiledClass < CompiledClass: superclass typecheck marker */},
+  {(bigint) 3279 /* 5: CompiledClass < CompiledClass: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -166592,6 +187679,9 @@ void INIT_ATTRIBUTES__compiling___table_computation___CompiledClass(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* compiling/table_computation.nit:27 */
+  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
+  ATTR_compiling___table_computation___ColorContext____colors(fra.me.REG[0]) = fra.me.REG[1];
   /* compiling/table_computation.nit:67 */
   REGB0 = TAG_Int(0);
   ATTR_compiling___table_computation___CompiledClass____id(fra.me.REG[0]) = REGB0;
@@ -166611,9 +187701,6 @@ void INIT_ATTRIBUTES__compiling___table_computation___CompiledClass(val_t p0){
   /* compiling/table_computation.nit:79 */
   fra.me.REG[1] = NEW_TableEltComposite_compiling___table_computation___TableEltComposite___init(fra.me.REG[1]);
   ATTR_compiling___table_computation___CompiledClass____instance_layout(fra.me.REG[0]) = fra.me.REG[1];
-  /* compiling/table_computation.nit:27 */
-  fra.me.REG[1] = NEW_HashMap_standard___collection___hash_collection___HashMap___init();
-  ATTR_compiling___table_computation___ColorContext____colors(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
 }
 val_t NEW_compiling___table_computation___CompiledClass(void)
@@ -166639,6 +187726,11 @@ void CHECKNEW_compiling___table_computation___CompiledClass(val_t p0){
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  REGB0 = TAG_Bool(ATTR_compiling___table_computation___ColorContext____colors(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_colors", LOCATE_nitc, 0);
+  }
   REGB0 = TAG_Bool(ATTR_compiling___table_computation___CompiledClass____local_class(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -166669,11 +187761,6 @@ void CHECKNEW_compiling___table_computation___CompiledClass(val_t p0){
   } else {
     nit_abort("Uninitialized attribute %s", "_instance_layout", LOCATE_nitc, 0);
   }
-  REGB0 = TAG_Bool(ATTR_compiling___table_computation___ColorContext____colors(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_colors", LOCATE_nitc, 0);
-  }
   stack_frame_head = fra.me.prev;
 }
 static const char LOCATE_NEW_CompiledClass_compiling___table_computation___CompiledClass___init[] = "new CompiledClass table_computation::CompiledClass::init";
@@ -166700,14 +187787,14 @@ val_t NEW_CompiledClass_compiling___table_computation___CompiledClass___init(val
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_compiling___table_computation___ModuleTableEltGroup[62] = {
-  {(bigint) 2995 /* 0: Identity */},
+  {(bigint) 3495 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ModuleTableEltGroup" /* 2: Class Name */},
   {(bigint) 3 /* 3: ModuleTableEltGroup < Object: superclass typecheck marker */},
   {(bigint) 311 /* 4: ModuleTableEltGroup < AbsTableElt: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 2563 /* 6: ModuleTableEltGroup < ModuleTableElt: superclass typecheck marker */},
-  {(bigint) 2995 /* 7: ModuleTableEltGroup < ModuleTableEltGroup: superclass typecheck marker */},
+  {(bigint) 3059 /* 6: ModuleTableEltGroup < ModuleTableElt: superclass typecheck marker */},
+  {(bigint) 3495 /* 7: ModuleTableEltGroup < ModuleTableEltGroup: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -166836,14 +187923,14 @@ val_t NEW_ModuleTableEltGroup_compiling___table_computation___ModuleTableEltGrou
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_compiling___table_computation___TableEltMeth[61] = {
-  {(bigint) 3359 /* 0: Identity */},
+  {(bigint) 3875 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TableEltMeth" /* 2: Class Name */},
   {(bigint) 3 /* 3: TableEltMeth < Object: superclass typecheck marker */},
   {(bigint) 311 /* 4: TableEltMeth < AbsTableElt: superclass typecheck marker */},
   {(bigint) 343 /* 5: TableEltMeth < TableElt: superclass typecheck marker */},
-  {(bigint) 2851 /* 6: TableEltMeth < TableEltProp: superclass typecheck marker */},
-  {(bigint) 3359 /* 7: TableEltMeth < TableEltMeth: superclass typecheck marker */},
+  {(bigint) 3347 /* 6: TableEltMeth < TableEltProp: superclass typecheck marker */},
+  {(bigint) 3875 /* 7: TableEltMeth < TableEltMeth: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -166968,14 +188055,14 @@ val_t NEW_TableEltMeth_compiling___table_computation___TableEltProp___init(val_t
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_compiling___table_computation___TableEltVTClassColor[61] = {
-  {(bigint) 3351 /* 0: Identity */},
+  {(bigint) 3867 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TableEltVTClassColor" /* 2: Class Name */},
   {(bigint) 3 /* 3: TableEltVTClassColor < Object: superclass typecheck marker */},
   {(bigint) 311 /* 4: TableEltVTClassColor < AbsTableElt: superclass typecheck marker */},
   {(bigint) 343 /* 5: TableEltVTClassColor < TableElt: superclass typecheck marker */},
-  {(bigint) 2851 /* 6: TableEltVTClassColor < TableEltProp: superclass typecheck marker */},
-  {(bigint) 3351 /* 7: TableEltVTClassColor < TableEltVTClassColor: superclass typecheck marker */},
+  {(bigint) 3347 /* 6: TableEltVTClassColor < TableEltProp: superclass typecheck marker */},
+  {(bigint) 3867 /* 7: TableEltVTClassColor < TableEltVTClassColor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -167100,14 +188187,14 @@ val_t NEW_TableEltVTClassColor_compiling___table_computation___TableEltProp___in
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_compiling___table_computation___TableEltVTClassId[61] = {
-  {(bigint) 3347 /* 0: Identity */},
+  {(bigint) 3863 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TableEltVTClassId" /* 2: Class Name */},
   {(bigint) 3 /* 3: TableEltVTClassId < Object: superclass typecheck marker */},
   {(bigint) 311 /* 4: TableEltVTClassId < AbsTableElt: superclass typecheck marker */},
   {(bigint) 343 /* 5: TableEltVTClassId < TableElt: superclass typecheck marker */},
-  {(bigint) 2851 /* 6: TableEltVTClassId < TableEltProp: superclass typecheck marker */},
-  {(bigint) 3347 /* 7: TableEltVTClassId < TableEltVTClassId: superclass typecheck marker */},
+  {(bigint) 3347 /* 6: TableEltVTClassId < TableEltProp: superclass typecheck marker */},
+  {(bigint) 3863 /* 7: TableEltVTClassId < TableEltVTClassId: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -167232,14 +188319,14 @@ val_t NEW_TableEltVTClassId_compiling___table_computation___TableEltProp___init(
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_compiling___table_computation___TableEltSuper[61] = {
-  {(bigint) 3355 /* 0: Identity */},
+  {(bigint) 3871 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TableEltSuper" /* 2: Class Name */},
   {(bigint) 3 /* 3: TableEltSuper < Object: superclass typecheck marker */},
   {(bigint) 311 /* 4: TableEltSuper < AbsTableElt: superclass typecheck marker */},
   {(bigint) 343 /* 5: TableEltSuper < TableElt: superclass typecheck marker */},
-  {(bigint) 2851 /* 6: TableEltSuper < TableEltProp: superclass typecheck marker */},
-  {(bigint) 3355 /* 7: TableEltSuper < TableEltSuper: superclass typecheck marker */},
+  {(bigint) 3347 /* 6: TableEltSuper < TableEltProp: superclass typecheck marker */},
+  {(bigint) 3871 /* 7: TableEltSuper < TableEltSuper: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -167364,14 +188451,14 @@ val_t NEW_TableEltSuper_compiling___table_computation___TableEltProp___init(val_
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_compiling___table_computation___TableEltAttr[61] = {
-  {(bigint) 3371 /* 0: Identity */},
+  {(bigint) 3887 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TableEltAttr" /* 2: Class Name */},
   {(bigint) 3 /* 3: TableEltAttr < Object: superclass typecheck marker */},
   {(bigint) 311 /* 4: TableEltAttr < AbsTableElt: superclass typecheck marker */},
   {(bigint) 343 /* 5: TableEltAttr < TableElt: superclass typecheck marker */},
-  {(bigint) 2851 /* 6: TableEltAttr < TableEltProp: superclass typecheck marker */},
-  {(bigint) 3371 /* 7: TableEltAttr < TableEltAttr: superclass typecheck marker */},
+  {(bigint) 3347 /* 6: TableEltAttr < TableEltProp: superclass typecheck marker */},
+  {(bigint) 3887 /* 7: TableEltAttr < TableEltAttr: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -167496,14 +188583,14 @@ val_t NEW_TableEltAttr_compiling___table_computation___TableEltProp___init(val_t
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_compiling___table_computation___TableEltClassId[63] = {
-  {(bigint) 2875 /* 0: Identity */},
+  {(bigint) 3371 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TableEltClassId" /* 2: Class Name */},
   {(bigint) 3 /* 3: TableEltClassId < Object: superclass typecheck marker */},
   {(bigint) 311 /* 4: TableEltClassId < AbsTableElt: superclass typecheck marker */},
-  {(bigint) 2875 /* 5: TableEltClassId < TableEltClassId: superclass typecheck marker */},
-  {(bigint) 2563 /* 6: TableEltClassId < ModuleTableElt: superclass typecheck marker */},
-  {(bigint) 2819 /* 7: TableEltClassId < AbsTableEltClass: superclass typecheck marker */},
+  {(bigint) 3371 /* 5: TableEltClassId < TableEltClassId: superclass typecheck marker */},
+  {(bigint) 3059 /* 6: TableEltClassId < ModuleTableElt: superclass typecheck marker */},
+  {(bigint) 3315 /* 7: TableEltClassId < AbsTableEltClass: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -167630,16 +188717,16 @@ val_t NEW_TableEltClassId_compiling___table_computation___AbsTableEltClass___ini
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_compiling___table_computation___TableEltClassInitTable[65] = {
-  {(bigint) 3363 /* 0: Identity */},
+  {(bigint) 3879 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TableEltClassInitTable" /* 2: Class Name */},
   {(bigint) 3 /* 3: TableEltClassInitTable < Object: superclass typecheck marker */},
   {(bigint) 311 /* 4: TableEltClassInitTable < AbsTableElt: superclass typecheck marker */},
   {(bigint) 343 /* 5: TableEltClassInitTable < TableElt: superclass typecheck marker */},
   {0} /* Class Hole :( */,
-  {(bigint) 2819 /* 7: TableEltClassInitTable < AbsTableEltClass: superclass typecheck marker */},
-  {(bigint) 2879 /* 8: TableEltClassInitTable < TableEltClass: superclass typecheck marker */},
-  {(bigint) 3363 /* 9: TableEltClassInitTable < TableEltClassInitTable: superclass typecheck marker */},
+  {(bigint) 3315 /* 7: TableEltClassInitTable < AbsTableEltClass: superclass typecheck marker */},
+  {(bigint) 3375 /* 8: TableEltClassInitTable < TableEltClass: superclass typecheck marker */},
+  {(bigint) 3879 /* 9: TableEltClassInitTable < TableEltClassInitTable: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -167766,16 +188853,16 @@ val_t NEW_TableEltClassInitTable_compiling___table_computation___AbsTableEltClas
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_compiling___table_computation___TableEltClassColor[65] = {
-  {(bigint) 3367 /* 0: Identity */},
+  {(bigint) 3883 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TableEltClassColor" /* 2: Class Name */},
   {(bigint) 3 /* 3: TableEltClassColor < Object: superclass typecheck marker */},
   {(bigint) 311 /* 4: TableEltClassColor < AbsTableElt: superclass typecheck marker */},
   {(bigint) 343 /* 5: TableEltClassColor < TableElt: superclass typecheck marker */},
-  {(bigint) 2563 /* 6: TableEltClassColor < ModuleTableElt: superclass typecheck marker */},
-  {(bigint) 2819 /* 7: TableEltClassColor < AbsTableEltClass: superclass typecheck marker */},
-  {(bigint) 2879 /* 8: TableEltClassColor < TableEltClass: superclass typecheck marker */},
-  {(bigint) 3367 /* 9: TableEltClassColor < TableEltClassColor: superclass typecheck marker */},
+  {(bigint) 3059 /* 6: TableEltClassColor < ModuleTableElt: superclass typecheck marker */},
+  {(bigint) 3315 /* 7: TableEltClassColor < AbsTableEltClass: superclass typecheck marker */},
+  {(bigint) 3375 /* 8: TableEltClassColor < TableEltClass: superclass typecheck marker */},
+  {(bigint) 3883 /* 9: TableEltClassColor < TableEltClassColor: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -167902,13 +188989,13 @@ val_t NEW_TableEltClassColor_compiling___table_computation___AbsTableEltClass___
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_compiling___table_computation___TableEltComposite[60] = {
-  {(bigint) 2859 /* 0: Identity */},
+  {(bigint) 3355 /* 0: Identity */},
   {(bigint) 5 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TableEltComposite" /* 2: Class Name */},
   {(bigint) 3 /* 3: TableEltComposite < Object: superclass typecheck marker */},
   {(bigint) 311 /* 4: TableEltComposite < AbsTableElt: superclass typecheck marker */},
   {(bigint) 343 /* 5: TableEltComposite < TableElt: superclass typecheck marker */},
-  {(bigint) 2859 /* 6: TableEltComposite < TableEltComposite: superclass typecheck marker */},
+  {(bigint) 3355 /* 6: TableEltComposite < TableEltComposite: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -168045,13 +189132,13 @@ val_t NEW_TableEltComposite_compiling___table_computation___TableEltComposite___
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_compiling___table_computation___TableEltClassSelfId[59] = {
-  {(bigint) 2867 /* 0: Identity */},
+  {(bigint) 3363 /* 0: Identity */},
   {(bigint) 2 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TableEltClassSelfId" /* 2: Class Name */},
   {(bigint) 3 /* 3: TableEltClassSelfId < Object: superclass typecheck marker */},
   {(bigint) 311 /* 4: TableEltClassSelfId < AbsTableElt: superclass typecheck marker */},
   {(bigint) 343 /* 5: TableEltClassSelfId < TableElt: superclass typecheck marker */},
-  {(bigint) 2867 /* 6: TableEltClassSelfId < TableEltClassSelfId: superclass typecheck marker */},
+  {(bigint) 3363 /* 6: TableEltClassSelfId < TableEltClassSelfId: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -168163,13 +189250,13 @@ val_t NEW_TableEltClassSelfId_compiling___table_computation___TableEltClassSelfI
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_compiling___table_computation___TableEltClassSelfName[59] = {
-  {(bigint) 2863 /* 0: Identity */},
+  {(bigint) 3359 /* 0: Identity */},
   {(bigint) 2 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TableEltClassSelfName" /* 2: Class Name */},
   {(bigint) 3 /* 3: TableEltClassSelfName < Object: superclass typecheck marker */},
   {(bigint) 311 /* 4: TableEltClassSelfName < AbsTableElt: superclass typecheck marker */},
   {(bigint) 343 /* 5: TableEltClassSelfName < TableElt: superclass typecheck marker */},
-  {(bigint) 2863 /* 6: TableEltClassSelfName < TableEltClassSelfName: superclass typecheck marker */},
+  {(bigint) 3359 /* 6: TableEltClassSelfName < TableEltClassSelfName: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -168281,13 +189368,13 @@ val_t NEW_TableEltClassSelfName_compiling___table_computation___TableEltClassSel
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_compiling___table_computation___TableEltClassObjectSize[59] = {
-  {(bigint) 2871 /* 0: Identity */},
+  {(bigint) 3367 /* 0: Identity */},
   {(bigint) 2 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TableEltClassObjectSize" /* 2: Class Name */},
   {(bigint) 3 /* 3: TableEltClassObjectSize < Object: superclass typecheck marker */},
   {(bigint) 311 /* 4: TableEltClassObjectSize < AbsTableElt: superclass typecheck marker */},
   {(bigint) 343 /* 5: TableEltClassObjectSize < TableElt: superclass typecheck marker */},
-  {(bigint) 2871 /* 6: TableEltClassObjectSize < TableEltClassObjectSize: superclass typecheck marker */},
+  {(bigint) 3367 /* 6: TableEltClassObjectSize < TableEltClassObjectSize: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -168399,13 +189486,13 @@ val_t NEW_TableEltClassObjectSize_compiling___table_computation___TableEltClassO
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_compiling___table_computation___TableEltObjectId[59] = {
-  {(bigint) 2855 /* 0: Identity */},
+  {(bigint) 3351 /* 0: Identity */},
   {(bigint) 2 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TableEltObjectId" /* 2: Class Name */},
   {(bigint) 3 /* 3: TableEltObjectId < Object: superclass typecheck marker */},
   {(bigint) 311 /* 4: TableEltObjectId < AbsTableElt: superclass typecheck marker */},
   {(bigint) 343 /* 5: TableEltObjectId < TableElt: superclass typecheck marker */},
-  {(bigint) 2855 /* 6: TableEltObjectId < TableEltObjectId: superclass typecheck marker */},
+  {(bigint) 3351 /* 6: TableEltObjectId < TableEltObjectId: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -168517,13 +189604,13 @@ val_t NEW_TableEltObjectId_compiling___table_computation___TableEltObjectId___in
   return fra.me.REG[0];
 }
 const classtable_elt_t VFT_compiling___table_computation___TableEltVftPointer[59] = {
-  {(bigint) 2847 /* 0: Identity */},
+  {(bigint) 3343 /* 0: Identity */},
   {(bigint) 2 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "TableEltVftPointer" /* 2: Class Name */},
   {(bigint) 3 /* 3: TableEltVftPointer < Object: superclass typecheck marker */},
   {(bigint) 311 /* 4: TableEltVftPointer < AbsTableElt: superclass typecheck marker */},
   {(bigint) 343 /* 5: TableEltVftPointer < TableElt: superclass typecheck marker */},
-  {(bigint) 2847 /* 6: TableEltVftPointer < TableEltVftPointer: superclass typecheck marker */},
+  {(bigint) 3343 /* 6: TableEltVftPointer < TableEltVftPointer: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
@@ -169049,12 +190136,12 @@ val_t NEW_FunctionCompiler_native_interface___ni_tools___FunctionCompiler___init
   return fra.me.REG[1];
 }
 const classtable_elt_t VFT_native_interface___frontier___ReceiverVariable[63] = {
-  {(bigint) 2499 /* 0: Identity */},
+  {(bigint) 2995 /* 0: Identity */},
   {(bigint) 3 /* 1: Object size (-1 if a NativeArray)*/},
   {(bigint) "ReceiverVariable" /* 2: Class Name */},
   {(bigint) 3 /* 3: ReceiverVariable < Object: superclass typecheck marker */},
   {(bigint) 119 /* 4: ReceiverVariable < NiVariable: superclass typecheck marker */},
-  {(bigint) 2499 /* 5: ReceiverVariable < ReceiverVariable: superclass typecheck marker */},
+  {(bigint) 2995 /* 5: ReceiverVariable < ReceiverVariable: superclass typecheck marker */},
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
   {0} /* Class Hole :( */,
index e3963cd..7bbc80e 100644 (file)
@@ -1320,7 +1320,7 @@ val_t opts___OptionEnum___value_name(val_t p0){
   if (UNTAG_Bool(REGB1)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB0)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label1;
@@ -1438,7 +1438,7 @@ val_t opts___OptionEnum___pretty_default(val_t p0){
     if (UNTAG_Bool(REGB1)) {
       nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
     }
-    /* ../lib/standard/collection/array.nit:718 */
+    /* ../lib/standard/collection/array.nit:724 */
     fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
     /* ../lib/standard/collection/array.nit:281 */
     goto label2;
@@ -1750,7 +1750,7 @@ void opts___OptionContext___usage(val_t p0){
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB1)];
       /* ../lib/opts.nit:240 */
       REGB2 = TAG_Int(3);
@@ -1790,7 +1790,7 @@ void opts___OptionContext___usage(val_t p0){
           if (UNTAG_Bool(REGB4)) {
             nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
           }
-          /* ../lib/standard/collection/array.nit:718 */
+          /* ../lib/standard/collection/array.nit:724 */
           fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB3)];
           /* ../lib/standard/collection/array.nit:24 */
           REGB4 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[5])!=NIT_NULL);
@@ -1882,7 +1882,7 @@ void opts___OptionContext___usage(val_t p0){
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB1)];
       /* ../lib/opts.nit:248 */
       fra.me.REG[4] = CALL_opts___Option___pretty(fra.me.REG[4])(fra.me.REG[4], REGB0);
@@ -2197,7 +2197,7 @@ void opts___OptionContext___parse_intern(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* ../lib/opts.nit:301 */
       REGB2 = CALL_opts___Option___mandatory(fra.me.REG[3])(fra.me.REG[3]);
@@ -2327,7 +2327,7 @@ void opts___OptionContext___add_option(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)];
       /* ../lib/opts.nit:310 */
       REGB1 = TAG_Bool(ATTR_opts___OptionContext____options(fra.me.REG[2])!=NIT_NULL);
@@ -2449,7 +2449,7 @@ void opts___OptionContext___build(val_t p0){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* ../lib/opts.nit:325 */
       fra.me.REG[4] = CALL_opts___Option___names(fra.me.REG[3])(fra.me.REG[3]);
@@ -2487,7 +2487,7 @@ void opts___OptionContext___build(val_t p0){
           if (UNTAG_Bool(REGB2)) {
             nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
           }
-          /* ../lib/standard/collection/array.nit:718 */
+          /* ../lib/standard/collection/array.nit:724 */
           fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB1)];
           /* ../lib/opts.nit:326 */
           REGB2 = TAG_Bool(ATTR_opts___OptionContext____optmap(fra.me.REG[0])!=NIT_NULL);
@@ -2597,7 +2597,7 @@ val_t opts___OptionContext___get_errors(val_t p0){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* ../lib/opts.nit:338 */
       fra.me.REG[3] = CALL_opts___Option___errors(fra.me.REG[3])(fra.me.REG[3]);
@@ -2635,7 +2635,7 @@ val_t opts___OptionContext___get_errors(val_t p0){
           if (UNTAG_Bool(REGB2)) {
             nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
           }
-          /* ../lib/standard/collection/array.nit:718 */
+          /* ../lib/standard/collection/array.nit:724 */
           fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB1)];
           /* ../lib/opts.nit:339 */
           CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
index f102e5d..77ad566 100644 (file)
@@ -361,7 +361,7 @@ void parser___Parser___push(val_t p0, val_t p1, val_t p2){
     if (UNTAG_Bool(REGB1)) {
       nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
     }
-    /* ../lib/standard/collection/array.nit:718 */
+    /* ../lib/standard/collection/array.nit:724 */
     fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB2)];
     /* ../lib/standard/collection/array.nit:281 */
     goto label1;
@@ -453,7 +453,7 @@ val_t parser___Parser___state(val_t p0){
   if (UNTAG_Bool(REGB1)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB0)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label1;
@@ -538,7 +538,7 @@ val_t parser___Parser___pop(val_t p0){
   if (UNTAG_Bool(REGB1)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB0)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label1;
@@ -791,7 +791,7 @@ val_t parser___Parser___parse(val_t p0){
         if (UNTAG_Bool(REGB0)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB3)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label3;
@@ -874,8 +874,8 @@ val_t parser___Parser___parse(val_t p0){
             fra.me.REG[5] = fra.me.REG[5];
             CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
             fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
-            fra.me.REG[2] = CALL_parser___parser_nodes___ANode___location(fra.me.REG[2])(fra.me.REG[2]);
-            fra.me.REG[2] = NEW_AError_parser___lexer___AError___init_error(fra.me.REG[4], fra.me.REG[2]);
+            fra.me.REG[5] = CALL_parser___parser_nodes___ANode___location(fra.me.REG[2])(fra.me.REG[2]);
+            fra.me.REG[2] = NEW_AParserError_parser___lexer___AParserError___init_parser_error(fra.me.REG[4], fra.me.REG[5], fra.me.REG[2]);
             /* parser/parser.nit:145 */
             fra.me.REG[2] = NEW_Start_parser___parser_nodes___Start___init(NIT_NULL, fra.me.REG[2]);
             /* parser/parser.nit:146 */
@@ -907,7 +907,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   /* parser/parser.nit:154 */
-  REGB0 = TAG_Int(865);
+  REGB0 = TAG_Int(1291);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   /* parser/parser.nit:155 */
   REGB0 = TAG_Int(0);
@@ -1235,7 +1235,7 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:220 */
-  REGB0 = TAG_Int(2);
+  REGB0 = TAG_Int(1);
   fra.me.REG[2] = NEW_ReduceAction65_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -1245,33 +1245,33 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:222 */
-  REGB0 = TAG_Int(3);
+  REGB0 = TAG_Int(2);
   fra.me.REG[2] = NEW_ReduceAction67_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:223 */
-  REGB0 = TAG_Int(3);
+  REGB0 = TAG_Int(2);
   fra.me.REG[2] = NEW_ReduceAction68_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:224 */
-  REGB0 = TAG_Int(4);
+  REGB0 = TAG_Int(3);
   fra.me.REG[2] = NEW_ReduceAction69_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:225 */
-  REGB0 = TAG_Int(4);
-  fra.me.REG[2] = NEW_ReduceAction69_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(3);
+  fra.me.REG[2] = NEW_ReduceAction70_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:226 */
-  REGB0 = TAG_Int(5);
+  REGB0 = TAG_Int(4);
   fra.me.REG[2] = NEW_ReduceAction71_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:227 */
-  REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction72_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(4);
+  fra.me.REG[2] = NEW_ReduceAction71_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:228 */
@@ -1425,252 +1425,252 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:258 */
-  REGB0 = TAG_Int(6);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction103_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:259 */
-  REGB0 = TAG_Int(6);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction104_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:260 */
-  REGB0 = TAG_Int(6);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction105_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:261 */
-  REGB0 = TAG_Int(6);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction106_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:262 */
-  REGB0 = TAG_Int(6);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction107_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:263 */
-  REGB0 = TAG_Int(7);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction108_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:264 */
-  REGB0 = TAG_Int(7);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction109_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:265 */
-  REGB0 = TAG_Int(8);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction110_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:266 */
-  REGB0 = TAG_Int(9);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction111_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:267 */
-  REGB0 = TAG_Int(9);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction112_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:268 */
-  REGB0 = TAG_Int(10);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction113_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:269 */
-  REGB0 = TAG_Int(10);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction114_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:270 */
-  REGB0 = TAG_Int(11);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction115_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:271 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction116_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:272 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction117_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:273 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction118_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:274 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction119_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:275 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction120_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:276 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction121_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:277 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction122_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:278 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction123_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:279 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction124_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:280 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction125_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:281 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction126_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:282 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction127_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:283 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction128_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:284 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction129_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:285 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction130_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:286 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction131_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:287 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction132_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:288 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction133_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:289 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction134_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:290 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction135_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:291 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_ReduceAction136_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:292 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(6);
   fra.me.REG[2] = NEW_ReduceAction137_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:293 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(6);
   fra.me.REG[2] = NEW_ReduceAction138_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:294 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(6);
   fra.me.REG[2] = NEW_ReduceAction139_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:295 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(6);
   fra.me.REG[2] = NEW_ReduceAction140_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:296 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(6);
   fra.me.REG[2] = NEW_ReduceAction141_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:297 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(6);
   fra.me.REG[2] = NEW_ReduceAction142_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:298 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(7);
   fra.me.REG[2] = NEW_ReduceAction143_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:299 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(7);
   fra.me.REG[2] = NEW_ReduceAction144_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:300 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(8);
   fra.me.REG[2] = NEW_ReduceAction145_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:301 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(9);
   fra.me.REG[2] = NEW_ReduceAction146_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:302 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(9);
   fra.me.REG[2] = NEW_ReduceAction147_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:303 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(9);
   fra.me.REG[2] = NEW_ReduceAction148_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:304 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(9);
   fra.me.REG[2] = NEW_ReduceAction149_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:305 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(10);
   fra.me.REG[2] = NEW_ReduceAction150_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:306 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(10);
   fra.me.REG[2] = NEW_ReduceAction151_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:307 */
-  REGB0 = TAG_Int(12);
+  REGB0 = TAG_Int(11);
   fra.me.REG[2] = NEW_ReduceAction152_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -2170,3767 +2170,17932 @@ void parser___Parser___build_reduce_table(val_t p0){
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:407 */
-  REGB0 = TAG_Int(13);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction252_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:408 */
-  REGB0 = TAG_Int(13);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:409 */
-  REGB0 = TAG_Int(14);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction254_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:410 */
-  REGB0 = TAG_Int(14);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction255_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:411 */
-  REGB0 = TAG_Int(15);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction256_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:412 */
-  REGB0 = TAG_Int(15);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction257_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:413 */
-  REGB0 = TAG_Int(16);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction258_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:414 */
-  REGB0 = TAG_Int(16);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction259_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:415 */
-  REGB0 = TAG_Int(16);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction260_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:416 */
-  REGB0 = TAG_Int(16);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction261_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:417 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction262_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:418 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction263_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:419 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction264_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:420 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:421 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:422 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction267_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:423 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction268_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:424 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction269_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:425 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:426 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction271_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:427 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:428 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:429 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction274_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:430 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction275_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:431 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction276_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:432 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction277_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:433 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction278_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:434 */
-  REGB0 = TAG_Int(17);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction279_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:435 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction280_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:436 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction281_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:437 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction282_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:438 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction283_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:439 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction284_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:440 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction285_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:441 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction286_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:442 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction287_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:443 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction288_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:444 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction289_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:445 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction290_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:446 */
-  REGB0 = TAG_Int(18);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction291_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:447 */
-  REGB0 = TAG_Int(19);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction292_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:448 */
-  REGB0 = TAG_Int(19);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction293_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:449 */
-  REGB0 = TAG_Int(19);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction294_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:450 */
-  REGB0 = TAG_Int(19);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction295_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:451 */
-  REGB0 = TAG_Int(19);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction296_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:452 */
-  REGB0 = TAG_Int(19);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction297_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:453 */
-  REGB0 = TAG_Int(20);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction298_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:454 */
-  REGB0 = TAG_Int(20);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction299_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:455 */
-  REGB0 = TAG_Int(21);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction300_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:456 */
-  REGB0 = TAG_Int(22);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:457 */
-  REGB0 = TAG_Int(22);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction302_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:458 */
-  REGB0 = TAG_Int(22);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction303_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:459 */
-  REGB0 = TAG_Int(23);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:460 */
-  REGB0 = TAG_Int(24);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:461 */
-  REGB0 = TAG_Int(24);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction306_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:462 */
-  REGB0 = TAG_Int(24);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction307_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:463 */
-  REGB0 = TAG_Int(24);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction308_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:464 */
-  REGB0 = TAG_Int(24);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:465 */
-  REGB0 = TAG_Int(24);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:466 */
-  REGB0 = TAG_Int(25);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:467 */
-  REGB0 = TAG_Int(26);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:468 */
-  REGB0 = TAG_Int(26);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:469 */
-  REGB0 = TAG_Int(27);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction314_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:470 */
-  REGB0 = TAG_Int(28);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:471 */
-  REGB0 = TAG_Int(28);
-  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:472 */
-  REGB0 = TAG_Int(28);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:473 */
-  REGB0 = TAG_Int(29);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:474 */
-  REGB0 = TAG_Int(29);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:475 */
-  REGB0 = TAG_Int(29);
+  REGB0 = TAG_Int(12);
   fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:476 */
-  REGB0 = TAG_Int(30);
+  REGB0 = TAG_Int(13);
   fra.me.REG[2] = NEW_ReduceAction321_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:477 */
-  REGB0 = TAG_Int(30);
+  REGB0 = TAG_Int(13);
   fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:478 */
-  REGB0 = TAG_Int(30);
-  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(14);
+  fra.me.REG[2] = NEW_ReduceAction321_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:479 */
-  REGB0 = TAG_Int(31);
+  REGB0 = TAG_Int(14);
   fra.me.REG[2] = NEW_ReduceAction324_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:480 */
-  REGB0 = TAG_Int(32);
+  REGB0 = TAG_Int(15);
   fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:481 */
-  REGB0 = TAG_Int(32);
+  REGB0 = TAG_Int(15);
   fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:482 */
-  REGB0 = TAG_Int(33);
+  REGB0 = TAG_Int(16);
   fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:483 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(16);
   fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:484 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:485 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(17);
   fra.me.REG[2] = NEW_ReduceAction330_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:486 */
-  REGB0 = TAG_Int(34);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction331_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:487 */
-  REGB0 = TAG_Int(35);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:488 */
-  REGB0 = TAG_Int(35);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction333_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:489 */
-  REGB0 = TAG_Int(36);
+  REGB0 = TAG_Int(18);
   fra.me.REG[2] = NEW_ReduceAction334_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:490 */
-  REGB0 = TAG_Int(37);
-  fra.me.REG[2] = NEW_ReduceAction334_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(19);
+  fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:491 */
-  REGB0 = TAG_Int(38);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:492 */
-  REGB0 = TAG_Int(38);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:493 */
-  REGB0 = TAG_Int(38);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:494 */
-  REGB0 = TAG_Int(38);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:495 */
-  REGB0 = TAG_Int(39);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction340_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:496 */
-  REGB0 = TAG_Int(39);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:497 */
-  REGB0 = TAG_Int(40);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction342_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:498 */
-  REGB0 = TAG_Int(40);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:499 */
-  REGB0 = TAG_Int(41);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:500 */
-  REGB0 = TAG_Int(41);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:501 */
-  REGB0 = TAG_Int(42);
-  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(19);
+  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:502 */
-  REGB0 = TAG_Int(43);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(19);
+  fra.me.REG[2] = NEW_ReduceAction347_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:503 */
-  REGB0 = TAG_Int(43);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(19);
+  fra.me.REG[2] = NEW_ReduceAction348_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:504 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction349_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:505 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction350_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:506 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:507 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(19);
   fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:508 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(20);
   fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:509 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(20);
   fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:510 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(20);
   fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:511 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(20);
   fra.me.REG[2] = NEW_ReduceAction356_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:512 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(20);
   fra.me.REG[2] = NEW_ReduceAction357_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:513 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(20);
   fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:514 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(20);
   fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:515 */
-  REGB0 = TAG_Int(43);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(20);
+  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:516 */
-  REGB0 = TAG_Int(43);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(20);
+  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:517 */
-  REGB0 = TAG_Int(43);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(20);
+  fra.me.REG[2] = NEW_ReduceAction362_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:518 */
-  REGB0 = TAG_Int(43);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(20);
+  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:519 */
-  REGB0 = TAG_Int(43);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(20);
+  fra.me.REG[2] = NEW_ReduceAction364_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:520 */
-  REGB0 = TAG_Int(43);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(21);
+  fra.me.REG[2] = NEW_ReduceAction365_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:521 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(21);
   fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:522 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(21);
   fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:523 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(21);
   fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:524 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(21);
   fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:525 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(21);
   fra.me.REG[2] = NEW_ReduceAction370_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:526 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(22);
   fra.me.REG[2] = NEW_ReduceAction371_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:527 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(22);
   fra.me.REG[2] = NEW_ReduceAction372_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:528 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(23);
   fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:529 */
-  REGB0 = TAG_Int(43);
+  REGB0 = TAG_Int(24);
   fra.me.REG[2] = NEW_ReduceAction374_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:530 */
-  REGB0 = TAG_Int(44);
+  REGB0 = TAG_Int(24);
   fra.me.REG[2] = NEW_ReduceAction375_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:531 */
-  REGB0 = TAG_Int(45);
+  REGB0 = TAG_Int(24);
   fra.me.REG[2] = NEW_ReduceAction376_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:532 */
-  REGB0 = TAG_Int(45);
+  REGB0 = TAG_Int(24);
   fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:533 */
-  REGB0 = TAG_Int(46);
+  REGB0 = TAG_Int(24);
   fra.me.REG[2] = NEW_ReduceAction378_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:534 */
-  REGB0 = TAG_Int(46);
+  REGB0 = TAG_Int(24);
   fra.me.REG[2] = NEW_ReduceAction379_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:535 */
-  REGB0 = TAG_Int(46);
+  REGB0 = TAG_Int(25);
   fra.me.REG[2] = NEW_ReduceAction380_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:536 */
-  REGB0 = TAG_Int(46);
+  REGB0 = TAG_Int(26);
   fra.me.REG[2] = NEW_ReduceAction381_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:537 */
-  REGB0 = TAG_Int(46);
+  REGB0 = TAG_Int(26);
   fra.me.REG[2] = NEW_ReduceAction382_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:538 */
-  REGB0 = TAG_Int(46);
+  REGB0 = TAG_Int(26);
   fra.me.REG[2] = NEW_ReduceAction383_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:539 */
-  REGB0 = TAG_Int(46);
+  REGB0 = TAG_Int(26);
   fra.me.REG[2] = NEW_ReduceAction384_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:540 */
-  REGB0 = TAG_Int(46);
+  REGB0 = TAG_Int(26);
   fra.me.REG[2] = NEW_ReduceAction385_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:541 */
-  REGB0 = TAG_Int(46);
+  REGB0 = TAG_Int(26);
   fra.me.REG[2] = NEW_ReduceAction386_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:542 */
-  REGB0 = TAG_Int(47);
+  REGB0 = TAG_Int(27);
   fra.me.REG[2] = NEW_ReduceAction387_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:543 */
-  REGB0 = TAG_Int(47);
+  REGB0 = TAG_Int(28);
   fra.me.REG[2] = NEW_ReduceAction388_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:544 */
-  REGB0 = TAG_Int(47);
+  REGB0 = TAG_Int(28);
   fra.me.REG[2] = NEW_ReduceAction389_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:545 */
-  REGB0 = TAG_Int(47);
+  REGB0 = TAG_Int(29);
   fra.me.REG[2] = NEW_ReduceAction390_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:546 */
-  REGB0 = TAG_Int(47);
+  REGB0 = TAG_Int(30);
   fra.me.REG[2] = NEW_ReduceAction391_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:547 */
-  REGB0 = TAG_Int(47);
-  fra.me.REG[2] = NEW_ReduceAction392_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(30);
+  fra.me.REG[2] = NEW_ReduceAction391_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:548 */
-  REGB0 = TAG_Int(48);
+  REGB0 = TAG_Int(30);
   fra.me.REG[2] = NEW_ReduceAction393_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:549 */
-  REGB0 = TAG_Int(48);
+  REGB0 = TAG_Int(31);
   fra.me.REG[2] = NEW_ReduceAction394_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:550 */
-  REGB0 = TAG_Int(49);
+  REGB0 = TAG_Int(31);
   fra.me.REG[2] = NEW_ReduceAction395_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:551 */
-  REGB0 = TAG_Int(50);
+  REGB0 = TAG_Int(31);
   fra.me.REG[2] = NEW_ReduceAction396_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:552 */
-  REGB0 = TAG_Int(50);
+  REGB0 = TAG_Int(32);
   fra.me.REG[2] = NEW_ReduceAction397_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:553 */
-  REGB0 = TAG_Int(50);
+  REGB0 = TAG_Int(32);
   fra.me.REG[2] = NEW_ReduceAction398_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:554 */
-  REGB0 = TAG_Int(50);
+  REGB0 = TAG_Int(32);
   fra.me.REG[2] = NEW_ReduceAction399_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:555 */
-  REGB0 = TAG_Int(51);
+  REGB0 = TAG_Int(33);
   fra.me.REG[2] = NEW_ReduceAction400_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:556 */
-  REGB0 = TAG_Int(51);
+  REGB0 = TAG_Int(34);
   fra.me.REG[2] = NEW_ReduceAction401_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:557 */
-  REGB0 = TAG_Int(51);
+  REGB0 = TAG_Int(34);
   fra.me.REG[2] = NEW_ReduceAction402_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:558 */
-  REGB0 = TAG_Int(51);
+  REGB0 = TAG_Int(35);
   fra.me.REG[2] = NEW_ReduceAction403_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:559 */
-  REGB0 = TAG_Int(51);
+  REGB0 = TAG_Int(36);
   fra.me.REG[2] = NEW_ReduceAction404_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:560 */
-  REGB0 = TAG_Int(51);
+  REGB0 = TAG_Int(36);
   fra.me.REG[2] = NEW_ReduceAction405_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:561 */
-  REGB0 = TAG_Int(51);
+  REGB0 = TAG_Int(36);
   fra.me.REG[2] = NEW_ReduceAction406_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:562 */
-  REGB0 = TAG_Int(51);
+  REGB0 = TAG_Int(36);
   fra.me.REG[2] = NEW_ReduceAction407_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:563 */
-  REGB0 = TAG_Int(51);
+  REGB0 = TAG_Int(36);
   fra.me.REG[2] = NEW_ReduceAction408_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:564 */
-  REGB0 = TAG_Int(51);
+  REGB0 = TAG_Int(36);
   fra.me.REG[2] = NEW_ReduceAction409_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:565 */
-  REGB0 = TAG_Int(52);
+  REGB0 = TAG_Int(36);
   fra.me.REG[2] = NEW_ReduceAction410_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:566 */
-  REGB0 = TAG_Int(52);
+  REGB0 = TAG_Int(36);
   fra.me.REG[2] = NEW_ReduceAction411_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:567 */
-  REGB0 = TAG_Int(53);
+  REGB0 = TAG_Int(37);
   fra.me.REG[2] = NEW_ReduceAction412_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:568 */
-  REGB0 = TAG_Int(53);
+  REGB0 = TAG_Int(37);
   fra.me.REG[2] = NEW_ReduceAction413_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:569 */
-  REGB0 = TAG_Int(54);
+  REGB0 = TAG_Int(38);
   fra.me.REG[2] = NEW_ReduceAction414_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:570 */
-  REGB0 = TAG_Int(54);
-  fra.me.REG[2] = NEW_ReduceAction415_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(39);
+  fra.me.REG[2] = NEW_ReduceAction414_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:571 */
-  REGB0 = TAG_Int(54);
+  REGB0 = TAG_Int(40);
   fra.me.REG[2] = NEW_ReduceAction416_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:572 */
-  REGB0 = TAG_Int(54);
+  REGB0 = TAG_Int(40);
   fra.me.REG[2] = NEW_ReduceAction417_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:573 */
-  REGB0 = TAG_Int(54);
+  REGB0 = TAG_Int(40);
   fra.me.REG[2] = NEW_ReduceAction418_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:574 */
-  REGB0 = TAG_Int(55);
-  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:575 */
-  REGB0 = TAG_Int(55);
-  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(41);
+  fra.me.REG[2] = NEW_ReduceAction420_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:576 */
-  REGB0 = TAG_Int(56);
+  REGB0 = TAG_Int(41);
   fra.me.REG[2] = NEW_ReduceAction421_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:577 */
-  REGB0 = TAG_Int(56);
+  REGB0 = TAG_Int(42);
   fra.me.REG[2] = NEW_ReduceAction422_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:578 */
-  REGB0 = TAG_Int(57);
+  REGB0 = TAG_Int(42);
   fra.me.REG[2] = NEW_ReduceAction423_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:579 */
-  REGB0 = TAG_Int(57);
+  REGB0 = TAG_Int(43);
   fra.me.REG[2] = NEW_ReduceAction424_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:580 */
-  REGB0 = TAG_Int(58);
+  REGB0 = TAG_Int(43);
   fra.me.REG[2] = NEW_ReduceAction425_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:581 */
-  REGB0 = TAG_Int(58);
-  fra.me.REG[2] = NEW_ReduceAction426_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(44);
+  fra.me.REG[2] = NEW_ReduceAction416_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:582 */
-  REGB0 = TAG_Int(58);
-  fra.me.REG[2] = NEW_ReduceAction427_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:583 */
-  REGB0 = TAG_Int(58);
-  fra.me.REG[2] = NEW_ReduceAction428_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:584 */
-  REGB0 = TAG_Int(59);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction429_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:585 */
-  REGB0 = TAG_Int(59);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction430_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:586 */
-  REGB0 = TAG_Int(59);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction431_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:587 */
-  REGB0 = TAG_Int(59);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction432_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:588 */
-  REGB0 = TAG_Int(60);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction433_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:589 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction434_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:590 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction435_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:591 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction436_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:592 */
-  REGB0 = TAG_Int(61);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction437_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:593 */
-  REGB0 = TAG_Int(62);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction438_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:594 */
-  REGB0 = TAG_Int(62);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction439_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:595 */
-  REGB0 = TAG_Int(63);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:596 */
-  REGB0 = TAG_Int(63);
-  fra.me.REG[2] = NEW_ReduceAction441_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:597 */
-  REGB0 = TAG_Int(63);
-  fra.me.REG[2] = NEW_ReduceAction442_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:598 */
-  REGB0 = TAG_Int(63);
-  fra.me.REG[2] = NEW_ReduceAction443_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:599 */
-  REGB0 = TAG_Int(64);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:600 */
-  REGB0 = TAG_Int(64);
-  fra.me.REG[2] = NEW_ReduceAction445_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:601 */
-  REGB0 = TAG_Int(65);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction446_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:602 */
-  REGB0 = TAG_Int(65);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction447_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:603 */
-  REGB0 = TAG_Int(65);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction448_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:604 */
-  REGB0 = TAG_Int(65);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction449_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:605 */
-  REGB0 = TAG_Int(65);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction450_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:606 */
-  REGB0 = TAG_Int(65);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction451_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:607 */
-  REGB0 = TAG_Int(65);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction452_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:608 */
-  REGB0 = TAG_Int(65);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction453_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:609 */
-  REGB0 = TAG_Int(65);
+  REGB0 = TAG_Int(45);
   fra.me.REG[2] = NEW_ReduceAction454_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:610 */
-  REGB0 = TAG_Int(65);
+  REGB0 = TAG_Int(46);
   fra.me.REG[2] = NEW_ReduceAction455_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:611 */
-  REGB0 = TAG_Int(65);
+  REGB0 = TAG_Int(47);
   fra.me.REG[2] = NEW_ReduceAction456_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:612 */
-  REGB0 = TAG_Int(65);
+  REGB0 = TAG_Int(47);
   fra.me.REG[2] = NEW_ReduceAction457_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:613 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(48);
+  fra.me.REG[2] = NEW_ReduceAction458_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:614 */
-  REGB0 = TAG_Int(66);
+  REGB0 = TAG_Int(48);
   fra.me.REG[2] = NEW_ReduceAction459_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:615 */
-  REGB0 = TAG_Int(66);
+  REGB0 = TAG_Int(48);
   fra.me.REG[2] = NEW_ReduceAction460_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:616 */
-  REGB0 = TAG_Int(67);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(48);
+  fra.me.REG[2] = NEW_ReduceAction461_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:617 */
-  REGB0 = TAG_Int(67);
+  REGB0 = TAG_Int(48);
   fra.me.REG[2] = NEW_ReduceAction462_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:618 */
-  REGB0 = TAG_Int(67);
+  REGB0 = TAG_Int(48);
   fra.me.REG[2] = NEW_ReduceAction463_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:619 */
-  REGB0 = TAG_Int(67);
+  REGB0 = TAG_Int(48);
   fra.me.REG[2] = NEW_ReduceAction464_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:620 */
-  REGB0 = TAG_Int(68);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(48);
+  fra.me.REG[2] = NEW_ReduceAction465_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:621 */
-  REGB0 = TAG_Int(68);
+  REGB0 = TAG_Int(48);
   fra.me.REG[2] = NEW_ReduceAction466_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:622 */
-  REGB0 = TAG_Int(68);
+  REGB0 = TAG_Int(49);
   fra.me.REG[2] = NEW_ReduceAction467_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:623 */
-  REGB0 = TAG_Int(69);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(49);
+  fra.me.REG[2] = NEW_ReduceAction468_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:624 */
-  REGB0 = TAG_Int(69);
+  REGB0 = TAG_Int(49);
   fra.me.REG[2] = NEW_ReduceAction469_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:625 */
-  REGB0 = TAG_Int(69);
+  REGB0 = TAG_Int(49);
   fra.me.REG[2] = NEW_ReduceAction470_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:626 */
-  REGB0 = TAG_Int(69);
+  REGB0 = TAG_Int(49);
   fra.me.REG[2] = NEW_ReduceAction471_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:627 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(49);
   fra.me.REG[2] = NEW_ReduceAction472_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:628 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(50);
   fra.me.REG[2] = NEW_ReduceAction473_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:629 */
-  REGB0 = TAG_Int(70);
-  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(50);
+  fra.me.REG[2] = NEW_ReduceAction474_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:630 */
-  REGB0 = TAG_Int(70);
-  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(51);
+  fra.me.REG[2] = NEW_ReduceAction475_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:631 */
-  REGB0 = TAG_Int(70);
-  fra.me.REG[2] = NEW_ReduceAction370_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(52);
+  fra.me.REG[2] = NEW_ReduceAction476_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:632 */
-  REGB0 = TAG_Int(70);
-  fra.me.REG[2] = NEW_ReduceAction371_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(52);
+  fra.me.REG[2] = NEW_ReduceAction477_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:633 */
-  REGB0 = TAG_Int(70);
-  fra.me.REG[2] = NEW_ReduceAction372_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(52);
+  fra.me.REG[2] = NEW_ReduceAction478_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:634 */
-  REGB0 = TAG_Int(70);
-  fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(52);
+  fra.me.REG[2] = NEW_ReduceAction479_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:635 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(52);
   fra.me.REG[2] = NEW_ReduceAction480_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:636 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(52);
   fra.me.REG[2] = NEW_ReduceAction481_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:637 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(52);
   fra.me.REG[2] = NEW_ReduceAction482_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:638 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(52);
   fra.me.REG[2] = NEW_ReduceAction483_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:639 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(53);
   fra.me.REG[2] = NEW_ReduceAction484_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:640 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(53);
   fra.me.REG[2] = NEW_ReduceAction485_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:641 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(53);
   fra.me.REG[2] = NEW_ReduceAction486_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:642 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(53);
   fra.me.REG[2] = NEW_ReduceAction487_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:643 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(53);
   fra.me.REG[2] = NEW_ReduceAction488_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:644 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(53);
   fra.me.REG[2] = NEW_ReduceAction489_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:645 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(53);
   fra.me.REG[2] = NEW_ReduceAction490_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:646 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(53);
   fra.me.REG[2] = NEW_ReduceAction491_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:647 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(53);
   fra.me.REG[2] = NEW_ReduceAction492_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:648 */
-  REGB0 = TAG_Int(70);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(53);
+  fra.me.REG[2] = NEW_ReduceAction493_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:649 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(54);
   fra.me.REG[2] = NEW_ReduceAction494_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:650 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(54);
   fra.me.REG[2] = NEW_ReduceAction495_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:651 */
-  REGB0 = TAG_Int(70);
+  REGB0 = TAG_Int(55);
   fra.me.REG[2] = NEW_ReduceAction496_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:652 */
-  REGB0 = TAG_Int(71);
+  REGB0 = TAG_Int(55);
   fra.me.REG[2] = NEW_ReduceAction497_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:653 */
-  REGB0 = TAG_Int(71);
+  REGB0 = TAG_Int(56);
   fra.me.REG[2] = NEW_ReduceAction498_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:654 */
-  REGB0 = TAG_Int(72);
+  REGB0 = TAG_Int(56);
   fra.me.REG[2] = NEW_ReduceAction499_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:655 */
-  REGB0 = TAG_Int(73);
+  REGB0 = TAG_Int(56);
   fra.me.REG[2] = NEW_ReduceAction500_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:656 */
-  REGB0 = TAG_Int(74);
-  fra.me.REG[2] = NEW_ReduceAction499_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction501_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:657 */
-  REGB0 = TAG_Int(75);
+  REGB0 = TAG_Int(56);
   fra.me.REG[2] = NEW_ReduceAction502_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:658 */
-  REGB0 = TAG_Int(76);
-  fra.me.REG[2] = NEW_ReduceAction503_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(57);
+  fra.me.REG[2] = NEW_ReduceAction416_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:659 */
-  REGB0 = TAG_Int(77);
-  fra.me.REG[2] = NEW_ReduceAction504_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(57);
+  fra.me.REG[2] = NEW_ReduceAction418_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:660 */
-  REGB0 = TAG_Int(77);
+  REGB0 = TAG_Int(58);
   fra.me.REG[2] = NEW_ReduceAction505_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:661 */
-  REGB0 = TAG_Int(77);
+  REGB0 = TAG_Int(58);
   fra.me.REG[2] = NEW_ReduceAction506_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:662 */
-  REGB0 = TAG_Int(78);
-  fra.me.REG[2] = NEW_ReduceAction504_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(59);
+  fra.me.REG[2] = NEW_ReduceAction507_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:663 */
-  REGB0 = TAG_Int(78);
+  REGB0 = TAG_Int(59);
   fra.me.REG[2] = NEW_ReduceAction508_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:664 */
-  REGB0 = TAG_Int(78);
-  fra.me.REG[2] = NEW_ReduceAction505_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(60);
+  fra.me.REG[2] = NEW_ReduceAction509_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:665 */
-  REGB0 = TAG_Int(78);
-  fra.me.REG[2] = NEW_ReduceAction506_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(60);
+  fra.me.REG[2] = NEW_ReduceAction510_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:666 */
-  REGB0 = TAG_Int(79);
+  REGB0 = TAG_Int(60);
   fra.me.REG[2] = NEW_ReduceAction511_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:667 */
-  REGB0 = TAG_Int(80);
+  REGB0 = TAG_Int(60);
   fra.me.REG[2] = NEW_ReduceAction512_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:668 */
-  REGB0 = TAG_Int(80);
+  REGB0 = TAG_Int(61);
   fra.me.REG[2] = NEW_ReduceAction513_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:669 */
-  REGB0 = TAG_Int(81);
+  REGB0 = TAG_Int(61);
   fra.me.REG[2] = NEW_ReduceAction514_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:670 */
-  REGB0 = TAG_Int(82);
+  REGB0 = TAG_Int(61);
   fra.me.REG[2] = NEW_ReduceAction515_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:671 */
-  REGB0 = TAG_Int(82);
+  REGB0 = TAG_Int(61);
   fra.me.REG[2] = NEW_ReduceAction516_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:672 */
-  REGB0 = TAG_Int(83);
+  REGB0 = TAG_Int(62);
   fra.me.REG[2] = NEW_ReduceAction517_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:673 */
-  REGB0 = TAG_Int(83);
-  fra.me.REG[2] = NEW_ReduceAction518_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(63);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:674 */
-  REGB0 = TAG_Int(83);
-  fra.me.REG[2] = NEW_ReduceAction519_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(63);
+  fra.me.REG[2] = NEW_ReduceAction448_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:675 */
-  REGB0 = TAG_Int(83);
-  fra.me.REG[2] = NEW_ReduceAction520_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(63);
+  fra.me.REG[2] = NEW_ReduceAction449_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:676 */
-  REGB0 = TAG_Int(84);
+  REGB0 = TAG_Int(63);
   fra.me.REG[2] = NEW_ReduceAction521_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:677 */
-  REGB0 = TAG_Int(84);
-  fra.me.REG[2] = NEW_ReduceAction522_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(64);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:678 */
-  REGB0 = TAG_Int(84);
+  REGB0 = TAG_Int(64);
   fra.me.REG[2] = NEW_ReduceAction523_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:679 */
-  REGB0 = TAG_Int(85);
-  fra.me.REG[2] = NEW_ReduceAction524_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(65);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:680 */
-  REGB0 = TAG_Int(86);
+  REGB0 = TAG_Int(65);
   fra.me.REG[2] = NEW_ReduceAction525_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:681 */
-  REGB0 = TAG_Int(87);
+  REGB0 = TAG_Int(65);
   fra.me.REG[2] = NEW_ReduceAction526_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:682 */
-  REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction526_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(65);
+  fra.me.REG[2] = NEW_ReduceAction527_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:683 */
-  REGB0 = TAG_Int(88);
-  fra.me.REG[2] = NEW_ReduceAction528_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(66);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:684 */
-  REGB0 = TAG_Int(88);
+  REGB0 = TAG_Int(66);
   fra.me.REG[2] = NEW_ReduceAction529_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:685 */
-  REGB0 = TAG_Int(88);
-  fra.me.REG[2] = NEW_ReduceAction68_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:686 */
-  REGB0 = TAG_Int(89);
+  REGB0 = TAG_Int(67);
   fra.me.REG[2] = NEW_ReduceAction531_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:687 */
-  REGB0 = TAG_Int(89);
+  REGB0 = TAG_Int(67);
   fra.me.REG[2] = NEW_ReduceAction532_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:688 */
-  REGB0 = TAG_Int(90);
+  REGB0 = TAG_Int(67);
   fra.me.REG[2] = NEW_ReduceAction533_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:689 */
-  REGB0 = TAG_Int(90);
+  REGB0 = TAG_Int(67);
   fra.me.REG[2] = NEW_ReduceAction534_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:690 */
-  REGB0 = TAG_Int(90);
-  fra.me.REG[2] = NEW_ReduceAction526_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction535_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:691 */
-  REGB0 = TAG_Int(91);
-  fra.me.REG[2] = NEW_ReduceAction115_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction536_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:692 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction116_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction537_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:693 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction117_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction538_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:694 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction118_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction539_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:695 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction119_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction540_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:696 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction120_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction541_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:697 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction121_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(68);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:698 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction126_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(68);
+  fra.me.REG[2] = NEW_ReduceAction543_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:699 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction127_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(68);
+  fra.me.REG[2] = NEW_ReduceAction544_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:700 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction128_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(69);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:701 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction129_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(69);
+  fra.me.REG[2] = NEW_ReduceAction546_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:702 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction130_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(69);
+  fra.me.REG[2] = NEW_ReduceAction547_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:703 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction131_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(69);
+  fra.me.REG[2] = NEW_ReduceAction548_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:704 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction132_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(70);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:705 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction133_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(70);
+  fra.me.REG[2] = NEW_ReduceAction550_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:706 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction134_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(70);
+  fra.me.REG[2] = NEW_ReduceAction551_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:707 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction135_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(71);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:708 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction136_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(71);
+  fra.me.REG[2] = NEW_ReduceAction553_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:709 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction137_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(71);
+  fra.me.REG[2] = NEW_ReduceAction554_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:710 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction138_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(71);
+  fra.me.REG[2] = NEW_ReduceAction555_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:711 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction139_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction556_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:712 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction140_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction557_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:713 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction141_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction446_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:714 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction142_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction447_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:715 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction143_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction450_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:716 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction144_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction451_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:717 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction145_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction452_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:718 */
-  REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction280_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction453_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:719 */
-  REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction281_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction564_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:720 */
-  REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction282_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction565_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:721 */
-  REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction283_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction566_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:722 */
-  REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction288_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction567_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:723 */
-  REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction289_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction568_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:724 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction569_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:725 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction570_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:726 */
-  REGB0 = TAG_Int(95);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction571_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:727 */
-  REGB0 = TAG_Int(95);
-  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction572_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:728 */
-  REGB0 = TAG_Int(95);
-  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction573_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:729 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction574_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:730 */
-  REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction439_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction575_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:731 */
-  REGB0 = TAG_Int(97);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction576_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:732 */
-  REGB0 = TAG_Int(97);
-  fra.me.REG[2] = NEW_ReduceAction441_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction577_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:733 */
-  REGB0 = TAG_Int(97);
-  fra.me.REG[2] = NEW_ReduceAction442_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction578_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:734 */
-  REGB0 = TAG_Int(97);
-  fra.me.REG[2] = NEW_ReduceAction443_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction579_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:735 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction580_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:736 */
-  REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction445_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction581_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:737 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction582_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:738 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction447_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction583_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:739 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction448_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction584_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:740 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction449_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction585_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:741 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction450_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction586_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:742 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction451_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction587_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:743 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction452_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:744 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction453_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction589_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:745 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction454_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction590_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:746 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction455_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction591_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:747 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction456_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(72);
+  fra.me.REG[2] = NEW_ReduceAction592_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:748 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction457_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(73);
+  fra.me.REG[2] = NEW_ReduceAction593_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:749 */
-  REGB0 = TAG_Int(100);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(73);
+  fra.me.REG[2] = NEW_ReduceAction594_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:750 */
-  REGB0 = TAG_Int(100);
-  fra.me.REG[2] = NEW_ReduceAction459_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(73);
+  fra.me.REG[2] = NEW_ReduceAction595_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:751 */
-  REGB0 = TAG_Int(100);
-  fra.me.REG[2] = NEW_ReduceAction460_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(73);
+  fra.me.REG[2] = NEW_ReduceAction596_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:752 */
-  REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(74);
+  fra.me.REG[2] = NEW_ReduceAction597_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:753 */
-  REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction462_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(75);
+  fra.me.REG[2] = NEW_ReduceAction598_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:754 */
-  REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction463_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(76);
+  fra.me.REG[2] = NEW_ReduceAction597_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:755 */
-  REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction464_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(77);
+  fra.me.REG[2] = NEW_ReduceAction600_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:756 */
-  REGB0 = TAG_Int(102);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(78);
+  fra.me.REG[2] = NEW_ReduceAction601_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:757 */
-  REGB0 = TAG_Int(102);
-  fra.me.REG[2] = NEW_ReduceAction466_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(79);
+  fra.me.REG[2] = NEW_ReduceAction602_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:758 */
-  REGB0 = TAG_Int(102);
-  fra.me.REG[2] = NEW_ReduceAction467_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(79);
+  fra.me.REG[2] = NEW_ReduceAction603_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:759 */
-  REGB0 = TAG_Int(103);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(80);
+  fra.me.REG[2] = NEW_ReduceAction604_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:760 */
-  REGB0 = TAG_Int(103);
-  fra.me.REG[2] = NEW_ReduceAction469_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(80);
+  fra.me.REG[2] = NEW_ReduceAction605_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:761 */
-  REGB0 = TAG_Int(103);
-  fra.me.REG[2] = NEW_ReduceAction470_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(80);
+  fra.me.REG[2] = NEW_ReduceAction606_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:762 */
-  REGB0 = TAG_Int(103);
-  fra.me.REG[2] = NEW_ReduceAction471_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(80);
+  fra.me.REG[2] = NEW_ReduceAction607_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:763 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction472_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(81);
+  fra.me.REG[2] = NEW_ReduceAction608_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:764 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction473_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(82);
+  fra.me.REG[2] = NEW_ReduceAction609_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:765 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(82);
+  fra.me.REG[2] = NEW_ReduceAction610_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:766 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(83);
+  fra.me.REG[2] = NEW_ReduceAction608_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:767 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction370_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(84);
+  fra.me.REG[2] = NEW_ReduceAction612_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:768 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction371_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(84);
+  fra.me.REG[2] = NEW_ReduceAction613_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:769 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction372_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(84);
+  fra.me.REG[2] = NEW_ReduceAction614_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:770 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(84);
+  fra.me.REG[2] = NEW_ReduceAction615_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:771 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction481_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(84);
+  fra.me.REG[2] = NEW_ReduceAction616_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:772 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction485_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(85);
+  fra.me.REG[2] = NEW_ReduceAction617_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:773 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction486_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(86);
+  fra.me.REG[2] = NEW_ReduceAction618_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:774 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction487_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(86);
+  fra.me.REG[2] = NEW_ReduceAction619_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:775 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction488_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(87);
+  fra.me.REG[2] = NEW_ReduceAction620_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:776 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction489_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(88);
+  fra.me.REG[2] = NEW_ReduceAction621_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:777 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction490_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(88);
+  fra.me.REG[2] = NEW_ReduceAction622_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:778 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction491_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(88);
+  fra.me.REG[2] = NEW_ReduceAction622_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:779 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction492_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(88);
+  fra.me.REG[2] = NEW_ReduceAction624_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:780 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction625_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:781 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction494_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction626_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:782 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction495_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction627_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:783 */
-  REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction496_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction628_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:784 */
-  REGB0 = TAG_Int(105);
-  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(90);
+  fra.me.REG[2] = NEW_ReduceAction629_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:785 */
-  REGB0 = TAG_Int(105);
-  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(90);
+  fra.me.REG[2] = NEW_ReduceAction630_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:786 */
-  REGB0 = TAG_Int(105);
-  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(90);
+  fra.me.REG[2] = NEW_ReduceAction631_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:787 */
-  REGB0 = TAG_Int(105);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(91);
+  fra.me.REG[2] = NEW_ReduceAction629_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:788 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(91);
+  fra.me.REG[2] = NEW_ReduceAction633_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:789 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(91);
+  fra.me.REG[2] = NEW_ReduceAction630_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:790 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction349_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(91);
+  fra.me.REG[2] = NEW_ReduceAction631_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:791 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction350_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(92);
+  fra.me.REG[2] = NEW_ReduceAction636_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:792 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(93);
+  fra.me.REG[2] = NEW_ReduceAction637_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:793 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(93);
+  fra.me.REG[2] = NEW_ReduceAction638_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:794 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(94);
+  fra.me.REG[2] = NEW_ReduceAction639_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:795 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(95);
+  fra.me.REG[2] = NEW_ReduceAction640_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:796 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(95);
+  fra.me.REG[2] = NEW_ReduceAction641_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:797 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction356_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction642_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:798 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction357_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction643_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:799 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction644_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:800 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction645_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:801 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(97);
+  fra.me.REG[2] = NEW_ReduceAction646_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:802 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(97);
+  fra.me.REG[2] = NEW_ReduceAction647_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:803 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(97);
+  fra.me.REG[2] = NEW_ReduceAction648_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:804 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(98);
+  fra.me.REG[2] = NEW_ReduceAction649_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:805 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(99);
+  fra.me.REG[2] = NEW_ReduceAction650_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:806 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(100);
+  fra.me.REG[2] = NEW_ReduceAction651_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:807 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(100);
+  fra.me.REG[2] = NEW_ReduceAction651_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:808 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction653_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:809 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction654_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:810 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(101);
+  fra.me.REG[2] = NEW_ReduceAction70_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:811 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction370_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(102);
+  fra.me.REG[2] = NEW_ReduceAction656_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:812 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction371_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(102);
+  fra.me.REG[2] = NEW_ReduceAction657_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:813 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction372_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction658_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:814 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction659_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:815 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction374_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction651_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:816 */
-  REGB0 = TAG_Int(107);
-  fra.me.REG[2] = NEW_ReduceAction376_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(104);
+  fra.me.REG[2] = NEW_ReduceAction152_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:817 */
-  REGB0 = TAG_Int(107);
-  fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction153_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:818 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction378_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction154_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:819 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction379_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction155_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:820 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction380_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction156_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:821 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction381_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction157_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:822 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction382_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction158_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:823 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction383_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction159_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:824 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction384_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction160_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:825 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction385_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction161_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:826 */
-  REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction386_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction162_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:827 */
-  REGB0 = TAG_Int(109);
-  fra.me.REG[2] = NEW_ReduceAction395_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction163_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:828 */
-  REGB0 = TAG_Int(110);
-  fra.me.REG[2] = NEW_ReduceAction396_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction164_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:829 */
-  REGB0 = TAG_Int(110);
-  fra.me.REG[2] = NEW_ReduceAction397_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction169_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:830 */
-  REGB0 = TAG_Int(110);
-  fra.me.REG[2] = NEW_ReduceAction398_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction170_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:831 */
-  REGB0 = TAG_Int(110);
-  fra.me.REG[2] = NEW_ReduceAction399_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction171_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:832 */
-  REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction400_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction172_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:833 */
-  REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction401_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction173_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:834 */
-  REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction402_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction174_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:835 */
-  REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction403_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction175_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:836 */
-  REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction404_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction176_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:837 */
-  REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction405_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction177_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:838 */
-  REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction406_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction178_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:839 */
-  REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction407_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction179_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:840 */
-  REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction408_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction180_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:841 */
-  REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction409_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction181_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:842 */
-  REGB0 = TAG_Int(112);
-  fra.me.REG[2] = NEW_ReduceAction412_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction182_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:843 */
-  REGB0 = TAG_Int(112);
-  fra.me.REG[2] = NEW_ReduceAction413_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction183_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:844 */
-  REGB0 = TAG_Int(113);
-  fra.me.REG[2] = NEW_ReduceAction414_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction184_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:845 */
-  REGB0 = TAG_Int(114);
-  fra.me.REG[2] = NEW_ReduceAction421_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction185_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:846 */
-  REGB0 = TAG_Int(114);
-  fra.me.REG[2] = NEW_ReduceAction422_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction186_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:847 */
-  REGB0 = TAG_Int(115);
-  fra.me.REG[2] = NEW_ReduceAction423_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction187_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:848 */
-  REGB0 = TAG_Int(115);
-  fra.me.REG[2] = NEW_ReduceAction424_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction188_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:849 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction425_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:850 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction426_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:851 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction427_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:852 */
-  REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction428_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction356_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:853 */
-  REGB0 = TAG_Int(117);
-  fra.me.REG[2] = NEW_ReduceAction429_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:854 */
-  REGB0 = TAG_Int(117);
-  fra.me.REG[2] = NEW_ReduceAction430_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(106);
+  fra.me.REG[2] = NEW_ReduceAction362_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:855 */
-  REGB0 = TAG_Int(118);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(107);
+  fra.me.REG[2] = NEW_ReduceAction404_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:856 */
-  REGB0 = TAG_Int(118);
-  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(107);
+  fra.me.REG[2] = NEW_ReduceAction405_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:857 */
-  REGB0 = TAG_Int(118);
-  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(107);
+  fra.me.REG[2] = NEW_ReduceAction406_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:858 */
-  REGB0 = TAG_Int(118);
-  fra.me.REG[2] = NEW_ReduceAction437_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(107);
+  fra.me.REG[2] = NEW_ReduceAction407_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:859 */
-  REGB0 = TAG_Int(119);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:860 */
-  REGB0 = TAG_Int(119);
-  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction448_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:861 */
-  REGB0 = TAG_Int(119);
-  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction449_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:862 */
-  REGB0 = TAG_Int(120);
-  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(109);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:863 */
-  REGB0 = TAG_Int(120);
-  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(109);
+  fra.me.REG[2] = NEW_ReduceAction523_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:864 */
-  REGB0 = TAG_Int(120);
-  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(110);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:865 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(110);
+  fra.me.REG[2] = NEW_ReduceAction525_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:866 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(110);
+  fra.me.REG[2] = NEW_ReduceAction526_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:867 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(110);
+  fra.me.REG[2] = NEW_ReduceAction527_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:868 */
-  REGB0 = TAG_Int(122);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(111);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:869 */
-  REGB0 = TAG_Int(122);
-  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(111);
+  fra.me.REG[2] = NEW_ReduceAction529_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:870 */
-  REGB0 = TAG_Int(122);
-  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:871 */
-  REGB0 = TAG_Int(123);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction531_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:872 */
-  REGB0 = TAG_Int(123);
-  fra.me.REG[2] = NEW_ReduceAction439_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction532_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:873 */
-  REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction533_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:874 */
-  REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction441_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction534_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:875 */
-  REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction442_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction535_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:876 */
-  REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction443_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction536_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:877 */
-  REGB0 = TAG_Int(125);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction537_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:878 */
-  REGB0 = TAG_Int(125);
-  fra.me.REG[2] = NEW_ReduceAction445_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction538_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:879 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction539_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:880 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction447_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction540_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:881 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction448_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(112);
+  fra.me.REG[2] = NEW_ReduceAction541_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:882 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction449_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(113);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:883 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction450_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(113);
+  fra.me.REG[2] = NEW_ReduceAction543_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:884 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction451_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(113);
+  fra.me.REG[2] = NEW_ReduceAction544_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:885 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction452_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(114);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:886 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction453_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(114);
+  fra.me.REG[2] = NEW_ReduceAction546_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:887 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction454_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(114);
+  fra.me.REG[2] = NEW_ReduceAction547_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:888 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction455_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(114);
+  fra.me.REG[2] = NEW_ReduceAction548_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:889 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction456_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(115);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:890 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction457_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(115);
+  fra.me.REG[2] = NEW_ReduceAction550_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:891 */
-  REGB0 = TAG_Int(127);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(115);
+  fra.me.REG[2] = NEW_ReduceAction551_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:892 */
-  REGB0 = TAG_Int(127);
-  fra.me.REG[2] = NEW_ReduceAction459_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:893 */
-  REGB0 = TAG_Int(127);
-  fra.me.REG[2] = NEW_ReduceAction460_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction553_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:894 */
-  REGB0 = TAG_Int(128);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction554_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:895 */
-  REGB0 = TAG_Int(128);
-  fra.me.REG[2] = NEW_ReduceAction462_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(116);
+  fra.me.REG[2] = NEW_ReduceAction555_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:896 */
-  REGB0 = TAG_Int(128);
-  fra.me.REG[2] = NEW_ReduceAction463_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction556_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:897 */
-  REGB0 = TAG_Int(128);
-  fra.me.REG[2] = NEW_ReduceAction464_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction557_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:898 */
-  REGB0 = TAG_Int(129);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction446_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:899 */
-  REGB0 = TAG_Int(129);
-  fra.me.REG[2] = NEW_ReduceAction466_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction447_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:900 */
-  REGB0 = TAG_Int(129);
-  fra.me.REG[2] = NEW_ReduceAction467_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction450_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:901 */
-  REGB0 = TAG_Int(130);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction451_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:902 */
-  REGB0 = TAG_Int(130);
-  fra.me.REG[2] = NEW_ReduceAction469_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction452_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:903 */
-  REGB0 = TAG_Int(130);
-  fra.me.REG[2] = NEW_ReduceAction470_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction453_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:904 */
-  REGB0 = TAG_Int(130);
-  fra.me.REG[2] = NEW_ReduceAction471_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction565_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:905 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction472_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction572_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:906 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction473_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction573_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:907 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction574_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:908 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction575_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:909 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction370_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction576_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:910 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction371_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction577_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:911 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction372_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction578_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:912 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction579_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:913 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction480_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction580_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:914 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction481_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction581_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:915 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction485_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction582_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:916 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction486_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction583_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:917 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction487_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction584_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:918 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction488_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction585_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:919 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction489_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction586_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:920 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction490_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction587_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:921 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction491_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:922 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction492_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction589_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:923 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction590_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:924 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction495_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction591_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:925 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction496_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(117);
+  fra.me.REG[2] = NEW_ReduceAction592_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:926 */
-  REGB0 = TAG_Int(132);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(118);
+  fra.me.REG[2] = NEW_ReduceAction404_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:927 */
-  REGB0 = TAG_Int(132);
-  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(118);
+  fra.me.REG[2] = NEW_ReduceAction405_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:928 */
-  REGB0 = TAG_Int(132);
-  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(118);
+  fra.me.REG[2] = NEW_ReduceAction406_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:929 */
-  REGB0 = TAG_Int(133);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(118);
+  fra.me.REG[2] = NEW_ReduceAction407_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:930 */
-  REGB0 = TAG_Int(133);
-  fra.me.REG[2] = NEW_ReduceAction439_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(118);
+  fra.me.REG[2] = NEW_ReduceAction408_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:931 */
-  REGB0 = TAG_Int(134);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(118);
+  fra.me.REG[2] = NEW_ReduceAction409_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:932 */
-  REGB0 = TAG_Int(134);
-  fra.me.REG[2] = NEW_ReduceAction441_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(118);
+  fra.me.REG[2] = NEW_ReduceAction410_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:933 */
-  REGB0 = TAG_Int(134);
-  fra.me.REG[2] = NEW_ReduceAction442_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(118);
+  fra.me.REG[2] = NEW_ReduceAction411_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:934 */
-  REGB0 = TAG_Int(134);
-  fra.me.REG[2] = NEW_ReduceAction443_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:935 */
-  REGB0 = TAG_Int(135);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:936 */
-  REGB0 = TAG_Int(135);
-  fra.me.REG[2] = NEW_ReduceAction445_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction429_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:937 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction430_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:938 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction447_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction431_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:939 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction448_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction432_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:940 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction449_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction433_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:941 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction450_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction434_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:942 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction451_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction435_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:943 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction452_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction436_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:944 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction453_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction437_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:945 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction454_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction438_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:946 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction455_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction439_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:947 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction456_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:948 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction457_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:949 */
-  REGB0 = TAG_Int(137);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:950 */
-  REGB0 = TAG_Int(137);
-  fra.me.REG[2] = NEW_ReduceAction459_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:951 */
-  REGB0 = TAG_Int(137);
-  fra.me.REG[2] = NEW_ReduceAction460_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:952 */
-  REGB0 = TAG_Int(138);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:953 */
-  REGB0 = TAG_Int(138);
-  fra.me.REG[2] = NEW_ReduceAction462_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction446_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:954 */
-  REGB0 = TAG_Int(138);
-  fra.me.REG[2] = NEW_ReduceAction463_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction447_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:955 */
-  REGB0 = TAG_Int(138);
-  fra.me.REG[2] = NEW_ReduceAction464_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction448_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:956 */
-  REGB0 = TAG_Int(139);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction449_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:957 */
-  REGB0 = TAG_Int(139);
-  fra.me.REG[2] = NEW_ReduceAction466_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction450_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:958 */
-  REGB0 = TAG_Int(139);
-  fra.me.REG[2] = NEW_ReduceAction467_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction451_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:959 */
-  REGB0 = TAG_Int(140);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction452_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:960 */
-  REGB0 = TAG_Int(140);
-  fra.me.REG[2] = NEW_ReduceAction469_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction453_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:961 */
-  REGB0 = TAG_Int(140);
-  fra.me.REG[2] = NEW_ReduceAction806_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(119);
+  fra.me.REG[2] = NEW_ReduceAction454_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:962 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction807_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction484_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:963 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction808_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction485_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:964 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction370_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction486_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:965 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction371_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction487_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:966 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction811_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction488_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:967 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction481_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction489_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:968 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction485_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction490_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:969 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction486_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction491_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:970 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction487_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction492_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:971 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction488_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(120);
+  fra.me.REG[2] = NEW_ReduceAction493_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:972 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction489_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:973 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction490_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction448_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:974 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction491_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(121);
+  fra.me.REG[2] = NEW_ReduceAction449_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:975 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction492_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(122);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:976 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(122);
+  fra.me.REG[2] = NEW_ReduceAction523_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:977 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction495_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:978 */
-  REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction496_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction525_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:979 */
-  REGB0 = TAG_Int(142);
-  fra.me.REG[2] = NEW_ReduceAction824_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction526_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:980 */
-  REGB0 = TAG_Int(142);
-  fra.me.REG[2] = NEW_ReduceAction825_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction527_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:981 */
-  REGB0 = TAG_Int(143);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(124);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:982 */
-  REGB0 = TAG_Int(143);
-  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(124);
+  fra.me.REG[2] = NEW_ReduceAction529_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:983 */
-  REGB0 = TAG_Int(143);
-  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:984 */
-  REGB0 = TAG_Int(144);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction531_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:985 */
-  REGB0 = TAG_Int(144);
-  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction532_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:986 */
-  REGB0 = TAG_Int(144);
-  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction533_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:987 */
-  REGB0 = TAG_Int(145);
-  fra.me.REG[2] = NEW_ReduceAction832_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction534_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:988 */
-  REGB0 = TAG_Int(145);
-  fra.me.REG[2] = NEW_ReduceAction833_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction535_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:989 */
-  REGB0 = TAG_Int(146);
-  fra.me.REG[2] = NEW_ReduceAction834_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction536_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:990 */
-  REGB0 = TAG_Int(146);
-  fra.me.REG[2] = NEW_ReduceAction835_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction537_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:991 */
-  REGB0 = TAG_Int(147);
-  fra.me.REG[2] = NEW_ReduceAction836_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction538_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:992 */
-  REGB0 = TAG_Int(147);
-  fra.me.REG[2] = NEW_ReduceAction837_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction539_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:993 */
-  REGB0 = TAG_Int(148);
-  fra.me.REG[2] = NEW_ReduceAction838_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction540_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:994 */
-  REGB0 = TAG_Int(148);
-  fra.me.REG[2] = NEW_ReduceAction839_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(125);
+  fra.me.REG[2] = NEW_ReduceAction541_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:995 */
-  REGB0 = TAG_Int(149);
-  fra.me.REG[2] = NEW_ReduceAction840_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:996 */
-  REGB0 = TAG_Int(149);
-  fra.me.REG[2] = NEW_ReduceAction841_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction543_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:997 */
-  REGB0 = TAG_Int(150);
-  fra.me.REG[2] = NEW_ReduceAction838_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(126);
+  fra.me.REG[2] = NEW_ReduceAction544_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:998 */
-  REGB0 = TAG_Int(150);
-  fra.me.REG[2] = NEW_ReduceAction839_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(127);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:999 */
-  REGB0 = TAG_Int(151);
-  fra.me.REG[2] = NEW_ReduceAction844_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(127);
+  fra.me.REG[2] = NEW_ReduceAction546_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1000 */
-  REGB0 = TAG_Int(151);
-  fra.me.REG[2] = NEW_ReduceAction845_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(127);
+  fra.me.REG[2] = NEW_ReduceAction547_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1001 */
-  REGB0 = TAG_Int(152);
-  fra.me.REG[2] = NEW_ReduceAction846_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(127);
+  fra.me.REG[2] = NEW_ReduceAction548_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1002 */
-  REGB0 = TAG_Int(152);
-  fra.me.REG[2] = NEW_ReduceAction847_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1003 */
-  REGB0 = TAG_Int(153);
-  fra.me.REG[2] = NEW_ReduceAction848_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction550_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1004 */
-  REGB0 = TAG_Int(153);
-  fra.me.REG[2] = NEW_ReduceAction849_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction551_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1005 */
-  REGB0 = TAG_Int(154);
-  fra.me.REG[2] = NEW_ReduceAction850_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(129);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1006 */
-  REGB0 = TAG_Int(154);
-  fra.me.REG[2] = NEW_ReduceAction851_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(129);
+  fra.me.REG[2] = NEW_ReduceAction553_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1007 */
-  REGB0 = TAG_Int(155);
-  fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(129);
+  fra.me.REG[2] = NEW_ReduceAction554_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1008 */
-  REGB0 = TAG_Int(155);
-  fra.me.REG[2] = NEW_ReduceAction853_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(129);
+  fra.me.REG[2] = NEW_ReduceAction555_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1009 */
-  REGB0 = TAG_Int(156);
-  fra.me.REG[2] = NEW_ReduceAction854_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction556_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1010 */
-  REGB0 = TAG_Int(156);
-  fra.me.REG[2] = NEW_ReduceAction855_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction557_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1011 */
-  REGB0 = TAG_Int(157);
-  fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction446_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1012 */
-  REGB0 = TAG_Int(157);
-  fra.me.REG[2] = NEW_ReduceAction857_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction447_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1013 */
-  REGB0 = TAG_Int(158);
-  fra.me.REG[2] = NEW_ReduceAction854_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction450_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1014 */
-  REGB0 = TAG_Int(158);
-  fra.me.REG[2] = NEW_ReduceAction855_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction451_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1015 */
-  REGB0 = TAG_Int(159);
-  fra.me.REG[2] = NEW_ReduceAction515_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction452_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1016 */
-  REGB0 = TAG_Int(159);
-  fra.me.REG[2] = NEW_ReduceAction861_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction453_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1017 */
-  REGB0 = TAG_Int(160);
-  fra.me.REG[2] = NEW_ReduceAction862_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction564_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1018 */
-  REGB0 = TAG_Int(160);
-  fra.me.REG[2] = NEW_ReduceAction863_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction565_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1019 */
-  REGB0 = TAG_Int(161);
-  fra.me.REG[2] = NEW_ReduceAction864_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction572_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   /* parser/parser.nit:1020 */
-  REGB0 = TAG_Int(161);
-  fra.me.REG[2] = NEW_ReduceAction865_parser___ReduceAction___init(REGB0);
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction573_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1021 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction574_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1022 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction575_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1023 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction576_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1024 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction577_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1025 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction578_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1026 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction579_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1027 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction580_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1028 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction581_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1029 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction582_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1030 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction583_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1031 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction584_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1032 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction585_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1033 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction586_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1034 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction587_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1035 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1036 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction591_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1037 */
+  REGB0 = TAG_Int(130);
+  fra.me.REG[2] = NEW_ReduceAction592_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1038 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction602_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1039 */
+  REGB0 = TAG_Int(131);
+  fra.me.REG[2] = NEW_ReduceAction603_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1040 */
+  REGB0 = TAG_Int(132);
+  fra.me.REG[2] = NEW_ReduceAction604_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1041 */
+  REGB0 = TAG_Int(132);
+  fra.me.REG[2] = NEW_ReduceAction605_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1042 */
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction618_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1043 */
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction619_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1044 */
+  REGB0 = TAG_Int(134);
+  fra.me.REG[2] = NEW_ReduceAction621_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1045 */
+  REGB0 = TAG_Int(134);
+  fra.me.REG[2] = NEW_ReduceAction622_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1046 */
+  REGB0 = TAG_Int(134);
+  fra.me.REG[2] = NEW_ReduceAction622_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1047 */
+  REGB0 = TAG_Int(135);
+  fra.me.REG[2] = NEW_ReduceAction404_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1048 */
+  REGB0 = TAG_Int(135);
+  fra.me.REG[2] = NEW_ReduceAction405_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1049 */
+  REGB0 = TAG_Int(135);
+  fra.me.REG[2] = NEW_ReduceAction406_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1050 */
+  REGB0 = TAG_Int(135);
+  fra.me.REG[2] = NEW_ReduceAction407_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1051 */
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1052 */
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction448_parser___ReduceAction___init(REGB0);
   /* parser/parser.nit:154 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_items(fra.me.REG[1]);
-  ATTR_parser___Parser____reduce_table(fra.me.REG[0]) = fra.me.REG[1];
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ComputeProdLocationVisitor___visit[] = "parser::ComputeProdLocationVisitor::(parser_prod::Visitor::visit)";
-void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t REGB2;
-  val_t REGB3;
-  val_t REGB4;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1051;
-  fra.me.meth = LOCATE_parser___ComputeProdLocationVisitor___visit;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:1053 */
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:1054 */
-    goto label1;
-  } else {
-    /* parser/parser.nit:1055 */
-    REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_parser___parser_nodes___Token, ID_parser___parser_nodes___Token)) /*cast Token*/;
-    if (UNTAG_Bool(REGB0)) {
-      /* parser/parser.nit:1056 */
-      REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser, 1056);
-      }
-      fra.me.REG[2] = CALL_parser___parser_nodes___ANode___location(fra.me.REG[1])(fra.me.REG[1]);
-      /* parser/parser.nit:1057 */
-      ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = fra.me.REG[2];
-      /* parser/parser.nit:1060 */
-      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, 1060);
-      }
-      fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
-      REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-      if (UNTAG_Bool(REGB0)) {
-        /* parser/parser.nit:1061 */
-        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, 1061);
-        }
-        fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
-        /* ../lib/standard/collection/array.nit:269 */
-        REGB0 = TAG_Int(0);
-        /* ../lib/standard/collection/array.nit:270 */
-        REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
-        if (UNTAG_Bool(REGB1)) {
-        } else {
-          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
-        }
-        REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3]);
-        /* ../lib/standard/collection/array.nit:271 */
-        fra.me.REG[4] = ATTR_standard___collection___array___Array____items(fra.me.REG[3]);
-        /* ../lib/standard/collection/array.nit:272 */
-        while(1) {
-          /* ../lib/standard/collection/array.nit:24 */
-          REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
-          if (UNTAG_Bool(REGB1)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
-          }
-          REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3]);
-          REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
-          if (UNTAG_Bool(REGB2)) {
-          } else {
-            nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
-          }
-          /* ../lib/standard/kernel.nit:235 */
-          REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-          /* ../lib/standard/collection/array.nit:272 */
-          if (UNTAG_Bool(REGB1)) {
-            /* ../lib/standard/collection/array.nit:273 */
-            REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-            if (UNTAG_Bool(REGB1)) {
-              nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
-            }
-            /* ../lib/standard/collection/array.nit:718 */
-            fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
-            /* parser/parser.nit:1062 */
-            ATTR_parser___Prod____first_location(fra.me.REG[5]) = fra.me.REG[2];
-            /* ../lib/standard/collection/array.nit:274 */
-            REGB1 = TAG_Int(1);
-            /* ../lib/standard/kernel.nit:238 */
-            REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
-            /* ../lib/standard/collection/array.nit:274 */
-            REGB0 = REGB1;
-          } else {
-            /* ../lib/standard/collection/array.nit:272 */
-            goto label2;
-          }
-        }
-        label2: while(0);
-        /* parser/parser.nit:1064 */
-        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, 1064);
-        }
-        fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
-        CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[4])(fra.me.REG[4]);
-      }
-      /* parser/parser.nit:1068 */
-      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, 1068);
-      }
-      fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-      REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-      REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-      if (UNTAG_Bool(REGB0)) {
-        /* parser/parser.nit:1069 */
-        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, 1069);
-        }
-        fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-        /* ../lib/standard/collection/array.nit:269 */
-        REGB0 = TAG_Int(0);
-        /* ../lib/standard/collection/array.nit:270 */
-        REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
-        if (UNTAG_Bool(REGB1)) {
-        } else {
-          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
-        }
-        REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
-        /* ../lib/standard/collection/array.nit:271 */
-        fra.me.REG[3] = ATTR_standard___collection___array___Array____items(fra.me.REG[4]);
-        /* ../lib/standard/collection/array.nit:272 */
-        while(1) {
-          /* ../lib/standard/collection/array.nit:24 */
-          REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
-          if (UNTAG_Bool(REGB1)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
-          }
-          REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
-          REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
-          if (UNTAG_Bool(REGB2)) {
-          } else {
-            nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
-          }
-          /* ../lib/standard/kernel.nit:235 */
-          REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-          /* ../lib/standard/collection/array.nit:272 */
-          if (UNTAG_Bool(REGB1)) {
-            /* ../lib/standard/collection/array.nit:273 */
-            REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-            if (UNTAG_Bool(REGB1)) {
-              nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
-            }
-            /* ../lib/standard/collection/array.nit:718 */
-            fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
-            /* parser/parser.nit:1072 */
-            fra.me.REG[6] = fra.me.REG[2];
-            /* parser/parser.nit:1073 */
-            fra.me.REG[7] = ATTR_parser___Prod____last_location(fra.me.REG[5]);
-            /* parser/parser.nit:1074 */
-            fra.me.REG[8] = CALL_location___Location___file(fra.me.REG[6])(fra.me.REG[6]);
+  REGB0 = TAG_Int(136);
+  fra.me.REG[2] = NEW_ReduceAction449_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1054 */
+  REGB0 = TAG_Int(137);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1055 */
+  REGB0 = TAG_Int(137);
+  fra.me.REG[2] = NEW_ReduceAction523_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1056 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1057 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction525_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1058 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction526_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1059 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction527_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1060 */
+  REGB0 = TAG_Int(139);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1061 */
+  REGB0 = TAG_Int(139);
+  fra.me.REG[2] = NEW_ReduceAction529_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1062 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1063 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction531_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1064 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction532_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1065 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction533_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1066 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction534_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1067 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction535_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1068 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction536_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1069 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction537_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1070 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction538_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1071 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction539_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1072 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction540_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1073 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction541_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1074 */
+  REGB0 = TAG_Int(141);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1075 */
+  REGB0 = TAG_Int(141);
+  fra.me.REG[2] = NEW_ReduceAction543_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1076 */
+  REGB0 = TAG_Int(141);
+  fra.me.REG[2] = NEW_ReduceAction544_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1077 */
+  REGB0 = TAG_Int(142);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1078 */
+  REGB0 = TAG_Int(142);
+  fra.me.REG[2] = NEW_ReduceAction546_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1079 */
+  REGB0 = TAG_Int(142);
+  fra.me.REG[2] = NEW_ReduceAction547_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1080 */
+  REGB0 = TAG_Int(142);
+  fra.me.REG[2] = NEW_ReduceAction548_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1081 */
+  REGB0 = TAG_Int(143);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1082 */
+  REGB0 = TAG_Int(143);
+  fra.me.REG[2] = NEW_ReduceAction550_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1083 */
+  REGB0 = TAG_Int(143);
+  fra.me.REG[2] = NEW_ReduceAction551_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1084 */
+  REGB0 = TAG_Int(144);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1085 */
+  REGB0 = TAG_Int(144);
+  fra.me.REG[2] = NEW_ReduceAction553_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1086 */
+  REGB0 = TAG_Int(144);
+  fra.me.REG[2] = NEW_ReduceAction931_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1087 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction932_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1088 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction933_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1089 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction450_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1090 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction451_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1091 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction936_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1092 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction565_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1093 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction572_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1094 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction573_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1095 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction574_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1096 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction575_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1097 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction576_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1098 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction577_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1099 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction578_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1100 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction579_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1101 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction580_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1102 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction581_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1103 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction582_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1104 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction583_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1105 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction584_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1106 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction585_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1107 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction586_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1108 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction587_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1109 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1110 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction591_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1111 */
+  REGB0 = TAG_Int(145);
+  fra.me.REG[2] = NEW_ReduceAction592_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1112 */
+  REGB0 = TAG_Int(146);
+  fra.me.REG[2] = NEW_ReduceAction957_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1113 */
+  REGB0 = TAG_Int(146);
+  fra.me.REG[2] = NEW_ReduceAction958_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1114 */
+  REGB0 = TAG_Int(147);
+  fra.me.REG[2] = NEW_ReduceAction416_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1115 */
+  REGB0 = TAG_Int(147);
+  fra.me.REG[2] = NEW_ReduceAction417_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1116 */
+  REGB0 = TAG_Int(147);
+  fra.me.REG[2] = NEW_ReduceAction418_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1117 */
+  REGB0 = TAG_Int(147);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1118 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1119 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1120 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction429_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1121 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction430_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1122 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction431_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1123 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction432_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1124 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction433_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1125 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction434_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1126 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction435_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1127 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction436_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1128 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction437_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1129 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction438_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1130 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction439_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1131 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1132 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1133 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1134 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1135 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1136 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1137 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction446_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1138 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction447_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1139 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction448_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1140 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction449_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1141 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction450_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1142 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction451_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1143 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction452_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1144 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction453_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1145 */
+  REGB0 = TAG_Int(148);
+  fra.me.REG[2] = NEW_ReduceAction454_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1146 */
+  REGB0 = TAG_Int(149);
+  fra.me.REG[2] = NEW_ReduceAction456_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1147 */
+  REGB0 = TAG_Int(149);
+  fra.me.REG[2] = NEW_ReduceAction457_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1148 */
+  REGB0 = TAG_Int(150);
+  fra.me.REG[2] = NEW_ReduceAction458_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1149 */
+  REGB0 = TAG_Int(150);
+  fra.me.REG[2] = NEW_ReduceAction459_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1150 */
+  REGB0 = TAG_Int(150);
+  fra.me.REG[2] = NEW_ReduceAction460_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1151 */
+  REGB0 = TAG_Int(150);
+  fra.me.REG[2] = NEW_ReduceAction461_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1152 */
+  REGB0 = TAG_Int(150);
+  fra.me.REG[2] = NEW_ReduceAction462_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1153 */
+  REGB0 = TAG_Int(150);
+  fra.me.REG[2] = NEW_ReduceAction463_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1154 */
+  REGB0 = TAG_Int(150);
+  fra.me.REG[2] = NEW_ReduceAction464_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1155 */
+  REGB0 = TAG_Int(150);
+  fra.me.REG[2] = NEW_ReduceAction465_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1156 */
+  REGB0 = TAG_Int(150);
+  fra.me.REG[2] = NEW_ReduceAction466_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1157 */
+  REGB0 = TAG_Int(151);
+  fra.me.REG[2] = NEW_ReduceAction475_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1158 */
+  REGB0 = TAG_Int(152);
+  fra.me.REG[2] = NEW_ReduceAction476_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1159 */
+  REGB0 = TAG_Int(152);
+  fra.me.REG[2] = NEW_ReduceAction477_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1160 */
+  REGB0 = TAG_Int(152);
+  fra.me.REG[2] = NEW_ReduceAction478_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1161 */
+  REGB0 = TAG_Int(152);
+  fra.me.REG[2] = NEW_ReduceAction479_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1162 */
+  REGB0 = TAG_Int(152);
+  fra.me.REG[2] = NEW_ReduceAction480_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1163 */
+  REGB0 = TAG_Int(152);
+  fra.me.REG[2] = NEW_ReduceAction481_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1164 */
+  REGB0 = TAG_Int(152);
+  fra.me.REG[2] = NEW_ReduceAction482_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1165 */
+  REGB0 = TAG_Int(152);
+  fra.me.REG[2] = NEW_ReduceAction483_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1166 */
+  REGB0 = TAG_Int(153);
+  fra.me.REG[2] = NEW_ReduceAction484_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1167 */
+  REGB0 = TAG_Int(153);
+  fra.me.REG[2] = NEW_ReduceAction485_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1168 */
+  REGB0 = TAG_Int(153);
+  fra.me.REG[2] = NEW_ReduceAction486_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1169 */
+  REGB0 = TAG_Int(153);
+  fra.me.REG[2] = NEW_ReduceAction487_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1170 */
+  REGB0 = TAG_Int(153);
+  fra.me.REG[2] = NEW_ReduceAction488_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1171 */
+  REGB0 = TAG_Int(153);
+  fra.me.REG[2] = NEW_ReduceAction489_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1172 */
+  REGB0 = TAG_Int(153);
+  fra.me.REG[2] = NEW_ReduceAction490_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1173 */
+  REGB0 = TAG_Int(153);
+  fra.me.REG[2] = NEW_ReduceAction491_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1174 */
+  REGB0 = TAG_Int(153);
+  fra.me.REG[2] = NEW_ReduceAction492_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1175 */
+  REGB0 = TAG_Int(153);
+  fra.me.REG[2] = NEW_ReduceAction493_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1176 */
+  REGB0 = TAG_Int(154);
+  fra.me.REG[2] = NEW_ReduceAction496_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1177 */
+  REGB0 = TAG_Int(154);
+  fra.me.REG[2] = NEW_ReduceAction497_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1178 */
+  REGB0 = TAG_Int(155);
+  fra.me.REG[2] = NEW_ReduceAction498_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1179 */
+  REGB0 = TAG_Int(156);
+  fra.me.REG[2] = NEW_ReduceAction505_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1180 */
+  REGB0 = TAG_Int(156);
+  fra.me.REG[2] = NEW_ReduceAction506_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1181 */
+  REGB0 = TAG_Int(157);
+  fra.me.REG[2] = NEW_ReduceAction507_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1182 */
+  REGB0 = TAG_Int(157);
+  fra.me.REG[2] = NEW_ReduceAction508_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1183 */
+  REGB0 = TAG_Int(158);
+  fra.me.REG[2] = NEW_ReduceAction509_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1184 */
+  REGB0 = TAG_Int(158);
+  fra.me.REG[2] = NEW_ReduceAction510_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1185 */
+  REGB0 = TAG_Int(158);
+  fra.me.REG[2] = NEW_ReduceAction511_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1186 */
+  REGB0 = TAG_Int(158);
+  fra.me.REG[2] = NEW_ReduceAction512_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1187 */
+  REGB0 = TAG_Int(159);
+  fra.me.REG[2] = NEW_ReduceAction513_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1188 */
+  REGB0 = TAG_Int(159);
+  fra.me.REG[2] = NEW_ReduceAction514_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1189 */
+  REGB0 = TAG_Int(160);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1190 */
+  REGB0 = TAG_Int(160);
+  fra.me.REG[2] = NEW_ReduceAction448_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1191 */
+  REGB0 = TAG_Int(160);
+  fra.me.REG[2] = NEW_ReduceAction449_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1192 */
+  REGB0 = TAG_Int(160);
+  fra.me.REG[2] = NEW_ReduceAction521_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1193 */
+  REGB0 = TAG_Int(161);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1194 */
+  REGB0 = TAG_Int(161);
+  fra.me.REG[2] = NEW_ReduceAction448_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1195 */
+  REGB0 = TAG_Int(161);
+  fra.me.REG[2] = NEW_ReduceAction449_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1196 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1197 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1198 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction429_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1199 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction430_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1200 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction431_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1201 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction432_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1202 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction433_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1203 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction434_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1204 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction435_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1205 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction436_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1206 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction437_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1207 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction438_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1208 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction439_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1209 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1210 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1211 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1212 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1213 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1214 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1215 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction446_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1216 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction447_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1217 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction448_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1218 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction449_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1219 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction450_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1220 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction451_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1221 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction452_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1222 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction453_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1223 */
+  REGB0 = TAG_Int(162);
+  fra.me.REG[2] = NEW_ReduceAction454_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1224 */
+  REGB0 = TAG_Int(163);
+  fra.me.REG[2] = NEW_ReduceAction484_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1225 */
+  REGB0 = TAG_Int(163);
+  fra.me.REG[2] = NEW_ReduceAction485_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1226 */
+  REGB0 = TAG_Int(163);
+  fra.me.REG[2] = NEW_ReduceAction486_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1227 */
+  REGB0 = TAG_Int(163);
+  fra.me.REG[2] = NEW_ReduceAction487_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1228 */
+  REGB0 = TAG_Int(163);
+  fra.me.REG[2] = NEW_ReduceAction488_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1229 */
+  REGB0 = TAG_Int(163);
+  fra.me.REG[2] = NEW_ReduceAction489_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1230 */
+  REGB0 = TAG_Int(163);
+  fra.me.REG[2] = NEW_ReduceAction490_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1231 */
+  REGB0 = TAG_Int(163);
+  fra.me.REG[2] = NEW_ReduceAction491_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1232 */
+  REGB0 = TAG_Int(163);
+  fra.me.REG[2] = NEW_ReduceAction492_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1233 */
+  REGB0 = TAG_Int(163);
+  fra.me.REG[2] = NEW_ReduceAction493_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1234 */
+  REGB0 = TAG_Int(164);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1235 */
+  REGB0 = TAG_Int(164);
+  fra.me.REG[2] = NEW_ReduceAction448_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1236 */
+  REGB0 = TAG_Int(164);
+  fra.me.REG[2] = NEW_ReduceAction449_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1237 */
+  REGB0 = TAG_Int(165);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1238 */
+  REGB0 = TAG_Int(165);
+  fra.me.REG[2] = NEW_ReduceAction448_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1239 */
+  REGB0 = TAG_Int(165);
+  fra.me.REG[2] = NEW_ReduceAction449_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1240 */
+  REGB0 = TAG_Int(166);
+  fra.me.REG[2] = NEW_ReduceAction416_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1241 */
+  REGB0 = TAG_Int(166);
+  fra.me.REG[2] = NEW_ReduceAction417_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1242 */
+  REGB0 = TAG_Int(166);
+  fra.me.REG[2] = NEW_ReduceAction418_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1243 */
+  REGB0 = TAG_Int(167);
+  fra.me.REG[2] = NEW_ReduceAction416_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1244 */
+  REGB0 = TAG_Int(167);
+  fra.me.REG[2] = NEW_ReduceAction417_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1245 */
+  REGB0 = TAG_Int(167);
+  fra.me.REG[2] = NEW_ReduceAction418_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1246 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1247 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1248 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction429_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1249 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction430_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1250 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction431_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1251 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction432_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1252 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction433_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1253 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction434_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1254 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction435_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1255 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction436_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1256 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction437_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1257 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction438_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1258 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction439_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1259 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1260 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1261 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1262 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1263 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1264 */
+  REGB0 = TAG_Int(168);
+  fra.me.REG[2] = NEW_ReduceAction454_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1265 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1266 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1267 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction429_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1268 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction430_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1269 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction431_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1270 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction432_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1271 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction433_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1272 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction434_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1273 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction435_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1274 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction436_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1275 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction437_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1276 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction438_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1277 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction439_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1278 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1279 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1280 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1281 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1282 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1283 */
+  REGB0 = TAG_Int(169);
+  fra.me.REG[2] = NEW_ReduceAction454_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1284 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1285 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1286 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction429_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1287 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction430_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1288 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction431_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1289 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction432_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1290 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction433_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1291 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction434_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1292 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction435_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1293 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction436_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1294 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction437_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1295 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction438_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1296 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction439_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1297 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1298 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1299 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1300 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1301 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1302 */
+  REGB0 = TAG_Int(170);
+  fra.me.REG[2] = NEW_ReduceAction454_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1303 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1304 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1305 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction429_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1306 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction430_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1307 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction431_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1308 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction432_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1309 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction433_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1310 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction434_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1311 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction435_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1312 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction436_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1313 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction437_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1314 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction438_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1315 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction439_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1316 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1317 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1318 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1319 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1320 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1321 */
+  REGB0 = TAG_Int(171);
+  fra.me.REG[2] = NEW_ReduceAction454_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1322 */
+  REGB0 = TAG_Int(172);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1323 */
+  REGB0 = TAG_Int(172);
+  fra.me.REG[2] = NEW_ReduceAction523_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1324 */
+  REGB0 = TAG_Int(173);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1325 */
+  REGB0 = TAG_Int(173);
+  fra.me.REG[2] = NEW_ReduceAction525_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1326 */
+  REGB0 = TAG_Int(173);
+  fra.me.REG[2] = NEW_ReduceAction526_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1327 */
+  REGB0 = TAG_Int(173);
+  fra.me.REG[2] = NEW_ReduceAction527_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1328 */
+  REGB0 = TAG_Int(174);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1329 */
+  REGB0 = TAG_Int(174);
+  fra.me.REG[2] = NEW_ReduceAction529_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1330 */
+  REGB0 = TAG_Int(175);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1331 */
+  REGB0 = TAG_Int(175);
+  fra.me.REG[2] = NEW_ReduceAction531_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1332 */
+  REGB0 = TAG_Int(175);
+  fra.me.REG[2] = NEW_ReduceAction533_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1333 */
+  REGB0 = TAG_Int(175);
+  fra.me.REG[2] = NEW_ReduceAction534_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1334 */
+  REGB0 = TAG_Int(175);
+  fra.me.REG[2] = NEW_ReduceAction535_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1335 */
+  REGB0 = TAG_Int(175);
+  fra.me.REG[2] = NEW_ReduceAction536_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1336 */
+  REGB0 = TAG_Int(175);
+  fra.me.REG[2] = NEW_ReduceAction537_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1337 */
+  REGB0 = TAG_Int(175);
+  fra.me.REG[2] = NEW_ReduceAction538_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1338 */
+  REGB0 = TAG_Int(175);
+  fra.me.REG[2] = NEW_ReduceAction539_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1339 */
+  REGB0 = TAG_Int(175);
+  fra.me.REG[2] = NEW_ReduceAction540_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1340 */
+  REGB0 = TAG_Int(175);
+  fra.me.REG[2] = NEW_ReduceAction541_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1341 */
+  REGB0 = TAG_Int(176);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1342 */
+  REGB0 = TAG_Int(176);
+  fra.me.REG[2] = NEW_ReduceAction523_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1343 */
+  REGB0 = TAG_Int(177);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1344 */
+  REGB0 = TAG_Int(177);
+  fra.me.REG[2] = NEW_ReduceAction525_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1345 */
+  REGB0 = TAG_Int(177);
+  fra.me.REG[2] = NEW_ReduceAction526_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1346 */
+  REGB0 = TAG_Int(177);
+  fra.me.REG[2] = NEW_ReduceAction527_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1347 */
+  REGB0 = TAG_Int(178);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1348 */
+  REGB0 = TAG_Int(178);
+  fra.me.REG[2] = NEW_ReduceAction529_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1349 */
+  REGB0 = TAG_Int(179);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1350 */
+  REGB0 = TAG_Int(179);
+  fra.me.REG[2] = NEW_ReduceAction531_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1351 */
+  REGB0 = TAG_Int(179);
+  fra.me.REG[2] = NEW_ReduceAction533_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1352 */
+  REGB0 = TAG_Int(179);
+  fra.me.REG[2] = NEW_ReduceAction534_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1353 */
+  REGB0 = TAG_Int(179);
+  fra.me.REG[2] = NEW_ReduceAction535_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1354 */
+  REGB0 = TAG_Int(179);
+  fra.me.REG[2] = NEW_ReduceAction536_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1355 */
+  REGB0 = TAG_Int(179);
+  fra.me.REG[2] = NEW_ReduceAction537_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1356 */
+  REGB0 = TAG_Int(179);
+  fra.me.REG[2] = NEW_ReduceAction538_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1357 */
+  REGB0 = TAG_Int(179);
+  fra.me.REG[2] = NEW_ReduceAction539_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1358 */
+  REGB0 = TAG_Int(179);
+  fra.me.REG[2] = NEW_ReduceAction540_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1359 */
+  REGB0 = TAG_Int(179);
+  fra.me.REG[2] = NEW_ReduceAction541_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1360 */
+  REGB0 = TAG_Int(180);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1361 */
+  REGB0 = TAG_Int(180);
+  fra.me.REG[2] = NEW_ReduceAction523_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1362 */
+  REGB0 = TAG_Int(181);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1363 */
+  REGB0 = TAG_Int(181);
+  fra.me.REG[2] = NEW_ReduceAction525_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1364 */
+  REGB0 = TAG_Int(181);
+  fra.me.REG[2] = NEW_ReduceAction526_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1365 */
+  REGB0 = TAG_Int(181);
+  fra.me.REG[2] = NEW_ReduceAction527_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1366 */
+  REGB0 = TAG_Int(182);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1367 */
+  REGB0 = TAG_Int(182);
+  fra.me.REG[2] = NEW_ReduceAction529_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1368 */
+  REGB0 = TAG_Int(183);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1369 */
+  REGB0 = TAG_Int(183);
+  fra.me.REG[2] = NEW_ReduceAction531_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1370 */
+  REGB0 = TAG_Int(183);
+  fra.me.REG[2] = NEW_ReduceAction533_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1371 */
+  REGB0 = TAG_Int(183);
+  fra.me.REG[2] = NEW_ReduceAction534_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1372 */
+  REGB0 = TAG_Int(183);
+  fra.me.REG[2] = NEW_ReduceAction535_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1373 */
+  REGB0 = TAG_Int(183);
+  fra.me.REG[2] = NEW_ReduceAction536_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1374 */
+  REGB0 = TAG_Int(183);
+  fra.me.REG[2] = NEW_ReduceAction537_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1375 */
+  REGB0 = TAG_Int(183);
+  fra.me.REG[2] = NEW_ReduceAction538_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1376 */
+  REGB0 = TAG_Int(183);
+  fra.me.REG[2] = NEW_ReduceAction539_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1377 */
+  REGB0 = TAG_Int(183);
+  fra.me.REG[2] = NEW_ReduceAction540_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1378 */
+  REGB0 = TAG_Int(183);
+  fra.me.REG[2] = NEW_ReduceAction541_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1379 */
+  REGB0 = TAG_Int(184);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1380 */
+  REGB0 = TAG_Int(184);
+  fra.me.REG[2] = NEW_ReduceAction523_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1381 */
+  REGB0 = TAG_Int(185);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1382 */
+  REGB0 = TAG_Int(185);
+  fra.me.REG[2] = NEW_ReduceAction525_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1383 */
+  REGB0 = TAG_Int(185);
+  fra.me.REG[2] = NEW_ReduceAction526_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1384 */
+  REGB0 = TAG_Int(185);
+  fra.me.REG[2] = NEW_ReduceAction527_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1385 */
+  REGB0 = TAG_Int(186);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1386 */
+  REGB0 = TAG_Int(186);
+  fra.me.REG[2] = NEW_ReduceAction529_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1387 */
+  REGB0 = TAG_Int(187);
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1388 */
+  REGB0 = TAG_Int(187);
+  fra.me.REG[2] = NEW_ReduceAction531_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1389 */
+  REGB0 = TAG_Int(187);
+  fra.me.REG[2] = NEW_ReduceAction533_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1390 */
+  REGB0 = TAG_Int(187);
+  fra.me.REG[2] = NEW_ReduceAction534_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1391 */
+  REGB0 = TAG_Int(187);
+  fra.me.REG[2] = NEW_ReduceAction535_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1392 */
+  REGB0 = TAG_Int(187);
+  fra.me.REG[2] = NEW_ReduceAction536_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1393 */
+  REGB0 = TAG_Int(187);
+  fra.me.REG[2] = NEW_ReduceAction537_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1394 */
+  REGB0 = TAG_Int(187);
+  fra.me.REG[2] = NEW_ReduceAction538_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1395 */
+  REGB0 = TAG_Int(187);
+  fra.me.REG[2] = NEW_ReduceAction539_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1396 */
+  REGB0 = TAG_Int(187);
+  fra.me.REG[2] = NEW_ReduceAction540_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1397 */
+  REGB0 = TAG_Int(187);
+  fra.me.REG[2] = NEW_ReduceAction541_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1398 */
+  REGB0 = TAG_Int(188);
+  fra.me.REG[2] = NEW_ReduceAction612_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1399 */
+  REGB0 = TAG_Int(188);
+  fra.me.REG[2] = NEW_ReduceAction613_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1400 */
+  REGB0 = TAG_Int(188);
+  fra.me.REG[2] = NEW_ReduceAction614_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1401 */
+  REGB0 = TAG_Int(188);
+  fra.me.REG[2] = NEW_ReduceAction615_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1402 */
+  REGB0 = TAG_Int(188);
+  fra.me.REG[2] = NEW_ReduceAction616_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1403 */
+  REGB0 = TAG_Int(189);
+  fra.me.REG[2] = NEW_ReduceAction625_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1404 */
+  REGB0 = TAG_Int(189);
+  fra.me.REG[2] = NEW_ReduceAction628_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1405 */
+  REGB0 = TAG_Int(190);
+  fra.me.REG[2] = NEW_ReduceAction1250_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1406 */
+  REGB0 = TAG_Int(190);
+  fra.me.REG[2] = NEW_ReduceAction1251_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1407 */
+  REGB0 = TAG_Int(191);
+  fra.me.REG[2] = NEW_ReduceAction1252_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1408 */
+  REGB0 = TAG_Int(191);
+  fra.me.REG[2] = NEW_ReduceAction1253_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1409 */
+  REGB0 = TAG_Int(192);
+  fra.me.REG[2] = NEW_ReduceAction1254_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1410 */
+  REGB0 = TAG_Int(192);
+  fra.me.REG[2] = NEW_ReduceAction1255_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1411 */
+  REGB0 = TAG_Int(193);
+  fra.me.REG[2] = NEW_ReduceAction1256_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1412 */
+  REGB0 = TAG_Int(193);
+  fra.me.REG[2] = NEW_ReduceAction1257_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1413 */
+  REGB0 = TAG_Int(194);
+  fra.me.REG[2] = NEW_ReduceAction1258_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1414 */
+  REGB0 = TAG_Int(194);
+  fra.me.REG[2] = NEW_ReduceAction1259_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1415 */
+  REGB0 = TAG_Int(195);
+  fra.me.REG[2] = NEW_ReduceAction1256_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1416 */
+  REGB0 = TAG_Int(195);
+  fra.me.REG[2] = NEW_ReduceAction1257_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1417 */
+  REGB0 = TAG_Int(196);
+  fra.me.REG[2] = NEW_ReduceAction1262_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1418 */
+  REGB0 = TAG_Int(196);
+  fra.me.REG[2] = NEW_ReduceAction1263_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1419 */
+  REGB0 = TAG_Int(197);
+  fra.me.REG[2] = NEW_ReduceAction1264_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1420 */
+  REGB0 = TAG_Int(197);
+  fra.me.REG[2] = NEW_ReduceAction1265_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1421 */
+  REGB0 = TAG_Int(198);
+  fra.me.REG[2] = NEW_ReduceAction1266_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1422 */
+  REGB0 = TAG_Int(198);
+  fra.me.REG[2] = NEW_ReduceAction1267_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1423 */
+  REGB0 = TAG_Int(199);
+  fra.me.REG[2] = NEW_ReduceAction1268_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1424 */
+  REGB0 = TAG_Int(199);
+  fra.me.REG[2] = NEW_ReduceAction1269_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1425 */
+  REGB0 = TAG_Int(200);
+  fra.me.REG[2] = NEW_ReduceAction412_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1426 */
+  REGB0 = TAG_Int(200);
+  fra.me.REG[2] = NEW_ReduceAction1271_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1427 */
+  REGB0 = TAG_Int(201);
+  fra.me.REG[2] = NEW_ReduceAction1272_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1428 */
+  REGB0 = TAG_Int(201);
+  fra.me.REG[2] = NEW_ReduceAction1273_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1429 */
+  REGB0 = TAG_Int(202);
+  fra.me.REG[2] = NEW_ReduceAction380_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1430 */
+  REGB0 = TAG_Int(202);
+  fra.me.REG[2] = NEW_ReduceAction1275_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1431 */
+  REGB0 = TAG_Int(203);
+  fra.me.REG[2] = NEW_ReduceAction609_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1432 */
+  REGB0 = TAG_Int(203);
+  fra.me.REG[2] = NEW_ReduceAction1277_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1433 */
+  REGB0 = TAG_Int(204);
+  fra.me.REG[2] = NEW_ReduceAction609_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1434 */
+  REGB0 = TAG_Int(204);
+  fra.me.REG[2] = NEW_ReduceAction1277_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1435 */
+  REGB0 = TAG_Int(205);
+  fra.me.REG[2] = NEW_ReduceAction618_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1436 */
+  REGB0 = TAG_Int(205);
+  fra.me.REG[2] = NEW_ReduceAction1281_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1437 */
+  REGB0 = TAG_Int(206);
+  fra.me.REG[2] = NEW_ReduceAction1272_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1438 */
+  REGB0 = TAG_Int(206);
+  fra.me.REG[2] = NEW_ReduceAction1273_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1439 */
+  REGB0 = TAG_Int(207);
+  fra.me.REG[2] = NEW_ReduceAction640_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1440 */
+  REGB0 = TAG_Int(207);
+  fra.me.REG[2] = NEW_ReduceAction1285_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1441 */
+  REGB0 = TAG_Int(208);
+  fra.me.REG[2] = NEW_ReduceAction1286_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1442 */
+  REGB0 = TAG_Int(208);
+  fra.me.REG[2] = NEW_ReduceAction1287_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1443 */
+  REGB0 = TAG_Int(209);
+  fra.me.REG[2] = NEW_ReduceAction1288_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1444 */
+  REGB0 = TAG_Int(209);
+  fra.me.REG[2] = NEW_ReduceAction1289_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1445 */
+  REGB0 = TAG_Int(210);
+  fra.me.REG[2] = NEW_ReduceAction609_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1446 */
+  REGB0 = TAG_Int(210);
+  fra.me.REG[2] = NEW_ReduceAction1277_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:154 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_items(fra.me.REG[1]);
+  ATTR_parser___Parser____reduce_table(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ComputeProdLocationVisitor___visit[] = "parser::ComputeProdLocationVisitor::(parser_prod::Visitor::visit)";
+void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1477;
+  fra.me.meth = LOCATE_parser___ComputeProdLocationVisitor___visit;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = 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:1479 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:1480 */
+    goto label1;
+  } else {
+    /* parser/parser.nit:1481 */
+    REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_parser___parser_nodes___Token, ID_parser___parser_nodes___Token)) /*cast Token*/;
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser.nit:1482 */
+      REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser, 1482);
+      }
+      fra.me.REG[2] = CALL_parser___parser_nodes___ANode___location(fra.me.REG[1])(fra.me.REG[1]);
+      /* parser/parser.nit:1483 */
+      ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser.nit:1486 */
+      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, 1486);
+      }
+      fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
+      REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+      if (UNTAG_Bool(REGB0)) {
+        /* parser/parser.nit:1487 */
+        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, 1487);
+        }
+        fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
+        /* ../lib/standard/collection/array.nit:269 */
+        REGB0 = TAG_Int(0);
+        /* ../lib/standard/collection/array.nit:270 */
+        REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
+        if (UNTAG_Bool(REGB1)) {
+        } else {
+          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
+        }
+        REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3]);
+        /* ../lib/standard/collection/array.nit:271 */
+        fra.me.REG[4] = ATTR_standard___collection___array___Array____items(fra.me.REG[3]);
+        /* ../lib/standard/collection/array.nit:272 */
+        while(1) {
+          /* ../lib/standard/collection/array.nit:24 */
+          REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+          }
+          REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3]);
+          REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+          if (UNTAG_Bool(REGB2)) {
+          } else {
+            nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+          }
+          /* ../lib/standard/kernel.nit:235 */
+          REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+          /* ../lib/standard/collection/array.nit:272 */
+          if (UNTAG_Bool(REGB1)) {
+            /* ../lib/standard/collection/array.nit:273 */
+            REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+            if (UNTAG_Bool(REGB1)) {
+              nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
+            }
+            /* ../lib/standard/collection/array.nit:724 */
+            fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
+            /* parser/parser.nit:1488 */
+            ATTR_parser___Prod____first_location(fra.me.REG[5]) = fra.me.REG[2];
+            /* ../lib/standard/collection/array.nit:274 */
+            REGB1 = TAG_Int(1);
+            /* ../lib/standard/kernel.nit:238 */
+            REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+            /* ../lib/standard/collection/array.nit:274 */
+            REGB0 = REGB1;
+          } else {
+            /* ../lib/standard/collection/array.nit:272 */
+            goto label2;
+          }
+        }
+        label2: while(0);
+        /* parser/parser.nit:1490 */
+        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, 1490);
+        }
+        fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
+        CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[4])(fra.me.REG[4]);
+      }
+      /* parser/parser.nit:1494 */
+      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, 1494);
+      }
+      fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
+      REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
+      REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+      if (UNTAG_Bool(REGB0)) {
+        /* parser/parser.nit:1495 */
+        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, 1495);
+        }
+        fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
+        /* ../lib/standard/collection/array.nit:269 */
+        REGB0 = TAG_Int(0);
+        /* ../lib/standard/collection/array.nit:270 */
+        REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
+        if (UNTAG_Bool(REGB1)) {
+        } else {
+          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
+        }
+        REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
+        /* ../lib/standard/collection/array.nit:271 */
+        fra.me.REG[3] = ATTR_standard___collection___array___Array____items(fra.me.REG[4]);
+        /* ../lib/standard/collection/array.nit:272 */
+        while(1) {
+          /* ../lib/standard/collection/array.nit:24 */
+          REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+          }
+          REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
+          REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+          if (UNTAG_Bool(REGB2)) {
+          } else {
+            nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+          }
+          /* ../lib/standard/kernel.nit:235 */
+          REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+          /* ../lib/standard/collection/array.nit:272 */
+          if (UNTAG_Bool(REGB1)) {
+            /* ../lib/standard/collection/array.nit:273 */
+            REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+            if (UNTAG_Bool(REGB1)) {
+              nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
+            }
+            /* ../lib/standard/collection/array.nit:724 */
+            fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
+            /* parser/parser.nit:1498 */
+            fra.me.REG[6] = fra.me.REG[2];
+            /* parser/parser.nit:1499 */
+            fra.me.REG[7] = ATTR_parser___Prod____last_location(fra.me.REG[5]);
+            /* parser/parser.nit:1500 */
+            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, 1074);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 1500);
+            }
+            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, 1500);
+            }
+            REGB3 = CALL_location___Location___column_end(fra.me.REG[7])(fra.me.REG[7]);
+            REGB4 = CALL_location___Location___column_start(fra.me.REG[6])(fra.me.REG[6]);
+            fra.me.REG[8] = NEW_Location_location___Location___init(fra.me.REG[8], REGB1, REGB2, REGB3, REGB4);
+            CALL_parser___parser_nodes___Prod___location__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[8]);
+            /* ../lib/standard/collection/array.nit:274 */
+            REGB4 = TAG_Int(1);
+            /* ../lib/standard/kernel.nit:238 */
+            REGB4 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB4));
+            /* ../lib/standard/collection/array.nit:274 */
+            REGB0 = REGB4;
+          } else {
+            /* ../lib/standard/collection/array.nit:272 */
+            goto label3;
+          }
+        }
+        label3: while(0);
+        /* parser/parser.nit:1502 */
+        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, 1502);
+        }
+        fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
+        CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[2])(fra.me.REG[2]);
+      }
+    } else {
+      /* parser/parser.nit:1505 */
+      REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_parser___parser_nodes___Prod, ID_parser___parser_nodes___Prod)) /*cast Prod*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser, 1505);
+      }
+      /* parser/parser.nit:1506 */
+      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, 1506);
+      }
+      fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
+      CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
+      /* parser/parser.nit:1508 */
+      fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
+      /* parser/parser.nit:1509 */
+      ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = NIT_NULL;
+      /* parser/parser.nit:1510 */
+      REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser, 1510);
+      }
+      CALL_parser___parser_prod___ANode___visit_all(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+      /* parser/parser.nit:1511 */
+      fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
+      /* parser/parser.nit:1512 */
+      REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(0);
+          REGB0 = REGB4;
+        } else {
+          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+          REGB0 = REGB4;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = fra.me.REG[2];
+      }
+      /* parser/parser.nit:1514 */
+      ATTR_parser___Prod____last_location(fra.me.REG[1]) = fra.me.REG[3];
+      /* parser/parser.nit:1515 */
+      fra.me.REG[2] = ATTR_parser___Prod____first_location(fra.me.REG[1]);
+      /* parser/parser.nit:1516 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(0);
+          REGB0 = REGB4;
+        } else {
+          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+          REGB0 = REGB4;
+        }
+      }
+      REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+      if (UNTAG_Bool(REGB0)) {
+        /* parser/parser.nit:1518 */
+        REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(0);
+            REGB0 = REGB4;
+          } else {
+            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+            REGB0 = REGB4;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          nit_abort("Assert failed", NULL, LOCATE_parser, 1518);
+        }
+        /* parser/parser.nit:1520 */
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB0)) {
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 1520);
+        }
+        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, 1520);
+        }
+        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, 1520);
+        }
+        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, 1520);
+        }
+        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, 1520);
+        }
+        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, 1520);
+        }
+        CALL_parser___parser_nodes___Prod___location__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+        /* parser/parser.nit:1522 */
+        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, 1522);
+        }
+        fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
+        REGB2 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
+        REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
+        if (UNTAG_Bool(REGB2)) {
+          /* parser/parser.nit:1523 */
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser, 1523);
+          }
+          fra.me.REG[4] = CALL_location___Location___file(fra.me.REG[2])(fra.me.REG[2]);
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser, 1523);
+          }
+          REGB2 = CALL_location___Location___line_start(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, 1523);
+          }
+          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, 1523);
+          }
+          REGB4 = CALL_location___Location___column_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, 1523);
+          }
+          REGB0 = CALL_location___Location___column_start(fra.me.REG[2])(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_Location_location___Location___init(fra.me.REG[4], REGB2, REGB3, REGB4, REGB0);
+          /* parser/parser.nit:1524 */
+          REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 1524);
+          }
+          fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
+          /* ../lib/standard/collection/array.nit:269 */
+          REGB0 = TAG_Int(0);
+          /* ../lib/standard/collection/array.nit:270 */
+          REGB4 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
+          }
+          REGB4 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
+          /* ../lib/standard/collection/array.nit:271 */
+          fra.me.REG[8] = ATTR_standard___collection___array___Array____items(fra.me.REG[2]);
+          /* ../lib/standard/collection/array.nit:272 */
+          while(1) {
+            /* ../lib/standard/collection/array.nit:24 */
+            REGB4 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+            if (UNTAG_Bool(REGB4)) {
+            } else {
+              nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+            }
+            REGB4 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
+            REGB3 = TAG_Bool(VAL_ISA(REGB4, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+            if (UNTAG_Bool(REGB3)) {
+            } else {
+              nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+            }
+            /* ../lib/standard/kernel.nit:235 */
+            REGB4 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB4));
+            /* ../lib/standard/collection/array.nit:272 */
+            if (UNTAG_Bool(REGB4)) {
+              /* ../lib/standard/collection/array.nit:273 */
+              REGB4 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+              if (UNTAG_Bool(REGB4)) {
+               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
+              }
+              /* ../lib/standard/collection/array.nit:724 */
+              fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[8])->val[UNTAG_Int(REGB0)];
+              /* parser/parser.nit:1526 */
+              CALL_parser___parser_nodes___Prod___location__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+              /* ../lib/standard/collection/array.nit:274 */
+              REGB4 = TAG_Int(1);
+              /* ../lib/standard/kernel.nit:238 */
+              REGB4 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB4));
+              /* ../lib/standard/collection/array.nit:274 */
+              REGB0 = REGB4;
+            } else {
+              /* ../lib/standard/collection/array.nit:272 */
+              goto label4;
+            }
+          }
+          label4: while(0);
+          /* parser/parser.nit:1528 */
+          REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 1528);
+          }
+          fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[4])(fra.me.REG[4]);
+        }
+        /* parser/parser.nit:1531 */
+        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, 1531);
+        }
+        fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
+        REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          /* parser/parser.nit:1532 */
+          REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+          if (UNTAG_Bool(REGB0)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser, 1532);
+          }
+          fra.me.REG[4] = CALL_location___Location___file(fra.me.REG[3])(fra.me.REG[3]);
+          REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+          if (UNTAG_Bool(REGB0)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser, 1532);
+          }
+          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, 1532);
+          }
+          REGB4 = CALL_location___Location___line_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, 1532);
+          }
+          REGB3 = CALL_location___Location___column_end(fra.me.REG[3])(fra.me.REG[3]);
+          REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser, 1532);
+          }
+          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);
+          /* parser/parser.nit:1533 */
+          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, 1533);
+          }
+          fra.me.REG[8] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
+          /* ../lib/standard/collection/array.nit:269 */
+          REGB2 = TAG_Int(0);
+          /* ../lib/standard/collection/array.nit:270 */
+          REGB3 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[8])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
+          }
+          REGB3 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[8]);
+          /* ../lib/standard/collection/array.nit:271 */
+          fra.me.REG[2] = ATTR_standard___collection___array___Array____items(fra.me.REG[8]);
+          /* ../lib/standard/collection/array.nit:272 */
+          while(1) {
+            /* ../lib/standard/collection/array.nit:24 */
+            REGB3 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[8])!=NIT_NULL);
+            if (UNTAG_Bool(REGB3)) {
+            } else {
+              nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
             }
-            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);
+            REGB3 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[8]);
+            REGB4 = TAG_Bool(VAL_ISA(REGB3, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
+            if (UNTAG_Bool(REGB4)) {
+            } else {
+              nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+            }
+            /* ../lib/standard/kernel.nit:235 */
+            REGB3 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB3));
+            /* ../lib/standard/collection/array.nit:272 */
             if (UNTAG_Bool(REGB3)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 1074);
+              /* ../lib/standard/collection/array.nit:273 */
+              REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+              if (UNTAG_Bool(REGB3)) {
+               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
+              }
+              /* ../lib/standard/collection/array.nit:724 */
+              fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB2)];
+              /* parser/parser.nit:1535 */
+              CALL_parser___parser_nodes___Prod___location__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+              /* ../lib/standard/collection/array.nit:274 */
+              REGB3 = TAG_Int(1);
+              /* ../lib/standard/kernel.nit:238 */
+              REGB3 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB3));
+              /* ../lib/standard/collection/array.nit:274 */
+              REGB2 = REGB3;
+            } else {
+              /* ../lib/standard/collection/array.nit:272 */
+              goto label5;
             }
-            REGB3 = CALL_location___Location___column_end(fra.me.REG[7])(fra.me.REG[7]);
-            REGB4 = CALL_location___Location___column_start(fra.me.REG[6])(fra.me.REG[6]);
-            fra.me.REG[8] = NEW_Location_location___Location___init(fra.me.REG[8], REGB1, REGB2, REGB3, REGB4);
-            CALL_parser___parser_nodes___Prod___location__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[8]);
-            /* ../lib/standard/collection/array.nit:274 */
-            REGB4 = TAG_Int(1);
-            /* ../lib/standard/kernel.nit:238 */
-            REGB4 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB4));
-            /* ../lib/standard/collection/array.nit:274 */
-            REGB0 = REGB4;
+          }
+          label5: while(0);
+          /* parser/parser.nit:1537 */
+          REGB2 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
           } else {
-            /* ../lib/standard/collection/array.nit:272 */
-            goto label3;
+            nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 1537);
           }
+          fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[4])(fra.me.REG[4]);
         }
-        label3: while(0);
-        /* parser/parser.nit:1076 */
-        REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
-        if (UNTAG_Bool(REGB0)) {
+      } else {
+        /* parser/parser.nit:1542 */
+        REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 1076);
+          REGB3 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            REGB3 = TAG_Bool(0);
+            REGB2 = REGB3;
+          } else {
+            REGB3 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+            REGB2 = REGB3;
+          }
+        }
+        if (UNTAG_Bool(REGB2)) {
+          /* parser/parser.nit:1544 */
+          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, 1544);
+          }
+          fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+        } else {
+          /* parser/parser.nit:1547 */
+          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, 1547);
+          }
+          fra.me.REG[0] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
         }
-        fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-        CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[2])(fra.me.REG[2]);
       }
+    }
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ComputeProdLocationVisitor___init[] = "parser::ComputeProdLocationVisitor::init";
+void parser___ComputeProdLocationVisitor___init(val_t p0, int* init_table){
+  int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___ComputeProdLocationVisitor].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos2]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1553;
+  fra.me.meth = LOCATE_parser___ComputeProdLocationVisitor___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser.nit:1553 */
+  CALL_parser___parser_prod___Visitor___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos2] = 1;
+  return;
+}
+static const char LOCATE_parser___ReduceAction___action[] = "parser::ReduceAction::action";
+void parser___ReduceAction___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1558;
+  fra.me.meth = LOCATE_parser___ReduceAction___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  /* parser/parser.nit:1558 */
+  nit_abort("Deferred method called", NULL, LOCATE_parser, 1558);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction___concat[] = "parser::ReduceAction::concat";
+val_t parser___ReduceAction___concat(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1559;
+  fra.me.meth = LOCATE_parser___ReduceAction___concat;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser.nit:1561 */
+  REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[1])(fra.me.REG[1]);
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = fra.me.REG[2];
+    goto label1;
+  }
+  /* parser/parser.nit:1562 */
+  CALL_standard___collection___abstract_collection___Sequence___append(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1563 */
+  fra.me.REG[0] = fra.me.REG[1];
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_parser___ReduceAction___init[] = "parser::ReduceAction::init";
+void parser___ReduceAction___init(val_t p0, val_t p1, int* init_table){
+  int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___ReduceAction].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos3]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1566;
+  fra.me.meth = LOCATE_parser___ReduceAction___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* parser/parser.nit:1566 */
+  ATTR_parser___ReduceAction____goto(fra.me.REG[0]) = REGB0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos3] = 1;
+  return;
+}
+static const char LOCATE_parser___ReduceAction0___action[] = "parser::ReduceAction0::(parser::ReduceAction::action)";
+void parser___ReduceAction0___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 = 1571;
+  fra.me.meth = LOCATE_parser___ReduceAction0___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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:1573 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1574 */
+  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1575 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1576 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1577 */
+  fra.me.REG[5] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
+  /* parser/parser.nit:1583 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:1584 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1584);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction1___action[] = "parser::ReduceAction1::(parser::ReduceAction::action)";
+void parser___ReduceAction1___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 = 1589;
+  fra.me.meth = LOCATE_parser___ReduceAction1___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:1591 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1592 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1593 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1594 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1595 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1597 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1597);
+  }
+  /* parser/parser.nit:1598 */
+  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:1604 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:1605 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1605);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction2___action[] = "parser::ReduceAction2::(parser::ReduceAction::action)";
+void parser___ReduceAction2___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 = 1610;
+  fra.me.meth = LOCATE_parser___ReduceAction2___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:1612 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1613 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1614 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1615 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1616 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1618 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1618);
+  }
+  /* parser/parser.nit:1619 */
+  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:1620 */
+  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:1626 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:1627 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1627);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction3___action[] = "parser::ReduceAction3::(parser::ReduceAction::action)";
+void parser___ReduceAction3___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1632;
+  fra.me.meth = LOCATE_parser___ReduceAction3___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:1634 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1635 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1636 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1637 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1638 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1639 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1641 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1641);
+  }
+  /* parser/parser.nit:1643 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1643);
+  }
+  /* parser/parser.nit:1644 */
+  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:1645 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:1651 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:1652 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1652);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction4___action[] = "parser::ReduceAction4::(parser::ReduceAction::action)";
+void parser___ReduceAction4___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 = 1657;
+  fra.me.meth = LOCATE_parser___ReduceAction4___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:1659 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1660 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1661 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1662 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1663 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1665 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1665);
+  }
+  /* parser/parser.nit:1666 */
+  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:1667 */
+  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:1673 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:1674 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1674);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction5___action[] = "parser::ReduceAction5::(parser::ReduceAction::action)";
+void parser___ReduceAction5___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1679;
+  fra.me.meth = LOCATE_parser___ReduceAction5___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:1681 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1682 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1683 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1684 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1685 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1686 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1688 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1688);
+  }
+  /* parser/parser.nit:1690 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1690);
+  }
+  /* parser/parser.nit:1691 */
+  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:1692 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:1698 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:1699 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1699);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction6___action[] = "parser::ReduceAction6::(parser::ReduceAction::action)";
+void parser___ReduceAction6___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1704;
+  fra.me.meth = LOCATE_parser___ReduceAction6___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:1706 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1707 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1708 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1709 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1710 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1711 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1713 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1713);
+  }
+  /* parser/parser.nit:1714 */
+  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:1716 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1716);
+  }
+  /* parser/parser.nit:1717 */
+  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:1718 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:1724 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:1725 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1725);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction7___action[] = "parser::ReduceAction7::(parser::ReduceAction::action)";
+void parser___ReduceAction7___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1730;
+  fra.me.meth = LOCATE_parser___ReduceAction7___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:1732 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1733 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1734 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1735 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1736 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1737 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1738 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1740 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1740);
+  }
+  /* parser/parser.nit:1742 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1742);
+  }
+  /* parser/parser.nit:1743 */
+  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:1745 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1745);
+  }
+  /* parser/parser.nit:1746 */
+  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:1747 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:1753 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:1754 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1754);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction8___action[] = "parser::ReduceAction8::(parser::ReduceAction::action)";
+void parser___ReduceAction8___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1759;
+  fra.me.meth = LOCATE_parser___ReduceAction8___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[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:1761 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1762 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1763 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1764 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1765 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1767 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1767);
+  }
+  /* parser/parser.nit:1768 */
+  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:1769 */
+  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:1775 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:1776 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1776);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction9___action[] = "parser::ReduceAction9::(parser::ReduceAction::action)";
+void parser___ReduceAction9___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1781;
+  fra.me.meth = LOCATE_parser___ReduceAction9___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = 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:1783 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1784 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1785 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1786 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1787 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1788 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1790 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1790);
+  }
+  /* parser/parser.nit:1792 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1792);
+  }
+  /* parser/parser.nit:1793 */
+  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:1794 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:1800 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:1801 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1801);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction10___action[] = "parser::ReduceAction10::(parser::ReduceAction::action)";
+void parser___ReduceAction10___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1806;
+  fra.me.meth = LOCATE_parser___ReduceAction10___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:1808 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1809 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1810 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1811 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1812 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1813 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1815 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1815);
+  }
+  /* parser/parser.nit:1816 */
+  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:1818 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1818);
+  }
+  /* parser/parser.nit:1819 */
+  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:1820 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:1826 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:1827 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1827);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction11___action[] = "parser::ReduceAction11::(parser::ReduceAction::action)";
+void parser___ReduceAction11___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1832;
+  fra.me.meth = LOCATE_parser___ReduceAction11___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:1834 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1835 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1836 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1837 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1838 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1839 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1840 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1842 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1842);
+  }
+  /* parser/parser.nit:1844 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1844);
+  }
+  /* parser/parser.nit:1845 */
+  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:1847 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1847);
+  }
+  /* parser/parser.nit:1848 */
+  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:1849 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:1855 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:1856 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1856);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction12___action[] = "parser::ReduceAction12::(parser::ReduceAction::action)";
+void parser___ReduceAction12___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1861;
+  fra.me.meth = LOCATE_parser___ReduceAction12___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = 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:1863 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1864 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1865 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1866 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1867 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1868 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1870 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1870);
+  }
+  /* parser/parser.nit:1871 */
+  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:1873 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1873);
+  }
+  /* parser/parser.nit:1874 */
+  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:1875 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:1881 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:1882 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1882);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction13___action[] = "parser::ReduceAction13::(parser::ReduceAction::action)";
+void parser___ReduceAction13___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1887;
+  fra.me.meth = LOCATE_parser___ReduceAction13___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = 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:1889 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1890 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1891 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1892 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1893 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1894 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1895 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1897 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1897);
+  }
+  /* parser/parser.nit:1899 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1899);
+  }
+  /* parser/parser.nit:1900 */
+  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:1902 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1902);
+  }
+  /* parser/parser.nit:1903 */
+  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:1904 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:1910 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:1911 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1911);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction14___action[] = "parser::ReduceAction14::(parser::ReduceAction::action)";
+void parser___ReduceAction14___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1916;
+  fra.me.meth = LOCATE_parser___ReduceAction14___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:1918 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1919 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1920 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1921 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1922 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1923 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1924 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1926 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1926);
+  }
+  /* parser/parser.nit:1927 */
+  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:1929 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1929);
+  }
+  /* parser/parser.nit:1930 */
+  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:1932 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1932);
+  }
+  /* parser/parser.nit:1933 */
+  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:1934 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:1940 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:1941 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1941);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction15___action[] = "parser::ReduceAction15::(parser::ReduceAction::action)";
+void parser___ReduceAction15___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 = 1946;
+  fra.me.meth = LOCATE_parser___ReduceAction15___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:1948 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1949 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1950 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1951 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1952 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1953 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1954 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1955 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1957 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1957);
+  }
+  /* parser/parser.nit:1959 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1959);
+  }
+  /* parser/parser.nit:1960 */
+  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:1962 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1962);
+  }
+  /* parser/parser.nit:1963 */
+  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:1965 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1965);
+  }
+  /* parser/parser.nit:1966 */
+  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:1967 */
+  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
+  /* parser/parser.nit:1973 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:1974 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1974);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction16___action[] = "parser::ReduceAction16::(parser::ReduceAction::action)";
+void parser___ReduceAction16___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 1979;
+  fra.me.meth = LOCATE_parser___ReduceAction16___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:1981 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:1982 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1983 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1984 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1985 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1986 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1988 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1988);
+  }
+  /* parser/parser.nit:1989 */
+  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:1990 */
+  fra.me.REG[7] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
+  /* parser/parser.nit:1993 */
+  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:1994 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+  }
+  /* parser/parser.nit:1996 */
+  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:2002 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:2003 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2003);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction17___action[] = "parser::ReduceAction17::(parser::ReduceAction::action)";
+void parser___ReduceAction17___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2008;
+  fra.me.meth = LOCATE_parser___ReduceAction17___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2010 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2011 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2012 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2013 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2014 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2015 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2017 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2017);
+  }
+  /* parser/parser.nit:2018 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2020 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2020);
+  }
+  /* parser/parser.nit:2021 */
+  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:2022 */
+  fra.me.REG[8] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
+  /* parser/parser.nit:2025 */
+  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2026 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+  }
+  /* parser/parser.nit:2028 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:2034 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:2035 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2035);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction18___action[] = "parser::ReduceAction18::(parser::ReduceAction::action)";
+void parser___ReduceAction18___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2040;
+  fra.me.meth = LOCATE_parser___ReduceAction18___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2042 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2043 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2044 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2045 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2046 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2047 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2049 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2049);
+  }
+  /* parser/parser.nit:2050 */
+  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:2051 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2053 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2053);
+  }
+  /* parser/parser.nit:2054 */
+  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:2055 */
+  fra.me.REG[4] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
+  /* parser/parser.nit:2058 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2059 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:2061 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:2067 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:2068 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2068);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction19___action[] = "parser::ReduceAction19::(parser::ReduceAction::action)";
+void parser___ReduceAction19___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2073;
+  fra.me.meth = LOCATE_parser___ReduceAction19___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2075 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2076 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2077 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2078 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2079 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2080 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2081 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2083 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2083);
+  }
+  /* parser/parser.nit:2085 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2085);
+  }
+  /* parser/parser.nit:2086 */
+  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:2087 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2089 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2089);
+  }
+  /* parser/parser.nit:2090 */
+  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:2091 */
+  fra.me.REG[4] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
+  /* parser/parser.nit:2094 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2095 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:2097 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:2103 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:2104 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2104);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction20___action[] = "parser::ReduceAction20::(parser::ReduceAction::action)";
+void parser___ReduceAction20___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2109;
+  fra.me.meth = LOCATE_parser___ReduceAction20___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2111 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2112 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2113 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2114 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2115 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2116 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2118 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2118);
+  }
+  /* parser/parser.nit:2119 */
+  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:2120 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2122 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2122);
+  }
+  /* parser/parser.nit:2123 */
+  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:2124 */
+  fra.me.REG[4] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
+  /* parser/parser.nit:2127 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2128 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:2130 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:2136 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:2137 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2137);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction21___action[] = "parser::ReduceAction21::(parser::ReduceAction::action)";
+void parser___ReduceAction21___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2142;
+  fra.me.meth = LOCATE_parser___ReduceAction21___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2144 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2145 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2146 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2147 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2148 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2149 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2150 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2152 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2152);
+  }
+  /* parser/parser.nit:2154 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2154);
+  }
+  /* parser/parser.nit:2155 */
+  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:2156 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2158 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2158);
+  }
+  /* parser/parser.nit:2159 */
+  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:2160 */
+  fra.me.REG[4] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
+  /* parser/parser.nit:2163 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2164 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:2166 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:2172 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:2173 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2173);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction22___action[] = "parser::ReduceAction22::(parser::ReduceAction::action)";
+void parser___ReduceAction22___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2178;
+  fra.me.meth = LOCATE_parser___ReduceAction22___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2180 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2181 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2182 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2183 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2184 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2185 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2186 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2188 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2188);
+  }
+  /* parser/parser.nit:2189 */
+  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:2191 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2191);
+  }
+  /* parser/parser.nit:2192 */
+  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:2193 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2195 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2195);
+  }
+  /* parser/parser.nit:2196 */
+  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:2197 */
+  fra.me.REG[4] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
+  /* parser/parser.nit:2200 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2201 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:2203 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:2209 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:2210 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2210);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction23___action[] = "parser::ReduceAction23::(parser::ReduceAction::action)";
+void parser___ReduceAction23___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2215;
+  fra.me.meth = LOCATE_parser___ReduceAction23___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2217 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2218 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2219 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2220 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2221 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2222 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2223 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2224 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2226 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2226);
+  }
+  /* parser/parser.nit:2228 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2228);
+  }
+  /* parser/parser.nit:2229 */
+  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:2231 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2231);
+  }
+  /* parser/parser.nit:2232 */
+  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:2233 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2235 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2235);
+  }
+  /* parser/parser.nit:2236 */
+  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:2237 */
+  fra.me.REG[4] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
+  /* parser/parser.nit:2240 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2241 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:2243 */
+  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
+  /* parser/parser.nit:2249 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:2250 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2250);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction24___action[] = "parser::ReduceAction24::(parser::ReduceAction::action)";
+void parser___ReduceAction24___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2255;
+  fra.me.meth = LOCATE_parser___ReduceAction24___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2257 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2258 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2259 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2260 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2261 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2262 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2264 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2264);
+  }
+  /* parser/parser.nit:2265 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2267 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2267);
+  }
+  /* parser/parser.nit:2268 */
+  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:2269 */
+  fra.me.REG[8] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
+  /* parser/parser.nit:2272 */
+  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:2273 */
+  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2274 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+  }
+  /* parser/parser.nit:2276 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:2282 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:2283 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2283);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction25___action[] = "parser::ReduceAction25::(parser::ReduceAction::action)";
+void parser___ReduceAction25___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2288;
+  fra.me.meth = LOCATE_parser___ReduceAction25___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2290 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2291 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2292 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2293 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2294 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2295 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2296 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2298 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2298);
+  }
+  /* parser/parser.nit:2300 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2300);
+  }
+  /* parser/parser.nit:2301 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2303 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2303);
+  }
+  /* parser/parser.nit:2304 */
+  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:2305 */
+  fra.me.REG[9] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[9]);
+  /* parser/parser.nit:2308 */
+  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:2309 */
+  REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[9])(fra.me.REG[9], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2310 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
+  }
+  /* parser/parser.nit:2312 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:2318 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:2319 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2319);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction26___action[] = "parser::ReduceAction26::(parser::ReduceAction::action)";
+void parser___ReduceAction26___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2324;
+  fra.me.meth = LOCATE_parser___ReduceAction26___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2326 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2327 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2328 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2329 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2330 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2331 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2332 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2334 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2334);
+  }
+  /* parser/parser.nit:2335 */
+  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:2337 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2337);
+  }
+  /* parser/parser.nit:2338 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2340 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2340);
+  }
+  /* parser/parser.nit:2341 */
+  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:2342 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* parser/parser.nit:2345 */
+  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:2346 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2347 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
+  }
+  /* parser/parser.nit:2349 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:2355 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:2356 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2356);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction27___action[] = "parser::ReduceAction27::(parser::ReduceAction::action)";
+void parser___ReduceAction27___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2361;
+  fra.me.meth = LOCATE_parser___ReduceAction27___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2363 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2364 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2365 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2366 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2367 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2368 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2369 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2370 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2372 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2372);
+  }
+  /* parser/parser.nit:2374 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2374);
+  }
+  /* parser/parser.nit:2375 */
+  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:2377 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2377);
+  }
+  /* parser/parser.nit:2378 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2380 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2380);
+  }
+  /* parser/parser.nit:2381 */
+  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:2382 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* parser/parser.nit:2385 */
+  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:2386 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2387 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[5]);
+  }
+  /* parser/parser.nit:2389 */
+  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
+  /* parser/parser.nit:2395 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:2396 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2396);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction28___action[] = "parser::ReduceAction28::(parser::ReduceAction::action)";
+void parser___ReduceAction28___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2401;
+  fra.me.meth = LOCATE_parser___ReduceAction28___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = 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:2403 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2404 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2405 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2406 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2407 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2408 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2409 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2411 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2411);
+  }
+  /* parser/parser.nit:2412 */
+  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:2414 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2414);
+  }
+  /* parser/parser.nit:2415 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2417 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2417);
+  }
+  /* parser/parser.nit:2418 */
+  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:2419 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* parser/parser.nit:2422 */
+  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:2423 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2424 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
+  }
+  /* parser/parser.nit:2426 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:2432 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:2433 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2433);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction29___action[] = "parser::ReduceAction29::(parser::ReduceAction::action)";
+void parser___ReduceAction29___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2438;
+  fra.me.meth = LOCATE_parser___ReduceAction29___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[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:2440 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2441 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2442 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2443 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2444 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2445 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2446 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2447 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2449 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2449);
+  }
+  /* parser/parser.nit:2451 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2451);
+  }
+  /* parser/parser.nit:2452 */
+  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:2454 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2454);
+  }
+  /* parser/parser.nit:2455 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2457 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2457);
+  }
+  /* parser/parser.nit:2458 */
+  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:2459 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* parser/parser.nit:2462 */
+  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:2463 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2464 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[5]);
+  }
+  /* parser/parser.nit:2466 */
+  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
+  /* parser/parser.nit:2472 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:2473 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2473);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction30___action[] = "parser::ReduceAction30::(parser::ReduceAction::action)";
+void parser___ReduceAction30___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2478;
+  fra.me.meth = LOCATE_parser___ReduceAction30___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2480 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2481 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2482 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2483 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2484 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2485 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2486 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2487 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2489 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2489);
+  }
+  /* parser/parser.nit:2490 */
+  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:2492 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2492);
+  }
+  /* parser/parser.nit:2493 */
+  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:2495 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2495);
+  }
+  /* parser/parser.nit:2496 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2498 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2498);
+  }
+  /* parser/parser.nit:2499 */
+  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:2500 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* parser/parser.nit:2503 */
+  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:2504 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2505 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[5]);
+  }
+  /* parser/parser.nit:2507 */
+  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
+  /* parser/parser.nit:2513 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:2514 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2514);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction31___action[] = "parser::ReduceAction31::(parser::ReduceAction::action)";
+void parser___ReduceAction31___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2519;
+  fra.me.meth = LOCATE_parser___ReduceAction31___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2521 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2522 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2523 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2524 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2525 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2526 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2527 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2528 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2529 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2531 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2531);
+  }
+  /* parser/parser.nit:2533 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2533);
+  }
+  /* parser/parser.nit:2534 */
+  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:2536 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2536);
+  }
+  /* parser/parser.nit:2537 */
+  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:2539 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2539);
+  }
+  /* parser/parser.nit:2540 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2542 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2542);
+  }
+  /* parser/parser.nit:2543 */
+  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:2544 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* parser/parser.nit:2547 */
+  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:2548 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2549 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[5]);
+  }
+  /* parser/parser.nit:2551 */
+  fra.me.REG[10] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[7], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
+  /* parser/parser.nit:2557 */
+  fra.me.REG[2] = fra.me.REG[10];
+  /* parser/parser.nit:2558 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2558);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction32___action[] = "parser::ReduceAction32::(parser::ReduceAction::action)";
+void parser___ReduceAction32___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2563;
+  fra.me.meth = LOCATE_parser___ReduceAction32___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2565 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2566 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2567 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2568 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2569 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2571 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2571);
+  }
+  /* parser/parser.nit:2572 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2573 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:2575 */
+  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:2581 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:2582 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2582);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction33___action[] = "parser::ReduceAction33::(parser::ReduceAction::action)";
+void parser___ReduceAction33___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2587;
+  fra.me.meth = LOCATE_parser___ReduceAction33___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2589 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2590 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2591 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2592 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2593 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2594 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2596 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2596);
+  }
+  /* parser/parser.nit:2598 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2598);
+  }
+  /* parser/parser.nit:2599 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2600 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:2602 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:2608 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:2609 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2609);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction34___action[] = "parser::ReduceAction34::(parser::ReduceAction::action)";
+void parser___ReduceAction34___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2614;
+  fra.me.meth = LOCATE_parser___ReduceAction34___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2616 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2617 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2618 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2619 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2620 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2621 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2623 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2623);
+  }
+  /* parser/parser.nit:2624 */
+  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:2626 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2626);
+  }
+  /* parser/parser.nit:2627 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2628 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:2630 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:2636 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:2637 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2637);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction35___action[] = "parser::ReduceAction35::(parser::ReduceAction::action)";
+void parser___ReduceAction35___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2642;
+  fra.me.meth = LOCATE_parser___ReduceAction35___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2644 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2645 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2646 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2647 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2648 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2649 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2650 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2652 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2652);
+  }
+  /* parser/parser.nit:2654 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2654);
+  }
+  /* parser/parser.nit:2655 */
+  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:2657 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2657);
+  }
+  /* parser/parser.nit:2658 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2659 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:2661 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:2667 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:2668 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2668);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction36___action[] = "parser::ReduceAction36::(parser::ReduceAction::action)";
+void parser___ReduceAction36___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2673;
+  fra.me.meth = LOCATE_parser___ReduceAction36___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2675 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2676 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2677 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2678 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2679 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2680 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2682 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2682);
+  }
+  /* parser/parser.nit:2683 */
+  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:2685 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2685);
+  }
+  /* parser/parser.nit:2686 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2687 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:2689 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:2695 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:2696 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2696);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction37___action[] = "parser::ReduceAction37::(parser::ReduceAction::action)";
+void parser___ReduceAction37___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2701;
+  fra.me.meth = LOCATE_parser___ReduceAction37___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2703 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2704 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2705 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2706 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2707 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2708 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2709 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2711 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2711);
+  }
+  /* parser/parser.nit:2713 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2713);
+  }
+  /* parser/parser.nit:2714 */
+  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:2716 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2716);
+  }
+  /* parser/parser.nit:2717 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2718 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:2720 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:2726 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:2727 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2727);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction38___action[] = "parser::ReduceAction38::(parser::ReduceAction::action)";
+void parser___ReduceAction38___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2732;
+  fra.me.meth = LOCATE_parser___ReduceAction38___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2734 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2735 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2736 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2737 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2738 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2739 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2740 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2742 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2742);
+  }
+  /* parser/parser.nit:2743 */
+  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:2745 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2745);
+  }
+  /* parser/parser.nit:2746 */
+  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:2748 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2748);
+  }
+  /* parser/parser.nit:2749 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2750 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:2752 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:2758 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:2759 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2759);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction39___action[] = "parser::ReduceAction39::(parser::ReduceAction::action)";
+void parser___ReduceAction39___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2764;
+  fra.me.meth = LOCATE_parser___ReduceAction39___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2766 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2767 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2768 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2769 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2770 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2771 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2772 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2773 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2775 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2775);
+  }
+  /* parser/parser.nit:2777 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2777);
+  }
+  /* parser/parser.nit:2778 */
+  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:2780 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2780);
+  }
+  /* parser/parser.nit:2781 */
+  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:2783 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2783);
+  }
+  /* parser/parser.nit:2784 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2785 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:2787 */
+  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
+  /* parser/parser.nit:2793 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:2794 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2794);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction40___action[] = "parser::ReduceAction40::(parser::ReduceAction::action)";
+void parser___ReduceAction40___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2799;
+  fra.me.meth = LOCATE_parser___ReduceAction40___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2801 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2802 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2803 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2804 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2805 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2806 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2808 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2808);
+  }
+  /* parser/parser.nit:2810 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2810);
+  }
+  /* parser/parser.nit:2811 */
+  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:2812 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2813 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:2815 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:2821 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:2822 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2822);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction41___action[] = "parser::ReduceAction41::(parser::ReduceAction::action)";
+void parser___ReduceAction41___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2827;
+  fra.me.meth = LOCATE_parser___ReduceAction41___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2829 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2830 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2831 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2832 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2833 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2834 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2835 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2837 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2837);
+  }
+  /* parser/parser.nit:2839 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2839);
+  }
+  /* parser/parser.nit:2841 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2841);
+  }
+  /* parser/parser.nit:2842 */
+  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:2843 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2844 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:2846 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:2852 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:2853 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2853);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction42___action[] = "parser::ReduceAction42::(parser::ReduceAction::action)";
+void parser___ReduceAction42___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2858;
+  fra.me.meth = LOCATE_parser___ReduceAction42___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2860 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2861 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2862 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2863 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2864 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2865 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2866 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2868 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2868);
+  }
+  /* parser/parser.nit:2869 */
+  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:2871 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2871);
+  }
+  /* parser/parser.nit:2873 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2873);
+  }
+  /* parser/parser.nit:2874 */
+  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:2875 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2876 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:2878 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:2884 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:2885 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2885);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction43___action[] = "parser::ReduceAction43::(parser::ReduceAction::action)";
+void parser___ReduceAction43___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2890;
+  fra.me.meth = LOCATE_parser___ReduceAction43___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2892 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2893 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2894 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2895 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2896 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2897 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2898 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2899 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2901 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2901);
+  }
+  /* parser/parser.nit:2903 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2903);
+  }
+  /* parser/parser.nit:2904 */
+  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:2906 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2906);
+  }
+  /* parser/parser.nit:2908 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2908);
+  }
+  /* parser/parser.nit:2909 */
+  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:2910 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2911 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:2913 */
+  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
+  /* parser/parser.nit:2919 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:2920 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2920);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction44___action[] = "parser::ReduceAction44::(parser::ReduceAction::action)";
+void parser___ReduceAction44___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2925;
+  fra.me.meth = LOCATE_parser___ReduceAction44___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2927 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2928 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2929 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2930 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2931 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2932 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2933 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2935 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2935);
+  }
+  /* parser/parser.nit:2936 */
+  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:2938 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2938);
+  }
+  /* parser/parser.nit:2940 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2940);
+  }
+  /* parser/parser.nit:2941 */
+  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:2942 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2943 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:2945 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:2951 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:2952 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2952);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction45___action[] = "parser::ReduceAction45::(parser::ReduceAction::action)";
+void parser___ReduceAction45___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2957;
+  fra.me.meth = LOCATE_parser___ReduceAction45___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2959 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2960 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2961 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2962 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2963 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2964 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2965 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2966 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2968 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2968);
+  }
+  /* parser/parser.nit:2970 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2970);
+  }
+  /* parser/parser.nit:2971 */
+  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:2973 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2973);
+  }
+  /* parser/parser.nit:2975 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2975);
+  }
+  /* parser/parser.nit:2976 */
+  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:2977 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:2978 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:2980 */
+  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
+  /* parser/parser.nit:2986 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:2987 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2987);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction46___action[] = "parser::ReduceAction46::(parser::ReduceAction::action)";
+void parser___ReduceAction46___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 2992;
+  fra.me.meth = LOCATE_parser___ReduceAction46___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2994 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2995 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2996 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2997 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2998 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2999 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3000 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3001 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3003 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3003);
+  }
+  /* parser/parser.nit:3004 */
+  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:3006 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3006);
+  }
+  /* parser/parser.nit:3007 */
+  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:3009 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3009);
+  }
+  /* parser/parser.nit:3011 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3011);
+  }
+  /* parser/parser.nit:3012 */
+  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:3013 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3014 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3016 */
+  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
+  /* parser/parser.nit:3022 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:3023 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3023);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction47___action[] = "parser::ReduceAction47::(parser::ReduceAction::action)";
+void parser___ReduceAction47___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3028;
+  fra.me.meth = LOCATE_parser___ReduceAction47___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3030 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3031 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3032 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3033 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3034 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3035 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3036 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3037 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3038 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3040 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3040);
+  }
+  /* parser/parser.nit:3042 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3042);
+  }
+  /* parser/parser.nit:3043 */
+  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:3045 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3045);
+  }
+  /* parser/parser.nit:3046 */
+  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:3048 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3048);
+  }
+  /* parser/parser.nit:3050 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3050);
+  }
+  /* parser/parser.nit:3051 */
+  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:3052 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3053 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3055 */
+  fra.me.REG[10] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[7], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
+  /* parser/parser.nit:3061 */
+  fra.me.REG[2] = fra.me.REG[10];
+  /* parser/parser.nit:3062 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3062);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction48___action[] = "parser::ReduceAction48::(parser::ReduceAction::action)";
+void parser___ReduceAction48___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3067;
+  fra.me.meth = LOCATE_parser___ReduceAction48___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3069 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3070 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3071 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3072 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3073 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3074 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3075 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3077 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3077);
+  }
+  /* parser/parser.nit:3078 */
+  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:3079 */
+  fra.me.REG[8] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
+  /* parser/parser.nit:3083 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3083);
+  }
+  /* parser/parser.nit:3084 */
+  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3085 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+  }
+  /* parser/parser.nit:3087 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3088 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3090 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:3096 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:3097 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3097);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction49___action[] = "parser::ReduceAction49::(parser::ReduceAction::action)";
+void parser___ReduceAction49___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3102;
+  fra.me.meth = LOCATE_parser___ReduceAction49___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3104 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3105 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3106 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3107 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3108 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3109 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3110 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3112 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3112);
+  }
+  /* parser/parser.nit:3113 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3115 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3115);
+  }
+  /* parser/parser.nit:3116 */
+  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:3117 */
+  fra.me.REG[9] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[9]);
+  /* parser/parser.nit:3121 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3121);
+  }
+  /* parser/parser.nit:3122 */
+  REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[9])(fra.me.REG[9], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3123 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
+  }
+  /* parser/parser.nit:3125 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3126 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3128 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:3134 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:3135 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3135);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction50___action[] = "parser::ReduceAction50::(parser::ReduceAction::action)";
+void parser___ReduceAction50___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3140;
+  fra.me.meth = LOCATE_parser___ReduceAction50___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3142 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3143 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3144 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3145 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3146 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3147 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3148 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3150 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3150);
+  }
+  /* parser/parser.nit:3151 */
+  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:3152 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3154 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3154);
+  }
+  /* parser/parser.nit:3155 */
+  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:3156 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* parser/parser.nit:3160 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3160);
+  }
+  /* parser/parser.nit:3161 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3162 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
+  }
+  /* parser/parser.nit:3164 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3165 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3167 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:3173 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:3174 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3174);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction51___action[] = "parser::ReduceAction51::(parser::ReduceAction::action)";
+void parser___ReduceAction51___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3179;
+  fra.me.meth = LOCATE_parser___ReduceAction51___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3181 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3182 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3183 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3184 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3185 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3186 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3187 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3188 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3190 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3190);
+  }
+  /* parser/parser.nit:3192 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3192);
+  }
+  /* parser/parser.nit:3193 */
+  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:3194 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3196 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3196);
+  }
+  /* parser/parser.nit:3197 */
+  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:3198 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* parser/parser.nit:3202 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3202);
+  }
+  /* parser/parser.nit:3203 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3204 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[5]);
+  }
+  /* parser/parser.nit:3206 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3207 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3209 */
+  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
+  /* parser/parser.nit:3215 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:3216 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3216);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction52___action[] = "parser::ReduceAction52::(parser::ReduceAction::action)";
+void parser___ReduceAction52___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3221;
+  fra.me.meth = LOCATE_parser___ReduceAction52___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3223 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3224 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3225 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3226 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3227 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3228 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3229 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3231 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3231);
+  }
+  /* parser/parser.nit:3232 */
+  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:3233 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3235 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3235);
+  }
+  /* parser/parser.nit:3236 */
+  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:3237 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* parser/parser.nit:3241 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3241);
+  }
+  /* parser/parser.nit:3242 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3243 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
+  }
+  /* parser/parser.nit:3245 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3246 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3248 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:3254 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:3255 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3255);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction53___action[] = "parser::ReduceAction53::(parser::ReduceAction::action)";
+void parser___ReduceAction53___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3260;
+  fra.me.meth = LOCATE_parser___ReduceAction53___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3262 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3263 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3264 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3265 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3266 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3267 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3268 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3269 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3271 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3271);
+  }
+  /* parser/parser.nit:3273 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3273);
+  }
+  /* parser/parser.nit:3274 */
+  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:3275 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3277 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3277);
+  }
+  /* parser/parser.nit:3278 */
+  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:3279 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* parser/parser.nit:3283 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3283);
+  }
+  /* parser/parser.nit:3284 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3285 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[5]);
+  }
+  /* parser/parser.nit:3287 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3288 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3290 */
+  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
+  /* parser/parser.nit:3296 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:3297 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3297);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction54___action[] = "parser::ReduceAction54::(parser::ReduceAction::action)";
+void parser___ReduceAction54___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3302;
+  fra.me.meth = LOCATE_parser___ReduceAction54___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3304 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3305 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3306 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3307 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3308 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3309 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3310 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3311 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3313 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3313);
+  }
+  /* parser/parser.nit:3314 */
+  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:3316 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3316);
+  }
+  /* parser/parser.nit:3317 */
+  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:3318 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3320 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3320);
+  }
+  /* parser/parser.nit:3321 */
+  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:3322 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* parser/parser.nit:3326 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3326);
+  }
+  /* parser/parser.nit:3327 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3328 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[5]);
+  }
+  /* parser/parser.nit:3330 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3331 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3333 */
+  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
+  /* parser/parser.nit:3339 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:3340 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3340);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction55___action[] = "parser::ReduceAction55::(parser::ReduceAction::action)";
+void parser___ReduceAction55___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3345;
+  fra.me.meth = LOCATE_parser___ReduceAction55___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3347 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3348 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3349 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3350 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3351 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3352 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3353 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3354 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3355 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3357 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3357);
+  }
+  /* parser/parser.nit:3359 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3359);
+  }
+  /* parser/parser.nit:3360 */
+  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:3362 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3362);
+  }
+  /* parser/parser.nit:3363 */
+  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:3364 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3366 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3366);
+  }
+  /* parser/parser.nit:3367 */
+  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:3368 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* parser/parser.nit:3372 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3372);
+  }
+  /* parser/parser.nit:3373 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3374 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[5]);
+  }
+  /* parser/parser.nit:3376 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3377 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3379 */
+  fra.me.REG[10] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[7], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
+  /* parser/parser.nit:3385 */
+  fra.me.REG[2] = fra.me.REG[10];
+  /* parser/parser.nit:3386 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3386);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction56___action[] = "parser::ReduceAction56::(parser::ReduceAction::action)";
+void parser___ReduceAction56___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3391;
+  fra.me.meth = LOCATE_parser___ReduceAction56___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3393 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3394 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3395 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3396 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3397 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3398 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3399 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3401 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3401);
+  }
+  /* parser/parser.nit:3402 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3404 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3404);
+  }
+  /* parser/parser.nit:3405 */
+  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:3406 */
+  fra.me.REG[9] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[9]);
+  /* parser/parser.nit:3410 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3410);
+  }
+  /* parser/parser.nit:3411 */
+  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:3412 */
+  REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[9])(fra.me.REG[9], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3413 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
+  }
+  /* parser/parser.nit:3415 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3416 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3418 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:3424 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:3425 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3425);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction57___action[] = "parser::ReduceAction57::(parser::ReduceAction::action)";
+void parser___ReduceAction57___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3430;
+  fra.me.meth = LOCATE_parser___ReduceAction57___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3432 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3433 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3434 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3435 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3436 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3437 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3438 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3439 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3441 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3441);
+  }
+  /* parser/parser.nit:3443 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3443);
+  }
+  /* parser/parser.nit:3444 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3446 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3446);
+  }
+  /* parser/parser.nit:3447 */
+  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:3448 */
+  fra.me.REG[10] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[10]);
+  /* parser/parser.nit:3452 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3452);
+  }
+  /* parser/parser.nit:3453 */
+  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:3454 */
+  REGB0 = TAG_Bool(fra.me.REG[10]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[10]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[10])(fra.me.REG[10], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3455 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[10]);
+  }
+  /* parser/parser.nit:3457 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3458 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3460 */
+  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
+  /* parser/parser.nit:3466 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:3467 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3467);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction58___action[] = "parser::ReduceAction58::(parser::ReduceAction::action)";
+void parser___ReduceAction58___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3472;
+  fra.me.meth = LOCATE_parser___ReduceAction58___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3474 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3475 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3476 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3477 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3478 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3479 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3480 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3481 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3483 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3483);
+  }
+  /* parser/parser.nit:3484 */
+  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:3486 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3486);
+  }
+  /* parser/parser.nit:3487 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3489 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3489);
+  }
+  /* parser/parser.nit:3490 */
+  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:3491 */
+  fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
+  /* parser/parser.nit:3495 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3495);
+  }
+  /* parser/parser.nit:3496 */
+  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:3497 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3498 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[6]);
+  }
+  /* parser/parser.nit:3500 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3501 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3503 */
+  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
+  /* parser/parser.nit:3509 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:3510 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3510);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction59___action[] = "parser::ReduceAction59::(parser::ReduceAction::action)";
+void parser___ReduceAction59___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3515;
+  fra.me.meth = LOCATE_parser___ReduceAction59___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3517 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3518 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3519 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3520 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3521 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3522 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3523 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3524 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3525 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3527 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3527);
+  }
+  /* parser/parser.nit:3529 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3529);
+  }
+  /* parser/parser.nit:3530 */
+  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:3532 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3532);
+  }
+  /* parser/parser.nit:3533 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3535 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3535);
+  }
+  /* parser/parser.nit:3536 */
+  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:3537 */
+  fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
+  /* parser/parser.nit:3541 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3541);
+  }
+  /* parser/parser.nit:3542 */
+  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:3543 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3544 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[6]);
+  }
+  /* parser/parser.nit:3546 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3547 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3549 */
+  fra.me.REG[10] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[7], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
+  /* parser/parser.nit:3555 */
+  fra.me.REG[2] = fra.me.REG[10];
+  /* parser/parser.nit:3556 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3556);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction60___action[] = "parser::ReduceAction60::(parser::ReduceAction::action)";
+void parser___ReduceAction60___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3561;
+  fra.me.meth = LOCATE_parser___ReduceAction60___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3563 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3564 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3565 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3566 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3567 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3568 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3569 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3570 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3572 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3572);
+  }
+  /* parser/parser.nit:3573 */
+  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:3575 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3575);
+  }
+  /* parser/parser.nit:3576 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3578 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3578);
+  }
+  /* parser/parser.nit:3579 */
+  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:3580 */
+  fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
+  /* parser/parser.nit:3584 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3584);
+  }
+  /* parser/parser.nit:3585 */
+  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:3586 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3587 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[6]);
+  }
+  /* parser/parser.nit:3589 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3590 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3592 */
+  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
+  /* parser/parser.nit:3598 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:3599 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3599);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction61___action[] = "parser::ReduceAction61::(parser::ReduceAction::action)";
+void parser___ReduceAction61___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3604;
+  fra.me.meth = LOCATE_parser___ReduceAction61___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3606 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3607 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3608 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3609 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3610 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3611 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3612 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3613 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3614 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3616 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3616);
+  }
+  /* parser/parser.nit:3618 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3618);
+  }
+  /* parser/parser.nit:3619 */
+  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:3621 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3621);
+  }
+  /* parser/parser.nit:3622 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3624 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3624);
+  }
+  /* parser/parser.nit:3625 */
+  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:3626 */
+  fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
+  /* parser/parser.nit:3630 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3630);
+  }
+  /* parser/parser.nit:3631 */
+  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:3632 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3633 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[6]);
+  }
+  /* parser/parser.nit:3635 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3636 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3638 */
+  fra.me.REG[10] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[7], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
+  /* parser/parser.nit:3644 */
+  fra.me.REG[2] = fra.me.REG[10];
+  /* parser/parser.nit:3645 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3645);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction62___action[] = "parser::ReduceAction62::(parser::ReduceAction::action)";
+void parser___ReduceAction62___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3650;
+  fra.me.meth = LOCATE_parser___ReduceAction62___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3652 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3653 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3654 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3655 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3656 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3657 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3658 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3659 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3660 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3662 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3662);
+  }
+  /* parser/parser.nit:3663 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[7]);
+  fra.me.REG[8] = fra.me.REG[7];
+  /* parser/parser.nit:3665 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3665);
+  }
+  /* parser/parser.nit:3666 */
+  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:3668 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3668);
+  }
+  /* parser/parser.nit:3669 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3671 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3671);
+  }
+  /* parser/parser.nit:3672 */
+  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:3673 */
+  fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
+  /* parser/parser.nit:3677 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3677);
+  }
+  /* parser/parser.nit:3678 */
+  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:3679 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3680 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[6]);
+  }
+  /* parser/parser.nit:3682 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3683 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3685 */
+  fra.me.REG[10] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
+  /* parser/parser.nit:3691 */
+  fra.me.REG[2] = fra.me.REG[10];
+  /* parser/parser.nit:3692 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3692);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction63___action[] = "parser::ReduceAction63::(parser::ReduceAction::action)";
+void parser___ReduceAction63___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3697;
+  fra.me.meth = LOCATE_parser___ReduceAction63___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 12;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[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:3699 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3700 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3701 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3702 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3703 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3704 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3705 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3706 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3707 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3708 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3710 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3710);
+  }
+  /* parser/parser.nit:3712 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3712);
+  }
+  /* parser/parser.nit:3713 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[7]);
+  fra.me.REG[9] = fra.me.REG[7];
+  /* parser/parser.nit:3715 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3715);
+  }
+  /* parser/parser.nit:3716 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[6]);
+  fra.me.REG[10] = fra.me.REG[6];
+  /* parser/parser.nit:3718 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3718);
+  }
+  /* parser/parser.nit:3719 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3721 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3721);
+  }
+  /* parser/parser.nit:3722 */
+  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:3723 */
+  fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
+  /* parser/parser.nit:3727 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3727);
+  }
+  /* parser/parser.nit:3728 */
+  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:3729 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3730 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[6]);
+  }
+  /* parser/parser.nit:3732 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3733 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3735 */
+  fra.me.REG[11] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[8], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
+  /* parser/parser.nit:3741 */
+  fra.me.REG[2] = fra.me.REG[11];
+  /* parser/parser.nit:3742 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3742);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction64___action[] = "parser::ReduceAction64::(parser::ReduceAction::action)";
+void parser___ReduceAction64___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3747;
+  fra.me.meth = LOCATE_parser___ReduceAction64___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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:3749 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3750 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3751 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3752 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3753 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3754 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3756 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3756);
+  }
+  /* parser/parser.nit:3758 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwmodule, ID_parser___parser_nodes___TKwmodule)) /*cast nullable TKwmodule*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3758);
+  }
+  /* parser/parser.nit:3760 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AModuleName, ID_parser___parser_nodes___AModuleName)) /*cast nullable AModuleName*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3760);
+  }
+  /* parser/parser.nit:3761 */
+  fra.me.REG[3] = NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:3767 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:3768 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3768);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction65___action[] = "parser::ReduceAction65::(parser::ReduceAction::action)";
+void parser___ReduceAction65___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 = 3773;
+  fra.me.meth = LOCATE_parser___ReduceAction65___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3775 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3776 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3777 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3778 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3779 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3780 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3781 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3783 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3783);
+  }
+  /* parser/parser.nit:3785 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmodule, ID_parser___parser_nodes___TKwmodule)) /*cast nullable TKwmodule*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3785);
+  }
+  /* parser/parser.nit:3787 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuleName, ID_parser___parser_nodes___AModuleName)) /*cast nullable AModuleName*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3787);
+  }
+  /* parser/parser.nit:3789 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3789);
+  }
+  /* parser/parser.nit:3790 */
+  fra.me.REG[3] = NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3796 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:3797 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3797);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction66___action[] = "parser::ReduceAction66::(parser::ReduceAction::action)";
+void parser___ReduceAction66___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 = 3802;
+  fra.me.meth = LOCATE_parser___ReduceAction66___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3804 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3805 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3806 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3807 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3808 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3809 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3810 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3812 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3812);
+  }
+  /* parser/parser.nit:3814 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3814);
+  }
+  /* parser/parser.nit:3816 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AModuleName, ID_parser___parser_nodes___AModuleName)) /*cast nullable AModuleName*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3816);
+  }
+  /* parser/parser.nit:3817 */
+  fra.me.REG[3] = NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:3823 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:3824 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3824);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction67___action[] = "parser::ReduceAction67::(parser::ReduceAction::action)";
+void parser___ReduceAction67___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3829;
+  fra.me.meth = LOCATE_parser___ReduceAction67___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3831 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3832 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3833 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3834 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3835 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3836 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3837 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3838 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3840 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3840);
+  }
+  /* parser/parser.nit:3842 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3842);
+  }
+  /* parser/parser.nit:3844 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuleName, ID_parser___parser_nodes___AModuleName)) /*cast nullable AModuleName*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3844);
+  }
+  /* parser/parser.nit:3846 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3846);
+  }
+  /* parser/parser.nit:3847 */
+  fra.me.REG[3] = NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3853 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:3854 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3854);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction68___action[] = "parser::ReduceAction68::(parser::ReduceAction::action)";
+void parser___ReduceAction68___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 = 3859;
+  fra.me.meth = LOCATE_parser___ReduceAction68___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3861 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3862 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3863 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3864 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3865 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3866 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3867 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3869 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3869);
+  }
+  /* parser/parser.nit:3871 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3871);
+  }
+  /* parser/parser.nit:3873 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3873);
+  }
+  /* parser/parser.nit:3874 */
+  fra.me.REG[3] = NEW_ANoImport_parser___parser_prod___ANoImport___init_anoimport(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3879 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:3880 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3880);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction69___action[] = "parser::ReduceAction69::(parser::ReduceAction::action)";
+void parser___ReduceAction69___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 = 3885;
+  fra.me.meth = LOCATE_parser___ReduceAction69___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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:3887 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3888 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3889 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3891 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___APropdef, ID_parser___parser_nodes___APropdef)) /*cast nullable APropdef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3891);
+  }
+  /* parser/parser.nit:3892 */
+  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(0);
+      REGB0 = REGB1;
     } else {
-      /* parser/parser.nit:1079 */
-      REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_parser___parser_nodes___Prod, ID_parser___parser_nodes___Prod)) /*cast Prod*/;
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser, 1079);
-      }
-      /* parser/parser.nit:1080 */
-      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, 1080);
-      }
-      fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
-      CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-      /* parser/parser.nit:1082 */
-      fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
-      /* parser/parser.nit:1083 */
-      ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = NIT_NULL;
-      /* parser/parser.nit:1084 */
-      REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser, 1084);
-      }
-      CALL_parser___parser_prod___ANode___visit_all(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-      /* parser/parser.nit:1085 */
-      fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
-      /* parser/parser.nit:1086 */
-      REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(0);
-          REGB0 = REGB4;
-        } else {
-          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-          REGB0 = REGB4;
-        }
-      }
-      if (UNTAG_Bool(REGB0)) {
-        ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = fra.me.REG[2];
-      }
-      /* parser/parser.nit:1088 */
-      ATTR_parser___Prod____last_location(fra.me.REG[1]) = fra.me.REG[3];
-      /* parser/parser.nit:1089 */
-      fra.me.REG[2] = ATTR_parser___Prod____first_location(fra.me.REG[1]);
-      /* parser/parser.nit:1090 */
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        if (UNTAG_Bool(REGB4)) {
-          REGB4 = TAG_Bool(0);
-          REGB0 = REGB4;
-        } else {
-          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-          REGB0 = REGB4;
-        }
-      }
-      REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-      if (UNTAG_Bool(REGB0)) {
-        /* parser/parser.nit:1092 */
-        REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB0)) {
-        } else {
-          REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-          if (UNTAG_Bool(REGB4)) {
-            REGB4 = TAG_Bool(0);
-            REGB0 = REGB4;
-          } else {
-            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-            REGB0 = REGB4;
-          }
-        }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-        } else {
-          nit_abort("Assert failed", NULL, LOCATE_parser, 1092);
-        }
-        /* parser/parser.nit:1094 */
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        if (UNTAG_Bool(REGB0)) {
-          nit_abort("Reciever is null", NULL, LOCATE_parser, 1094);
-        }
-        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, 1094);
-        }
-        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, 1094);
-        }
-        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, 1094);
-        }
-        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, 1094);
-        }
-        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, 1094);
-        }
-        CALL_parser___parser_nodes___Prod___location__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-        /* parser/parser.nit:1096 */
-        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, 1096);
-        }
-        fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
-        REGB2 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-        REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
-        if (UNTAG_Bool(REGB2)) {
-          /* parser/parser.nit:1097 */
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser, 1097);
-          }
-          fra.me.REG[4] = CALL_location___Location___file(fra.me.REG[2])(fra.me.REG[2]);
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser, 1097);
-          }
-          REGB2 = CALL_location___Location___line_start(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, 1097);
-          }
-          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, 1097);
-          }
-          REGB4 = CALL_location___Location___column_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, 1097);
-          }
-          REGB0 = CALL_location___Location___column_start(fra.me.REG[2])(fra.me.REG[2]);
-          fra.me.REG[4] = NEW_Location_location___Location___init(fra.me.REG[4], REGB2, REGB3, REGB4, REGB0);
-          /* parser/parser.nit:1098 */
-          REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB0)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 1098);
-          }
-          fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
-          /* ../lib/standard/collection/array.nit:269 */
-          REGB0 = TAG_Int(0);
-          /* ../lib/standard/collection/array.nit:270 */
-          REGB4 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
-          if (UNTAG_Bool(REGB4)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
-          }
-          REGB4 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
-          /* ../lib/standard/collection/array.nit:271 */
-          fra.me.REG[8] = ATTR_standard___collection___array___Array____items(fra.me.REG[2]);
-          /* ../lib/standard/collection/array.nit:272 */
-          while(1) {
-            /* ../lib/standard/collection/array.nit:24 */
-            REGB4 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
-            if (UNTAG_Bool(REGB4)) {
-            } else {
-              nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
-            }
-            REGB4 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
-            REGB3 = TAG_Bool(VAL_ISA(REGB4, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
-            if (UNTAG_Bool(REGB3)) {
-            } else {
-              nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
-            }
-            /* ../lib/standard/kernel.nit:235 */
-            REGB4 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB4));
-            /* ../lib/standard/collection/array.nit:272 */
-            if (UNTAG_Bool(REGB4)) {
-              /* ../lib/standard/collection/array.nit:273 */
-              REGB4 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
-              if (UNTAG_Bool(REGB4)) {
-               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
-              }
-              /* ../lib/standard/collection/array.nit:718 */
-              fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[8])->val[UNTAG_Int(REGB0)];
-              /* parser/parser.nit:1100 */
-              CALL_parser___parser_nodes___Prod___location__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
-              /* ../lib/standard/collection/array.nit:274 */
-              REGB4 = TAG_Int(1);
-              /* ../lib/standard/kernel.nit:238 */
-              REGB4 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB4));
-              /* ../lib/standard/collection/array.nit:274 */
-              REGB0 = REGB4;
-            } else {
-              /* ../lib/standard/collection/array.nit:272 */
-              goto label4;
-            }
-          }
-          label4: while(0);
-          /* parser/parser.nit:1102 */
-          REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0])!=NIT_NULL);
-          if (UNTAG_Bool(REGB0)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 1102);
-          }
-          fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[4])(fra.me.REG[4]);
-        }
-        /* parser/parser.nit:1105 */
-        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, 1105);
-        }
-        fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-        REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          /* parser/parser.nit:1106 */
-          REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-          if (UNTAG_Bool(REGB0)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser, 1106);
-          }
-          fra.me.REG[4] = CALL_location___Location___file(fra.me.REG[3])(fra.me.REG[3]);
-          REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-          if (UNTAG_Bool(REGB0)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser, 1106);
-          }
-          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, 1106);
-          }
-          REGB4 = CALL_location___Location___line_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, 1106);
-          }
-          REGB3 = CALL_location___Location___column_end(fra.me.REG[3])(fra.me.REG[3]);
-          REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser, 1106);
-          }
-          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);
-          /* parser/parser.nit:1107 */
-          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, 1107);
-          }
-          fra.me.REG[8] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-          /* ../lib/standard/collection/array.nit:269 */
-          REGB2 = TAG_Int(0);
-          /* ../lib/standard/collection/array.nit:270 */
-          REGB3 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[8])!=NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-          } else {
-            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
-          }
-          REGB3 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[8]);
-          /* ../lib/standard/collection/array.nit:271 */
-          fra.me.REG[2] = ATTR_standard___collection___array___Array____items(fra.me.REG[8]);
-          /* ../lib/standard/collection/array.nit:272 */
-          while(1) {
-            /* ../lib/standard/collection/array.nit:24 */
-            REGB3 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[8])!=NIT_NULL);
-            if (UNTAG_Bool(REGB3)) {
-            } else {
-              nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
-            }
-            REGB3 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[8]);
-            REGB4 = TAG_Bool(VAL_ISA(REGB3, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
-            if (UNTAG_Bool(REGB4)) {
-            } else {
-              nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
-            }
-            /* ../lib/standard/kernel.nit:235 */
-            REGB3 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB3));
-            /* ../lib/standard/collection/array.nit:272 */
-            if (UNTAG_Bool(REGB3)) {
-              /* ../lib/standard/collection/array.nit:273 */
-              REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-              if (UNTAG_Bool(REGB3)) {
-               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
-              }
-              /* ../lib/standard/collection/array.nit:718 */
-              fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB2)];
-              /* parser/parser.nit:1109 */
-              CALL_parser___parser_nodes___Prod___location__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
-              /* ../lib/standard/collection/array.nit:274 */
-              REGB3 = TAG_Int(1);
-              /* ../lib/standard/kernel.nit:238 */
-              REGB3 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB3));
-              /* ../lib/standard/collection/array.nit:274 */
-              REGB2 = REGB3;
-            } else {
-              /* ../lib/standard/collection/array.nit:272 */
-              goto label5;
-            }
-          }
-          label5: while(0);
-          /* parser/parser.nit:1111 */
-          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, 1111);
-          }
-          fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[4])(fra.me.REG[4]);
-        }
-      } else {
-        /* parser/parser.nit:1116 */
-        REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-        } else {
-          REGB3 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-          if (UNTAG_Bool(REGB3)) {
-            REGB3 = TAG_Bool(0);
-            REGB2 = REGB3;
-          } else {
-            REGB3 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-            REGB2 = REGB3;
-          }
-        }
-        if (UNTAG_Bool(REGB2)) {
-          /* parser/parser.nit:1118 */
-          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, 1118);
-          }
-          fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-        } else {
-          /* parser/parser.nit:1121 */
-          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, 1121);
-          }
-          fra.me.REG[0] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-          CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-        }
-      }
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
     }
   }
-  label1: while(0);
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:3893 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:3895 */
+  fra.me.REG[4] = NEW_AMainClassdef_parser___parser_prod___AMainClassdef___init_amainclassdef(fra.me.REG[4]);
+  /* parser/parser.nit:3898 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:3899 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3899);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction70___action[] = "parser::ReduceAction70::(parser::ReduceAction::action)";
+void parser___ReduceAction70___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3904;
+  fra.me.meth = LOCATE_parser___ReduceAction70___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3906 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3907 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3908 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3909 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3909);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction71___action[] = "parser::ReduceAction71::(parser::ReduceAction::action)";
+void parser___ReduceAction71___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3914;
+  fra.me.meth = LOCATE_parser___ReduceAction71___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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:3916 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3917 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3918 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3920 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3920);
+  }
+  /* parser/parser.nit:3921 */
+  fra.me.REG[3] = NEW_AMainMethPropdef_parser___parser_prod___AMainMethPropdef___init_amainmethpropdef(NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:3925 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:3926 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3926);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction73___action[] = "parser::ReduceAction73::(parser::ReduceAction::action)";
+void parser___ReduceAction73___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3931;
+  fra.me.meth = LOCATE_parser___ReduceAction73___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:3933 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3934 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3935 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3936 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3937 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3938 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3939 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3940 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3941 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3942 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3943 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3945 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3945);
+  }
+  /* parser/parser.nit:3947 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3947);
+  }
+  /* parser/parser.nit:3949 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3949);
+  }
+  /* parser/parser.nit:3951 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3951);
+  }
+  /* parser/parser.nit:3953 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3953);
+  }
+  /* parser/parser.nit:3954 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[9], fra.me.REG[10], fra.me.REG[3]);
+  /* parser/parser.nit:3967 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:3968 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3968);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction74___action[] = "parser::ReduceAction74::(parser::ReduceAction::action)";
+void parser___ReduceAction74___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 3973;
+  fra.me.meth = LOCATE_parser___ReduceAction74___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 12;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[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:3975 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:3976 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3977 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3978 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3979 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3980 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3981 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3982 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3983 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:3984 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3985 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3986 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:3988 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3988);
+  }
+  /* parser/parser.nit:3990 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3990);
+  }
+  /* parser/parser.nit:3992 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3992);
+  }
+  /* parser/parser.nit:3994 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3994);
+  }
+  /* parser/parser.nit:3996 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3996);
+  }
+  /* parser/parser.nit:3998 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3998);
+  }
+  /* parser/parser.nit:3999 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[10], fra.me.REG[11], fra.me.REG[3]);
+  /* parser/parser.nit:4012 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4013 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4013);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction75___action[] = "parser::ReduceAction75::(parser::ReduceAction::action)";
+void parser___ReduceAction75___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4018;
+  fra.me.meth = LOCATE_parser___ReduceAction75___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 12;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[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:4020 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4021 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4022 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4023 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4024 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4025 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4026 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4027 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4028 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4029 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4030 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4031 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4033 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4033);
+  }
+  /* parser/parser.nit:4035 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4035);
+  }
+  /* parser/parser.nit:4037 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4037);
+  }
+  /* parser/parser.nit:4039 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4039);
+  }
+  /* parser/parser.nit:4041 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4041);
+  }
+  /* parser/parser.nit:4042 */
+  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:4044 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4044);
+  }
+  /* parser/parser.nit:4045 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[10], fra.me.REG[11], fra.me.REG[3]);
+  /* parser/parser.nit:4058 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4059 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4059);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction76___action[] = "parser::ReduceAction76::(parser::ReduceAction::action)";
+void parser___ReduceAction76___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4064;
+  fra.me.meth = LOCATE_parser___ReduceAction76___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:4066 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4067 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4068 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4069 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4070 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4071 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4072 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4073 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4074 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4075 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4076 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4077 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4078 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4080 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4080);
+  }
+  /* parser/parser.nit:4082 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4082);
+  }
+  /* parser/parser.nit:4084 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4084);
+  }
+  /* parser/parser.nit:4086 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4086);
+  }
+  /* parser/parser.nit:4088 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4088);
+  }
+  /* parser/parser.nit:4090 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4090);
+  }
+  /* parser/parser.nit:4091 */
+  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:4093 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4093);
+  }
+  /* parser/parser.nit:4094 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], NIT_NULL, NIT_NULL, fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:4107 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4108 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4108);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction77___action[] = "parser::ReduceAction77::(parser::ReduceAction::action)";
+void parser___ReduceAction77___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4113;
+  fra.me.meth = LOCATE_parser___ReduceAction77___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:4115 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4116 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4117 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4118 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4119 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4120 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4121 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4122 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4123 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4124 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4125 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4126 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4128 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4128);
+  }
+  /* parser/parser.nit:4130 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4130);
+  }
+  /* parser/parser.nit:4132 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4132);
+  }
+  /* parser/parser.nit:4134 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4134);
+  }
+  /* parser/parser.nit:4135 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4137 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4137);
+  }
+  /* parser/parser.nit:4138 */
+  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:4139 */
+  fra.me.REG[12] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[12], NIT_NULL);
+  /* parser/parser.nit:4146 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4146);
+  }
+  /* parser/parser.nit:4147 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], fra.me.REG[12], NIT_NULL, fra.me.REG[10], fra.me.REG[11], fra.me.REG[3]);
+  /* parser/parser.nit:4160 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4161 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4161);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction78___action[] = "parser::ReduceAction78::(parser::ReduceAction::action)";
+void parser___ReduceAction78___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4166;
+  fra.me.meth = LOCATE_parser___ReduceAction78___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 14;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:4168 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4169 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4170 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4171 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4172 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4173 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4174 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4175 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4176 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4177 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4178 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4179 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4180 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4182 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4182);
+  }
+  /* parser/parser.nit:4184 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4184);
+  }
+  /* parser/parser.nit:4186 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4186);
+  }
+  /* parser/parser.nit:4188 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4188);
+  }
+  /* parser/parser.nit:4190 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4190);
+  }
+  /* parser/parser.nit:4191 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4193 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4193);
+  }
+  /* parser/parser.nit:4194 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:4195 */
+  fra.me.REG[13] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[13], NIT_NULL);
+  /* parser/parser.nit:4202 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4202);
+  }
+  /* parser/parser.nit:4203 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], fra.me.REG[13], NIT_NULL, fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:4216 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4217 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4217);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction79___action[] = "parser::ReduceAction79::(parser::ReduceAction::action)";
+void parser___ReduceAction79___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4222;
+  fra.me.meth = LOCATE_parser___ReduceAction79___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:4224 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4225 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4226 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4227 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4228 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4229 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4230 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4231 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4232 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4233 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4234 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4235 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4236 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4238 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4238);
+  }
+  /* parser/parser.nit:4240 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4240);
+  }
+  /* parser/parser.nit:4242 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4242);
+  }
+  /* parser/parser.nit:4244 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4244);
+  }
+  /* parser/parser.nit:4246 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4246);
+  }
+  /* parser/parser.nit:4247 */
+  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:4248 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4250 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4250);
+  }
+  /* parser/parser.nit:4251 */
+  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:4252 */
+  fra.me.REG[5] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[5], NIT_NULL);
+  /* parser/parser.nit:4259 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4259);
+  }
+  /* parser/parser.nit:4260 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], fra.me.REG[5], NIT_NULL, fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:4273 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4274 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4274);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction80___action[] = "parser::ReduceAction80::(parser::ReduceAction::action)";
+void parser___ReduceAction80___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4279;
+  fra.me.meth = LOCATE_parser___ReduceAction80___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 14;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:4281 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4282 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4283 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4284 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4285 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4286 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4287 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4288 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4289 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4290 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4291 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4292 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4293 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4294 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4296 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4296);
+  }
+  /* parser/parser.nit:4298 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4298);
+  }
+  /* parser/parser.nit:4300 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4300);
+  }
+  /* parser/parser.nit:4302 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4302);
+  }
+  /* parser/parser.nit:4304 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4304);
+  }
+  /* parser/parser.nit:4306 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4306);
+  }
+  /* parser/parser.nit:4307 */
+  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:4308 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4310 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4310);
+  }
+  /* parser/parser.nit:4311 */
+  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:4312 */
+  fra.me.REG[5] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[5], NIT_NULL);
+  /* parser/parser.nit:4319 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4319);
+  }
+  /* parser/parser.nit:4320 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], fra.me.REG[5], NIT_NULL, fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:4333 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4334 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4334);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction81___action[] = "parser::ReduceAction81::(parser::ReduceAction::action)";
+void parser___ReduceAction81___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4339;
+  fra.me.meth = LOCATE_parser___ReduceAction81___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 12;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[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:4341 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4342 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4343 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4344 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4345 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4346 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4347 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4348 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4349 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4350 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4351 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4352 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4354 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4354);
+  }
+  /* parser/parser.nit:4356 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4356);
+  }
+  /* parser/parser.nit:4358 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4358);
+  }
+  /* parser/parser.nit:4360 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4360);
+  }
+  /* parser/parser.nit:4362 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4362);
+  }
+  /* parser/parser.nit:4364 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4364);
+  }
+  /* parser/parser.nit:4365 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], NIT_NULL, fra.me.REG[4], fra.me.REG[10], fra.me.REG[11], fra.me.REG[3]);
+  /* parser/parser.nit:4378 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4379 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4379);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction82___action[] = "parser::ReduceAction82::(parser::ReduceAction::action)";
+void parser___ReduceAction82___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4384;
+  fra.me.meth = LOCATE_parser___ReduceAction82___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:4386 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4387 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4388 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4389 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4390 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4391 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4392 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4393 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4394 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4395 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4396 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4397 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4398 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4400 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4400);
+  }
+  /* parser/parser.nit:4402 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4402);
+  }
+  /* parser/parser.nit:4404 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4404);
+  }
+  /* parser/parser.nit:4406 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4406);
+  }
+  /* parser/parser.nit:4408 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4408);
+  }
+  /* parser/parser.nit:4410 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4410);
+  }
+  /* parser/parser.nit:4412 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4412);
+  }
+  /* parser/parser.nit:4413 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], NIT_NULL, fra.me.REG[4], fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:4426 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4427 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4427);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction83___action[] = "parser::ReduceAction83::(parser::ReduceAction::action)";
+void parser___ReduceAction83___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4432;
+  fra.me.meth = LOCATE_parser___ReduceAction83___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:4434 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4435 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4436 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4437 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4438 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4439 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4440 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4441 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4442 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4443 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4444 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4445 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4446 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4448 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4448);
+  }
+  /* parser/parser.nit:4450 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4450);
+  }
+  /* parser/parser.nit:4452 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4452);
+  }
+  /* parser/parser.nit:4454 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4454);
+  }
+  /* parser/parser.nit:4456 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4456);
+  }
+  /* parser/parser.nit:4457 */
+  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:4459 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4459);
+  }
+  /* parser/parser.nit:4461 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4461);
+  }
+  /* parser/parser.nit:4462 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], NIT_NULL, fra.me.REG[4], fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:4475 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4476 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4476);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction84___action[] = "parser::ReduceAction84::(parser::ReduceAction::action)";
+void parser___ReduceAction84___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4481;
+  fra.me.meth = LOCATE_parser___ReduceAction84___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 14;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:4483 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4484 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4485 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4486 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4487 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4488 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4489 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4490 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4491 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4492 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4493 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4494 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4495 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4496 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4498 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4498);
+  }
+  /* parser/parser.nit:4500 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4500);
+  }
+  /* parser/parser.nit:4502 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4502);
+  }
+  /* parser/parser.nit:4504 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4504);
+  }
+  /* parser/parser.nit:4506 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4506);
+  }
+  /* parser/parser.nit:4508 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4508);
+  }
+  /* parser/parser.nit:4509 */
+  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:4511 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4511);
+  }
+  /* parser/parser.nit:4513 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4513);
+  }
+  /* parser/parser.nit:4514 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], NIT_NULL, fra.me.REG[4], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:4527 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4528 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4528);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction85___action[] = "parser::ReduceAction85::(parser::ReduceAction::action)";
+void parser___ReduceAction85___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4533;
+  fra.me.meth = LOCATE_parser___ReduceAction85___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 14;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:4535 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4536 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4537 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4538 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4539 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4540 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4541 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4542 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4543 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4544 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4545 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4546 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4547 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4549 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4549);
+  }
+  /* parser/parser.nit:4551 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4551);
+  }
+  /* parser/parser.nit:4553 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4553);
+  }
+  /* parser/parser.nit:4555 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4555);
+  }
+  /* parser/parser.nit:4556 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4558 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4558);
+  }
+  /* parser/parser.nit:4559 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[5]);
+  fra.me.REG[13] = fra.me.REG[5];
+  /* parser/parser.nit:4560 */
+  fra.me.REG[13] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[13], NIT_NULL);
+  /* parser/parser.nit:4567 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4567);
+  }
+  /* parser/parser.nit:4569 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4569);
+  }
+  /* parser/parser.nit:4570 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], fra.me.REG[13], fra.me.REG[4], fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:4583 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4584 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4584);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction86___action[] = "parser::ReduceAction86::(parser::ReduceAction::action)";
+void parser___ReduceAction86___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4589;
+  fra.me.meth = LOCATE_parser___ReduceAction86___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 15;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:4591 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4592 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4593 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4594 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4595 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4596 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4597 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4598 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4599 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4600 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4601 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4602 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4603 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4604 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4606 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4606);
+  }
+  /* parser/parser.nit:4608 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4608);
+  }
+  /* parser/parser.nit:4610 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4610);
+  }
+  /* parser/parser.nit:4612 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4612);
+  }
+  /* parser/parser.nit:4614 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4614);
+  }
+  /* parser/parser.nit:4615 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4617 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4617);
+  }
+  /* parser/parser.nit:4618 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[5]);
+  fra.me.REG[14] = fra.me.REG[5];
+  /* parser/parser.nit:4619 */
+  fra.me.REG[14] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[14], NIT_NULL);
+  /* parser/parser.nit:4626 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4626);
+  }
+  /* parser/parser.nit:4628 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4628);
+  }
+  /* parser/parser.nit:4629 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], fra.me.REG[14], fra.me.REG[4], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:4642 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4643 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4643);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction87___action[] = "parser::ReduceAction87::(parser::ReduceAction::action)";
+void parser___ReduceAction87___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4648;
+  fra.me.meth = LOCATE_parser___ReduceAction87___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 14;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:4650 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4651 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4652 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4653 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4654 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4655 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4656 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4657 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4658 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4659 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4660 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4661 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4662 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4663 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4665 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4665);
+  }
+  /* parser/parser.nit:4667 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4667);
+  }
+  /* parser/parser.nit:4669 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4669);
+  }
+  /* parser/parser.nit:4671 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4671);
+  }
+  /* parser/parser.nit:4673 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4673);
+  }
+  /* parser/parser.nit:4674 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[6]);
+  fra.me.REG[11] = fra.me.REG[6];
+  /* parser/parser.nit:4675 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4677 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4677);
+  }
+  /* parser/parser.nit:4678 */
+  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:4679 */
+  fra.me.REG[6] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[6], NIT_NULL);
+  /* parser/parser.nit:4686 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4686);
+  }
+  /* parser/parser.nit:4688 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4688);
+  }
+  /* parser/parser.nit:4689 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[11], fra.me.REG[6], fra.me.REG[4], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:4702 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4703 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4703);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction88___action[] = "parser::ReduceAction88::(parser::ReduceAction::action)";
+void parser___ReduceAction88___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4708;
+  fra.me.meth = LOCATE_parser___ReduceAction88___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 15;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:4710 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4711 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4712 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4713 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4714 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4715 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4716 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4717 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4718 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4719 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4720 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4721 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4722 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4723 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4724 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4726 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4726);
+  }
+  /* parser/parser.nit:4728 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4728);
+  }
+  /* parser/parser.nit:4730 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4730);
+  }
+  /* parser/parser.nit:4732 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4732);
+  }
+  /* parser/parser.nit:4734 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4734);
+  }
+  /* parser/parser.nit:4736 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4736);
+  }
+  /* parser/parser.nit:4737 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[6]);
+  fra.me.REG[12] = fra.me.REG[6];
+  /* parser/parser.nit:4738 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4740 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4740);
+  }
+  /* parser/parser.nit:4741 */
+  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:4742 */
+  fra.me.REG[6] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[6], NIT_NULL);
+  /* parser/parser.nit:4749 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4749);
+  }
+  /* parser/parser.nit:4751 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4751);
+  }
+  /* parser/parser.nit:4752 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[12], fra.me.REG[6], fra.me.REG[4], fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
+  /* parser/parser.nit:4765 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4766 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4766);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction89___action[] = "parser::ReduceAction89::(parser::ReduceAction::action)";
+void parser___ReduceAction89___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4771;
+  fra.me.meth = LOCATE_parser___ReduceAction89___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 12;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[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:4773 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4774 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4775 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4776 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4777 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4778 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4779 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4780 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4781 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4782 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4783 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4784 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4786 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4786);
+  }
+  /* parser/parser.nit:4788 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4788);
+  }
+  /* parser/parser.nit:4790 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4790);
+  }
+  /* parser/parser.nit:4792 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4792);
+  }
+  /* parser/parser.nit:4794 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4794);
+  }
+  /* parser/parser.nit:4795 */
+  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:4797 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4797);
+  }
+  /* parser/parser.nit:4798 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[10], fra.me.REG[11], fra.me.REG[3]);
+  /* parser/parser.nit:4811 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4812 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4812);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction90___action[] = "parser::ReduceAction90::(parser::ReduceAction::action)";
+void parser___ReduceAction90___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4817;
+  fra.me.meth = LOCATE_parser___ReduceAction90___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:4819 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4820 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4821 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4822 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4823 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4824 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4825 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4826 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4827 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4828 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4829 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4830 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4831 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4833 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4833);
+  }
+  /* parser/parser.nit:4835 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4835);
+  }
+  /* parser/parser.nit:4837 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4837);
+  }
+  /* parser/parser.nit:4839 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4839);
+  }
+  /* parser/parser.nit:4841 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4841);
+  }
+  /* parser/parser.nit:4843 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4843);
+  }
+  /* parser/parser.nit:4844 */
+  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:4846 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4846);
+  }
+  /* parser/parser.nit:4847 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], NIT_NULL, NIT_NULL, fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:4860 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4861 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4861);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction91___action[] = "parser::ReduceAction91::(parser::ReduceAction::action)";
+void parser___ReduceAction91___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4866;
+  fra.me.meth = LOCATE_parser___ReduceAction91___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:4868 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4869 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4870 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4871 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4872 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4873 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4874 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4875 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4876 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4877 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4878 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4879 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4880 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4882 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4882);
+  }
+  /* parser/parser.nit:4884 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4884);
+  }
+  /* parser/parser.nit:4886 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4886);
+  }
+  /* parser/parser.nit:4888 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4888);
+  }
+  /* parser/parser.nit:4890 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4890);
+  }
+  /* parser/parser.nit:4891 */
+  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:4893 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4893);
+  }
+  /* parser/parser.nit:4894 */
+  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:4896 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4896);
+  }
+  /* parser/parser.nit:4897 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], NIT_NULL, NIT_NULL, fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:4910 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4911 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4911);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction92___action[] = "parser::ReduceAction92::(parser::ReduceAction::action)";
+void parser___ReduceAction92___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4916;
+  fra.me.meth = LOCATE_parser___ReduceAction92___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 14;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:4918 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4919 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4920 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4921 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4922 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4923 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4924 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4925 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4926 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4927 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4928 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4929 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4930 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4931 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4933 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4933);
+  }
+  /* parser/parser.nit:4935 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4935);
+  }
+  /* parser/parser.nit:4937 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4937);
+  }
+  /* parser/parser.nit:4939 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4939);
+  }
+  /* parser/parser.nit:4941 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4941);
+  }
+  /* parser/parser.nit:4943 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4943);
+  }
+  /* parser/parser.nit:4944 */
+  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:4946 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4946);
+  }
+  /* parser/parser.nit:4947 */
+  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:4949 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4949);
+  }
+  /* parser/parser.nit:4950 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], NIT_NULL, NIT_NULL, fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:4963 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:4964 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4964);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction93___action[] = "parser::ReduceAction93::(parser::ReduceAction::action)";
+void parser___ReduceAction93___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 4969;
+  fra.me.meth = LOCATE_parser___ReduceAction93___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 14;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:4971 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:4972 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4973 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4974 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4975 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4976 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4977 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4978 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4979 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4980 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:4981 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4982 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4983 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4985 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4985);
+  }
+  /* parser/parser.nit:4987 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4987);
+  }
+  /* parser/parser.nit:4989 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4989);
+  }
+  /* parser/parser.nit:4991 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4991);
+  }
+  /* parser/parser.nit:4992 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:4994 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4994);
+  }
+  /* parser/parser.nit:4995 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[5]);
+  fra.me.REG[13] = fra.me.REG[5];
+  /* parser/parser.nit:4996 */
+  fra.me.REG[13] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[13], NIT_NULL);
+  /* parser/parser.nit:5003 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5003);
+  }
+  /* parser/parser.nit:5004 */
+  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:5006 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5006);
+  }
+  /* parser/parser.nit:5007 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], fra.me.REG[13], NIT_NULL, fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:5020 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5021 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5021);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction94___action[] = "parser::ReduceAction94::(parser::ReduceAction::action)";
+void parser___ReduceAction94___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5026;
+  fra.me.meth = LOCATE_parser___ReduceAction94___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 15;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5028 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5029 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5030 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5031 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5032 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5033 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5034 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5035 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5036 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5037 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5038 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5039 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5040 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5041 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5043 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5043);
+  }
+  /* parser/parser.nit:5045 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5045);
+  }
+  /* parser/parser.nit:5047 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5047);
+  }
+  /* parser/parser.nit:5049 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5049);
+  }
+  /* parser/parser.nit:5051 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5051);
+  }
+  /* parser/parser.nit:5052 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5054 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5054);
+  }
+  /* parser/parser.nit:5055 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[5]);
+  fra.me.REG[14] = fra.me.REG[5];
+  /* parser/parser.nit:5056 */
+  fra.me.REG[14] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[14], NIT_NULL);
+  /* parser/parser.nit:5063 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5063);
+  }
+  /* parser/parser.nit:5064 */
+  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:5066 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5066);
+  }
+  /* parser/parser.nit:5067 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], fra.me.REG[14], NIT_NULL, fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:5080 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5081 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5081);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction95___action[] = "parser::ReduceAction95::(parser::ReduceAction::action)";
+void parser___ReduceAction95___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5086;
+  fra.me.meth = LOCATE_parser___ReduceAction95___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 14;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5088 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5089 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5090 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5091 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5092 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5093 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5094 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5095 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5096 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5097 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5098 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5099 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5100 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5101 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5103 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5103);
+  }
+  /* parser/parser.nit:5105 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5105);
+  }
+  /* parser/parser.nit:5107 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5107);
+  }
+  /* parser/parser.nit:5109 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5109);
+  }
+  /* parser/parser.nit:5111 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5111);
+  }
+  /* parser/parser.nit:5112 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[6]);
+  fra.me.REG[11] = fra.me.REG[6];
+  /* parser/parser.nit:5113 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5115 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5115);
+  }
+  /* parser/parser.nit:5116 */
+  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:5117 */
+  fra.me.REG[6] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[6], NIT_NULL);
+  /* parser/parser.nit:5124 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5124);
+  }
+  /* parser/parser.nit:5125 */
+  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:5127 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5127);
+  }
+  /* parser/parser.nit:5128 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[11], fra.me.REG[6], NIT_NULL, fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:5141 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5142 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5142);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction96___action[] = "parser::ReduceAction96::(parser::ReduceAction::action)";
+void parser___ReduceAction96___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5147;
+  fra.me.meth = LOCATE_parser___ReduceAction96___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 15;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5149 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5150 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5151 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5152 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5153 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5154 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5155 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5156 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5157 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5158 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5159 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5160 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5161 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5162 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5163 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5165 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5165);
+  }
+  /* parser/parser.nit:5167 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5167);
+  }
+  /* parser/parser.nit:5169 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5169);
+  }
+  /* parser/parser.nit:5171 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5171);
+  }
+  /* parser/parser.nit:5173 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5173);
+  }
+  /* parser/parser.nit:5175 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5175);
+  }
+  /* parser/parser.nit:5176 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[6]);
+  fra.me.REG[12] = fra.me.REG[6];
+  /* parser/parser.nit:5177 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5179 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5179);
+  }
+  /* parser/parser.nit:5180 */
+  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:5181 */
+  fra.me.REG[6] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[6], NIT_NULL);
+  /* parser/parser.nit:5188 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5188);
+  }
+  /* parser/parser.nit:5189 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:5191 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5191);
+  }
+  /* parser/parser.nit:5192 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[12], fra.me.REG[6], NIT_NULL, fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
+  /* parser/parser.nit:5205 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5206 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5206);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction97___action[] = "parser::ReduceAction97::(parser::ReduceAction::action)";
+void parser___ReduceAction97___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5211;
+  fra.me.meth = LOCATE_parser___ReduceAction97___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5213 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5214 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5215 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5216 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5217 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5218 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5219 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5220 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5221 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5222 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5223 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5224 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5225 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5227 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5227);
+  }
+  /* parser/parser.nit:5229 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5229);
+  }
+  /* parser/parser.nit:5231 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5231);
+  }
+  /* parser/parser.nit:5233 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5233);
+  }
+  /* parser/parser.nit:5235 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5235);
+  }
+  /* parser/parser.nit:5237 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5237);
+  }
+  /* parser/parser.nit:5238 */
+  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:5240 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5240);
+  }
+  /* parser/parser.nit:5241 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], NIT_NULL, fra.me.REG[5], fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:5254 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5255 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5255);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction98___action[] = "parser::ReduceAction98::(parser::ReduceAction::action)";
+void parser___ReduceAction98___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5260;
+  fra.me.meth = LOCATE_parser___ReduceAction98___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 14;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5262 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5263 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5264 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5265 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5266 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5267 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5268 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5269 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5270 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5271 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5272 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5273 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5274 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5275 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5277 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5277);
+  }
+  /* parser/parser.nit:5279 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5279);
+  }
+  /* parser/parser.nit:5281 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5281);
+  }
+  /* parser/parser.nit:5283 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5283);
+  }
+  /* parser/parser.nit:5285 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5285);
+  }
+  /* parser/parser.nit:5287 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5287);
+  }
+  /* parser/parser.nit:5289 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5289);
+  }
+  /* parser/parser.nit:5290 */
+  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:5292 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5292);
+  }
+  /* parser/parser.nit:5293 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], NIT_NULL, fra.me.REG[5], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:5306 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5307 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5307);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction99___action[] = "parser::ReduceAction99::(parser::ReduceAction::action)";
+void parser___ReduceAction99___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5312;
+  fra.me.meth = LOCATE_parser___ReduceAction99___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 14;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5314 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5315 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5316 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5317 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5318 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5319 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5320 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5321 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5322 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5323 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5324 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5325 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5326 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5327 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5329 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5329);
+  }
+  /* parser/parser.nit:5331 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5331);
+  }
+  /* parser/parser.nit:5333 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5333);
+  }
+  /* parser/parser.nit:5335 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5335);
+  }
+  /* parser/parser.nit:5337 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5337);
+  }
+  /* parser/parser.nit:5338 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[6]);
+  fra.me.REG[11] = fra.me.REG[6];
+  /* parser/parser.nit:5340 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5340);
+  }
+  /* parser/parser.nit:5342 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5342);
+  }
+  /* parser/parser.nit:5343 */
+  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:5345 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5345);
+  }
+  /* parser/parser.nit:5346 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[11], NIT_NULL, fra.me.REG[5], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:5359 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5360 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5360);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction100___action[] = "parser::ReduceAction100::(parser::ReduceAction::action)";
+void parser___ReduceAction100___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5365;
+  fra.me.meth = LOCATE_parser___ReduceAction100___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 15;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5367 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5368 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5369 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5370 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5371 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5372 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5373 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5374 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5375 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5376 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5377 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5378 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5379 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5380 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5381 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5383 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5383);
+  }
+  /* parser/parser.nit:5385 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5385);
+  }
+  /* parser/parser.nit:5387 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5387);
+  }
+  /* parser/parser.nit:5389 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5389);
+  }
+  /* parser/parser.nit:5391 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5391);
+  }
+  /* parser/parser.nit:5393 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5393);
+  }
+  /* parser/parser.nit:5394 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[6]);
+  fra.me.REG[12] = fra.me.REG[6];
+  /* parser/parser.nit:5396 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5396);
+  }
+  /* parser/parser.nit:5398 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5398);
+  }
+  /* parser/parser.nit:5399 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:5401 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5401);
+  }
+  /* parser/parser.nit:5402 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[12], NIT_NULL, fra.me.REG[5], fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
+  /* parser/parser.nit:5415 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5416 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5416);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction101___action[] = "parser::ReduceAction101::(parser::ReduceAction::action)";
+void parser___ReduceAction101___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5421;
+  fra.me.meth = LOCATE_parser___ReduceAction101___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 15;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5423 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5424 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5425 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5426 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5427 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5428 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5429 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5430 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5431 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5432 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5433 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5434 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5435 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5436 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5438 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5438);
+  }
+  /* parser/parser.nit:5440 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5440);
+  }
+  /* parser/parser.nit:5442 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5442);
+  }
+  /* parser/parser.nit:5444 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5444);
+  }
+  /* parser/parser.nit:5445 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5447 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5447);
+  }
+  /* parser/parser.nit:5448 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[6]);
+  fra.me.REG[14] = fra.me.REG[6];
+  /* parser/parser.nit:5449 */
+  fra.me.REG[14] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[14], NIT_NULL);
+  /* parser/parser.nit:5456 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5456);
+  }
+  /* parser/parser.nit:5458 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5458);
+  }
+  /* parser/parser.nit:5459 */
+  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:5461 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5461);
+  }
+  /* parser/parser.nit:5462 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[11], fra.me.REG[14], fra.me.REG[5], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:5475 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5476 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5476);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction102___action[] = "parser::ReduceAction102::(parser::ReduceAction::action)";
+void parser___ReduceAction102___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[15];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5481;
+  fra.me.meth = LOCATE_parser___ReduceAction102___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 16;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[15] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5483 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5484 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5485 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5486 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5487 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5488 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5489 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5490 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5491 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5492 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5493 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5494 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5495 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5496 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5497 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5499 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5499);
+  }
+  /* parser/parser.nit:5501 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5501);
+  }
+  /* parser/parser.nit:5503 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5503);
+  }
+  /* parser/parser.nit:5505 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5505);
+  }
+  /* parser/parser.nit:5507 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5507);
+  }
+  /* parser/parser.nit:5508 */
+  fra.me.REG[15] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5510 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5510);
+  }
+  /* parser/parser.nit:5511 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[15], fra.me.REG[6]);
+  fra.me.REG[15] = fra.me.REG[6];
+  /* parser/parser.nit:5512 */
+  fra.me.REG[15] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[15], NIT_NULL);
+  /* parser/parser.nit:5519 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5519);
+  }
+  /* parser/parser.nit:5521 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5521);
+  }
+  /* parser/parser.nit:5522 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:5524 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5524);
+  }
+  /* parser/parser.nit:5525 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[12], fra.me.REG[15], fra.me.REG[5], fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
+  /* parser/parser.nit:5538 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5539 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5539);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction103___action[] = "parser::ReduceAction103::(parser::ReduceAction::action)";
+void parser___ReduceAction103___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5544;
+  fra.me.meth = LOCATE_parser___ReduceAction103___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 15;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5546 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5547 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5548 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5549 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5550 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5551 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5552 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5553 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5554 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5555 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5556 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5557 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5558 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5559 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5560 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5562 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5562);
+  }
+  /* parser/parser.nit:5564 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5564);
+  }
+  /* parser/parser.nit:5566 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5566);
+  }
+  /* parser/parser.nit:5568 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5568);
+  }
+  /* parser/parser.nit:5570 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5570);
+  }
+  /* parser/parser.nit:5571 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[7]);
+  fra.me.REG[12] = fra.me.REG[7];
+  /* parser/parser.nit:5572 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5574 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5574);
+  }
+  /* parser/parser.nit:5575 */
+  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:5576 */
+  fra.me.REG[7] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[7], NIT_NULL);
+  /* parser/parser.nit:5583 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5583);
+  }
+  /* parser/parser.nit:5585 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5585);
+  }
+  /* parser/parser.nit:5586 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:5588 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5588);
+  }
+  /* parser/parser.nit:5589 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], NIT_NULL, fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[12], fra.me.REG[7], fra.me.REG[5], fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
+  /* parser/parser.nit:5602 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5603 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5603);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction104___action[] = "parser::ReduceAction104::(parser::ReduceAction::action)";
+void parser___ReduceAction104___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[15];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5608;
+  fra.me.meth = LOCATE_parser___ReduceAction104___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 16;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[15] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5610 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5611 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5612 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5613 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5614 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5615 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5616 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5617 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5618 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5619 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5620 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5621 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5622 */
+  fra.me.REG[12] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5623 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5624 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5625 */
+  fra.me.REG[15] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5627 */
+  REGB0 = TAG_Bool((fra.me.REG[12]==NIT_NULL) || VAL_ISA(fra.me.REG[12], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5627);
+  }
+  /* parser/parser.nit:5629 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5629);
+  }
+  /* parser/parser.nit:5631 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5631);
+  }
+  /* parser/parser.nit:5633 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5633);
+  }
+  /* parser/parser.nit:5635 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5635);
+  }
+  /* parser/parser.nit:5637 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5637);
+  }
+  /* parser/parser.nit:5638 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[7]);
+  fra.me.REG[13] = fra.me.REG[7];
+  /* parser/parser.nit:5639 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5641 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5641);
+  }
+  /* parser/parser.nit:5642 */
+  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:5643 */
+  fra.me.REG[7] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[7], NIT_NULL);
+  /* parser/parser.nit:5650 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5650);
+  }
+  /* parser/parser.nit:5652 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5652);
+  }
+  /* parser/parser.nit:5653 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[4]);
+  fra.me.REG[14] = fra.me.REG[4];
+  /* parser/parser.nit:5655 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5655);
+  }
+  /* parser/parser.nit:5656 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[12], fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[13], fra.me.REG[7], fra.me.REG[5], fra.me.REG[14], fra.me.REG[15], fra.me.REG[3]);
+  /* parser/parser.nit:5669 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5670 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5670);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction105___action[] = "parser::ReduceAction105::(parser::ReduceAction::action)";
+void parser___ReduceAction105___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5675;
+  fra.me.meth = LOCATE_parser___ReduceAction105___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 12;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[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:5677 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5678 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5679 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5680 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5681 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5682 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5683 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5684 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5685 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5686 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5687 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5688 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5690 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5690);
+  }
+  /* parser/parser.nit:5692 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5692);
+  }
+  /* parser/parser.nit:5694 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5694);
+  }
+  /* parser/parser.nit:5696 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5696);
+  }
+  /* parser/parser.nit:5698 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5698);
+  }
+  /* parser/parser.nit:5699 */
+  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:5701 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5701);
+  }
+  /* parser/parser.nit:5702 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[10], fra.me.REG[11], fra.me.REG[3]);
+  /* parser/parser.nit:5715 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5716 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5716);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction106___action[] = "parser::ReduceAction106::(parser::ReduceAction::action)";
+void parser___ReduceAction106___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5721;
+  fra.me.meth = LOCATE_parser___ReduceAction106___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5723 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5724 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5725 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5726 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5727 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5728 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5729 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5730 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5731 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5732 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5733 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5734 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5735 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5737 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5737);
+  }
+  /* parser/parser.nit:5739 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5739);
+  }
+  /* parser/parser.nit:5741 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5741);
+  }
+  /* parser/parser.nit:5743 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5743);
+  }
+  /* parser/parser.nit:5745 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5745);
+  }
+  /* parser/parser.nit:5747 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5747);
+  }
+  /* parser/parser.nit:5748 */
+  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:5750 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5750);
+  }
+  /* parser/parser.nit:5751 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], NIT_NULL, NIT_NULL, fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:5764 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5765 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5765);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction107___action[] = "parser::ReduceAction107::(parser::ReduceAction::action)";
+void parser___ReduceAction107___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5770;
+  fra.me.meth = LOCATE_parser___ReduceAction107___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5772 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5773 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5774 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5775 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5776 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5777 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5778 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5779 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5780 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5781 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5782 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5783 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5784 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5786 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5786);
+  }
+  /* parser/parser.nit:5788 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5788);
+  }
+  /* parser/parser.nit:5790 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5790);
+  }
+  /* parser/parser.nit:5792 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5792);
+  }
+  /* parser/parser.nit:5794 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5794);
+  }
+  /* parser/parser.nit:5795 */
+  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:5797 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5797);
+  }
+  /* parser/parser.nit:5798 */
+  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:5800 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5800);
+  }
+  /* parser/parser.nit:5801 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], NIT_NULL, NIT_NULL, fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:5814 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5815 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5815);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction108___action[] = "parser::ReduceAction108::(parser::ReduceAction::action)";
+void parser___ReduceAction108___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5820;
+  fra.me.meth = LOCATE_parser___ReduceAction108___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 14;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5822 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5823 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5824 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5825 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5826 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5827 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5828 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5829 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5830 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5831 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5832 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5833 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5834 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5835 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5837 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5837);
+  }
+  /* parser/parser.nit:5839 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5839);
+  }
+  /* parser/parser.nit:5841 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5841);
+  }
+  /* parser/parser.nit:5843 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5843);
+  }
+  /* parser/parser.nit:5845 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5845);
+  }
+  /* parser/parser.nit:5847 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5847);
+  }
+  /* parser/parser.nit:5848 */
+  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:5850 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5850);
+  }
+  /* parser/parser.nit:5851 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:5853 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5853);
+  }
+  /* parser/parser.nit:5854 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], NIT_NULL, NIT_NULL, fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:5867 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5868 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5868);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ComputeProdLocationVisitor___init[] = "parser::ComputeProdLocationVisitor::init";
-void parser___ComputeProdLocationVisitor___init(val_t p0, int* init_table){
-  int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___ComputeProdLocationVisitor].i;
-  struct {struct stack_frame_t me;} fra;
+static const char LOCATE_parser___ReduceAction109___action[] = "parser::ReduceAction109::(parser::ReduceAction::action)";
+void parser___ReduceAction109___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos2]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1127;
-  fra.me.meth = LOCATE_parser___ComputeProdLocationVisitor___init;
+  fra.me.line = 5873;
+  fra.me.meth = LOCATE_parser___ReduceAction109___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 14;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser.nit:1127 */
-  CALL_parser___parser_prod___Visitor___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5875 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5876 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5877 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5878 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5879 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5880 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5881 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5882 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5883 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5884 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5885 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5886 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5887 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5889 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5889);
+  }
+  /* parser/parser.nit:5891 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5891);
+  }
+  /* parser/parser.nit:5893 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5893);
+  }
+  /* parser/parser.nit:5895 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5895);
+  }
+  /* parser/parser.nit:5896 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5898 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5898);
+  }
+  /* parser/parser.nit:5899 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[5]);
+  fra.me.REG[13] = fra.me.REG[5];
+  /* parser/parser.nit:5900 */
+  fra.me.REG[13] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[13], NIT_NULL);
+  /* parser/parser.nit:5907 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5907);
+  }
+  /* parser/parser.nit:5908 */
+  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:5910 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5910);
+  }
+  /* parser/parser.nit:5911 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], fra.me.REG[13], NIT_NULL, fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:5924 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5925 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5925);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos2] = 1;
   return;
 }
-static const char LOCATE_parser___ReduceAction___action[] = "parser::ReduceAction::action";
-void parser___ReduceAction___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me;} fra;
+static const char LOCATE_parser___ReduceAction110___action[] = "parser::ReduceAction110::(parser::ReduceAction::action)";
+void parser___ReduceAction110___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
+  val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1132;
-  fra.me.meth = LOCATE_parser___ReduceAction___action;
+  fra.me.line = 5930;
+  fra.me.meth = LOCATE_parser___ReduceAction110___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 15;
   fra.me.nitni_local_ref_head = NULL;
-  /* parser/parser.nit:1132 */
-  nit_abort("Deferred method called", NULL, LOCATE_parser, 1132);
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5932 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5933 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5934 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5935 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5936 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5937 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5938 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5939 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5940 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5941 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5942 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5943 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5944 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5945 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5947 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5947);
+  }
+  /* parser/parser.nit:5949 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5949);
+  }
+  /* parser/parser.nit:5951 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5951);
+  }
+  /* parser/parser.nit:5953 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5953);
+  }
+  /* parser/parser.nit:5955 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5955);
+  }
+  /* parser/parser.nit:5956 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:5958 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5958);
+  }
+  /* parser/parser.nit:5959 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[5]);
+  fra.me.REG[14] = fra.me.REG[5];
+  /* parser/parser.nit:5960 */
+  fra.me.REG[14] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[14], NIT_NULL);
+  /* parser/parser.nit:5967 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5967);
+  }
+  /* parser/parser.nit:5968 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:5970 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5970);
+  }
+  /* parser/parser.nit:5971 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], fra.me.REG[14], NIT_NULL, fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:5984 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:5985 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5985);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction111___action[] = "parser::ReduceAction111::(parser::ReduceAction::action)";
+void parser___ReduceAction111___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 5990;
+  fra.me.meth = LOCATE_parser___ReduceAction111___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 14;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:5992 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:5993 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5994 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5995 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5996 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5997 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5998 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:5999 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6000 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6001 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6002 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6003 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6004 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6005 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6007 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6007);
+  }
+  /* parser/parser.nit:6009 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6009);
+  }
+  /* parser/parser.nit:6011 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6011);
+  }
+  /* parser/parser.nit:6013 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6013);
+  }
+  /* parser/parser.nit:6015 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6015);
+  }
+  /* parser/parser.nit:6016 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[6]);
+  fra.me.REG[11] = fra.me.REG[6];
+  /* parser/parser.nit:6017 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6019 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6019);
+  }
+  /* parser/parser.nit:6020 */
+  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:6021 */
+  fra.me.REG[6] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[6], NIT_NULL);
+  /* parser/parser.nit:6028 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6028);
+  }
+  /* parser/parser.nit:6029 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:6031 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6031);
+  }
+  /* parser/parser.nit:6032 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[11], fra.me.REG[6], NIT_NULL, fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:6045 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6046 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6046);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction112___action[] = "parser::ReduceAction112::(parser::ReduceAction::action)";
+void parser___ReduceAction112___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6051;
+  fra.me.meth = LOCATE_parser___ReduceAction112___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 15;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:6053 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6054 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6055 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* 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[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6058 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6059 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6060 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* 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:6063 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6064 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6065 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6066 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6067 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6069 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6069);
+  }
+  /* parser/parser.nit:6071 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6071);
+  }
+  /* parser/parser.nit:6073 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6073);
+  }
+  /* parser/parser.nit:6075 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6075);
+  }
+  /* parser/parser.nit:6077 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6077);
+  }
+  /* parser/parser.nit:6079 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6079);
+  }
+  /* parser/parser.nit:6080 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[6]);
+  fra.me.REG[12] = fra.me.REG[6];
+  /* parser/parser.nit:6081 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6083 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6083);
+  }
+  /* parser/parser.nit:6084 */
+  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:6085 */
+  fra.me.REG[6] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[6], NIT_NULL);
+  /* parser/parser.nit:6092 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6092);
+  }
+  /* parser/parser.nit:6093 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[4]);
+  fra.me.REG[14] = fra.me.REG[4];
+  /* parser/parser.nit:6095 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6095);
+  }
+  /* parser/parser.nit:6096 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[12], fra.me.REG[6], NIT_NULL, fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
+  /* parser/parser.nit:6109 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6110 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6110);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction113___action[] = "parser::ReduceAction113::(parser::ReduceAction::action)";
+void parser___ReduceAction113___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6115;
+  fra.me.meth = LOCATE_parser___ReduceAction113___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:6117 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6118 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6119 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6120 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6121 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6122 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6123 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6124 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6125 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6126 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6127 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6128 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6129 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6131 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6131);
+  }
+  /* parser/parser.nit:6133 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6133);
+  }
+  /* parser/parser.nit:6135 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6135);
+  }
+  /* parser/parser.nit:6137 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6137);
+  }
+  /* parser/parser.nit:6139 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6139);
+  }
+  /* parser/parser.nit:6141 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6141);
+  }
+  /* parser/parser.nit:6142 */
+  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:6144 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6144);
+  }
+  /* parser/parser.nit:6145 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], NIT_NULL, fra.me.REG[5], fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:6158 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6159 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6159);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction___concat[] = "parser::ReduceAction::concat";
-val_t parser___ReduceAction___concat(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+static const char LOCATE_parser___ReduceAction114___action[] = "parser::ReduceAction114::(parser::ReduceAction::action)";
+void parser___ReduceAction114___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1133;
-  fra.me.meth = LOCATE_parser___ReduceAction___concat;
+  fra.me.line = 6164;
+  fra.me.meth = LOCATE_parser___ReduceAction114___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 14;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[2] = p2;
-  /* parser/parser.nit:1135 */
-  REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6166 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6167 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6168 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6169 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6170 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6171 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6172 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6173 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6174 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6175 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6176 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6177 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6178 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6179 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6181 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[0] = fra.me.REG[2];
-    goto label1;
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6181);
   }
-  /* parser/parser.nit:1136 */
-  CALL_standard___collection___abstract_collection___Sequence___append(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser.nit:1137 */
-  fra.me.REG[0] = fra.me.REG[1];
-  goto label1;
-  label1: while(0);
+  /* parser/parser.nit:6183 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6183);
+  }
+  /* parser/parser.nit:6185 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6185);
+  }
+  /* parser/parser.nit:6187 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6187);
+  }
+  /* parser/parser.nit:6189 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6189);
+  }
+  /* parser/parser.nit:6191 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6191);
+  }
+  /* parser/parser.nit:6193 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6193);
+  }
+  /* parser/parser.nit:6194 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:6196 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6196);
+  }
+  /* parser/parser.nit:6197 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], NIT_NULL, fra.me.REG[5], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:6210 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6211 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6211);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[0];
+  return;
 }
-static const char LOCATE_parser___ReduceAction___init[] = "parser::ReduceAction::init";
-void parser___ReduceAction___init(val_t p0, val_t p1, int* init_table){
-  int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___ReduceAction].i;
-  struct {struct stack_frame_t me;} fra;
+static const char LOCATE_parser___ReduceAction115___action[] = "parser::ReduceAction115::(parser::ReduceAction::action)";
+void parser___ReduceAction115___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos3]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1140;
-  fra.me.meth = LOCATE_parser___ReduceAction___init;
+  fra.me.line = 6216;
+  fra.me.meth = LOCATE_parser___ReduceAction115___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 14;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* parser/parser.nit:1140 */
-  ATTR_parser___ReduceAction____goto(fra.me.REG[0]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:6218 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6219 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6220 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6221 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6222 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6223 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6224 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6225 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6226 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6227 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6228 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6229 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6230 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6231 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6233 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6233);
+  }
+  /* parser/parser.nit:6235 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6235);
+  }
+  /* parser/parser.nit:6237 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6237);
+  }
+  /* parser/parser.nit:6239 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6239);
+  }
+  /* parser/parser.nit:6241 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6241);
+  }
+  /* parser/parser.nit:6242 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[6]);
+  fra.me.REG[11] = fra.me.REG[6];
+  /* parser/parser.nit:6244 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6244);
+  }
+  /* parser/parser.nit:6246 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6246);
+  }
+  /* parser/parser.nit:6247 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:6249 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6249);
+  }
+  /* parser/parser.nit:6250 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[11], NIT_NULL, fra.me.REG[5], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:6263 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6264 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6264);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos3] = 1;
   return;
 }
-static const char LOCATE_parser___ReduceAction0___action[] = "parser::ReduceAction0::(parser::ReduceAction::action)";
-void parser___ReduceAction0___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction116___action[] = "parser::ReduceAction116::(parser::ReduceAction::action)";
+void parser___ReduceAction116___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1145;
-  fra.me.meth = LOCATE_parser___ReduceAction0___action;
+  fra.me.line = 6269;
+  fra.me.meth = LOCATE_parser___ReduceAction116___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 15;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -5938,25 +20103,116 @@ void parser___ReduceAction0___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1147 */
+  /* parser/parser.nit:6271 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1148 */
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1149 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1150 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1151 */
-  fra.me.REG[5] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
-  /* parser/parser.nit:1157 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:1158 */
+  /* parser/parser.nit:6272 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6273 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6274 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6275 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6276 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6277 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6278 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6279 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6280 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6281 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6282 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6283 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6284 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6285 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6287 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6287);
+  }
+  /* parser/parser.nit:6289 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6289);
+  }
+  /* parser/parser.nit:6291 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6291);
+  }
+  /* parser/parser.nit:6293 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6293);
+  }
+  /* parser/parser.nit:6295 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6295);
+  }
+  /* parser/parser.nit:6297 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6297);
+  }
+  /* parser/parser.nit:6298 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[6]);
+  fra.me.REG[12] = fra.me.REG[6];
+  /* parser/parser.nit:6300 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6300);
+  }
+  /* parser/parser.nit:6302 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6302);
+  }
+  /* parser/parser.nit:6303 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[4]);
+  fra.me.REG[14] = fra.me.REG[4];
+  /* parser/parser.nit:6305 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6305);
+  }
+  /* parser/parser.nit:6306 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[12], NIT_NULL, fra.me.REG[5], fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
+  /* parser/parser.nit:6319 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6320 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1158);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6320);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -5964,17 +20220,17 @@ void parser___ReduceAction0___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction1___action[] = "parser::ReduceAction1::(parser::ReduceAction::action)";
-void parser___ReduceAction1___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction117___action[] = "parser::ReduceAction117::(parser::ReduceAction::action)";
+void parser___ReduceAction117___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1163;
-  fra.me.meth = LOCATE_parser___ReduceAction1___action;
+  fra.me.line = 6325;
+  fra.me.meth = LOCATE_parser___ReduceAction117___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 15;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -5983,33 +20239,111 @@ void parser___ReduceAction1___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1165 */
+  /* parser/parser.nit:6327 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1166 */
+  /* parser/parser.nit:6328 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1167 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1168 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1169 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1171 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:6329 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6330 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6331 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6332 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6333 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6334 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6335 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6336 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6337 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6338 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6339 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6340 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6342 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1171);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6342);
   }
-  /* parser/parser.nit:1172 */
-  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[3], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* parser/parser.nit:1178 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* parser/parser.nit:1179 */
+  /* parser/parser.nit:6344 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6344);
+  }
+  /* parser/parser.nit:6346 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6346);
+  }
+  /* parser/parser.nit:6348 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6348);
+  }
+  /* parser/parser.nit:6349 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6351 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6351);
+  }
+  /* parser/parser.nit:6352 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[6]);
+  fra.me.REG[14] = fra.me.REG[6];
+  /* parser/parser.nit:6353 */
+  fra.me.REG[14] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[14], NIT_NULL);
+  /* parser/parser.nit:6360 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6360);
+  }
+  /* parser/parser.nit:6362 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6362);
+  }
+  /* parser/parser.nit:6363 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:6365 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6365);
+  }
+  /* parser/parser.nit:6366 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[11], fra.me.REG[14], fra.me.REG[5], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:6379 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6380 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1179);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6380);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6017,17 +20351,17 @@ void parser___ReduceAction1___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction2___action[] = "parser::ReduceAction2::(parser::ReduceAction::action)";
-void parser___ReduceAction2___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction118___action[] = "parser::ReduceAction118::(parser::ReduceAction::action)";
+void parser___ReduceAction118___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[15];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1184;
-  fra.me.meth = LOCATE_parser___ReduceAction2___action;
+  fra.me.line = 6385;
+  fra.me.meth = LOCATE_parser___ReduceAction118___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 16;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -6036,36 +20370,120 @@ void parser___ReduceAction2___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[15] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1186 */
+  /* parser/parser.nit:6387 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1187 */
+  /* parser/parser.nit:6388 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1188 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1189 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1190 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1192 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:6389 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6390 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6391 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6392 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6393 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6394 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6395 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6396 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6397 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6398 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6399 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6400 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6401 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6403 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6403);
+  }
+  /* parser/parser.nit:6405 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6405);
+  }
+  /* parser/parser.nit:6407 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6407);
+  }
+  /* parser/parser.nit:6409 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6409);
+  }
+  /* parser/parser.nit:6411 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6411);
+  }
+  /* parser/parser.nit:6412 */
+  fra.me.REG[15] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6414 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6414);
+  }
+  /* parser/parser.nit:6415 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[15], fra.me.REG[6]);
+  fra.me.REG[15] = fra.me.REG[6];
+  /* parser/parser.nit:6416 */
+  fra.me.REG[15] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[15], NIT_NULL);
+  /* parser/parser.nit:6423 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6423);
+  }
+  /* parser/parser.nit:6425 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6425);
+  }
+  /* parser/parser.nit:6426 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[4]);
+  fra.me.REG[14] = fra.me.REG[4];
+  /* parser/parser.nit:6428 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1192);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6428);
   }
-  /* parser/parser.nit:1193 */
-  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:1194 */
-  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* parser/parser.nit:1200 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* parser/parser.nit:1201 */
+  /* parser/parser.nit:6429 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[12], fra.me.REG[15], fra.me.REG[5], fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
+  /* parser/parser.nit:6442 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6443 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1201);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6443);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6073,17 +20491,17 @@ void parser___ReduceAction2___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction3___action[] = "parser::ReduceAction3::(parser::ReduceAction::action)";
-void parser___ReduceAction3___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction119___action[] = "parser::ReduceAction119::(parser::ReduceAction::action)";
+void parser___ReduceAction119___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1206;
-  fra.me.meth = LOCATE_parser___ReduceAction3___action;
+  fra.me.line = 6448;
+  fra.me.meth = LOCATE_parser___ReduceAction119___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 15;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -6093,100 +20511,121 @@ void parser___ReduceAction3___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1208 */
+  /* parser/parser.nit:6450 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1209 */
+  /* parser/parser.nit:6451 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1210 */
+  /* parser/parser.nit:6452 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1211 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1212 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1213 */
+  /* parser/parser.nit:6453 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6454 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6455 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6456 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6457 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6458 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6459 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6460 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6461 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6462 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6463 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6464 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6466 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6466);
+  }
+  /* parser/parser.nit:6468 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6468);
+  }
+  /* parser/parser.nit:6470 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6470);
+  }
+  /* parser/parser.nit:6472 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6472);
+  }
+  /* parser/parser.nit:6474 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6474);
+  }
+  /* parser/parser.nit:6475 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[7]);
+  fra.me.REG[12] = fra.me.REG[7];
+  /* parser/parser.nit:6476 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1215 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:6478 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1215);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6478);
   }
-  /* parser/parser.nit:1217 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:6479 */
+  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:6480 */
+  fra.me.REG[7] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[7], NIT_NULL);
+  /* parser/parser.nit:6487 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1217);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6487);
   }
-  /* parser/parser.nit:1218 */
-  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:1219 */
-  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* parser/parser.nit:1225 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:1226 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6489 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1226);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6489);
   }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction4___action[] = "parser::ReduceAction4::(parser::ReduceAction::action)";
-void parser___ReduceAction4___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 = 1231;
-  fra.me.meth = LOCATE_parser___ReduceAction4___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser.nit:1233 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1234 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1235 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1236 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1237 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1239 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:6490 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[4]);
+  fra.me.REG[14] = fra.me.REG[4];
+  /* parser/parser.nit:6492 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1239);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6492);
   }
-  /* parser/parser.nit:1240 */
-  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:1241 */
-  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* parser/parser.nit:1247 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* parser/parser.nit:1248 */
+  /* parser/parser.nit:6493 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], NIT_NULL, fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[12], fra.me.REG[7], fra.me.REG[5], fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
+  /* parser/parser.nit:6506 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6507 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1248);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6507);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6194,17 +20633,17 @@ void parser___ReduceAction4___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction5___action[] = "parser::ReduceAction5::(parser::ReduceAction::action)";
-void parser___ReduceAction5___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction120___action[] = "parser::ReduceAction120::(parser::ReduceAction::action)";
+void parser___ReduceAction120___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[15];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1253;
-  fra.me.meth = LOCATE_parser___ReduceAction5___action;
+  fra.me.line = 6512;
+  fra.me.meth = LOCATE_parser___ReduceAction120___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 16;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -6214,44 +20653,130 @@ void parser___ReduceAction5___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[15] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1255 */
+  /* parser/parser.nit:6514 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1256 */
+  /* parser/parser.nit:6515 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1257 */
+  /* parser/parser.nit:6516 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1258 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1259 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1260 */
+  /* parser/parser.nit:6517 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6518 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6519 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6520 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6521 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6522 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6523 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6524 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6525 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6526 */
+  fra.me.REG[12] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6527 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6528 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6529 */
+  fra.me.REG[15] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6531 */
+  REGB0 = TAG_Bool((fra.me.REG[12]==NIT_NULL) || VAL_ISA(fra.me.REG[12], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6531);
+  }
+  /* parser/parser.nit:6533 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6533);
+  }
+  /* parser/parser.nit:6535 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6535);
+  }
+  /* parser/parser.nit:6537 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6537);
+  }
+  /* parser/parser.nit:6539 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6539);
+  }
+  /* parser/parser.nit:6541 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6541);
+  }
+  /* parser/parser.nit:6542 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[7]);
+  fra.me.REG[13] = fra.me.REG[7];
+  /* parser/parser.nit:6543 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1262 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:6545 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1262);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6545);
   }
-  /* parser/parser.nit:1264 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:6546 */
+  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:6547 */
+  fra.me.REG[7] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[7], NIT_NULL);
+  /* parser/parser.nit:6554 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1264);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6554);
   }
-  /* parser/parser.nit:1265 */
-  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:1266 */
-  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* parser/parser.nit:1272 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:1273 */
+  /* parser/parser.nit:6556 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6556);
+  }
+  /* parser/parser.nit:6557 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[15], fra.me.REG[4]);
+  fra.me.REG[15] = fra.me.REG[4];
+  /* parser/parser.nit:6559 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6559);
+  }
+  /* parser/parser.nit:6560 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[12], fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[13], fra.me.REG[7], fra.me.REG[5], fra.me.REG[14], fra.me.REG[15], fra.me.REG[3]);
+  /* parser/parser.nit:6573 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6574 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1273);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6574);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6259,17 +20784,17 @@ void parser___ReduceAction5___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction6___action[] = "parser::ReduceAction6::(parser::ReduceAction::action)";
-void parser___ReduceAction6___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction121___action[] = "parser::ReduceAction121::(parser::ReduceAction::action)";
+void parser___ReduceAction121___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1278;
-  fra.me.meth = LOCATE_parser___ReduceAction6___action;
+  fra.me.line = 6579;
+  fra.me.meth = LOCATE_parser___ReduceAction121___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 13;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -6279,47 +20804,96 @@ void parser___ReduceAction6___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1280 */
+  /* parser/parser.nit:6581 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1281 */
+  /* parser/parser.nit:6582 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1282 */
+  /* parser/parser.nit:6583 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1283 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1284 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1285 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1287 */
+  /* parser/parser.nit:6584 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6585 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6586 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6587 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6588 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6589 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6590 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6591 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6592 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6593 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6595 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6595);
+  }
+  /* parser/parser.nit:6597 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6597);
+  }
+  /* parser/parser.nit:6599 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6599);
+  }
+  /* parser/parser.nit:6601 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6601);
+  }
+  /* parser/parser.nit:6603 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6603);
+  }
+  /* parser/parser.nit:6604 */
+  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:6606 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1287);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6606);
   }
-  /* parser/parser.nit:1288 */
-  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:1290 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:6607 */
+  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:6609 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1290);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6609);
   }
-  /* parser/parser.nit:1291 */
-  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:1292 */
-  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* parser/parser.nit:1298 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:1299 */
+  /* parser/parser.nit:6610 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], NIT_NULL, NIT_NULL, fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:6623 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6624 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1299);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6624);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6327,17 +20901,17 @@ void parser___ReduceAction6___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction7___action[] = "parser::ReduceAction7::(parser::ReduceAction::action)";
-void parser___ReduceAction7___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction122___action[] = "parser::ReduceAction122::(parser::ReduceAction::action)";
+void parser___ReduceAction122___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1304;
-  fra.me.meth = LOCATE_parser___ReduceAction7___action;
+  fra.me.line = 6629;
+  fra.me.meth = LOCATE_parser___ReduceAction122___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 14;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -6348,55 +20922,104 @@ void parser___ReduceAction7___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1306 */
+  /* parser/parser.nit:6631 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1307 */
+  /* parser/parser.nit:6632 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1308 */
+  /* parser/parser.nit:6633 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1309 */
+  /* parser/parser.nit:6634 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6635 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1310 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1311 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1312 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1314 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:6636 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6637 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6638 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6639 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6640 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6641 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6642 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6643 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6644 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6646 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1314);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6646);
   }
-  /* parser/parser.nit:1316 */
+  /* parser/parser.nit:6648 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6648);
+  }
+  /* parser/parser.nit:6650 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6650);
+  }
+  /* parser/parser.nit:6652 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6652);
+  }
+  /* parser/parser.nit:6654 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6654);
+  }
+  /* parser/parser.nit:6656 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6656);
+  }
+  /* parser/parser.nit:6657 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[5]);
+  fra.me.REG[12] = fra.me.REG[5];
+  /* parser/parser.nit:6659 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1316);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6659);
   }
-  /* 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:1319 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:6660 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:6662 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1319);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6662);
   }
-  /* parser/parser.nit:1320 */
-  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:1321 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:1327 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:1328 */
+  /* parser/parser.nit:6663 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], NIT_NULL, NIT_NULL, fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:6676 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6677 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1328);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6677);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6404,17 +21027,17 @@ void parser___ReduceAction7___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction8___action[] = "parser::ReduceAction8::(parser::ReduceAction::action)";
-void parser___ReduceAction8___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction123___action[] = "parser::ReduceAction123::(parser::ReduceAction::action)";
+void parser___ReduceAction123___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1333;
-  fra.me.meth = LOCATE_parser___ReduceAction8___action;
+  fra.me.line = 6682;
+  fra.me.meth = LOCATE_parser___ReduceAction123___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 14;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -6423,36 +21046,109 @@ void parser___ReduceAction8___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1335 */
+  /* parser/parser.nit:6684 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1336 */
+  /* parser/parser.nit:6685 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1337 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1338 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1339 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1341 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:6686 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6687 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6688 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6689 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6690 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6691 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6692 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6693 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6694 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6695 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6696 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6697 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6699 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6699);
+  }
+  /* parser/parser.nit:6701 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6701);
+  }
+  /* parser/parser.nit:6703 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6703);
+  }
+  /* parser/parser.nit:6705 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6705);
+  }
+  /* parser/parser.nit:6707 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6707);
+  }
+  /* parser/parser.nit:6708 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[6]);
+  fra.me.REG[11] = fra.me.REG[6];
+  /* parser/parser.nit:6710 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6710);
+  }
+  /* parser/parser.nit:6711 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[5]);
+  fra.me.REG[12] = fra.me.REG[5];
+  /* parser/parser.nit:6713 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1341);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6713);
   }
-  /* parser/parser.nit:1342 */
-  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:1343 */
-  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* parser/parser.nit:1349 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* parser/parser.nit:1350 */
+  /* parser/parser.nit:6714 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:6716 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6716);
+  }
+  /* parser/parser.nit:6717 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[11], NIT_NULL, NIT_NULL, fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:6730 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6731 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1350);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6731);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6460,17 +21156,17 @@ void parser___ReduceAction8___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction9___action[] = "parser::ReduceAction9::(parser::ReduceAction::action)";
-void parser___ReduceAction9___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction124___action[] = "parser::ReduceAction124::(parser::ReduceAction::action)";
+void parser___ReduceAction124___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1355;
-  fra.me.meth = LOCATE_parser___ReduceAction9___action;
+  fra.me.line = 6736;
+  fra.me.meth = LOCATE_parser___ReduceAction124___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 15;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -6480,112 +21176,117 @@ void parser___ReduceAction9___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1357 */
+  /* parser/parser.nit:6738 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1358 */
+  /* parser/parser.nit:6739 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1359 */
+  /* parser/parser.nit:6740 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1360 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1361 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1362 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1364 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:6741 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6742 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6743 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6744 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6745 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6746 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6747 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6748 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6749 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6750 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6751 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6752 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6754 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1364);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6754);
   }
-  /* parser/parser.nit:1366 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:6756 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1366);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6756);
   }
-  /* parser/parser.nit:1367 */
-  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:1368 */
-  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* parser/parser.nit:1374 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:1375 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6758 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1375);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6758);
   }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction10___action[] = "parser::ReduceAction10::(parser::ReduceAction::action)";
-void parser___ReduceAction10___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1380;
-  fra.me.meth = LOCATE_parser___ReduceAction10___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser.nit:1382 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1383 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1384 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1385 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1386 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1387 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1389 */
+  /* parser/parser.nit:6760 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6760);
+  }
+  /* parser/parser.nit:6762 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6762);
+  }
+  /* parser/parser.nit:6764 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6764);
+  }
+  /* parser/parser.nit:6765 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[6]);
+  fra.me.REG[12] = fra.me.REG[6];
+  /* parser/parser.nit:6767 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6767);
+  }
+  /* parser/parser.nit:6768 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[5]);
+  fra.me.REG[13] = fra.me.REG[5];
+  /* parser/parser.nit:6770 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1389);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6770);
   }
-  /* parser/parser.nit:1390 */
-  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:1392 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:6771 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[4]);
+  fra.me.REG[14] = fra.me.REG[4];
+  /* parser/parser.nit:6773 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1392);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6773);
   }
-  /* parser/parser.nit:1393 */
-  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:1394 */
-  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* parser/parser.nit:1400 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:1401 */
+  /* parser/parser.nit:6774 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[12], NIT_NULL, NIT_NULL, fra.me.REG[13], fra.me.REG[14], 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___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1401);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6788);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6593,17 +21294,17 @@ void parser___ReduceAction10___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction11___action[] = "parser::ReduceAction11::(parser::ReduceAction::action)";
-void parser___ReduceAction11___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction125___action[] = "parser::ReduceAction125::(parser::ReduceAction::action)";
+void parser___ReduceAction125___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1406;
-  fra.me.meth = LOCATE_parser___ReduceAction11___action;
+  fra.me.line = 6793;
+  fra.me.meth = LOCATE_parser___ReduceAction125___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 15;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -6614,55 +21315,112 @@ void parser___ReduceAction11___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1408 */
+  /* parser/parser.nit:6795 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1409 */
+  /* parser/parser.nit:6796 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1410 */
+  /* parser/parser.nit:6797 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1411 */
+  /* parser/parser.nit:6798 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6799 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1412 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1413 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1414 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1416 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:6800 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6801 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6802 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6803 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6804 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6805 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6806 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6807 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6808 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6810 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1416);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6810);
   }
-  /* parser/parser.nit:1418 */
+  /* parser/parser.nit:6812 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6812);
+  }
+  /* parser/parser.nit:6814 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6814);
+  }
+  /* parser/parser.nit:6816 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6816);
+  }
+  /* parser/parser.nit:6817 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6819 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6819);
+  }
+  /* parser/parser.nit:6820 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[6]);
+  fra.me.REG[14] = fra.me.REG[6];
+  /* parser/parser.nit:6821 */
+  fra.me.REG[14] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[14], NIT_NULL);
+  /* parser/parser.nit:6828 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6828);
+  }
+  /* parser/parser.nit:6829 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[5]);
+  fra.me.REG[12] = fra.me.REG[5];
+  /* parser/parser.nit:6831 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1418);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6831);
   }
-  /* parser/parser.nit:1419 */
-  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:1421 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:6832 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:6834 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1421);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6834);
   }
-  /* parser/parser.nit:1422 */
-  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:1423 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:1429 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:1430 */
+  /* parser/parser.nit:6835 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[11], fra.me.REG[14], NIT_NULL, fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:6848 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6849 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1430);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6849);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6670,17 +21428,17 @@ void parser___ReduceAction11___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction12___action[] = "parser::ReduceAction12::(parser::ReduceAction::action)";
-void parser___ReduceAction12___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction126___action[] = "parser::ReduceAction126::(parser::ReduceAction::action)";
+void parser___ReduceAction126___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[15];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1435;
-  fra.me.meth = LOCATE_parser___ReduceAction12___action;
+  fra.me.line = 6854;
+  fra.me.meth = LOCATE_parser___ReduceAction126___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 16;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -6690,47 +21448,122 @@ void parser___ReduceAction12___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[15] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1437 */
+  /* parser/parser.nit:6856 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1438 */
+  /* parser/parser.nit:6857 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1439 */
+  /* parser/parser.nit:6858 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1440 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1441 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1442 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1444 */
+  /* parser/parser.nit:6859 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6860 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6861 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6862 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6863 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6864 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6865 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6866 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6867 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6868 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6869 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6870 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6872 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6872);
+  }
+  /* parser/parser.nit:6874 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6874);
+  }
+  /* parser/parser.nit:6876 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6876);
+  }
+  /* parser/parser.nit:6878 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6878);
+  }
+  /* parser/parser.nit:6880 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6880);
+  }
+  /* parser/parser.nit:6881 */
+  fra.me.REG[15] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6883 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6883);
+  }
+  /* parser/parser.nit:6884 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[15], fra.me.REG[6]);
+  fra.me.REG[15] = fra.me.REG[6];
+  /* parser/parser.nit:6885 */
+  fra.me.REG[15] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[15], NIT_NULL);
+  /* parser/parser.nit:6892 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6892);
+  }
+  /* parser/parser.nit:6893 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[5]);
+  fra.me.REG[13] = fra.me.REG[5];
+  /* parser/parser.nit:6895 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1444);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6895);
   }
-  /* parser/parser.nit:1445 */
-  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:1447 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:6896 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[4]);
+  fra.me.REG[14] = fra.me.REG[4];
+  /* parser/parser.nit:6898 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1447);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6898);
   }
-  /* parser/parser.nit:1448 */
-  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:1449 */
-  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* parser/parser.nit:1455 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:1456 */
+  /* parser/parser.nit:6899 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[12], fra.me.REG[15], NIT_NULL, fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
+  /* parser/parser.nit:6912 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6913 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1456);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6913);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6738,17 +21571,17 @@ void parser___ReduceAction12___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction13___action[] = "parser::ReduceAction13::(parser::ReduceAction::action)";
-void parser___ReduceAction13___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction127___action[] = "parser::ReduceAction127::(parser::ReduceAction::action)";
+void parser___ReduceAction127___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1461;
-  fra.me.meth = LOCATE_parser___ReduceAction13___action;
+  fra.me.line = 6918;
+  fra.me.meth = LOCATE_parser___ReduceAction127___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 15;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -6759,55 +21592,123 @@ void parser___ReduceAction13___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1463 */
+  /* parser/parser.nit:6920 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1464 */
+  /* parser/parser.nit:6921 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1465 */
+  /* 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[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1466 */
+  /* parser/parser.nit:6924 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1467 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1468 */
+  /* parser/parser.nit:6925 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6926 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6927 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6928 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6929 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6930 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6931 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6932 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6933 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6934 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6936 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6936);
+  }
+  /* parser/parser.nit:6938 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6938);
+  }
+  /* parser/parser.nit:6940 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6940);
+  }
+  /* parser/parser.nit:6942 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6942);
+  }
+  /* parser/parser.nit:6944 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6944);
+  }
+  /* parser/parser.nit:6945 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[7]);
+  fra.me.REG[12] = fra.me.REG[7];
+  /* parser/parser.nit:6946 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1469 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1471 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:6948 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6948);
+  }
+  /* parser/parser.nit:6949 */
+  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:6950 */
+  fra.me.REG[7] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[7], NIT_NULL);
+  /* parser/parser.nit:6957 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1471);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6957);
   }
-  /* parser/parser.nit:1473 */
+  /* parser/parser.nit:6958 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[5]);
+  fra.me.REG[13] = fra.me.REG[5];
+  /* parser/parser.nit:6960 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1473);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6960);
   }
-  /* parser/parser.nit:1474 */
-  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:1476 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:6961 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[4]);
+  fra.me.REG[14] = fra.me.REG[4];
+  /* parser/parser.nit:6963 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1476);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6963);
   }
-  /* parser/parser.nit:1477 */
-  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:1478 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:1484 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:1485 */
+  /* parser/parser.nit:6964 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], NIT_NULL, fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[12], fra.me.REG[7], NIT_NULL, fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
+  /* parser/parser.nit:6977 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6978 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1485);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6978);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6815,17 +21716,17 @@ void parser___ReduceAction13___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction14___action[] = "parser::ReduceAction14::(parser::ReduceAction::action)";
-void parser___ReduceAction14___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction128___action[] = "parser::ReduceAction128::(parser::ReduceAction::action)";
+void parser___ReduceAction128___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[15];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1490;
-  fra.me.meth = LOCATE_parser___ReduceAction14___action;
+  fra.me.line = 6983;
+  fra.me.meth = LOCATE_parser___ReduceAction128___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 16;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -6836,58 +21737,132 @@ void parser___ReduceAction14___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[15] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1492 */
+  /* parser/parser.nit:6985 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1493 */
+  /* parser/parser.nit:6986 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1494 */
+  /* parser/parser.nit:6987 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6988 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1495 */
+  /* parser/parser.nit:6989 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1496 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1497 */
+  /* parser/parser.nit:6990 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6991 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6992 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6993 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6994 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6995 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6996 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6997 */
+  fra.me.REG[12] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6998 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:6999 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7000 */
+  fra.me.REG[15] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7002 */
+  REGB0 = TAG_Bool((fra.me.REG[12]==NIT_NULL) || VAL_ISA(fra.me.REG[12], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7002);
+  }
+  /* parser/parser.nit:7004 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7004);
+  }
+  /* parser/parser.nit:7006 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7006);
+  }
+  /* parser/parser.nit:7008 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7008);
+  }
+  /* parser/parser.nit:7010 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7010);
+  }
+  /* parser/parser.nit:7012 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7012);
+  }
+  /* parser/parser.nit:7013 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[7]);
+  fra.me.REG[13] = fra.me.REG[7];
+  /* parser/parser.nit:7014 */
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1498 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1500 */
+  /* parser/parser.nit:7016 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7016);
+  }
+  /* parser/parser.nit:7017 */
+  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:7018 */
+  fra.me.REG[7] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[7], NIT_NULL);
+  /* parser/parser.nit:7025 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1500);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7025);
   }
-  /* parser/parser.nit:1501 */
-  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:1503 */
+  /* parser/parser.nit:7026 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[5]);
+  fra.me.REG[14] = fra.me.REG[5];
+  /* parser/parser.nit:7028 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1503);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7028);
   }
-  /* parser/parser.nit:1504 */
-  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:1506 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7029 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[15], fra.me.REG[4]);
+  fra.me.REG[15] = fra.me.REG[4];
+  /* parser/parser.nit:7031 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1506);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7031);
   }
-  /* parser/parser.nit:1507 */
-  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:1508 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:1514 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:1515 */
+  /* parser/parser.nit:7032 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[12], fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[13], fra.me.REG[7], NIT_NULL, fra.me.REG[14], fra.me.REG[15], fra.me.REG[3]);
+  /* parser/parser.nit:7045 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7046 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1515);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7046);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6895,17 +21870,17 @@ void parser___ReduceAction14___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction15___action[] = "parser::ReduceAction15::(parser::ReduceAction::action)";
-void parser___ReduceAction15___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction129___action[] = "parser::ReduceAction129::(parser::ReduceAction::action)";
+void parser___ReduceAction129___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1520;
-  fra.me.meth = LOCATE_parser___ReduceAction15___action;
+  fra.me.line = 7051;
+  fra.me.meth = LOCATE_parser___ReduceAction129___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 14;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -6917,66 +21892,103 @@ void parser___ReduceAction15___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[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1522 */
+  /* parser/parser.nit:7053 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1523 */
+  /* parser/parser.nit:7054 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1524 */
+  /* parser/parser.nit:7055 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7056 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1525 */
+  /* parser/parser.nit:7057 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1526 */
+  /* parser/parser.nit:7058 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1527 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1528 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1529 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1531 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:7059 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7060 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7061 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7062 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7063 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7064 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7065 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7066 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7068 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7068);
+  }
+  /* parser/parser.nit:7070 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7070);
+  }
+  /* parser/parser.nit:7072 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7072);
+  }
+  /* parser/parser.nit:7074 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7074);
+  }
+  /* parser/parser.nit:7076 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1531);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7076);
   }
-  /* parser/parser.nit:1533 */
+  /* parser/parser.nit:7078 */
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1533);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7078);
   }
-  /* parser/parser.nit:1534 */
-  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:1536 */
+  /* parser/parser.nit:7079 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[5]);
+  fra.me.REG[12] = fra.me.REG[5];
+  /* parser/parser.nit:7081 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1536);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7081);
   }
-  /* parser/parser.nit:1537 */
-  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:1539 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7082 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:7084 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1539);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7084);
   }
-  /* parser/parser.nit:1540 */
-  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:1541 */
-  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* parser/parser.nit:1547 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* parser/parser.nit:1548 */
+  /* parser/parser.nit:7085 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[11], NIT_NULL, fra.me.REG[6], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:7098 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7099 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1548);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7099);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -6984,18 +21996,17 @@ void parser___ReduceAction15___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction16___action[] = "parser::ReduceAction16::(parser::ReduceAction::action)";
-void parser___ReduceAction16___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction130___action[] = "parser::ReduceAction130::(parser::ReduceAction::action)";
+void parser___ReduceAction130___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1553;
-  fra.me.meth = LOCATE_parser___ReduceAction16___action;
+  fra.me.line = 7104;
+  fra.me.meth = LOCATE_parser___ReduceAction130___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 15;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -7005,58 +22016,114 @@ void parser___ReduceAction16___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1555 */
+  /* parser/parser.nit:7106 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1556 */
+  /* parser/parser.nit:7107 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1557 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1558 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1559 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1560 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1562 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7108 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7109 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7110 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7111 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7112 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7113 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7114 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7115 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7116 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7117 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7118 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7119 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7120 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7122 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1562);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7122);
   }
-  /* parser/parser.nit:1563 */
-  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:1564 */
-  fra.me.REG[7] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  /* parser/parser.nit:1567 */
-  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+  /* parser/parser.nit:7124 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7124);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:7126 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:1568 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7126);
   }
-  /* parser/parser.nit:1570 */
-  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* parser/parser.nit:1576 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* parser/parser.nit:1577 */
+  /* parser/parser.nit:7128 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7128);
+  }
+  /* parser/parser.nit:7130 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7130);
+  }
+  /* parser/parser.nit:7132 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7132);
+  }
+  /* parser/parser.nit:7134 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7134);
+  }
+  /* parser/parser.nit:7135 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[5]);
+  fra.me.REG[13] = fra.me.REG[5];
+  /* parser/parser.nit:7137 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7137);
+  }
+  /* parser/parser.nit:7138 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[4]);
+  fra.me.REG[14] = fra.me.REG[4];
+  /* parser/parser.nit:7140 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7140);
+  }
+  /* parser/parser.nit:7141 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[12], NIT_NULL, fra.me.REG[6], fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
+  /* parser/parser.nit:7154 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7155 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1577);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7155);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7064,18 +22131,17 @@ void parser___ReduceAction16___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction17___action[] = "parser::ReduceAction17::(parser::ReduceAction::action)";
-void parser___ReduceAction17___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction131___action[] = "parser::ReduceAction131::(parser::ReduceAction::action)";
+void parser___ReduceAction131___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1582;
-  fra.me.meth = LOCATE_parser___ReduceAction17___action;
+  fra.me.line = 7160;
+  fra.me.meth = LOCATE_parser___ReduceAction131___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 15;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -7086,66 +22152,116 @@ void parser___ReduceAction17___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1584 */
+  /* parser/parser.nit:7162 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1585 */
+  /* parser/parser.nit:7163 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1586 */
+  /* parser/parser.nit:7164 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1587 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1588 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1589 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1591 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:7165 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7166 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7167 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7168 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7169 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7170 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7171 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7172 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7173 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7174 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7175 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7176 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7178 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1591);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7178);
   }
-  /* parser/parser.nit:1592 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1594 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7180 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1594);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7180);
   }
-  /* parser/parser.nit:1595 */
-  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:1596 */
-  fra.me.REG[8] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  /* parser/parser.nit:1599 */
-  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+  /* parser/parser.nit:7182 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7182);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:7184 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:1600 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7184);
   }
-  /* parser/parser.nit:1602 */
-  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* parser/parser.nit:1608 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:1609 */
+  /* parser/parser.nit:7186 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7186);
+  }
+  /* parser/parser.nit:7187 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[7]);
+  fra.me.REG[12] = fra.me.REG[7];
+  /* parser/parser.nit:7189 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7189);
+  }
+  /* parser/parser.nit:7191 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7191);
+  }
+  /* parser/parser.nit:7192 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[5]);
+  fra.me.REG[13] = fra.me.REG[5];
+  /* parser/parser.nit:7194 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7194);
+  }
+  /* parser/parser.nit:7195 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[4]);
+  fra.me.REG[14] = fra.me.REG[4];
+  /* parser/parser.nit:7197 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7197);
+  }
+  /* parser/parser.nit:7198 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], NIT_NULL, fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[12], NIT_NULL, fra.me.REG[6], fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
+  /* parser/parser.nit:7211 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7212 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1609);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7212);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7153,18 +22269,17 @@ void parser___ReduceAction17___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction18___action[] = "parser::ReduceAction18::(parser::ReduceAction::action)";
-void parser___ReduceAction18___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction132___action[] = "parser::ReduceAction132::(parser::ReduceAction::action)";
+void parser___ReduceAction132___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[15];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1614;
-  fra.me.meth = LOCATE_parser___ReduceAction18___action;
+  fra.me.line = 7217;
+  fra.me.meth = LOCATE_parser___ReduceAction132___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 16;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -7174,69 +22289,126 @@ void parser___ReduceAction18___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[15] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1616 */
+  /* parser/parser.nit:7219 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1617 */
+  /* parser/parser.nit:7220 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1618 */
+  /* parser/parser.nit:7221 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1619 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1620 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1621 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1623 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7222 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7223 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7224 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7225 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7226 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7227 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7228 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7229 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7230 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7231 */
+  fra.me.REG[12] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7232 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7233 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7234 */
+  fra.me.REG[15] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7236 */
+  REGB0 = TAG_Bool((fra.me.REG[12]==NIT_NULL) || VAL_ISA(fra.me.REG[12], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1623);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7236);
   }
-  /* parser/parser.nit:1624 */
-  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:1625 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1627 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7238 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1627);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7238);
   }
-  /* parser/parser.nit:1628 */
-  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:1629 */
-  fra.me.REG[4] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  /* parser/parser.nit:1632 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* parser/parser.nit:7240 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7240);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:7242 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:1633 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7242);
   }
-  /* parser/parser.nit:1635 */
-  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* parser/parser.nit:1641 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:1642 */
+  /* parser/parser.nit:7244 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7244);
+  }
+  /* parser/parser.nit:7246 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7246);
+  }
+  /* parser/parser.nit:7247 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[7]);
+  fra.me.REG[13] = fra.me.REG[7];
+  /* parser/parser.nit:7249 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7249);
+  }
+  /* parser/parser.nit:7251 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7251);
+  }
+  /* parser/parser.nit:7252 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[5]);
+  fra.me.REG[14] = fra.me.REG[5];
+  /* parser/parser.nit:7254 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7254);
+  }
+  /* parser/parser.nit:7255 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[15], fra.me.REG[4]);
+  fra.me.REG[15] = fra.me.REG[4];
+  /* parser/parser.nit:7257 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7257);
+  }
+  /* parser/parser.nit:7258 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[12], fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[13], NIT_NULL, fra.me.REG[6], fra.me.REG[14], fra.me.REG[15], fra.me.REG[3]);
+  /* parser/parser.nit:7271 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7272 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1642);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7272);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7244,18 +22416,17 @@ void parser___ReduceAction18___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction19___action[] = "parser::ReduceAction19::(parser::ReduceAction::action)";
-void parser___ReduceAction19___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction133___action[] = "parser::ReduceAction133::(parser::ReduceAction::action)";
+void parser___ReduceAction133___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[15];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1647;
-  fra.me.meth = LOCATE_parser___ReduceAction19___action;
+  fra.me.line = 7277;
+  fra.me.meth = LOCATE_parser___ReduceAction133___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 16;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -7266,77 +22437,121 @@ void parser___ReduceAction19___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[15] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1649 */
+  /* parser/parser.nit:7279 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1650 */
+  /* parser/parser.nit:7280 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1651 */
+  /* parser/parser.nit:7281 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1652 */
+  /* parser/parser.nit:7282 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7283 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1653 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1654 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1655 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1657 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:7284 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7285 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7286 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7287 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7288 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7289 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7290 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7291 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7292 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7293 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7295 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1657);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7295);
   }
-  /* parser/parser.nit:1659 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7297 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1659);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7297);
   }
-  /* parser/parser.nit:1660 */
-  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:1661 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1663 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7299 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1663);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7299);
   }
-  /* parser/parser.nit:1664 */
-  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:1665 */
-  fra.me.REG[4] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  /* parser/parser.nit:1668 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* parser/parser.nit:7301 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7301);
+  }
+  /* parser/parser.nit:7302 */
+  fra.me.REG[15] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7304 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7304);
+  }
+  /* parser/parser.nit:7305 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[15], fra.me.REG[7]);
+  fra.me.REG[15] = fra.me.REG[7];
+  /* parser/parser.nit:7306 */
+  fra.me.REG[15] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[15], NIT_NULL);
+  /* parser/parser.nit:7313 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7313);
+  }
+  /* parser/parser.nit:7315 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7315);
+  }
+  /* parser/parser.nit:7316 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[5]);
+  fra.me.REG[13] = fra.me.REG[5];
+  /* parser/parser.nit:7318 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7318);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:7319 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[4]);
+  fra.me.REG[14] = fra.me.REG[4];
+  /* parser/parser.nit:7321 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:1669 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[4]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7321);
   }
-  /* parser/parser.nit:1671 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:1677 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:1678 */
+  /* parser/parser.nit:7322 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], NIT_NULL, fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[12], fra.me.REG[15], fra.me.REG[6], fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
+  /* parser/parser.nit:7335 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7336 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1678);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7336);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7344,18 +22559,17 @@ void parser___ReduceAction19___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction20___action[] = "parser::ReduceAction20::(parser::ReduceAction::action)";
-void parser___ReduceAction20___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction134___action[] = "parser::ReduceAction134::(parser::ReduceAction::action)";
+void parser___ReduceAction134___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[16];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1683;
-  fra.me.meth = LOCATE_parser___ReduceAction20___action;
+  fra.me.line = 7341;
+  fra.me.meth = LOCATE_parser___ReduceAction134___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 17;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -7365,69 +22579,131 @@ void parser___ReduceAction20___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[15] = NIT_NULL;
+  fra.me.REG[16] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1685 */
+  /* parser/parser.nit:7343 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1686 */
+  /* parser/parser.nit:7344 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1687 */
+  /* parser/parser.nit:7345 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1688 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1689 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1690 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1692 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7346 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7347 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7348 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7349 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7350 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7351 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7352 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7353 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7354 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7355 */
+  fra.me.REG[12] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7356 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7357 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7358 */
+  fra.me.REG[15] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7360 */
+  REGB0 = TAG_Bool((fra.me.REG[12]==NIT_NULL) || VAL_ISA(fra.me.REG[12], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1692);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7360);
   }
-  /* parser/parser.nit:1693 */
-  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:1694 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1696 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7362 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1696);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7362);
   }
-  /* parser/parser.nit:1697 */
-  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:1698 */
-  fra.me.REG[4] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  /* parser/parser.nit:1701 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* parser/parser.nit:7364 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7364);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:7366 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:1702 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7366);
   }
-  /* parser/parser.nit:1704 */
-  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* parser/parser.nit:1710 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:1711 */
+  /* parser/parser.nit:7368 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7368);
+  }
+  /* parser/parser.nit:7369 */
+  fra.me.REG[16] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7371 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7371);
+  }
+  /* parser/parser.nit:7372 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[16], fra.me.REG[7]);
+  fra.me.REG[16] = fra.me.REG[7];
+  /* parser/parser.nit:7373 */
+  fra.me.REG[16] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[16], NIT_NULL);
+  /* parser/parser.nit:7380 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7380);
+  }
+  /* parser/parser.nit:7382 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7382);
+  }
+  /* parser/parser.nit:7383 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[5]);
+  fra.me.REG[14] = fra.me.REG[5];
+  /* parser/parser.nit:7385 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7385);
+  }
+  /* parser/parser.nit:7386 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[15], fra.me.REG[4]);
+  fra.me.REG[15] = fra.me.REG[4];
+  /* parser/parser.nit:7388 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7388);
+  }
+  /* parser/parser.nit:7389 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[12], fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[13], fra.me.REG[16], fra.me.REG[6], fra.me.REG[14], fra.me.REG[15], fra.me.REG[3]);
+  /* parser/parser.nit:7402 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7403 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1711);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7403);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7435,18 +22711,17 @@ void parser___ReduceAction20___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction21___action[] = "parser::ReduceAction21::(parser::ReduceAction::action)";
-void parser___ReduceAction21___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction135___action[] = "parser::ReduceAction135::(parser::ReduceAction::action)";
+void parser___ReduceAction135___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[15];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1716;
-  fra.me.meth = LOCATE_parser___ReduceAction21___action;
+  fra.me.line = 7408;
+  fra.me.meth = LOCATE_parser___ReduceAction135___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 16;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -7457,77 +22732,132 @@ void parser___ReduceAction21___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[15] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1718 */
+  /* parser/parser.nit:7410 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1719 */
+  /* parser/parser.nit:7411 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1720 */
+  /* parser/parser.nit:7412 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7413 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1721 */
+  /* parser/parser.nit:7414 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1722 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1723 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1724 */
+  /* parser/parser.nit:7415 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7416 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7417 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7418 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7419 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7420 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7421 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7422 */
+  fra.me.REG[12] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7423 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7424 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7425 */
+  fra.me.REG[15] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7427 */
+  REGB0 = TAG_Bool((fra.me.REG[12]==NIT_NULL) || VAL_ISA(fra.me.REG[12], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7427);
+  }
+  /* parser/parser.nit:7429 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7429);
+  }
+  /* parser/parser.nit:7431 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7431);
+  }
+  /* parser/parser.nit:7433 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7433);
+  }
+  /* parser/parser.nit:7435 */
+  REGB0 = TAG_Bool((fra.me.REG[8]!=NIT_NULL) && VAL_ISA(fra.me.REG[8], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7435);
+  }
+  /* parser/parser.nit:7436 */
+  fra.me.REG[8] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[8]);
+  fra.me.REG[13] = fra.me.REG[8];
+  /* parser/parser.nit:7437 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1726 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:7439 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1726);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7439);
   }
-  /* parser/parser.nit:1728 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7440 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[7]);
+  fra.me.REG[8] = fra.me.REG[7];
+  /* parser/parser.nit:7441 */
+  fra.me.REG[8] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[8], NIT_NULL);
+  /* parser/parser.nit:7448 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1728);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7448);
   }
-  /* parser/parser.nit:1729 */
-  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:1730 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1732 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7450 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1732);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7450);
   }
-  /* parser/parser.nit:1733 */
-  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:1734 */
-  fra.me.REG[4] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  /* parser/parser.nit:1737 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* parser/parser.nit:7451 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[5]);
+  fra.me.REG[14] = fra.me.REG[5];
+  /* parser/parser.nit:7453 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7453);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:7454 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[15], fra.me.REG[4]);
+  fra.me.REG[15] = fra.me.REG[4];
+  /* parser/parser.nit:7456 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:1738 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[4]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7456);
   }
-  /* parser/parser.nit:1740 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:1746 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:1747 */
+  /* parser/parser.nit:7457 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[12], NIT_NULL, fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[13], fra.me.REG[8], fra.me.REG[6], fra.me.REG[14], fra.me.REG[15], fra.me.REG[3]);
+  /* parser/parser.nit:7470 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7471 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1747);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7471);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7535,18 +22865,17 @@ void parser___ReduceAction21___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction22___action[] = "parser::ReduceAction22::(parser::ReduceAction::action)";
-void parser___ReduceAction22___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction136___action[] = "parser::ReduceAction136::(parser::ReduceAction::action)";
+void parser___ReduceAction136___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[16];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1752;
-  fra.me.meth = LOCATE_parser___ReduceAction22___action;
+  fra.me.line = 7476;
+  fra.me.meth = LOCATE_parser___ReduceAction136___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 17;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -7557,80 +22886,141 @@ void parser___ReduceAction22___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
+  fra.me.REG[15] = NIT_NULL;
+  fra.me.REG[16] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:1754 */
+  /* parser/parser.nit:7478 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1755 */
+  /* parser/parser.nit:7479 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1756 */
+  /* parser/parser.nit:7480 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7481 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1757 */
+  /* parser/parser.nit:7482 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1758 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1759 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1760 */
+  /* parser/parser.nit:7483 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7484 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7485 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7486 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7487 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7488 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7489 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7490 */
+  fra.me.REG[12] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7491 */
+  fra.me.REG[13] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7492 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7493 */
+  fra.me.REG[15] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7494 */
+  fra.me.REG[16] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7496 */
+  REGB0 = TAG_Bool((fra.me.REG[13]==NIT_NULL) || VAL_ISA(fra.me.REG[13], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7496);
+  }
+  /* parser/parser.nit:7498 */
+  REGB0 = TAG_Bool((fra.me.REG[12]==NIT_NULL) || VAL_ISA(fra.me.REG[12], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7498);
+  }
+  /* parser/parser.nit:7500 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7500);
+  }
+  /* parser/parser.nit:7502 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7502);
+  }
+  /* parser/parser.nit:7504 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7504);
+  }
+  /* parser/parser.nit:7506 */
+  REGB0 = TAG_Bool((fra.me.REG[8]!=NIT_NULL) && VAL_ISA(fra.me.REG[8], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7506);
+  }
+  /* parser/parser.nit:7507 */
+  fra.me.REG[8] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[8]);
+  fra.me.REG[14] = fra.me.REG[8];
+  /* parser/parser.nit:7508 */
   fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1762 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7510 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1762);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7510);
   }
-  /* parser/parser.nit:1763 */
-  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:1765 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7511 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[7]);
+  fra.me.REG[8] = fra.me.REG[7];
+  /* parser/parser.nit:7512 */
+  fra.me.REG[8] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[8], NIT_NULL);
+  /* parser/parser.nit:7519 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1765);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7519);
   }
-  /* parser/parser.nit:1766 */
-  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:1767 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1769 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7521 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1769);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7521);
   }
-  /* parser/parser.nit:1770 */
-  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:1771 */
-  fra.me.REG[4] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  /* parser/parser.nit:1774 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* parser/parser.nit:7522 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[15], fra.me.REG[5]);
+  fra.me.REG[15] = fra.me.REG[5];
+  /* parser/parser.nit:7524 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7524);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:7525 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[16], fra.me.REG[4]);
+  fra.me.REG[16] = fra.me.REG[4];
+  /* parser/parser.nit:7527 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:1775 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[4]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7527);
   }
-  /* parser/parser.nit:1777 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:1783 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:1784 */
+  /* parser/parser.nit:7528 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[13], fra.me.REG[12], fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[14], fra.me.REG[8], fra.me.REG[6], fra.me.REG[15], fra.me.REG[16], fra.me.REG[3]);
+  /* parser/parser.nit:7541 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7542 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1784);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7542);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7638,111 +23028,43 @@ void parser___ReduceAction22___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction23___action[] = "parser::ReduceAction23::(parser::ReduceAction::action)";
-void parser___ReduceAction23___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction137___action[] = "parser::ReduceAction137::(parser::ReduceAction::action)";
+void parser___ReduceAction137___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1789;
-  fra.me.meth = LOCATE_parser___ReduceAction23___action;
+  fra.me.line = 7547;
+  fra.me.meth = LOCATE_parser___ReduceAction137___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[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:1791 */
+  /* parser/parser.nit:7549 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1792 */
+  /* parser/parser.nit:7550 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1793 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1794 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1795 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1796 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1797 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1798 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1800 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1800);
-  }
-  /* parser/parser.nit:1802 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1802);
-  }
-  /* parser/parser.nit:1803 */
-  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:1805 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1805);
-  }
-  /* parser/parser.nit:1806 */
-  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:1807 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1809 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1809);
-  }
-  /* parser/parser.nit:1810 */
-  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:1811 */
-  fra.me.REG[4] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  /* parser/parser.nit:1814 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* parser/parser.nit:7552 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwclass, ID_parser___parser_nodes___TKwclass)) /*cast nullable TKwclass*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:1815 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[4]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7552);
   }
-  /* parser/parser.nit:1817 */
-  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* parser/parser.nit:1823 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* parser/parser.nit:1824 */
+  /* parser/parser.nit:7553 */
+  fra.me.REG[3] = NEW_AConcreteClasskind_parser___parser_prod___AConcreteClasskind___init_aconcreteclasskind(fra.me.REG[3]);
+  /* parser/parser.nit:7556 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7557 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1824);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7557);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7750,91 +23072,96 @@ void parser___ReduceAction23___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction24___action[] = "parser::ReduceAction24::(parser::ReduceAction::action)";
-void parser___ReduceAction24___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction138___action[] = "parser::ReduceAction138::(parser::ReduceAction::action)";
+void parser___ReduceAction138___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 = 1829;
-  fra.me.meth = LOCATE_parser___ReduceAction24___action;
+  fra.me.line = 7562;
+  fra.me.meth = LOCATE_parser___ReduceAction138___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:1831 */
+  /* parser/parser.nit:7564 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1832 */
+  /* parser/parser.nit:7565 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1833 */
+  /* parser/parser.nit:7566 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1834 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1835 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1836 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1838 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7568 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwabstract, ID_parser___parser_nodes___TKwabstract)) /*cast nullable TKwabstract*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1838);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7568);
   }
-  /* parser/parser.nit:1839 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1841 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7570 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwclass, ID_parser___parser_nodes___TKwclass)) /*cast nullable TKwclass*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1841);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7570);
   }
-  /* parser/parser.nit:1842 */
-  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:1843 */
-  fra.me.REG[8] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  /* parser/parser.nit:1846 */
-  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:1847 */
-  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+  /* parser/parser.nit:7571 */
+  fra.me.REG[3] = NEW_AAbstractClasskind_parser___parser_prod___AAbstractClasskind___init_aabstractclasskind(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:7575 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7576 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7576);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction139___action[] = "parser::ReduceAction139::(parser::ReduceAction::action)";
+void parser___ReduceAction139___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7581;
+  fra.me.meth = LOCATE_parser___ReduceAction139___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:7583 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:7584 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7586 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwinterface, ID_parser___parser_nodes___TKwinterface)) /*cast nullable TKwinterface*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:1848 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7586);
   }
-  /* parser/parser.nit:1850 */
-  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* parser/parser.nit:1856 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:1857 */
+  /* parser/parser.nit:7587 */
+  fra.me.REG[3] = NEW_AInterfaceClasskind_parser___parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(fra.me.REG[3]);
+  /* parser/parser.nit:7590 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7591 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1857);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7591);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7842,100 +23169,43 @@ void parser___ReduceAction24___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction25___action[] = "parser::ReduceAction25::(parser::ReduceAction::action)";
-void parser___ReduceAction25___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction140___action[] = "parser::ReduceAction140::(parser::ReduceAction::action)";
+void parser___ReduceAction140___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1862;
-  fra.me.meth = LOCATE_parser___ReduceAction25___action;
+  fra.me.line = 7596;
+  fra.me.meth = LOCATE_parser___ReduceAction140___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[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:1864 */
+  /* parser/parser.nit:7598 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1865 */
+  /* parser/parser.nit:7599 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1866 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1867 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1868 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1869 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1870 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1872 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1872);
-  }
-  /* parser/parser.nit:1874 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1874);
-  }
-  /* parser/parser.nit:1875 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1877 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1877);
-  }
-  /* parser/parser.nit:1878 */
-  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:1879 */
-  fra.me.REG[9] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[9]);
-  /* parser/parser.nit:1882 */
-  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:1883 */
-  REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+  /* parser/parser.nit:7601 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwenum, ID_parser___parser_nodes___TKwenum)) /*cast nullable TKwenum*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[9])(fra.me.REG[9], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:1884 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7601);
   }
-  /* parser/parser.nit:1886 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:1892 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:1893 */
+  /* parser/parser.nit:7602 */
+  fra.me.REG[3] = NEW_AEnumClasskind_parser___parser_prod___AEnumClasskind___init_aenumclasskind(fra.me.REG[3]);
+  /* parser/parser.nit:7605 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7606 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1893);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7606);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -7943,102 +23213,43 @@ void parser___ReduceAction25___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction26___action[] = "parser::ReduceAction26::(parser::ReduceAction::action)";
-void parser___ReduceAction26___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction141___action[] = "parser::ReduceAction141::(parser::ReduceAction::action)";
+void parser___ReduceAction141___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1898;
-  fra.me.meth = LOCATE_parser___ReduceAction26___action;
+  fra.me.line = 7611;
+  fra.me.meth = LOCATE_parser___ReduceAction141___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:1900 */
+  /* parser/parser.nit:7613 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1901 */
+  /* parser/parser.nit:7614 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1902 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1903 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1904 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1905 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1906 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1908 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1908);
-  }
-  /* parser/parser.nit:1909 */
-  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:1911 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1911);
-  }
-  /* parser/parser.nit:1912 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1914 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1914);
-  }
-  /* parser/parser.nit:1915 */
-  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:1916 */
-  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* parser/parser.nit:1919 */
-  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:1920 */
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* parser/parser.nit:7616 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwextern, ID_parser___parser_nodes___TKwextern)) /*cast nullable TKwextern*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:1921 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7616);
   }
-  /* parser/parser.nit:1923 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:1929 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:1930 */
+  /* parser/parser.nit:7617 */
+  fra.me.REG[3] = NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind(fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:7621 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7622 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1930);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7622);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8046,111 +23257,52 @@ void parser___ReduceAction26___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction27___action[] = "parser::ReduceAction27::(parser::ReduceAction::action)";
-void parser___ReduceAction27___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction142___action[] = "parser::ReduceAction142::(parser::ReduceAction::action)";
+void parser___ReduceAction142___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1935;
-  fra.me.meth = LOCATE_parser___ReduceAction27___action;
+  fra.me.line = 7627;
+  fra.me.meth = LOCATE_parser___ReduceAction142___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[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:1937 */
+  /* parser/parser.nit:7629 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1938 */
+  /* parser/parser.nit:7630 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1939 */
+  /* parser/parser.nit:7631 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1940 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1941 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1942 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1943 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1944 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1946 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1946);
-  }
-  /* parser/parser.nit:1948 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1948);
-  }
-  /* parser/parser.nit:1949 */
-  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:1951 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1951);
-  }
-  /* parser/parser.nit:1952 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1954 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7633 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwextern, ID_parser___parser_nodes___TKwextern)) /*cast nullable TKwextern*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1954);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7633);
   }
-  /* parser/parser.nit:1955 */
-  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:1956 */
-  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* parser/parser.nit:1959 */
-  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:1960 */
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* parser/parser.nit:7635 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwclass, ID_parser___parser_nodes___TKwclass)) /*cast nullable TKwclass*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:1961 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[5]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7635);
   }
-  /* parser/parser.nit:1963 */
-  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* parser/parser.nit:1969 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* parser/parser.nit:1970 */
+  /* parser/parser.nit:7636 */
+  fra.me.REG[3] = NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:7640 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7641 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1970);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7641);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8158,102 +23310,65 @@ void parser___ReduceAction27___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction28___action[] = "parser::ReduceAction28::(parser::ReduceAction::action)";
-void parser___ReduceAction28___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction143___action[] = "parser::ReduceAction143::(parser::ReduceAction::action)";
+void parser___ReduceAction143___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1975;
-  fra.me.meth = LOCATE_parser___ReduceAction28___action;
+  fra.me.line = 7646;
+  fra.me.meth = LOCATE_parser___ReduceAction143___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:1977 */
+  /* parser/parser.nit:7648 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:1978 */
+  /* parser/parser.nit:7649 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7650 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1979 */
+  /* parser/parser.nit:7651 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7652 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1980 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:1981 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1982 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1983 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1985 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1985);
-  }
-  /* parser/parser.nit:1986 */
-  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:1988 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1988);
-  }
-  /* parser/parser.nit:1989 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:1991 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1991);
-  }
-  /* parser/parser.nit:1992 */
-  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:1993 */
-  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* parser/parser.nit:1996 */
-  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:1997 */
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* parser/parser.nit:7653 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7654 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7656 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:1998 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
+    /* parser/parser.nit:7657 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:2000 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:2006 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:2007 */
+  /* parser/parser.nit:7659 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:7660 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2007);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7660);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8261,18 +23376,18 @@ void parser___ReduceAction28___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction29___action[] = "parser::ReduceAction29::(parser::ReduceAction::action)";
-void parser___ReduceAction29___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction144___action[] = "parser::ReduceAction144::(parser::ReduceAction::action)";
+void parser___ReduceAction144___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2012;
-  fra.me.meth = LOCATE_parser___ReduceAction29___action;
+  fra.me.line = 7665;
+  fra.me.meth = LOCATE_parser___ReduceAction144___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -8280,92 +23395,58 @@ void parser___ReduceAction29___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[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:2014 */
+  /* parser/parser.nit:7667 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2015 */
+  /* parser/parser.nit:7668 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7669 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2016 */
+  /* parser/parser.nit:7670 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7671 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2017 */
+  /* parser/parser.nit:7672 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2018 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2019 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2020 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2021 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2023 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2023);
-  }
-  /* parser/parser.nit:2025 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2025);
-  }
-  /* parser/parser.nit:2026 */
-  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:2028 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2028);
-  }
-  /* parser/parser.nit:2029 */
+  /* parser/parser.nit:7673 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7674 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2031 */
+  /* parser/parser.nit:7677 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2031);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7677);
   }
-  /* parser/parser.nit:2032 */
-  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:2033 */
-  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* parser/parser.nit:2036 */
-  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:2037 */
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* parser/parser.nit:7678 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(0);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2038 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[5]);
+    /* parser/parser.nit:7679 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* parser/parser.nit:2040 */
-  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* parser/parser.nit:2046 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* parser/parser.nit:2047 */
+  /* parser/parser.nit:7681 */
+  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:7682 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:7683 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2047);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7683);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8373,114 +23454,40 @@ void parser___ReduceAction29___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction30___action[] = "parser::ReduceAction30::(parser::ReduceAction::action)";
-void parser___ReduceAction30___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction145___action[] = "parser::ReduceAction145::(parser::ReduceAction::action)";
+void parser___ReduceAction145___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 = 2052;
-  fra.me.meth = LOCATE_parser___ReduceAction30___action;
+  fra.me.line = 7688;
+  fra.me.meth = LOCATE_parser___ReduceAction145___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[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:2054 */
+  /* parser/parser.nit:7690 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2055 */
+  /* parser/parser.nit:7691 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2056 */
+  /* parser/parser.nit:7692 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2057 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2058 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2059 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2060 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2061 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2063 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2063);
-  }
-  /* parser/parser.nit:2064 */
-  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:2066 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2066);
-  }
-  /* parser/parser.nit:2067 */
-  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:2069 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2069);
-  }
-  /* parser/parser.nit:2070 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2072 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2072);
-  }
-  /* parser/parser.nit:2073 */
-  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:2074 */
-  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* parser/parser.nit:2077 */
-  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:2078 */
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2079 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[5]);
-  }
-  /* parser/parser.nit:2081 */
-  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* parser/parser.nit:2087 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* parser/parser.nit:2088 */
+  /* parser/parser.nit:7693 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7695 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7696 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2088);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7696);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8488,123 +23495,96 @@ void parser___ReduceAction30___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction31___action[] = "parser::ReduceAction31::(parser::ReduceAction::action)";
-void parser___ReduceAction31___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction146___action[] = "parser::ReduceAction146::(parser::ReduceAction::action)";
+void parser___ReduceAction146___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2093;
-  fra.me.meth = LOCATE_parser___ReduceAction31___action;
+  fra.me.line = 7701;
+  fra.me.meth = LOCATE_parser___ReduceAction146___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[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:2095 */
+  /* parser/parser.nit:7703 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2096 */
+  /* parser/parser.nit:7704 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2097 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2098 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2099 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2100 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2101 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2102 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2103 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2105 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2105);
-  }
-  /* parser/parser.nit:2107 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2107);
-  }
-  /* parser/parser.nit:2108 */
-  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:2110 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7706 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2110);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7706);
   }
-  /* parser/parser.nit:2111 */
-  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:2113 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7707 */
+  fra.me.REG[3] = NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:7712 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7713 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2113);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7713);
   }
-  /* parser/parser.nit:2114 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2116 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction147___action[] = "parser::ReduceAction147::(parser::ReduceAction::action)";
+void parser___ReduceAction147___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t tmp;
+  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___ReduceAction147___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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:7720 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:7721 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7722 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7724 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2116);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7724);
   }
-  /* parser/parser.nit:2117 */
-  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:2118 */
-  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* parser/parser.nit:2121 */
-  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:2122 */
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* parser/parser.nit:7726 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2123 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[5]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7726);
   }
-  /* parser/parser.nit:2125 */
-  fra.me.REG[10] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[7], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* parser/parser.nit:2131 */
-  fra.me.REG[2] = fra.me.REG[10];
-  /* parser/parser.nit:2132 */
+  /* parser/parser.nit:7727 */
+  fra.me.REG[3] = NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:7732 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7733 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2132);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7733);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8612,71 +23592,52 @@ void parser___ReduceAction31___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction32___action[] = "parser::ReduceAction32::(parser::ReduceAction::action)";
-void parser___ReduceAction32___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction148___action[] = "parser::ReduceAction148::(parser::ReduceAction::action)";
+void parser___ReduceAction148___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 = 2137;
-  fra.me.meth = LOCATE_parser___ReduceAction32___action;
+  fra.me.line = 7738;
+  fra.me.meth = LOCATE_parser___ReduceAction148___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:2139 */
+  /* parser/parser.nit:7740 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2140 */
+  /* parser/parser.nit:7741 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2141 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2142 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2143 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2145 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:7742 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7744 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2145);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7744);
   }
-  /* parser/parser.nit:2146 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:7746 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7746);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2147 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-  }
-  /* parser/parser.nit:2149 */
-  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* parser/parser.nit:2155 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* parser/parser.nit:2156 */
+  /* parser/parser.nit:7747 */
+  fra.me.REG[3] = NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:7752 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7753 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2156);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7753);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8684,18 +23645,17 @@ void parser___ReduceAction32___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction33___action[] = "parser::ReduceAction33::(parser::ReduceAction::action)";
-void parser___ReduceAction33___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction149___action[] = "parser::ReduceAction149::(parser::ReduceAction::action)";
+void parser___ReduceAction149___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 = 2161;
-  fra.me.meth = LOCATE_parser___ReduceAction33___action;
+  fra.me.line = 7758;
+  fra.me.meth = LOCATE_parser___ReduceAction149___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -8703,61 +23663,43 @@ void parser___ReduceAction33___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = 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:2163 */
+  /* parser/parser.nit:7760 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2164 */
+  /* parser/parser.nit:7761 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2165 */
+  /* parser/parser.nit:7762 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2166 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2167 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2168 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2170 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:7763 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7765 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2170);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7765);
   }
-  /* parser/parser.nit:2172 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:7767 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2172);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7767);
   }
-  /* parser/parser.nit:2173 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:7769 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2174 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7769);
   }
-  /* parser/parser.nit:2176 */
-  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* parser/parser.nit:2182 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:2183 */
+  /* parser/parser.nit:7770 */
+  fra.me.REG[4] = NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(fra.me.REG[5], fra.me.REG[3], fra.me.REG[4]);
+  /* parser/parser.nit:7775 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:7776 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2183);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7776);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8765,18 +23707,17 @@ void parser___ReduceAction33___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction34___action[] = "parser::ReduceAction34::(parser::ReduceAction::action)";
-void parser___ReduceAction34___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction150___action[] = "parser::ReduceAction150::(parser::ReduceAction::action)";
+void parser___ReduceAction150___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 = 2188;
-  fra.me.meth = LOCATE_parser___ReduceAction34___action;
+  fra.me.line = 7781;
+  fra.me.meth = LOCATE_parser___ReduceAction150___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -8784,64 +23725,39 @@ void parser___ReduceAction34___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = 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:2190 */
+  /* parser/parser.nit:7783 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2191 */
+  /* parser/parser.nit:7784 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2192 */
+  /* parser/parser.nit:7785 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2193 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2194 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2195 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2197 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2197);
-  }
-  /* parser/parser.nit:2198 */
-  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:2200 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:7786 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7787 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7789 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2200);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7789);
   }
-  /* parser/parser.nit:2201 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:7791 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2202 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7791);
   }
-  /* parser/parser.nit:2204 */
-  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* parser/parser.nit:2210 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:2211 */
+  /* parser/parser.nit:7792 */
+  fra.me.REG[3] = NEW_ASuperclass_parser___parser_prod___ASuperclass___init_asuperclass(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:7797 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7798 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2211);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7798);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8849,18 +23765,17 @@ void parser___ReduceAction34___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction35___action[] = "parser::ReduceAction35::(parser::ReduceAction::action)";
-void parser___ReduceAction35___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction151___action[] = "parser::ReduceAction151::(parser::ReduceAction::action)";
+void parser___ReduceAction151___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 = 2216;
-  fra.me.meth = LOCATE_parser___ReduceAction35___action;
+  fra.me.line = 7803;
+  fra.me.meth = LOCATE_parser___ReduceAction151___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -8869,72 +23784,85 @@ void parser___ReduceAction35___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:2218 */
+  /* parser/parser.nit:7805 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2219 */
+  /* parser/parser.nit:7806 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2220 */
+  /* parser/parser.nit:7807 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2221 */
+  /* parser/parser.nit:7808 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2222 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2223 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2224 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2226 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:7809 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7810 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7812 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2226);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7812);
   }
-  /* parser/parser.nit:2228 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7814 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2228);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7814);
   }
-  /* parser/parser.nit:2229 */
-  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:2231 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:7816 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2231);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7816);
   }
-  /* parser/parser.nit:2232 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:7817 */
+  fra.me.REG[3] = NEW_ASuperclass_parser___parser_prod___ASuperclass___init_asuperclass(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:7822 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7823 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7823);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2233 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
-  }
-  /* parser/parser.nit:2235 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:2241 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:2242 */
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction152___action[] = "parser::ReduceAction152::(parser::ReduceAction::action)";
+void parser___ReduceAction152___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 7828;
+  fra.me.meth = LOCATE_parser___ReduceAction152___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:7830 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:7831 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7832 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7834 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7835 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2242);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7835);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -8942,18 +23870,17 @@ void parser___ReduceAction35___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction36___action[] = "parser::ReduceAction36::(parser::ReduceAction::action)";
-void parser___ReduceAction36___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction153___action[] = "parser::ReduceAction153::(parser::ReduceAction::action)";
+void parser___ReduceAction153___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2247;
-  fra.me.meth = LOCATE_parser___ReduceAction36___action;
+  fra.me.line = 7840;
+  fra.me.meth = LOCATE_parser___ReduceAction153___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -8963,62 +23890,70 @@ void parser___ReduceAction36___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:2249 */
+  /* parser/parser.nit:7842 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2250 */
+  /* parser/parser.nit:7843 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2251 */
+  /* parser/parser.nit:7844 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2252 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2253 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2254 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2256 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7845 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7846 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7847 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7848 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7849 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7851 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2256);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7851);
   }
-  /* parser/parser.nit:2257 */
-  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:2259 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:7853 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2259);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7853);
   }
-  /* parser/parser.nit:2260 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:7855 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7855);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:7857 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2261 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7857);
   }
-  /* parser/parser.nit:2263 */
-  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* parser/parser.nit:2269 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:2270 */
+  /* parser/parser.nit:7859 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7859);
+  }
+  /* parser/parser.nit:7861 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7861);
+  }
+  /* parser/parser.nit:7862 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:7872 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7873 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2270);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7873);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9026,18 +23961,17 @@ void parser___ReduceAction36___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction37___action[] = "parser::ReduceAction37::(parser::ReduceAction::action)";
-void parser___ReduceAction37___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction154___action[] = "parser::ReduceAction154::(parser::ReduceAction::action)";
+void parser___ReduceAction154___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2275;
-  fra.me.meth = LOCATE_parser___ReduceAction37___action;
+  fra.me.line = 7878;
+  fra.me.meth = LOCATE_parser___ReduceAction154___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -9048,70 +23982,78 @@ void parser___ReduceAction37___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:2277 */
+  /* parser/parser.nit:7880 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2278 */
+  /* parser/parser.nit:7881 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2279 */
+  /* parser/parser.nit:7882 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7883 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2280 */
+  /* parser/parser.nit:7884 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2281 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2282 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2283 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2285 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:7885 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7886 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7887 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7888 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7890 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2285);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7890);
   }
-  /* parser/parser.nit:2287 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7892 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2287);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7892);
   }
-  /* parser/parser.nit:2288 */
-  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:2290 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:7894 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2290);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7894);
   }
-  /* parser/parser.nit:2291 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:7896 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7896);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:7898 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2292 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7898);
   }
-  /* parser/parser.nit:2294 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:2300 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:2301 */
+  /* parser/parser.nit:7900 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7900);
+  }
+  /* parser/parser.nit:7902 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7902);
+  }
+  /* parser/parser.nit:7903 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:7913 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7914 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2301);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7914);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9119,18 +24061,17 @@ void parser___ReduceAction37___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction38___action[] = "parser::ReduceAction38::(parser::ReduceAction::action)";
-void parser___ReduceAction38___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction155___action[] = "parser::ReduceAction155::(parser::ReduceAction::action)";
+void parser___ReduceAction155___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2306;
-  fra.me.meth = LOCATE_parser___ReduceAction38___action;
+  fra.me.line = 7919;
+  fra.me.meth = LOCATE_parser___ReduceAction155___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -9141,73 +24082,78 @@ void parser___ReduceAction38___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:2308 */
+  /* parser/parser.nit:7921 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2309 */
+  /* parser/parser.nit:7922 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2310 */
+  /* parser/parser.nit:7923 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2311 */
+  /* parser/parser.nit:7924 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7925 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2312 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2313 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2314 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2316 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7926 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7927 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7928 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7929 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7931 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2316);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7931);
   }
-  /* parser/parser.nit:2317 */
-  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:2319 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7933 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2319);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7933);
   }
-  /* parser/parser.nit:2320 */
-  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:2322 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:7935 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2322);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7935);
   }
-  /* parser/parser.nit:2323 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:7937 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7937);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:7939 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2324 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7939);
   }
-  /* parser/parser.nit:2326 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:2332 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:2333 */
+  /* parser/parser.nit:7941 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7941);
+  }
+  /* parser/parser.nit:7943 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7943);
+  }
+  /* parser/parser.nit:7944 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(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:7954 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7955 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2333);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7955);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9215,18 +24161,17 @@ void parser___ReduceAction38___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction39___action[] = "parser::ReduceAction39::(parser::ReduceAction::action)";
-void parser___ReduceAction39___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction156___action[] = "parser::ReduceAction156::(parser::ReduceAction::action)";
+void parser___ReduceAction156___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2338;
-  fra.me.meth = LOCATE_parser___ReduceAction39___action;
+  fra.me.line = 7960;
+  fra.me.meth = LOCATE_parser___ReduceAction156___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -9238,81 +24183,86 @@ void parser___ReduceAction39___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:2340 */
+  /* parser/parser.nit:7962 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2341 */
+  /* parser/parser.nit:7963 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2342 */
+  /* parser/parser.nit:7964 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7965 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2343 */
+  /* parser/parser.nit:7966 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2344 */
+  /* parser/parser.nit:7967 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2345 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2346 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2347 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2349 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:7968 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7969 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7970 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7971 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7973 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7973);
+  }
+  /* parser/parser.nit:7975 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7975);
+  }
+  /* parser/parser.nit:7977 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7977);
+  }
+  /* parser/parser.nit:7979 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2349);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7979);
   }
-  /* parser/parser.nit:2351 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7981 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2351);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7981);
   }
-  /* parser/parser.nit:2352 */
-  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:2354 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7983 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2354);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7983);
   }
-  /* parser/parser.nit:2355 */
-  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:2357 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:7985 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2357);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7985);
   }
-  /* parser/parser.nit:2358 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:7987 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2359 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7987);
   }
-  /* parser/parser.nit:2361 */
-  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* parser/parser.nit:2367 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* parser/parser.nit:2368 */
+  /* parser/parser.nit:7988 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(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:7998 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7999 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2368);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7999);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9320,18 +24270,17 @@ void parser___ReduceAction39___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction40___action[] = "parser::ReduceAction40::(parser::ReduceAction::action)";
-void parser___ReduceAction40___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction157___action[] = "parser::ReduceAction157::(parser::ReduceAction::action)";
+void parser___ReduceAction157___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2373;
-  fra.me.meth = LOCATE_parser___ReduceAction40___action;
+  fra.me.line = 8004;
+  fra.me.meth = LOCATE_parser___ReduceAction157___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -9341,62 +24290,72 @@ void parser___ReduceAction40___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:2375 */
+  /* parser/parser.nit:8006 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2376 */
+  /* parser/parser.nit:8007 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2377 */
+  /* parser/parser.nit:8008 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8009 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2378 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2379 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2380 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2382 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8010 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8011 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8012 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8013 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8014 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8016 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2382);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8016);
   }
-  /* parser/parser.nit:2384 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8018 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2384);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8018);
   }
-  /* parser/parser.nit:2385 */
-  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:2386 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8020 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8020);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:8022 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2387 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8022);
   }
-  /* parser/parser.nit:2389 */
-  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* parser/parser.nit:2395 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:2396 */
+  /* parser/parser.nit:8024 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8024);
+  }
+  /* parser/parser.nit:8026 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8026);
+  }
+  /* parser/parser.nit:8027 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:8037 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8038 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2396);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8038);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9404,18 +24363,17 @@ void parser___ReduceAction40___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction41___action[] = "parser::ReduceAction41::(parser::ReduceAction::action)";
-void parser___ReduceAction41___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction158___action[] = "parser::ReduceAction158::(parser::ReduceAction::action)";
+void parser___ReduceAction158___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2401;
-  fra.me.meth = LOCATE_parser___ReduceAction41___action;
+  fra.me.line = 8043;
+  fra.me.meth = LOCATE_parser___ReduceAction158___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -9426,70 +24384,80 @@ void parser___ReduceAction41___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:2403 */
+  /* parser/parser.nit:8045 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2404 */
+  /* parser/parser.nit:8046 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2405 */
+  /* parser/parser.nit:8047 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8048 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2406 */
+  /* parser/parser.nit:8049 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8050 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2407 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2408 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2409 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2411 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:8051 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8052 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8053 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8054 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8056 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2411);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8056);
   }
-  /* parser/parser.nit:2413 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8058 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2413);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8058);
   }
-  /* parser/parser.nit:2415 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8060 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2415);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8060);
   }
-  /* parser/parser.nit:2416 */
-  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:2417 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8062 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8062);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:8064 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2418 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8064);
   }
-  /* parser/parser.nit:2420 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:2426 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:2427 */
+  /* parser/parser.nit:8066 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8066);
+  }
+  /* parser/parser.nit:8068 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8068);
+  }
+  /* parser/parser.nit:8069 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:8079 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8080 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2427);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8080);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9497,18 +24465,17 @@ void parser___ReduceAction41___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction42___action[] = "parser::ReduceAction42::(parser::ReduceAction::action)";
-void parser___ReduceAction42___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction159___action[] = "parser::ReduceAction159::(parser::ReduceAction::action)";
+void parser___ReduceAction159___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2432;
-  fra.me.meth = LOCATE_parser___ReduceAction42___action;
+  fra.me.line = 8085;
+  fra.me.meth = LOCATE_parser___ReduceAction159___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -9519,73 +24486,80 @@ void parser___ReduceAction42___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:2434 */
+  /* parser/parser.nit:8087 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2435 */
+  /* parser/parser.nit:8088 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8089 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2436 */
+  /* parser/parser.nit:8090 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2437 */
+  /* parser/parser.nit:8091 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8092 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2438 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2439 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2440 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2442 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8093 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8094 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8095 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8096 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8098 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2442);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8098);
   }
-  /* parser/parser.nit:2443 */
-  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:2445 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8100 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2445);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8100);
   }
-  /* parser/parser.nit:2447 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8102 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2447);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8102);
   }
-  /* parser/parser.nit:2448 */
-  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:2449 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8104 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8104);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:8106 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2450 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8106);
   }
-  /* parser/parser.nit:2452 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:2458 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:2459 */
+  /* parser/parser.nit:8108 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8108);
+  }
+  /* parser/parser.nit:8110 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8110);
+  }
+  /* parser/parser.nit:8111 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(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:8121 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8122 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2459);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8122);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9593,18 +24567,17 @@ void parser___ReduceAction42___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction43___action[] = "parser::ReduceAction43::(parser::ReduceAction::action)";
-void parser___ReduceAction43___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction160___action[] = "parser::ReduceAction160::(parser::ReduceAction::action)";
+void parser___ReduceAction160___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2464;
-  fra.me.meth = LOCATE_parser___ReduceAction43___action;
+  fra.me.line = 8127;
+  fra.me.meth = LOCATE_parser___ReduceAction160___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -9616,81 +24589,88 @@ void parser___ReduceAction43___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:2466 */
+  /* parser/parser.nit:8129 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2467 */
+  /* parser/parser.nit:8130 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2468 */
+  /* parser/parser.nit:8131 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8132 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8133 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2469 */
+  /* parser/parser.nit:8134 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2470 */
+  /* parser/parser.nit:8135 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2471 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2472 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2473 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2475 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:8136 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8137 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8138 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8139 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8141 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2475);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8141);
   }
-  /* parser/parser.nit:2477 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8143 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2477);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8143);
   }
-  /* parser/parser.nit:2478 */
-  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:2480 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8145 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2480);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8145);
   }
-  /* parser/parser.nit:2482 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8147 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2482);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8147);
   }
-  /* parser/parser.nit:2483 */
-  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:2484 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8149 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8149);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:8151 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2485 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8151);
   }
-  /* parser/parser.nit:2487 */
-  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* parser/parser.nit:2493 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* parser/parser.nit:2494 */
+  /* parser/parser.nit:8153 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8153);
+  }
+  /* parser/parser.nit:8155 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8155);
+  }
+  /* parser/parser.nit:8156 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(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:8166 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8167 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2494);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8167);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9698,16 +24678,15 @@ void parser___ReduceAction43___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction44___action[] = "parser::ReduceAction44::(parser::ReduceAction::action)";
-void parser___ReduceAction44___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction161___action[] = "parser::ReduceAction161::(parser::ReduceAction::action)";
+void parser___ReduceAction161___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2499;
-  fra.me.meth = LOCATE_parser___ReduceAction44___action;
+  fra.me.line = 8172;
+  fra.me.meth = LOCATE_parser___ReduceAction161___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -9722,71 +24701,69 @@ void parser___ReduceAction44___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:2501 */
+  /* parser/parser.nit:8174 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2502 */
+  /* parser/parser.nit:8175 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2503 */
+  /* parser/parser.nit:8176 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2504 */
+  /* parser/parser.nit:8177 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8178 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8179 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2505 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2506 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2507 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2509 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8180 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8181 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8182 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8184 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2509);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8184);
   }
-  /* parser/parser.nit:2510 */
-  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:2512 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8186 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2512);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8186);
   }
-  /* parser/parser.nit:2514 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8188 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2514);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8188);
   }
-  /* parser/parser.nit:2515 */
-  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:2516 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8190 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8190);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:8192 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2517 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8192);
   }
-  /* parser/parser.nit:2519 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:2525 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:2526 */
+  /* parser/parser.nit:8194 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8194);
+  }
+  /* parser/parser.nit:8195 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:8205 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8206 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2526);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8206);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9794,16 +24771,15 @@ void parser___ReduceAction44___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction45___action[] = "parser::ReduceAction45::(parser::ReduceAction::action)";
-void parser___ReduceAction45___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction162___action[] = "parser::ReduceAction162::(parser::ReduceAction::action)";
+void parser___ReduceAction162___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2531;
-  fra.me.meth = LOCATE_parser___ReduceAction45___action;
+  fra.me.line = 8211;
+  fra.me.meth = LOCATE_parser___ReduceAction162___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
@@ -9819,79 +24795,77 @@ void parser___ReduceAction45___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:2533 */
+  /* parser/parser.nit:8213 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2534 */
+  /* parser/parser.nit:8214 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2535 */
+  /* parser/parser.nit:8215 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2536 */
+  /* parser/parser.nit:8216 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8217 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8218 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2537 */
+  /* parser/parser.nit:8219 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2538 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2539 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2540 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2542 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:8220 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8221 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8222 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8224 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2542);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8224);
   }
-  /* parser/parser.nit:2544 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8226 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2544);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8226);
   }
-  /* parser/parser.nit:2545 */
-  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:2547 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8228 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2547);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8228);
   }
-  /* parser/parser.nit:2549 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8230 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2549);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8230);
   }
-  /* parser/parser.nit:2550 */
-  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:2551 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8232 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8232);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:8234 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2552 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8234);
   }
-  /* parser/parser.nit:2554 */
-  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* parser/parser.nit:2560 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* parser/parser.nit:2561 */
+  /* parser/parser.nit:8236 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8236);
+  }
+  /* parser/parser.nit:8237 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:8247 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8248 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2561);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8248);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -9899,18 +24873,17 @@ void parser___ReduceAction45___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction46___action[] = "parser::ReduceAction46::(parser::ReduceAction::action)";
-void parser___ReduceAction46___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction163___action[] = "parser::ReduceAction163::(parser::ReduceAction::action)";
+void parser___ReduceAction163___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2566;
-  fra.me.meth = LOCATE_parser___ReduceAction46___action;
+  fra.me.line = 8253;
+  fra.me.meth = LOCATE_parser___ReduceAction163___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -9921,85 +24894,67 @@ void parser___ReduceAction46___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:2568 */
+  /* parser/parser.nit:8255 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2569 */
+  /* parser/parser.nit:8256 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2570 */
+  /* parser/parser.nit:8257 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2571 */
+  /* parser/parser.nit:8258 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2572 */
+  /* parser/parser.nit:8259 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2573 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2574 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2575 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2577 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8260 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8261 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8263 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2577);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8263);
   }
-  /* parser/parser.nit:2578 */
-  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:2580 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8265 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2580);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8265);
   }
-  /* parser/parser.nit:2581 */
-  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:2583 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8267 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2583);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8267);
   }
-  /* parser/parser.nit:2585 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8269 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2585);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8269);
   }
-  /* parser/parser.nit:2586 */
-  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:2587 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8271 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8271);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:8273 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2588 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8273);
   }
-  /* parser/parser.nit:2590 */
-  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* parser/parser.nit:2596 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* parser/parser.nit:2597 */
+  /* parser/parser.nit:8274 */
+  fra.me.REG[3] = NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(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:8283 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8284 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2597);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8284);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10007,18 +24962,17 @@ void parser___ReduceAction46___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction47___action[] = "parser::ReduceAction47::(parser::ReduceAction::action)";
-void parser___ReduceAction47___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction164___action[] = "parser::ReduceAction164::(parser::ReduceAction::action)";
+void parser___ReduceAction164___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2602;
-  fra.me.meth = LOCATE_parser___ReduceAction47___action;
+  fra.me.line = 8289;
+  fra.me.meth = LOCATE_parser___ReduceAction164___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -10030,93 +24984,75 @@ void parser___ReduceAction47___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:2604 */
+  /* parser/parser.nit:8291 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2605 */
+  /* parser/parser.nit:8292 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2606 */
+  /* parser/parser.nit:8293 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2607 */
+  /* parser/parser.nit:8294 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2608 */
+  /* parser/parser.nit:8295 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2609 */
+  /* parser/parser.nit:8296 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2610 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2611 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2612 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2614 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:8297 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8298 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8300 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2614);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8300);
   }
-  /* parser/parser.nit:2616 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8302 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2616);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8302);
   }
-  /* parser/parser.nit:2617 */
-  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:2619 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8304 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2619);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8304);
   }
-  /* parser/parser.nit:2620 */
-  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:2622 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8306 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2622);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8306);
   }
-  /* parser/parser.nit:2624 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8308 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2624);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8308);
   }
-  /* parser/parser.nit:2625 */
-  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:2626 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8310 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8310);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:8312 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2627 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8312);
   }
-  /* parser/parser.nit:2629 */
-  fra.me.REG[10] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[7], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* parser/parser.nit:2635 */
-  fra.me.REG[2] = fra.me.REG[10];
-  /* parser/parser.nit:2636 */
+  /* parser/parser.nit:8313 */
+  fra.me.REG[3] = NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(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:8322 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8323 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2636);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8323);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10124,18 +25060,17 @@ void parser___ReduceAction47___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction48___action[] = "parser::ReduceAction48::(parser::ReduceAction::action)";
-void parser___ReduceAction48___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction165___action[] = "parser::ReduceAction165::(parser::ReduceAction::action)";
+void parser___ReduceAction165___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2641;
-  fra.me.meth = LOCATE_parser___ReduceAction48___action;
+  fra.me.line = 8328;
+  fra.me.meth = LOCATE_parser___ReduceAction165___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -10145,85 +25080,63 @@ void parser___ReduceAction48___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:2643 */
+  /* parser/parser.nit:8330 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2644 */
+  /* parser/parser.nit:8331 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2645 */
+  /* parser/parser.nit:8332 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8333 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8334 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2646 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2647 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2648 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2649 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2651 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8335 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8336 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8337 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8339 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2651);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8339);
   }
-  /* parser/parser.nit:2652 */
-  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:2653 */
-  fra.me.REG[8] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  /* parser/parser.nit:2657 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8341 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2657);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8341);
   }
-  /* parser/parser.nit:2658 */
-  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+  /* parser/parser.nit:8343 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2659 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8343);
   }
-  /* parser/parser.nit:2661 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8345 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8345);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:8347 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2662 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8347);
   }
-  /* parser/parser.nit:2664 */
-  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* parser/parser.nit:2670 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:2671 */
+  /* parser/parser.nit:8348 */
+  fra.me.REG[3] = NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:8357 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8358 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2671);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8358);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10231,18 +25144,17 @@ void parser___ReduceAction48___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction49___action[] = "parser::ReduceAction49::(parser::ReduceAction::action)";
-void parser___ReduceAction49___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction166___action[] = "parser::ReduceAction166::(parser::ReduceAction::action)";
+void parser___ReduceAction166___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2676;
-  fra.me.meth = LOCATE_parser___ReduceAction49___action;
+  fra.me.line = 8363;
+  fra.me.meth = LOCATE_parser___ReduceAction166___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -10253,93 +25165,71 @@ void parser___ReduceAction49___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:2678 */
+  /* parser/parser.nit:8365 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2679 */
+  /* parser/parser.nit:8366 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2680 */
+  /* parser/parser.nit:8367 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8368 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8369 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2681 */
+  /* parser/parser.nit:8370 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2682 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2683 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2684 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2686 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:8371 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8372 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8373 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8375 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2686);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8375);
   }
-  /* parser/parser.nit:2687 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2689 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8377 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2689);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8377);
   }
-  /* parser/parser.nit:2690 */
-  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:2691 */
-  fra.me.REG[9] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[9]);
-  /* parser/parser.nit:2695 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8379 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2695);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8379);
   }
-  /* parser/parser.nit:2696 */
-  REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+  /* parser/parser.nit:8381 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[9])(fra.me.REG[9], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8381);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2697 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
-  }
-  /* parser/parser.nit:2699 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8383 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8383);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:8385 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2700 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8385);
   }
-  /* parser/parser.nit:2702 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:2708 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:2709 */
+  /* parser/parser.nit:8386 */
+  fra.me.REG[3] = NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:8395 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8396 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2709);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8396);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10347,18 +25237,17 @@ void parser___ReduceAction49___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction50___action[] = "parser::ReduceAction50::(parser::ReduceAction::action)";
-void parser___ReduceAction50___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction167___action[] = "parser::ReduceAction167::(parser::ReduceAction::action)";
+void parser___ReduceAction167___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2714;
-  fra.me.meth = LOCATE_parser___ReduceAction50___action;
+  fra.me.line = 8401;
+  fra.me.meth = LOCATE_parser___ReduceAction167___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -10368,96 +25257,63 @@ void parser___ReduceAction50___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:2716 */
+  /* parser/parser.nit:8403 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2717 */
+  /* parser/parser.nit:8404 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8405 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2718 */
+  /* parser/parser.nit:8406 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8407 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2719 */
+  /* parser/parser.nit:8408 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2720 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2721 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2722 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2724 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8409 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8410 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8412 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2724);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8412);
   }
-  /* parser/parser.nit:2725 */
-  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:2726 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2728 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8414 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2728);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8414);
   }
-  /* parser/parser.nit:2729 */
-  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:2730 */
-  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* parser/parser.nit:2734 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8416 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2734);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8416);
   }
-  /* parser/parser.nit:2735 */
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* parser/parser.nit:8418 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2736 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8418);
   }
-  /* parser/parser.nit:2738 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8420 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2739 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8420);
   }
-  /* parser/parser.nit:2741 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:2747 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:2748 */
+  /* parser/parser.nit:8421 */
+  fra.me.REG[3] = NEW_AInternMethPropdef_parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:8429 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8430 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2748);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8430);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10465,18 +25321,17 @@ void parser___ReduceAction50___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction51___action[] = "parser::ReduceAction51::(parser::ReduceAction::action)";
-void parser___ReduceAction51___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction168___action[] = "parser::ReduceAction168::(parser::ReduceAction::action)";
+void parser___ReduceAction168___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2753;
-  fra.me.meth = LOCATE_parser___ReduceAction51___action;
+  fra.me.line = 8435;
+  fra.me.meth = LOCATE_parser___ReduceAction168___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -10487,104 +25342,71 @@ void parser___ReduceAction51___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:2755 */
+  /* parser/parser.nit:8437 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2756 */
+  /* parser/parser.nit:8438 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8439 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8440 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2757 */
+  /* parser/parser.nit:8441 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2758 */
+  /* parser/parser.nit:8442 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2759 */
+  /* parser/parser.nit:8443 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2760 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2761 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2762 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2764 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:8444 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8445 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8447 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2764);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8447);
   }
-  /* parser/parser.nit:2766 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8449 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2766);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8449);
   }
-  /* parser/parser.nit:2767 */
-  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:2768 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2770 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8451 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2770);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8451);
   }
-  /* parser/parser.nit:2771 */
-  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:2772 */
-  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* parser/parser.nit:2776 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8453 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2776);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8453);
   }
-  /* parser/parser.nit:2777 */
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* parser/parser.nit:8455 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2778 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[5]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8455);
   }
-  /* parser/parser.nit:2780 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8457 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8457);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2781 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
-  }
-  /* parser/parser.nit:2783 */
-  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* parser/parser.nit:2789 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* parser/parser.nit:2790 */
+  /* parser/parser.nit:8458 */
+  fra.me.REG[3] = NEW_AInternMethPropdef_parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:8466 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8467 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2790);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8467);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10592,18 +25414,17 @@ void parser___ReduceAction51___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction52___action[] = "parser::ReduceAction52::(parser::ReduceAction::action)";
-void parser___ReduceAction52___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction169___action[] = "parser::ReduceAction169::(parser::ReduceAction::action)";
+void parser___ReduceAction169___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2795;
-  fra.me.meth = LOCATE_parser___ReduceAction52___action;
+  fra.me.line = 8472;
+  fra.me.meth = LOCATE_parser___ReduceAction169___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -10613,96 +25434,63 @@ void parser___ReduceAction52___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:2797 */
+  /* parser/parser.nit:8474 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2798 */
+  /* parser/parser.nit:8475 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8476 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2799 */
+  /* parser/parser.nit:8477 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8478 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2800 */
+  /* parser/parser.nit:8479 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2801 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2802 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2803 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2805 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2805);
-  }
-  /* parser/parser.nit:2806 */
-  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:2807 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2809 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8480 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8481 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8483 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2809);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8483);
   }
-  /* parser/parser.nit:2810 */
-  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:2811 */
-  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* parser/parser.nit:2815 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8485 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2815);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8485);
   }
-  /* parser/parser.nit:2816 */
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* parser/parser.nit:8487 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2817 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8487);
   }
-  /* parser/parser.nit:2819 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8489 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8489);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:8491 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2820 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8491);
   }
-  /* parser/parser.nit:2822 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:2828 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:2829 */
+  /* parser/parser.nit:8492 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:8503 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8504 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2829);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8504);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10710,18 +25498,17 @@ void parser___ReduceAction52___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction53___action[] = "parser::ReduceAction53::(parser::ReduceAction::action)";
-void parser___ReduceAction53___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction170___action[] = "parser::ReduceAction170::(parser::ReduceAction::action)";
+void parser___ReduceAction170___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2834;
-  fra.me.meth = LOCATE_parser___ReduceAction53___action;
+  fra.me.line = 8509;
+  fra.me.meth = LOCATE_parser___ReduceAction170___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -10732,104 +25519,71 @@ void parser___ReduceAction53___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:2836 */
+  /* parser/parser.nit:8511 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2837 */
+  /* parser/parser.nit:8512 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8513 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8514 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2838 */
+  /* parser/parser.nit:8515 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2839 */
+  /* parser/parser.nit:8516 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2840 */
+  /* parser/parser.nit:8517 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2841 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2842 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2843 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2845 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:8518 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8519 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8521 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2845);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8521);
   }
-  /* parser/parser.nit:2847 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8523 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2847);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8523);
   }
-  /* parser/parser.nit:2848 */
-  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:2849 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2851 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8525 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2851);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8525);
   }
-  /* parser/parser.nit:2852 */
-  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:2853 */
-  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* parser/parser.nit:2857 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8527 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2857);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8527);
   }
-  /* parser/parser.nit:2858 */
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* parser/parser.nit:8529 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2859 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[5]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8529);
   }
-  /* parser/parser.nit:2861 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8531 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2862 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8531);
   }
-  /* parser/parser.nit:2864 */
-  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* parser/parser.nit:2870 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* parser/parser.nit:2871 */
+  /* parser/parser.nit:8532 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:8543 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8544 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2871);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8544);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10837,18 +25591,17 @@ void parser___ReduceAction53___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction54___action[] = "parser::ReduceAction54::(parser::ReduceAction::action)";
-void parser___ReduceAction54___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction171___action[] = "parser::ReduceAction171::(parser::ReduceAction::action)";
+void parser___ReduceAction171___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2876;
-  fra.me.meth = LOCATE_parser___ReduceAction54___action;
+  fra.me.line = 8549;
+  fra.me.meth = LOCATE_parser___ReduceAction171___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -10859,107 +25612,71 @@ void parser___ReduceAction54___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:2878 */
+  /* parser/parser.nit:8551 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2879 */
+  /* parser/parser.nit:8552 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2880 */
+  /* parser/parser.nit:8553 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8554 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8555 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2881 */
+  /* parser/parser.nit:8556 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2882 */
+  /* parser/parser.nit:8557 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2883 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2884 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2885 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2887 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8558 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8559 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8561 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2887);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8561);
   }
-  /* parser/parser.nit:2888 */
-  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:2890 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8563 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2890);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8563);
   }
-  /* parser/parser.nit:2891 */
-  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:2892 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2894 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8565 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2894);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8565);
   }
-  /* parser/parser.nit:2895 */
-  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:2896 */
-  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* parser/parser.nit:2900 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8567 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2900);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8567);
   }
-  /* parser/parser.nit:2901 */
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* parser/parser.nit:8569 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2902 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[5]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8569);
   }
-  /* parser/parser.nit:2904 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8571 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2905 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8571);
   }
-  /* parser/parser.nit:2907 */
-  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* parser/parser.nit:2913 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* parser/parser.nit:2914 */
+  /* parser/parser.nit:8572 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:8583 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8584 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2914);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8584);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -10967,18 +25684,17 @@ void parser___ReduceAction54___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction55___action[] = "parser::ReduceAction55::(parser::ReduceAction::action)";
-void parser___ReduceAction55___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction172___action[] = "parser::ReduceAction172::(parser::ReduceAction::action)";
+void parser___ReduceAction172___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2919;
-  fra.me.meth = LOCATE_parser___ReduceAction55___action;
+  fra.me.line = 8589;
+  fra.me.meth = LOCATE_parser___ReduceAction172___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -10990,115 +25706,79 @@ void parser___ReduceAction55___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:2921 */
+  /* parser/parser.nit:8591 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2922 */
+  /* parser/parser.nit:8592 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2923 */
+  /* parser/parser.nit:8593 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8594 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8595 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2924 */
+  /* parser/parser.nit:8596 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2925 */
+  /* parser/parser.nit:8597 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2926 */
+  /* parser/parser.nit:8598 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2927 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2928 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2929 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2931 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:8599 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8600 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8602 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2931);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8602);
   }
-  /* parser/parser.nit:2933 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8604 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2933);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8604);
   }
-  /* parser/parser.nit:2934 */
-  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:2936 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8606 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2936);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8606);
   }
-  /* parser/parser.nit:2937 */
-  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:2938 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2940 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8608 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2940);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8608);
   }
-  /* parser/parser.nit:2941 */
-  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:2942 */
-  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* parser/parser.nit:2946 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8610 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2946);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8610);
   }
-  /* parser/parser.nit:2947 */
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* parser/parser.nit:8612 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8612);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2948 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[5]);
-  }
-  /* parser/parser.nit:2950 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8614 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2951 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8614);
   }
-  /* parser/parser.nit:2953 */
-  fra.me.REG[10] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[7], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* parser/parser.nit:2959 */
-  fra.me.REG[2] = fra.me.REG[10];
-  /* parser/parser.nit:2960 */
+  /* parser/parser.nit:8615 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:8626 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8627 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2960);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8627);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11106,18 +25786,17 @@ void parser___ReduceAction55___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction56___action[] = "parser::ReduceAction56::(parser::ReduceAction::action)";
-void parser___ReduceAction56___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction173___action[] = "parser::ReduceAction173::(parser::ReduceAction::action)";
+void parser___ReduceAction173___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2965;
-  fra.me.meth = LOCATE_parser___ReduceAction56___action;
+  fra.me.line = 8632;
+  fra.me.meth = LOCATE_parser___ReduceAction173___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -11128,96 +25807,71 @@ void parser___ReduceAction56___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:2967 */
+  /* parser/parser.nit:8634 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:2968 */
+  /* parser/parser.nit:8635 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2969 */
+  /* parser/parser.nit:8636 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2970 */
+  /* parser/parser.nit:8637 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8638 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8639 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:2971 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2972 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2973 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2975 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8640 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8641 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8642 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8644 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2975);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8644);
   }
-  /* parser/parser.nit:2976 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:2978 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8646 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2978);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8646);
   }
-  /* parser/parser.nit:2979 */
-  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:2980 */
-  fra.me.REG[9] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[9]);
-  /* parser/parser.nit:2984 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8648 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2984);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8648);
   }
-  /* parser/parser.nit:2985 */
-  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:2986 */
-  REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+  /* parser/parser.nit:8650 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[9])(fra.me.REG[9], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2987 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8650);
   }
-  /* parser/parser.nit:2989 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8652 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8652);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:8654 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:2990 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8654);
   }
-  /* parser/parser.nit:2992 */
-  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* parser/parser.nit:2998 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:2999 */
+  /* parser/parser.nit:8655 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:8666 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8667 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2999);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8667);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11225,18 +25879,17 @@ void parser___ReduceAction56___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction57___action[] = "parser::ReduceAction57::(parser::ReduceAction::action)";
-void parser___ReduceAction57___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction174___action[] = "parser::ReduceAction174::(parser::ReduceAction::action)";
+void parser___ReduceAction174___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3004;
-  fra.me.meth = LOCATE_parser___ReduceAction57___action;
+  fra.me.line = 8672;
+  fra.me.meth = LOCATE_parser___ReduceAction174___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -11248,104 +25901,79 @@ void parser___ReduceAction57___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:3006 */
+  /* parser/parser.nit:8674 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3007 */
+  /* parser/parser.nit:8675 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3008 */
+  /* parser/parser.nit:8676 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3009 */
+  /* parser/parser.nit:8677 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8678 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8679 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3010 */
+  /* parser/parser.nit:8680 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3011 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3012 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3013 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3015 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:8681 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8682 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8683 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8685 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3015);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8685);
   }
-  /* parser/parser.nit:3017 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8687 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3017);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8687);
   }
-  /* parser/parser.nit:3018 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3020 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8689 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3020);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8689);
   }
-  /* parser/parser.nit:3021 */
-  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:3022 */
-  fra.me.REG[10] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[10]);
-  /* parser/parser.nit:3026 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8691 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3026);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8691);
   }
-  /* parser/parser.nit:3027 */
-  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:3028 */
-  REGB0 = TAG_Bool(fra.me.REG[10]==NIT_NULL);
+  /* parser/parser.nit:8693 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[10]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[10])(fra.me.REG[10], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:3029 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[10]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8693);
   }
-  /* parser/parser.nit:3031 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8695 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8695);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:8697 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:3032 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8697);
   }
-  /* parser/parser.nit:3034 */
-  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* parser/parser.nit:3040 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* parser/parser.nit:3041 */
+  /* parser/parser.nit:8698 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:8709 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8710 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3041);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8710);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11353,16 +25981,15 @@ void parser___ReduceAction57___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction58___action[] = "parser::ReduceAction58::(parser::ReduceAction::action)";
-void parser___ReduceAction58___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction175___action[] = "parser::ReduceAction175::(parser::ReduceAction::action)";
+void parser___ReduceAction175___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3046;
-  fra.me.meth = LOCATE_parser___ReduceAction58___action;
+  fra.me.line = 8715;
+  fra.me.meth = LOCATE_parser___ReduceAction175___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
@@ -11378,104 +26005,77 @@ void parser___ReduceAction58___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:3048 */
+  /* parser/parser.nit:8717 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3049 */
+  /* parser/parser.nit:8718 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3050 */
+  /* parser/parser.nit:8719 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3051 */
+  /* parser/parser.nit:8720 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3052 */
+  /* parser/parser.nit:8721 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8722 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8723 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3053 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3054 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3055 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3057 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8724 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8725 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8726 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8728 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3057);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8728);
   }
-  /* parser/parser.nit:3058 */
-  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:3060 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8730 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3060);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8730);
   }
-  /* parser/parser.nit:3061 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3063 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8732 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3063);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8732);
   }
-  /* parser/parser.nit:3064 */
-  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:3065 */
-  fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* parser/parser.nit:3069 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8734 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3069);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8734);
   }
-  /* parser/parser.nit:3070 */
-  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:3071 */
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  /* parser/parser.nit:8736 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8736);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:3072 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[6]);
-  }
-  /* parser/parser.nit:3074 */
-  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(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+  /* parser/parser.nit:8738 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8738);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:8740 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:3075 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8740);
   }
-  /* parser/parser.nit:3077 */
-  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* parser/parser.nit:3083 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* parser/parser.nit:3084 */
+  /* parser/parser.nit:8741 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:8752 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8753 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3084);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8753);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11483,16 +26083,15 @@ void parser___ReduceAction58___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction59___action[] = "parser::ReduceAction59::(parser::ReduceAction::action)";
-void parser___ReduceAction59___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction176___action[] = "parser::ReduceAction176::(parser::ReduceAction::action)";
+void parser___ReduceAction176___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3089;
-  fra.me.meth = LOCATE_parser___ReduceAction59___action;
+  fra.me.line = 8758;
+  fra.me.meth = LOCATE_parser___ReduceAction176___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
@@ -11509,112 +26108,85 @@ void parser___ReduceAction59___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:3091 */
+  /* parser/parser.nit:8760 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3092 */
+  /* parser/parser.nit:8761 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3093 */
+  /* parser/parser.nit:8762 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3094 */
+  /* parser/parser.nit:8763 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8764 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3095 */
+  /* parser/parser.nit:8765 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8766 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3096 */
+  /* parser/parser.nit:8767 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3097 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3098 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3099 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3101 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:8768 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8769 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8770 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8772 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3101);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8772);
   }
-  /* parser/parser.nit:3103 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8774 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3103);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8774);
   }
-  /* parser/parser.nit:3104 */
-  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:3106 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8776 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3106);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8776);
   }
-  /* parser/parser.nit:3107 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3109 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8778 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3109);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8778);
   }
-  /* parser/parser.nit:3110 */
-  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:3111 */
-  fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* parser/parser.nit:3115 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8780 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3115);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8780);
   }
-  /* parser/parser.nit:3116 */
-  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:3117 */
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  /* parser/parser.nit:8782 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:3118 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[6]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8782);
   }
-  /* parser/parser.nit:3120 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8784 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8784);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:8786 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:3121 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8786);
   }
-  /* parser/parser.nit:3123 */
-  fra.me.REG[10] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[7], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* parser/parser.nit:3129 */
-  fra.me.REG[2] = fra.me.REG[10];
-  /* parser/parser.nit:3130 */
+  /* parser/parser.nit:8787 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:8798 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8799 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3130);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8799);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11622,18 +26194,17 @@ void parser___ReduceAction59___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction60___action[] = "parser::ReduceAction60::(parser::ReduceAction::action)";
-void parser___ReduceAction60___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction177___action[] = "parser::ReduceAction177::(parser::ReduceAction::action)";
+void parser___ReduceAction177___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3135;
-  fra.me.meth = LOCATE_parser___ReduceAction60___action;
+  fra.me.line = 8804;
+  fra.me.meth = LOCATE_parser___ReduceAction177___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -11644,107 +26215,71 @@ void parser___ReduceAction60___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:3137 */
+  /* parser/parser.nit:8806 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3138 */
+  /* parser/parser.nit:8807 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3139 */
+  /* parser/parser.nit:8808 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8809 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3140 */
+  /* parser/parser.nit:8810 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8811 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3141 */
+  /* parser/parser.nit:8812 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3142 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3143 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3144 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3146 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8813 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8814 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8816 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3146);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8816);
   }
-  /* parser/parser.nit:3147 */
-  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:3149 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8818 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3149);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8818);
   }
-  /* parser/parser.nit:3150 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3152 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8820 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3152);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8820);
   }
-  /* parser/parser.nit:3153 */
-  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:3154 */
-  fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* parser/parser.nit:3158 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8822 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3158);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8822);
   }
-  /* parser/parser.nit:3159 */
-  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:3160 */
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  /* parser/parser.nit:8824 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:3161 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[6]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8824);
   }
-  /* parser/parser.nit:3163 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8826 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:3164 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8826);
   }
-  /* parser/parser.nit:3166 */
-  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* parser/parser.nit:3172 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* parser/parser.nit:3173 */
+  /* parser/parser.nit:8827 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:8838 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8839 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3173);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8839);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11752,18 +26287,17 @@ void parser___ReduceAction60___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction61___action[] = "parser::ReduceAction61::(parser::ReduceAction::action)";
-void parser___ReduceAction61___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction178___action[] = "parser::ReduceAction178::(parser::ReduceAction::action)";
+void parser___ReduceAction178___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3178;
-  fra.me.meth = LOCATE_parser___ReduceAction61___action;
+  fra.me.line = 8844;
+  fra.me.meth = LOCATE_parser___ReduceAction178___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -11775,115 +26309,79 @@ void parser___ReduceAction61___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:3180 */
+  /* parser/parser.nit:8846 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3181 */
+  /* parser/parser.nit:8847 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3182 */
+  /* parser/parser.nit:8848 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3183 */
+  /* parser/parser.nit:8849 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8850 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8851 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3184 */
+  /* parser/parser.nit:8852 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3185 */
+  /* parser/parser.nit:8853 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3186 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3187 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3188 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3190 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:8854 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8855 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8857 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3190);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8857);
   }
-  /* parser/parser.nit:3192 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8859 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3192);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8859);
   }
-  /* parser/parser.nit:3193 */
-  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:3195 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8861 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3195);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8861);
   }
-  /* parser/parser.nit:3196 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3198 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8863 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3198);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8863);
   }
-  /* parser/parser.nit:3199 */
-  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:3200 */
-  fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* parser/parser.nit:3204 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8865 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3204);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8865);
   }
-  /* parser/parser.nit:3205 */
-  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:3206 */
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  /* parser/parser.nit:8867 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:3207 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[6]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8867);
   }
-  /* parser/parser.nit:3209 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8869 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:3210 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8869);
   }
-  /* parser/parser.nit:3212 */
-  fra.me.REG[10] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[7], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* parser/parser.nit:3218 */
-  fra.me.REG[2] = fra.me.REG[10];
-  /* parser/parser.nit:3219 */
+  /* parser/parser.nit:8870 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:8881 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8882 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3219);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8882);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -11891,18 +26389,17 @@ void parser___ReduceAction61___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction62___action[] = "parser::ReduceAction62::(parser::ReduceAction::action)";
-void parser___ReduceAction62___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction179___action[] = "parser::ReduceAction179::(parser::ReduceAction::action)";
+void parser___ReduceAction179___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3224;
-  fra.me.meth = LOCATE_parser___ReduceAction62___action;
+  fra.me.line = 8887;
+  fra.me.meth = LOCATE_parser___ReduceAction179___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -11914,118 +26411,79 @@ void parser___ReduceAction62___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:3226 */
+  /* parser/parser.nit:8889 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3227 */
+  /* parser/parser.nit:8890 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3228 */
+  /* parser/parser.nit:8891 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3229 */
+  /* parser/parser.nit:8892 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3230 */
+  /* parser/parser.nit:8893 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8894 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8895 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3231 */
+  /* parser/parser.nit:8896 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3232 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3233 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3234 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3236 */
-  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8897 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8898 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8900 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3236);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8900);
   }
-  /* parser/parser.nit:3237 */
-  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[7]);
-  fra.me.REG[8] = fra.me.REG[7];
-  /* parser/parser.nit:3239 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8902 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3239);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8902);
   }
-  /* parser/parser.nit:3240 */
-  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:3242 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8904 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3242);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8904);
   }
-  /* parser/parser.nit:3243 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3245 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8906 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3245);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8906);
   }
-  /* parser/parser.nit:3246 */
-  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:3247 */
-  fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* parser/parser.nit:3251 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8908 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3251);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8908);
   }
-  /* parser/parser.nit:3252 */
-  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:3253 */
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  /* parser/parser.nit:8910 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:3254 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[6]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8910);
   }
-  /* parser/parser.nit:3256 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8912 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:3257 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8912);
   }
-  /* parser/parser.nit:3259 */
-  fra.me.REG[10] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* parser/parser.nit:3265 */
-  fra.me.REG[2] = fra.me.REG[10];
-  /* parser/parser.nit:3266 */
+  /* parser/parser.nit:8913 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:8924 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8925 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3266);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8925);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12033,18 +26491,17 @@ void parser___ReduceAction62___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction63___action[] = "parser::ReduceAction63::(parser::ReduceAction::action)";
-void parser___ReduceAction63___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+static const char LOCATE_parser___ReduceAction180___action[] = "parser::ReduceAction180::(parser::ReduceAction::action)";
+void parser___ReduceAction180___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3271;
-  fra.me.meth = LOCATE_parser___ReduceAction63___action;
+  fra.me.line = 8930;
+  fra.me.meth = LOCATE_parser___ReduceAction180___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -12057,126 +26514,87 @@ void parser___ReduceAction63___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:3273 */
+  /* parser/parser.nit:8932 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3274 */
+  /* parser/parser.nit:8933 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3275 */
+  /* parser/parser.nit:8934 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3276 */
+  /* parser/parser.nit:8935 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3277 */
+  /* parser/parser.nit:8936 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8937 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8938 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3278 */
+  /* parser/parser.nit:8939 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3279 */
+  /* parser/parser.nit:8940 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3280 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3281 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3282 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3284 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:8941 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8942 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8944 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3284);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8944);
   }
-  /* parser/parser.nit:3286 */
-  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8946 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3286);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8946);
   }
-  /* parser/parser.nit:3287 */
-  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[7]);
-  fra.me.REG[9] = fra.me.REG[7];
-  /* parser/parser.nit:3289 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8948 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3289);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8948);
   }
-  /* parser/parser.nit:3290 */
-  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[6]);
-  fra.me.REG[10] = fra.me.REG[6];
-  /* parser/parser.nit:3292 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8950 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3292);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8950);
   }
-  /* parser/parser.nit:3293 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3295 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8952 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3295);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8952);
   }
-  /* parser/parser.nit:3296 */
-  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:3297 */
-  fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* parser/parser.nit:3301 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:8954 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3301);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8954);
   }
-  /* parser/parser.nit:3302 */
-  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:3303 */
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  /* parser/parser.nit:8956 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:3304 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[6]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8956);
   }
-  /* parser/parser.nit:3306 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:8958 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:3307 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[3]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8958);
   }
-  /* parser/parser.nit:3309 */
-  fra.me.REG[11] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[8], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* parser/parser.nit:3315 */
-  fra.me.REG[2] = fra.me.REG[11];
-  /* parser/parser.nit:3316 */
+  /* parser/parser.nit:8959 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:8970 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8971 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3316);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8971);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12184,17 +26602,17 @@ void parser___ReduceAction63___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction64___action[] = "parser::ReduceAction64::(parser::ReduceAction::action)";
-void parser___ReduceAction64___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction181___action[] = "parser::ReduceAction181::(parser::ReduceAction::action)";
+void parser___ReduceAction181___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 = 3321;
-  fra.me.meth = LOCATE_parser___ReduceAction64___action;
+  fra.me.line = 8976;
+  fra.me.meth = LOCATE_parser___ReduceAction181___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -12202,47 +26620,83 @@ void parser___ReduceAction64___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[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:3323 */
+  /* parser/parser.nit:8978 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3324 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3325 */
+  /* parser/parser.nit:8979 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3326 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3327 */
+  /* parser/parser.nit:8980 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3328 */
+  /* parser/parser.nit:8981 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3330 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:8982 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8983 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8984 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8985 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8986 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8987 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8989 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8989);
+  }
+  /* parser/parser.nit:8991 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8991);
+  }
+  /* parser/parser.nit:8993 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8993);
+  }
+  /* parser/parser.nit:8995 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3330);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8995);
   }
-  /* parser/parser.nit:3332 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwmodule, ID_parser___parser_nodes___TKwmodule)) /*cast nullable TKwmodule*/;
+  /* parser/parser.nit:8997 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3332);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8997);
   }
-  /* parser/parser.nit:3334 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AModuleName, ID_parser___parser_nodes___AModuleName)) /*cast nullable AModuleName*/;
+  /* parser/parser.nit:8999 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3334);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8999);
   }
-  /* parser/parser.nit:3335 */
-  fra.me.REG[3] = NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:3340 */
+  /* parser/parser.nit:9001 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9001);
+  }
+  /* parser/parser.nit:9002 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9013 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:3341 */
+  /* parser/parser.nit:9014 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3341);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9014);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12250,17 +26704,17 @@ void parser___ReduceAction64___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction65___action[] = "parser::ReduceAction65::(parser::ReduceAction::action)";
-void parser___ReduceAction65___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction182___action[] = "parser::ReduceAction182::(parser::ReduceAction::action)";
+void parser___ReduceAction182___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3346;
-  fra.me.meth = LOCATE_parser___ReduceAction65___action;
+  fra.me.line = 9019;
+  fra.me.meth = LOCATE_parser___ReduceAction182___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -12269,49 +26723,91 @@ void parser___ReduceAction65___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:3348 */
+  /* parser/parser.nit:9021 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3349 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3350 */
+  /* parser/parser.nit:9022 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3351 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3352 */
+  /* parser/parser.nit:9023 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3353 */
+  /* parser/parser.nit:9024 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3354 */
+  /* parser/parser.nit:9025 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9026 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9027 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3356 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:9028 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9029 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9030 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9031 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9033 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3356);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9033);
   }
-  /* parser/parser.nit:3358 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
+  /* parser/parser.nit:9035 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3358);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9035);
   }
-  /* parser/parser.nit:3360 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AModuleName, ID_parser___parser_nodes___AModuleName)) /*cast nullable AModuleName*/;
+  /* parser/parser.nit:9037 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3360);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9037);
   }
-  /* parser/parser.nit:3361 */
-  fra.me.REG[3] = NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:3366 */
+  /* parser/parser.nit:9039 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9039);
+  }
+  /* parser/parser.nit:9041 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9041);
+  }
+  /* parser/parser.nit:9043 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9043);
+  }
+  /* parser/parser.nit:9045 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9045);
+  }
+  /* parser/parser.nit:9047 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9047);
+  }
+  /* parser/parser.nit:9048 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9059 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:3367 */
+  /* parser/parser.nit:9060 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3367);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9060);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12319,17 +26815,17 @@ void parser___ReduceAction65___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction66___action[] = "parser::ReduceAction66::(parser::ReduceAction::action)";
-void parser___ReduceAction66___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction183___action[] = "parser::ReduceAction183::(parser::ReduceAction::action)";
+void parser___ReduceAction183___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3372;
-  fra.me.meth = LOCATE_parser___ReduceAction66___action;
+  fra.me.line = 9065;
+  fra.me.meth = LOCATE_parser___ReduceAction183___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -12338,49 +26834,91 @@ void parser___ReduceAction66___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:3374 */
+  /* parser/parser.nit:9067 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3375 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3376 */
+  /* parser/parser.nit:9068 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3377 */
+  /* parser/parser.nit:9069 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3378 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3379 */
+  /* parser/parser.nit:9070 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3380 */
+  /* parser/parser.nit:9071 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3382 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:9072 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9073 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9074 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9075 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9076 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9077 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9079 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3382);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9079);
   }
-  /* parser/parser.nit:3384 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
+  /* parser/parser.nit:9081 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3384);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9081);
   }
-  /* parser/parser.nit:3386 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9083 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3386);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9083);
   }
-  /* parser/parser.nit:3387 */
-  fra.me.REG[3] = NEW_ANoImport_parser___parser_prod___ANoImport___init_anoimport(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:3392 */
+  /* parser/parser.nit:9085 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9085);
+  }
+  /* parser/parser.nit:9087 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9087);
+  }
+  /* parser/parser.nit:9089 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9089);
+  }
+  /* parser/parser.nit:9091 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9091);
+  }
+  /* parser/parser.nit:9093 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9093);
+  }
+  /* parser/parser.nit:9094 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(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], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9105 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:3393 */
+  /* parser/parser.nit:9106 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3393);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9106);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12388,65 +26926,119 @@ void parser___ReduceAction66___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction67___action[] = "parser::ReduceAction67::(parser::ReduceAction::action)";
-void parser___ReduceAction67___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction184___action[] = "parser::ReduceAction184::(parser::ReduceAction::action)";
+void parser___ReduceAction184___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3398;
-  fra.me.meth = LOCATE_parser___ReduceAction67___action;
+  fra.me.line = 9111;
+  fra.me.meth = LOCATE_parser___ReduceAction184___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 12;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[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:3400 */
+  /* parser/parser.nit:9113 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3401 */
+  /* parser/parser.nit:9114 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3402 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3404 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___APropdef, ID_parser___parser_nodes___APropdef)) /*cast nullable APropdef*/;
+  /* parser/parser.nit:9115 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9116 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9117 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9118 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9119 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9120 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9121 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9122 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9123 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9124 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9126 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3404);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9126);
   }
-  /* parser/parser.nit:3405 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:9128 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9128);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:9130 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:3406 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9130);
   }
-  /* parser/parser.nit:3408 */
-  fra.me.REG[4] = NEW_AMainClassdef_parser___parser_prod___AMainClassdef___init_amainclassdef(fra.me.REG[4]);
-  /* parser/parser.nit:3411 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:3412 */
+  /* parser/parser.nit:9132 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9132);
+  }
+  /* parser/parser.nit:9134 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9134);
+  }
+  /* parser/parser.nit:9136 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9136);
+  }
+  /* parser/parser.nit:9138 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9138);
+  }
+  /* parser/parser.nit:9140 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9140);
+  }
+  /* parser/parser.nit:9142 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9142);
+  }
+  /* parser/parser.nit:9143 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(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], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9154 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:9155 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____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, 9155);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12454,35 +27046,88 @@ void parser___ReduceAction67___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction68___action[] = "parser::ReduceAction68::(parser::ReduceAction::action)";
-void parser___ReduceAction68___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction185___action[] = "parser::ReduceAction185::(parser::ReduceAction::action)";
+void parser___ReduceAction185___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3417;
-  fra.me.meth = LOCATE_parser___ReduceAction68___action;
+  fra.me.line = 9160;
+  fra.me.meth = LOCATE_parser___ReduceAction185___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:3419 */
+  /* parser/parser.nit:9162 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3420 */
+  /* parser/parser.nit:9163 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3421 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3422 */
+  /* parser/parser.nit:9164 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9165 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9166 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9167 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9168 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9170 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9170);
+  }
+  /* parser/parser.nit:9172 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9172);
+  }
+  /* parser/parser.nit:9174 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9174);
+  }
+  /* parser/parser.nit:9176 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9176);
+  }
+  /* parser/parser.nit:9178 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9178);
+  }
+  /* parser/parser.nit:9180 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9180);
+  }
+  /* parser/parser.nit:9181 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:9192 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:9193 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3422);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9193);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12490,46 +27135,97 @@ void parser___ReduceAction68___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction69___action[] = "parser::ReduceAction69::(parser::ReduceAction::action)";
-void parser___ReduceAction69___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction186___action[] = "parser::ReduceAction186::(parser::ReduceAction::action)";
+void parser___ReduceAction186___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 = 3427;
-  fra.me.meth = LOCATE_parser___ReduceAction69___action;
+  fra.me.line = 9198;
+  fra.me.meth = LOCATE_parser___ReduceAction186___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:3429 */
+  /* parser/parser.nit:9200 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3430 */
+  /* parser/parser.nit:9201 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3431 */
+  /* parser/parser.nit:9202 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3433 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9203 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9204 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9205 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9206 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9207 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9209 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3433);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9209);
   }
-  /* parser/parser.nit:3434 */
-  fra.me.REG[3] = NEW_AMainMethPropdef_parser___parser_prod___AMainMethPropdef___init_amainmethpropdef(NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:3438 */
+  /* parser/parser.nit:9211 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9211);
+  }
+  /* parser/parser.nit:9213 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9213);
+  }
+  /* parser/parser.nit:9215 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9215);
+  }
+  /* parser/parser.nit:9217 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9217);
+  }
+  /* parser/parser.nit:9219 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9219);
+  }
+  /* parser/parser.nit:9221 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9221);
+  }
+  /* parser/parser.nit:9222 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:9233 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:3439 */
+  /* parser/parser.nit:9234 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3439);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9234);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12537,17 +27233,17 @@ void parser___ReduceAction69___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction71___action[] = "parser::ReduceAction71::(parser::ReduceAction::action)";
-void parser___ReduceAction71___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction187___action[] = "parser::ReduceAction187::(parser::ReduceAction::action)";
+void parser___ReduceAction187___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 = 3444;
-  fra.me.meth = LOCATE_parser___ReduceAction71___action;
+  fra.me.line = 9239;
+  fra.me.meth = LOCATE_parser___ReduceAction187___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -12559,70 +27255,75 @@ void parser___ReduceAction71___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:3446 */
+  /* parser/parser.nit:9241 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3447 */
+  /* parser/parser.nit:9242 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3448 */
+  /* parser/parser.nit:9243 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3449 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3450 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3451 */
+  /* parser/parser.nit:9244 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3452 */
+  /* parser/parser.nit:9245 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3453 */
+  /* parser/parser.nit:9246 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3454 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3455 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3456 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3458 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:9247 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9248 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9250 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3458);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9250);
   }
-  /* parser/parser.nit:3460 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:9252 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3460);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9252);
   }
-  /* parser/parser.nit:3462 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9254 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3462);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9254);
   }
-  /* parser/parser.nit:3464 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9256 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3464);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9256);
   }
-  /* parser/parser.nit:3466 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9258 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3466);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9258);
   }
-  /* parser/parser.nit:3467 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[8], NIT_NULL, fra.me.REG[9], fra.me.REG[10], fra.me.REG[3]);
-  /* parser/parser.nit:3479 */
+  /* parser/parser.nit:9260 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9260);
+  }
+  /* parser/parser.nit:9262 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9262);
+  }
+  /* parser/parser.nit:9263 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9274 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:3480 */
+  /* parser/parser.nit:9275 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3480);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9275);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12630,17 +27331,17 @@ void parser___ReduceAction71___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction72___action[] = "parser::ReduceAction72::(parser::ReduceAction::action)";
-void parser___ReduceAction72___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+static const char LOCATE_parser___ReduceAction188___action[] = "parser::ReduceAction188::(parser::ReduceAction::action)";
+void parser___ReduceAction188___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3485;
-  fra.me.meth = LOCATE_parser___ReduceAction72___action;
+  fra.me.line = 9280;
+  fra.me.meth = LOCATE_parser___ReduceAction188___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -12653,78 +27354,83 @@ void parser___ReduceAction72___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:3487 */
+  /* parser/parser.nit:9282 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3488 */
+  /* parser/parser.nit:9283 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3489 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3490 */
+  /* parser/parser.nit:9284 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3491 */
+  /* parser/parser.nit:9285 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3492 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3493 */
+  /* parser/parser.nit:9286 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3494 */
+  /* parser/parser.nit:9287 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3495 */
+  /* parser/parser.nit:9288 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3496 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3497 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3498 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3500 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:9289 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9290 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9292 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3500);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9292);
   }
-  /* parser/parser.nit:3502 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:9294 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3502);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9294);
   }
-  /* parser/parser.nit:3504 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:9296 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3504);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9296);
   }
-  /* parser/parser.nit:3506 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9298 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3506);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9298);
   }
-  /* parser/parser.nit:3508 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9300 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3508);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9300);
   }
-  /* parser/parser.nit:3510 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9302 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3510);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9302);
   }
-  /* parser/parser.nit:3511 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[9], NIT_NULL, fra.me.REG[10], fra.me.REG[11], fra.me.REG[3]);
-  /* parser/parser.nit:3523 */
+  /* parser/parser.nit:9304 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9304);
+  }
+  /* parser/parser.nit:9306 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9306);
+  }
+  /* parser/parser.nit:9307 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9318 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:3524 */
+  /* parser/parser.nit:9319 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____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, 9319);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12732,17 +27438,17 @@ void parser___ReduceAction72___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction73___action[] = "parser::ReduceAction73::(parser::ReduceAction::action)";
-void parser___ReduceAction73___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+static const char LOCATE_parser___ReduceAction189___action[] = "parser::ReduceAction189::(parser::ReduceAction::action)";
+void parser___ReduceAction189___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3529;
-  fra.me.meth = LOCATE_parser___ReduceAction73___action;
+  fra.me.line = 9324;
+  fra.me.meth = LOCATE_parser___ReduceAction189___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -12751,85 +27457,51 @@ void parser___ReduceAction73___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:3531 */
+  /* parser/parser.nit:9326 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3532 */
+  /* parser/parser.nit:9327 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3533 */
+  /* parser/parser.nit:9328 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3534 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3535 */
+  /* parser/parser.nit:9329 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3536 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3537 */
+  /* parser/parser.nit:9330 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3538 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3539 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3540 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3541 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3542 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3544 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3544);
-  }
-  /* parser/parser.nit:3546 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3546);
-  }
-  /* parser/parser.nit:3548 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9332 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3548);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9332);
   }
-  /* parser/parser.nit:3550 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9334 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3550);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9334);
   }
-  /* parser/parser.nit:3552 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9336 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3552);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9336);
   }
-  /* parser/parser.nit:3553 */
-  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:3555 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9338 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3555);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9338);
   }
-  /* parser/parser.nit:3556 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], NIT_NULL, fra.me.REG[10], fra.me.REG[11], fra.me.REG[3]);
-  /* parser/parser.nit:3568 */
+  /* parser/parser.nit:9339 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9352 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:3569 */
+  /* parser/parser.nit:9353 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3569);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9353);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12837,17 +27509,17 @@ void parser___ReduceAction73___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction74___action[] = "parser::ReduceAction74::(parser::ReduceAction::action)";
-void parser___ReduceAction74___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+static const char LOCATE_parser___ReduceAction190___action[] = "parser::ReduceAction190::(parser::ReduceAction::action)";
+void parser___ReduceAction190___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3574;
-  fra.me.meth = LOCATE_parser___ReduceAction74___action;
+  fra.me.line = 9358;
+  fra.me.meth = LOCATE_parser___ReduceAction190___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -12857,93 +27529,59 @@ 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[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:3576 */
+  /* parser/parser.nit:9360 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3577 */
+  /* parser/parser.nit:9361 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3578 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3579 */
+  /* parser/parser.nit:9362 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3580 */
+  /* parser/parser.nit:9363 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3581 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3582 */
+  /* parser/parser.nit:9364 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3583 */
+  /* parser/parser.nit:9365 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3584 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3585 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3586 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3587 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3588 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3590 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3590);
-  }
-  /* parser/parser.nit:3592 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3592);
-  }
-  /* parser/parser.nit:3594 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:9367 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3594);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9367);
   }
-  /* parser/parser.nit:3596 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9369 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3596);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9369);
   }
-  /* parser/parser.nit:3598 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9371 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3598);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9371);
   }
-  /* parser/parser.nit:3600 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9373 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3600);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9373);
   }
-  /* parser/parser.nit:3601 */
-  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:3603 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9375 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3603);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9375);
   }
-  /* parser/parser.nit:3604 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], NIT_NULL, fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
-  /* parser/parser.nit:3616 */
+  /* parser/parser.nit:9376 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9389 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:3617 */
+  /* parser/parser.nit:9390 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3617);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9390);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -12951,17 +27589,17 @@ void parser___ReduceAction74___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction75___action[] = "parser::ReduceAction75::(parser::ReduceAction::action)";
-void parser___ReduceAction75___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+static const char LOCATE_parser___ReduceAction191___action[] = "parser::ReduceAction191::(parser::ReduceAction::action)";
+void parser___ReduceAction191___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3622;
-  fra.me.meth = LOCATE_parser___ReduceAction75___action;
+  fra.me.line = 9395;
+  fra.me.meth = LOCATE_parser___ReduceAction191___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -12971,81 +27609,59 @@ 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[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:3624 */
+  /* parser/parser.nit:9397 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3625 */
+  /* parser/parser.nit:9398 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3626 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3627 */
+  /* parser/parser.nit:9399 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3628 */
+  /* parser/parser.nit:9400 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3629 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3630 */
+  /* parser/parser.nit:9401 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3631 */
+  /* parser/parser.nit:9402 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3632 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3633 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3634 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3635 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3637 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3637);
-  }
-  /* parser/parser.nit:3639 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:9404 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3639);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9404);
   }
-  /* parser/parser.nit:3641 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9406 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3641);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9406);
   }
-  /* parser/parser.nit:3643 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9408 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3643);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9408);
   }
-  /* parser/parser.nit:3645 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:9410 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3645);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9410);
   }
-  /* parser/parser.nit:3647 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9412 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3647);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9412);
   }
-  /* parser/parser.nit:3648 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], fra.me.REG[4], fra.me.REG[10], fra.me.REG[11], fra.me.REG[3]);
-  /* parser/parser.nit:3660 */
+  /* parser/parser.nit:9413 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], fra.me.REG[6], NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9426 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:3661 */
+  /* parser/parser.nit:9427 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3661);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9427);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13053,17 +27669,17 @@ void parser___ReduceAction75___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction76___action[] = "parser::ReduceAction76::(parser::ReduceAction::action)";
-void parser___ReduceAction76___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+static const char LOCATE_parser___ReduceAction192___action[] = "parser::ReduceAction192::(parser::ReduceAction::action)";
+void parser___ReduceAction192___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3666;
-  fra.me.meth = LOCATE_parser___ReduceAction76___action;
+  fra.me.line = 9432;
+  fra.me.meth = LOCATE_parser___ReduceAction192___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -13074,89 +27690,67 @@ void parser___ReduceAction76___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:3668 */
+  /* parser/parser.nit:9434 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3669 */
+  /* parser/parser.nit:9435 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3670 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3671 */
+  /* parser/parser.nit:9436 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3672 */
+  /* parser/parser.nit:9437 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3673 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3674 */
+  /* parser/parser.nit:9438 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3675 */
+  /* parser/parser.nit:9439 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3676 */
+  /* parser/parser.nit:9440 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3677 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3678 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3679 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3680 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3682 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3682);
-  }
-  /* parser/parser.nit:3684 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:9442 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3684);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9442);
   }
-  /* parser/parser.nit:3686 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:9444 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3686);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9444);
   }
-  /* parser/parser.nit:3688 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9446 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3688);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9446);
   }
-  /* parser/parser.nit:3690 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9448 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3690);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9448);
   }
-  /* parser/parser.nit:3692 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:9450 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3692);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9450);
   }
-  /* parser/parser.nit:3694 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9452 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3694);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9452);
   }
-  /* parser/parser.nit:3695 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], fra.me.REG[4], fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
-  /* parser/parser.nit:3707 */
+  /* parser/parser.nit:9453 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9466 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:3708 */
+  /* parser/parser.nit:9467 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3708);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9467);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13164,17 +27758,17 @@ void parser___ReduceAction76___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction77___action[] = "parser::ReduceAction77::(parser::ReduceAction::action)";
-void parser___ReduceAction77___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+static const char LOCATE_parser___ReduceAction193___action[] = "parser::ReduceAction193::(parser::ReduceAction::action)";
+void parser___ReduceAction193___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3713;
-  fra.me.meth = LOCATE_parser___ReduceAction77___action;
+  fra.me.line = 9472;
+  fra.me.meth = LOCATE_parser___ReduceAction193___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -13184,93 +27778,59 @@ 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[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:3715 */
+  /* parser/parser.nit:9474 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3716 */
+  /* parser/parser.nit:9475 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3717 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3718 */
+  /* parser/parser.nit:9476 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3719 */
+  /* parser/parser.nit:9477 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3720 */
+  /* parser/parser.nit:9478 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3721 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3722 */
+  /* parser/parser.nit:9479 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3723 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3724 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3725 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3726 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3727 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3729 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3729);
-  }
-  /* parser/parser.nit:3731 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3731);
-  }
-  /* parser/parser.nit:3733 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9481 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3733);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9481);
   }
-  /* parser/parser.nit:3735 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9483 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3735);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9483);
   }
-  /* parser/parser.nit:3737 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9485 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3737);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9485);
   }
-  /* parser/parser.nit:3738 */
-  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:3740 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:9487 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3740);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9487);
   }
-  /* parser/parser.nit:3742 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9489 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3742);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9489);
   }
-  /* parser/parser.nit:3743 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], fra.me.REG[4], fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
-  /* parser/parser.nit:3755 */
+  /* parser/parser.nit:9490 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9503 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:3756 */
+  /* parser/parser.nit:9504 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3756);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9504);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13278,17 +27838,17 @@ void parser___ReduceAction77___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction78___action[] = "parser::ReduceAction78::(parser::ReduceAction::action)";
-void parser___ReduceAction78___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+static const char LOCATE_parser___ReduceAction194___action[] = "parser::ReduceAction194::(parser::ReduceAction::action)";
+void parser___ReduceAction194___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3761;
-  fra.me.meth = LOCATE_parser___ReduceAction78___action;
+  fra.me.line = 9509;
+  fra.me.meth = LOCATE_parser___ReduceAction194___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 14;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -13299,101 +27859,67 @@ void parser___ReduceAction78___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
-  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:3763 */
+  /* parser/parser.nit:9511 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3764 */
+  /* parser/parser.nit:9512 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3765 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3766 */
+  /* parser/parser.nit:9513 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3767 */
+  /* parser/parser.nit:9514 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3768 */
+  /* parser/parser.nit:9515 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3769 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3770 */
+  /* parser/parser.nit:9516 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3771 */
+  /* parser/parser.nit:9517 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3772 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3773 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3774 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3775 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3776 */
-  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3778 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3778);
-  }
-  /* parser/parser.nit:3780 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3780);
-  }
-  /* parser/parser.nit:3782 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:9519 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3782);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9519);
   }
-  /* parser/parser.nit:3784 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9521 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3784);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9521);
   }
-  /* parser/parser.nit:3786 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9523 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3786);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9523);
   }
-  /* parser/parser.nit:3788 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9525 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3788);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9525);
   }
-  /* parser/parser.nit:3789 */
-  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:3791 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:9527 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3791);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9527);
   }
-  /* parser/parser.nit:3793 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9529 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3793);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9529);
   }
-  /* parser/parser.nit:3794 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], fra.me.REG[4], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
-  /* parser/parser.nit:3806 */
+  /* parser/parser.nit:9530 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9543 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:3807 */
+  /* parser/parser.nit:9544 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3807);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9544);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13401,17 +27927,17 @@ void parser___ReduceAction78___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction79___action[] = "parser::ReduceAction79::(parser::ReduceAction::action)";
-void parser___ReduceAction79___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+static const char LOCATE_parser___ReduceAction195___action[] = "parser::ReduceAction195::(parser::ReduceAction::action)";
+void parser___ReduceAction195___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3812;
-  fra.me.meth = LOCATE_parser___ReduceAction79___action;
+  fra.me.line = 9549;
+  fra.me.meth = LOCATE_parser___ReduceAction195___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -13422,83 +27948,67 @@ void parser___ReduceAction79___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:3814 */
+  /* parser/parser.nit:9551 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3815 */
+  /* parser/parser.nit:9552 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3816 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3817 */
+  /* parser/parser.nit:9553 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3818 */
+  /* parser/parser.nit:9554 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3819 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3820 */
+  /* parser/parser.nit:9555 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3821 */
+  /* parser/parser.nit:9556 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3822 */
+  /* parser/parser.nit:9557 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3823 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3824 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3825 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3827 */
+  /* parser/parser.nit:9559 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3827);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9559);
   }
-  /* parser/parser.nit:3829 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:9561 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3829);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9561);
   }
-  /* parser/parser.nit:3831 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9563 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3831);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9563);
   }
-  /* parser/parser.nit:3833 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9565 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3833);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9565);
   }
-  /* parser/parser.nit:3835 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9567 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3835);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9567);
   }
-  /* parser/parser.nit:3836 */
-  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:3838 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9569 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3838);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9569);
   }
-  /* parser/parser.nit:3839 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], NIT_NULL, fra.me.REG[10], fra.me.REG[11], fra.me.REG[3]);
-  /* parser/parser.nit:3851 */
+  /* parser/parser.nit:9570 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9583 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:3852 */
+  /* parser/parser.nit:9584 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3852);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9584);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13506,17 +28016,17 @@ void parser___ReduceAction79___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction80___action[] = "parser::ReduceAction80::(parser::ReduceAction::action)";
-void parser___ReduceAction80___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+static const char LOCATE_parser___ReduceAction196___action[] = "parser::ReduceAction196::(parser::ReduceAction::action)";
+void parser___ReduceAction196___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 = 3857;
-  fra.me.meth = LOCATE_parser___ReduceAction80___action;
+  fra.me.line = 9589;
+  fra.me.meth = LOCATE_parser___ReduceAction196___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -13528,91 +28038,75 @@ void parser___ReduceAction80___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[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:3859 */
+  /* parser/parser.nit:9591 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3860 */
+  /* parser/parser.nit:9592 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3861 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3862 */
+  /* parser/parser.nit:9593 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3863 */
+  /* parser/parser.nit:9594 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3864 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3865 */
+  /* parser/parser.nit:9595 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3866 */
+  /* parser/parser.nit:9596 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3867 */
+  /* parser/parser.nit:9597 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3868 */
+  /* parser/parser.nit:9598 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3869 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3870 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3871 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3873 */
+  /* parser/parser.nit:9600 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3873);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9600);
   }
-  /* parser/parser.nit:3875 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:9602 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3875);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9602);
   }
-  /* parser/parser.nit:3877 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:9604 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3877);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9604);
   }
-  /* parser/parser.nit:3879 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9606 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3879);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9606);
   }
-  /* parser/parser.nit:3881 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9608 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3881);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9608);
   }
-  /* parser/parser.nit:3883 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9610 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3883);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9610);
   }
-  /* parser/parser.nit:3884 */
-  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:3886 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9612 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3886);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9612);
   }
-  /* parser/parser.nit:3887 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], NIT_NULL, fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
-  /* parser/parser.nit:3899 */
+  /* parser/parser.nit:9613 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9626 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:3900 */
+  /* parser/parser.nit:9627 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3900);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9627);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13620,17 +28114,17 @@ void parser___ReduceAction80___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction81___action[] = "parser::ReduceAction81::(parser::ReduceAction::action)";
-void parser___ReduceAction81___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+static const char LOCATE_parser___ReduceAction197___action[] = "parser::ReduceAction197::(parser::ReduceAction::action)";
+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 = 3905;
-  fra.me.meth = LOCATE_parser___ReduceAction81___action;
+  fra.me.line = 9632;
+  fra.me.meth = LOCATE_parser___ReduceAction197___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -13640,96 +28134,59 @@ void parser___ReduceAction81___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:3907 */
+  /* parser/parser.nit:9634 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3908 */
+  /* parser/parser.nit:9635 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3909 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3910 */
+  /* parser/parser.nit:9636 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3911 */
+  /* parser/parser.nit:9637 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3912 */
+  /* parser/parser.nit:9638 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3913 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3914 */
+  /* parser/parser.nit:9639 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3915 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3916 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3917 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3918 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3919 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3921 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3921);
-  }
-  /* parser/parser.nit:3923 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3923);
-  }
-  /* parser/parser.nit:3925 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9641 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3925);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9641);
   }
-  /* parser/parser.nit:3927 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9643 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3927);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9643);
   }
-  /* parser/parser.nit:3929 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9645 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3929);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9645);
   }
-  /* parser/parser.nit:3930 */
-  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:3932 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9647 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3932);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9647);
   }
-  /* parser/parser.nit:3933 */
-  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:3935 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9649 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3935);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9649);
   }
-  /* parser/parser.nit:3936 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], NIT_NULL, fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
-  /* parser/parser.nit:3948 */
+  /* parser/parser.nit:9650 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9663 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:3949 */
+  /* parser/parser.nit:9664 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3949);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9664);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13737,17 +28194,17 @@ void parser___ReduceAction81___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction82___action[] = "parser::ReduceAction82::(parser::ReduceAction::action)";
-void parser___ReduceAction82___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+static const char LOCATE_parser___ReduceAction198___action[] = "parser::ReduceAction198::(parser::ReduceAction::action)";
+void parser___ReduceAction198___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3954;
-  fra.me.meth = LOCATE_parser___ReduceAction82___action;
+  fra.me.line = 9669;
+  fra.me.meth = LOCATE_parser___ReduceAction198___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 14;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -13758,104 +28215,67 @@ void parser___ReduceAction82___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
-  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:3956 */
+  /* parser/parser.nit:9671 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:3957 */
+  /* parser/parser.nit:9672 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3958 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3959 */
+  /* parser/parser.nit:9673 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3960 */
+  /* parser/parser.nit:9674 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3961 */
+  /* parser/parser.nit:9675 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3962 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3963 */
+  /* parser/parser.nit:9676 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3964 */
+  /* parser/parser.nit:9677 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3965 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3966 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:3967 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3968 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3969 */
-  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:3971 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3971);
-  }
-  /* parser/parser.nit:3973 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3973);
-  }
-  /* parser/parser.nit:3975 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:9679 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3975);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9679);
   }
-  /* parser/parser.nit:3977 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9681 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3977);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9681);
   }
-  /* parser/parser.nit:3979 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9683 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3979);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9683);
   }
-  /* parser/parser.nit:3981 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9685 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3981);
-  }
-  /* parser/parser.nit:3982 */
-  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:3984 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9685);
+  }
+  /* parser/parser.nit:9687 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3984);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9687);
   }
-  /* parser/parser.nit:3985 */
-  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:3987 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9689 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3987);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9689);
   }
-  /* parser/parser.nit:3988 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], NIT_NULL, fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
-  /* parser/parser.nit:4000 */
+  /* parser/parser.nit:9690 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9703 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4001 */
+  /* parser/parser.nit:9704 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4001);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9704);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13863,17 +28283,17 @@ void parser___ReduceAction82___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction83___action[] = "parser::ReduceAction83::(parser::ReduceAction::action)";
-void parser___ReduceAction83___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+static const char LOCATE_parser___ReduceAction199___action[] = "parser::ReduceAction199::(parser::ReduceAction::action)";
+void parser___ReduceAction199___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4006;
-  fra.me.meth = LOCATE_parser___ReduceAction83___action;
+  fra.me.line = 9709;
+  fra.me.meth = LOCATE_parser___ReduceAction199___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -13884,92 +28304,67 @@ void parser___ReduceAction83___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4008 */
+  /* parser/parser.nit:9711 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4009 */
+  /* parser/parser.nit:9712 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4010 */
+  /* parser/parser.nit:9713 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4011 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4012 */
+  /* parser/parser.nit:9714 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4013 */
+  /* parser/parser.nit:9715 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4014 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4015 */
+  /* parser/parser.nit:9716 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4016 */
+  /* parser/parser.nit:9717 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4017 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4018 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4019 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4020 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4022 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4022);
-  }
-  /* parser/parser.nit:4024 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:9719 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4024);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9719);
   }
-  /* parser/parser.nit:4026 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9721 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4026);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9721);
   }
-  /* parser/parser.nit:4028 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9723 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4028);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9723);
   }
-  /* parser/parser.nit:4030 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:9725 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4030);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9725);
   }
-  /* parser/parser.nit:4032 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9727 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4032);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9727);
   }
-  /* parser/parser.nit:4033 */
-  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:4035 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9729 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4035);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9729);
   }
-  /* parser/parser.nit:4036 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], fra.me.REG[5], fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
-  /* parser/parser.nit:4048 */
+  /* parser/parser.nit:9730 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9743 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4049 */
+  /* parser/parser.nit:9744 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4049);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9744);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -13977,17 +28372,17 @@ void parser___ReduceAction83___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction84___action[] = "parser::ReduceAction84::(parser::ReduceAction::action)";
-void parser___ReduceAction84___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+static const char LOCATE_parser___ReduceAction200___action[] = "parser::ReduceAction200::(parser::ReduceAction::action)";
+void parser___ReduceAction200___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 = 4054;
-  fra.me.meth = LOCATE_parser___ReduceAction84___action;
+  fra.me.line = 9749;
+  fra.me.meth = LOCATE_parser___ReduceAction200___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 14;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -13999,100 +28394,75 @@ void parser___ReduceAction84___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
-  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4056 */
+  /* parser/parser.nit:9751 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4057 */
+  /* parser/parser.nit:9752 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4058 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4059 */
+  /* parser/parser.nit:9753 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4060 */
+  /* parser/parser.nit:9754 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4061 */
+  /* parser/parser.nit:9755 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4062 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4063 */
+  /* parser/parser.nit:9756 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4064 */
+  /* parser/parser.nit:9757 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4065 */
+  /* parser/parser.nit:9758 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4066 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4067 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4068 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4069 */
-  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4071 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4071);
-  }
-  /* parser/parser.nit:4073 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:9760 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4073);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9760);
   }
-  /* parser/parser.nit:4075 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:9762 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4075);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9762);
   }
-  /* parser/parser.nit:4077 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9764 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4077);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9764);
   }
-  /* parser/parser.nit:4079 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9766 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4079);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9766);
   }
-  /* parser/parser.nit:4081 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:9768 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4081);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9768);
   }
-  /* parser/parser.nit:4083 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9770 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4083);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9770);
   }
-  /* parser/parser.nit:4084 */
-  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:4086 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9772 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4086);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9772);
   }
-  /* parser/parser.nit:4087 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], fra.me.REG[5], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
-  /* parser/parser.nit:4099 */
+  /* parser/parser.nit:9773 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9786 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4100 */
+  /* parser/parser.nit:9787 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4100);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9787);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14100,17 +28470,17 @@ void parser___ReduceAction84___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction85___action[] = "parser::ReduceAction85::(parser::ReduceAction::action)";
-void parser___ReduceAction85___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+static const char LOCATE_parser___ReduceAction201___action[] = "parser::ReduceAction201::(parser::ReduceAction::action)";
+void parser___ReduceAction201___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4105;
-  fra.me.meth = LOCATE_parser___ReduceAction85___action;
+  fra.me.line = 9792;
+  fra.me.meth = LOCATE_parser___ReduceAction201___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 14;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -14121,104 +28491,67 @@ void parser___ReduceAction85___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
-  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4107 */
+  /* parser/parser.nit:9794 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4108 */
+  /* parser/parser.nit:9795 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4109 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4110 */
+  /* parser/parser.nit:9796 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4111 */
+  /* parser/parser.nit:9797 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4112 */
+  /* parser/parser.nit:9798 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4113 */
+  /* parser/parser.nit:9799 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4114 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4115 */
+  /* parser/parser.nit:9800 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4116 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4117 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4118 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4119 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4120 */
-  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4122 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4122);
-  }
-  /* parser/parser.nit:4124 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4124);
-  }
-  /* parser/parser.nit:4126 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9802 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4126);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9802);
   }
-  /* parser/parser.nit:4128 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9804 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4128);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9804);
   }
-  /* parser/parser.nit:4130 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9806 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4130);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9806);
   }
-  /* parser/parser.nit:4131 */
-  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[6]);
-  fra.me.REG[11] = fra.me.REG[6];
-  /* parser/parser.nit:4133 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:9808 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4133);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9808);
   }
-  /* parser/parser.nit:4135 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9810 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4135);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9810);
   }
-  /* parser/parser.nit:4136 */
-  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:4138 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9812 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4138);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9812);
   }
-  /* parser/parser.nit:4139 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[11], fra.me.REG[5], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
-  /* parser/parser.nit:4151 */
+  /* parser/parser.nit:9813 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9826 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4152 */
+  /* parser/parser.nit:9827 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4152);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9827);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14226,17 +28559,17 @@ void parser___ReduceAction85___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction86___action[] = "parser::ReduceAction86::(parser::ReduceAction::action)";
-void parser___ReduceAction86___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
+static const char LOCATE_parser___ReduceAction202___action[] = "parser::ReduceAction202::(parser::ReduceAction::action)";
+void parser___ReduceAction202___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 = 4157;
-  fra.me.meth = LOCATE_parser___ReduceAction86___action;
+  fra.me.line = 9832;
+  fra.me.meth = LOCATE_parser___ReduceAction202___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 15;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -14248,112 +28581,75 @@ void parser___ReduceAction86___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[12] = NIT_NULL;
-  fra.me.REG[13] = NIT_NULL;
-  fra.me.REG[14] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4159 */
+  /* parser/parser.nit:9834 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4160 */
+  /* parser/parser.nit:9835 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4161 */
+  /* parser/parser.nit:9836 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4162 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4163 */
+  /* parser/parser.nit:9837 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4164 */
+  /* parser/parser.nit:9838 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4165 */
+  /* parser/parser.nit:9839 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4166 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4167 */
+  /* parser/parser.nit:9840 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4168 */
+  /* parser/parser.nit:9841 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4169 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4170 */
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4171 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4172 */
-  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4173 */
-  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4175 */
-  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4175);
-  }
-  /* parser/parser.nit:4177 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4177);
-  }
-  /* parser/parser.nit:4179 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:9843 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4179);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9843);
   }
-  /* parser/parser.nit:4181 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9845 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4181);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9845);
   }
-  /* parser/parser.nit:4183 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9847 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4183);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9847);
   }
-  /* parser/parser.nit:4185 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9849 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4185);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9849);
   }
-  /* parser/parser.nit:4186 */
-  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[6]);
-  fra.me.REG[12] = fra.me.REG[6];
-  /* parser/parser.nit:4188 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:9851 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4188);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9851);
   }
-  /* parser/parser.nit:4190 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9853 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4190);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9853);
   }
-  /* parser/parser.nit:4191 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
-  fra.me.REG[13] = fra.me.REG[4];
-  /* parser/parser.nit:4193 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9855 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4193);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9855);
   }
-  /* parser/parser.nit:4194 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[12], fra.me.REG[5], fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
-  /* parser/parser.nit:4206 */
+  /* parser/parser.nit:9856 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9869 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4207 */
+  /* parser/parser.nit:9870 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4207);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9870);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14361,17 +28657,17 @@ void parser___ReduceAction86___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction87___action[] = "parser::ReduceAction87::(parser::ReduceAction::action)";
-void parser___ReduceAction87___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+static const char LOCATE_parser___ReduceAction203___action[] = "parser::ReduceAction203::(parser::ReduceAction::action)";
+void parser___ReduceAction203___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 = 4212;
-  fra.me.meth = LOCATE_parser___ReduceAction87___action;
+  fra.me.line = 9875;
+  fra.me.meth = LOCATE_parser___ReduceAction203___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -14383,82 +28679,75 @@ void parser___ReduceAction87___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:4214 */
+  /* parser/parser.nit:9877 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4215 */
+  /* parser/parser.nit:9878 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4216 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4217 */
+  /* parser/parser.nit:9879 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4218 */
+  /* parser/parser.nit:9880 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4219 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4220 */
+  /* parser/parser.nit:9881 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4221 */
+  /* parser/parser.nit:9882 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4222 */
+  /* parser/parser.nit:9883 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4223 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4224 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4225 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4227 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:9884 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9886 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4227);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9886);
   }
-  /* parser/parser.nit:4229 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:9888 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4229);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9888);
   }
-  /* parser/parser.nit:4231 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9890 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4231);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9890);
   }
-  /* parser/parser.nit:4233 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9892 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4233);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9892);
   }
-  /* parser/parser.nit:4235 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9894 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4235);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9894);
   }
-  /* parser/parser.nit:4236 */
-  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:4238 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9896 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4238);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9896);
   }
-  /* parser/parser.nit:4239 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], NIT_NULL, fra.me.REG[10], fra.me.REG[11], fra.me.REG[3]);
-  /* parser/parser.nit:4251 */
+  /* parser/parser.nit:9898 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9898);
+  }
+  /* parser/parser.nit:9899 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9912 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4252 */
+  /* parser/parser.nit:9913 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4252);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9913);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14466,17 +28755,17 @@ void parser___ReduceAction87___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction88___action[] = "parser::ReduceAction88::(parser::ReduceAction::action)";
-void parser___ReduceAction88___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+static const char LOCATE_parser___ReduceAction204___action[] = "parser::ReduceAction204::(parser::ReduceAction::action)";
+void parser___ReduceAction204___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4257;
-  fra.me.meth = LOCATE_parser___ReduceAction88___action;
+  fra.me.line = 9918;
+  fra.me.meth = LOCATE_parser___ReduceAction204___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -14489,90 +28778,83 @@ void parser___ReduceAction88___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4259 */
+  /* parser/parser.nit:9920 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4260 */
+  /* parser/parser.nit:9921 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4261 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4262 */
+  /* parser/parser.nit:9922 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4263 */
+  /* parser/parser.nit:9923 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4264 */
+  /* parser/parser.nit:9924 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4265 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4266 */
+  /* parser/parser.nit:9925 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4267 */
+  /* parser/parser.nit:9926 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4268 */
+  /* parser/parser.nit:9927 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4269 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4270 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4271 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4273 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:9928 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9930 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4273);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9930);
   }
-  /* parser/parser.nit:4275 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:9932 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4275);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9932);
   }
-  /* parser/parser.nit:4277 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:9934 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4277);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9934);
   }
-  /* parser/parser.nit:4279 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9936 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4279);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9936);
   }
-  /* parser/parser.nit:4281 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9938 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4281);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9938);
   }
-  /* parser/parser.nit:4283 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9940 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4283);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9940);
   }
-  /* parser/parser.nit:4284 */
-  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:4286 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9942 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4286);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9942);
   }
-  /* parser/parser.nit:4287 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], NIT_NULL, fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
-  /* parser/parser.nit:4299 */
+  /* parser/parser.nit:9944 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9944);
+  }
+  /* parser/parser.nit:9945 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9958 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4300 */
+  /* parser/parser.nit:9959 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4300);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9959);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14580,17 +28862,17 @@ void parser___ReduceAction88___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction89___action[] = "parser::ReduceAction89::(parser::ReduceAction::action)";
-void parser___ReduceAction89___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+static const char LOCATE_parser___ReduceAction205___action[] = "parser::ReduceAction205::(parser::ReduceAction::action)";
+void parser___ReduceAction205___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4305;
-  fra.me.meth = LOCATE_parser___ReduceAction89___action;
+  fra.me.line = 9964;
+  fra.me.meth = LOCATE_parser___ReduceAction205___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -14600,96 +28882,63 @@ 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[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4307 */
+  /* parser/parser.nit:9966 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4308 */
+  /* parser/parser.nit:9967 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4309 */
+  /* parser/parser.nit:9968 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4310 */
+  /* parser/parser.nit:9969 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4311 */
+  /* parser/parser.nit:9970 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9971 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4312 */
+  /* parser/parser.nit:9972 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4313 */
+  /* parser/parser.nit:9973 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4314 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4315 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4316 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4317 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4318 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4319 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4321 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4321);
-  }
-  /* parser/parser.nit:4323 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4323);
-  }
-  /* parser/parser.nit:4325 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:9975 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4325);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9975);
   }
-  /* parser/parser.nit:4327 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:9977 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4327);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9977);
   }
-  /* parser/parser.nit:4329 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9979 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4329);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9979);
   }
-  /* parser/parser.nit:4330 */
-  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:4332 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9981 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4332);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9981);
   }
-  /* parser/parser.nit:4333 */
-  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:4335 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:9983 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4335);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9983);
   }
-  /* parser/parser.nit:4336 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], NIT_NULL, fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
-  /* parser/parser.nit:4348 */
+  /* parser/parser.nit:9984 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:9997 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4349 */
+  /* parser/parser.nit:9998 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4349);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9998);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14697,17 +28946,17 @@ void parser___ReduceAction89___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction90___action[] = "parser::ReduceAction90::(parser::ReduceAction::action)";
-void parser___ReduceAction90___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+static const char LOCATE_parser___ReduceAction206___action[] = "parser::ReduceAction206::(parser::ReduceAction::action)";
+void parser___ReduceAction206___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4354;
-  fra.me.meth = LOCATE_parser___ReduceAction90___action;
+  fra.me.line = 10003;
+  fra.me.meth = LOCATE_parser___ReduceAction206___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 14;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -14718,104 +28967,71 @@ void parser___ReduceAction90___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
-  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4356 */
+  /* parser/parser.nit:10005 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4357 */
+  /* parser/parser.nit:10006 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4358 */
+  /* parser/parser.nit:10007 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4359 */
+  /* parser/parser.nit:10008 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4360 */
+  /* parser/parser.nit:10009 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10010 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4361 */
+  /* parser/parser.nit:10011 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4362 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4363 */
+  /* parser/parser.nit:10012 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4364 */
+  /* parser/parser.nit:10013 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4365 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4366 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4367 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4368 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4369 */
-  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4371 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4371);
-  }
-  /* parser/parser.nit:4373 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4373);
-  }
-  /* parser/parser.nit:4375 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:10015 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4375);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10015);
   }
-  /* parser/parser.nit:4377 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:10017 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4377);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10017);
   }
-  /* parser/parser.nit:4379 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:10019 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4379);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10019);
   }
-  /* parser/parser.nit:4381 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10021 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4381);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10021);
   }
-  /* parser/parser.nit:4382 */
-  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:4384 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10023 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4384);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10023);
   }
-  /* parser/parser.nit:4385 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
-  fra.me.REG[13] = fra.me.REG[4];
-  /* parser/parser.nit:4387 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:10025 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4387);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10025);
   }
-  /* parser/parser.nit:4388 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], NIT_NULL, fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
-  /* parser/parser.nit:4400 */
+  /* parser/parser.nit:10026 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10039 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4401 */
+  /* parser/parser.nit:10040 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4401);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10040);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14823,17 +29039,17 @@ void parser___ReduceAction90___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction91___action[] = "parser::ReduceAction91::(parser::ReduceAction::action)";
-void parser___ReduceAction91___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+static const char LOCATE_parser___ReduceAction207___action[] = "parser::ReduceAction207::(parser::ReduceAction::action)";
+void parser___ReduceAction207___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4406;
-  fra.me.meth = LOCATE_parser___ReduceAction91___action;
+  fra.me.line = 10045;
+  fra.me.meth = LOCATE_parser___ReduceAction207___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -14844,92 +29060,71 @@ void parser___ReduceAction91___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4408 */
+  /* parser/parser.nit:10047 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4409 */
+  /* parser/parser.nit:10048 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4410 */
+  /* parser/parser.nit:10049 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4411 */
+  /* parser/parser.nit:10050 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4412 */
+  /* parser/parser.nit:10051 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10052 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4413 */
+  /* parser/parser.nit:10053 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4414 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4415 */
+  /* parser/parser.nit:10054 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4416 */
+  /* parser/parser.nit:10055 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4417 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4418 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4419 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4420 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4422 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4422);
-  }
-  /* parser/parser.nit:4424 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:10057 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4424);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10057);
   }
-  /* parser/parser.nit:4426 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:10059 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4426);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10059);
   }
-  /* parser/parser.nit:4428 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:10061 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4428);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10061);
   }
-  /* parser/parser.nit:4430 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:10063 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4430);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10063);
   }
-  /* parser/parser.nit:4432 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10065 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4432);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10065);
   }
-  /* parser/parser.nit:4433 */
-  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:4435 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:10067 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4435);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10067);
   }
-  /* parser/parser.nit:4436 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], fra.me.REG[5], fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
-  /* parser/parser.nit:4448 */
+  /* parser/parser.nit:10068 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10081 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4449 */
+  /* parser/parser.nit:10082 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4449);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10082);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -14937,17 +29132,17 @@ void parser___ReduceAction91___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction92___action[] = "parser::ReduceAction92::(parser::ReduceAction::action)";
-void parser___ReduceAction92___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+static const char LOCATE_parser___ReduceAction208___action[] = "parser::ReduceAction208::(parser::ReduceAction::action)";
+void parser___ReduceAction208___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 = 4454;
-  fra.me.meth = LOCATE_parser___ReduceAction92___action;
+  fra.me.line = 10087;
+  fra.me.meth = LOCATE_parser___ReduceAction208___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 14;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -14959,100 +29154,79 @@ void parser___ReduceAction92___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[12] = NIT_NULL;
-  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4456 */
+  /* parser/parser.nit:10089 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4457 */
+  /* parser/parser.nit:10090 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4458 */
+  /* parser/parser.nit:10091 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4459 */
+  /* parser/parser.nit:10092 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4460 */
+  /* parser/parser.nit:10093 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10094 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4461 */
+  /* parser/parser.nit:10095 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4462 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4463 */
+  /* parser/parser.nit:10096 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4464 */
+  /* parser/parser.nit:10097 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4465 */
+  /* parser/parser.nit:10098 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4466 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4467 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4468 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4469 */
-  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4471 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4471);
-  }
-  /* parser/parser.nit:4473 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:10100 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4473);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10100);
   }
-  /* parser/parser.nit:4475 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:10102 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4475);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10102);
   }
-  /* parser/parser.nit:4477 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:10104 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4477);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10104);
   }
-  /* parser/parser.nit:4479 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:10106 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4479);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10106);
   }
-  /* parser/parser.nit:4481 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:10108 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4481);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10108);
   }
-  /* parser/parser.nit:4483 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10110 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4483);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10110);
   }
-  /* parser/parser.nit:4484 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
-  fra.me.REG[13] = fra.me.REG[4];
-  /* parser/parser.nit:4486 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:10112 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4486);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10112);
   }
-  /* parser/parser.nit:4487 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], fra.me.REG[5], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
-  /* parser/parser.nit:4499 */
+  /* parser/parser.nit:10113 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10126 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4500 */
+  /* parser/parser.nit:10127 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4500);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10127);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15060,17 +29234,17 @@ void parser___ReduceAction92___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction93___action[] = "parser::ReduceAction93::(parser::ReduceAction::action)";
-void parser___ReduceAction93___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+static const char LOCATE_parser___ReduceAction209___action[] = "parser::ReduceAction209::(parser::ReduceAction::action)";
+void parser___ReduceAction209___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4505;
-  fra.me.meth = LOCATE_parser___ReduceAction93___action;
+  fra.me.line = 10132;
+  fra.me.meth = LOCATE_parser___ReduceAction209___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 14;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -15081,104 +29255,71 @@ 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[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
-  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4507 */
+  /* parser/parser.nit:10134 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4508 */
+  /* parser/parser.nit:10135 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4509 */
+  /* parser/parser.nit:10136 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4510 */
+  /* parser/parser.nit:10137 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4511 */
+  /* parser/parser.nit:10138 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10139 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4512 */
+  /* parser/parser.nit:10140 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4513 */
+  /* parser/parser.nit:10141 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4514 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4515 */
+  /* parser/parser.nit:10142 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4516 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4517 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4518 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4519 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4520 */
-  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4522 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4522);
-  }
-  /* parser/parser.nit:4524 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4524);
-  }
-  /* parser/parser.nit:4526 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:10144 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4526);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10144);
   }
-  /* parser/parser.nit:4528 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:10146 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4528);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10146);
   }
-  /* parser/parser.nit:4530 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10148 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4530);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10148);
   }
-  /* parser/parser.nit:4531 */
-  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[6]);
-  fra.me.REG[11] = fra.me.REG[6];
-  /* parser/parser.nit:4533 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:10150 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4533);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10150);
   }
-  /* parser/parser.nit:4535 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10152 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4535);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10152);
   }
-  /* parser/parser.nit:4536 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
-  fra.me.REG[13] = fra.me.REG[4];
-  /* parser/parser.nit:4538 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:10154 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4538);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10154);
   }
-  /* parser/parser.nit:4539 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[11], fra.me.REG[5], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
-  /* parser/parser.nit:4551 */
+  /* parser/parser.nit:10155 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10168 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4552 */
+  /* parser/parser.nit:10169 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4552);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10169);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15186,17 +29327,17 @@ void parser___ReduceAction93___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction94___action[] = "parser::ReduceAction94::(parser::ReduceAction::action)";
-void parser___ReduceAction94___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
+static const char LOCATE_parser___ReduceAction210___action[] = "parser::ReduceAction210::(parser::ReduceAction::action)";
+void parser___ReduceAction210___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 = 4557;
-  fra.me.meth = LOCATE_parser___ReduceAction94___action;
+  fra.me.line = 10174;
+  fra.me.meth = LOCATE_parser___ReduceAction210___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 15;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -15208,112 +29349,79 @@ void parser___ReduceAction94___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[12] = NIT_NULL;
-  fra.me.REG[13] = NIT_NULL;
-  fra.me.REG[14] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4559 */
+  /* parser/parser.nit:10176 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4560 */
+  /* parser/parser.nit:10177 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4561 */
+  /* parser/parser.nit:10178 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10179 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4562 */
+  /* parser/parser.nit:10180 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4563 */
+  /* parser/parser.nit:10181 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4564 */
+  /* parser/parser.nit:10182 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4565 */
+  /* parser/parser.nit:10183 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4566 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4567 */
+  /* parser/parser.nit:10184 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4568 */
+  /* parser/parser.nit:10185 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4569 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4570 */
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4571 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4572 */
-  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4573 */
-  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4575 */
-  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4575);
-  }
-  /* parser/parser.nit:4577 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4577);
-  }
-  /* parser/parser.nit:4579 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:10187 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4579);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10187);
   }
-  /* parser/parser.nit:4581 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:10189 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4581);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10189);
   }
-  /* parser/parser.nit:4583 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:10191 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4583);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10191);
   }
-  /* parser/parser.nit:4585 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10193 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4585);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10193);
   }
-  /* parser/parser.nit:4586 */
-  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[6]);
-  fra.me.REG[12] = fra.me.REG[6];
-  /* parser/parser.nit:4588 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:10195 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4588);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10195);
   }
-  /* parser/parser.nit:4590 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10197 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4590);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10197);
   }
-  /* parser/parser.nit:4591 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[4]);
-  fra.me.REG[14] = fra.me.REG[4];
-  /* parser/parser.nit:4593 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:10199 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4593);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10199);
   }
-  /* parser/parser.nit:4594 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[12], fra.me.REG[5], fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
-  /* parser/parser.nit:4606 */
+  /* parser/parser.nit:10200 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10213 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4607 */
+  /* parser/parser.nit:10214 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4607);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10214);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15321,17 +29429,17 @@ void parser___ReduceAction94___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction95___action[] = "parser::ReduceAction95::(parser::ReduceAction::action)";
-void parser___ReduceAction95___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+static const char LOCATE_parser___ReduceAction211___action[] = "parser::ReduceAction211::(parser::ReduceAction::action)";
+void parser___ReduceAction211___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 = 4612;
-  fra.me.meth = LOCATE_parser___ReduceAction95___action;
+  fra.me.line = 10219;
+  fra.me.meth = LOCATE_parser___ReduceAction211___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -15343,94 +29451,79 @@ void parser___ReduceAction95___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[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4614 */
+  /* parser/parser.nit:10221 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4615 */
+  /* parser/parser.nit:10222 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4616 */
+  /* parser/parser.nit:10223 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4617 */
+  /* parser/parser.nit:10224 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4618 */
+  /* parser/parser.nit:10225 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10226 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4619 */
+  /* parser/parser.nit:10227 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4620 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4621 */
+  /* parser/parser.nit:10228 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4622 */
+  /* parser/parser.nit:10229 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4623 */
+  /* parser/parser.nit:10230 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4624 */
-  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4625 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4626 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4628 */
+  /* parser/parser.nit:10232 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4628);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10232);
   }
-  /* parser/parser.nit:4630 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:10234 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4630);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10234);
   }
-  /* parser/parser.nit:4632 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:10236 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4632);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10236);
   }
-  /* parser/parser.nit:4634 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:10238 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4634);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10238);
   }
-  /* parser/parser.nit:4636 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10240 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4636);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10240);
   }
-  /* parser/parser.nit:4637 */
-  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:4639 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10242 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4639);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10242);
   }
-  /* parser/parser.nit:4640 */
-  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:4642 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:10244 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4642);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10244);
   }
-  /* parser/parser.nit:4643 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], NIT_NULL, fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
-  /* parser/parser.nit:4655 */
+  /* parser/parser.nit:10245 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10258 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4656 */
+  /* parser/parser.nit:10259 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4656);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10259);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15438,17 +29531,17 @@ void parser___ReduceAction95___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction96___action[] = "parser::ReduceAction96::(parser::ReduceAction::action)";
-void parser___ReduceAction96___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+static const char LOCATE_parser___ReduceAction212___action[] = "parser::ReduceAction212::(parser::ReduceAction::action)";
+void parser___ReduceAction212___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4661;
-  fra.me.meth = LOCATE_parser___ReduceAction96___action;
+  fra.me.line = 10264;
+  fra.me.meth = LOCATE_parser___ReduceAction212___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 14;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -15461,102 +29554,87 @@ void parser___ReduceAction96___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
-  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4663 */
+  /* parser/parser.nit:10266 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4664 */
+  /* parser/parser.nit:10267 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4665 */
+  /* parser/parser.nit:10268 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4666 */
+  /* parser/parser.nit:10269 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4667 */
+  /* parser/parser.nit:10270 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10271 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4668 */
+  /* parser/parser.nit:10272 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4669 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4670 */
+  /* parser/parser.nit:10273 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4671 */
+  /* parser/parser.nit:10274 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4672 */
+  /* parser/parser.nit:10275 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4673 */
+  /* parser/parser.nit:10276 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4674 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4675 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4676 */
-  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4678 */
+  /* parser/parser.nit:10278 */
   REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4678);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10278);
   }
-  /* parser/parser.nit:4680 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:10280 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4680);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10280);
   }
-  /* parser/parser.nit:4682 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:10282 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4682);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10282);
   }
-  /* parser/parser.nit:4684 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:10284 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4684);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10284);
   }
-  /* parser/parser.nit:4686 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:10286 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4686);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10286);
   }
-  /* parser/parser.nit:4688 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10288 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4688);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10288);
   }
-  /* parser/parser.nit:4689 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[5]);
-  fra.me.REG[12] = fra.me.REG[5];
-  /* parser/parser.nit:4691 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10290 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4691);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10290);
   }
-  /* parser/parser.nit:4692 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
-  fra.me.REG[13] = fra.me.REG[4];
-  /* parser/parser.nit:4694 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:10292 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4694);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10292);
   }
-  /* parser/parser.nit:4695 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], NIT_NULL, fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
-  /* parser/parser.nit:4707 */
+  /* parser/parser.nit:10293 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10306 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4708 */
+  /* parser/parser.nit:10307 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4708);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10307);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15564,17 +29642,17 @@ void parser___ReduceAction96___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction97___action[] = "parser::ReduceAction97::(parser::ReduceAction::action)";
-void parser___ReduceAction97___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+static const char LOCATE_parser___ReduceAction213___action[] = "parser::ReduceAction213::(parser::ReduceAction::action)";
+void parser___ReduceAction213___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4713;
-  fra.me.meth = LOCATE_parser___ReduceAction97___action;
+  fra.me.line = 10312;
+  fra.me.meth = LOCATE_parser___ReduceAction213___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 14;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -15585,107 +29663,71 @@ void parser___ReduceAction97___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
-  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4715 */
+  /* parser/parser.nit:10314 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4716 */
+  /* parser/parser.nit:10315 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4717 */
+  /* parser/parser.nit:10316 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4718 */
+  /* parser/parser.nit:10317 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4719 */
+  /* parser/parser.nit:10318 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10319 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4720 */
+  /* parser/parser.nit:10320 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4721 */
+  /* parser/parser.nit:10321 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4722 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4723 */
+  /* parser/parser.nit:10322 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4724 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4725 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4726 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4727 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4728 */
-  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4730 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4730);
-  }
-  /* parser/parser.nit:4732 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4732);
-  }
-  /* parser/parser.nit:4734 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:10324 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4734);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10324);
   }
-  /* parser/parser.nit:4736 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:10326 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4736);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10326);
   }
-  /* parser/parser.nit:4738 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10328 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4738);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10328);
   }
-  /* parser/parser.nit:4739 */
-  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[6]);
-  fra.me.REG[11] = fra.me.REG[6];
-  /* parser/parser.nit:4741 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10330 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4741);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10330);
   }
-  /* parser/parser.nit:4742 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[5]);
-  fra.me.REG[12] = fra.me.REG[5];
-  /* parser/parser.nit:4744 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10332 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4744);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10332);
   }
-  /* parser/parser.nit:4745 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
-  fra.me.REG[13] = fra.me.REG[4];
-  /* parser/parser.nit:4747 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:10334 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4747);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10334);
   }
-  /* parser/parser.nit:4748 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[11], NIT_NULL, fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
-  /* parser/parser.nit:4760 */
+  /* parser/parser.nit:10335 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10348 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4761 */
+  /* parser/parser.nit:10349 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4761);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10349);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15693,17 +29735,17 @@ void parser___ReduceAction97___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction98___action[] = "parser::ReduceAction98::(parser::ReduceAction::action)";
-void parser___ReduceAction98___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
+static const char LOCATE_parser___ReduceAction214___action[] = "parser::ReduceAction214::(parser::ReduceAction::action)";
+void parser___ReduceAction214___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 = 4766;
-  fra.me.meth = LOCATE_parser___ReduceAction98___action;
+  fra.me.line = 10354;
+  fra.me.meth = LOCATE_parser___ReduceAction214___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 15;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -15715,115 +29757,79 @@ void parser___ReduceAction98___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[12] = NIT_NULL;
-  fra.me.REG[13] = NIT_NULL;
-  fra.me.REG[14] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4768 */
+  /* parser/parser.nit:10356 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4769 */
+  /* parser/parser.nit:10357 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4770 */
+  /* parser/parser.nit:10358 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10359 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4771 */
+  /* parser/parser.nit:10360 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4772 */
+  /* parser/parser.nit:10361 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4773 */
+  /* parser/parser.nit:10362 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4774 */
+  /* parser/parser.nit:10363 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4775 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4776 */
+  /* parser/parser.nit:10364 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4777 */
+  /* parser/parser.nit:10365 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4778 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4779 */
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4780 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4781 */
-  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4782 */
-  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4784 */
-  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4784);
-  }
-  /* parser/parser.nit:4786 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4786);
-  }
-  /* parser/parser.nit:4788 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:10367 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4788);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10367);
   }
-  /* parser/parser.nit:4790 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:10369 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4790);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10369);
   }
-  /* parser/parser.nit:4792 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:10371 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4792);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10371);
   }
-  /* parser/parser.nit:4794 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10373 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4794);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10373);
   }
-  /* parser/parser.nit:4795 */
-  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[6]);
-  fra.me.REG[12] = fra.me.REG[6];
-  /* parser/parser.nit:4797 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10375 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4797);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10375);
   }
-  /* parser/parser.nit:4798 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[5]);
-  fra.me.REG[13] = fra.me.REG[5];
-  /* parser/parser.nit:4800 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10377 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4800);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10377);
   }
-  /* parser/parser.nit:4801 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[4]);
-  fra.me.REG[14] = fra.me.REG[4];
-  /* parser/parser.nit:4803 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:10379 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4803);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10379);
   }
-  /* parser/parser.nit:4804 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[12], NIT_NULL, fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
-  /* parser/parser.nit:4816 */
+  /* parser/parser.nit:10380 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10393 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4817 */
+  /* parser/parser.nit:10394 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4817);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10394);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15831,17 +29837,17 @@ void parser___ReduceAction98___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction99___action[] = "parser::ReduceAction99::(parser::ReduceAction::action)";
-void parser___ReduceAction99___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+static const char LOCATE_parser___ReduceAction215___action[] = "parser::ReduceAction215::(parser::ReduceAction::action)";
+void parser___ReduceAction215___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 = 4822;
-  fra.me.meth = LOCATE_parser___ReduceAction99___action;
+  fra.me.line = 10399;
+  fra.me.meth = LOCATE_parser___ReduceAction215___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 14;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -15853,103 +29859,79 @@ void parser___ReduceAction99___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[12] = NIT_NULL;
-  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4824 */
+  /* parser/parser.nit:10401 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4825 */
+  /* parser/parser.nit:10402 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4826 */
+  /* parser/parser.nit:10403 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4827 */
+  /* parser/parser.nit:10404 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4828 */
+  /* parser/parser.nit:10405 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10406 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4829 */
+  /* parser/parser.nit:10407 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4830 */
+  /* parser/parser.nit:10408 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4831 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4832 */
+  /* parser/parser.nit:10409 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4833 */
+  /* parser/parser.nit:10410 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4834 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4835 */
-  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4836 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4837 */
-  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4839 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4839);
-  }
-  /* parser/parser.nit:4841 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:10412 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4841);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10412);
   }
-  /* parser/parser.nit:4843 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:10414 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4843);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10414);
   }
-  /* parser/parser.nit:4845 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:10416 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4845);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10416);
   }
-  /* parser/parser.nit:4847 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:10418 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4847);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10418);
   }
-  /* parser/parser.nit:4849 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10420 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4849);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10420);
   }
-  /* parser/parser.nit:4850 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[5]);
-  fra.me.REG[12] = fra.me.REG[5];
-  /* parser/parser.nit:4852 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10422 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4852);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10422);
   }
-  /* parser/parser.nit:4853 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
-  fra.me.REG[13] = fra.me.REG[4];
-  /* parser/parser.nit:4855 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:10424 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4855);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10424);
   }
-  /* parser/parser.nit:4856 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[11], fra.me.REG[6], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
-  /* parser/parser.nit:4868 */
+  /* parser/parser.nit:10425 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10438 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4869 */
+  /* parser/parser.nit:10439 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4869);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10439);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -15957,17 +29939,17 @@ void parser___ReduceAction99___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction100___action[] = "parser::ReduceAction100::(parser::ReduceAction::action)";
-void parser___ReduceAction100___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
+static const char LOCATE_parser___ReduceAction216___action[] = "parser::ReduceAction216::(parser::ReduceAction::action)";
+void parser___ReduceAction216___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4874;
-  fra.me.meth = LOCATE_parser___ReduceAction100___action;
+  fra.me.line = 10444;
+  fra.me.meth = LOCATE_parser___ReduceAction216___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 15;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -15980,111 +29962,87 @@ void parser___ReduceAction100___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
-  fra.me.REG[13] = NIT_NULL;
-  fra.me.REG[14] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4876 */
+  /* parser/parser.nit:10446 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4877 */
+  /* parser/parser.nit:10447 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4878 */
+  /* parser/parser.nit:10448 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4879 */
+  /* parser/parser.nit:10449 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4880 */
+  /* parser/parser.nit:10450 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10451 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4881 */
+  /* parser/parser.nit:10452 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4882 */
+  /* parser/parser.nit:10453 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4883 */
+  /* parser/parser.nit:10454 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4884 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4885 */
+  /* parser/parser.nit:10455 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4886 */
+  /* parser/parser.nit:10456 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4887 */
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4888 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4889 */
-  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4890 */
-  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4892 */
-  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4892);
-  }
-  /* parser/parser.nit:4894 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:10458 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4894);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10458);
   }
-  /* parser/parser.nit:4896 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:10460 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4896);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10460);
   }
-  /* parser/parser.nit:4898 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:10462 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4898);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10462);
   }
-  /* parser/parser.nit:4900 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:10464 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4900);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10464);
   }
-  /* parser/parser.nit:4902 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:10466 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4902);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10466);
   }
-  /* parser/parser.nit:4904 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10468 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4904);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10468);
   }
-  /* parser/parser.nit:4905 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[5]);
-  fra.me.REG[13] = fra.me.REG[5];
-  /* parser/parser.nit:4907 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10470 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4907);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10470);
   }
-  /* parser/parser.nit:4908 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[4]);
-  fra.me.REG[14] = fra.me.REG[4];
-  /* parser/parser.nit:4910 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:10472 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4910);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10472);
   }
-  /* parser/parser.nit:4911 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[12], fra.me.REG[6], fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
-  /* parser/parser.nit:4923 */
+  /* parser/parser.nit:10473 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10486 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4924 */
+  /* parser/parser.nit:10487 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4924);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10487);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16092,17 +30050,17 @@ void parser___ReduceAction100___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction101___action[] = "parser::ReduceAction101::(parser::ReduceAction::action)";
-void parser___ReduceAction101___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
+static const char LOCATE_parser___ReduceAction217___action[] = "parser::ReduceAction217::(parser::ReduceAction::action)";
+void parser___ReduceAction217___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 = 4929;
-  fra.me.meth = LOCATE_parser___ReduceAction101___action;
+  fra.me.line = 10492;
+  fra.me.meth = LOCATE_parser___ReduceAction217___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 15;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -16114,115 +30072,79 @@ void parser___ReduceAction101___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[12] = NIT_NULL;
-  fra.me.REG[13] = NIT_NULL;
-  fra.me.REG[14] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4931 */
+  /* parser/parser.nit:10494 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4932 */
+  /* parser/parser.nit:10495 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4933 */
+  /* parser/parser.nit:10496 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4934 */
+  /* parser/parser.nit:10497 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4935 */
+  /* parser/parser.nit:10498 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10499 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4936 */
+  /* parser/parser.nit:10500 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4937 */
+  /* parser/parser.nit:10501 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4938 */
+  /* parser/parser.nit:10502 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4939 */
+  /* parser/parser.nit:10503 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4940 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4941 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4942 */
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4943 */
-  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4944 */
-  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4945 */
-  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:4947 */
-  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4947);
-  }
-  /* parser/parser.nit:4949 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4949);
-  }
-  /* parser/parser.nit:4951 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:10505 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4951);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10505);
   }
-  /* parser/parser.nit:4953 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:10507 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4953);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10507);
   }
-  /* parser/parser.nit:4955 */
-  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10509 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4955);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10509);
   }
-  /* parser/parser.nit:4956 */
-  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[7]);
-  fra.me.REG[12] = fra.me.REG[7];
-  /* parser/parser.nit:4958 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:10511 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4958);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10511);
   }
-  /* parser/parser.nit:4960 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10513 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4960);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10513);
   }
-  /* parser/parser.nit:4961 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[5]);
-  fra.me.REG[13] = fra.me.REG[5];
-  /* parser/parser.nit:4963 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10515 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4963);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10515);
   }
-  /* parser/parser.nit:4964 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[4]);
-  fra.me.REG[14] = fra.me.REG[4];
-  /* parser/parser.nit:4966 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:10517 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4966);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10517);
   }
-  /* parser/parser.nit:4967 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], NIT_NULL, fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[12], fra.me.REG[6], fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
-  /* parser/parser.nit:4979 */
+  /* parser/parser.nit:10518 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10531 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:4980 */
+  /* parser/parser.nit:10532 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4980);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10532);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16230,17 +30152,17 @@ void parser___ReduceAction101___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction102___action[] = "parser::ReduceAction102::(parser::ReduceAction::action)";
-void parser___ReduceAction102___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[15];} fra;
+static const char LOCATE_parser___ReduceAction218___action[] = "parser::ReduceAction218::(parser::ReduceAction::action)";
+void parser___ReduceAction218___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4985;
-  fra.me.meth = LOCATE_parser___ReduceAction102___action;
+  fra.me.line = 10537;
+  fra.me.meth = LOCATE_parser___ReduceAction218___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 16;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -16253,123 +30175,87 @@ void parser___ReduceAction102___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
-  fra.me.REG[12] = NIT_NULL;
-  fra.me.REG[13] = NIT_NULL;
-  fra.me.REG[14] = NIT_NULL;
-  fra.me.REG[15] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:4987 */
+  /* parser/parser.nit:10539 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:4988 */
+  /* parser/parser.nit:10540 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4989 */
+  /* parser/parser.nit:10541 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4990 */
+  /* parser/parser.nit:10542 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4991 */
+  /* parser/parser.nit:10543 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10544 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4992 */
+  /* parser/parser.nit:10545 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4993 */
+  /* parser/parser.nit:10546 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4994 */
+  /* parser/parser.nit:10547 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4995 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4996 */
+  /* parser/parser.nit:10548 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4997 */
+  /* parser/parser.nit:10549 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4998 */
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:4999 */
-  fra.me.REG[12] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5000 */
-  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:5001 */
-  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:5002 */
-  fra.me.REG[15] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:5004 */
-  REGB0 = TAG_Bool((fra.me.REG[12]==NIT_NULL) || VAL_ISA(fra.me.REG[12], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5004);
-  }
-  /* parser/parser.nit:5006 */
-  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5006);
-  }
-  /* parser/parser.nit:5008 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:10551 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5008);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10551);
   }
-  /* parser/parser.nit:5010 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:10553 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5010);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10553);
   }
-  /* parser/parser.nit:5012 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:10555 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5012);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10555);
   }
-  /* parser/parser.nit:5014 */
-  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10557 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5014);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10557);
   }
-  /* parser/parser.nit:5015 */
-  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[7]);
-  fra.me.REG[13] = fra.me.REG[7];
-  /* parser/parser.nit:5017 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:10559 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5017);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10559);
   }
-  /* parser/parser.nit:5019 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10561 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5019);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10561);
   }
-  /* parser/parser.nit:5020 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[5]);
-  fra.me.REG[14] = fra.me.REG[5];
-  /* parser/parser.nit:5022 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10563 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5022);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10563);
   }
-  /* parser/parser.nit:5023 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[15], fra.me.REG[4]);
-  fra.me.REG[15] = fra.me.REG[4];
-  /* parser/parser.nit:5025 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:10565 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5025);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10565);
   }
-  /* parser/parser.nit:5026 */
-  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[12], fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[13], fra.me.REG[6], fra.me.REG[14], fra.me.REG[15], fra.me.REG[3]);
-  /* parser/parser.nit:5038 */
+  /* parser/parser.nit:10566 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10579 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5039 */
+  /* parser/parser.nit:10580 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____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, 10580);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16377,43 +30263,110 @@ void parser___ReduceAction102___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction103___action[] = "parser::ReduceAction103::(parser::ReduceAction::action)";
-void parser___ReduceAction103___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction219___action[] = "parser::ReduceAction219::(parser::ReduceAction::action)";
+void parser___ReduceAction219___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5044;
-  fra.me.meth = LOCATE_parser___ReduceAction103___action;
+  fra.me.line = 10585;
+  fra.me.meth = LOCATE_parser___ReduceAction219___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:5046 */
+  /* parser/parser.nit:10587 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5047 */
+  /* parser/parser.nit:10588 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5049 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwclass, ID_parser___parser_nodes___TKwclass)) /*cast nullable TKwclass*/;
+  /* parser/parser.nit:10589 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10590 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10591 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10592 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10593 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10594 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10595 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10596 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10597 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10599 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5049);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10599);
   }
-  /* parser/parser.nit:5050 */
-  fra.me.REG[3] = NEW_AConcreteClasskind_parser___parser_prod___AConcreteClasskind___init_aconcreteclasskind(fra.me.REG[3]);
-  /* parser/parser.nit:5053 */
+  /* parser/parser.nit:10601 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10601);
+  }
+  /* parser/parser.nit:10603 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10603);
+  }
+  /* parser/parser.nit:10605 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10605);
+  }
+  /* parser/parser.nit:10607 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10607);
+  }
+  /* parser/parser.nit:10609 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10609);
+  }
+  /* parser/parser.nit:10611 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10611);
+  }
+  /* parser/parser.nit:10613 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10613);
+  }
+  /* parser/parser.nit:10614 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10627 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5054 */
+  /* parser/parser.nit:10628 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5054);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10628);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16421,184 +30374,119 @@ void parser___ReduceAction103___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction104___action[] = "parser::ReduceAction104::(parser::ReduceAction::action)";
-void parser___ReduceAction104___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction220___action[] = "parser::ReduceAction220::(parser::ReduceAction::action)";
+void parser___ReduceAction220___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5059;
-  fra.me.meth = LOCATE_parser___ReduceAction104___action;
+  fra.me.line = 10633;
+  fra.me.meth = LOCATE_parser___ReduceAction220___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 12;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[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:5061 */
+  /* parser/parser.nit:10635 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5062 */
+  /* parser/parser.nit:10636 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5063 */
+  /* parser/parser.nit:10637 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5065 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwabstract, ID_parser___parser_nodes___TKwabstract)) /*cast nullable TKwabstract*/;
+  /* parser/parser.nit:10638 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10639 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10640 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10641 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10642 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10643 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10644 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10645 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10646 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10648 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5065);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10648);
   }
-  /* parser/parser.nit:5067 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwclass, ID_parser___parser_nodes___TKwclass)) /*cast nullable TKwclass*/;
+  /* parser/parser.nit:10650 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5067);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10650);
   }
-  /* parser/parser.nit:5068 */
-  fra.me.REG[3] = NEW_AAbstractClasskind_parser___parser_prod___AAbstractClasskind___init_aabstractclasskind(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:5072 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5073 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10652 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5073);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10652);
   }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction105___action[] = "parser::ReduceAction105::(parser::ReduceAction::action)";
-void parser___ReduceAction105___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5078;
-  fra.me.meth = LOCATE_parser___ReduceAction105___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser.nit:5080 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5081 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5083 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwinterface, ID_parser___parser_nodes___TKwinterface)) /*cast nullable TKwinterface*/;
+  /* parser/parser.nit:10654 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5083);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10654);
   }
-  /* parser/parser.nit:5084 */
-  fra.me.REG[3] = NEW_AInterfaceClasskind_parser___parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(fra.me.REG[3]);
-  /* parser/parser.nit:5087 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5088 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10656 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5088);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10656);
   }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction106___action[] = "parser::ReduceAction106::(parser::ReduceAction::action)";
-void parser___ReduceAction106___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5093;
-  fra.me.meth = LOCATE_parser___ReduceAction106___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser.nit:5095 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5096 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5098 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwenum, ID_parser___parser_nodes___TKwenum)) /*cast nullable TKwenum*/;
+  /* parser/parser.nit:10658 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5098);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10658);
   }
-  /* parser/parser.nit:5099 */
-  fra.me.REG[3] = NEW_AEnumClasskind_parser___parser_prod___AEnumClasskind___init_aenumclasskind(fra.me.REG[3]);
-  /* parser/parser.nit:5102 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5103 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10660 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5103);
-  }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction107___action[] = "parser::ReduceAction107::(parser::ReduceAction::action)";
-void parser___ReduceAction107___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5108;
-  fra.me.meth = LOCATE_parser___ReduceAction107___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser.nit:5110 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5111 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5113 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwextern, ID_parser___parser_nodes___TKwextern)) /*cast nullable TKwextern*/;
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10660);
+  }
+  /* parser/parser.nit:10662 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5113);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10662);
   }
-  /* parser/parser.nit:5114 */
-  fra.me.REG[3] = NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind(fra.me.REG[3]);
-  /* parser/parser.nit:5117 */
+  /* parser/parser.nit:10664 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10664);
+  }
+  /* parser/parser.nit:10665 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10678 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5118 */
+  /* parser/parser.nit:10679 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5118);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10679);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16606,65 +30494,70 @@ void parser___ReduceAction107___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction108___action[] = "parser::ReduceAction108::(parser::ReduceAction::action)";
-void parser___ReduceAction108___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction221___action[] = "parser::ReduceAction221::(parser::ReduceAction::action)";
+void parser___ReduceAction221___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5123;
-  fra.me.meth = LOCATE_parser___ReduceAction108___action;
+  fra.me.line = 10684;
+  fra.me.meth = LOCATE_parser___ReduceAction221___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:5125 */
+  /* parser/parser.nit:10686 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5126 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5127 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5128 */
+  /* parser/parser.nit:10687 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5129 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5130 */
+  /* parser/parser.nit:10688 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5131 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:5133 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:10689 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10690 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10692 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10692);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:10694 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:5134 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10694);
   }
-  /* parser/parser.nit:5136 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:5137 */
+  /* parser/parser.nit:10696 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10696);
+  }
+  /* parser/parser.nit:10698 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10698);
+  }
+  /* parser/parser.nit:10699 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:10712 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:10713 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5137);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10713);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16672,18 +30565,17 @@ void parser___ReduceAction108___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction109___action[] = "parser::ReduceAction109::(parser::ReduceAction::action)";
-void parser___ReduceAction109___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction222___action[] = "parser::ReduceAction222::(parser::ReduceAction::action)";
+void parser___ReduceAction222___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5142;
-  fra.me.meth = LOCATE_parser___ReduceAction109___action;
+  fra.me.line = 10718;
+  fra.me.meth = LOCATE_parser___ReduceAction222___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -16691,58 +30583,61 @@ void parser___ReduceAction109___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = 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:5144 */
+  /* parser/parser.nit:10720 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5145 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5146 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5147 */
+  /* parser/parser.nit:10721 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5148 */
+  /* parser/parser.nit:10722 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5149 */
+  /* parser/parser.nit:10723 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5150 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5151 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:5154 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10724 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10725 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10727 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5154);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10727);
   }
-  /* parser/parser.nit:5155 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* parser/parser.nit:10729 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10729);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:10731 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:5156 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10731);
   }
-  /* parser/parser.nit:5158 */
-  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:5159 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:5160 */
+  /* parser/parser.nit:10733 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10733);
+  }
+  /* parser/parser.nit:10735 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10735);
+  }
+  /* parser/parser.nit:10736 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:10749 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:10750 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5160);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10750);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16750,40 +30645,79 @@ void parser___ReduceAction109___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction110___action[] = "parser::ReduceAction110::(parser::ReduceAction::action)";
-void parser___ReduceAction110___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction223___action[] = "parser::ReduceAction223::(parser::ReduceAction::action)";
+void parser___ReduceAction223___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5165;
-  fra.me.meth = LOCATE_parser___ReduceAction110___action;
+  fra.me.line = 10755;
+  fra.me.meth = LOCATE_parser___ReduceAction223___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:5167 */
+  /* parser/parser.nit:10757 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5168 */
+  /* parser/parser.nit:10758 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5169 */
+  /* parser/parser.nit:10759 */
   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:5172 */
+  /* parser/parser.nit:10760 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10761 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10762 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10764 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10764);
+  }
+  /* parser/parser.nit:10766 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10766);
+  }
+  /* parser/parser.nit:10768 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10768);
+  }
+  /* parser/parser.nit:10770 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10770);
+  }
+  /* parser/parser.nit:10772 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10772);
+  }
+  /* parser/parser.nit:10773 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:10786 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5173 */
+  /* parser/parser.nit:10787 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5173);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10787);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16791,43 +30725,88 @@ void parser___ReduceAction110___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction111___action[] = "parser::ReduceAction111::(parser::ReduceAction::action)";
-void parser___ReduceAction111___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction224___action[] = "parser::ReduceAction224::(parser::ReduceAction::action)";
+void parser___ReduceAction224___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5178;
-  fra.me.meth = LOCATE_parser___ReduceAction111___action;
+  fra.me.line = 10792;
+  fra.me.meth = LOCATE_parser___ReduceAction224___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:5180 */
+  /* parser/parser.nit:10794 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5181 */
+  /* parser/parser.nit:10795 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5183 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:10796 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10797 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10798 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10799 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10800 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10802 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5183);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10802);
   }
-  /* parser/parser.nit:5184 */
-  fra.me.REG[3] = NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:5188 */
+  /* parser/parser.nit:10804 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10804);
+  }
+  /* parser/parser.nit:10806 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10806);
+  }
+  /* parser/parser.nit:10808 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10808);
+  }
+  /* parser/parser.nit:10810 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10810);
+  }
+  /* parser/parser.nit:10812 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10812);
+  }
+  /* parser/parser.nit:10813 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:10826 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5189 */
+  /* parser/parser.nit:10827 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5189);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10827);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16835,52 +30814,79 @@ void parser___ReduceAction111___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction112___action[] = "parser::ReduceAction112::(parser::ReduceAction::action)";
-void parser___ReduceAction112___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction225___action[] = "parser::ReduceAction225::(parser::ReduceAction::action)";
+void parser___ReduceAction225___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5194;
-  fra.me.meth = LOCATE_parser___ReduceAction112___action;
+  fra.me.line = 10832;
+  fra.me.meth = LOCATE_parser___ReduceAction225___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:5196 */
+  /* parser/parser.nit:10834 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5197 */
+  /* parser/parser.nit:10835 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5198 */
+  /* parser/parser.nit:10836 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5200 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:10837 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10838 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10839 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10841 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5200);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10841);
   }
-  /* parser/parser.nit:5202 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:10843 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5202);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10843);
   }
-  /* parser/parser.nit:5203 */
-  fra.me.REG[3] = NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:5207 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5208 */
+  /* parser/parser.nit:10845 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10845);
+  }
+  /* parser/parser.nit:10847 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10847);
+  }
+  /* parser/parser.nit:10849 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10849);
+  }
+  /* parser/parser.nit:10850 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:10863 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:10864 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5208);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10864);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16888,17 +30894,17 @@ void parser___ReduceAction112___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction113___action[] = "parser::ReduceAction113::(parser::ReduceAction::action)";
-void parser___ReduceAction113___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction226___action[] = "parser::ReduceAction226::(parser::ReduceAction::action)";
+void parser___ReduceAction226___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5213;
-  fra.me.meth = LOCATE_parser___ReduceAction113___action;
+  fra.me.line = 10869;
+  fra.me.meth = LOCATE_parser___ReduceAction226___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -16906,39 +30912,70 @@ void parser___ReduceAction113___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = 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:5215 */
+  /* parser/parser.nit:10871 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5216 */
+  /* parser/parser.nit:10872 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5217 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5218 */
+  /* parser/parser.nit:10873 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5219 */
+  /* parser/parser.nit:10874 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5221 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwspecial, ID_parser___parser_nodes___TKwspecial)) /*cast nullable TKwspecial*/;
+  /* parser/parser.nit:10875 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10876 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10877 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10879 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5221);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10879);
   }
-  /* parser/parser.nit:5223 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:10881 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5223);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10881);
   }
-  /* parser/parser.nit:5224 */
-  fra.me.REG[3] = NEW_ASuperclass_parser___parser_prod___ASuperclass___init_asuperclass(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:5229 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5230 */
+  /* parser/parser.nit:10883 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10883);
+  }
+  /* parser/parser.nit:10885 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10885);
+  }
+  /* parser/parser.nit:10887 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10887);
+  }
+  /* parser/parser.nit:10889 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10889);
+  }
+  /* parser/parser.nit:10890 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[3], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:10903 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:10904 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5230);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10904);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -16946,17 +30983,17 @@ void parser___ReduceAction113___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction114___action[] = "parser::ReduceAction114::(parser::ReduceAction::action)";
-void parser___ReduceAction114___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction227___action[] = "parser::ReduceAction227::(parser::ReduceAction::action)";
+void parser___ReduceAction227___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5235;
-  fra.me.meth = LOCATE_parser___ReduceAction114___action;
+  fra.me.line = 10909;
+  fra.me.meth = LOCATE_parser___ReduceAction227___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -16964,39 +31001,70 @@ void parser___ReduceAction114___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = 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:5237 */
+  /* parser/parser.nit:10911 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5238 */
+  /* parser/parser.nit:10912 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5239 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5240 */
+  /* parser/parser.nit:10913 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5241 */
+  /* parser/parser.nit:10914 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5243 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
+  /* parser/parser.nit:10915 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10916 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10917 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10919 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5243);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10919);
   }
-  /* parser/parser.nit:5245 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:10921 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5245);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10921);
   }
-  /* parser/parser.nit:5246 */
-  fra.me.REG[3] = NEW_ASuperclass_parser___parser_prod___ASuperclass___init_asuperclass(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:5251 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5252 */
+  /* parser/parser.nit:10923 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10923);
+  }
+  /* parser/parser.nit:10925 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10925);
+  }
+  /* parser/parser.nit:10927 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10927);
+  }
+  /* parser/parser.nit:10929 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10929);
+  }
+  /* parser/parser.nit:10930 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[3], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:10943 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:10944 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5252);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10944);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17004,37 +31072,97 @@ void parser___ReduceAction114___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction115___action[] = "parser::ReduceAction115::(parser::ReduceAction::action)";
-void parser___ReduceAction115___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction228___action[] = "parser::ReduceAction228::(parser::ReduceAction::action)";
+void parser___ReduceAction228___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 = 5257;
-  fra.me.meth = LOCATE_parser___ReduceAction115___action;
+  fra.me.line = 10949;
+  fra.me.meth = LOCATE_parser___ReduceAction228___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:5259 */
+  /* parser/parser.nit:10951 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5260 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5261 */
+  /* parser/parser.nit:10952 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5263 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5264 */
+  /* parser/parser.nit:10953 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10954 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10955 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10956 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10957 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10958 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10960 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10960);
+  }
+  /* parser/parser.nit:10962 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10962);
+  }
+  /* parser/parser.nit:10964 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10964);
+  }
+  /* parser/parser.nit:10966 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10966);
+  }
+  /* parser/parser.nit:10968 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10968);
+  }
+  /* parser/parser.nit:10970 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10970);
+  }
+  /* parser/parser.nit:10972 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10972);
+  }
+  /* parser/parser.nit:10973 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[3], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:10986 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:10987 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5264);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10987);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17042,17 +31170,17 @@ void parser___ReduceAction115___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction116___action[] = "parser::ReduceAction116::(parser::ReduceAction::action)";
-void parser___ReduceAction116___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction229___action[] = "parser::ReduceAction229::(parser::ReduceAction::action)";
+void parser___ReduceAction229___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5269;
-  fra.me.meth = LOCATE_parser___ReduceAction116___action;
+  fra.me.line = 10992;
+  fra.me.meth = LOCATE_parser___ReduceAction229___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -17062,70 +31190,59 @@ void parser___ReduceAction116___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:5271 */
+  /* parser/parser.nit:10994 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5272 */
+  /* parser/parser.nit:10995 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5273 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5274 */
+  /* parser/parser.nit:10996 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5275 */
+  /* parser/parser.nit:10997 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5276 */
+  /* parser/parser.nit:10998 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5277 */
+  /* parser/parser.nit:10999 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5278 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5280 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5280);
-  }
-  /* parser/parser.nit:5282 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11001 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5282);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11001);
   }
-  /* parser/parser.nit:5284 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11003 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5284);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11003);
   }
-  /* parser/parser.nit:5286 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11005 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5286);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11005);
   }
-  /* parser/parser.nit:5288 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11007 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5288);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11007);
   }
-  /* parser/parser.nit:5290 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11009 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5290);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11009);
   }
-  /* parser/parser.nit:5291 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:5300 */
+  /* parser/parser.nit:11010 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:11023 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5301 */
+  /* parser/parser.nit:11024 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5301);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11024);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17133,17 +31250,17 @@ void parser___ReduceAction116___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction117___action[] = "parser::ReduceAction117::(parser::ReduceAction::action)";
-void parser___ReduceAction117___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction230___action[] = "parser::ReduceAction230::(parser::ReduceAction::action)";
+void parser___ReduceAction230___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5306;
-  fra.me.meth = LOCATE_parser___ReduceAction117___action;
+  fra.me.line = 11029;
+  fra.me.meth = LOCATE_parser___ReduceAction230___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -17154,78 +31271,67 @@ void parser___ReduceAction117___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:5308 */
+  /* parser/parser.nit:11031 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5309 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5310 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5311 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5312 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5313 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5314 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5315 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5316 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5318 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5318);
-  }
-  /* parser/parser.nit:5320 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:11032 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11033 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11034 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11035 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11036 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11037 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11039 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5320);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11039);
   }
-  /* parser/parser.nit:5322 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11041 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5322);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11041);
   }
-  /* parser/parser.nit:5324 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11043 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5324);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11043);
   }
-  /* parser/parser.nit:5326 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11045 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5326);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11045);
   }
-  /* parser/parser.nit:5328 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11047 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5328);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11047);
   }
-  /* parser/parser.nit:5330 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11049 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5330);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11049);
   }
-  /* parser/parser.nit:5331 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:5340 */
+  /* parser/parser.nit:11050 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:11063 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5341 */
+  /* parser/parser.nit:11064 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5341);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11064);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17233,15 +31339,15 @@ void parser___ReduceAction117___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction118___action[] = "parser::ReduceAction118::(parser::ReduceAction::action)";
-void parser___ReduceAction118___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction231___action[] = "parser::ReduceAction231::(parser::ReduceAction::action)";
+void parser___ReduceAction231___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5346;
-  fra.me.meth = LOCATE_parser___ReduceAction118___action;
+  fra.me.line = 11069;
+  fra.me.meth = LOCATE_parser___ReduceAction231___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -17256,69 +31362,65 @@ void parser___ReduceAction118___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:5348 */
+  /* parser/parser.nit:11071 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5349 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5350 */
+  /* parser/parser.nit:11072 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5351 */
+  /* parser/parser.nit:11073 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5352 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5353 */
+  /* parser/parser.nit:11074 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5354 */
+  /* parser/parser.nit:11075 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5355 */
+  /* parser/parser.nit:11076 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5356 */
+  /* parser/parser.nit:11077 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5358 */
+  /* parser/parser.nit:11079 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5358);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11079);
   }
-  /* parser/parser.nit:5360 */
+  /* parser/parser.nit:11081 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5360);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11081);
   }
-  /* parser/parser.nit:5362 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11083 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5362);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11083);
   }
-  /* parser/parser.nit:5364 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11085 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5364);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11085);
   }
-  /* parser/parser.nit:5366 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11087 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5366);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11087);
   }
-  /* parser/parser.nit:5368 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11089 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5368);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11089);
   }
-  /* parser/parser.nit:5369 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:5378 */
+  /* parser/parser.nit:11090 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:11103 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5379 */
+  /* parser/parser.nit:11104 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5379);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11104);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17326,15 +31428,15 @@ void parser___ReduceAction118___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction119___action[] = "parser::ReduceAction119::(parser::ReduceAction::action)";
-void parser___ReduceAction119___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction232___action[] = "parser::ReduceAction232::(parser::ReduceAction::action)";
+void parser___ReduceAction232___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 = 5384;
-  fra.me.meth = LOCATE_parser___ReduceAction119___action;
+  fra.me.line = 11109;
+  fra.me.meth = LOCATE_parser___ReduceAction232___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
@@ -17350,77 +31452,73 @@ void parser___ReduceAction119___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:5386 */
+  /* parser/parser.nit:11111 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5387 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5388 */
+  /* parser/parser.nit:11112 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5389 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5390 */
+  /* parser/parser.nit:11113 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5391 */
+  /* parser/parser.nit:11114 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5392 */
+  /* parser/parser.nit:11115 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5393 */
+  /* parser/parser.nit:11116 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5394 */
+  /* parser/parser.nit:11117 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5395 */
+  /* parser/parser.nit:11118 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5397 */
+  /* parser/parser.nit:11120 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5397);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11120);
   }
-  /* parser/parser.nit:5399 */
+  /* parser/parser.nit:11122 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5399);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11122);
   }
-  /* parser/parser.nit:5401 */
+  /* parser/parser.nit:11124 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5401);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11124);
   }
-  /* parser/parser.nit:5403 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11126 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5403);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11126);
   }
-  /* parser/parser.nit:5405 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11128 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5405);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11128);
   }
-  /* parser/parser.nit:5407 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11130 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5407);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11130);
   }
-  /* parser/parser.nit:5409 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11132 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5409);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11132);
   }
-  /* parser/parser.nit:5410 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:5419 */
+  /* parser/parser.nit:11133 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:11146 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5420 */
+  /* parser/parser.nit:11147 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5420);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11147);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17428,15 +31526,15 @@ void parser___ReduceAction119___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction120___action[] = "parser::ReduceAction120::(parser::ReduceAction::action)";
-void parser___ReduceAction120___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction233___action[] = "parser::ReduceAction233::(parser::ReduceAction::action)";
+void parser___ReduceAction233___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5425;
-  fra.me.meth = LOCATE_parser___ReduceAction120___action;
+  fra.me.line = 11152;
+  fra.me.meth = LOCATE_parser___ReduceAction233___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -17451,69 +31549,65 @@ void parser___ReduceAction120___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:5427 */
+  /* parser/parser.nit:11154 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5428 */
+  /* parser/parser.nit:11155 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5429 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5430 */
+  /* parser/parser.nit:11156 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5431 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5432 */
+  /* parser/parser.nit:11157 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5433 */
+  /* parser/parser.nit:11158 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5434 */
+  /* parser/parser.nit:11159 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5435 */
+  /* parser/parser.nit:11160 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5437 */
+  /* parser/parser.nit:11162 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5437);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11162);
   }
-  /* parser/parser.nit:5439 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11164 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5439);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11164);
   }
-  /* parser/parser.nit:5441 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11166 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5441);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11166);
   }
-  /* parser/parser.nit:5443 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11168 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5443);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11168);
   }
-  /* parser/parser.nit:5445 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11170 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5445);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11170);
   }
-  /* parser/parser.nit:5447 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11172 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5447);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11172);
   }
-  /* parser/parser.nit:5448 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:5457 */
+  /* parser/parser.nit:11173 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:11186 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5458 */
+  /* parser/parser.nit:11187 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5458);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11187);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17521,15 +31615,15 @@ void parser___ReduceAction120___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction121___action[] = "parser::ReduceAction121::(parser::ReduceAction::action)";
-void parser___ReduceAction121___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction234___action[] = "parser::ReduceAction234::(parser::ReduceAction::action)";
+void parser___ReduceAction234___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 = 5463;
-  fra.me.meth = LOCATE_parser___ReduceAction121___action;
+  fra.me.line = 11192;
+  fra.me.meth = LOCATE_parser___ReduceAction234___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
@@ -17545,77 +31639,73 @@ void parser___ReduceAction121___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:5465 */
+  /* parser/parser.nit:11194 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5466 */
+  /* parser/parser.nit:11195 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5467 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5468 */
+  /* parser/parser.nit:11196 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5469 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5470 */
+  /* parser/parser.nit:11197 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5471 */
+  /* parser/parser.nit:11198 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5472 */
+  /* parser/parser.nit:11199 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5473 */
+  /* parser/parser.nit:11200 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5474 */
+  /* parser/parser.nit:11201 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5476 */
+  /* parser/parser.nit:11203 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5476);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11203);
   }
-  /* parser/parser.nit:5478 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:11205 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5478);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11205);
   }
-  /* parser/parser.nit:5480 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11207 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5480);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11207);
   }
-  /* parser/parser.nit:5482 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11209 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5482);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11209);
   }
-  /* parser/parser.nit:5484 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11211 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5484);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11211);
   }
-  /* parser/parser.nit:5486 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11213 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5486);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11213);
   }
-  /* parser/parser.nit:5488 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11215 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5488);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11215);
   }
-  /* parser/parser.nit:5489 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:5498 */
+  /* parser/parser.nit:11216 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:11229 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5499 */
+  /* parser/parser.nit:11230 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5499);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11230);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17623,17 +31713,17 @@ void parser___ReduceAction121___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction122___action[] = "parser::ReduceAction122::(parser::ReduceAction::action)";
-void parser___ReduceAction122___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction235___action[] = "parser::ReduceAction235::(parser::ReduceAction::action)";
+void parser___ReduceAction235___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 = 5504;
-  fra.me.meth = LOCATE_parser___ReduceAction122___action;
+  fra.me.line = 11235;
+  fra.me.meth = LOCATE_parser___ReduceAction235___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -17643,63 +31733,77 @@ 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[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:5506 */
+  /* parser/parser.nit:11237 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5507 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5508 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5509 */
+  /* parser/parser.nit:11238 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5510 */
+  /* parser/parser.nit:11239 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5511 */
+  /* parser/parser.nit:11240 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5512 */
+  /* parser/parser.nit:11241 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5513 */
+  /* parser/parser.nit:11242 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5515 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:11243 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11244 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11246 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5515);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11246);
   }
-  /* parser/parser.nit:5517 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11248 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5517);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11248);
   }
-  /* parser/parser.nit:5519 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11250 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5519);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11250);
   }
-  /* parser/parser.nit:5521 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11252 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5521);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11252);
   }
-  /* parser/parser.nit:5523 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11254 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5523);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11254);
   }
-  /* parser/parser.nit:5524 */
-  fra.me.REG[3] = NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:5532 */
+  /* parser/parser.nit:11256 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11256);
+  }
+  /* parser/parser.nit:11258 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11258);
+  }
+  /* parser/parser.nit:11259 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:11272 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5533 */
+  /* parser/parser.nit:11273 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5533);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11273);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17707,17 +31811,17 @@ void parser___ReduceAction122___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction123___action[] = "parser::ReduceAction123::(parser::ReduceAction::action)";
-void parser___ReduceAction123___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction236___action[] = "parser::ReduceAction236::(parser::ReduceAction::action)";
+void parser___ReduceAction236___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5538;
-  fra.me.meth = LOCATE_parser___ReduceAction123___action;
+  fra.me.line = 11278;
+  fra.me.meth = LOCATE_parser___ReduceAction236___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -17728,71 +31832,85 @@ void parser___ReduceAction123___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:5540 */
+  /* parser/parser.nit:11280 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5541 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5542 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5543 */
+  /* parser/parser.nit:11281 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5544 */
+  /* parser/parser.nit:11282 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5545 */
+  /* parser/parser.nit:11283 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5546 */
+  /* parser/parser.nit:11284 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5547 */
+  /* parser/parser.nit:11285 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5548 */
+  /* parser/parser.nit:11286 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5550 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:11287 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11288 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11290 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5550);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11290);
   }
-  /* parser/parser.nit:5552 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:11292 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5552);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11292);
   }
-  /* parser/parser.nit:5554 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11294 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5554);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11294);
   }
-  /* parser/parser.nit:5556 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11296 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5556);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11296);
   }
-  /* parser/parser.nit:5558 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11298 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5558);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11298);
   }
-  /* parser/parser.nit:5560 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11300 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11300);
+  }
+  /* parser/parser.nit:11302 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11302);
+  }
+  /* parser/parser.nit:11304 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5560);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11304);
   }
-  /* parser/parser.nit:5561 */
-  fra.me.REG[3] = NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:5569 */
+  /* parser/parser.nit:11305 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[4], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:11318 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5570 */
+  /* parser/parser.nit:11319 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____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, 11319);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17800,15 +31918,15 @@ void parser___ReduceAction123___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction124___action[] = "parser::ReduceAction124::(parser::ReduceAction::action)";
-void parser___ReduceAction124___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction237___action[] = "parser::ReduceAction237::(parser::ReduceAction::action)";
+void parser___ReduceAction237___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5575;
-  fra.me.meth = LOCATE_parser___ReduceAction124___action;
+  fra.me.line = 11324;
+  fra.me.meth = LOCATE_parser___ReduceAction237___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
@@ -17822,61 +31940,61 @@ void parser___ReduceAction124___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:5577 */
+  /* parser/parser.nit:11326 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5578 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5579 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5580 */
+  /* parser/parser.nit:11327 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5581 */
+  /* parser/parser.nit:11328 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5582 */
+  /* parser/parser.nit:11329 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11330 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11331 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5583 */
+  /* parser/parser.nit:11332 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5584 */
+  /* parser/parser.nit:11333 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5586 */
+  /* parser/parser.nit:11335 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5586);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11335);
   }
-  /* parser/parser.nit:5588 */
+  /* parser/parser.nit:11337 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5588);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11337);
   }
-  /* parser/parser.nit:5590 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11339 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5590);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11339);
   }
-  /* parser/parser.nit:5592 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11341 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5592);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11341);
   }
-  /* parser/parser.nit:5594 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11343 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5594);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11343);
   }
-  /* parser/parser.nit:5595 */
-  fra.me.REG[3] = NEW_AInternMethPropdef_parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:5603 */
+  /* parser/parser.nit:11344 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:11357 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5604 */
+  /* parser/parser.nit:11358 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5604);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11358);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17884,15 +32002,15 @@ void parser___ReduceAction124___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction125___action[] = "parser::ReduceAction125::(parser::ReduceAction::action)";
-void parser___ReduceAction125___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction238___action[] = "parser::ReduceAction238::(parser::ReduceAction::action)";
+void parser___ReduceAction238___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5609;
-  fra.me.meth = LOCATE_parser___ReduceAction125___action;
+  fra.me.line = 11363;
+  fra.me.meth = LOCATE_parser___ReduceAction238___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -17907,69 +32025,69 @@ void parser___ReduceAction125___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:5611 */
+  /* parser/parser.nit:11365 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5612 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5613 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5614 */
+  /* parser/parser.nit:11366 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5615 */
+  /* parser/parser.nit:11367 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5616 */
+  /* parser/parser.nit:11368 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11369 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11370 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5617 */
+  /* parser/parser.nit:11371 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5618 */
+  /* parser/parser.nit:11372 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5619 */
+  /* parser/parser.nit:11373 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5621 */
+  /* parser/parser.nit:11375 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5621);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11375);
   }
-  /* parser/parser.nit:5623 */
+  /* parser/parser.nit:11377 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5623);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11377);
   }
-  /* parser/parser.nit:5625 */
+  /* parser/parser.nit:11379 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5625);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11379);
   }
-  /* parser/parser.nit:5627 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11381 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5627);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11381);
   }
-  /* parser/parser.nit:5629 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11383 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5629);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11383);
   }
-  /* parser/parser.nit:5631 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11385 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5631);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11385);
   }
-  /* parser/parser.nit:5632 */
-  fra.me.REG[3] = NEW_AInternMethPropdef_parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:5640 */
+  /* parser/parser.nit:11386 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:11399 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5641 */
+  /* parser/parser.nit:11400 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5641);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11400);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -17977,17 +32095,17 @@ void parser___ReduceAction125___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction126___action[] = "parser::ReduceAction126::(parser::ReduceAction::action)";
-void parser___ReduceAction126___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction239___action[] = "parser::ReduceAction239::(parser::ReduceAction::action)";
+void parser___ReduceAction239___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5646;
-  fra.me.meth = LOCATE_parser___ReduceAction126___action;
+  fra.me.line = 11405;
+  fra.me.meth = LOCATE_parser___ReduceAction239___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -17997,63 +32115,72 @@ void parser___ReduceAction126___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:5648 */
+  /* parser/parser.nit:11407 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5649 */
+  /* parser/parser.nit:11408 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5650 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5651 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5652 */
+  /* parser/parser.nit:11409 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5653 */
+  /* parser/parser.nit:11410 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11411 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11412 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5654 */
+  /* parser/parser.nit:11413 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5655 */
+  /* parser/parser.nit:11414 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5657 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:11415 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11417 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5657);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11417);
   }
-  /* parser/parser.nit:5659 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11419 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5659);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11419);
   }
-  /* parser/parser.nit:5661 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11421 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5661);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11421);
   }
-  /* parser/parser.nit:5663 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11423 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5663);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11423);
   }
-  /* parser/parser.nit:5665 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11425 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5665);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11425);
   }
-  /* parser/parser.nit:5666 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:5677 */
+  /* parser/parser.nit:11427 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11427);
+  }
+  /* parser/parser.nit:11428 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:11441 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5678 */
+  /* parser/parser.nit:11442 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5678);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11442);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18061,17 +32188,17 @@ void parser___ReduceAction126___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction127___action[] = "parser::ReduceAction127::(parser::ReduceAction::action)";
-void parser___ReduceAction127___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction240___action[] = "parser::ReduceAction240::(parser::ReduceAction::action)";
+void parser___ReduceAction240___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 = 5683;
-  fra.me.meth = LOCATE_parser___ReduceAction127___action;
+  fra.me.line = 11447;
+  fra.me.meth = LOCATE_parser___ReduceAction240___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -18082,71 +32209,80 @@ 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:5685 */
+  /* parser/parser.nit:11449 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5686 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5687 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5688 */
+  /* parser/parser.nit:11450 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5689 */
+  /* parser/parser.nit:11451 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5690 */
+  /* parser/parser.nit:11452 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11453 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11454 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5691 */
+  /* parser/parser.nit:11455 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5692 */
+  /* parser/parser.nit:11456 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5693 */
+  /* parser/parser.nit:11457 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5695 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:11458 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11460 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5695);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11460);
   }
-  /* parser/parser.nit:5697 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:11462 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5697);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11462);
   }
-  /* parser/parser.nit:5699 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11464 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5699);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11464);
   }
-  /* parser/parser.nit:5701 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11466 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5701);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11466);
   }
-  /* parser/parser.nit:5703 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11468 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5703);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11468);
   }
-  /* parser/parser.nit:5705 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11470 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5705);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11470);
   }
-  /* parser/parser.nit:5706 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:5717 */
+  /* parser/parser.nit:11472 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11472);
+  }
+  /* parser/parser.nit:11473 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:11486 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5718 */
+  /* parser/parser.nit:11487 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5718);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11487);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18154,15 +32290,15 @@ void parser___ReduceAction127___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction128___action[] = "parser::ReduceAction128::(parser::ReduceAction::action)";
-void parser___ReduceAction128___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction241___action[] = "parser::ReduceAction241::(parser::ReduceAction::action)";
+void parser___ReduceAction241___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5723;
-  fra.me.meth = LOCATE_parser___ReduceAction128___action;
+  fra.me.line = 11492;
+  fra.me.meth = LOCATE_parser___ReduceAction241___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -18177,69 +32313,69 @@ void parser___ReduceAction128___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:5725 */
+  /* parser/parser.nit:11494 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5726 */
+  /* parser/parser.nit:11495 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5727 */
+  /* parser/parser.nit:11496 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5728 */
+  /* parser/parser.nit:11497 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5729 */
+  /* parser/parser.nit:11498 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5730 */
+  /* parser/parser.nit:11499 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5731 */
+  /* parser/parser.nit:11500 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5732 */
+  /* parser/parser.nit:11501 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5733 */
+  /* parser/parser.nit:11502 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5735 */
+  /* parser/parser.nit:11504 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5735);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11504);
   }
-  /* parser/parser.nit:5737 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11506 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5737);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11506);
   }
-  /* parser/parser.nit:5739 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11508 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5739);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11508);
   }
-  /* parser/parser.nit:5741 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11510 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5741);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11510);
   }
-  /* parser/parser.nit:5743 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11512 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5743);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11512);
   }
-  /* parser/parser.nit:5745 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:11514 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5745);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11514);
   }
-  /* parser/parser.nit:5746 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:5757 */
+  /* parser/parser.nit:11515 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:11528 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5758 */
+  /* parser/parser.nit:11529 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5758);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11529);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18247,15 +32383,15 @@ void parser___ReduceAction128___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction129___action[] = "parser::ReduceAction129::(parser::ReduceAction::action)";
-void parser___ReduceAction129___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction242___action[] = "parser::ReduceAction242::(parser::ReduceAction::action)";
+void parser___ReduceAction242___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5763;
-  fra.me.meth = LOCATE_parser___ReduceAction129___action;
+  fra.me.line = 11534;
+  fra.me.meth = LOCATE_parser___ReduceAction242___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
@@ -18271,77 +32407,77 @@ void parser___ReduceAction129___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:5765 */
+  /* parser/parser.nit:11536 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5766 */
+  /* parser/parser.nit:11537 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5767 */
+  /* parser/parser.nit:11538 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5768 */
+  /* parser/parser.nit:11539 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5769 */
+  /* parser/parser.nit:11540 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5770 */
+  /* parser/parser.nit:11541 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5771 */
+  /* parser/parser.nit:11542 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5772 */
+  /* parser/parser.nit:11543 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5773 */
+  /* parser/parser.nit:11544 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5774 */
+  /* parser/parser.nit:11545 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5776 */
+  /* parser/parser.nit:11547 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5776);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11547);
   }
-  /* parser/parser.nit:5778 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:11549 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5778);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11549);
   }
-  /* parser/parser.nit:5780 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11551 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5780);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11551);
   }
-  /* parser/parser.nit:5782 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11553 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5782);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11553);
   }
-  /* parser/parser.nit:5784 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11555 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5784);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11555);
   }
-  /* parser/parser.nit:5786 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11557 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5786);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11557);
   }
-  /* parser/parser.nit:5788 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:11559 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5788);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11559);
   }
-  /* parser/parser.nit:5789 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:5800 */
+  /* parser/parser.nit:11560 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:11573 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5801 */
+  /* parser/parser.nit:11574 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5801);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11574);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18349,17 +32485,17 @@ void parser___ReduceAction129___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction130___action[] = "parser::ReduceAction130::(parser::ReduceAction::action)";
-void parser___ReduceAction130___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction243___action[] = "parser::ReduceAction243::(parser::ReduceAction::action)";
+void parser___ReduceAction243___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 = 5806;
-  fra.me.meth = LOCATE_parser___ReduceAction130___action;
+  fra.me.line = 11579;
+  fra.me.meth = LOCATE_parser___ReduceAction243___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -18370,71 +32506,80 @@ void parser___ReduceAction130___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:5808 */
+  /* parser/parser.nit:11581 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5809 */
+  /* parser/parser.nit:11582 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5810 */
+  /* parser/parser.nit:11583 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5811 */
+  /* parser/parser.nit:11584 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5812 */
+  /* parser/parser.nit:11585 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5813 */
+  /* parser/parser.nit:11586 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5814 */
+  /* parser/parser.nit:11587 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5815 */
+  /* parser/parser.nit:11588 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5816 */
+  /* parser/parser.nit:11589 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5818 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:11590 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11592 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5818);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11592);
   }
-  /* parser/parser.nit:5820 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11594 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5820);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11594);
   }
-  /* parser/parser.nit:5822 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11596 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5822);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11596);
   }
-  /* parser/parser.nit:5824 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11598 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5824);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11598);
   }
-  /* parser/parser.nit:5826 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11600 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5826);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11600);
   }
-  /* parser/parser.nit:5828 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:11602 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5828);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11602);
   }
-  /* parser/parser.nit:5829 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:5840 */
+  /* parser/parser.nit:11604 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11604);
+  }
+  /* parser/parser.nit:11605 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:11618 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5841 */
+  /* parser/parser.nit:11619 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5841);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11619);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18442,17 +32587,17 @@ void parser___ReduceAction130___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction131___action[] = "parser::ReduceAction131::(parser::ReduceAction::action)";
-void parser___ReduceAction131___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction244___action[] = "parser::ReduceAction244::(parser::ReduceAction::action)";
+void parser___ReduceAction244___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5846;
-  fra.me.meth = LOCATE_parser___ReduceAction131___action;
+  fra.me.line = 11624;
+  fra.me.meth = LOCATE_parser___ReduceAction244___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -18464,79 +32609,88 @@ void parser___ReduceAction131___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:5848 */
+  /* parser/parser.nit:11626 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5849 */
+  /* parser/parser.nit:11627 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5850 */
+  /* parser/parser.nit:11628 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5851 */
+  /* parser/parser.nit:11629 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5852 */
+  /* parser/parser.nit:11630 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5853 */
+  /* parser/parser.nit:11631 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5854 */
+  /* parser/parser.nit:11632 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5855 */
+  /* parser/parser.nit:11633 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5856 */
+  /* parser/parser.nit:11634 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5857 */
+  /* parser/parser.nit:11635 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5859 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:11636 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11638 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5859);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11638);
   }
-  /* parser/parser.nit:5861 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:11640 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5861);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11640);
   }
-  /* parser/parser.nit:5863 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11642 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5863);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11642);
   }
-  /* parser/parser.nit:5865 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11644 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5865);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11644);
   }
-  /* parser/parser.nit:5867 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11646 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5867);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11646);
   }
-  /* parser/parser.nit:5869 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11648 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5869);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11648);
   }
-  /* parser/parser.nit:5871 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:11650 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5871);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11650);
   }
-  /* parser/parser.nit:5872 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:5883 */
+  /* parser/parser.nit:11652 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11652);
+  }
+  /* parser/parser.nit:11653 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[4], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:11666 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5884 */
+  /* parser/parser.nit:11667 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5884);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11667);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18544,17 +32698,17 @@ void parser___ReduceAction131___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction132___action[] = "parser::ReduceAction132::(parser::ReduceAction::action)";
-void parser___ReduceAction132___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction245___action[] = "parser::ReduceAction245::(parser::ReduceAction::action)";
+void parser___ReduceAction245___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5889;
-  fra.me.meth = LOCATE_parser___ReduceAction132___action;
+  fra.me.line = 11672;
+  fra.me.meth = LOCATE_parser___ReduceAction245___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -18565,80 +32719,71 @@ void parser___ReduceAction132___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:5891 */
+  /* parser/parser.nit:11674 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5892 */
+  /* parser/parser.nit:11675 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5893 */
+  /* parser/parser.nit:11676 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5894 */
+  /* parser/parser.nit:11677 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5895 */
+  /* parser/parser.nit:11678 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5896 */
+  /* parser/parser.nit:11679 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5897 */
+  /* parser/parser.nit:11680 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5898 */
+  /* parser/parser.nit:11681 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5899 */
+  /* parser/parser.nit:11682 */
   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:5902 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5902);
-  }
-  /* parser/parser.nit:5904 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11684 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5904);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11684);
   }
-  /* parser/parser.nit:5906 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11686 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5906);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11686);
   }
-  /* parser/parser.nit:5908 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11688 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5908);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11688);
   }
-  /* parser/parser.nit:5910 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11690 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5910);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11690);
   }
-  /* parser/parser.nit:5912 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:11692 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5912);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11692);
   }
-  /* parser/parser.nit:5914 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:11694 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5914);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11694);
   }
-  /* parser/parser.nit:5915 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:5926 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5927 */
+  /* parser/parser.nit:11695 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
+  /* parser/parser.nit:11708 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:11709 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5927);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11709);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18646,17 +32791,17 @@ void parser___ReduceAction132___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction133___action[] = "parser::ReduceAction133::(parser::ReduceAction::action)";
-void parser___ReduceAction133___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction246___action[] = "parser::ReduceAction246::(parser::ReduceAction::action)";
+void parser___ReduceAction246___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 = 5932;
-  fra.me.meth = LOCATE_parser___ReduceAction133___action;
+  fra.me.line = 11714;
+  fra.me.meth = LOCATE_parser___ReduceAction246___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -18668,88 +32813,79 @@ void parser___ReduceAction133___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:5934 */
+  /* parser/parser.nit:11716 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5935 */
+  /* parser/parser.nit:11717 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5936 */
+  /* parser/parser.nit:11718 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5937 */
+  /* parser/parser.nit:11719 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5938 */
+  /* parser/parser.nit:11720 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5939 */
+  /* parser/parser.nit:11721 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5940 */
+  /* parser/parser.nit:11722 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5941 */
+  /* parser/parser.nit:11723 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5942 */
+  /* parser/parser.nit:11724 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5943 */
+  /* parser/parser.nit:11725 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5944 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5946 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5946);
-  }
-  /* parser/parser.nit:5948 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:11727 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5948);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11727);
   }
-  /* parser/parser.nit:5950 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11729 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5950);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11729);
   }
-  /* parser/parser.nit:5952 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11731 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5952);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11731);
   }
-  /* parser/parser.nit:5954 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11733 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5954);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11733);
   }
-  /* parser/parser.nit:5956 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11735 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5956);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11735);
   }
-  /* parser/parser.nit:5958 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:11737 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5958);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11737);
   }
-  /* parser/parser.nit:5960 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:11739 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5960);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11739);
   }
-  /* parser/parser.nit:5961 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:5972 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:5973 */
+  /* parser/parser.nit:11740 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
+  /* parser/parser.nit:11753 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:11754 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5973);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11754);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18757,17 +32893,17 @@ void parser___ReduceAction133___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction134___action[] = "parser::ReduceAction134::(parser::ReduceAction::action)";
-void parser___ReduceAction134___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction247___action[] = "parser::ReduceAction247::(parser::ReduceAction::action)";
+void parser___ReduceAction247___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 = 5978;
-  fra.me.meth = LOCATE_parser___ReduceAction134___action;
+  fra.me.line = 11759;
+  fra.me.meth = LOCATE_parser___ReduceAction247___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -18778,71 +32914,80 @@ void parser___ReduceAction134___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:5980 */
+  /* parser/parser.nit:11761 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:5981 */
+  /* parser/parser.nit:11762 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5982 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5983 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5984 */
+  /* parser/parser.nit:11763 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5985 */
+  /* parser/parser.nit:11764 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11765 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5986 */
+  /* parser/parser.nit:11766 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11767 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5987 */
+  /* parser/parser.nit:11768 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5988 */
+  /* parser/parser.nit:11769 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:5990 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:11770 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11772 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5990);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11772);
   }
-  /* parser/parser.nit:5992 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11774 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5992);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11774);
   }
-  /* parser/parser.nit:5994 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11776 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5994);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11776);
   }
-  /* parser/parser.nit:5996 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11778 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5996);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11778);
   }
-  /* parser/parser.nit:5998 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11780 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5998);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11780);
   }
-  /* parser/parser.nit:6000 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:11782 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6000);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11782);
   }
-  /* parser/parser.nit:6001 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:6012 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6013 */
+  /* parser/parser.nit:11784 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11784);
+  }
+  /* parser/parser.nit:11785 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3], fra.me.REG[4]);
+  /* parser/parser.nit:11798 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:11799 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6013);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11799);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18850,17 +32995,17 @@ void parser___ReduceAction134___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction135___action[] = "parser::ReduceAction135::(parser::ReduceAction::action)";
-void parser___ReduceAction135___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction248___action[] = "parser::ReduceAction248::(parser::ReduceAction::action)";
+void parser___ReduceAction248___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6018;
-  fra.me.meth = LOCATE_parser___ReduceAction135___action;
+  fra.me.line = 11804;
+  fra.me.meth = LOCATE_parser___ReduceAction248___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -18872,79 +33017,88 @@ void parser___ReduceAction135___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:6020 */
+  /* parser/parser.nit:11806 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6021 */
+  /* parser/parser.nit:11807 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6022 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6023 */
+  /* parser/parser.nit:11808 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6024 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6025 */
+  /* parser/parser.nit:11809 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11810 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11811 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6026 */
+  /* parser/parser.nit:11812 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6027 */
+  /* parser/parser.nit:11813 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6028 */
+  /* parser/parser.nit:11814 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6029 */
+  /* parser/parser.nit:11815 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6031 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:11816 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11818 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6031);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11818);
   }
-  /* parser/parser.nit:6033 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:11820 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6033);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11820);
   }
-  /* parser/parser.nit:6035 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11822 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6035);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11822);
   }
-  /* parser/parser.nit:6037 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11824 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6037);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11824);
   }
-  /* parser/parser.nit:6039 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11826 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6039);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11826);
   }
-  /* parser/parser.nit:6041 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11828 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6041);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11828);
   }
-  /* parser/parser.nit:6043 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:11830 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6043);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11830);
   }
-  /* parser/parser.nit:6044 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:6055 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6056 */
+  /* parser/parser.nit:11832 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11832);
+  }
+  /* parser/parser.nit:11833 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, NIT_NULL, 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], fra.me.REG[4]);
+  /* parser/parser.nit:11846 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:11847 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6056);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11847);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -18952,15 +33106,15 @@ void parser___ReduceAction135___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction136___action[] = "parser::ReduceAction136::(parser::ReduceAction::action)";
-void parser___ReduceAction136___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction249___action[] = "parser::ReduceAction249::(parser::ReduceAction::action)";
+void parser___ReduceAction249___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 = 6061;
-  fra.me.meth = LOCATE_parser___ReduceAction136___action;
+  fra.me.line = 11852;
+  fra.me.meth = LOCATE_parser___ReduceAction249___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
@@ -18976,77 +33130,77 @@ void parser___ReduceAction136___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:6063 */
+  /* parser/parser.nit:11854 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6064 */
+  /* parser/parser.nit:11855 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6065 */
+  /* parser/parser.nit:11856 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6066 */
+  /* parser/parser.nit:11857 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6067 */
+  /* parser/parser.nit:11858 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6068 */
+  /* parser/parser.nit:11859 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6069 */
+  /* parser/parser.nit:11860 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6070 */
+  /* parser/parser.nit:11861 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6071 */
+  /* parser/parser.nit:11862 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6072 */
+  /* parser/parser.nit:11863 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6074 */
+  /* parser/parser.nit:11865 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6074);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11865);
   }
-  /* parser/parser.nit:6076 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11867 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6076);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11867);
   }
-  /* parser/parser.nit:6078 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11869 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6078);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11869);
   }
-  /* parser/parser.nit:6080 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11871 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6080);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11871);
   }
-  /* parser/parser.nit:6082 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11873 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6082);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11873);
   }
-  /* parser/parser.nit:6084 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:11875 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6084);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11875);
   }
-  /* parser/parser.nit:6086 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:11877 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6086);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11877);
   }
-  /* parser/parser.nit:6087 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:6098 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6099 */
+  /* parser/parser.nit:11878 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
+  /* parser/parser.nit:11891 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:11892 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6099);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11892);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19054,15 +33208,15 @@ void parser___ReduceAction136___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction137___action[] = "parser::ReduceAction137::(parser::ReduceAction::action)";
-void parser___ReduceAction137___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction250___action[] = "parser::ReduceAction250::(parser::ReduceAction::action)";
+void parser___ReduceAction250___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6104;
-  fra.me.meth = LOCATE_parser___ReduceAction137___action;
+  fra.me.line = 11897;
+  fra.me.meth = LOCATE_parser___ReduceAction250___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
@@ -19079,85 +33233,85 @@ void parser___ReduceAction137___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:6106 */
+  /* parser/parser.nit:11899 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6107 */
+  /* parser/parser.nit:11900 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6108 */
+  /* parser/parser.nit:11901 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6109 */
+  /* parser/parser.nit:11902 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6110 */
+  /* parser/parser.nit:11903 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6111 */
+  /* parser/parser.nit:11904 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6112 */
+  /* parser/parser.nit:11905 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6113 */
+  /* parser/parser.nit:11906 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6114 */
+  /* parser/parser.nit:11907 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6115 */
+  /* parser/parser.nit:11908 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6116 */
+  /* parser/parser.nit:11909 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6118 */
+  /* parser/parser.nit:11911 */
   REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6118);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11911);
   }
-  /* parser/parser.nit:6120 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:11913 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6120);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11913);
   }
-  /* parser/parser.nit:6122 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11915 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6122);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11915);
   }
-  /* parser/parser.nit:6124 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11917 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6124);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11917);
   }
-  /* parser/parser.nit:6126 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11919 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6126);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11919);
   }
-  /* parser/parser.nit:6128 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11921 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6128);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11921);
   }
-  /* parser/parser.nit:6130 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:11923 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6130);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11923);
   }
-  /* parser/parser.nit:6132 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:11925 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6132);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11925);
   }
-  /* parser/parser.nit:6133 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:6144 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6145 */
+  /* parser/parser.nit:11926 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[5], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
+  /* parser/parser.nit:11939 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:11940 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6145);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11940);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19165,17 +33319,17 @@ void parser___ReduceAction137___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction138___action[] = "parser::ReduceAction138::(parser::ReduceAction::action)";
-void parser___ReduceAction138___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction251___action[] = "parser::ReduceAction251::(parser::ReduceAction::action)";
+void parser___ReduceAction251___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6150;
-  fra.me.meth = LOCATE_parser___ReduceAction138___action;
+  fra.me.line = 11945;
+  fra.me.meth = LOCATE_parser___ReduceAction251___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -19187,79 +33341,88 @@ void parser___ReduceAction138___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:6152 */
+  /* parser/parser.nit:11947 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6153 */
+  /* parser/parser.nit:11948 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6154 */
+  /* parser/parser.nit:11949 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6155 */
+  /* parser/parser.nit:11950 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6156 */
+  /* parser/parser.nit:11951 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6157 */
+  /* parser/parser.nit:11952 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6158 */
+  /* parser/parser.nit:11953 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6159 */
+  /* parser/parser.nit:11954 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6160 */
+  /* parser/parser.nit:11955 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6161 */
+  /* parser/parser.nit:11956 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6163 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:11957 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11959 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6163);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11959);
   }
-  /* parser/parser.nit:6165 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:11961 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6165);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11961);
   }
-  /* parser/parser.nit:6167 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:11963 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6167);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11963);
   }
-  /* parser/parser.nit:6169 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:11965 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6169);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11965);
   }
-  /* parser/parser.nit:6171 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:11967 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6171);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11967);
   }
-  /* parser/parser.nit:6173 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:11969 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6173);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11969);
   }
-  /* parser/parser.nit:6175 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:11971 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6175);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11971);
   }
-  /* parser/parser.nit:6176 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:6187 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6188 */
+  /* parser/parser.nit:11973 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11973);
+  }
+  /* parser/parser.nit:11974 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[3], fra.me.REG[4]);
+  /* parser/parser.nit:11987 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:11988 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6188);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11988);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19267,17 +33430,17 @@ void parser___ReduceAction138___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction139___action[] = "parser::ReduceAction139::(parser::ReduceAction::action)";
-void parser___ReduceAction139___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction252___action[] = "parser::ReduceAction252::(parser::ReduceAction::action)";
+void parser___ReduceAction252___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6193;
-  fra.me.meth = LOCATE_parser___ReduceAction139___action;
+  fra.me.line = 11993;
+  fra.me.meth = LOCATE_parser___ReduceAction252___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 12;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -19290,87 +33453,96 @@ void parser___ReduceAction139___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:6195 */
+  /* parser/parser.nit:11995 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6196 */
+  /* parser/parser.nit:11996 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6197 */
+  /* parser/parser.nit:11997 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6198 */
+  /* parser/parser.nit:11998 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6199 */
+  /* parser/parser.nit:11999 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6200 */
+  /* parser/parser.nit:12000 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6201 */
+  /* parser/parser.nit:12001 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6202 */
+  /* parser/parser.nit:12002 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6203 */
+  /* parser/parser.nit:12003 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6204 */
+  /* parser/parser.nit:12004 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6205 */
+  /* parser/parser.nit:12005 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6207 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:12006 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12008 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6207);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12008);
   }
-  /* parser/parser.nit:6209 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:12010 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6209);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12010);
   }
-  /* parser/parser.nit:6211 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12012 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6211);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12012);
   }
-  /* parser/parser.nit:6213 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:12014 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6213);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12014);
   }
-  /* parser/parser.nit:6215 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:12016 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6215);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12016);
   }
-  /* parser/parser.nit:6217 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:12018 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6217);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12018);
   }
-  /* parser/parser.nit:6219 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:12020 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6219);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12020);
   }
-  /* parser/parser.nit:6221 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:12022 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6221);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12022);
   }
-  /* parser/parser.nit:6222 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:6233 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6234 */
+  /* parser/parser.nit:12024 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12024);
+  }
+  /* parser/parser.nit:12025 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[11], NIT_NULL, fra.me.REG[5], 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[3], fra.me.REG[4]);
+  /* parser/parser.nit:12038 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:12039 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6234);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12039);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19378,17 +33550,17 @@ void parser___ReduceAction139___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction140___action[] = "parser::ReduceAction140::(parser::ReduceAction::action)";
-void parser___ReduceAction140___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction253___action[] = "parser::ReduceAction253::(parser::ReduceAction::action)";
+void parser___ReduceAction253___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6239;
-  fra.me.meth = LOCATE_parser___ReduceAction140___action;
+  fra.me.line = 12044;
+  fra.me.meth = LOCATE_parser___ReduceAction253___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -19398,90 +33570,61 @@ void parser___ReduceAction140___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:6241 */
+  /* parser/parser.nit:12046 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6242 */
+  /* parser/parser.nit:12047 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6243 */
+  /* parser/parser.nit:12048 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6244 */
+  /* parser/parser.nit:12049 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12050 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6245 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6246 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6247 */
+  /* parser/parser.nit:12051 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6248 */
+  /* parser/parser.nit:12052 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6249 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6250 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6251 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6253 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6253);
-  }
-  /* parser/parser.nit:6255 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6255);
-  }
-  /* parser/parser.nit:6257 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6257);
-  }
-  /* parser/parser.nit:6259 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:12054 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6259);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12054);
   }
-  /* parser/parser.nit:6261 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:12056 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6261);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12056);
   }
-  /* parser/parser.nit:6263 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:12058 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6263);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12058);
   }
-  /* parser/parser.nit:6265 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:12060 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6265);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12060);
   }
-  /* parser/parser.nit:6267 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:12062 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6267);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12062);
   }
-  /* parser/parser.nit:6268 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(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], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:6279 */
+  /* parser/parser.nit:12063 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:12073 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6280 */
+  /* parser/parser.nit:12074 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6280);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12074);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19489,17 +33632,17 @@ void parser___ReduceAction140___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction141___action[] = "parser::ReduceAction141::(parser::ReduceAction::action)";
-void parser___ReduceAction141___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+static const char LOCATE_parser___ReduceAction254___action[] = "parser::ReduceAction254::(parser::ReduceAction::action)";
+void parser___ReduceAction254___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6285;
-  fra.me.meth = LOCATE_parser___ReduceAction141___action;
+  fra.me.line = 12079;
+  fra.me.meth = LOCATE_parser___ReduceAction254___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -19510,98 +33653,69 @@ void parser___ReduceAction141___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:6287 */
+  /* parser/parser.nit:12081 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6288 */
+  /* parser/parser.nit:12082 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6289 */
+  /* parser/parser.nit:12083 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6290 */
+  /* parser/parser.nit:12084 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12085 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6291 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6292 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6293 */
+  /* parser/parser.nit:12086 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6294 */
+  /* parser/parser.nit:12087 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6295 */
+  /* parser/parser.nit:12088 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6296 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6297 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6298 */
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6300 */
-  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6300);
-  }
-  /* parser/parser.nit:6302 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6302);
-  }
-  /* parser/parser.nit:6304 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6304);
-  }
-  /* parser/parser.nit:6306 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:12090 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6306);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12090);
   }
-  /* parser/parser.nit:6308 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:12092 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6308);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12092);
   }
-  /* parser/parser.nit:6310 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:12094 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6310);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12094);
   }
-  /* parser/parser.nit:6312 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:12096 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6312);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12096);
   }
-  /* parser/parser.nit:6314 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:12098 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6314);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12098);
   }
-  /* parser/parser.nit:6316 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:12100 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6316);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12100);
   }
-  /* parser/parser.nit:6317 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(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], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:6328 */
+  /* parser/parser.nit:12101 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:12111 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6329 */
+  /* parser/parser.nit:12112 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6329);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12112);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19609,15 +33723,15 @@ void parser___ReduceAction141___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction142___action[] = "parser::ReduceAction142::(parser::ReduceAction::action)";
-void parser___ReduceAction142___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction255___action[] = "parser::ReduceAction255::(parser::ReduceAction::action)";
+void parser___ReduceAction255___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6334;
-  fra.me.meth = LOCATE_parser___ReduceAction142___action;
+  fra.me.line = 12117;
+  fra.me.meth = LOCATE_parser___ReduceAction255___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -19632,65 +33746,67 @@ void parser___ReduceAction142___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:6336 */
+  /* parser/parser.nit:12119 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6337 */
+  /* parser/parser.nit:12120 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6338 */
+  /* parser/parser.nit:12121 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6339 */
+  /* parser/parser.nit:12122 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12123 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6340 */
+  /* parser/parser.nit:12124 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6341 */
+  /* parser/parser.nit:12125 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6342 */
+  /* parser/parser.nit:12126 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6344 */
+  /* parser/parser.nit:12128 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6344);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12128);
   }
-  /* parser/parser.nit:6346 */
+  /* parser/parser.nit:12130 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6346);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12130);
   }
-  /* parser/parser.nit:6348 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:12132 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6348);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12132);
   }
-  /* parser/parser.nit:6350 */
+  /* parser/parser.nit:12134 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6350);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12134);
   }
-  /* parser/parser.nit:6352 */
+  /* parser/parser.nit:12136 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6352);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12136);
   }
-  /* parser/parser.nit:6354 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:12138 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6354);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12138);
   }
-  /* parser/parser.nit:6355 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:6366 */
+  /* parser/parser.nit:12139 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:12149 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6367 */
+  /* parser/parser.nit:12150 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6367);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12150);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19698,15 +33814,15 @@ void parser___ReduceAction142___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction143___action[] = "parser::ReduceAction143::(parser::ReduceAction::action)";
-void parser___ReduceAction143___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction256___action[] = "parser::ReduceAction256::(parser::ReduceAction::action)";
+void parser___ReduceAction256___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 = 6372;
-  fra.me.meth = LOCATE_parser___ReduceAction143___action;
+  fra.me.line = 12155;
+  fra.me.meth = LOCATE_parser___ReduceAction256___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
@@ -19722,73 +33838,75 @@ void parser___ReduceAction143___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:6374 */
+  /* parser/parser.nit:12157 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6375 */
+  /* parser/parser.nit:12158 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6376 */
+  /* parser/parser.nit:12159 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12160 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6377 */
+  /* parser/parser.nit:12161 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6378 */
+  /* parser/parser.nit:12162 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6379 */
+  /* parser/parser.nit:12163 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6380 */
+  /* parser/parser.nit:12164 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6381 */
+  /* parser/parser.nit:12165 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6383 */
+  /* parser/parser.nit:12167 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6383);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12167);
   }
-  /* parser/parser.nit:6385 */
+  /* parser/parser.nit:12169 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6385);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12169);
   }
-  /* parser/parser.nit:6387 */
+  /* parser/parser.nit:12171 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6387);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12171);
   }
-  /* parser/parser.nit:6389 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:12173 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6389);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12173);
   }
-  /* parser/parser.nit:6391 */
+  /* parser/parser.nit:12175 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6391);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12175);
   }
-  /* parser/parser.nit:6393 */
+  /* parser/parser.nit:12177 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6393);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12177);
   }
-  /* parser/parser.nit:6395 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:12179 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6395);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12179);
   }
-  /* parser/parser.nit:6396 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:6407 */
+  /* parser/parser.nit:12180 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:12190 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6408 */
+  /* parser/parser.nit:12191 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6408);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12191);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19796,17 +33914,17 @@ void parser___ReduceAction143___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction144___action[] = "parser::ReduceAction144::(parser::ReduceAction::action)";
-void parser___ReduceAction144___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction257___action[] = "parser::ReduceAction257::(parser::ReduceAction::action)";
+void parser___ReduceAction257___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6413;
-  fra.me.meth = LOCATE_parser___ReduceAction144___action;
+  fra.me.line = 12196;
+  fra.me.meth = LOCATE_parser___ReduceAction257___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -19817,76 +33935,69 @@ void parser___ReduceAction144___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:6415 */
+  /* parser/parser.nit:12198 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6416 */
+  /* parser/parser.nit:12199 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6417 */
+  /* parser/parser.nit:12200 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12201 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6418 */
+  /* parser/parser.nit:12202 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6419 */
+  /* parser/parser.nit:12203 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6420 */
+  /* parser/parser.nit:12204 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6421 */
+  /* parser/parser.nit:12205 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6422 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6424 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6424);
-  }
-  /* parser/parser.nit:6426 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12207 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6426);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12207);
   }
-  /* parser/parser.nit:6428 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:12209 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6428);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12209);
   }
-  /* parser/parser.nit:6430 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:12211 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6430);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12211);
   }
-  /* parser/parser.nit:6432 */
+  /* parser/parser.nit:12213 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6432);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12213);
   }
-  /* parser/parser.nit:6434 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:12215 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6434);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12215);
   }
-  /* parser/parser.nit:6436 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:12217 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6436);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12217);
   }
-  /* parser/parser.nit:6437 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:6448 */
+  /* parser/parser.nit:12218 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:12228 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6449 */
+  /* parser/parser.nit:12229 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6449);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12229);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -19894,17 +34005,17 @@ void parser___ReduceAction144___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction145___action[] = "parser::ReduceAction145::(parser::ReduceAction::action)";
-void parser___ReduceAction145___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction258___action[] = "parser::ReduceAction258::(parser::ReduceAction::action)";
+void parser___ReduceAction258___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 = 6454;
-  fra.me.meth = LOCATE_parser___ReduceAction145___action;
+  fra.me.line = 12234;
+  fra.me.meth = LOCATE_parser___ReduceAction258___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -19916,84 +34027,77 @@ void parser___ReduceAction145___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:6456 */
+  /* parser/parser.nit:12236 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6457 */
+  /* parser/parser.nit:12237 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6458 */
+  /* parser/parser.nit:12238 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6459 */
+  /* parser/parser.nit:12239 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12240 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6460 */
+  /* parser/parser.nit:12241 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6461 */
+  /* parser/parser.nit:12242 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6462 */
+  /* parser/parser.nit:12243 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6463 */
+  /* parser/parser.nit:12244 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6464 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6466 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6466);
-  }
-  /* parser/parser.nit:6468 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:12246 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6468);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12246);
   }
-  /* parser/parser.nit:6470 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12248 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6470);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12248);
   }
-  /* parser/parser.nit:6472 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:12250 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6472);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12250);
   }
-  /* parser/parser.nit:6474 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:12252 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6474);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12252);
   }
-  /* parser/parser.nit:6476 */
+  /* parser/parser.nit:12254 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6476);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12254);
   }
-  /* parser/parser.nit:6478 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:12256 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6478);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12256);
   }
-  /* parser/parser.nit:6480 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:12258 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6480);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12258);
   }
-  /* parser/parser.nit:6481 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:6492 */
+  /* parser/parser.nit:12259 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:12269 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6493 */
+  /* parser/parser.nit:12270 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6493);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12270);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20001,17 +34105,17 @@ void parser___ReduceAction145___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction146___action[] = "parser::ReduceAction146::(parser::ReduceAction::action)";
-void parser___ReduceAction146___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction259___action[] = "parser::ReduceAction259::(parser::ReduceAction::action)";
+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 = 6498;
-  fra.me.meth = LOCATE_parser___ReduceAction146___action;
+  fra.me.line = 12275;
+  fra.me.meth = LOCATE_parser___ReduceAction259___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -20020,51 +34124,80 @@ void parser___ReduceAction146___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:6500 */
+  /* parser/parser.nit:12277 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6501 */
+  /* parser/parser.nit:12278 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6502 */
+  /* parser/parser.nit:12279 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12280 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6503 */
+  /* parser/parser.nit:12281 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6504 */
+  /* parser/parser.nit:12282 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6506 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:12283 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12284 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12285 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12287 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6506);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12287);
   }
-  /* parser/parser.nit:6508 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12289 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6508);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12289);
   }
-  /* parser/parser.nit:6510 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12291 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6510);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12291);
   }
-  /* parser/parser.nit:6512 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12293 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6512);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12293);
   }
-  /* parser/parser.nit:6513 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:6525 */
+  /* parser/parser.nit:12295 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12295);
+  }
+  /* parser/parser.nit:12297 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12297);
+  }
+  /* parser/parser.nit:12299 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12299);
+  }
+  /* parser/parser.nit:12300 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(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:12310 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6526 */
+  /* parser/parser.nit:12311 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6526);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12311);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20072,17 +34205,17 @@ void parser___ReduceAction146___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction147___action[] = "parser::ReduceAction147::(parser::ReduceAction::action)";
-void parser___ReduceAction147___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction260___action[] = "parser::ReduceAction260::(parser::ReduceAction::action)";
+void parser___ReduceAction260___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6531;
-  fra.me.meth = LOCATE_parser___ReduceAction147___action;
+  fra.me.line = 12316;
+  fra.me.meth = LOCATE_parser___ReduceAction260___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -20092,59 +34225,88 @@ void parser___ReduceAction147___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:6533 */
+  /* parser/parser.nit:12318 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6534 */
+  /* parser/parser.nit:12319 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6535 */
+  /* parser/parser.nit:12320 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12321 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6536 */
+  /* parser/parser.nit:12322 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6537 */
+  /* parser/parser.nit:12323 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6538 */
+  /* parser/parser.nit:12324 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6540 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:12325 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12326 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12327 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12329 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6540);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12329);
   }
-  /* parser/parser.nit:6542 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:12331 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6542);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12331);
   }
-  /* parser/parser.nit:6544 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12333 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6544);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12333);
   }
-  /* parser/parser.nit:6546 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12335 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6546);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12335);
   }
-  /* parser/parser.nit:6548 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12337 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12337);
+  }
+  /* parser/parser.nit:12339 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12339);
+  }
+  /* parser/parser.nit:12341 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12341);
+  }
+  /* parser/parser.nit:12343 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6548);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12343);
   }
-  /* parser/parser.nit:6549 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:6561 */
+  /* parser/parser.nit:12344 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(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:12354 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6562 */
+  /* parser/parser.nit:12355 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6562);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12355);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20152,15 +34314,15 @@ void parser___ReduceAction147___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction148___action[] = "parser::ReduceAction148::(parser::ReduceAction::action)";
-void parser___ReduceAction148___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction261___action[] = "parser::ReduceAction261::(parser::ReduceAction::action)";
+void parser___ReduceAction261___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6567;
-  fra.me.meth = LOCATE_parser___ReduceAction148___action;
+  fra.me.line = 12360;
+  fra.me.meth = LOCATE_parser___ReduceAction261___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
@@ -20174,57 +34336,61 @@ void parser___ReduceAction148___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:6569 */
+  /* parser/parser.nit:12362 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6570 */
+  /* parser/parser.nit:12363 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12364 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6571 */
+  /* parser/parser.nit:12365 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12366 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6572 */
+  /* parser/parser.nit:12367 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6573 */
+  /* parser/parser.nit:12368 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6574 */
+  /* parser/parser.nit:12369 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6576 */
+  /* parser/parser.nit:12371 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6576);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12371);
   }
-  /* parser/parser.nit:6578 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:12373 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6578);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12373);
   }
-  /* parser/parser.nit:6580 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12375 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6580);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12375);
   }
-  /* parser/parser.nit:6582 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12377 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6582);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12377);
   }
-  /* parser/parser.nit:6584 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12379 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6584);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12379);
   }
-  /* parser/parser.nit:6585 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], fra.me.REG[6], NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:6597 */
+  /* parser/parser.nit:12380 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:12390 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6598 */
+  /* parser/parser.nit:12391 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6598);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12391);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20232,15 +34398,15 @@ void parser___ReduceAction148___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction149___action[] = "parser::ReduceAction149::(parser::ReduceAction::action)";
-void parser___ReduceAction149___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction262___action[] = "parser::ReduceAction262::(parser::ReduceAction::action)";
+void parser___ReduceAction262___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6603;
-  fra.me.meth = LOCATE_parser___ReduceAction149___action;
+  fra.me.line = 12396;
+  fra.me.meth = LOCATE_parser___ReduceAction262___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -20255,65 +34421,69 @@ void parser___ReduceAction149___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:6605 */
+  /* parser/parser.nit:12398 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6606 */
+  /* parser/parser.nit:12399 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6607 */
+  /* parser/parser.nit:12400 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12401 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6608 */
+  /* parser/parser.nit:12402 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12403 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6609 */
+  /* parser/parser.nit:12404 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6610 */
+  /* parser/parser.nit:12405 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6611 */
+  /* parser/parser.nit:12406 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6613 */
+  /* parser/parser.nit:12408 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6613);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12408);
   }
-  /* parser/parser.nit:6615 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:12410 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6615);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12410);
   }
-  /* parser/parser.nit:6617 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:12412 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6617);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12412);
   }
-  /* parser/parser.nit:6619 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12414 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6619);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12414);
   }
-  /* parser/parser.nit:6621 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12416 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6621);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12416);
   }
-  /* parser/parser.nit:6623 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12418 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6623);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12418);
   }
-  /* parser/parser.nit:6624 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:6636 */
+  /* parser/parser.nit:12419 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:12429 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6637 */
+  /* parser/parser.nit:12430 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6637);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12430);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20321,17 +34491,17 @@ void parser___ReduceAction149___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction150___action[] = "parser::ReduceAction150::(parser::ReduceAction::action)";
-void parser___ReduceAction150___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction263___action[] = "parser::ReduceAction263::(parser::ReduceAction::action)";
+void parser___ReduceAction263___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6642;
-  fra.me.meth = LOCATE_parser___ReduceAction150___action;
+  fra.me.line = 12435;
+  fra.me.meth = LOCATE_parser___ReduceAction263___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -20341,59 +34511,72 @@ void parser___ReduceAction150___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:6644 */
+  /* parser/parser.nit:12437 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6645 */
+  /* parser/parser.nit:12438 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6646 */
+  /* parser/parser.nit:12439 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12440 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6647 */
+  /* parser/parser.nit:12441 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12442 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6648 */
+  /* parser/parser.nit:12443 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6649 */
+  /* parser/parser.nit:12444 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6651 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:12445 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12447 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6651);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12447);
   }
-  /* parser/parser.nit:6653 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:12449 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6653);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12449);
   }
-  /* parser/parser.nit:6655 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12451 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6655);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12451);
   }
-  /* parser/parser.nit:6657 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12453 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6657);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12453);
   }
-  /* parser/parser.nit:6659 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12455 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6659);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12455);
   }
-  /* parser/parser.nit:6660 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:6672 */
+  /* parser/parser.nit:12457 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12457);
+  }
+  /* parser/parser.nit:12458 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:12468 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6673 */
+  /* parser/parser.nit:12469 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6673);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12469);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20401,17 +34584,17 @@ void parser___ReduceAction150___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction151___action[] = "parser::ReduceAction151::(parser::ReduceAction::action)";
-void parser___ReduceAction151___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction264___action[] = "parser::ReduceAction264::(parser::ReduceAction::action)";
+void parser___ReduceAction264___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 = 6678;
-  fra.me.meth = LOCATE_parser___ReduceAction151___action;
+  fra.me.line = 12474;
+  fra.me.meth = LOCATE_parser___ReduceAction264___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -20422,67 +34605,80 @@ void parser___ReduceAction151___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:6680 */
+  /* parser/parser.nit:12476 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6681 */
+  /* parser/parser.nit:12477 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12478 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6682 */
+  /* parser/parser.nit:12479 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6683 */
+  /* parser/parser.nit:12480 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12481 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6684 */
+  /* parser/parser.nit:12482 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6685 */
+  /* parser/parser.nit:12483 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6686 */
+  /* parser/parser.nit:12484 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6688 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:12485 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12487 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6688);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12487);
   }
-  /* parser/parser.nit:6690 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:12489 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6690);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12489);
   }
-  /* parser/parser.nit:6692 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:12491 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6692);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12491);
   }
-  /* parser/parser.nit:6694 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12493 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6694);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12493);
   }
-  /* parser/parser.nit:6696 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12495 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6696);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12495);
   }
-  /* parser/parser.nit:6698 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12497 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6698);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12497);
   }
-  /* parser/parser.nit:6699 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:6711 */
+  /* parser/parser.nit:12499 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12499);
+  }
+  /* parser/parser.nit:12500 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:12510 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6712 */
+  /* parser/parser.nit:12511 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6712);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12511);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20490,15 +34686,15 @@ void parser___ReduceAction151___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction152___action[] = "parser::ReduceAction152::(parser::ReduceAction::action)";
-void parser___ReduceAction152___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction265___action[] = "parser::ReduceAction265::(parser::ReduceAction::action)";
+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 = 6717;
-  fra.me.meth = LOCATE_parser___ReduceAction152___action;
+  fra.me.line = 12516;
+  fra.me.meth = LOCATE_parser___ReduceAction265___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -20513,65 +34709,69 @@ void parser___ReduceAction152___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:6719 */
+  /* parser/parser.nit:12518 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6720 */
+  /* parser/parser.nit:12519 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12520 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6721 */
+  /* parser/parser.nit:12521 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6722 */
+  /* parser/parser.nit:12522 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12523 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6723 */
+  /* parser/parser.nit:12524 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6724 */
+  /* parser/parser.nit:12525 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6725 */
+  /* parser/parser.nit:12526 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6727 */
+  /* parser/parser.nit:12528 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6727);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12528);
   }
-  /* parser/parser.nit:6729 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:12530 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6729);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12530);
   }
-  /* parser/parser.nit:6731 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:12532 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6731);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12532);
   }
-  /* parser/parser.nit:6733 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12534 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6733);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12534);
   }
-  /* parser/parser.nit:6735 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12536 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6735);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12536);
   }
-  /* parser/parser.nit:6737 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12538 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6737);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12538);
   }
-  /* parser/parser.nit:6738 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:6750 */
+  /* parser/parser.nit:12539 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:12549 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6751 */
+  /* parser/parser.nit:12550 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6751);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12550);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20579,15 +34779,15 @@ void parser___ReduceAction152___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction153___action[] = "parser::ReduceAction153::(parser::ReduceAction::action)";
-void parser___ReduceAction153___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction266___action[] = "parser::ReduceAction266::(parser::ReduceAction::action)";
+void parser___ReduceAction266___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 = 6756;
-  fra.me.meth = LOCATE_parser___ReduceAction153___action;
+  fra.me.line = 12555;
+  fra.me.meth = LOCATE_parser___ReduceAction266___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
@@ -20603,73 +34803,77 @@ void parser___ReduceAction153___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:6758 */
+  /* parser/parser.nit:12557 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6759 */
+  /* parser/parser.nit:12558 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6760 */
+  /* parser/parser.nit:12559 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12560 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12561 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6761 */
+  /* parser/parser.nit:12562 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6762 */
+  /* parser/parser.nit:12563 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6763 */
+  /* parser/parser.nit:12564 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6764 */
+  /* parser/parser.nit:12565 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6765 */
+  /* parser/parser.nit:12566 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6767 */
+  /* parser/parser.nit:12568 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6767);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12568);
   }
-  /* parser/parser.nit:6769 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:12570 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6769);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12570);
   }
-  /* parser/parser.nit:6771 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:12572 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6771);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12572);
   }
-  /* parser/parser.nit:6773 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:12574 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6773);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12574);
   }
-  /* parser/parser.nit:6775 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12576 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6775);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12576);
   }
-  /* parser/parser.nit:6777 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12578 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6777);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12578);
   }
-  /* parser/parser.nit:6779 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12580 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6779);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12580);
   }
-  /* parser/parser.nit:6780 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:6792 */
+  /* parser/parser.nit:12581 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:12591 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6793 */
+  /* parser/parser.nit:12592 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6793);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12592);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20677,17 +34881,17 @@ void parser___ReduceAction153___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction154___action[] = "parser::ReduceAction154::(parser::ReduceAction::action)";
-void parser___ReduceAction154___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction267___action[] = "parser::ReduceAction267::(parser::ReduceAction::action)";
+void parser___ReduceAction267___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 = 6798;
-  fra.me.meth = LOCATE_parser___ReduceAction154___action;
+  fra.me.line = 12597;
+  fra.me.meth = LOCATE_parser___ReduceAction267___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -20697,59 +34901,81 @@ void parser___ReduceAction154___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:6800 */
+  /* parser/parser.nit:12599 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6801 */
+  /* parser/parser.nit:12600 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6802 */
+  /* parser/parser.nit:12601 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12602 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6803 */
+  /* parser/parser.nit:12603 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12604 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6804 */
+  /* parser/parser.nit:12605 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6805 */
+  /* parser/parser.nit:12606 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6807 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:12607 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12608 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12610 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6807);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12610);
   }
-  /* parser/parser.nit:6809 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12612 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6809);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12612);
   }
-  /* parser/parser.nit:6811 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12614 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6811);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12614);
   }
-  /* parser/parser.nit:6813 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12616 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6813);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12616);
   }
-  /* parser/parser.nit:6815 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:12618 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6815);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12618);
   }
-  /* parser/parser.nit:6816 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:6828 */
+  /* parser/parser.nit:12620 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12620);
+  }
+  /* parser/parser.nit:12622 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12622);
+  }
+  /* parser/parser.nit:12623 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(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:12633 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6829 */
+  /* parser/parser.nit:12634 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6829);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12634);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20757,17 +34983,17 @@ void parser___ReduceAction154___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction155___action[] = "parser::ReduceAction155::(parser::ReduceAction::action)";
-void parser___ReduceAction155___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction268___action[] = "parser::ReduceAction268::(parser::ReduceAction::action)";
+void parser___ReduceAction268___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6834;
-  fra.me.meth = LOCATE_parser___ReduceAction155___action;
+  fra.me.line = 12639;
+  fra.me.meth = LOCATE_parser___ReduceAction268___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -20778,67 +35004,89 @@ void parser___ReduceAction155___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:6836 */
+  /* parser/parser.nit:12641 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6837 */
+  /* parser/parser.nit:12642 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6838 */
+  /* parser/parser.nit:12643 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12644 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6839 */
+  /* parser/parser.nit:12645 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12646 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6840 */
+  /* parser/parser.nit:12647 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6841 */
+  /* parser/parser.nit:12648 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6842 */
+  /* parser/parser.nit:12649 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6844 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:12650 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12651 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12653 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6844);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12653);
   }
-  /* parser/parser.nit:6846 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:12655 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6846);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12655);
   }
-  /* parser/parser.nit:6848 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12657 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6848);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12657);
   }
-  /* parser/parser.nit:6850 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12659 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6850);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12659);
   }
-  /* parser/parser.nit:6852 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12661 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6852);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12661);
   }
-  /* parser/parser.nit:6854 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:12663 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6854);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12663);
   }
-  /* parser/parser.nit:6855 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:6867 */
+  /* parser/parser.nit:12665 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12665);
+  }
+  /* parser/parser.nit:12667 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12667);
+  }
+  /* parser/parser.nit:12668 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(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:12678 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6868 */
+  /* parser/parser.nit:12679 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6868);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12679);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20846,17 +35094,17 @@ void parser___ReduceAction155___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction156___action[] = "parser::ReduceAction156::(parser::ReduceAction::action)";
-void parser___ReduceAction156___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction269___action[] = "parser::ReduceAction269::(parser::ReduceAction::action)";
+void parser___ReduceAction269___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6873;
-  fra.me.meth = LOCATE_parser___ReduceAction156___action;
+  fra.me.line = 12684;
+  fra.me.meth = LOCATE_parser___ReduceAction269___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -20866,68 +35114,59 @@ void parser___ReduceAction156___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:6875 */
+  /* parser/parser.nit:12686 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6876 */
+  /* parser/parser.nit:12687 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6877 */
+  /* parser/parser.nit:12688 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6878 */
+  /* parser/parser.nit:12689 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6879 */
+  /* parser/parser.nit:12690 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6880 */
+  /* parser/parser.nit:12691 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6881 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6883 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6883);
-  }
-  /* parser/parser.nit:6885 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:12693 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6885);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12693);
   }
-  /* parser/parser.nit:6887 */
+  /* parser/parser.nit:12695 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6887);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12695);
   }
-  /* parser/parser.nit:6889 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12697 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast nullable TKwtype*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6889);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12697);
   }
-  /* parser/parser.nit:6891 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12699 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6891);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12699);
   }
-  /* parser/parser.nit:6893 */
+  /* parser/parser.nit:12701 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6893);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12701);
   }
-  /* parser/parser.nit:6894 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:6906 */
+  /* parser/parser.nit:12702 */
+  fra.me.REG[3] = NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:12711 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6907 */
+  /* parser/parser.nit:12712 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6907);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12712);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -20935,17 +35174,17 @@ void parser___ReduceAction156___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction157___action[] = "parser::ReduceAction157::(parser::ReduceAction::action)";
-void parser___ReduceAction157___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction270___action[] = "parser::ReduceAction270::(parser::ReduceAction::action)";
+void parser___ReduceAction270___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6912;
-  fra.me.meth = LOCATE_parser___ReduceAction157___action;
+  fra.me.line = 12717;
+  fra.me.meth = LOCATE_parser___ReduceAction270___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -20956,76 +35195,67 @@ void parser___ReduceAction157___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:6914 */
+  /* parser/parser.nit:12719 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6915 */
+  /* parser/parser.nit:12720 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6916 */
+  /* parser/parser.nit:12721 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6917 */
+  /* parser/parser.nit:12722 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6918 */
+  /* parser/parser.nit:12723 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6919 */
+  /* parser/parser.nit:12724 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6920 */
+  /* parser/parser.nit:12725 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6921 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6923 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6923);
-  }
-  /* parser/parser.nit:6925 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:12727 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6925);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12727);
   }
-  /* parser/parser.nit:6927 */
+  /* parser/parser.nit:12729 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6927);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12729);
   }
-  /* parser/parser.nit:6929 */
+  /* parser/parser.nit:12731 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6929);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12731);
   }
-  /* parser/parser.nit:6931 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12733 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast nullable TKwtype*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6931);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12733);
   }
-  /* parser/parser.nit:6933 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12735 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6933);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12735);
   }
-  /* parser/parser.nit:6935 */
+  /* parser/parser.nit:12737 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6935);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12737);
   }
-  /* parser/parser.nit:6936 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:6948 */
+  /* parser/parser.nit:12738 */
+  fra.me.REG[3] = NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:12747 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6949 */
+  /* parser/parser.nit:12748 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6949);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12748);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21033,15 +35263,15 @@ void parser___ReduceAction157___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction158___action[] = "parser::ReduceAction158::(parser::ReduceAction::action)";
-void parser___ReduceAction158___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction271___action[] = "parser::ReduceAction271::(parser::ReduceAction::action)";
+void parser___ReduceAction271___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6954;
-  fra.me.meth = LOCATE_parser___ReduceAction158___action;
+  fra.me.line = 12753;
+  fra.me.meth = LOCATE_parser___ReduceAction271___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -21056,65 +35286,65 @@ void parser___ReduceAction158___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:6956 */
+  /* parser/parser.nit:12755 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6957 */
+  /* parser/parser.nit:12756 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6958 */
+  /* parser/parser.nit:12757 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6959 */
+  /* parser/parser.nit:12758 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6960 */
+  /* parser/parser.nit:12759 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6961 */
+  /* parser/parser.nit:12760 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6962 */
+  /* parser/parser.nit:12761 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6964 */
+  /* parser/parser.nit:12763 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6964);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12763);
   }
-  /* parser/parser.nit:6966 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:12765 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6966);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12765);
   }
-  /* parser/parser.nit:6968 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12767 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast nullable TKwtype*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6968);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12767);
   }
-  /* parser/parser.nit:6970 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12769 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6970);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12769);
   }
-  /* parser/parser.nit:6972 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12771 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6972);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12771);
   }
-  /* parser/parser.nit:6974 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:12773 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6974);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12773);
   }
-  /* parser/parser.nit:6975 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:6987 */
+  /* parser/parser.nit:12774 */
+  fra.me.REG[3] = NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(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:12783 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:6988 */
+  /* parser/parser.nit:12784 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6988);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12784);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21122,15 +35352,15 @@ void parser___ReduceAction158___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction159___action[] = "parser::ReduceAction159::(parser::ReduceAction::action)";
-void parser___ReduceAction159___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction272___action[] = "parser::ReduceAction272::(parser::ReduceAction::action)";
+void parser___ReduceAction272___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 = 6993;
-  fra.me.meth = LOCATE_parser___ReduceAction159___action;
+  fra.me.line = 12789;
+  fra.me.meth = LOCATE_parser___ReduceAction272___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
@@ -21146,73 +35376,73 @@ void parser___ReduceAction159___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:6995 */
+  /* parser/parser.nit:12791 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:6996 */
+  /* parser/parser.nit:12792 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6997 */
+  /* parser/parser.nit:12793 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6998 */
+  /* parser/parser.nit:12794 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:6999 */
+  /* parser/parser.nit:12795 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7000 */
+  /* parser/parser.nit:12796 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7001 */
+  /* parser/parser.nit:12797 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7002 */
+  /* parser/parser.nit:12798 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7004 */
+  /* parser/parser.nit:12800 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7004);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12800);
   }
-  /* parser/parser.nit:7006 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:12802 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7006);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12802);
   }
-  /* parser/parser.nit:7008 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:12804 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7008);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12804);
   }
-  /* parser/parser.nit:7010 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12806 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast nullable TKwtype*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7010);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12806);
   }
-  /* parser/parser.nit:7012 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12808 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7012);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12808);
   }
-  /* parser/parser.nit:7014 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12810 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7014);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12810);
   }
-  /* parser/parser.nit:7016 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:12812 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7016);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12812);
   }
-  /* parser/parser.nit:7017 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:7029 */
+  /* parser/parser.nit:12813 */
+  fra.me.REG[3] = NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(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:12822 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7030 */
+  /* parser/parser.nit:12823 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7030);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12823);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21220,17 +35450,17 @@ void parser___ReduceAction159___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction160___action[] = "parser::ReduceAction160::(parser::ReduceAction::action)";
-void parser___ReduceAction160___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction273___action[] = "parser::ReduceAction273::(parser::ReduceAction::action)";
+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 = 7035;
-  fra.me.meth = LOCATE_parser___ReduceAction160___action;
+  fra.me.line = 12828;
+  fra.me.meth = LOCATE_parser___ReduceAction273___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -21239,78 +35469,55 @@ void parser___ReduceAction160___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:7037 */
+  /* parser/parser.nit:12830 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7038 */
+  /* parser/parser.nit:12831 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12832 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7039 */
+  /* parser/parser.nit:12833 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12834 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7040 */
+  /* parser/parser.nit:12835 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7041 */
+  /* parser/parser.nit:12836 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7042 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7043 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7044 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7046 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7046);
-  }
-  /* parser/parser.nit:7048 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7048);
-  }
-  /* parser/parser.nit:7050 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7050);
-  }
-  /* parser/parser.nit:7052 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12838 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7052);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12838);
   }
-  /* parser/parser.nit:7054 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12840 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7054);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12840);
   }
-  /* parser/parser.nit:7056 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12842 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7056);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12842);
   }
-  /* parser/parser.nit:7058 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:12844 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7058);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12844);
   }
-  /* parser/parser.nit:7059 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:7071 */
+  /* parser/parser.nit:12845 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:12856 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7072 */
+  /* parser/parser.nit:12857 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7072);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12857);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21318,17 +35525,17 @@ void parser___ReduceAction160___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction161___action[] = "parser::ReduceAction161::(parser::ReduceAction::action)";
-void parser___ReduceAction161___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction274___action[] = "parser::ReduceAction274::(parser::ReduceAction::action)";
+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 = 7077;
-  fra.me.meth = LOCATE_parser___ReduceAction161___action;
+  fra.me.line = 12862;
+  fra.me.meth = LOCATE_parser___ReduceAction274___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -21338,86 +35545,63 @@ void parser___ReduceAction161___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:7079 */
+  /* parser/parser.nit:12864 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7080 */
+  /* parser/parser.nit:12865 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7081 */
+  /* parser/parser.nit:12866 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12867 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12868 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7082 */
+  /* parser/parser.nit:12869 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7083 */
+  /* parser/parser.nit:12870 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7084 */
+  /* parser/parser.nit:12871 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7085 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7086 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7087 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7089 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7089);
-  }
-  /* parser/parser.nit:7091 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7091);
-  }
-  /* parser/parser.nit:7093 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7093);
-  }
-  /* parser/parser.nit:7095 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:12873 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7095);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12873);
   }
-  /* parser/parser.nit:7097 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:12875 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7097);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12875);
   }
-  /* parser/parser.nit:7099 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12877 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7099);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12877);
   }
-  /* parser/parser.nit:7101 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12879 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7101);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12879);
   }
-  /* parser/parser.nit:7103 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:12881 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7103);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12881);
   }
-  /* parser/parser.nit:7104 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:7116 */
+  /* parser/parser.nit:12882 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:12893 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7117 */
+  /* parser/parser.nit:12894 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7117);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12894);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21425,15 +35609,15 @@ void parser___ReduceAction161___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction162___action[] = "parser::ReduceAction162::(parser::ReduceAction::action)";
-void parser___ReduceAction162___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction275___action[] = "parser::ReduceAction275::(parser::ReduceAction::action)";
+void parser___ReduceAction275___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7122;
-  fra.me.meth = LOCATE_parser___ReduceAction162___action;
+  fra.me.line = 12899;
+  fra.me.meth = LOCATE_parser___ReduceAction275___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
@@ -21447,61 +35631,61 @@ void parser___ReduceAction162___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:7124 */
+  /* parser/parser.nit:12901 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7125 */
+  /* parser/parser.nit:12902 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7126 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7127 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7128 */
+  /* parser/parser.nit:12903 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12904 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12905 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7129 */
+  /* parser/parser.nit:12906 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7130 */
+  /* parser/parser.nit:12907 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7131 */
+  /* parser/parser.nit:12908 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7133 */
+  /* parser/parser.nit:12910 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7133);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12910);
   }
-  /* parser/parser.nit:7135 */
+  /* parser/parser.nit:12912 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7135);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12912);
   }
-  /* parser/parser.nit:7137 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12914 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7137);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12914);
   }
-  /* parser/parser.nit:7139 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12916 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7139);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12916);
   }
-  /* parser/parser.nit:7141 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:12918 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7141);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12918);
   }
-  /* parser/parser.nit:7142 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:7154 */
+  /* parser/parser.nit:12919 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:12930 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7155 */
+  /* parser/parser.nit:12931 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7155);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12931);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21509,15 +35693,15 @@ void parser___ReduceAction162___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction163___action[] = "parser::ReduceAction163::(parser::ReduceAction::action)";
-void parser___ReduceAction163___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction276___action[] = "parser::ReduceAction276::(parser::ReduceAction::action)";
+void parser___ReduceAction276___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7160;
-  fra.me.meth = LOCATE_parser___ReduceAction163___action;
+  fra.me.line = 12936;
+  fra.me.meth = LOCATE_parser___ReduceAction276___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -21532,69 +35716,69 @@ void parser___ReduceAction163___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:7162 */
+  /* parser/parser.nit:12938 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7163 */
+  /* parser/parser.nit:12939 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7164 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7165 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7166 */
+  /* parser/parser.nit:12940 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12941 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12942 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7167 */
+  /* parser/parser.nit:12943 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7168 */
+  /* parser/parser.nit:12944 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7169 */
+  /* parser/parser.nit:12945 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7170 */
+  /* parser/parser.nit:12946 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7172 */
+  /* parser/parser.nit:12948 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7172);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12948);
   }
-  /* parser/parser.nit:7174 */
+  /* parser/parser.nit:12950 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7174);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12950);
   }
-  /* parser/parser.nit:7176 */
+  /* parser/parser.nit:12952 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7176);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12952);
   }
-  /* parser/parser.nit:7178 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12954 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7178);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12954);
   }
-  /* parser/parser.nit:7180 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12956 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7180);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12956);
   }
-  /* parser/parser.nit:7182 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:12958 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7182);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12958);
   }
-  /* parser/parser.nit:7183 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:7195 */
+  /* parser/parser.nit:12959 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:12970 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7196 */
+  /* parser/parser.nit:12971 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7196);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12971);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21602,17 +35786,17 @@ void parser___ReduceAction163___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction164___action[] = "parser::ReduceAction164::(parser::ReduceAction::action)";
-void parser___ReduceAction164___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction277___action[] = "parser::ReduceAction277::(parser::ReduceAction::action)";
+void parser___ReduceAction277___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7201;
-  fra.me.meth = LOCATE_parser___ReduceAction164___action;
+  fra.me.line = 12976;
+  fra.me.meth = LOCATE_parser___ReduceAction277___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -21622,72 +35806,63 @@ void parser___ReduceAction164___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:7203 */
+  /* parser/parser.nit:12978 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7204 */
+  /* parser/parser.nit:12979 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7205 */
+  /* parser/parser.nit:12980 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7206 */
+  /* parser/parser.nit:12981 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7207 */
+  /* parser/parser.nit:12982 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7208 */
+  /* parser/parser.nit:12983 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7209 */
+  /* parser/parser.nit:12984 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7210 */
+  /* parser/parser.nit:12985 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7211 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7213 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7213);
-  }
-  /* parser/parser.nit:7215 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:12987 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7215);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12987);
   }
-  /* parser/parser.nit:7217 */
+  /* parser/parser.nit:12989 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7217);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12989);
   }
-  /* parser/parser.nit:7219 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:12991 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7219);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12991);
   }
-  /* parser/parser.nit:7221 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12993 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7221);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12993);
   }
-  /* parser/parser.nit:7223 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:12995 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7223);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12995);
   }
-  /* parser/parser.nit:7224 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:7236 */
+  /* parser/parser.nit:12996 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:13007 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7237 */
+  /* parser/parser.nit:13008 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7237);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13008);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21695,17 +35870,17 @@ void parser___ReduceAction164___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction165___action[] = "parser::ReduceAction165::(parser::ReduceAction::action)";
-void parser___ReduceAction165___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction278___action[] = "parser::ReduceAction278::(parser::ReduceAction::action)";
+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 = 7242;
-  fra.me.meth = LOCATE_parser___ReduceAction165___action;
+  fra.me.line = 13013;
+  fra.me.meth = LOCATE_parser___ReduceAction278___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -21716,80 +35891,71 @@ void parser___ReduceAction165___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:7244 */
+  /* parser/parser.nit:13015 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7245 */
+  /* parser/parser.nit:13016 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7246 */
+  /* parser/parser.nit:13017 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7247 */
+  /* parser/parser.nit:13018 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7248 */
+  /* parser/parser.nit:13019 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7249 */
+  /* parser/parser.nit:13020 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7250 */
+  /* parser/parser.nit:13021 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7251 */
+  /* parser/parser.nit:13022 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7252 */
+  /* parser/parser.nit:13023 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7253 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7255 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7255);
-  }
-  /* parser/parser.nit:7257 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:13025 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7257);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13025);
   }
-  /* parser/parser.nit:7259 */
+  /* parser/parser.nit:13027 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7259);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13027);
   }
-  /* parser/parser.nit:7261 */
+  /* parser/parser.nit:13029 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7261);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13029);
   }
-  /* parser/parser.nit:7263 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13031 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7263);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13031);
   }
-  /* parser/parser.nit:7265 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:13033 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7265);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13033);
   }
-  /* parser/parser.nit:7267 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:13035 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7267);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13035);
   }
-  /* parser/parser.nit:7268 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:7280 */
+  /* parser/parser.nit:13036 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:13047 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7281 */
+  /* parser/parser.nit:13048 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7281);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13048);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21797,15 +35963,15 @@ void parser___ReduceAction165___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction166___action[] = "parser::ReduceAction166::(parser::ReduceAction::action)";
-void parser___ReduceAction166___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction279___action[] = "parser::ReduceAction279::(parser::ReduceAction::action)";
+void parser___ReduceAction279___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7286;
-  fra.me.meth = LOCATE_parser___ReduceAction166___action;
+  fra.me.line = 13053;
+  fra.me.meth = LOCATE_parser___ReduceAction279___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -21820,69 +35986,69 @@ void parser___ReduceAction166___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:7288 */
+  /* parser/parser.nit:13055 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7289 */
+  /* parser/parser.nit:13056 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7290 */
+  /* parser/parser.nit:13057 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7291 */
+  /* parser/parser.nit:13058 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7292 */
+  /* parser/parser.nit:13059 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7293 */
+  /* parser/parser.nit:13060 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7294 */
+  /* parser/parser.nit:13061 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7295 */
+  /* parser/parser.nit:13062 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7296 */
+  /* parser/parser.nit:13063 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7298 */
+  /* parser/parser.nit:13065 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7298);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13065);
   }
-  /* parser/parser.nit:7300 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:13067 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7300);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13067);
   }
-  /* parser/parser.nit:7302 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13069 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7302);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13069);
   }
-  /* parser/parser.nit:7304 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13071 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7304);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13071);
   }
-  /* parser/parser.nit:7306 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:13073 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7306);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13073);
   }
-  /* parser/parser.nit:7308 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:13075 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7308);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13075);
   }
-  /* parser/parser.nit:7309 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:7321 */
+  /* parser/parser.nit:13076 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:13087 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7322 */
+  /* parser/parser.nit:13088 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7322);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13088);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21890,15 +36056,15 @@ void parser___ReduceAction166___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction167___action[] = "parser::ReduceAction167::(parser::ReduceAction::action)";
-void parser___ReduceAction167___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction280___action[] = "parser::ReduceAction280::(parser::ReduceAction::action)";
+void parser___ReduceAction280___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 = 7327;
-  fra.me.meth = LOCATE_parser___ReduceAction167___action;
+  fra.me.line = 13093;
+  fra.me.meth = LOCATE_parser___ReduceAction280___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
@@ -21914,77 +36080,77 @@ void parser___ReduceAction167___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:7329 */
+  /* parser/parser.nit:13095 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7330 */
+  /* parser/parser.nit:13096 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7331 */
+  /* parser/parser.nit:13097 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7332 */
+  /* parser/parser.nit:13098 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7333 */
+  /* parser/parser.nit:13099 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7334 */
+  /* parser/parser.nit:13100 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7335 */
+  /* parser/parser.nit:13101 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7336 */
+  /* parser/parser.nit:13102 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7337 */
+  /* parser/parser.nit:13103 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7338 */
+  /* parser/parser.nit:13104 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7340 */
+  /* parser/parser.nit:13106 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7340);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13106);
   }
-  /* parser/parser.nit:7342 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:13108 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7342);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13108);
   }
-  /* parser/parser.nit:7344 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:13110 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7344);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13110);
   }
-  /* parser/parser.nit:7346 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13112 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7346);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13112);
   }
-  /* parser/parser.nit:7348 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13114 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7348);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13114);
   }
-  /* parser/parser.nit:7350 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:13116 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7350);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13116);
   }
-  /* parser/parser.nit:7352 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:13118 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7352);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13118);
   }
-  /* parser/parser.nit:7353 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:7365 */
+  /* parser/parser.nit:13119 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:13130 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7366 */
+  /* parser/parser.nit:13131 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____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, 13131);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -21992,17 +36158,17 @@ void parser___ReduceAction167___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction168___action[] = "parser::ReduceAction168::(parser::ReduceAction::action)";
-void parser___ReduceAction168___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction281___action[] = "parser::ReduceAction281::(parser::ReduceAction::action)";
+void parser___ReduceAction281___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7371;
-  fra.me.meth = LOCATE_parser___ReduceAction168___action;
+  fra.me.line = 13136;
+  fra.me.meth = LOCATE_parser___ReduceAction281___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -22012,81 +36178,63 @@ void parser___ReduceAction168___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:7373 */
+  /* parser/parser.nit:13138 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7374 */
+  /* parser/parser.nit:13139 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7375 */
+  /* parser/parser.nit:13140 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7376 */
+  /* parser/parser.nit:13141 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7377 */
+  /* parser/parser.nit:13142 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7378 */
+  /* parser/parser.nit:13143 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7379 */
+  /* parser/parser.nit:13144 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7380 */
+  /* parser/parser.nit:13145 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7381 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7382 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7384 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7384);
-  }
-  /* parser/parser.nit:7386 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7386);
-  }
-  /* parser/parser.nit:7388 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:13147 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7388);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13147);
   }
-  /* parser/parser.nit:7390 */
+  /* parser/parser.nit:13149 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7390);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13149);
   }
-  /* parser/parser.nit:7392 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13151 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7392);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13151);
   }
-  /* parser/parser.nit:7394 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:13153 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7394);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13153);
   }
-  /* parser/parser.nit:7396 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:13155 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7396);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13155);
   }
-  /* parser/parser.nit:7397 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:7409 */
+  /* parser/parser.nit:13156 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:13167 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7410 */
+  /* parser/parser.nit:13168 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7410);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13168);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22094,17 +36242,17 @@ void parser___ReduceAction168___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction169___action[] = "parser::ReduceAction169::(parser::ReduceAction::action)";
-void parser___ReduceAction169___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction282___action[] = "parser::ReduceAction282::(parser::ReduceAction::action)";
+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 = 7415;
-  fra.me.meth = LOCATE_parser___ReduceAction169___action;
+  fra.me.line = 13173;
+  fra.me.meth = LOCATE_parser___ReduceAction282___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -22115,89 +36263,71 @@ void parser___ReduceAction169___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:7417 */
+  /* parser/parser.nit:13175 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7418 */
+  /* parser/parser.nit:13176 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7419 */
+  /* parser/parser.nit:13177 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7420 */
+  /* parser/parser.nit:13178 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7421 */
+  /* parser/parser.nit:13179 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7422 */
+  /* parser/parser.nit:13180 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7423 */
+  /* parser/parser.nit:13181 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7424 */
+  /* parser/parser.nit:13182 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7425 */
+  /* parser/parser.nit:13183 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7426 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7427 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7429 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7429);
-  }
-  /* parser/parser.nit:7431 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7431);
-  }
-  /* parser/parser.nit:7433 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:13185 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7433);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13185);
   }
-  /* parser/parser.nit:7435 */
+  /* parser/parser.nit:13187 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7435);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13187);
   }
-  /* parser/parser.nit:7437 */
+  /* parser/parser.nit:13189 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7437);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13189);
   }
-  /* parser/parser.nit:7439 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13191 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7439);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13191);
   }
-  /* parser/parser.nit:7441 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:13193 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7441);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13193);
   }
-  /* parser/parser.nit:7443 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:13195 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7443);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13195);
   }
-  /* parser/parser.nit:7444 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:7456 */
+  /* parser/parser.nit:13196 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:13207 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7457 */
+  /* parser/parser.nit:13208 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7457);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13208);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22205,15 +36335,15 @@ void parser___ReduceAction169___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction170___action[] = "parser::ReduceAction170::(parser::ReduceAction::action)";
-void parser___ReduceAction170___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction283___action[] = "parser::ReduceAction283::(parser::ReduceAction::action)";
+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 = 7462;
-  fra.me.meth = LOCATE_parser___ReduceAction170___action;
+  fra.me.line = 13213;
+  fra.me.meth = LOCATE_parser___ReduceAction283___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -22228,69 +36358,69 @@ void parser___ReduceAction170___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:7464 */
+  /* parser/parser.nit:13215 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7465 */
+  /* parser/parser.nit:13216 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7466 */
+  /* parser/parser.nit:13217 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7467 */
+  /* parser/parser.nit:13218 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7468 */
+  /* parser/parser.nit:13219 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7469 */
+  /* parser/parser.nit:13220 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7470 */
+  /* parser/parser.nit:13221 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7471 */
+  /* parser/parser.nit:13222 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7472 */
+  /* parser/parser.nit:13223 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7474 */
+  /* parser/parser.nit:13225 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7474);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13225);
   }
-  /* parser/parser.nit:7476 */
+  /* parser/parser.nit:13227 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7476);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13227);
   }
-  /* parser/parser.nit:7478 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13229 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7478);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13229);
   }
-  /* parser/parser.nit:7480 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:13231 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7480);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13231);
   }
-  /* parser/parser.nit:7482 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:13233 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7482);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13233);
   }
-  /* parser/parser.nit:7484 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:13235 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7484);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13235);
   }
-  /* parser/parser.nit:7485 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:7497 */
+  /* parser/parser.nit:13236 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:13247 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7498 */
+  /* parser/parser.nit:13248 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7498);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13248);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22298,15 +36428,15 @@ void parser___ReduceAction170___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction171___action[] = "parser::ReduceAction171::(parser::ReduceAction::action)";
-void parser___ReduceAction171___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction284___action[] = "parser::ReduceAction284::(parser::ReduceAction::action)";
+void parser___ReduceAction284___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7503;
-  fra.me.meth = LOCATE_parser___ReduceAction171___action;
+  fra.me.line = 13253;
+  fra.me.meth = LOCATE_parser___ReduceAction284___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
@@ -22322,77 +36452,77 @@ void parser___ReduceAction171___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:7505 */
+  /* parser/parser.nit:13255 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7506 */
+  /* parser/parser.nit:13256 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7507 */
+  /* parser/parser.nit:13257 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7508 */
+  /* parser/parser.nit:13258 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7509 */
+  /* parser/parser.nit:13259 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7510 */
+  /* parser/parser.nit:13260 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7511 */
+  /* parser/parser.nit:13261 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7512 */
+  /* parser/parser.nit:13262 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7513 */
+  /* parser/parser.nit:13263 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7514 */
+  /* parser/parser.nit:13264 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7516 */
+  /* parser/parser.nit:13266 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7516);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13266);
   }
-  /* parser/parser.nit:7518 */
+  /* parser/parser.nit:13268 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7518);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13268);
   }
-  /* parser/parser.nit:7520 */
+  /* parser/parser.nit:13270 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7520);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13270);
   }
-  /* parser/parser.nit:7522 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13272 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7522);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13272);
   }
-  /* parser/parser.nit:7524 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:13274 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7524);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13274);
   }
-  /* parser/parser.nit:7526 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:13276 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7526);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13276);
   }
-  /* parser/parser.nit:7528 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:13278 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7528);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13278);
   }
-  /* parser/parser.nit:7529 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:7541 */
+  /* parser/parser.nit:13279 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:13290 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7542 */
+  /* parser/parser.nit:13291 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7542);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13291);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22400,17 +36530,17 @@ void parser___ReduceAction171___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction172___action[] = "parser::ReduceAction172::(parser::ReduceAction::action)";
-void parser___ReduceAction172___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction285___action[] = "parser::ReduceAction285::(parser::ReduceAction::action)";
+void parser___ReduceAction285___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7547;
-  fra.me.meth = LOCATE_parser___ReduceAction172___action;
+  fra.me.line = 13296;
+  fra.me.meth = LOCATE_parser___ReduceAction285___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -22421,80 +36551,71 @@ void parser___ReduceAction172___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:7549 */
+  /* parser/parser.nit:13298 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7550 */
+  /* parser/parser.nit:13299 */
   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:7553 */
+  /* parser/parser.nit:13300 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7554 */
+  /* parser/parser.nit:13301 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13302 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13303 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7555 */
+  /* parser/parser.nit:13304 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7556 */
+  /* parser/parser.nit:13305 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7557 */
+  /* parser/parser.nit:13306 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7558 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7560 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7560);
-  }
-  /* parser/parser.nit:7562 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:13308 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7562);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13308);
   }
-  /* parser/parser.nit:7564 */
+  /* parser/parser.nit:13310 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7564);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13310);
   }
-  /* parser/parser.nit:7566 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13312 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7566);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13312);
   }
-  /* parser/parser.nit:7568 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:13314 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7568);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13314);
   }
-  /* parser/parser.nit:7570 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:13316 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7570);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13316);
   }
-  /* parser/parser.nit:7572 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:13318 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7572);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13318);
   }
-  /* parser/parser.nit:7573 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:7585 */
+  /* parser/parser.nit:13319 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:13330 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7586 */
+  /* parser/parser.nit:13331 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7586);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13331);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22502,17 +36623,17 @@ void parser___ReduceAction172___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction173___action[] = "parser::ReduceAction173::(parser::ReduceAction::action)";
-void parser___ReduceAction173___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction286___action[] = "parser::ReduceAction286::(parser::ReduceAction::action)";
+void parser___ReduceAction286___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 = 7591;
-  fra.me.meth = LOCATE_parser___ReduceAction173___action;
+  fra.me.line = 13336;
+  fra.me.meth = LOCATE_parser___ReduceAction286___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -22524,88 +36645,79 @@ void parser___ReduceAction173___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:7593 */
+  /* parser/parser.nit:13338 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7594 */
+  /* parser/parser.nit:13339 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7595 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7596 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7597 */
+  /* parser/parser.nit:13340 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7598 */
+  /* parser/parser.nit:13341 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7599 */
+  /* parser/parser.nit:13342 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13343 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13344 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7600 */
+  /* parser/parser.nit:13345 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7601 */
+  /* parser/parser.nit:13346 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7602 */
+  /* parser/parser.nit:13347 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7603 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7605 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7605);
-  }
-  /* parser/parser.nit:7607 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:13349 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7607);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13349);
   }
-  /* parser/parser.nit:7609 */
+  /* parser/parser.nit:13351 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7609);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13351);
   }
-  /* parser/parser.nit:7611 */
+  /* parser/parser.nit:13353 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7611);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13353);
   }
-  /* parser/parser.nit:7613 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13355 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7613);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13355);
   }
-  /* parser/parser.nit:7615 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:13357 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7615);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13357);
   }
-  /* parser/parser.nit:7617 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:13359 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7617);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13359);
   }
-  /* parser/parser.nit:7619 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:13361 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7619);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13361);
   }
-  /* parser/parser.nit:7620 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:7632 */
+  /* parser/parser.nit:13362 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:13373 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7633 */
+  /* parser/parser.nit:13374 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7633);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13374);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22613,15 +36725,15 @@ void parser___ReduceAction173___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction174___action[] = "parser::ReduceAction174::(parser::ReduceAction::action)";
-void parser___ReduceAction174___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction287___action[] = "parser::ReduceAction287::(parser::ReduceAction::action)";
+void parser___ReduceAction287___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 = 7638;
-  fra.me.meth = LOCATE_parser___ReduceAction174___action;
+  fra.me.line = 13379;
+  fra.me.meth = LOCATE_parser___ReduceAction287___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
@@ -22637,77 +36749,77 @@ void parser___ReduceAction174___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:7640 */
+  /* parser/parser.nit:13381 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7641 */
+  /* parser/parser.nit:13382 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7642 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7643 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7644 */
+  /* parser/parser.nit:13383 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7645 */
+  /* parser/parser.nit:13384 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13385 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7646 */
+  /* parser/parser.nit:13386 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13387 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7647 */
+  /* parser/parser.nit:13388 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7648 */
+  /* parser/parser.nit:13389 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7649 */
+  /* parser/parser.nit:13390 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7651 */
+  /* parser/parser.nit:13392 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7651);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13392);
   }
-  /* parser/parser.nit:7653 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:13394 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7653);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13394);
   }
-  /* parser/parser.nit:7655 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13396 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7655);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13396);
   }
-  /* parser/parser.nit:7657 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13398 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7657);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13398);
   }
-  /* parser/parser.nit:7659 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:13400 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7659);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13400);
   }
-  /* parser/parser.nit:7661 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:13402 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7661);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13402);
   }
-  /* parser/parser.nit:7663 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:13404 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7663);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13404);
   }
-  /* parser/parser.nit:7664 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:7676 */
+  /* parser/parser.nit:13405 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:13416 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7677 */
+  /* parser/parser.nit:13417 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7677);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13417);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22715,15 +36827,15 @@ void parser___ReduceAction174___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction175___action[] = "parser::ReduceAction175::(parser::ReduceAction::action)";
-void parser___ReduceAction175___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction288___action[] = "parser::ReduceAction288::(parser::ReduceAction::action)";
+void parser___ReduceAction288___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7682;
-  fra.me.meth = LOCATE_parser___ReduceAction175___action;
+  fra.me.line = 13422;
+  fra.me.meth = LOCATE_parser___ReduceAction288___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
@@ -22740,85 +36852,85 @@ void parser___ReduceAction175___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:7684 */
+  /* parser/parser.nit:13424 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7685 */
+  /* parser/parser.nit:13425 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7686 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7687 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7688 */
+  /* parser/parser.nit:13426 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7689 */
+  /* parser/parser.nit:13427 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7690 */
+  /* parser/parser.nit:13428 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13429 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13430 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7691 */
+  /* parser/parser.nit:13431 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7692 */
+  /* parser/parser.nit:13432 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7693 */
+  /* parser/parser.nit:13433 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7694 */
+  /* parser/parser.nit:13434 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7696 */
+  /* parser/parser.nit:13436 */
   REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7696);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13436);
   }
-  /* parser/parser.nit:7698 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:13438 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7698);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13438);
   }
-  /* parser/parser.nit:7700 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:13440 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7700);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13440);
   }
-  /* parser/parser.nit:7702 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13442 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7702);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13442);
   }
-  /* parser/parser.nit:7704 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13444 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7704);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13444);
   }
-  /* parser/parser.nit:7706 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:13446 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7706);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13446);
   }
-  /* parser/parser.nit:7708 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:13448 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7708);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13448);
   }
-  /* parser/parser.nit:7710 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:13450 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7710);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13450);
   }
-  /* parser/parser.nit:7711 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:7723 */
+  /* parser/parser.nit:13451 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:13462 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7724 */
+  /* parser/parser.nit:13463 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7724);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13463);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22826,17 +36938,17 @@ void parser___ReduceAction175___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction176___action[] = "parser::ReduceAction176::(parser::ReduceAction::action)";
-void parser___ReduceAction176___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction289___action[] = "parser::ReduceAction289::(parser::ReduceAction::action)";
+void parser___ReduceAction289___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7729;
-  fra.me.meth = LOCATE_parser___ReduceAction176___action;
+  fra.me.line = 13468;
+  fra.me.meth = LOCATE_parser___ReduceAction289___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -22846,90 +36958,63 @@ void parser___ReduceAction176___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:7731 */
+  /* parser/parser.nit:13470 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7732 */
+  /* parser/parser.nit:13471 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7733 */
+  /* parser/parser.nit:13472 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7734 */
+  /* parser/parser.nit:13473 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7735 */
+  /* parser/parser.nit:13474 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7736 */
+  /* parser/parser.nit:13475 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7737 */
+  /* parser/parser.nit:13476 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7738 */
+  /* parser/parser.nit:13477 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7739 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7740 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7741 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7743 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7743);
-  }
-  /* parser/parser.nit:7745 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7745);
-  }
-  /* parser/parser.nit:7747 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7747);
-  }
-  /* parser/parser.nit:7749 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13479 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7749);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13479);
   }
-  /* parser/parser.nit:7751 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13481 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7751);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13481);
   }
-  /* parser/parser.nit:7753 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:13483 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7753);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13483);
   }
-  /* parser/parser.nit:7755 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:13485 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7755);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13485);
   }
-  /* parser/parser.nit:7757 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:13487 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7757);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13487);
   }
-  /* parser/parser.nit:7758 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:7770 */
+  /* parser/parser.nit:13488 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:13499 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7771 */
+  /* parser/parser.nit:13500 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7771);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13500);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -22937,17 +37022,17 @@ void parser___ReduceAction176___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction177___action[] = "parser::ReduceAction177::(parser::ReduceAction::action)";
-void parser___ReduceAction177___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+static const char LOCATE_parser___ReduceAction290___action[] = "parser::ReduceAction290::(parser::ReduceAction::action)";
+void parser___ReduceAction290___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7776;
-  fra.me.meth = LOCATE_parser___ReduceAction177___action;
+  fra.me.line = 13505;
+  fra.me.meth = LOCATE_parser___ReduceAction290___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -22958,98 +37043,71 @@ void parser___ReduceAction177___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
-  fra.me.REG[10] = NIT_NULL;
-  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:7778 */
+  /* parser/parser.nit:13507 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7779 */
+  /* parser/parser.nit:13508 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7780 */
+  /* parser/parser.nit:13509 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7781 */
+  /* parser/parser.nit:13510 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7782 */
+  /* parser/parser.nit:13511 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7783 */
+  /* parser/parser.nit:13512 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7784 */
+  /* parser/parser.nit:13513 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7785 */
+  /* parser/parser.nit:13514 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7786 */
+  /* parser/parser.nit:13515 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7787 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7788 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7789 */
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7791 */
-  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7791);
-  }
-  /* parser/parser.nit:7793 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7793);
-  }
-  /* parser/parser.nit:7795 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7795);
-  }
-  /* parser/parser.nit:7797 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:13517 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7797);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13517);
   }
-  /* parser/parser.nit:7799 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13519 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7799);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13519);
   }
-  /* parser/parser.nit:7801 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13521 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7801);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13521);
   }
-  /* parser/parser.nit:7803 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:13523 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7803);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13523);
   }
-  /* parser/parser.nit:7805 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:13525 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7805);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13525);
   }
-  /* parser/parser.nit:7807 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:13527 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7807);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13527);
   }
-  /* parser/parser.nit:7808 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:7820 */
+  /* parser/parser.nit:13528 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:13539 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7821 */
+  /* parser/parser.nit:13540 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7821);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13540);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23057,17 +37115,17 @@ void parser___ReduceAction177___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction178___action[] = "parser::ReduceAction178::(parser::ReduceAction::action)";
-void parser___ReduceAction178___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction291___action[] = "parser::ReduceAction291::(parser::ReduceAction::action)";
+void parser___ReduceAction291___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7826;
-  fra.me.meth = LOCATE_parser___ReduceAction178___action;
+  fra.me.line = 13545;
+  fra.me.meth = LOCATE_parser___ReduceAction291___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -23076,51 +37134,73 @@ void parser___ReduceAction178___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:7828 */
+  /* parser/parser.nit:13547 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7829 */
+  /* parser/parser.nit:13548 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7830 */
+  /* parser/parser.nit:13549 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7831 */
+  /* parser/parser.nit:13550 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13551 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13552 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7832 */
+  /* parser/parser.nit:13553 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7834 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:13554 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13555 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13557 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7834);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13557);
   }
-  /* parser/parser.nit:7836 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13559 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7836);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13559);
   }
-  /* parser/parser.nit:7838 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13561 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7838);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13561);
   }
-  /* parser/parser.nit:7840 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:13563 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7840);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13563);
   }
-  /* parser/parser.nit:7841 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:7853 */
+  /* parser/parser.nit:13565 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13565);
+  }
+  /* parser/parser.nit:13567 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13567);
+  }
+  /* parser/parser.nit:13568 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:13579 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7854 */
+  /* parser/parser.nit:13580 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7854);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13580);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23128,17 +37208,17 @@ void parser___ReduceAction178___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction179___action[] = "parser::ReduceAction179::(parser::ReduceAction::action)";
-void parser___ReduceAction179___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction292___action[] = "parser::ReduceAction292::(parser::ReduceAction::action)";
+void parser___ReduceAction292___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 = 7859;
-  fra.me.meth = LOCATE_parser___ReduceAction179___action;
+  fra.me.line = 13585;
+  fra.me.meth = LOCATE_parser___ReduceAction292___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -23148,59 +37228,81 @@ void parser___ReduceAction179___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:7861 */
+  /* parser/parser.nit:13587 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7862 */
+  /* parser/parser.nit:13588 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7863 */
+  /* parser/parser.nit:13589 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13590 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13591 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7864 */
+  /* parser/parser.nit:13592 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7865 */
+  /* parser/parser.nit:13593 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7866 */
+  /* parser/parser.nit:13594 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7868 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:13595 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13596 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13598 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7868);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13598);
   }
-  /* parser/parser.nit:7870 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:13600 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7870);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13600);
   }
-  /* parser/parser.nit:7872 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13602 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7872);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13602);
   }
-  /* parser/parser.nit:7874 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13604 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7874);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13604);
   }
-  /* parser/parser.nit:7876 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:13606 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13606);
+  }
+  /* parser/parser.nit:13608 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13608);
+  }
+  /* parser/parser.nit:13610 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7876);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13610);
   }
-  /* parser/parser.nit:7877 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:7889 */
+  /* parser/parser.nit:13611 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:13622 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7890 */
+  /* parser/parser.nit:13623 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7890);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13623);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23208,17 +37310,17 @@ void parser___ReduceAction179___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction180___action[] = "parser::ReduceAction180::(parser::ReduceAction::action)";
-void parser___ReduceAction180___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction293___action[] = "parser::ReduceAction293::(parser::ReduceAction::action)";
+void parser___ReduceAction293___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7895;
-  fra.me.meth = LOCATE_parser___ReduceAction180___action;
+  fra.me.line = 13628;
+  fra.me.meth = LOCATE_parser___ReduceAction293___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -23228,59 +37330,72 @@ void parser___ReduceAction180___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:7897 */
+  /* parser/parser.nit:13630 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7898 */
+  /* parser/parser.nit:13631 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7899 */
+  /* parser/parser.nit:13632 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7900 */
+  /* parser/parser.nit:13633 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13634 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13635 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7901 */
+  /* parser/parser.nit:13636 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7902 */
+  /* parser/parser.nit:13637 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7904 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:13638 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13640 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7904);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13640);
   }
-  /* parser/parser.nit:7906 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13642 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7906);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13642);
   }
-  /* parser/parser.nit:7908 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13644 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7908);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13644);
   }
-  /* parser/parser.nit:7910 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:13646 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7910);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13646);
   }
-  /* parser/parser.nit:7912 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:13648 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7912);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13648);
   }
-  /* parser/parser.nit:7913 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:7925 */
+  /* parser/parser.nit:13650 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13650);
+  }
+  /* parser/parser.nit:13651 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:13662 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7926 */
+  /* parser/parser.nit:13663 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7926);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13663);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23288,17 +37403,17 @@ void parser___ReduceAction180___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction181___action[] = "parser::ReduceAction181::(parser::ReduceAction::action)";
-void parser___ReduceAction181___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction294___action[] = "parser::ReduceAction294::(parser::ReduceAction::action)";
+void parser___ReduceAction294___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 = 7931;
-  fra.me.meth = LOCATE_parser___ReduceAction181___action;
+  fra.me.line = 13668;
+  fra.me.meth = LOCATE_parser___ReduceAction294___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -23309,67 +37424,80 @@ void parser___ReduceAction181___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:7933 */
+  /* parser/parser.nit:13670 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7934 */
+  /* parser/parser.nit:13671 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7935 */
+  /* parser/parser.nit:13672 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7936 */
+  /* parser/parser.nit:13673 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7937 */
+  /* parser/parser.nit:13674 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13675 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13676 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7938 */
+  /* parser/parser.nit:13677 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7939 */
+  /* parser/parser.nit:13678 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7941 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:13679 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13681 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7941);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13681);
   }
-  /* parser/parser.nit:7943 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:13683 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7943);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13683);
   }
-  /* parser/parser.nit:7945 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13685 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7945);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13685);
   }
-  /* parser/parser.nit:7947 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13687 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7947);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13687);
   }
-  /* parser/parser.nit:7949 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:13689 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7949);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13689);
   }
-  /* parser/parser.nit:7951 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:13691 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7951);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13691);
   }
-  /* parser/parser.nit:7952 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:7964 */
+  /* parser/parser.nit:13693 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13693);
+  }
+  /* parser/parser.nit:13694 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:13705 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:7965 */
+  /* parser/parser.nit:13706 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7965);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13706);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23377,17 +37505,17 @@ void parser___ReduceAction181___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction182___action[] = "parser::ReduceAction182::(parser::ReduceAction::action)";
-void parser___ReduceAction182___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction295___action[] = "parser::ReduceAction295::(parser::ReduceAction::action)";
+void parser___ReduceAction295___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 = 7970;
-  fra.me.meth = LOCATE_parser___ReduceAction182___action;
+  fra.me.line = 13711;
+  fra.me.meth = LOCATE_parser___ReduceAction295___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -23397,59 +37525,81 @@ void parser___ReduceAction182___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:7972 */
+  /* parser/parser.nit:13713 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:7973 */
+  /* parser/parser.nit:13714 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7974 */
+  /* parser/parser.nit:13715 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7975 */
+  /* parser/parser.nit:13716 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13717 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13718 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7976 */
+  /* parser/parser.nit:13719 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7977 */
+  /* parser/parser.nit:13720 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:7979 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:13721 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13722 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13724 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7979);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13724);
   }
-  /* parser/parser.nit:7981 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:13726 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7981);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13726);
   }
-  /* parser/parser.nit:7983 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13728 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7983);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13728);
   }
-  /* parser/parser.nit:7985 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13730 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7985);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13730);
   }
-  /* parser/parser.nit:7987 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:13732 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7987);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13732);
   }
-  /* parser/parser.nit:7988 */
-  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:8000 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:8001 */
+  /* parser/parser.nit:13734 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13734);
+  }
+  /* parser/parser.nit:13736 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13736);
+  }
+  /* parser/parser.nit:13737 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:13748 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:13749 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8001);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13749);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23457,17 +37607,17 @@ void parser___ReduceAction182___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction183___action[] = "parser::ReduceAction183::(parser::ReduceAction::action)";
-void parser___ReduceAction183___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction296___action[] = "parser::ReduceAction296::(parser::ReduceAction::action)";
+void parser___ReduceAction296___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8006;
-  fra.me.meth = LOCATE_parser___ReduceAction183___action;
+  fra.me.line = 13754;
+  fra.me.meth = LOCATE_parser___ReduceAction296___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -23478,67 +37628,89 @@ void parser___ReduceAction183___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:8008 */
+  /* parser/parser.nit:13756 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8009 */
+  /* parser/parser.nit:13757 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8010 */
+  /* parser/parser.nit:13758 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8011 */
+  /* parser/parser.nit:13759 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8012 */
+  /* parser/parser.nit:13760 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13761 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13762 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8013 */
+  /* parser/parser.nit:13763 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8014 */
+  /* parser/parser.nit:13764 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8016 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:13765 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13766 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13768 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8016);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13768);
   }
-  /* parser/parser.nit:8018 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:13770 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8018);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13770);
   }
-  /* parser/parser.nit:8020 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:13772 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8020);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13772);
   }
-  /* parser/parser.nit:8022 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13774 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8022);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13774);
   }
-  /* parser/parser.nit:8024 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13776 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8024);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13776);
   }
-  /* parser/parser.nit:8026 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:13778 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8026);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13778);
   }
-  /* parser/parser.nit:8027 */
-  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[3], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:8039 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:8040 */
+  /* parser/parser.nit:13780 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13780);
+  }
+  /* parser/parser.nit:13782 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13782);
+  }
+  /* parser/parser.nit:13783 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:13794 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:13795 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8040);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13795);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23546,15 +37718,15 @@ void parser___ReduceAction183___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction184___action[] = "parser::ReduceAction184::(parser::ReduceAction::action)";
-void parser___ReduceAction184___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction297___action[] = "parser::ReduceAction297::(parser::ReduceAction::action)";
+void parser___ReduceAction297___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8045;
-  fra.me.meth = LOCATE_parser___ReduceAction184___action;
+  fra.me.line = 13800;
+  fra.me.meth = LOCATE_parser___ReduceAction297___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -23569,65 +37741,69 @@ void parser___ReduceAction184___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:8047 */
+  /* parser/parser.nit:13802 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8048 */
+  /* parser/parser.nit:13803 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8049 */
+  /* parser/parser.nit:13804 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8050 */
+  /* parser/parser.nit:13805 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13806 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8051 */
+  /* parser/parser.nit:13807 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13808 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8052 */
+  /* parser/parser.nit:13809 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8053 */
+  /* parser/parser.nit:13810 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8055 */
+  /* parser/parser.nit:13812 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8055);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13812);
   }
-  /* parser/parser.nit:8057 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:13814 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8057);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13814);
   }
-  /* parser/parser.nit:8059 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13816 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8059);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13816);
   }
-  /* parser/parser.nit:8061 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13818 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8061);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13818);
   }
-  /* parser/parser.nit:8063 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:13820 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8063);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13820);
   }
-  /* parser/parser.nit:8065 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:13822 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8065);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13822);
   }
-  /* parser/parser.nit:8066 */
-  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[3], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL);
-  /* parser/parser.nit:8078 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:8079 */
+  /* parser/parser.nit:13823 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:13834 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:13835 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8079);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13835);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23635,15 +37811,15 @@ void parser___ReduceAction184___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction185___action[] = "parser::ReduceAction185::(parser::ReduceAction::action)";
-void parser___ReduceAction185___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction298___action[] = "parser::ReduceAction298::(parser::ReduceAction::action)";
+void parser___ReduceAction298___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 = 8084;
-  fra.me.meth = LOCATE_parser___ReduceAction185___action;
+  fra.me.line = 13840;
+  fra.me.meth = LOCATE_parser___ReduceAction298___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
@@ -23659,73 +37835,77 @@ void parser___ReduceAction185___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:8086 */
+  /* parser/parser.nit:13842 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8087 */
+  /* parser/parser.nit:13843 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8088 */
+  /* parser/parser.nit:13844 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8089 */
+  /* parser/parser.nit:13845 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8090 */
+  /* parser/parser.nit:13846 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13847 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13848 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8091 */
+  /* parser/parser.nit:13849 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8092 */
+  /* parser/parser.nit:13850 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8093 */
+  /* parser/parser.nit:13851 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8095 */
+  /* parser/parser.nit:13853 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8095);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13853);
   }
-  /* parser/parser.nit:8097 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:13855 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8097);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13855);
   }
-  /* parser/parser.nit:8099 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:13857 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8099);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13857);
   }
-  /* parser/parser.nit:8101 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13859 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8101);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13859);
   }
-  /* parser/parser.nit:8103 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13861 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8103);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13861);
   }
-  /* parser/parser.nit:8105 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:13863 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8105);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13863);
   }
-  /* parser/parser.nit:8107 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:13865 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8107);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13865);
   }
-  /* parser/parser.nit:8108 */
-  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[3], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL);
-  /* parser/parser.nit:8120 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:8121 */
+  /* parser/parser.nit:13866 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:13877 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:13878 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8121);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13878);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23733,17 +37913,17 @@ void parser___ReduceAction185___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction186___action[] = "parser::ReduceAction186::(parser::ReduceAction::action)";
-void parser___ReduceAction186___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction299___action[] = "parser::ReduceAction299::(parser::ReduceAction::action)";
+void parser___ReduceAction299___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 = 8126;
-  fra.me.meth = LOCATE_parser___ReduceAction186___action;
+  fra.me.line = 13883;
+  fra.me.meth = LOCATE_parser___ReduceAction299___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -23753,63 +37933,81 @@ void parser___ReduceAction186___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:8128 */
+  /* parser/parser.nit:13885 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8129 */
+  /* parser/parser.nit:13886 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8130 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8131 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8132 */
+  /* parser/parser.nit:13887 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8133 */
+  /* parser/parser.nit:13888 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8134 */
+  /* parser/parser.nit:13889 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13890 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13891 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8135 */
+  /* parser/parser.nit:13892 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8137 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:13893 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13894 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13896 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8137);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13896);
   }
-  /* parser/parser.nit:8139 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13898 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8139);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13898);
   }
-  /* parser/parser.nit:8141 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13900 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8141);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13900);
   }
-  /* parser/parser.nit:8143 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:13902 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8143);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13902);
   }
-  /* parser/parser.nit:8145 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:13904 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8145);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13904);
+  }
+  /* parser/parser.nit:13906 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13906);
+  }
+  /* parser/parser.nit:13908 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13908);
   }
-  /* parser/parser.nit:8146 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:8158 */
+  /* parser/parser.nit:13909 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:13920 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8159 */
+  /* parser/parser.nit:13921 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8159);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13921);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23817,17 +38015,17 @@ void parser___ReduceAction186___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction187___action[] = "parser::ReduceAction187::(parser::ReduceAction::action)";
-void parser___ReduceAction187___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction300___action[] = "parser::ReduceAction300::(parser::ReduceAction::action)";
+void parser___ReduceAction300___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8164;
-  fra.me.meth = LOCATE_parser___ReduceAction187___action;
+  fra.me.line = 13926;
+  fra.me.meth = LOCATE_parser___ReduceAction300___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -23838,71 +38036,89 @@ void parser___ReduceAction187___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:8166 */
+  /* parser/parser.nit:13928 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8167 */
+  /* parser/parser.nit:13929 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8168 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8169 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8170 */
+  /* parser/parser.nit:13930 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8171 */
+  /* parser/parser.nit:13931 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13932 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13933 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8172 */
+  /* parser/parser.nit:13934 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8173 */
+  /* parser/parser.nit:13935 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8174 */
+  /* parser/parser.nit:13936 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8176 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:13937 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13938 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13940 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8176);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13940);
   }
-  /* parser/parser.nit:8178 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:13942 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8178);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13942);
   }
-  /* parser/parser.nit:8180 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13944 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8180);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13944);
   }
-  /* parser/parser.nit:8182 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13946 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8182);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13946);
   }
-  /* parser/parser.nit:8184 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:13948 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8184);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13948);
   }
-  /* parser/parser.nit:8186 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:13950 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8186);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13950);
+  }
+  /* parser/parser.nit:13952 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13952);
+  }
+  /* parser/parser.nit:13954 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13954);
   }
-  /* parser/parser.nit:8187 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:8199 */
+  /* parser/parser.nit:13955 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:13966 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8200 */
+  /* parser/parser.nit:13967 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8200);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13967);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -23910,17 +38126,17 @@ void parser___ReduceAction187___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction188___action[] = "parser::ReduceAction188::(parser::ReduceAction::action)";
-void parser___ReduceAction188___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction301___action[] = "parser::ReduceAction301::(parser::ReduceAction::action)";
+void parser___ReduceAction301___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 = 8205;
-  fra.me.meth = LOCATE_parser___ReduceAction188___action;
+  fra.me.line = 13972;
+  fra.me.meth = LOCATE_parser___ReduceAction301___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -23931,71 +38147,80 @@ void parser___ReduceAction188___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:8207 */
+  /* parser/parser.nit:13974 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8208 */
+  /* parser/parser.nit:13975 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8209 */
+  /* parser/parser.nit:13976 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8210 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8211 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8212 */
+  /* parser/parser.nit:13977 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8213 */
+  /* parser/parser.nit:13978 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8214 */
+  /* parser/parser.nit:13979 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13980 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13981 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8215 */
+  /* parser/parser.nit:13982 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8217 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:13983 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:13985 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8217);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13985);
   }
-  /* parser/parser.nit:8219 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:13987 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8219);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13987);
   }
-  /* parser/parser.nit:8221 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:13989 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8221);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13989);
   }
-  /* parser/parser.nit:8223 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:13991 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8223);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13991);
   }
-  /* parser/parser.nit:8225 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:13993 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8225);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13993);
   }
-  /* parser/parser.nit:8227 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:13995 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8227);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13995);
   }
-  /* parser/parser.nit:8228 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:8240 */
+  /* parser/parser.nit:13997 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 13997);
+  }
+  /* parser/parser.nit:13998 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:14009 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8241 */
+  /* parser/parser.nit:14010 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8241);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14010);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24003,17 +38228,17 @@ void parser___ReduceAction188___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction189___action[] = "parser::ReduceAction189::(parser::ReduceAction::action)";
-void parser___ReduceAction189___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction302___action[] = "parser::ReduceAction302::(parser::ReduceAction::action)";
+void parser___ReduceAction302___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8246;
-  fra.me.meth = LOCATE_parser___ReduceAction189___action;
+  fra.me.line = 14015;
+  fra.me.meth = LOCATE_parser___ReduceAction302___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -24025,79 +38250,88 @@ void parser___ReduceAction189___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:8248 */
+  /* parser/parser.nit:14017 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8249 */
+  /* parser/parser.nit:14018 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8250 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8251 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8252 */
+  /* parser/parser.nit:14019 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8253 */
+  /* parser/parser.nit:14020 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8254 */
+  /* parser/parser.nit:14021 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8255 */
+  /* parser/parser.nit:14022 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14023 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14024 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8256 */
+  /* parser/parser.nit:14025 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8257 */
+  /* parser/parser.nit:14026 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8259 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:14027 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14029 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8259);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14029);
   }
-  /* parser/parser.nit:8261 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:14031 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8261);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14031);
   }
-  /* parser/parser.nit:8263 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:14033 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8263);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14033);
   }
-  /* parser/parser.nit:8265 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:14035 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8265);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14035);
   }
-  /* parser/parser.nit:8267 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:14037 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8267);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14037);
   }
-  /* parser/parser.nit:8269 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:14039 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8269);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14039);
   }
-  /* parser/parser.nit:8271 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:14041 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8271);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14041);
   }
-  /* parser/parser.nit:8272 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:8284 */
+  /* parser/parser.nit:14043 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14043);
+  }
+  /* parser/parser.nit:14044 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:14055 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8285 */
+  /* parser/parser.nit:14056 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8285);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14056);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24105,17 +38339,17 @@ void parser___ReduceAction189___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction190___action[] = "parser::ReduceAction190::(parser::ReduceAction::action)";
-void parser___ReduceAction190___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction303___action[] = "parser::ReduceAction303::(parser::ReduceAction::action)";
+void parser___ReduceAction303___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8290;
-  fra.me.meth = LOCATE_parser___ReduceAction190___action;
+  fra.me.line = 14061;
+  fra.me.meth = LOCATE_parser___ReduceAction303___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -24126,71 +38360,89 @@ void parser___ReduceAction190___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:8292 */
+  /* parser/parser.nit:14063 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8293 */
+  /* parser/parser.nit:14064 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8294 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8295 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8296 */
+  /* parser/parser.nit:14065 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8297 */
+  /* parser/parser.nit:14066 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8298 */
+  /* parser/parser.nit:14067 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14068 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8299 */
+  /* parser/parser.nit:14069 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14070 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8300 */
+  /* parser/parser.nit:14071 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8302 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:14072 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14073 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14075 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8302);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14075);
   }
-  /* parser/parser.nit:8304 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:14077 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8304);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14077);
   }
-  /* parser/parser.nit:8306 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:14079 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8306);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14079);
   }
-  /* parser/parser.nit:8308 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:14081 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8308);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14081);
   }
-  /* parser/parser.nit:8310 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:14083 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8310);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14083);
   }
-  /* parser/parser.nit:8312 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:14085 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8312);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14085);
   }
-  /* parser/parser.nit:8313 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:8325 */
+  /* parser/parser.nit:14087 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14087);
+  }
+  /* parser/parser.nit:14089 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14089);
+  }
+  /* parser/parser.nit:14090 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(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], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:14101 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8326 */
+  /* parser/parser.nit:14102 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8326);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14102);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24198,17 +38450,17 @@ void parser___ReduceAction190___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction191___action[] = "parser::ReduceAction191::(parser::ReduceAction::action)";
-void parser___ReduceAction191___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction304___action[] = "parser::ReduceAction304::(parser::ReduceAction::action)";
+void parser___ReduceAction304___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8331;
-  fra.me.meth = LOCATE_parser___ReduceAction191___action;
+  fra.me.line = 14107;
+  fra.me.meth = LOCATE_parser___ReduceAction304___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 12;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -24220,79 +38472,97 @@ void parser___ReduceAction191___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:8333 */
+  /* parser/parser.nit:14109 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8334 */
+  /* parser/parser.nit:14110 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8335 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8336 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8337 */
+  /* parser/parser.nit:14111 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8338 */
+  /* parser/parser.nit:14112 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8339 */
+  /* parser/parser.nit:14113 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14114 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8340 */
+  /* parser/parser.nit:14115 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14116 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8341 */
+  /* parser/parser.nit:14117 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8342 */
+  /* parser/parser.nit:14118 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8344 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:14119 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14120 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14122 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8344);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14122);
   }
-  /* parser/parser.nit:8346 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:14124 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8346);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14124);
   }
-  /* parser/parser.nit:8348 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:14126 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8348);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14126);
   }
-  /* parser/parser.nit:8350 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:14128 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8350);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14128);
   }
-  /* parser/parser.nit:8352 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:14130 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8352);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14130);
   }
-  /* parser/parser.nit:8354 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:14132 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8354);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14132);
   }
-  /* parser/parser.nit:8356 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:14134 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8356);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14134);
   }
-  /* parser/parser.nit:8357 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:8369 */
+  /* parser/parser.nit:14136 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14136);
+  }
+  /* parser/parser.nit:14138 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14138);
+  }
+  /* parser/parser.nit:14139 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(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], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:14150 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8370 */
+  /* parser/parser.nit:14151 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8370);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14151);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24300,17 +38570,17 @@ void parser___ReduceAction191___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction192___action[] = "parser::ReduceAction192::(parser::ReduceAction::action)";
-void parser___ReduceAction192___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction305___action[] = "parser::ReduceAction305::(parser::ReduceAction::action)";
+void parser___ReduceAction305___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8375;
-  fra.me.meth = LOCATE_parser___ReduceAction192___action;
+  fra.me.line = 14156;
+  fra.me.meth = LOCATE_parser___ReduceAction305___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -24320,81 +38590,59 @@ void parser___ReduceAction192___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:8377 */
+  /* parser/parser.nit:14158 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8378 */
+  /* parser/parser.nit:14159 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8379 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8380 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8381 */
+  /* parser/parser.nit:14160 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8382 */
+  /* parser/parser.nit:14161 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8383 */
+  /* parser/parser.nit:14162 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8384 */
+  /* parser/parser.nit:14163 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8385 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8386 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8388 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8388);
-  }
-  /* parser/parser.nit:8390 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8390);
-  }
-  /* parser/parser.nit:8392 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:14165 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8392);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14165);
   }
-  /* parser/parser.nit:8394 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:14167 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8394);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14167);
   }
-  /* parser/parser.nit:8396 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:14169 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8396);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14169);
   }
-  /* parser/parser.nit:8398 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:14171 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8398);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14171);
   }
-  /* parser/parser.nit:8400 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:14173 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8400);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14173);
   }
-  /* parser/parser.nit:8401 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3]);
-  /* parser/parser.nit:8413 */
+  /* parser/parser.nit:14174 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:14185 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8414 */
+  /* parser/parser.nit:14186 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8414);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14186);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24402,17 +38650,17 @@ void parser___ReduceAction192___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction193___action[] = "parser::ReduceAction193::(parser::ReduceAction::action)";
-void parser___ReduceAction193___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction306___action[] = "parser::ReduceAction306::(parser::ReduceAction::action)";
+void parser___ReduceAction306___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8419;
-  fra.me.meth = LOCATE_parser___ReduceAction193___action;
+  fra.me.line = 14191;
+  fra.me.meth = LOCATE_parser___ReduceAction306___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -24423,89 +38671,67 @@ void parser___ReduceAction193___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:8421 */
+  /* parser/parser.nit:14193 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8422 */
+  /* parser/parser.nit:14194 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8423 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8424 */
+  /* parser/parser.nit:14195 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8425 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8426 */
+  /* parser/parser.nit:14196 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8427 */
+  /* parser/parser.nit:14197 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8428 */
+  /* parser/parser.nit:14198 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8429 */
+  /* parser/parser.nit:14199 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8430 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8431 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8433 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8433);
-  }
-  /* parser/parser.nit:8435 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8435);
-  }
-  /* parser/parser.nit:8437 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:14201 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8437);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14201);
   }
-  /* parser/parser.nit:8439 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:14203 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8439);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14203);
   }
-  /* parser/parser.nit:8441 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:14205 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8441);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14205);
   }
-  /* parser/parser.nit:8443 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:14207 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8443);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14207);
   }
-  /* parser/parser.nit:8445 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:14209 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8445);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14209);
   }
-  /* parser/parser.nit:8447 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:14211 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8447);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14211);
   }
-  /* parser/parser.nit:8448 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[4], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3]);
-  /* parser/parser.nit:8460 */
+  /* parser/parser.nit:14212 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:14223 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8461 */
+  /* parser/parser.nit:14224 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8461);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14224);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24513,17 +38739,17 @@ void parser___ReduceAction193___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction194___action[] = "parser::ReduceAction194::(parser::ReduceAction::action)";
-void parser___ReduceAction194___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction307___action[] = "parser::ReduceAction307::(parser::ReduceAction::action)";
+void parser___ReduceAction307___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8466;
-  fra.me.meth = LOCATE_parser___ReduceAction194___action;
+  fra.me.line = 14229;
+  fra.me.meth = LOCATE_parser___ReduceAction307___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -24533,61 +38759,68 @@ void parser___ReduceAction194___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:8468 */
+  /* parser/parser.nit:14231 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8469 */
+  /* parser/parser.nit:14232 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8470 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8471 */
+  /* parser/parser.nit:14233 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8472 */
+  /* parser/parser.nit:14234 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8473 */
+  /* parser/parser.nit:14235 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8474 */
+  /* parser/parser.nit:14236 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8476 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:14237 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14239 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8476);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14239);
   }
-  /* parser/parser.nit:8478 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:14241 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8478);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14241);
   }
-  /* parser/parser.nit:8480 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:14243 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14243);
+  }
+  /* parser/parser.nit:14245 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8480);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14245);
   }
-  /* parser/parser.nit:8482 */
+  /* parser/parser.nit:14247 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8482);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14247);
   }
-  /* parser/parser.nit:8484 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:14249 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8484);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14249);
   }
-  /* parser/parser.nit:8485 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:8494 */
+  /* parser/parser.nit:14250 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:14261 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8495 */
+  /* parser/parser.nit:14262 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8495);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14262);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24595,17 +38828,17 @@ void parser___ReduceAction194___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction195___action[] = "parser::ReduceAction195::(parser::ReduceAction::action)";
-void parser___ReduceAction195___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction308___action[] = "parser::ReduceAction308::(parser::ReduceAction::action)";
+void parser___ReduceAction308___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8500;
-  fra.me.meth = LOCATE_parser___ReduceAction195___action;
+  fra.me.line = 14267;
+  fra.me.meth = LOCATE_parser___ReduceAction308___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -24616,69 +38849,76 @@ void parser___ReduceAction195___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:8502 */
+  /* parser/parser.nit:14269 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8503 */
+  /* parser/parser.nit:14270 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8504 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8505 */
+  /* parser/parser.nit:14271 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8506 */
+  /* parser/parser.nit:14272 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8507 */
+  /* parser/parser.nit:14273 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8508 */
+  /* parser/parser.nit:14274 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8509 */
+  /* parser/parser.nit:14275 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8511 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:14276 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14278 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8511);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14278);
   }
-  /* parser/parser.nit:8513 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:14280 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8513);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14280);
   }
-  /* parser/parser.nit:8515 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:14282 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8515);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14282);
   }
-  /* parser/parser.nit:8517 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:14284 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8517);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14284);
   }
-  /* parser/parser.nit:8519 */
+  /* parser/parser.nit:14286 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14286);
+  }
+  /* parser/parser.nit:14288 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8519);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14288);
   }
-  /* parser/parser.nit:8521 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:14290 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8521);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14290);
   }
-  /* parser/parser.nit:8522 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:8531 */
+  /* parser/parser.nit:14291 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:14302 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8532 */
+  /* parser/parser.nit:14303 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8532);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14303);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24686,15 +38926,15 @@ void parser___ReduceAction195___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction196___action[] = "parser::ReduceAction196::(parser::ReduceAction::action)";
-void parser___ReduceAction196___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction309___action[] = "parser::ReduceAction309::(parser::ReduceAction::action)";
+void parser___ReduceAction309___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_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___ReduceAction196___action;
+  fra.me.line = 14308;
+  fra.me.meth = LOCATE_parser___ReduceAction309___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -24709,67 +38949,65 @@ void parser___ReduceAction196___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:8539 */
+  /* parser/parser.nit:14310 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8540 */
+  /* parser/parser.nit:14311 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8541 */
+  /* parser/parser.nit:14312 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8542 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8543 */
+  /* parser/parser.nit:14313 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8544 */
+  /* parser/parser.nit:14314 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8545 */
+  /* parser/parser.nit:14315 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8546 */
+  /* parser/parser.nit:14316 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8548 */
+  /* parser/parser.nit:14318 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8548);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14318);
   }
-  /* parser/parser.nit:8550 */
+  /* parser/parser.nit:14320 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8550);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14320);
   }
-  /* parser/parser.nit:8552 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:14322 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8552);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14322);
   }
-  /* parser/parser.nit:8554 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:14324 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8554);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14324);
   }
-  /* parser/parser.nit:8556 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:14326 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8556);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14326);
   }
-  /* parser/parser.nit:8558 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:14328 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8558);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14328);
   }
-  /* parser/parser.nit:8559 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:8568 */
+  /* parser/parser.nit:14329 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:14340 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8569 */
+  /* parser/parser.nit:14341 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8569);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14341);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24777,15 +39015,15 @@ void parser___ReduceAction196___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction197___action[] = "parser::ReduceAction197::(parser::ReduceAction::action)";
-void parser___ReduceAction197___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction310___action[] = "parser::ReduceAction310::(parser::ReduceAction::action)";
+void parser___ReduceAction310___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 = 8574;
-  fra.me.meth = LOCATE_parser___ReduceAction197___action;
+  fra.me.line = 14346;
+  fra.me.meth = LOCATE_parser___ReduceAction310___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
@@ -24801,75 +39039,73 @@ void parser___ReduceAction197___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:8576 */
+  /* parser/parser.nit:14348 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8577 */
+  /* parser/parser.nit:14349 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8578 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8579 */
+  /* parser/parser.nit:14350 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8580 */
+  /* parser/parser.nit:14351 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8581 */
+  /* parser/parser.nit:14352 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8582 */
+  /* parser/parser.nit:14353 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8583 */
+  /* parser/parser.nit:14354 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8584 */
+  /* parser/parser.nit:14355 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8586 */
+  /* parser/parser.nit:14357 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8586);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14357);
   }
-  /* parser/parser.nit:8588 */
+  /* parser/parser.nit:14359 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8588);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14359);
   }
-  /* parser/parser.nit:8590 */
+  /* parser/parser.nit:14361 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8590);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14361);
   }
-  /* parser/parser.nit:8592 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:14363 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8592);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14363);
   }
-  /* parser/parser.nit:8594 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:14365 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8594);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14365);
   }
-  /* parser/parser.nit:8596 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:14367 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8596);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14367);
   }
-  /* parser/parser.nit:8598 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:14369 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8598);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14369);
   }
-  /* parser/parser.nit:8599 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:8608 */
+  /* parser/parser.nit:14370 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:14381 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8609 */
+  /* parser/parser.nit:14382 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8609);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14382);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24877,17 +39113,17 @@ void parser___ReduceAction197___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction198___action[] = "parser::ReduceAction198::(parser::ReduceAction::action)";
-void parser___ReduceAction198___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction311___action[] = "parser::ReduceAction311::(parser::ReduceAction::action)";
+void parser___ReduceAction311___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 = 8614;
-  fra.me.meth = LOCATE_parser___ReduceAction198___action;
+  fra.me.line = 14387;
+  fra.me.meth = LOCATE_parser___ReduceAction311___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -24897,63 +39133,77 @@ void parser___ReduceAction198___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:8616 */
+  /* parser/parser.nit:14389 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8617 */
+  /* parser/parser.nit:14390 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8618 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8619 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8620 */
+  /* parser/parser.nit:14391 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8621 */
+  /* parser/parser.nit:14392 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8622 */
+  /* parser/parser.nit:14393 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8623 */
+  /* parser/parser.nit:14394 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8625 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:14395 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14396 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14398 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8625);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14398);
   }
-  /* parser/parser.nit:8627 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:14400 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8627);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14400);
   }
-  /* parser/parser.nit:8629 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:14402 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8629);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14402);
   }
-  /* parser/parser.nit:8631 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:14404 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8631);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14404);
   }
-  /* parser/parser.nit:8633 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:14406 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8633);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14406);
   }
-  /* parser/parser.nit:8634 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:8643 */
+  /* parser/parser.nit:14408 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14408);
+  }
+  /* parser/parser.nit:14410 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14410);
+  }
+  /* parser/parser.nit:14411 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:14422 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8644 */
+  /* parser/parser.nit:14423 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8644);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14423);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -24961,17 +39211,17 @@ void parser___ReduceAction198___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction199___action[] = "parser::ReduceAction199::(parser::ReduceAction::action)";
-void parser___ReduceAction199___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction312___action[] = "parser::ReduceAction312::(parser::ReduceAction::action)";
+void parser___ReduceAction312___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8649;
-  fra.me.meth = LOCATE_parser___ReduceAction199___action;
+  fra.me.line = 14428;
+  fra.me.meth = LOCATE_parser___ReduceAction312___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -24982,71 +39232,85 @@ void parser___ReduceAction199___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:8651 */
+  /* parser/parser.nit:14430 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8652 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8653 */
+  /* parser/parser.nit:14431 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8654 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8655 */
+  /* parser/parser.nit:14432 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8656 */
+  /* parser/parser.nit:14433 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8657 */
+  /* parser/parser.nit:14434 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8658 */
+  /* parser/parser.nit:14435 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8659 */
+  /* parser/parser.nit:14436 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8661 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:14437 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14438 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14440 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8661);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14440);
   }
-  /* parser/parser.nit:8663 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:14442 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8663);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14442);
   }
-  /* parser/parser.nit:8665 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:14444 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8665);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14444);
   }
-  /* parser/parser.nit:8667 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:14446 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8667);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14446);
   }
-  /* parser/parser.nit:8669 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:14448 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8669);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14448);
   }
-  /* parser/parser.nit:8671 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:14450 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8671);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14450);
   }
-  /* parser/parser.nit:8672 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:8681 */
+  /* parser/parser.nit:14452 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14452);
+  }
+  /* parser/parser.nit:14454 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14454);
+  }
+  /* parser/parser.nit:14455 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:14466 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8682 */
+  /* parser/parser.nit:14467 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8682);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14467);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25054,15 +39318,15 @@ void parser___ReduceAction199___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction200___action[] = "parser::ReduceAction200::(parser::ReduceAction::action)";
-void parser___ReduceAction200___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction313___action[] = "parser::ReduceAction313::(parser::ReduceAction::action)";
+void parser___ReduceAction313___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8687;
-  fra.me.meth = LOCATE_parser___ReduceAction200___action;
+  fra.me.line = 14472;
+  fra.me.meth = LOCATE_parser___ReduceAction313___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -25077,69 +39341,65 @@ void parser___ReduceAction200___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:8689 */
+  /* parser/parser.nit:14474 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8690 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8691 */
+  /* parser/parser.nit:14475 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8692 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8693 */
+  /* parser/parser.nit:14476 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8694 */
+  /* parser/parser.nit:14477 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8695 */
+  /* parser/parser.nit:14478 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8696 */
+  /* parser/parser.nit:14479 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8697 */
+  /* parser/parser.nit:14480 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8699 */
+  /* parser/parser.nit:14482 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8699);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14482);
   }
-  /* parser/parser.nit:8701 */
+  /* parser/parser.nit:14484 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8701);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14484);
   }
-  /* parser/parser.nit:8703 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:14486 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8703);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14486);
   }
-  /* parser/parser.nit:8705 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:14488 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8705);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14488);
   }
-  /* parser/parser.nit:8707 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:14490 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8707);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14490);
   }
-  /* parser/parser.nit:8709 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:14492 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8709);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14492);
   }
-  /* parser/parser.nit:8710 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:8719 */
+  /* parser/parser.nit:14493 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:14504 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8720 */
+  /* parser/parser.nit:14505 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8720);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14505);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25147,15 +39407,15 @@ void parser___ReduceAction200___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction201___action[] = "parser::ReduceAction201::(parser::ReduceAction::action)";
-void parser___ReduceAction201___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction314___action[] = "parser::ReduceAction314::(parser::ReduceAction::action)";
+void parser___ReduceAction314___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8725;
-  fra.me.meth = LOCATE_parser___ReduceAction201___action;
+  fra.me.line = 14510;
+  fra.me.meth = LOCATE_parser___ReduceAction314___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
@@ -25171,77 +39431,73 @@ void parser___ReduceAction201___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:8727 */
+  /* parser/parser.nit:14512 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8728 */
+  /* parser/parser.nit:14513 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8729 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8730 */
+  /* parser/parser.nit:14514 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8731 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8732 */
+  /* parser/parser.nit:14515 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8733 */
+  /* parser/parser.nit:14516 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8734 */
+  /* parser/parser.nit:14517 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8735 */
+  /* parser/parser.nit:14518 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8736 */
+  /* parser/parser.nit:14519 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8738 */
+  /* parser/parser.nit:14521 */
   REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8738);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14521);
   }
-  /* parser/parser.nit:8740 */
+  /* parser/parser.nit:14523 */
   REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8740);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14523);
   }
-  /* parser/parser.nit:8742 */
+  /* parser/parser.nit:14525 */
   REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8742);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14525);
   }
-  /* parser/parser.nit:8744 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:14527 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8744);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14527);
   }
-  /* parser/parser.nit:8746 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:14529 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8746);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14529);
   }
-  /* parser/parser.nit:8748 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:14531 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8748);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14531);
   }
-  /* parser/parser.nit:8750 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:14533 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8750);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14533);
   }
-  /* parser/parser.nit:8751 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:8760 */
+  /* parser/parser.nit:14534 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:14545 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8761 */
+  /* parser/parser.nit:14546 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8761);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14546);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25249,17 +39505,17 @@ void parser___ReduceAction201___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction202___action[] = "parser::ReduceAction202::(parser::ReduceAction::action)";
-void parser___ReduceAction202___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction315___action[] = "parser::ReduceAction315::(parser::ReduceAction::action)";
+void parser___ReduceAction315___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 = 8766;
-  fra.me.meth = LOCATE_parser___ReduceAction202___action;
+  fra.me.line = 14551;
+  fra.me.meth = LOCATE_parser___ReduceAction315___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -25269,59 +39525,77 @@ void parser___ReduceAction202___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:8768 */
+  /* parser/parser.nit:14553 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8769 */
+  /* parser/parser.nit:14554 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8770 */
+  /* parser/parser.nit:14555 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8771 */
+  /* parser/parser.nit:14556 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8772 */
+  /* parser/parser.nit:14557 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8773 */
+  /* parser/parser.nit:14558 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8775 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:14559 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14560 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14562 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8775);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14562);
   }
-  /* parser/parser.nit:8777 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:14564 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8777);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14564);
   }
-  /* parser/parser.nit:8779 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast nullable TKwtype*/;
+  /* parser/parser.nit:14566 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8779);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14566);
   }
-  /* parser/parser.nit:8781 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:14568 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8781);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14568);
   }
-  /* parser/parser.nit:8783 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:14570 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8783);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14570);
   }
-  /* parser/parser.nit:8784 */
-  fra.me.REG[3] = NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:8792 */
+  /* parser/parser.nit:14572 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14572);
+  }
+  /* parser/parser.nit:14574 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14574);
+  }
+  /* parser/parser.nit:14575 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:14586 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8793 */
+  /* parser/parser.nit:14587 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8793);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14587);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25329,17 +39603,17 @@ void parser___ReduceAction202___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction203___action[] = "parser::ReduceAction203::(parser::ReduceAction::action)";
-void parser___ReduceAction203___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction316___action[] = "parser::ReduceAction316::(parser::ReduceAction::action)";
+void parser___ReduceAction316___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8798;
-  fra.me.meth = LOCATE_parser___ReduceAction203___action;
+  fra.me.line = 14592;
+  fra.me.meth = LOCATE_parser___ReduceAction316___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -25350,142 +39624,85 @@ void parser___ReduceAction203___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:8800 */
+  /* parser/parser.nit:14594 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8801 */
+  /* parser/parser.nit:14595 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8802 */
+  /* parser/parser.nit:14596 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8803 */
+  /* parser/parser.nit:14597 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8804 */
+  /* parser/parser.nit:14598 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8805 */
+  /* parser/parser.nit:14599 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8806 */
+  /* parser/parser.nit:14600 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8808 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8808);
-  }
-  /* parser/parser.nit:8810 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8810);
-  }
-  /* parser/parser.nit:8812 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8812);
-  }
-  /* parser/parser.nit:8814 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast nullable TKwtype*/;
+  /* parser/parser.nit:14601 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14602 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14604 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8814);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14604);
   }
-  /* parser/parser.nit:8816 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:14606 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8816);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14606);
   }
-  /* parser/parser.nit:8818 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:14608 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8818);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14608);
   }
-  /* parser/parser.nit:8819 */
-  fra.me.REG[3] = NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:8827 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8828 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:14610 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8828);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14610);
   }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction204___action[] = "parser::ReduceAction204::(parser::ReduceAction::action)";
-void parser___ReduceAction204___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 = 8833;
-  fra.me.meth = LOCATE_parser___ReduceAction204___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser.nit:8835 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8836 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8837 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8838 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8839 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8840 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8841 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8843 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:14612 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8843);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14612);
   }
-  /* parser/parser.nit:8845 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:14614 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8845);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14614);
   }
-  /* parser/parser.nit:8847 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  /* parser/parser.nit:14616 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8847);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14616);
   }
-  /* parser/parser.nit:8849 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:14618 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8849);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14618);
   }
-  /* parser/parser.nit:8850 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:8861 */
+  /* parser/parser.nit:14619 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:14630 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8862 */
+  /* parser/parser.nit:14631 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8862);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14631);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25493,17 +39710,17 @@ void parser___ReduceAction204___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction205___action[] = "parser::ReduceAction205::(parser::ReduceAction::action)";
-void parser___ReduceAction205___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction317___action[] = "parser::ReduceAction317::(parser::ReduceAction::action)";
+void parser___ReduceAction317___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 = 8867;
-  fra.me.meth = LOCATE_parser___ReduceAction205___action;
+  fra.me.line = 14636;
+  fra.me.meth = LOCATE_parser___ReduceAction317___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -25513,63 +39730,77 @@ void parser___ReduceAction205___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:8869 */
+  /* parser/parser.nit:14638 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8870 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8871 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8872 */
+  /* parser/parser.nit:14639 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8873 */
+  /* parser/parser.nit:14640 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8874 */
+  /* parser/parser.nit:14641 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8875 */
+  /* parser/parser.nit:14642 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8876 */
+  /* parser/parser.nit:14643 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8878 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:14644 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14645 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14647 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8878);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14647);
   }
-  /* parser/parser.nit:8880 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:14649 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8880);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14649);
   }
-  /* parser/parser.nit:8882 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:14651 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8882);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14651);
   }
-  /* parser/parser.nit:8884 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  /* parser/parser.nit:14653 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8884);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14653);
   }
-  /* parser/parser.nit:8886 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:14655 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8886);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14655);
   }
-  /* parser/parser.nit:8887 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:8898 */
+  /* parser/parser.nit:14657 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14657);
+  }
+  /* parser/parser.nit:14659 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14659);
+  }
+  /* parser/parser.nit:14660 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:14671 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8899 */
+  /* parser/parser.nit:14672 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8899);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14672);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25577,17 +39808,17 @@ void parser___ReduceAction205___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction206___action[] = "parser::ReduceAction206::(parser::ReduceAction::action)";
-void parser___ReduceAction206___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction318___action[] = "parser::ReduceAction318::(parser::ReduceAction::action)";
+void parser___ReduceAction318___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8904;
-  fra.me.meth = LOCATE_parser___ReduceAction206___action;
+  fra.me.line = 14677;
+  fra.me.meth = LOCATE_parser___ReduceAction318___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -25597,63 +39828,86 @@ void parser___ReduceAction206___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:8906 */
+  /* parser/parser.nit:14679 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8907 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8908 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8909 */
+  /* parser/parser.nit:14680 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8910 */
+  /* parser/parser.nit:14681 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8911 */
+  /* parser/parser.nit:14682 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8912 */
+  /* parser/parser.nit:14683 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8913 */
+  /* parser/parser.nit:14684 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8915 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:14685 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14686 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14687 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14689 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8915);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14689);
   }
-  /* parser/parser.nit:8917 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:14691 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8917);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14691);
   }
-  /* parser/parser.nit:8919 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  /* parser/parser.nit:14693 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8919);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14693);
   }
-  /* parser/parser.nit:8921 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:14695 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8921);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14695);
   }
-  /* parser/parser.nit:8923 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:14697 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8923);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14697);
   }
-  /* parser/parser.nit:8924 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:8935 */
+  /* parser/parser.nit:14699 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14699);
+  }
+  /* parser/parser.nit:14701 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14701);
+  }
+  /* parser/parser.nit:14703 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14703);
+  }
+  /* parser/parser.nit:14704 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:14715 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8936 */
+  /* parser/parser.nit:14716 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8936);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14716);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25661,17 +39915,17 @@ void parser___ReduceAction206___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction207___action[] = "parser::ReduceAction207::(parser::ReduceAction::action)";
-void parser___ReduceAction207___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction319___action[] = "parser::ReduceAction319::(parser::ReduceAction::action)";
+void parser___ReduceAction319___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8941;
-  fra.me.meth = LOCATE_parser___ReduceAction207___action;
+  fra.me.line = 14721;
+  fra.me.meth = LOCATE_parser___ReduceAction319___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 11;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -25682,71 +39936,85 @@ void parser___ReduceAction207___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:8943 */
+  /* parser/parser.nit:14723 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8944 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8945 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8946 */
+  /* parser/parser.nit:14724 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8947 */
+  /* parser/parser.nit:14725 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8948 */
+  /* parser/parser.nit:14726 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8949 */
+  /* parser/parser.nit:14727 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8950 */
+  /* parser/parser.nit:14728 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8951 */
+  /* parser/parser.nit:14729 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8953 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:14730 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14731 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14733 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8953);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14733);
   }
-  /* parser/parser.nit:8955 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:14735 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8955);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14735);
   }
-  /* parser/parser.nit:8957 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:14737 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8957);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14737);
   }
-  /* parser/parser.nit:8959 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  /* parser/parser.nit:14739 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8959);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14739);
   }
-  /* parser/parser.nit:8961 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:14741 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8961);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14741);
   }
-  /* parser/parser.nit:8963 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:14743 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8963);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14743);
   }
-  /* parser/parser.nit:8964 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:8975 */
+  /* parser/parser.nit:14745 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14745);
+  }
+  /* parser/parser.nit:14747 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14747);
+  }
+  /* parser/parser.nit:14748 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(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], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:14759 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:8976 */
+  /* parser/parser.nit:14760 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8976);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14760);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25754,17 +40022,17 @@ void parser___ReduceAction207___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction208___action[] = "parser::ReduceAction208::(parser::ReduceAction::action)";
-void parser___ReduceAction208___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction320___action[] = "parser::ReduceAction320::(parser::ReduceAction::action)";
+void parser___ReduceAction320___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8981;
-  fra.me.meth = LOCATE_parser___ReduceAction208___action;
+  fra.me.line = 14765;
+  fra.me.meth = LOCATE_parser___ReduceAction320___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 12;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -25774,63 +40042,95 @@ void parser___ReduceAction208___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:8983 */
+  /* parser/parser.nit:14767 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:8984 */
+  /* parser/parser.nit:14768 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8985 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8986 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8987 */
+  /* parser/parser.nit:14769 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8988 */
+  /* parser/parser.nit:14770 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8989 */
+  /* parser/parser.nit:14771 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8990 */
+  /* parser/parser.nit:14772 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:8992 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:14773 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14774 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14775 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14776 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14778 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8992);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14778);
   }
-  /* parser/parser.nit:8994 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:14780 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8994);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14780);
   }
-  /* parser/parser.nit:8996 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  /* parser/parser.nit:14782 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8996);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14782);
   }
-  /* parser/parser.nit:8998 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:14784 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8998);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14784);
   }
-  /* parser/parser.nit:9000 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:14786 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9000);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14786);
   }
-  /* parser/parser.nit:9001 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:9012 */
+  /* parser/parser.nit:14788 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14788);
+  }
+  /* parser/parser.nit:14790 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14790);
+  }
+  /* parser/parser.nit:14792 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14792);
+  }
+  /* parser/parser.nit:14794 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14794);
+  }
+  /* parser/parser.nit:14795 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(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], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:14806 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9013 */
+  /* parser/parser.nit:14807 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9013);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14807);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25838,92 +40138,38 @@ void parser___ReduceAction208___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction209___action[] = "parser::ReduceAction209::(parser::ReduceAction::action)";
-void parser___ReduceAction209___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction321___action[] = "parser::ReduceAction321::(parser::ReduceAction::action)";
+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 = 9018;
-  fra.me.meth = LOCATE_parser___ReduceAction209___action;
+  fra.me.line = 14812;
+  fra.me.meth = LOCATE_parser___ReduceAction321___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:9020 */
+  /* parser/parser.nit:14814 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9021 */
+  /* parser/parser.nit:14815 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9022 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9023 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9024 */
+  /* parser/parser.nit:14816 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9025 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9026 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9027 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9028 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9030 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9030);
-  }
-  /* parser/parser.nit:9032 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9032);
-  }
-  /* parser/parser.nit:9034 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9034);
-  }
-  /* parser/parser.nit:9036 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9036);
-  }
-  /* parser/parser.nit:9038 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9038);
-  }
-  /* parser/parser.nit:9040 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9040);
-  }
-  /* parser/parser.nit:9041 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:9052 */
+  /* parser/parser.nit:14818 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9053 */
+  /* parser/parser.nit:14819 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9053);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14819);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -25931,92 +40177,127 @@ void parser___ReduceAction209___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction210___action[] = "parser::ReduceAction210::(parser::ReduceAction::action)";
-void parser___ReduceAction210___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction322___action[] = "parser::ReduceAction322::(parser::ReduceAction::action)";
+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 = 9058;
-  fra.me.meth = LOCATE_parser___ReduceAction210___action;
+  fra.me.line = 14824;
+  fra.me.meth = LOCATE_parser___ReduceAction322___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:9060 */
+  /* parser/parser.nit:14826 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9061 */
+  /* parser/parser.nit:14827 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9062 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9063 */
+  /* parser/parser.nit:14828 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14829 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9064 */
+  /* parser/parser.nit:14830 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9065 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9066 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9067 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9068 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9070 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9070);
-  }
-  /* parser/parser.nit:9072 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9072);
-  }
-  /* parser/parser.nit:9074 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9074);
-  }
-  /* parser/parser.nit:9076 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:14832 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:14833 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9076);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14833);
   }
-  /* parser/parser.nit:9078 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction324___action[] = "parser::ReduceAction324::(parser::ReduceAction::action)";
+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 = 14838;
+  fra.me.meth = LOCATE_parser___ReduceAction324___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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:14840 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:14841 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14842 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14843 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14845 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:14846 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9078);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14846);
   }
-  /* parser/parser.nit:9080 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction325___action[] = "parser::ReduceAction325::(parser::ReduceAction::action)";
+void parser___ReduceAction325___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 14851;
+  fra.me.meth = LOCATE_parser___ReduceAction325___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:14853 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:14854 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14856 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreadable, ID_parser___parser_nodes___TKwreadable)) /*cast nullable TKwreadable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9080);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14856);
   }
-  /* parser/parser.nit:9081 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:9092 */
+  /* parser/parser.nit:14857 */
+  fra.me.REG[3] = NEW_AReadAble_parser___parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:14861 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9093 */
+  /* parser/parser.nit:14862 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9093);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14862);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26024,101 +40305,149 @@ void parser___ReduceAction210___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction211___action[] = "parser::ReduceAction211::(parser::ReduceAction::action)";
-void parser___ReduceAction211___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction326___action[] = "parser::ReduceAction326::(parser::ReduceAction::action)";
+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 = 9098;
-  fra.me.meth = LOCATE_parser___ReduceAction211___action;
+  fra.me.line = 14867;
+  fra.me.meth = LOCATE_parser___ReduceAction326___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[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:9100 */
+  /* parser/parser.nit:14869 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9101 */
+  /* parser/parser.nit:14870 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9102 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9103 */
+  /* parser/parser.nit:14871 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9104 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9105 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9106 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9107 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9108 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9109 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9111 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:14873 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9111);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14873);
   }
-  /* parser/parser.nit:9113 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:14875 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreadable, ID_parser___parser_nodes___TKwreadable)) /*cast nullable TKwreadable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9113);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14875);
   }
-  /* parser/parser.nit:9115 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:14876 */
+  fra.me.REG[3] = NEW_AReadAble_parser___parser_prod___AReadAble___init_areadable(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:14880 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:14881 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9115);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14881);
   }
-  /* parser/parser.nit:9117 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction327___action[] = "parser::ReduceAction327::(parser::ReduceAction::action)";
+void parser___ReduceAction327___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 14886;
+  fra.me.meth = LOCATE_parser___ReduceAction327___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:14888 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:14889 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14891 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9117);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14891);
   }
-  /* parser/parser.nit:9119 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:14892 */
+  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:14897 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:14898 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9119);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14898);
   }
-  /* parser/parser.nit:9121 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction328___action[] = "parser::ReduceAction328::(parser::ReduceAction::action)";
+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 = 14903;
+  fra.me.meth = LOCATE_parser___ReduceAction328___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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:14905 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:14906 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14907 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14909 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9121);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14909);
   }
-  /* parser/parser.nit:9123 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:14911 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9123);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14911);
   }
-  /* parser/parser.nit:9124 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:9135 */
+  /* parser/parser.nit:14912 */
+  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:14917 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9136 */
+  /* parser/parser.nit:14918 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9136);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14918);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26126,83 +40455,52 @@ void parser___ReduceAction211___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction212___action[] = "parser::ReduceAction212::(parser::ReduceAction::action)";
-void parser___ReduceAction212___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction329___action[] = "parser::ReduceAction329::(parser::ReduceAction::action)";
+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 = 9141;
-  fra.me.meth = LOCATE_parser___ReduceAction212___action;
+  fra.me.line = 14923;
+  fra.me.meth = LOCATE_parser___ReduceAction329___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:9143 */
+  /* parser/parser.nit:14925 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9144 */
+  /* parser/parser.nit:14926 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9145 */
+  /* parser/parser.nit:14927 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9146 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9147 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9148 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9149 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9150 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9152 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9152);
-  }
-  /* parser/parser.nit:9154 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9154);
-  }
-  /* parser/parser.nit:9156 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9156);
-  }
-  /* parser/parser.nit:9158 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:14929 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9158);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14929);
   }
-  /* parser/parser.nit:9160 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:14931 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9160);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14931);
   }
-  /* parser/parser.nit:9161 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:9172 */
+  /* parser/parser.nit:14932 */
+  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:14937 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9173 */
+  /* parser/parser.nit:14938 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9173);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14938);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26210,17 +40508,17 @@ void parser___ReduceAction212___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction213___action[] = "parser::ReduceAction213::(parser::ReduceAction::action)";
-void parser___ReduceAction213___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction330___action[] = "parser::ReduceAction330::(parser::ReduceAction::action)";
+void parser___ReduceAction330___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 = 9178;
-  fra.me.meth = LOCATE_parser___ReduceAction213___action;
+  fra.me.line = 14943;
+  fra.me.meth = LOCATE_parser___ReduceAction330___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -26228,74 +40526,43 @@ void parser___ReduceAction213___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:9180 */
+  /* parser/parser.nit:14945 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9181 */
+  /* parser/parser.nit:14946 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9182 */
+  /* parser/parser.nit:14947 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9183 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9184 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9185 */
+  /* parser/parser.nit:14948 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9186 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9187 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9188 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9190 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9190);
-  }
-  /* parser/parser.nit:9192 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9192);
-  }
-  /* parser/parser.nit:9194 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9194);
-  }
-  /* parser/parser.nit:9196 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  /* parser/parser.nit:14950 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9196);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14950);
   }
-  /* parser/parser.nit:9198 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:14952 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9198);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14952);
   }
-  /* parser/parser.nit:9200 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:14954 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9200);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14954);
   }
-  /* parser/parser.nit:9201 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:9212 */
+  /* parser/parser.nit:14955 */
+  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:14960 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9213 */
+  /* parser/parser.nit:14961 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9213);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14961);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26303,92 +40570,35 @@ void parser___ReduceAction213___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction214___action[] = "parser::ReduceAction214::(parser::ReduceAction::action)";
-void parser___ReduceAction214___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction331___action[] = "parser::ReduceAction331::(parser::ReduceAction::action)";
+void parser___ReduceAction331___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9218;
-  fra.me.meth = LOCATE_parser___ReduceAction214___action;
+  fra.me.line = 14966;
+  fra.me.meth = LOCATE_parser___ReduceAction331___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:9220 */
+  /* parser/parser.nit:14968 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9221 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9222 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9223 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9224 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9225 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9226 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9227 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9228 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9230 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9230);
-  }
-  /* parser/parser.nit:9232 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9232);
-  }
-  /* parser/parser.nit:9234 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9234);
-  }
-  /* parser/parser.nit:9236 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9236);
-  }
-  /* parser/parser.nit:9238 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9238);
-  }
-  /* parser/parser.nit:9240 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9240);
-  }
-  /* parser/parser.nit:9241 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:9252 */
+  /* parser/parser.nit:14969 */
+  fra.me.REG[3] = NEW_APublicVisibility_parser___parser_prod___APublicVisibility___init_apublicvisibility();
+  /* parser/parser.nit:14970 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9253 */
+  /* parser/parser.nit:14971 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9253);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14971);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26396,101 +40606,45 @@ void parser___ReduceAction214___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction215___action[] = "parser::ReduceAction215::(parser::ReduceAction::action)";
-void parser___ReduceAction215___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction332___action[] = "parser::ReduceAction332::(parser::ReduceAction::action)";
+void parser___ReduceAction332___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9258;
-  fra.me.meth = LOCATE_parser___ReduceAction215___action;
+  fra.me.line = 14976;
+  fra.me.meth = LOCATE_parser___ReduceAction332___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[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:9260 */
+  /* parser/parser.nit:14978 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9261 */
+  /* parser/parser.nit:14979 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9262 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9263 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9264 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9265 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9266 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9267 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9268 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9269 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9271 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9271);
-  }
-  /* parser/parser.nit:9273 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9273);
-  }
-  /* parser/parser.nit:9275 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9275);
-  }
-  /* parser/parser.nit:9277 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9277);
-  }
-  /* parser/parser.nit:9279 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9279);
-  }
-  /* parser/parser.nit:9281 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9281);
-  }
-  /* parser/parser.nit:9283 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:14980 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14982 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwprivate, ID_parser___parser_nodes___TKwprivate)) /*cast nullable TKwprivate*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9283);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14982);
   }
-  /* parser/parser.nit:9284 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:9295 */
+  /* parser/parser.nit:14983 */
+  fra.me.REG[3] = NEW_APrivateVisibility_parser___parser_prod___APrivateVisibility___init_aprivatevisibility(fra.me.REG[3]);
+  /* parser/parser.nit:14986 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9296 */
+  /* parser/parser.nit:14987 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9296);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14987);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26498,92 +40652,45 @@ void parser___ReduceAction215___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction216___action[] = "parser::ReduceAction216::(parser::ReduceAction::action)";
-void parser___ReduceAction216___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction333___action[] = "parser::ReduceAction333::(parser::ReduceAction::action)";
+void parser___ReduceAction333___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9301;
-  fra.me.meth = LOCATE_parser___ReduceAction216___action;
+  fra.me.line = 14992;
+  fra.me.meth = LOCATE_parser___ReduceAction333___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:9303 */
+  /* parser/parser.nit:14994 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9304 */
+  /* parser/parser.nit:14995 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9305 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9306 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9307 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9308 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9309 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9310 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9311 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9313 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9313);
-  }
-  /* parser/parser.nit:9315 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9315);
-  }
-  /* parser/parser.nit:9317 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9317);
-  }
-  /* parser/parser.nit:9319 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9319);
-  }
-  /* parser/parser.nit:9321 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9321);
-  }
-  /* parser/parser.nit:9323 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:14996 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:14998 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwprotected, ID_parser___parser_nodes___TKwprotected)) /*cast nullable TKwprotected*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9323);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 14998);
   }
-  /* parser/parser.nit:9324 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:9335 */
+  /* parser/parser.nit:14999 */
+  fra.me.REG[3] = NEW_AProtectedVisibility_parser___parser_prod___AProtectedVisibility___init_aprotectedvisibility(fra.me.REG[3]);
+  /* parser/parser.nit:15002 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9336 */
+  /* parser/parser.nit:15003 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9336);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15003);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26591,101 +40698,45 @@ void parser___ReduceAction216___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction217___action[] = "parser::ReduceAction217::(parser::ReduceAction::action)";
-void parser___ReduceAction217___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction334___action[] = "parser::ReduceAction334::(parser::ReduceAction::action)";
+void parser___ReduceAction334___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9341;
-  fra.me.meth = LOCATE_parser___ReduceAction217___action;
+  fra.me.line = 15008;
+  fra.me.meth = LOCATE_parser___ReduceAction334___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[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:9343 */
+  /* parser/parser.nit:15010 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9344 */
+  /* parser/parser.nit:15011 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9345 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9346 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9347 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9348 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9349 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9350 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9351 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9352 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9354 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9354);
-  }
-  /* parser/parser.nit:9356 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9356);
-  }
-  /* parser/parser.nit:9358 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9358);
-  }
-  /* parser/parser.nit:9360 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9360);
-  }
-  /* parser/parser.nit:9362 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9362);
-  }
-  /* parser/parser.nit:9364 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9364);
-  }
-  /* parser/parser.nit:9366 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:15012 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15014 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwintrude, ID_parser___parser_nodes___TKwintrude)) /*cast nullable TKwintrude*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9366);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15014);
   }
-  /* parser/parser.nit:9367 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:9378 */
+  /* parser/parser.nit:15015 */
+  fra.me.REG[3] = NEW_AIntrudeVisibility_parser___parser_prod___AIntrudeVisibility___init_aintrudevisibility(fra.me.REG[3]);
+  /* parser/parser.nit:15018 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9379 */
+  /* parser/parser.nit:15019 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9379);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15019);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26693,101 +40744,43 @@ void parser___ReduceAction217___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction218___action[] = "parser::ReduceAction218::(parser::ReduceAction::action)";
-void parser___ReduceAction218___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction335___action[] = "parser::ReduceAction335::(parser::ReduceAction::action)";
+void parser___ReduceAction335___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9384;
-  fra.me.meth = LOCATE_parser___ReduceAction218___action;
+  fra.me.line = 15024;
+  fra.me.meth = LOCATE_parser___ReduceAction335___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[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:9386 */
+  /* parser/parser.nit:15026 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9387 */
+  /* parser/parser.nit:15027 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9388 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9389 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9390 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9391 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9392 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9393 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9394 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9395 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9397 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9397);
-  }
-  /* parser/parser.nit:9399 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9399);
-  }
-  /* parser/parser.nit:9401 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9401);
-  }
-  /* parser/parser.nit:9403 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9403);
-  }
-  /* parser/parser.nit:9405 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9405);
-  }
-  /* parser/parser.nit:9407 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9407);
-  }
-  /* parser/parser.nit:9409 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:15029 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9409);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15029);
   }
-  /* parser/parser.nit:9410 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:9421 */
+  /* parser/parser.nit:15030 */
+  fra.me.REG[3] = NEW_AIdMethid_parser___parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
+  /* parser/parser.nit:15033 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9422 */
+  /* parser/parser.nit:15034 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9422);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15034);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26795,110 +40788,43 @@ void parser___ReduceAction218___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction219___action[] = "parser::ReduceAction219::(parser::ReduceAction::action)";
-void parser___ReduceAction219___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction336___action[] = "parser::ReduceAction336::(parser::ReduceAction::action)";
+void parser___ReduceAction336___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9427;
-  fra.me.meth = LOCATE_parser___ReduceAction219___action;
+  fra.me.line = 15039;
+  fra.me.meth = LOCATE_parser___ReduceAction336___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[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:9429 */
+  /* parser/parser.nit:15041 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9430 */
+  /* parser/parser.nit:15042 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9431 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9432 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9433 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9434 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9435 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9436 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9437 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9438 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9439 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9441 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9441);
-  }
-  /* parser/parser.nit:9443 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9443);
-  }
-  /* parser/parser.nit:9445 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9445);
-  }
-  /* parser/parser.nit:9447 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9447);
-  }
-  /* parser/parser.nit:9449 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9449);
-  }
-  /* parser/parser.nit:9451 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9451);
-  }
-  /* parser/parser.nit:9453 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9453);
-  }
-  /* parser/parser.nit:9455 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:15044 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TPlus, ID_parser___parser_nodes___TPlus)) /*cast nullable TPlus*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9455);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15044);
   }
-  /* parser/parser.nit:9456 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:9467 */
+  /* parser/parser.nit:15045 */
+  fra.me.REG[3] = NEW_APlusMethid_parser___parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
+  /* parser/parser.nit:15048 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9468 */
+  /* parser/parser.nit:15049 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9468);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15049);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26906,83 +40832,43 @@ void parser___ReduceAction219___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction220___action[] = "parser::ReduceAction220::(parser::ReduceAction::action)";
-void parser___ReduceAction220___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction337___action[] = "parser::ReduceAction337::(parser::ReduceAction::action)";
+void parser___ReduceAction337___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9473;
-  fra.me.meth = LOCATE_parser___ReduceAction220___action;
+  fra.me.line = 15054;
+  fra.me.meth = LOCATE_parser___ReduceAction337___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = 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:9475 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9476 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9477 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9478 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9479 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9480 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9481 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9482 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9484 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9484);
-  }
-  /* parser/parser.nit:9486 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9486);
-  }
-  /* parser/parser.nit:9488 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9488);
-  }
-  /* parser/parser.nit:9490 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9490);
-  }
-  /* parser/parser.nit:9492 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15056 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:15057 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15059 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TMinus, ID_parser___parser_nodes___TMinus)) /*cast nullable TMinus*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9492);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15059);
   }
-  /* parser/parser.nit:9493 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:9504 */
+  /* parser/parser.nit:15060 */
+  fra.me.REG[3] = NEW_AMinusMethid_parser___parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
+  /* parser/parser.nit:15063 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9505 */
+  /* parser/parser.nit:15064 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9505);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15064);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -26990,92 +40876,43 @@ void parser___ReduceAction220___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction221___action[] = "parser::ReduceAction221::(parser::ReduceAction::action)";
-void parser___ReduceAction221___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction338___action[] = "parser::ReduceAction338::(parser::ReduceAction::action)";
+void parser___ReduceAction338___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9510;
-  fra.me.meth = LOCATE_parser___ReduceAction221___action;
+  fra.me.line = 15069;
+  fra.me.meth = LOCATE_parser___ReduceAction338___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:9512 */
+  /* parser/parser.nit:15071 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9513 */
+  /* parser/parser.nit:15072 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9514 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9515 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9516 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9517 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9518 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9519 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9520 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9522 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9522);
-  }
-  /* parser/parser.nit:9524 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9524);
-  }
-  /* parser/parser.nit:9526 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9526);
-  }
-  /* parser/parser.nit:9528 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9528);
-  }
-  /* parser/parser.nit:9530 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9530);
-  }
-  /* parser/parser.nit:9532 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15074 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TStar, ID_parser___parser_nodes___TStar)) /*cast nullable TStar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9532);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15074);
   }
-  /* parser/parser.nit:9533 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:9544 */
+  /* parser/parser.nit:15075 */
+  fra.me.REG[3] = NEW_AStarMethid_parser___parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
+  /* parser/parser.nit:15078 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9545 */
+  /* parser/parser.nit:15079 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9545);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15079);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27083,92 +40920,43 @@ void parser___ReduceAction221___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction222___action[] = "parser::ReduceAction222::(parser::ReduceAction::action)";
-void parser___ReduceAction222___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction339___action[] = "parser::ReduceAction339::(parser::ReduceAction::action)";
+void parser___ReduceAction339___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9550;
-  fra.me.meth = LOCATE_parser___ReduceAction222___action;
+  fra.me.line = 15084;
+  fra.me.meth = LOCATE_parser___ReduceAction339___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:9552 */
+  /* parser/parser.nit:15086 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9553 */
+  /* parser/parser.nit:15087 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9554 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9555 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9556 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9557 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9558 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9559 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9560 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9562 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9562);
-  }
-  /* parser/parser.nit:9564 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9564);
-  }
-  /* parser/parser.nit:9566 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9566);
-  }
-  /* parser/parser.nit:9568 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9568);
-  }
-  /* parser/parser.nit:9570 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9570);
-  }
-  /* parser/parser.nit:9572 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15089 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TSlash, ID_parser___parser_nodes___TSlash)) /*cast nullable TSlash*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9572);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15089);
   }
-  /* parser/parser.nit:9573 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:9584 */
+  /* parser/parser.nit:15090 */
+  fra.me.REG[3] = NEW_ASlashMethid_parser___parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
+  /* parser/parser.nit:15093 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9585 */
+  /* parser/parser.nit:15094 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9585);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15094);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27176,101 +40964,43 @@ void parser___ReduceAction222___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction223___action[] = "parser::ReduceAction223::(parser::ReduceAction::action)";
-void parser___ReduceAction223___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction340___action[] = "parser::ReduceAction340::(parser::ReduceAction::action)";
+void parser___ReduceAction340___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9590;
-  fra.me.meth = LOCATE_parser___ReduceAction223___action;
+  fra.me.line = 15099;
+  fra.me.meth = LOCATE_parser___ReduceAction340___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[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:9592 */
+  /* parser/parser.nit:15101 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9593 */
+  /* parser/parser.nit:15102 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9594 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9595 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9596 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9597 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9598 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9599 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9600 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9601 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9603 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9603);
-  }
-  /* parser/parser.nit:9605 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9605);
-  }
-  /* parser/parser.nit:9607 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9607);
-  }
-  /* parser/parser.nit:9609 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9609);
-  }
-  /* parser/parser.nit:9611 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9611);
-  }
-  /* parser/parser.nit:9613 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9613);
-  }
-  /* parser/parser.nit:9615 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15104 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TPercent, ID_parser___parser_nodes___TPercent)) /*cast nullable TPercent*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9615);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15104);
   }
-  /* parser/parser.nit:9616 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:9627 */
+  /* parser/parser.nit:15105 */
+  fra.me.REG[3] = NEW_APercentMethid_parser___parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
+  /* parser/parser.nit:15108 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9628 */
+  /* parser/parser.nit:15109 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9628);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15109);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27278,92 +41008,43 @@ void parser___ReduceAction223___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction224___action[] = "parser::ReduceAction224::(parser::ReduceAction::action)";
-void parser___ReduceAction224___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction341___action[] = "parser::ReduceAction341::(parser::ReduceAction::action)";
+void parser___ReduceAction341___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9633;
-  fra.me.meth = LOCATE_parser___ReduceAction224___action;
+  fra.me.line = 15114;
+  fra.me.meth = LOCATE_parser___ReduceAction341___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:9635 */
+  /* parser/parser.nit:15116 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9636 */
+  /* parser/parser.nit:15117 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9637 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9638 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9639 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9640 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9641 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9642 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9643 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9645 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9645);
-  }
-  /* parser/parser.nit:9647 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9647);
-  }
-  /* parser/parser.nit:9649 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9649);
-  }
-  /* parser/parser.nit:9651 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9651);
-  }
-  /* parser/parser.nit:9653 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9653);
-  }
-  /* parser/parser.nit:9655 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15119 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TEq, ID_parser___parser_nodes___TEq)) /*cast nullable TEq*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9655);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15119);
   }
-  /* parser/parser.nit:9656 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:9667 */
+  /* parser/parser.nit:15120 */
+  fra.me.REG[3] = NEW_AEqMethid_parser___parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
+  /* parser/parser.nit:15123 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9668 */
+  /* parser/parser.nit:15124 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9668);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15124);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27371,101 +41052,43 @@ void parser___ReduceAction224___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction225___action[] = "parser::ReduceAction225::(parser::ReduceAction::action)";
-void parser___ReduceAction225___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction342___action[] = "parser::ReduceAction342::(parser::ReduceAction::action)";
+void parser___ReduceAction342___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9673;
-  fra.me.meth = LOCATE_parser___ReduceAction225___action;
+  fra.me.line = 15129;
+  fra.me.meth = LOCATE_parser___ReduceAction342___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[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:9675 */
+  /* parser/parser.nit:15131 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9676 */
+  /* parser/parser.nit:15132 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9677 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9678 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9679 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9680 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9681 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9682 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9683 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9684 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9686 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9686);
-  }
-  /* parser/parser.nit:9688 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9688);
-  }
-  /* parser/parser.nit:9690 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9690);
-  }
-  /* parser/parser.nit:9692 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9692);
-  }
-  /* parser/parser.nit:9694 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9694);
-  }
-  /* parser/parser.nit:9696 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9696);
-  }
-  /* parser/parser.nit:9698 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15134 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TNe, ID_parser___parser_nodes___TNe)) /*cast nullable TNe*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9698);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15134);
   }
-  /* parser/parser.nit:9699 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:9710 */
+  /* parser/parser.nit:15135 */
+  fra.me.REG[3] = NEW_ANeMethid_parser___parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
+  /* parser/parser.nit:15138 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9711 */
+  /* parser/parser.nit:15139 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9711);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15139);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27473,101 +41096,43 @@ void parser___ReduceAction225___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction226___action[] = "parser::ReduceAction226::(parser::ReduceAction::action)";
-void parser___ReduceAction226___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction343___action[] = "parser::ReduceAction343::(parser::ReduceAction::action)";
+void parser___ReduceAction343___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9716;
-  fra.me.meth = LOCATE_parser___ReduceAction226___action;
+  fra.me.line = 15144;
+  fra.me.meth = LOCATE_parser___ReduceAction343___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[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:9718 */
+  /* parser/parser.nit:15146 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9719 */
+  /* parser/parser.nit:15147 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9720 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9721 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9722 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9723 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9724 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9725 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9726 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9727 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9729 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9729);
-  }
-  /* parser/parser.nit:9731 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9731);
-  }
-  /* parser/parser.nit:9733 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9733);
-  }
-  /* parser/parser.nit:9735 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9735);
-  }
-  /* parser/parser.nit:9737 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9737);
-  }
-  /* parser/parser.nit:9739 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9739);
-  }
-  /* parser/parser.nit:9741 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15149 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TLe, ID_parser___parser_nodes___TLe)) /*cast nullable TLe*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9741);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15149);
   }
-  /* parser/parser.nit:9742 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:9753 */
+  /* parser/parser.nit:15150 */
+  fra.me.REG[3] = NEW_ALeMethid_parser___parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
+  /* parser/parser.nit:15153 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9754 */
+  /* parser/parser.nit:15154 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9754);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15154);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27575,110 +41140,43 @@ void parser___ReduceAction226___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction227___action[] = "parser::ReduceAction227::(parser::ReduceAction::action)";
-void parser___ReduceAction227___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction344___action[] = "parser::ReduceAction344::(parser::ReduceAction::action)";
+void parser___ReduceAction344___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9759;
-  fra.me.meth = LOCATE_parser___ReduceAction227___action;
+  fra.me.line = 15159;
+  fra.me.meth = LOCATE_parser___ReduceAction344___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[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:9761 */
+  /* parser/parser.nit:15161 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9762 */
+  /* parser/parser.nit:15162 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9763 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9764 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9765 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9766 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9767 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9768 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9769 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9770 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9771 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9773 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9773);
-  }
-  /* parser/parser.nit:9775 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9775);
-  }
-  /* parser/parser.nit:9777 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9777);
-  }
-  /* parser/parser.nit:9779 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9779);
-  }
-  /* parser/parser.nit:9781 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9781);
-  }
-  /* parser/parser.nit:9783 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9783);
-  }
-  /* parser/parser.nit:9785 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9785);
-  }
-  /* parser/parser.nit:9787 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15164 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TGe, ID_parser___parser_nodes___TGe)) /*cast nullable TGe*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9787);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15164);
   }
-  /* parser/parser.nit:9788 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:9799 */
+  /* parser/parser.nit:15165 */
+  fra.me.REG[3] = NEW_AGeMethid_parser___parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
+  /* parser/parser.nit:15168 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9800 */
+  /* parser/parser.nit:15169 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9800);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15169);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27686,194 +41184,87 @@ void parser___ReduceAction227___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction228___action[] = "parser::ReduceAction228::(parser::ReduceAction::action)";
-void parser___ReduceAction228___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction345___action[] = "parser::ReduceAction345::(parser::ReduceAction::action)";
+void parser___ReduceAction345___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9805;
-  fra.me.meth = LOCATE_parser___ReduceAction228___action;
+  fra.me.line = 15174;
+  fra.me.meth = LOCATE_parser___ReduceAction345___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:9807 */
+  /* parser/parser.nit:15176 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9808 */
+  /* parser/parser.nit:15177 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9809 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9810 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9811 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9812 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9813 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9814 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9815 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9817 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9817);
-  }
-  /* parser/parser.nit:9819 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9819);
-  }
-  /* parser/parser.nit:9821 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9821);
-  }
-  /* parser/parser.nit:9823 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9823);
-  }
-  /* parser/parser.nit:9825 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9825);
-  }
-  /* parser/parser.nit:9827 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15179 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TLt, ID_parser___parser_nodes___TLt)) /*cast nullable TLt*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9827);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15179);
   }
-  /* parser/parser.nit:9828 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:9839 */
+  /* parser/parser.nit:15180 */
+  fra.me.REG[3] = NEW_ALtMethid_parser___parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
+  /* parser/parser.nit:15183 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9840 */
+  /* parser/parser.nit:15184 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9840);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15184);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction229___action[] = "parser::ReduceAction229::(parser::ReduceAction::action)";
-void parser___ReduceAction229___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  return;
+}
+static const char LOCATE_parser___ReduceAction346___action[] = "parser::ReduceAction346::(parser::ReduceAction::action)";
+void parser___ReduceAction346___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9845;
-  fra.me.meth = LOCATE_parser___ReduceAction229___action;
+  fra.me.line = 15189;
+  fra.me.meth = LOCATE_parser___ReduceAction346___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[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:9847 */
+  /* parser/parser.nit:15191 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9848 */
+  /* parser/parser.nit:15192 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9849 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9850 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9851 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9852 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9853 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9854 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9855 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9856 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9858 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9858);
-  }
-  /* parser/parser.nit:9860 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9860);
-  }
-  /* parser/parser.nit:9862 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9862);
-  }
-  /* parser/parser.nit:9864 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9864);
-  }
-  /* parser/parser.nit:9866 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9866);
-  }
-  /* parser/parser.nit:9868 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9868);
-  }
-  /* parser/parser.nit:9870 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15194 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TGt, ID_parser___parser_nodes___TGt)) /*cast nullable TGt*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9870);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15194);
   }
-  /* parser/parser.nit:9871 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:9882 */
+  /* parser/parser.nit:15195 */
+  fra.me.REG[3] = NEW_AGtMethid_parser___parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
+  /* parser/parser.nit:15198 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9883 */
+  /* parser/parser.nit:15199 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9883);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15199);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27881,101 +41272,43 @@ void parser___ReduceAction229___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction230___action[] = "parser::ReduceAction230::(parser::ReduceAction::action)";
-void parser___ReduceAction230___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction347___action[] = "parser::ReduceAction347::(parser::ReduceAction::action)";
+void parser___ReduceAction347___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9888;
-  fra.me.meth = LOCATE_parser___ReduceAction230___action;
+  fra.me.line = 15204;
+  fra.me.meth = LOCATE_parser___ReduceAction347___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[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:9890 */
+  /* parser/parser.nit:15206 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9891 */
+  /* parser/parser.nit:15207 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9892 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9893 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9894 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9895 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9896 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9897 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9898 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9899 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9901 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9901);
-  }
-  /* parser/parser.nit:9903 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9903);
-  }
-  /* parser/parser.nit:9905 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9905);
-  }
-  /* parser/parser.nit:9907 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9907);
-  }
-  /* parser/parser.nit:9909 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9909);
-  }
-  /* parser/parser.nit:9911 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9911);
-  }
-  /* parser/parser.nit:9913 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15209 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TLl, ID_parser___parser_nodes___TLl)) /*cast nullable TLl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9913);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15209);
   }
-  /* parser/parser.nit:9914 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:9925 */
+  /* parser/parser.nit:15210 */
+  fra.me.REG[3] = NEW_ALlMethid_parser___parser_prod___ALlMethid___init_allmethid(fra.me.REG[3]);
+  /* parser/parser.nit:15213 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9926 */
+  /* parser/parser.nit:15214 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9926);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15214);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -27983,110 +41316,43 @@ void parser___ReduceAction230___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction231___action[] = "parser::ReduceAction231::(parser::ReduceAction::action)";
-void parser___ReduceAction231___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction348___action[] = "parser::ReduceAction348::(parser::ReduceAction::action)";
+void parser___ReduceAction348___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9931;
-  fra.me.meth = LOCATE_parser___ReduceAction231___action;
+  fra.me.line = 15219;
+  fra.me.meth = LOCATE_parser___ReduceAction348___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[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:9933 */
+  /* parser/parser.nit:15221 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9934 */
+  /* parser/parser.nit:15222 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9935 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9936 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9937 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9938 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9939 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9940 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9941 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9942 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9943 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9945 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9945);
-  }
-  /* parser/parser.nit:9947 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9947);
-  }
-  /* parser/parser.nit:9949 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9949);
-  }
-  /* parser/parser.nit:9951 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9951);
-  }
-  /* parser/parser.nit:9953 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9953);
-  }
-  /* parser/parser.nit:9955 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9955);
-  }
-  /* parser/parser.nit:9957 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9957);
-  }
-  /* parser/parser.nit:9959 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15224 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TGg, ID_parser___parser_nodes___TGg)) /*cast nullable TGg*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9959);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15224);
   }
-  /* parser/parser.nit:9960 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:9971 */
+  /* parser/parser.nit:15225 */
+  fra.me.REG[3] = NEW_AGgMethid_parser___parser_prod___AGgMethid___init_aggmethid(fra.me.REG[3]);
+  /* parser/parser.nit:15228 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:9972 */
+  /* parser/parser.nit:15229 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9972);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15229);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28094,101 +41360,52 @@ void parser___ReduceAction231___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction232___action[] = "parser::ReduceAction232::(parser::ReduceAction::action)";
-void parser___ReduceAction232___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction349___action[] = "parser::ReduceAction349::(parser::ReduceAction::action)";
+void parser___ReduceAction349___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9977;
-  fra.me.meth = LOCATE_parser___ReduceAction232___action;
+  fra.me.line = 15234;
+  fra.me.meth = LOCATE_parser___ReduceAction349___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[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:9979 */
+  /* parser/parser.nit:15236 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:9980 */
+  /* parser/parser.nit:15237 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9981 */
+  /* parser/parser.nit:15238 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9982 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9983 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9984 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9985 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9986 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9987 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9988 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:9990 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9990);
-  }
-  /* parser/parser.nit:9992 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9992);
-  }
-  /* parser/parser.nit:9994 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9994);
-  }
-  /* parser/parser.nit:9996 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9996);
-  }
-  /* parser/parser.nit:9998 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9998);
-  }
-  /* parser/parser.nit:10000 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:15240 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10000);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15240);
   }
-  /* parser/parser.nit:10002 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15242 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast nullable TCbra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10002);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15242);
   }
-  /* parser/parser.nit:10003 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:10014 */
+  /* parser/parser.nit:15243 */
+  fra.me.REG[3] = NEW_ABraMethid_parser___parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:15247 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10015 */
+  /* parser/parser.nit:15248 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10015);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15248);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28196,110 +41413,43 @@ void parser___ReduceAction232___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction233___action[] = "parser::ReduceAction233::(parser::ReduceAction::action)";
-void parser___ReduceAction233___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction350___action[] = "parser::ReduceAction350::(parser::ReduceAction::action)";
+void parser___ReduceAction350___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10020;
-  fra.me.meth = LOCATE_parser___ReduceAction233___action;
+  fra.me.line = 15253;
+  fra.me.meth = LOCATE_parser___ReduceAction350___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[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:10022 */
+  /* parser/parser.nit:15255 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10023 */
+  /* parser/parser.nit:15256 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10024 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10025 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10026 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10027 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10028 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10029 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10030 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10031 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10032 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10034 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10034);
-  }
-  /* parser/parser.nit:10036 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10036);
-  }
-  /* parser/parser.nit:10038 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10038);
-  }
-  /* parser/parser.nit:10040 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10040);
-  }
-  /* parser/parser.nit:10042 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10042);
-  }
-  /* parser/parser.nit:10044 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10044);
-  }
-  /* parser/parser.nit:10046 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10046);
-  }
-  /* parser/parser.nit:10048 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15258 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TStarship, ID_parser___parser_nodes___TStarship)) /*cast nullable TStarship*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10048);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15258);
   }
-  /* parser/parser.nit:10049 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:10060 */
+  /* parser/parser.nit:15259 */
+  fra.me.REG[3] = NEW_AStarshipMethid_parser___parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
+  /* parser/parser.nit:15262 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10061 */
+  /* parser/parser.nit:15263 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10061);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15263);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28307,110 +41457,52 @@ void parser___ReduceAction233___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction234___action[] = "parser::ReduceAction234::(parser::ReduceAction::action)";
-void parser___ReduceAction234___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction351___action[] = "parser::ReduceAction351::(parser::ReduceAction::action)";
+void parser___ReduceAction351___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10066;
-  fra.me.meth = LOCATE_parser___ReduceAction234___action;
+  fra.me.line = 15268;
+  fra.me.meth = LOCATE_parser___ReduceAction351___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[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:10068 */
+  /* parser/parser.nit:15270 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10069 */
+  /* parser/parser.nit:15271 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10070 */
+  /* parser/parser.nit:15272 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10071 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10072 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10073 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10074 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10075 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10076 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10077 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10078 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10080 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10080);
-  }
-  /* parser/parser.nit:10082 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10082);
-  }
-  /* parser/parser.nit:10084 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10084);
-  }
-  /* parser/parser.nit:10086 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10086);
-  }
-  /* parser/parser.nit:10088 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10088);
-  }
-  /* parser/parser.nit:10090 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10090);
-  }
-  /* parser/parser.nit:10092 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:15274 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10092);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15274);
   }
-  /* parser/parser.nit:10094 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15276 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10094);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15276);
   }
-  /* parser/parser.nit:10095 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(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], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:10106 */
+  /* parser/parser.nit:15277 */
+  fra.me.REG[3] = NEW_AAssignMethid_parser___parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:15281 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10107 */
+  /* parser/parser.nit:15282 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10107);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15282);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28418,17 +41510,17 @@ void parser___ReduceAction234___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction235___action[] = "parser::ReduceAction235::(parser::ReduceAction::action)";
-void parser___ReduceAction235___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+static const char LOCATE_parser___ReduceAction352___action[] = "parser::ReduceAction352::(parser::ReduceAction::action)";
+void parser___ReduceAction352___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 = 10112;
-  fra.me.meth = LOCATE_parser___ReduceAction235___action;
+  fra.me.line = 15287;
+  fra.me.meth = LOCATE_parser___ReduceAction352___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -28436,101 +41528,43 @@ void parser___ReduceAction235___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[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:10114 */
+  /* parser/parser.nit:15289 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10115 */
+  /* parser/parser.nit:15290 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10116 */
+  /* parser/parser.nit:15291 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10117 */
+  /* parser/parser.nit:15292 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10118 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10119 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10120 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10121 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10122 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10123 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10124 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10125 */
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10127 */
-  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10127);
-  }
-  /* parser/parser.nit:10129 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10129);
-  }
-  /* parser/parser.nit:10131 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10131);
-  }
-  /* parser/parser.nit:10133 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10133);
-  }
-  /* parser/parser.nit:10135 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10135);
-  }
-  /* parser/parser.nit:10137 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10137);
-  }
-  /* parser/parser.nit:10139 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:15294 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10139);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15294);
   }
-  /* parser/parser.nit:10141 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:15296 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast nullable TCbra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10141);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15296);
   }
-  /* parser/parser.nit:10143 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15298 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10143);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15298);
   }
-  /* parser/parser.nit:10144 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(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], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:10155 */
+  /* parser/parser.nit:15299 */
+  fra.me.REG[3] = NEW_ABraassignMethid_parser___parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:15304 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10156 */
+  /* parser/parser.nit:15305 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10156);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15305);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28538,15 +41572,15 @@ void parser___ReduceAction235___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction236___action[] = "parser::ReduceAction236::(parser::ReduceAction::action)";
-void parser___ReduceAction236___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction353___action[] = "parser::ReduceAction353::(parser::ReduceAction::action)";
+void parser___ReduceAction353___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10161;
-  fra.me.meth = LOCATE_parser___ReduceAction236___action;
+  fra.me.line = 15310;
+  fra.me.meth = LOCATE_parser___ReduceAction353___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
@@ -28560,57 +41594,49 @@ void parser___ReduceAction236___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:10163 */
+  /* parser/parser.nit:15312 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10164 */
+  /* parser/parser.nit:15313 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10165 */
+  /* parser/parser.nit:15314 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15315 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10166 */
+  /* parser/parser.nit:15316 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10167 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10168 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10170 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10170);
-  }
-  /* parser/parser.nit:10172 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10172);
-  }
-  /* parser/parser.nit:10174 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  /* parser/parser.nit:15317 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15318 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15319 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15321 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10174);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15321);
   }
-  /* parser/parser.nit:10176 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:15323 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10176);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15323);
   }
-  /* parser/parser.nit:10178 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15325 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10178);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15325);
   }
-  /* parser/parser.nit:10179 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:10190 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10191 */
+  /* parser/parser.nit:15326 */
+  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[7]);
+  /* parser/parser.nit:15333 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:15334 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10191);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15334);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28618,15 +41644,15 @@ void parser___ReduceAction236___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction237___action[] = "parser::ReduceAction237::(parser::ReduceAction::action)";
-void parser___ReduceAction237___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction354___action[] = "parser::ReduceAction354::(parser::ReduceAction::action)";
+void parser___ReduceAction354___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10196;
-  fra.me.meth = LOCATE_parser___ReduceAction237___action;
+  fra.me.line = 15339;
+  fra.me.meth = LOCATE_parser___ReduceAction354___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -28641,65 +41667,60 @@ void parser___ReduceAction237___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:10198 */
+  /* parser/parser.nit:15341 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10199 */
+  /* parser/parser.nit:15342 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10200 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10201 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10202 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10203 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10204 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10206 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10206);
-  }
-  /* parser/parser.nit:10208 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10208);
-  }
-  /* parser/parser.nit:10210 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:15343 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15344 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15345 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15346 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15347 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15348 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15349 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15351 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10210);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15351);
   }
-  /* parser/parser.nit:10212 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  /* parser/parser.nit:15353 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10212);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15353);
   }
-  /* parser/parser.nit:10214 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:15354 */
+  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:15356 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10214);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15356);
   }
-  /* parser/parser.nit:10216 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15358 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10216);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15358);
   }
-  /* parser/parser.nit:10217 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:10228 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10229 */
+  /* parser/parser.nit:15359 */
+  fra.me.REG[8] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[8]);
+  /* parser/parser.nit:15366 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:15367 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10229);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15367);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28707,15 +41728,15 @@ void parser___ReduceAction237___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction238___action[] = "parser::ReduceAction238::(parser::ReduceAction::action)";
-void parser___ReduceAction238___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction355___action[] = "parser::ReduceAction355::(parser::ReduceAction::action)";
+void parser___ReduceAction355___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10234;
-  fra.me.meth = LOCATE_parser___ReduceAction238___action;
+  fra.me.line = 15372;
+  fra.me.meth = LOCATE_parser___ReduceAction355___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -28730,65 +41751,60 @@ void parser___ReduceAction238___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:10236 */
+  /* parser/parser.nit:15374 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10237 */
+  /* parser/parser.nit:15375 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10238 */
+  /* parser/parser.nit:15376 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15377 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10239 */
+  /* parser/parser.nit:15378 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10240 */
+  /* parser/parser.nit:15379 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10241 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10242 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10244 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10244);
-  }
-  /* parser/parser.nit:10246 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10246);
-  }
-  /* parser/parser.nit:10248 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  /* parser/parser.nit:15380 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15381 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15382 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15384 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10248);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15384);
   }
-  /* parser/parser.nit:10250 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:15386 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10250);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15386);
   }
-  /* parser/parser.nit:10252 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:15388 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10252);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15388);
   }
-  /* parser/parser.nit:10254 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15390 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10254);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15390);
   }
-  /* parser/parser.nit:10255 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:10266 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10267 */
+  /* parser/parser.nit:15391 */
+  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:15392 */
+  fra.me.REG[8] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[7], fra.me.REG[5], fra.me.REG[4], fra.me.REG[8]);
+  /* parser/parser.nit:15399 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:15400 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10267);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15400);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28796,15 +41812,15 @@ void parser___ReduceAction238___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction239___action[] = "parser::ReduceAction239::(parser::ReduceAction::action)";
-void parser___ReduceAction239___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction356___action[] = "parser::ReduceAction356::(parser::ReduceAction::action)";
+void parser___ReduceAction356___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 = 10272;
-  fra.me.meth = LOCATE_parser___ReduceAction239___action;
+  fra.me.line = 15405;
+  fra.me.meth = LOCATE_parser___ReduceAction356___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
@@ -28820,73 +41836,71 @@ void parser___ReduceAction239___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:10274 */
+  /* parser/parser.nit:15407 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10275 */
+  /* parser/parser.nit:15408 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10276 */
+  /* parser/parser.nit:15409 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10277 */
+  /* parser/parser.nit:15410 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15411 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10278 */
+  /* parser/parser.nit:15412 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10279 */
+  /* parser/parser.nit:15413 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10280 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10281 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10283 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10283);
-  }
-  /* parser/parser.nit:10285 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10285);
-  }
-  /* parser/parser.nit:10287 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:15414 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15415 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15416 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15418 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10287);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15418);
   }
-  /* parser/parser.nit:10289 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  /* parser/parser.nit:15420 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10289);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15420);
   }
-  /* parser/parser.nit:10291 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:15421 */
+  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:15423 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10291);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15423);
   }
-  /* parser/parser.nit:10293 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:15425 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10293);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15425);
   }
-  /* parser/parser.nit:10295 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15427 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10295);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15427);
   }
-  /* parser/parser.nit:10296 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:10307 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10308 */
+  /* parser/parser.nit:15428 */
+  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:15429 */
+  fra.me.REG[9] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[7], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[9]);
+  /* parser/parser.nit:15436 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:15437 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10308);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15437);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28894,17 +41908,17 @@ void parser___ReduceAction239___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction240___action[] = "parser::ReduceAction240::(parser::ReduceAction::action)";
-void parser___ReduceAction240___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction357___action[] = "parser::ReduceAction357::(parser::ReduceAction::action)";
+void parser___ReduceAction357___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 = 10313;
-  fra.me.meth = LOCATE_parser___ReduceAction240___action;
+  fra.me.line = 15442;
+  fra.me.meth = LOCATE_parser___ReduceAction357___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -28913,69 +41927,43 @@ void parser___ReduceAction240___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:10315 */
+  /* parser/parser.nit:15444 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10316 */
+  /* parser/parser.nit:15445 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10317 */
+  /* parser/parser.nit:15446 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15447 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10318 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10319 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10320 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10321 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10323 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10323);
-  }
-  /* parser/parser.nit:10325 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10325);
-  }
-  /* parser/parser.nit:10327 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10327);
-  }
-  /* parser/parser.nit:10329 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10329);
-  }
-  /* parser/parser.nit:10331 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:15448 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15449 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15450 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15452 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10331);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15452);
   }
-  /* parser/parser.nit:10333 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15454 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10333);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15454);
   }
-  /* parser/parser.nit:10334 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:10345 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10346 */
+  /* parser/parser.nit:15455 */
+  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3], NIT_NULL, fra.me.REG[6]);
+  /* parser/parser.nit:15462 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:15463 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10346);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15463);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -28983,17 +41971,17 @@ void parser___ReduceAction240___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction241___action[] = "parser::ReduceAction241::(parser::ReduceAction::action)";
-void parser___ReduceAction241___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction358___action[] = "parser::ReduceAction358::(parser::ReduceAction::action)";
+void parser___ReduceAction358___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10351;
-  fra.me.meth = LOCATE_parser___ReduceAction241___action;
+  fra.me.line = 15468;
+  fra.me.meth = LOCATE_parser___ReduceAction358___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -29003,77 +41991,54 @@ void parser___ReduceAction241___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:10353 */
+  /* parser/parser.nit:15470 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10354 */
+  /* parser/parser.nit:15471 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15472 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10355 */
+  /* parser/parser.nit:15473 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10356 */
+  /* parser/parser.nit:15474 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10357 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10358 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10359 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10360 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10362 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10362);
-  }
-  /* parser/parser.nit:10364 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10364);
-  }
-  /* parser/parser.nit:10366 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10366);
-  }
-  /* parser/parser.nit:10368 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10368);
-  }
-  /* parser/parser.nit:10370 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:15475 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15476 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15477 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15479 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10370);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15479);
   }
-  /* parser/parser.nit:10372 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:15481 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10372);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15481);
   }
-  /* parser/parser.nit:10374 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15482 */
+  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:15484 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10374);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15484);
   }
-  /* parser/parser.nit:10375 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:10386 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10387 */
+  /* parser/parser.nit:15485 */
+  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3], NIT_NULL, fra.me.REG[7]);
+  /* parser/parser.nit:15492 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:15493 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10387);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15493);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29081,17 +42046,17 @@ void parser___ReduceAction241___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction242___action[] = "parser::ReduceAction242::(parser::ReduceAction::action)";
-void parser___ReduceAction242___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction359___action[] = "parser::ReduceAction359::(parser::ReduceAction::action)";
+void parser___ReduceAction359___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10392;
-  fra.me.meth = LOCATE_parser___ReduceAction242___action;
+  fra.me.line = 15498;
+  fra.me.meth = LOCATE_parser___ReduceAction359___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -29101,77 +42066,54 @@ void parser___ReduceAction242___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:10394 */
+  /* parser/parser.nit:15500 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10395 */
+  /* parser/parser.nit:15501 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10396 */
+  /* parser/parser.nit:15502 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10397 */
+  /* parser/parser.nit:15503 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15504 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10398 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10399 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10400 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10401 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10403 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10403);
-  }
-  /* parser/parser.nit:10405 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10405);
-  }
-  /* parser/parser.nit:10407 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10407);
-  }
-  /* parser/parser.nit:10409 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10409);
-  }
-  /* parser/parser.nit:10411 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:15505 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15506 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15507 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15509 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10411);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15509);
   }
-  /* parser/parser.nit:10413 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:15511 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10413);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15511);
   }
-  /* parser/parser.nit:10415 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15513 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10415);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15513);
   }
-  /* parser/parser.nit:10416 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:10427 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10428 */
+  /* parser/parser.nit:15514 */
+  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:15515 */
+  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[6], fra.me.REG[4], NIT_NULL, fra.me.REG[7]);
+  /* parser/parser.nit:15522 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:15523 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10428);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15523);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29179,17 +42121,17 @@ void parser___ReduceAction242___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction243___action[] = "parser::ReduceAction243::(parser::ReduceAction::action)";
-void parser___ReduceAction243___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction360___action[] = "parser::ReduceAction360::(parser::ReduceAction::action)";
+void parser___ReduceAction360___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10433;
-  fra.me.meth = LOCATE_parser___ReduceAction243___action;
+  fra.me.line = 15528;
+  fra.me.meth = LOCATE_parser___ReduceAction360___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -29200,85 +42142,117 @@ void parser___ReduceAction243___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:10435 */
+  /* parser/parser.nit:15530 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10436 */
+  /* parser/parser.nit:15531 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10437 */
+  /* parser/parser.nit:15532 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10438 */
+  /* parser/parser.nit:15533 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15534 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10439 */
+  /* parser/parser.nit:15535 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10440 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10441 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10442 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10443 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10445 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10445);
-  }
-  /* parser/parser.nit:10447 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10447);
-  }
-  /* parser/parser.nit:10449 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:15536 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15537 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15538 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15540 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10449);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15540);
   }
-  /* parser/parser.nit:10451 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  /* parser/parser.nit:15542 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10451);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15542);
   }
-  /* parser/parser.nit:10453 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:15543 */
+  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:15545 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10453);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15545);
   }
-  /* parser/parser.nit:10455 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:15547 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10455);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15547);
   }
-  /* parser/parser.nit:10457 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:15548 */
+  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:15549 */
+  fra.me.REG[8] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], NIT_NULL, fra.me.REG[8]);
+  /* parser/parser.nit:15556 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:15557 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10457);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15557);
   }
-  /* parser/parser.nit:10459 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction361___action[] = "parser::ReduceAction361::(parser::ReduceAction::action)";
+void parser___ReduceAction361___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 15562;
+  fra.me.meth = LOCATE_parser___ReduceAction361___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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:15564 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:15565 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15566 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15567 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15568 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15570 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10459);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15570);
   }
-  /* parser/parser.nit:10460 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:10471 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10472 */
+  /* parser/parser.nit:15571 */
+  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser.nit:15578 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:15579 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10472);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15579);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29286,17 +42260,17 @@ void parser___ReduceAction243___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction244___action[] = "parser::ReduceAction244::(parser::ReduceAction::action)";
-void parser___ReduceAction244___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction362___action[] = "parser::ReduceAction362::(parser::ReduceAction::action)";
+void parser___ReduceAction362___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10477;
-  fra.me.meth = LOCATE_parser___ReduceAction244___action;
+  fra.me.line = 15584;
+  fra.me.meth = LOCATE_parser___ReduceAction362___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -29305,69 +42279,142 @@ void parser___ReduceAction244___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:10479 */
+  /* parser/parser.nit:15586 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10480 */
+  /* parser/parser.nit:15587 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10481 */
+  /* parser/parser.nit:15588 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10482 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10483 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10484 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10485 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10487 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10487);
-  }
-  /* parser/parser.nit:10489 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:15589 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15590 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15591 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15593 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10489);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15593);
   }
-  /* parser/parser.nit:10491 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  /* parser/parser.nit:15595 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10491);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15595);
   }
-  /* parser/parser.nit:10493 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:15596 */
+  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:15597 */
+  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser.nit:15604 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:15605 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10493);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15605);
   }
-  /* parser/parser.nit:10495 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction363___action[] = "parser::ReduceAction363::(parser::ReduceAction::action)";
+void parser___ReduceAction363___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 15610;
+  fra.me.meth = LOCATE_parser___ReduceAction363___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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:15612 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:15613 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15614 */
+  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15615 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15616 */
+  fra.me.REG[4] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL, fra.me.REG[4]);
+  /* parser/parser.nit:15623 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:15624 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10495);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15624);
   }
-  /* parser/parser.nit:10497 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction364___action[] = "parser::ReduceAction364::(parser::ReduceAction::action)";
+void parser___ReduceAction364___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 = 15629;
+  fra.me.meth = LOCATE_parser___ReduceAction364___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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:15631 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:15632 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15633 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15634 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15635 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15637 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10497);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15637);
   }
-  /* parser/parser.nit:10498 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:10509 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10510 */
+  /* parser/parser.nit:15638 */
+  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:15639 */
+  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[5]);
+  /* parser/parser.nit:15646 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:15647 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10510);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15647);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29375,17 +42422,17 @@ void parser___ReduceAction244___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction245___action[] = "parser::ReduceAction245::(parser::ReduceAction::action)";
-void parser___ReduceAction245___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction365___action[] = "parser::ReduceAction365::(parser::ReduceAction::action)";
+void parser___ReduceAction365___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10515;
-  fra.me.meth = LOCATE_parser___ReduceAction245___action;
+  fra.me.line = 15652;
+  fra.me.meth = LOCATE_parser___ReduceAction365___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -29394,78 +42441,41 @@ void parser___ReduceAction245___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:10517 */
+  /* parser/parser.nit:15654 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10518 */
+  /* parser/parser.nit:15655 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10519 */
+  /* parser/parser.nit:15656 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10520 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10521 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10522 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10523 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10524 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10526 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10526);
-  }
-  /* parser/parser.nit:10528 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10528);
-  }
-  /* parser/parser.nit:10530 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10530);
-  }
-  /* parser/parser.nit:10532 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10532);
-  }
-  /* parser/parser.nit:10534 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10534);
-  }
-  /* parser/parser.nit:10536 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:15657 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15658 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15659 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15661 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10536);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15661);
   }
-  /* parser/parser.nit:10538 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15663 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10538);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15663);
   }
-  /* parser/parser.nit:10539 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:10550 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10551 */
+  /* parser/parser.nit:15664 */
+  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3], NIT_NULL, fra.me.REG[6]);
+  /* parser/parser.nit:15671 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:15672 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10551);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15672);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29473,17 +42483,17 @@ void parser___ReduceAction245___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction246___action[] = "parser::ReduceAction246::(parser::ReduceAction::action)";
-void parser___ReduceAction246___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction366___action[] = "parser::ReduceAction366::(parser::ReduceAction::action)";
+void parser___ReduceAction366___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10556;
-  fra.me.meth = LOCATE_parser___ReduceAction246___action;
+  fra.me.line = 15677;
+  fra.me.meth = LOCATE_parser___ReduceAction366___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -29493,77 +42503,52 @@ void parser___ReduceAction246___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:10558 */
+  /* parser/parser.nit:15679 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10559 */
+  /* parser/parser.nit:15680 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10560 */
+  /* parser/parser.nit:15681 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10561 */
+  /* parser/parser.nit:15682 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10562 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10563 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10564 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10565 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10567 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10567);
-  }
-  /* parser/parser.nit:10569 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10569);
-  }
-  /* parser/parser.nit:10571 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10571);
-  }
-  /* parser/parser.nit:10573 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10573);
-  }
-  /* parser/parser.nit:10575 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:15683 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15684 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15685 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15687 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10575);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15687);
   }
-  /* parser/parser.nit:10577 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:15689 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10577);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15689);
   }
-  /* parser/parser.nit:10579 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15690 */
+  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:15692 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10579);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15692);
   }
-  /* parser/parser.nit:10580 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:10591 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10592 */
+  /* parser/parser.nit:15693 */
+  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3], NIT_NULL, fra.me.REG[7]);
+  /* parser/parser.nit:15700 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:15701 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10592);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15701);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29571,17 +42556,17 @@ void parser___ReduceAction246___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction247___action[] = "parser::ReduceAction247::(parser::ReduceAction::action)";
-void parser___ReduceAction247___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction367___action[] = "parser::ReduceAction367::(parser::ReduceAction::action)";
+void parser___ReduceAction367___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10597;
-  fra.me.meth = LOCATE_parser___ReduceAction247___action;
+  fra.me.line = 15706;
+  fra.me.meth = LOCATE_parser___ReduceAction367___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -29591,86 +42576,49 @@ void parser___ReduceAction247___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:10599 */
+  /* parser/parser.nit:15708 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10600 */
+  /* parser/parser.nit:15709 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10601 */
+  /* parser/parser.nit:15710 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10602 */
+  /* parser/parser.nit:15711 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10603 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10604 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10605 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10606 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10607 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10609 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10609);
-  }
-  /* parser/parser.nit:10611 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10611);
-  }
-  /* parser/parser.nit:10613 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10613);
-  }
-  /* parser/parser.nit:10615 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10615);
-  }
-  /* parser/parser.nit:10617 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10617);
-  }
-  /* parser/parser.nit:10619 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:15712 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15713 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15714 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15716 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10619);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15716);
   }
-  /* parser/parser.nit:10621 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:15718 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10621);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15718);
   }
-  /* parser/parser.nit:10623 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15720 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10623);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15720);
   }
-  /* parser/parser.nit:10624 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:10635 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10636 */
+  /* parser/parser.nit:15721 */
+  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[7]);
+  /* parser/parser.nit:15728 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:15729 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10636);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15729);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29678,17 +42626,17 @@ void parser___ReduceAction247___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction248___action[] = "parser::ReduceAction248::(parser::ReduceAction::action)";
-void parser___ReduceAction248___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction368___action[] = "parser::ReduceAction368::(parser::ReduceAction::action)";
+void parser___ReduceAction368___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10641;
-  fra.me.meth = LOCATE_parser___ReduceAction248___action;
+  fra.me.line = 15734;
+  fra.me.meth = LOCATE_parser___ReduceAction368___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -29699,76 +42647,60 @@ void parser___ReduceAction248___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:10643 */
+  /* parser/parser.nit:15736 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10644 */
+  /* parser/parser.nit:15737 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10645 */
+  /* parser/parser.nit:15738 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10646 */
+  /* parser/parser.nit:15739 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10647 */
+  /* parser/parser.nit:15740 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10648 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10649 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10650 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10652 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10652);
-  }
-  /* parser/parser.nit:10654 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10654);
-  }
-  /* parser/parser.nit:10656 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10656);
-  }
-  /* parser/parser.nit:10658 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:15741 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15742 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15743 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15745 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10658);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15745);
   }
-  /* parser/parser.nit:10660 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:15747 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10660);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15747);
   }
-  /* parser/parser.nit:10662 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:15748 */
+  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:15750 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10662);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15750);
   }
-  /* parser/parser.nit:10664 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15752 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10664);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15752);
   }
-  /* parser/parser.nit:10665 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:10676 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10677 */
+  /* parser/parser.nit:15753 */
+  fra.me.REG[8] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[8]);
+  /* parser/parser.nit:15760 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:15761 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10677);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15761);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29776,106 +42708,40 @@ void parser___ReduceAction248___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction249___action[] = "parser::ReduceAction249::(parser::ReduceAction::action)";
-void parser___ReduceAction249___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction369___action[] = "parser::ReduceAction369::(parser::ReduceAction::action)";
+void parser___ReduceAction369___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10682;
-  fra.me.meth = LOCATE_parser___ReduceAction249___action;
+  fra.me.line = 15766;
+  fra.me.meth = LOCATE_parser___ReduceAction369___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[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:10684 */
+  /* parser/parser.nit:15768 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10685 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10686 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10687 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10688 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10689 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10690 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10691 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10692 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10694 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10694);
-  }
-  /* parser/parser.nit:10696 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10696);
-  }
-  /* parser/parser.nit:10698 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10698);
-  }
-  /* parser/parser.nit:10700 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10700);
-  }
-  /* parser/parser.nit:10702 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10702);
-  }
-  /* parser/parser.nit:10704 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10704);
-  }
-  /* parser/parser.nit:10706 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10706);
-  }
-  /* parser/parser.nit:10708 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10708);
-  }
-  /* parser/parser.nit:10709 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:10720 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10721 */
+  /* parser/parser.nit:15769 */
+  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15770 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15771 */
+  fra.me.REG[4] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL, fra.me.REG[4]);
+  /* parser/parser.nit:15778 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:15779 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10721);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15779);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29883,17 +42749,17 @@ void parser___ReduceAction249___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction250___action[] = "parser::ReduceAction250::(parser::ReduceAction::action)";
-void parser___ReduceAction250___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+static const char LOCATE_parser___ReduceAction370___action[] = "parser::ReduceAction370::(parser::ReduceAction::action)";
+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 tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10726;
-  fra.me.meth = LOCATE_parser___ReduceAction250___action;
+  fra.me.line = 15784;
+  fra.me.meth = LOCATE_parser___ReduceAction370___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -29901,88 +42767,31 @@ void parser___ReduceAction250___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[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:10728 */
+  /* parser/parser.nit:15786 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10729 */
+  /* parser/parser.nit:15787 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10730 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10731 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10732 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10733 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10734 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10735 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10736 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10738 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10738);
-  }
-  /* parser/parser.nit:10740 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10740);
-  }
-  /* parser/parser.nit:10742 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10742);
-  }
-  /* parser/parser.nit:10744 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10744);
-  }
-  /* parser/parser.nit:10746 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10746);
-  }
-  /* parser/parser.nit:10748 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10748);
-  }
-  /* parser/parser.nit:10750 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10750);
-  }
-  /* parser/parser.nit:10752 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  /* parser/parser.nit:15788 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15789 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15791 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10752);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15791);
   }
-  /* parser/parser.nit:10753 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(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], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:10764 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10765 */
+  /* parser/parser.nit:15792 */
+  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser.nit:15799 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:15800 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10765);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15800);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -29990,159 +42799,131 @@ void parser___ReduceAction250___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction251___action[] = "parser::ReduceAction251::(parser::ReduceAction::action)";
-void parser___ReduceAction251___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+static const char LOCATE_parser___ReduceAction371___action[] = "parser::ReduceAction371::(parser::ReduceAction::action)";
+void parser___ReduceAction371___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10770;
-  fra.me.meth = LOCATE_parser___ReduceAction251___action;
+  fra.me.line = 15805;
+  fra.me.meth = LOCATE_parser___ReduceAction371___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[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:10772 */
+  /* parser/parser.nit:15807 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10773 */
+  /* parser/parser.nit:15808 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10774 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10775 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10776 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10777 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10778 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10779 */
-  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10780 */
-  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10781 */
-  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10783 */
-  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10783);
-  }
-  /* parser/parser.nit:10785 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10785);
-  }
-  /* parser/parser.nit:10787 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10787);
-  }
-  /* parser/parser.nit:10789 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10789);
-  }
-  /* parser/parser.nit:10791 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10791);
-  }
-  /* parser/parser.nit:10793 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10793);
-  }
-  /* parser/parser.nit:10795 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10795);
-  }
-  /* parser/parser.nit:10797 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:15809 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15810 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15812 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10797);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* parser/parser.nit:10799 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast nullable AExternCodeBlock*/;
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10799);
+    /* parser/parser.nit:15813 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:10800 */
-  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(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], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:10811 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10812 */
+  /* parser/parser.nit:15815 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:15816 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10812);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15816);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction252___action[] = "parser::ReduceAction252::(parser::ReduceAction::action)";
-void parser___ReduceAction252___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  return;
+}
+static const char LOCATE_parser___ReduceAction372___action[] = "parser::ReduceAction372::(parser::ReduceAction::action)";
+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 = 10817;
-  fra.me.meth = LOCATE_parser___ReduceAction252___action;
+  fra.me.line = 15821;
+  fra.me.meth = LOCATE_parser___ReduceAction372___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:10819 */
+  /* parser/parser.nit:15823 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10820 */
+  /* parser/parser.nit:15824 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10822 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreadable, ID_parser___parser_nodes___TKwreadable)) /*cast nullable TKwreadable*/;
+  /* parser/parser.nit:15825 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15826 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15827 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15830 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10822);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15830);
   }
-  /* parser/parser.nit:10823 */
-  fra.me.REG[3] = NEW_AReadAble_parser___parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:10827 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10828 */
+  /* parser/parser.nit:15831 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:15832 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:15834 */
+  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:15835 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:15836 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10828);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15836);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30150,15 +42931,15 @@ void parser___ReduceAction252___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction253___action[] = "parser::ReduceAction253::(parser::ReduceAction::action)";
-void parser___ReduceAction253___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction373___action[] = "parser::ReduceAction373::(parser::ReduceAction::action)";
+void parser___ReduceAction373___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10833;
-  fra.me.meth = LOCATE_parser___ReduceAction253___action;
+  fra.me.line = 15841;
+  fra.me.meth = LOCATE_parser___ReduceAction373___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -30169,33 +42950,21 @@ void parser___ReduceAction253___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:15843 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10836 */
+  /* parser/parser.nit:15844 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10837 */
+  /* parser/parser.nit:15845 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10839 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10839);
-  }
-  /* parser/parser.nit:10841 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreadable, ID_parser___parser_nodes___TKwreadable)) /*cast nullable TKwreadable*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10841);
-  }
-  /* parser/parser.nit:10842 */
-  fra.me.REG[3] = NEW_AReadAble_parser___parser_prod___AReadAble___init_areadable(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:10846 */
+  /* parser/parser.nit:15846 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15848 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10847 */
+  /* parser/parser.nit:15849 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10847);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15849);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30203,15 +42972,15 @@ void parser___ReduceAction253___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction254___action[] = "parser::ReduceAction254::(parser::ReduceAction::action)";
-void parser___ReduceAction254___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction374___action[] = "parser::ReduceAction374::(parser::ReduceAction::action)";
+void parser___ReduceAction374___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_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___ReduceAction254___action;
+  fra.me.line = 15854;
+  fra.me.meth = LOCATE_parser___ReduceAction374___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -30221,25 +42990,25 @@ void parser___ReduceAction254___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:10854 */
+  /* parser/parser.nit:15856 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10855 */
+  /* parser/parser.nit:15857 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10857 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
+  /* parser/parser.nit:15859 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10857);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15859);
   }
-  /* parser/parser.nit:10858 */
-  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:10863 */
+  /* parser/parser.nit:15860 */
+  fra.me.REG[3] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:15866 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10864 */
+  /* parser/parser.nit:15867 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10864);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15867);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30247,15 +43016,15 @@ void parser___ReduceAction254___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction255___action[] = "parser::ReduceAction255::(parser::ReduceAction::action)";
-void parser___ReduceAction255___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction375___action[] = "parser::ReduceAction375::(parser::ReduceAction::action)";
+void parser___ReduceAction375___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10869;
-  fra.me.meth = LOCATE_parser___ReduceAction255___action;
+  fra.me.line = 15872;
+  fra.me.meth = LOCATE_parser___ReduceAction375___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -30266,33 +43035,33 @@ void parser___ReduceAction255___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:10871 */
+  /* parser/parser.nit:15874 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10872 */
+  /* parser/parser.nit:15875 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10873 */
+  /* parser/parser.nit:15876 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10875 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:15878 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10875);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15878);
   }
-  /* parser/parser.nit:10877 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
+  /* parser/parser.nit:15880 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10877);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15880);
   }
-  /* parser/parser.nit:10878 */
-  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:10883 */
+  /* parser/parser.nit:15881 */
+  fra.me.REG[3] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:15887 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10884 */
+  /* parser/parser.nit:15888 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10884);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15888);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30300,15 +43069,15 @@ void parser___ReduceAction255___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction256___action[] = "parser::ReduceAction256::(parser::ReduceAction::action)";
-void parser___ReduceAction256___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction376___action[] = "parser::ReduceAction376::(parser::ReduceAction::action)";
+void parser___ReduceAction376___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10889;
-  fra.me.meth = LOCATE_parser___ReduceAction256___action;
+  fra.me.line = 15893;
+  fra.me.meth = LOCATE_parser___ReduceAction376___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -30319,33 +43088,33 @@ void parser___ReduceAction256___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:10891 */
+  /* parser/parser.nit:15895 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10892 */
+  /* parser/parser.nit:15896 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10893 */
+  /* parser/parser.nit:15897 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10895 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:15899 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10895);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15899);
   }
-  /* parser/parser.nit:10897 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
+  /* parser/parser.nit:15901 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10897);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15901);
   }
-  /* parser/parser.nit:10898 */
-  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:10903 */
+  /* parser/parser.nit:15902 */
+  fra.me.REG[3] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:15908 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10904 */
+  /* parser/parser.nit:15909 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10904);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15909);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30353,15 +43122,15 @@ void parser___ReduceAction256___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction257___action[] = "parser::ReduceAction257::(parser::ReduceAction::action)";
-void parser___ReduceAction257___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction377___action[] = "parser::ReduceAction377::(parser::ReduceAction::action)";
+void parser___ReduceAction377___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10909;
-  fra.me.meth = LOCATE_parser___ReduceAction257___action;
+  fra.me.line = 15914;
+  fra.me.meth = LOCATE_parser___ReduceAction377___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -30373,41 +43142,41 @@ void parser___ReduceAction257___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:10911 */
+  /* parser/parser.nit:15916 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10912 */
+  /* parser/parser.nit:15917 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10913 */
+  /* parser/parser.nit:15918 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10914 */
+  /* parser/parser.nit:15919 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10916 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:15921 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10916);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15921);
   }
-  /* parser/parser.nit:10918 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:15923 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10918);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15923);
   }
-  /* parser/parser.nit:10920 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
+  /* parser/parser.nit:15925 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10920);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15925);
   }
-  /* parser/parser.nit:10921 */
-  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:10926 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10927 */
+  /* parser/parser.nit:15926 */
+  fra.me.REG[4] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[5], fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
+  /* parser/parser.nit:15932 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:15933 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10927);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15933);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30415,35 +43184,61 @@ void parser___ReduceAction257___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction258___action[] = "parser::ReduceAction258::(parser::ReduceAction::action)";
-void parser___ReduceAction258___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction378___action[] = "parser::ReduceAction378::(parser::ReduceAction::action)";
+void parser___ReduceAction378___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10932;
-  fra.me.meth = LOCATE_parser___ReduceAction258___action;
+  fra.me.line = 15938;
+  fra.me.meth = LOCATE_parser___ReduceAction378___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:10934 */
+  /* parser/parser.nit:15940 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10935 */
-  fra.me.REG[3] = NEW_APublicVisibility_parser___parser_prod___APublicVisibility___init_apublicvisibility();
-  /* parser/parser.nit:10936 */
+  /* parser/parser.nit:15941 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15942 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15943 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15945 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15945);
+  }
+  /* parser/parser.nit:15947 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15947);
+  }
+  /* parser/parser.nit:15949 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TDotdotdot, ID_parser___parser_nodes___TDotdotdot)) /*cast nullable TDotdotdot*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15949);
+  }
+  /* parser/parser.nit:15950 */
+  fra.me.REG[3] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:15956 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10937 */
+  /* parser/parser.nit:15957 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10937);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15957);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30451,45 +43246,70 @@ void parser___ReduceAction258___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction259___action[] = "parser::ReduceAction259::(parser::ReduceAction::action)";
-void parser___ReduceAction259___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction379___action[] = "parser::ReduceAction379::(parser::ReduceAction::action)";
+void parser___ReduceAction379___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 = 10942;
-  fra.me.meth = LOCATE_parser___ReduceAction259___action;
+  fra.me.line = 15962;
+  fra.me.meth = LOCATE_parser___ReduceAction379___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:10944 */
+  /* parser/parser.nit:15964 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10945 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10946 */
+  /* parser/parser.nit:15965 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10948 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwprivate, ID_parser___parser_nodes___TKwprivate)) /*cast nullable TKwprivate*/;
+  /* parser/parser.nit:15966 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15967 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15968 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:15970 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10948);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15970);
   }
-  /* parser/parser.nit:10949 */
-  fra.me.REG[3] = NEW_APrivateVisibility_parser___parser_prod___APrivateVisibility___init_aprivatevisibility(fra.me.REG[3]);
-  /* parser/parser.nit:10952 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10953 */
+  /* parser/parser.nit:15972 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15972);
+  }
+  /* parser/parser.nit:15974 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TDotdotdot, ID_parser___parser_nodes___TDotdotdot)) /*cast nullable TDotdotdot*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15974);
+  }
+  /* parser/parser.nit:15976 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15976);
+  }
+  /* parser/parser.nit:15977 */
+  fra.me.REG[5] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser.nit:15983 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:15984 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10953);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15984);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30497,45 +43317,47 @@ void parser___ReduceAction259___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction260___action[] = "parser::ReduceAction260::(parser::ReduceAction::action)";
-void parser___ReduceAction260___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction380___action[] = "parser::ReduceAction380::(parser::ReduceAction::action)";
+void parser___ReduceAction380___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10958;
-  fra.me.meth = LOCATE_parser___ReduceAction260___action;
+  fra.me.line = 15989;
+  fra.me.meth = LOCATE_parser___ReduceAction380___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:10960 */
+  /* parser/parser.nit:15991 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10961 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10962 */
+  /* parser/parser.nit:15992 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10964 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwprotected, ID_parser___parser_nodes___TKwprotected)) /*cast nullable TKwprotected*/;
+  /* parser/parser.nit:15993 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:15995 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10964);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 15995);
   }
-  /* parser/parser.nit:10965 */
-  fra.me.REG[3] = NEW_AProtectedVisibility_parser___parser_prod___AProtectedVisibility___init_aprotectedvisibility(fra.me.REG[3]);
-  /* parser/parser.nit:10968 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10969 */
+  /* parser/parser.nit:15996 */
+  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:15997 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:15998 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10969);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15998);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30543,89 +43365,63 @@ void parser___ReduceAction260___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction261___action[] = "parser::ReduceAction261::(parser::ReduceAction::action)";
-void parser___ReduceAction261___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction381___action[] = "parser::ReduceAction381::(parser::ReduceAction::action)";
+void parser___ReduceAction381___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 = 10974;
-  fra.me.meth = LOCATE_parser___ReduceAction261___action;
+  fra.me.line = 16003;
+  fra.me.meth = LOCATE_parser___ReduceAction381___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:10976 */
+  /* parser/parser.nit:16005 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10977 */
+  /* parser/parser.nit:16006 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10978 */
+  /* parser/parser.nit:16007 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10980 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwintrude, ID_parser___parser_nodes___TKwintrude)) /*cast nullable TKwintrude*/;
+  /* parser/parser.nit:16008 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16009 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16011 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10980);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16011);
   }
-  /* parser/parser.nit:10981 */
-  fra.me.REG[3] = NEW_AIntrudeVisibility_parser___parser_prod___AIntrudeVisibility___init_aintrudevisibility(fra.me.REG[3]);
-  /* parser/parser.nit:10984 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:10985 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:16013 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10985);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16013);
   }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction262___action[] = "parser::ReduceAction262::(parser::ReduceAction::action)";
-void parser___ReduceAction262___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10990;
-  fra.me.meth = LOCATE_parser___ReduceAction262___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser.nit:10992 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:10993 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:10995 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:16015 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10995);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16015);
   }
-  /* parser/parser.nit:10996 */
-  fra.me.REG[3] = NEW_AIdMethid_parser___parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
-  /* parser/parser.nit:10999 */
+  /* parser/parser.nit:16016 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:16023 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11000 */
+  /* parser/parser.nit:16024 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11000);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16024);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30633,87 +43429,72 @@ void parser___ReduceAction262___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction263___action[] = "parser::ReduceAction263::(parser::ReduceAction::action)";
-void parser___ReduceAction263___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction382___action[] = "parser::ReduceAction382::(parser::ReduceAction::action)";
+void parser___ReduceAction382___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11005;
-  fra.me.meth = LOCATE_parser___ReduceAction263___action;
+  fra.me.line = 16029;
+  fra.me.meth = LOCATE_parser___ReduceAction382___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11007 */
+  /* parser/parser.nit:16031 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11008 */
+  /* parser/parser.nit:16032 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11010 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TPlus, ID_parser___parser_nodes___TPlus)) /*cast nullable TPlus*/;
+  /* parser/parser.nit:16033 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16034 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16035 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16036 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16038 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11010);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16038);
   }
-  /* parser/parser.nit:11011 */
-  fra.me.REG[3] = NEW_APlusMethid_parser___parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
-  /* parser/parser.nit:11014 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11015 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:16040 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11015);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16040);
   }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction264___action[] = "parser::ReduceAction264::(parser::ReduceAction::action)";
-void parser___ReduceAction264___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11020;
-  fra.me.meth = LOCATE_parser___ReduceAction264___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser.nit:11022 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11023 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11025 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TMinus, ID_parser___parser_nodes___TMinus)) /*cast nullable TMinus*/;
+  /* parser/parser.nit:16042 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11025);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16042);
   }
-  /* parser/parser.nit:11026 */
-  fra.me.REG[3] = NEW_AMinusMethid_parser___parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
-  /* parser/parser.nit:11029 */
+  /* parser/parser.nit:16044 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16044);
+  }
+  /* parser/parser.nit:16045 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:16052 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11030 */
+  /* parser/parser.nit:16053 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11030);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16053);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30721,43 +43502,74 @@ void parser___ReduceAction264___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction265___action[] = "parser::ReduceAction265::(parser::ReduceAction::action)";
-void parser___ReduceAction265___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction383___action[] = "parser::ReduceAction383::(parser::ReduceAction::action)";
+void parser___ReduceAction383___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 = 11035;
-  fra.me.meth = LOCATE_parser___ReduceAction265___action;
+  fra.me.line = 16058;
+  fra.me.meth = LOCATE_parser___ReduceAction383___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11037 */
+  /* parser/parser.nit:16060 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11038 */
+  /* parser/parser.nit:16061 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11040 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TStar, ID_parser___parser_nodes___TStar)) /*cast nullable TStar*/;
+  /* parser/parser.nit:16062 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16063 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16064 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16065 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16066 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16068 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11040);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16068);
   }
-  /* parser/parser.nit:11041 */
-  fra.me.REG[3] = NEW_AStarMethid_parser___parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
-  /* parser/parser.nit:11044 */
+  /* parser/parser.nit:16070 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16070);
+  }
+  /* parser/parser.nit:16072 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16072);
+  }
+  /* parser/parser.nit:16074 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16074);
+  }
+  /* parser/parser.nit:16075 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:16082 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11045 */
+  /* parser/parser.nit:16083 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11045);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16083);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30765,43 +43577,83 @@ void parser___ReduceAction265___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction266___action[] = "parser::ReduceAction266::(parser::ReduceAction::action)";
-void parser___ReduceAction266___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction384___action[] = "parser::ReduceAction384::(parser::ReduceAction::action)";
+void parser___ReduceAction384___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11050;
-  fra.me.meth = LOCATE_parser___ReduceAction266___action;
+  fra.me.line = 16088;
+  fra.me.meth = LOCATE_parser___ReduceAction384___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11052 */
+  /* parser/parser.nit:16090 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11053 */
+  /* parser/parser.nit:16091 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11055 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TSlash, ID_parser___parser_nodes___TSlash)) /*cast nullable TSlash*/;
+  /* parser/parser.nit:16092 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16093 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16094 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16095 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16096 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16097 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16099 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11055);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16099);
   }
-  /* parser/parser.nit:11056 */
-  fra.me.REG[3] = NEW_ASlashMethid_parser___parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
-  /* parser/parser.nit:11059 */
+  /* parser/parser.nit:16101 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16101);
+  }
+  /* parser/parser.nit:16103 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16103);
+  }
+  /* parser/parser.nit:16105 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16105);
+  }
+  /* parser/parser.nit:16107 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16107);
+  }
+  /* parser/parser.nit:16108 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:16115 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11060 */
+  /* parser/parser.nit:16116 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11060);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16116);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30809,43 +43661,76 @@ void parser___ReduceAction266___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction267___action[] = "parser::ReduceAction267::(parser::ReduceAction::action)";
-void parser___ReduceAction267___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction385___action[] = "parser::ReduceAction385::(parser::ReduceAction::action)";
+void parser___ReduceAction385___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11065;
-  fra.me.meth = LOCATE_parser___ReduceAction267___action;
+  fra.me.line = 16121;
+  fra.me.meth = LOCATE_parser___ReduceAction385___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11067 */
+  /* parser/parser.nit:16123 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11068 */
+  /* parser/parser.nit:16124 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11070 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TPercent, ID_parser___parser_nodes___TPercent)) /*cast nullable TPercent*/;
+  /* parser/parser.nit:16125 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16126 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16127 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16128 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16129 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16130 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16132 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11070);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16132);
   }
-  /* parser/parser.nit:11071 */
-  fra.me.REG[3] = NEW_APercentMethid_parser___parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
-  /* parser/parser.nit:11074 */
+  /* parser/parser.nit:16134 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16134);
+  }
+  /* parser/parser.nit:16136 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16136);
+  }
+  /* parser/parser.nit:16138 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16138);
+  }
+  /* parser/parser.nit:16139 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:16146 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11075 */
+  /* parser/parser.nit:16147 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11075);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16147);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30853,43 +43738,85 @@ void parser___ReduceAction267___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction268___action[] = "parser::ReduceAction268::(parser::ReduceAction::action)";
-void parser___ReduceAction268___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction386___action[] = "parser::ReduceAction386::(parser::ReduceAction::action)";
+void parser___ReduceAction386___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11080;
-  fra.me.meth = LOCATE_parser___ReduceAction268___action;
+  fra.me.line = 16152;
+  fra.me.meth = LOCATE_parser___ReduceAction386___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11082 */
+  /* parser/parser.nit:16154 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11083 */
+  /* parser/parser.nit:16155 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11085 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TEq, ID_parser___parser_nodes___TEq)) /*cast nullable TEq*/;
+  /* parser/parser.nit:16156 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16157 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16158 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16159 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16160 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16161 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16162 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16164 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11085);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16164);
   }
-  /* parser/parser.nit:11086 */
-  fra.me.REG[3] = NEW_AEqMethid_parser___parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
-  /* parser/parser.nit:11089 */
+  /* parser/parser.nit:16166 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16166);
+  }
+  /* parser/parser.nit:16168 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16168);
+  }
+  /* parser/parser.nit:16170 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16170);
+  }
+  /* parser/parser.nit:16172 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16172);
+  }
+  /* parser/parser.nit:16173 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:16180 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11090 */
+  /* parser/parser.nit:16181 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11090);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16181);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30897,15 +43824,15 @@ void parser___ReduceAction268___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction269___action[] = "parser::ReduceAction269::(parser::ReduceAction::action)";
-void parser___ReduceAction269___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction387___action[] = "parser::ReduceAction387::(parser::ReduceAction::action)";
+void parser___ReduceAction387___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11095;
-  fra.me.meth = LOCATE_parser___ReduceAction269___action;
+  fra.me.line = 16186;
+  fra.me.meth = LOCATE_parser___ReduceAction387___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -30915,25 +43842,25 @@ void parser___ReduceAction269___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11097 */
+  /* parser/parser.nit:16188 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11098 */
+  /* parser/parser.nit:16189 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11100 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TNe, ID_parser___parser_nodes___TNe)) /*cast nullable TNe*/;
+  /* parser/parser.nit:16191 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11100);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16191);
   }
-  /* parser/parser.nit:11101 */
-  fra.me.REG[3] = NEW_ANeMethid_parser___parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
-  /* parser/parser.nit:11104 */
+  /* parser/parser.nit:16192 */
+  fra.me.REG[3] = NEW_AReturnExpr_parser___parser_prod___AReturnExpr___init_areturnexpr(NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:16196 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11105 */
+  /* parser/parser.nit:16197 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11105);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16197);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30941,43 +43868,76 @@ void parser___ReduceAction269___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction270___action[] = "parser::ReduceAction270::(parser::ReduceAction::action)";
-void parser___ReduceAction270___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction388___action[] = "parser::ReduceAction388::(parser::ReduceAction::action)";
+void parser___ReduceAction388___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 = 11110;
-  fra.me.meth = LOCATE_parser___ReduceAction270___action;
+  fra.me.line = 16202;
+  fra.me.meth = LOCATE_parser___ReduceAction388___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11112 */
+  /* parser/parser.nit:16204 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11113 */
+  /* parser/parser.nit:16205 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11115 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TLe, ID_parser___parser_nodes___TLe)) /*cast nullable TLe*/;
+  /* parser/parser.nit:16206 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16207 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16208 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:16210 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11115);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16210);
   }
-  /* parser/parser.nit:11116 */
-  fra.me.REG[3] = NEW_ALeMethid_parser___parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
-  /* parser/parser.nit:11119 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11120 */
+  /* parser/parser.nit:16212 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCall, ID_parser___parser_nodes___AExternCall)) /*cast nullable AExternCall*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16212);
+  }
+  /* parser/parser.nit:16213 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:16214 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:16216 */
+  fra.me.REG[5] = NEW_AExternCalls_parser___parser_prod___AExternCalls___init_aexterncalls(fra.me.REG[4], fra.me.REG[5]);
+  /* parser/parser.nit:16220 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:16221 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11120);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16221);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -30985,43 +43945,88 @@ void parser___ReduceAction270___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction271___action[] = "parser::ReduceAction271::(parser::ReduceAction::action)";
-void parser___ReduceAction271___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction389___action[] = "parser::ReduceAction389::(parser::ReduceAction::action)";
+void parser___ReduceAction389___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 = 11125;
-  fra.me.meth = LOCATE_parser___ReduceAction271___action;
+  fra.me.line = 16226;
+  fra.me.meth = LOCATE_parser___ReduceAction389___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11127 */
+  /* parser/parser.nit:16228 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11128 */
+  /* parser/parser.nit:16229 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11130 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TGe, ID_parser___parser_nodes___TGe)) /*cast nullable TGe*/;
+  /* parser/parser.nit:16230 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16231 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16232 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16233 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:16235 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11130);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16235);
   }
-  /* parser/parser.nit:11131 */
-  fra.me.REG[3] = NEW_AGeMethid_parser___parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
-  /* parser/parser.nit:11134 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11135 */
+  /* parser/parser.nit:16237 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCall, ID_parser___parser_nodes___AExternCall)) /*cast nullable AExternCall*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16237);
+  }
+  /* parser/parser.nit:16239 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16239);
+  }
+  /* parser/parser.nit:16240 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:16241 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:16243 */
+  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:16244 */
+  fra.me.REG[6] = NEW_AExternCalls_parser___parser_prod___AExternCalls___init_aexterncalls(fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:16248 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:16249 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11135);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16249);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31029,43 +44034,40 @@ void parser___ReduceAction271___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction272___action[] = "parser::ReduceAction272::(parser::ReduceAction::action)";
-void parser___ReduceAction272___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction390___action[] = "parser::ReduceAction390::(parser::ReduceAction::action)";
+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 = 11140;
-  fra.me.meth = LOCATE_parser___ReduceAction272___action;
+  fra.me.line = 16254;
+  fra.me.meth = LOCATE_parser___ReduceAction390___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11142 */
+  /* parser/parser.nit:16256 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11143 */
+  /* parser/parser.nit:16257 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11145 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TLt, ID_parser___parser_nodes___TLt)) /*cast nullable TLt*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11145);
-  }
-  /* parser/parser.nit:11146 */
-  fra.me.REG[3] = NEW_ALtMethid_parser___parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
-  /* parser/parser.nit:11149 */
+  /* parser/parser.nit:16258 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16259 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16261 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11150 */
+  /* parser/parser.nit:16262 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11150);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16262);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31073,15 +44075,15 @@ void parser___ReduceAction272___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction273___action[] = "parser::ReduceAction273::(parser::ReduceAction::action)";
-void parser___ReduceAction273___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction391___action[] = "parser::ReduceAction391::(parser::ReduceAction::action)";
+void parser___ReduceAction391___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11155;
-  fra.me.meth = LOCATE_parser___ReduceAction273___action;
+  fra.me.line = 16267;
+  fra.me.meth = LOCATE_parser___ReduceAction391___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -31091,25 +44093,17 @@ void parser___ReduceAction273___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11157 */
+  /* parser/parser.nit:16269 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11158 */
+  /* parser/parser.nit:16270 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11160 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TGt, ID_parser___parser_nodes___TGt)) /*cast nullable TGt*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11160);
-  }
-  /* parser/parser.nit:11161 */
-  fra.me.REG[3] = NEW_AGtMethid_parser___parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
-  /* parser/parser.nit:11164 */
+  /* parser/parser.nit:16272 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11165 */
+  /* parser/parser.nit:16273 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11165);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16273);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31117,15 +44111,15 @@ void parser___ReduceAction273___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction274___action[] = "parser::ReduceAction274::(parser::ReduceAction::action)";
-void parser___ReduceAction274___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction393___action[] = "parser::ReduceAction393::(parser::ReduceAction::action)";
+void parser___ReduceAction393___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11170;
-  fra.me.meth = LOCATE_parser___ReduceAction274___action;
+  fra.me.line = 16278;
+  fra.me.meth = LOCATE_parser___ReduceAction393___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -31135,25 +44129,25 @@ void parser___ReduceAction274___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11172 */
+  /* parser/parser.nit:16280 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11173 */
+  /* parser/parser.nit:16281 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11175 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TLl, ID_parser___parser_nodes___TLl)) /*cast nullable TLl*/;
+  /* parser/parser.nit:16283 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11175);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16283);
   }
-  /* parser/parser.nit:11176 */
-  fra.me.REG[3] = NEW_ALlMethid_parser___parser_prod___ALlMethid___init_allmethid(fra.me.REG[3]);
-  /* parser/parser.nit:11179 */
+  /* parser/parser.nit:16284 */
+  fra.me.REG[3] = NEW_ASuperExternCall_parser___parser_prod___ASuperExternCall___init_asuperexterncall(fra.me.REG[3]);
+  /* parser/parser.nit:16287 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11180 */
+  /* parser/parser.nit:16288 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11180);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16288);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31161,15 +44155,15 @@ void parser___ReduceAction274___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction275___action[] = "parser::ReduceAction275::(parser::ReduceAction::action)";
-void parser___ReduceAction275___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction394___action[] = "parser::ReduceAction394::(parser::ReduceAction::action)";
+void parser___ReduceAction394___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11185;
-  fra.me.meth = LOCATE_parser___ReduceAction275___action;
+  fra.me.line = 16293;
+  fra.me.meth = LOCATE_parser___ReduceAction394___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -31179,25 +44173,25 @@ void parser___ReduceAction275___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:11187 */
+  /* parser/parser.nit:16295 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11188 */
+  /* parser/parser.nit:16296 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11190 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TGg, ID_parser___parser_nodes___TGg)) /*cast nullable TGg*/;
+  /* parser/parser.nit:16298 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11190);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16298);
   }
-  /* parser/parser.nit:11191 */
-  fra.me.REG[3] = NEW_AGgMethid_parser___parser_prod___AGgMethid___init_aggmethid(fra.me.REG[3]);
-  /* parser/parser.nit:11194 */
+  /* parser/parser.nit:16299 */
+  fra.me.REG[3] = NEW_ALocalPropExternCall_parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall(fra.me.REG[3]);
+  /* parser/parser.nit:16302 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11195 */
+  /* parser/parser.nit:16303 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11195);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16303);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31205,52 +44199,61 @@ void parser___ReduceAction275___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction276___action[] = "parser::ReduceAction276::(parser::ReduceAction::action)";
-void parser___ReduceAction276___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction395___action[] = "parser::ReduceAction395::(parser::ReduceAction::action)";
+void parser___ReduceAction395___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11200;
-  fra.me.meth = LOCATE_parser___ReduceAction276___action;
+  fra.me.line = 16308;
+  fra.me.meth = LOCATE_parser___ReduceAction395___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11202 */
+  /* parser/parser.nit:16310 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11203 */
+  /* parser/parser.nit:16311 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11204 */
+  /* parser/parser.nit:16312 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11206 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
+  /* parser/parser.nit:16313 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16315 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11206);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16315);
   }
-  /* parser/parser.nit:11208 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast nullable TCbra*/;
+  /* parser/parser.nit:16317 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast nullable TQuad*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11208);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16317);
   }
-  /* parser/parser.nit:11209 */
-  fra.me.REG[3] = NEW_ABraMethid_parser___parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:11213 */
+  /* parser/parser.nit:16319 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16319);
+  }
+  /* parser/parser.nit:16320 */
+  fra.me.REG[3] = NEW_AFullPropExternCall_parser___parser_prod___AFullPropExternCall___init_afullpropexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:16325 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11214 */
+  /* parser/parser.nit:16326 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11214);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16326);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31258,15 +44261,15 @@ void parser___ReduceAction276___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction277___action[] = "parser::ReduceAction277::(parser::ReduceAction::action)";
-void parser___ReduceAction277___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction396___action[] = "parser::ReduceAction396::(parser::ReduceAction::action)";
+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 = 11219;
-  fra.me.meth = LOCATE_parser___ReduceAction277___action;
+  fra.me.line = 16331;
+  fra.me.meth = LOCATE_parser___ReduceAction396___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -31276,25 +44279,25 @@ void parser___ReduceAction277___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:11221 */
+  /* parser/parser.nit:16333 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11222 */
+  /* parser/parser.nit:16334 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11224 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TStarship, ID_parser___parser_nodes___TStarship)) /*cast nullable TStarship*/;
+  /* parser/parser.nit:16336 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11224);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16336);
   }
-  /* parser/parser.nit:11225 */
-  fra.me.REG[3] = NEW_AStarshipMethid_parser___parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
-  /* parser/parser.nit:11228 */
+  /* parser/parser.nit:16337 */
+  fra.me.REG[3] = NEW_AInitPropExternCall_parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall(fra.me.REG[3]);
+  /* parser/parser.nit:16340 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11229 */
+  /* parser/parser.nit:16341 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11229);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16341);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31302,52 +44305,71 @@ void parser___ReduceAction277___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction278___action[] = "parser::ReduceAction278::(parser::ReduceAction::action)";
-void parser___ReduceAction278___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction397___action[] = "parser::ReduceAction397::(parser::ReduceAction::action)";
+void parser___ReduceAction397___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 = 11234;
-  fra.me.meth = LOCATE_parser___ReduceAction278___action;
+  fra.me.line = 16346;
+  fra.me.meth = LOCATE_parser___ReduceAction397___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11236 */
+  /* parser/parser.nit:16348 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11237 */
+  /* parser/parser.nit:16349 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11238 */
+  /* parser/parser.nit:16350 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16351 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16352 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11240 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:16353 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16354 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16355 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16356 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16358 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11240);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16358);
   }
-  /* parser/parser.nit:11242 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
+  /* parser/parser.nit:16360 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11242);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16360);
   }
-  /* parser/parser.nit:11243 */
-  fra.me.REG[3] = NEW_AAssignMethid_parser___parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:11247 */
+  /* parser/parser.nit:16362 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16362);
+  }
+  /* parser/parser.nit:16363 */
+  fra.me.REG[3] = NEW_ACastAsExternCall_parser___parser_prod___ACastAsExternCall___init_acastasexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:16368 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11248 */
+  /* parser/parser.nit:16369 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11248);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16369);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31355,15 +44377,15 @@ void parser___ReduceAction278___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction279___action[] = "parser::ReduceAction279::(parser::ReduceAction::action)";
-void parser___ReduceAction279___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction398___action[] = "parser::ReduceAction398::(parser::ReduceAction::action)";
+void parser___ReduceAction398___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11253;
-  fra.me.meth = LOCATE_parser___ReduceAction279___action;
+  fra.me.line = 16374;
+  fra.me.meth = LOCATE_parser___ReduceAction398___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -31375,41 +44397,43 @@ 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:11255 */
+  /* parser/parser.nit:16376 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11256 */
+  /* parser/parser.nit:16377 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11257 */
+  /* parser/parser.nit:16378 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11258 */
+  /* parser/parser.nit:16379 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16380 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11260 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
+  /* parser/parser.nit:16382 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11260);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16382);
   }
-  /* parser/parser.nit:11262 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast nullable TCbra*/;
+  /* parser/parser.nit:16384 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11262);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16384);
   }
-  /* parser/parser.nit:11264 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
+  /* parser/parser.nit:16386 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11264);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16386);
   }
-  /* parser/parser.nit:11265 */
-  fra.me.REG[3] = NEW_ABraassignMethid_parser___parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:11270 */
+  /* parser/parser.nit:16387 */
+  fra.me.REG[3] = NEW_AAsNullableExternCall_parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:16392 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11271 */
+  /* parser/parser.nit:16393 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11271);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16393);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31417,17 +44441,17 @@ void parser___ReduceAction279___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction280___action[] = "parser::ReduceAction280::(parser::ReduceAction::action)";
-void parser___ReduceAction280___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction399___action[] = "parser::ReduceAction399::(parser::ReduceAction::action)";
+void parser___ReduceAction399___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 = 11276;
-  fra.me.meth = LOCATE_parser___ReduceAction280___action;
+  fra.me.line = 16398;
+  fra.me.meth = LOCATE_parser___ReduceAction399___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -31436,52 +44460,55 @@ void parser___ReduceAction280___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11278 */
+  /* parser/parser.nit:16400 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11279 */
+  /* parser/parser.nit:16401 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11280 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11281 */
+  /* parser/parser.nit:16402 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11282 */
+  /* parser/parser.nit:16403 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16404 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11283 */
+  /* parser/parser.nit:16405 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11284 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11285 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11287 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
+  /* parser/parser.nit:16406 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16408 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11287);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16408);
   }
-  /* parser/parser.nit:11289 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  /* parser/parser.nit:16410 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11289);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16410);
   }
-  /* parser/parser.nit:11291 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:16412 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast nullable TKwnot*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11291);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16412);
   }
-  /* parser/parser.nit:11292 */
-  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[7]);
-  /* parser/parser.nit:11299 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:11300 */
+  /* parser/parser.nit:16414 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16414);
+  }
+  /* parser/parser.nit:16415 */
+  fra.me.REG[3] = NEW_AAsNotNullableExternCall_parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:16421 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:16422 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11300);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16422);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31489,83 +44516,96 @@ void parser___ReduceAction280___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction281___action[] = "parser::ReduceAction281::(parser::ReduceAction::action)";
-void parser___ReduceAction281___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction400___action[] = "parser::ReduceAction400::(parser::ReduceAction::action)";
+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 = 11305;
-  fra.me.meth = LOCATE_parser___ReduceAction281___action;
+  fra.me.line = 16427;
+  fra.me.meth = LOCATE_parser___ReduceAction400___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:11307 */
+  /* parser/parser.nit:16429 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11308 */
+  /* parser/parser.nit:16430 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11309 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11310 */
+  /* parser/parser.nit:16431 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11311 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11312 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11313 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11314 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11315 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11317 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
+  /* parser/parser.nit:16433 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwin, ID_parser___parser_nodes___TKwin)) /*cast nullable TKwin*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11317);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16433);
   }
-  /* parser/parser.nit:11319 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:16435 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11319);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16435);
   }
-  /* parser/parser.nit:11320 */
-  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:11322 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  /* parser/parser.nit:16436 */
+  fra.me.REG[3] = NEW_AInLanguage_parser___parser_prod___AInLanguage___init_ainlanguage(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:16440 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:16441 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11322);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16441);
   }
-  /* parser/parser.nit:11324 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction401___action[] = "parser::ReduceAction401::(parser::ReduceAction::action)";
+void parser___ReduceAction401___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 16446;
+  fra.me.meth = LOCATE_parser___ReduceAction401___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:16448 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:16449 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16451 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TExternCodeSegment, ID_parser___parser_nodes___TExternCodeSegment)) /*cast nullable TExternCodeSegment*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11324);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16451);
   }
-  /* parser/parser.nit:11325 */
-  fra.me.REG[8] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[8]);
-  /* parser/parser.nit:11332 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:11333 */
+  /* parser/parser.nit:16452 */
+  fra.me.REG[3] = NEW_AExternCodeBlock_parser___parser_prod___AExternCodeBlock___init_aexterncodeblock(NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:16456 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:16457 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11333);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16457);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31573,83 +44613,52 @@ void parser___ReduceAction281___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction282___action[] = "parser::ReduceAction282::(parser::ReduceAction::action)";
-void parser___ReduceAction282___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction402___action[] = "parser::ReduceAction402::(parser::ReduceAction::action)";
+void parser___ReduceAction402___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11338;
-  fra.me.meth = LOCATE_parser___ReduceAction282___action;
+  fra.me.line = 16462;
+  fra.me.meth = LOCATE_parser___ReduceAction402___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:11340 */
+  /* parser/parser.nit:16464 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11341 */
+  /* parser/parser.nit:16465 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11342 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11343 */
+  /* parser/parser.nit:16466 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11344 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11345 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11346 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11347 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11348 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11350 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11350);
-  }
-  /* parser/parser.nit:11352 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11352);
-  }
-  /* parser/parser.nit:11354 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11354);
-  }
-  /* parser/parser.nit:11356 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:16468 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AInLanguage, ID_parser___parser_nodes___AInLanguage)) /*cast nullable AInLanguage*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11356);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16468);
   }
-  /* parser/parser.nit:11357 */
-  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:11358 */
-  fra.me.REG[8] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[7], fra.me.REG[5], fra.me.REG[4], fra.me.REG[8]);
-  /* parser/parser.nit:11365 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:11366 */
+  /* parser/parser.nit:16470 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TExternCodeSegment, ID_parser___parser_nodes___TExternCodeSegment)) /*cast nullable TExternCodeSegment*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16470);
+  }
+  /* parser/parser.nit:16471 */
+  fra.me.REG[3] = NEW_AExternCodeBlock_parser___parser_prod___AExternCodeBlock___init_aexterncodeblock(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:16475 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:16476 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11366);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16476);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31657,95 +44666,38 @@ void parser___ReduceAction282___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction283___action[] = "parser::ReduceAction283::(parser::ReduceAction::action)";
-void parser___ReduceAction283___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction403___action[] = "parser::ReduceAction403::(parser::ReduceAction::action)";
+void parser___ReduceAction403___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11371;
-  fra.me.meth = LOCATE_parser___ReduceAction283___action;
+  fra.me.line = 16481;
+  fra.me.meth = LOCATE_parser___ReduceAction403___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[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:11373 */
+  /* parser/parser.nit:16483 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11374 */
+  /* parser/parser.nit:16484 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11375 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11376 */
+  /* parser/parser.nit:16485 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11377 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11378 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11379 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11380 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11381 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11382 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11384 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11384);
-  }
-  /* parser/parser.nit:11386 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11386);
-  }
-  /* parser/parser.nit:11387 */
-  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:11389 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11389);
-  }
-  /* parser/parser.nit:11391 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11391);
-  }
-  /* parser/parser.nit:11393 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11393);
-  }
-  /* parser/parser.nit:11394 */
-  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:11395 */
-  fra.me.REG[9] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[7], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[9]);
-  /* parser/parser.nit:11402 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* parser/parser.nit:11403 */
+  /* parser/parser.nit:16487 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:16488 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11403);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16488);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31753,62 +44705,46 @@ void parser___ReduceAction283___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction284___action[] = "parser::ReduceAction284::(parser::ReduceAction::action)";
-void parser___ReduceAction284___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction404___action[] = "parser::ReduceAction404::(parser::ReduceAction::action)";
+void parser___ReduceAction404___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11408;
-  fra.me.meth = LOCATE_parser___ReduceAction284___action;
+  fra.me.line = 16493;
+  fra.me.meth = LOCATE_parser___ReduceAction404___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11410 */
+  /* parser/parser.nit:16495 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11411 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11412 */
+  /* parser/parser.nit:16496 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11413 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11414 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11415 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11416 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11418 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11418);
-  }
-  /* parser/parser.nit:11420 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  /* parser/parser.nit:16497 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:16499 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11420);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16499);
   }
-  /* parser/parser.nit:11421 */
-  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3], NIT_NULL, fra.me.REG[6]);
-  /* parser/parser.nit:11428 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* parser/parser.nit:11429 */
+  /* parser/parser.nit:16500 */
+  fra.me.REG[4] = NEW_AType_parser___parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[3], fra.me.REG[4], NIT_NULL);
+  /* parser/parser.nit:16506 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:16507 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11429);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16507);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31816,17 +44752,17 @@ void parser___ReduceAction284___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction285___action[] = "parser::ReduceAction285::(parser::ReduceAction::action)";
-void parser___ReduceAction285___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction405___action[] = "parser::ReduceAction405::(parser::ReduceAction::action)";
+void parser___ReduceAction405___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 = 11434;
-  fra.me.meth = LOCATE_parser___ReduceAction285___action;
+  fra.me.line = 16512;
+  fra.me.meth = LOCATE_parser___ReduceAction405___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -31834,56 +44770,37 @@ void parser___ReduceAction285___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = 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:11436 */
+  /* parser/parser.nit:16514 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11437 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11438 */
+  /* parser/parser.nit:16515 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11439 */
+  /* parser/parser.nit:16516 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11440 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11441 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11442 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11443 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11445 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11445);
-  }
-  /* parser/parser.nit:11447 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:16517 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:16519 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11447);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16519);
   }
-  /* parser/parser.nit:11448 */
-  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:11450 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  /* parser/parser.nit:16521 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11450);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16521);
   }
-  /* parser/parser.nit:11451 */
-  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3], NIT_NULL, fra.me.REG[7]);
-  /* parser/parser.nit:11458 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:11459 */
+  /* parser/parser.nit:16522 */
+  fra.me.REG[5] = NEW_AType_parser___parser_prod___AType___init_atype(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5], NIT_NULL);
+  /* parser/parser.nit:16528 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:16529 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11459);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16529);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31891,17 +44808,17 @@ void parser___ReduceAction285___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction286___action[] = "parser::ReduceAction286::(parser::ReduceAction::action)";
-void parser___ReduceAction286___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction406___action[] = "parser::ReduceAction406::(parser::ReduceAction::action)";
+void parser___ReduceAction406___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 = 11464;
-  fra.me.meth = LOCATE_parser___ReduceAction286___action;
+  fra.me.line = 16534;
+  fra.me.meth = LOCATE_parser___ReduceAction406___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -31909,56 +44826,37 @@ void parser___ReduceAction286___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = 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:11466 */
+  /* parser/parser.nit:16536 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11467 */
+  /* parser/parser.nit:16537 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11468 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11469 */
+  /* parser/parser.nit:16538 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11470 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11471 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11472 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11473 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11475 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11475);
-  }
-  /* parser/parser.nit:11477 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  /* parser/parser.nit:16539 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:16541 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11477);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16541);
   }
-  /* parser/parser.nit:11479 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:16543 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11479);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16543);
   }
-  /* parser/parser.nit:11480 */
-  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:11481 */
-  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[6], fra.me.REG[4], NIT_NULL, fra.me.REG[7]);
-  /* parser/parser.nit:11488 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:11489 */
+  /* parser/parser.nit:16544 */
+  fra.me.REG[3] = NEW_AType_parser___parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[4], fra.me.REG[5], fra.me.REG[3]);
+  /* parser/parser.nit:16550 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:16551 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11489);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16551);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -31966,17 +44864,17 @@ void parser___ReduceAction286___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction287___action[] = "parser::ReduceAction287::(parser::ReduceAction::action)";
-void parser___ReduceAction287___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction407___action[] = "parser::ReduceAction407::(parser::ReduceAction::action)";
+void parser___ReduceAction407___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 = 11494;
-  fra.me.meth = LOCATE_parser___ReduceAction287___action;
+  fra.me.line = 16556;
+  fra.me.meth = LOCATE_parser___ReduceAction407___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -31985,67 +44883,45 @@ void parser___ReduceAction287___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:11496 */
+  /* parser/parser.nit:16558 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11497 */
+  /* parser/parser.nit:16559 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11498 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11499 */
+  /* parser/parser.nit:16560 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11500 */
+  /* parser/parser.nit:16561 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11501 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11502 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11503 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11504 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11506 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11506);
-  }
-  /* parser/parser.nit:11508 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:16562 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:16564 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11508);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16564);
   }
-  /* parser/parser.nit:11509 */
-  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:11511 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  /* parser/parser.nit:16566 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11511);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16566);
   }
-  /* parser/parser.nit:11513 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:16568 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11513);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16568);
   }
-  /* parser/parser.nit:11514 */
-  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:11515 */
-  fra.me.REG[8] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], NIT_NULL, fra.me.REG[8]);
-  /* parser/parser.nit:11522 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:11523 */
+  /* parser/parser.nit:16569 */
+  fra.me.REG[3] = NEW_AType_parser___parser_prod___AType___init_atype(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3]);
+  /* parser/parser.nit:16575 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:16576 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11523);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16576);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32053,15 +44929,15 @@ void parser___ReduceAction287___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction288___action[] = "parser::ReduceAction288::(parser::ReduceAction::action)";
-void parser___ReduceAction288___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction408___action[] = "parser::ReduceAction408::(parser::ReduceAction::action)";
+void parser___ReduceAction408___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 = 11528;
-  fra.me.meth = LOCATE_parser___ReduceAction288___action;
+  fra.me.line = 16581;
+  fra.me.meth = LOCATE_parser___ReduceAction408___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -32073,31 +44949,46 @@ 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:11530 */
+  /* parser/parser.nit:16583 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11531 */
+  /* parser/parser.nit:16584 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11532 */
+  /* parser/parser.nit:16585 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11533 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11534 */
+  /* parser/parser.nit:16586 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16587 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16588 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16589 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16590 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11536 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:16592 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11536);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16592);
   }
-  /* parser/parser.nit:11537 */
-  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser.nit:11544 */
+  /* parser/parser.nit:16594 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16594);
+  }
+  /* parser/parser.nit:16595 */
+  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:16596 */
+  fra.me.REG[5] = NEW_AType_parser___parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[4], fra.me.REG[5], NIT_NULL);
+  /* parser/parser.nit:16602 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:11545 */
+  /* parser/parser.nit:16603 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11545);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16603);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32105,15 +44996,15 @@ void parser___ReduceAction288___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction289___action[] = "parser::ReduceAction289::(parser::ReduceAction::action)";
-void parser___ReduceAction289___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction409___action[] = "parser::ReduceAction409::(parser::ReduceAction::action)";
+void parser___ReduceAction409___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 = 11550;
-  fra.me.meth = LOCATE_parser___ReduceAction289___action;
+  fra.me.line = 16608;
+  fra.me.meth = LOCATE_parser___ReduceAction409___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
@@ -32126,42 +45017,54 @@ void parser___ReduceAction289___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:11552 */
+  /* parser/parser.nit:16610 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11553 */
+  /* parser/parser.nit:16611 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16612 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16613 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11554 */
+  /* parser/parser.nit:16614 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11555 */
+  /* parser/parser.nit:16615 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11556 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11557 */
+  /* parser/parser.nit:16616 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16617 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16618 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11559 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:16620 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11559);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16620);
+  }
+  /* parser/parser.nit:16622 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16622);
   }
-  /* parser/parser.nit:11561 */
+  /* parser/parser.nit:16624 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11561);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16624);
   }
-  /* parser/parser.nit:11562 */
+  /* parser/parser.nit:16625 */
   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:11563 */
-  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[6]);
-  /* parser/parser.nit:11570 */
+  /* parser/parser.nit:16626 */
+  fra.me.REG[6] = NEW_AType_parser___parser_prod___AType___init_atype(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], NIT_NULL);
+  /* parser/parser.nit:16632 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* parser/parser.nit:11571 */
+  /* parser/parser.nit:16633 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11571);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16633);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32169,42 +45072,75 @@ void parser___ReduceAction289___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction290___action[] = "parser::ReduceAction290::(parser::ReduceAction::action)";
-void parser___ReduceAction290___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction410___action[] = "parser::ReduceAction410::(parser::ReduceAction::action)";
+void parser___ReduceAction410___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 = 11576;
-  fra.me.meth = LOCATE_parser___ReduceAction290___action;
+  fra.me.line = 16638;
+  fra.me.meth = LOCATE_parser___ReduceAction410___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11578 */
+  /* parser/parser.nit:16640 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11579 */
+  /* parser/parser.nit:16641 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11580 */
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11581 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11582 */
-  fra.me.REG[4] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL, fra.me.REG[4]);
-  /* parser/parser.nit:11589 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:11590 */
+  /* parser/parser.nit:16642 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16643 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16644 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16645 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16646 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16647 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16648 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:16650 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16650);
+  }
+  /* parser/parser.nit:16652 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16652);
+  }
+  /* parser/parser.nit:16653 */
+  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:16655 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16655);
+  }
+  /* parser/parser.nit:16656 */
+  fra.me.REG[3] = NEW_AType_parser___parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[5], fra.me.REG[6], fra.me.REG[3]);
+  /* parser/parser.nit:16662 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:16663 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11590);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16663);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32212,17 +45148,17 @@ void parser___ReduceAction290___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction291___action[] = "parser::ReduceAction291::(parser::ReduceAction::action)";
-void parser___ReduceAction291___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction411___action[] = "parser::ReduceAction411::(parser::ReduceAction::action)";
+void parser___ReduceAction411___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11595;
-  fra.me.meth = LOCATE_parser___ReduceAction291___action;
+  fra.me.line = 16668;
+  fra.me.meth = LOCATE_parser___ReduceAction411___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -32230,36 +45166,66 @@ void parser___ReduceAction291___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = 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:11597 */
+  /* parser/parser.nit:16670 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11598 */
+  /* parser/parser.nit:16671 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11599 */
+  /* parser/parser.nit:16672 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11600 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11601 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11603 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:16673 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16674 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16675 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16676 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16677 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16678 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16679 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:16681 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11603);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16681);
   }
-  /* parser/parser.nit:11604 */
-  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:11605 */
-  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[5]);
-  /* parser/parser.nit:11612 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:11613 */
+  /* parser/parser.nit:16683 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16683);
+  }
+  /* parser/parser.nit:16685 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16685);
+  }
+  /* parser/parser.nit:16686 */
+  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:16688 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16688);
+  }
+  /* parser/parser.nit:16689 */
+  fra.me.REG[3] = NEW_AType_parser___parser_prod___AType___init_atype(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3]);
+  /* parser/parser.nit:16695 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:16696 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11613);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16696);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32267,60 +45233,57 @@ void parser___ReduceAction291___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction292___action[] = "parser::ReduceAction292::(parser::ReduceAction::action)";
-void parser___ReduceAction292___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction412___action[] = "parser::ReduceAction412::(parser::ReduceAction::action)";
+void parser___ReduceAction412___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11618;
-  fra.me.meth = LOCATE_parser___ReduceAction292___action;
+  fra.me.line = 16701;
+  fra.me.meth = LOCATE_parser___ReduceAction412___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11620 */
+  /* parser/parser.nit:16703 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11621 */
+  /* parser/parser.nit:16704 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11622 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11623 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11624 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11625 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11627 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
+  /* parser/parser.nit:16705 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:16707 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11627);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* parser/parser.nit:11629 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11629);
+    /* parser/parser.nit:16708 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:11630 */
-  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3], NIT_NULL, fra.me.REG[6]);
-  /* parser/parser.nit:11637 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* parser/parser.nit:11638 */
+  /* parser/parser.nit:16710 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:16711 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11638);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16711);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32328,17 +45291,18 @@ void parser___ReduceAction292___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction293___action[] = "parser::ReduceAction293::(parser::ReduceAction::action)";
-void parser___ReduceAction293___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction413___action[] = "parser::ReduceAction413::(parser::ReduceAction::action)";
+void parser___ReduceAction413___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11643;
-  fra.me.meth = LOCATE_parser___ReduceAction293___action;
+  fra.me.line = 16716;
+  fra.me.meth = LOCATE_parser___ReduceAction413___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -32346,54 +45310,91 @@ void parser___ReduceAction293___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = 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:11645 */
+  /* parser/parser.nit:16718 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11646 */
+  /* parser/parser.nit:16719 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11647 */
+  /* parser/parser.nit:16720 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11648 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11649 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11650 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11651 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11653 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
+  /* parser/parser.nit:16721 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:16724 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11653);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16724);
   }
-  /* parser/parser.nit:11655 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:16725 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11655);
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* parser/parser.nit:11656 */
-  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:11658 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:16726 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:16728 */
+  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:16729 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:16730 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11658);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16730);
   }
-  /* parser/parser.nit:11659 */
-  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3], NIT_NULL, fra.me.REG[7]);
-  /* parser/parser.nit:11666 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:11667 */
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction414___action[] = "parser::ReduceAction414::(parser::ReduceAction::action)";
+void parser___ReduceAction414___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 16735;
+  fra.me.meth = LOCATE_parser___ReduceAction414___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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:16737 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:16738 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16739 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16740 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16742 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:16743 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11667);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16743);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32401,69 +45402,38 @@ void parser___ReduceAction293___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction294___action[] = "parser::ReduceAction294::(parser::ReduceAction::action)";
-void parser___ReduceAction294___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction416___action[] = "parser::ReduceAction416::(parser::ReduceAction::action)";
+void parser___ReduceAction416___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11672;
-  fra.me.meth = LOCATE_parser___ReduceAction294___action;
+  fra.me.line = 16748;
+  fra.me.meth = LOCATE_parser___ReduceAction416___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11674 */
+  /* parser/parser.nit:16750 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11675 */
+  /* parser/parser.nit:16751 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11676 */
+  /* parser/parser.nit:16752 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11677 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11678 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11679 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11680 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11682 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11682);
-  }
-  /* parser/parser.nit:11684 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11684);
-  }
-  /* parser/parser.nit:11686 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11686);
-  }
-  /* parser/parser.nit:11687 */
-  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[7]);
-  /* parser/parser.nit:11694 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:11695 */
+  /* parser/parser.nit:16754 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:16755 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11695);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16755);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32471,81 +45441,48 @@ void parser___ReduceAction294___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction295___action[] = "parser::ReduceAction295::(parser::ReduceAction::action)";
-void parser___ReduceAction295___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction417___action[] = "parser::ReduceAction417::(parser::ReduceAction::action)";
+void parser___ReduceAction417___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11700;
-  fra.me.meth = LOCATE_parser___ReduceAction295___action;
+  fra.me.line = 16760;
+  fra.me.meth = LOCATE_parser___ReduceAction417___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:11702 */
+  /* parser/parser.nit:16762 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11703 */
+  /* parser/parser.nit:16763 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11704 */
+  /* parser/parser.nit:16764 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11705 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11706 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11707 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11708 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11709 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11711 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11711);
-  }
-  /* parser/parser.nit:11713 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11713);
-  }
-  /* parser/parser.nit:11714 */
-  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:11716 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11716);
-  }
-  /* parser/parser.nit:11718 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:16765 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:16767 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11718);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16767);
   }
-  /* parser/parser.nit:11719 */
-  fra.me.REG[8] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[8]);
-  /* parser/parser.nit:11726 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* parser/parser.nit:11727 */
+  /* parser/parser.nit:16768 */
+  fra.me.REG[3] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:16772 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:16773 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11727);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16773);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32553,15 +45490,15 @@ void parser___ReduceAction295___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction296___action[] = "parser::ReduceAction296::(parser::ReduceAction::action)";
-void parser___ReduceAction296___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction418___action[] = "parser::ReduceAction418::(parser::ReduceAction::action)";
+void parser___ReduceAction418___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11732;
-  fra.me.meth = LOCATE_parser___ReduceAction296___action;
+  fra.me.line = 16778;
+  fra.me.meth = LOCATE_parser___ReduceAction418___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -32572,21 +45509,27 @@ void parser___ReduceAction296___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11734 */
+  /* parser/parser.nit:16780 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11735 */
-  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11736 */
+  /* parser/parser.nit:16781 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16782 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11737 */
-  fra.me.REG[4] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL, fra.me.REG[4]);
-  /* parser/parser.nit:11744 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:11745 */
+  /* parser/parser.nit:16784 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16784);
+  }
+  /* parser/parser.nit:16785 */
+  fra.me.REG[3] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:16789 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:16790 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11745);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16790);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32594,49 +45537,35 @@ void parser___ReduceAction296___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction297___action[] = "parser::ReduceAction297::(parser::ReduceAction::action)";
-void parser___ReduceAction297___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction419___action[] = "parser::ReduceAction419::(parser::ReduceAction::action)";
+void parser___ReduceAction419___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11750;
-  fra.me.meth = LOCATE_parser___ReduceAction297___action;
+  fra.me.line = 16795;
+  fra.me.meth = LOCATE_parser___ReduceAction419___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11752 */
+  /* parser/parser.nit:16797 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11753 */
+  /* parser/parser.nit:16798 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11754 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11755 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11757 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11757);
-  }
-  /* parser/parser.nit:11758 */
-  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser.nit:11765 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:11766 */
+  /* parser/parser.nit:16800 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:16801 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11766);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16801);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32644,16 +45573,16 @@ void parser___ReduceAction297___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction298___action[] = "parser::ReduceAction298::(parser::ReduceAction::action)";
-void parser___ReduceAction298___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction420___action[] = "parser::ReduceAction420::(parser::ReduceAction::action)";
+void parser___ReduceAction420___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11771;
-  fra.me.meth = LOCATE_parser___ReduceAction298___action;
+  fra.me.line = 16806;
+  fra.me.meth = LOCATE_parser___ReduceAction420___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -32664,15 +45593,19 @@ 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:11773 */
+  /* parser/parser.nit:16808 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11774 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11775 */
+  /* parser/parser.nit:16809 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11776 */
+  /* parser/parser.nit:16810 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11778 */
+  /* parser/parser.nit:16812 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16812);
+  }
+  /* parser/parser.nit:16813 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -32687,16 +45620,18 @@ void parser___ReduceAction298___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:11779 */
+    /* parser/parser.nit:16814 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:11781 */
+  /* parser/parser.nit:16816 */
+  fra.me.REG[4] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4], NIT_NULL);
+  /* parser/parser.nit:16820 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:11782 */
+  /* parser/parser.nit:16821 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11782);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16821);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32704,16 +45639,16 @@ void parser___ReduceAction298___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction299___action[] = "parser::ReduceAction299::(parser::ReduceAction::action)";
-void parser___ReduceAction299___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction421___action[] = "parser::ReduceAction421::(parser::ReduceAction::action)";
+void parser___ReduceAction421___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 = 11787;
-  fra.me.meth = LOCATE_parser___ReduceAction299___action;
+  fra.me.line = 16826;
+  fra.me.meth = LOCATE_parser___ReduceAction421___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -32725,23 +45660,27 @@ void parser___ReduceAction299___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:11789 */
+  /* parser/parser.nit:16828 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11790 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11791 */
+  /* parser/parser.nit:16829 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11792 */
+  /* parser/parser.nit:16830 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11793 */
+  /* parser/parser.nit:16831 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11796 */
+  /* parser/parser.nit:16833 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16833);
+  }
+  /* parser/parser.nit:16835 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11796);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16835);
   }
-  /* parser/parser.nit:11797 */
+  /* parser/parser.nit:16836 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -32756,19 +45695,21 @@ void parser___ReduceAction299___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:11798 */
+    /* parser/parser.nit:16837 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* parser/parser.nit:11800 */
+  /* parser/parser.nit:16839 */
   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:11801 */
+  /* parser/parser.nit:16840 */
+  fra.me.REG[5] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5], NIT_NULL);
+  /* parser/parser.nit:16844 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:11802 */
+  /* parser/parser.nit:16845 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11802);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16845);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32776,15 +45717,16 @@ void parser___ReduceAction299___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction300___action[] = "parser::ReduceAction300::(parser::ReduceAction::action)";
-void parser___ReduceAction300___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction422___action[] = "parser::ReduceAction422::(parser::ReduceAction::action)";
+void parser___ReduceAction422___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 = 11807;
-  fra.me.meth = LOCATE_parser___ReduceAction300___action;
+  fra.me.line = 16850;
+  fra.me.meth = LOCATE_parser___ReduceAction422___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -32795,65 +45737,47 @@ void parser___ReduceAction300___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:11809 */
+  /* parser/parser.nit:16852 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11810 */
+  /* parser/parser.nit:16853 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11811 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11812 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11814 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11815 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:16854 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16855 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:16857 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11815);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16857);
   }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction301___action[] = "parser::ReduceAction301::(parser::ReduceAction::action)";
-void parser___ReduceAction301___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11820;
-  fra.me.meth = LOCATE_parser___ReduceAction301___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser.nit:11822 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11823 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11825 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:16858 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11825);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* parser/parser.nit:11826 */
-  fra.me.REG[3] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:11831 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11832 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:16859 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:16861 */
+  fra.me.REG[4] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4], NIT_NULL);
+  /* parser/parser.nit:16865 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:16866 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11832);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16866);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32861,52 +45785,79 @@ void parser___ReduceAction301___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction302___action[] = "parser::ReduceAction302::(parser::ReduceAction::action)";
-void parser___ReduceAction302___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction423___action[] = "parser::ReduceAction423::(parser::ReduceAction::action)";
+void parser___ReduceAction423___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11837;
-  fra.me.meth = LOCATE_parser___ReduceAction302___action;
+  fra.me.line = 16871;
+  fra.me.meth = LOCATE_parser___ReduceAction423___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11839 */
+  /* parser/parser.nit:16873 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11840 */
+  /* parser/parser.nit:16874 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16875 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11841 */
+  /* parser/parser.nit:16876 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11843 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:16877 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:16879 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11843);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16879);
   }
-  /* parser/parser.nit:11845 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:16881 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11845);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16881);
   }
-  /* parser/parser.nit:11846 */
-  fra.me.REG[3] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:11851 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11852 */
+  /* parser/parser.nit:16882 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:16883 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:16885 */
+  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:16886 */
+  fra.me.REG[5] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5], NIT_NULL);
+  /* parser/parser.nit:16890 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:16891 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11852);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16891);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32914,15 +45865,16 @@ void parser___ReduceAction302___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction303___action[] = "parser::ReduceAction303::(parser::ReduceAction::action)";
-void parser___ReduceAction303___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction424___action[] = "parser::ReduceAction424::(parser::ReduceAction::action)";
+void parser___ReduceAction424___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 = 11857;
-  fra.me.meth = LOCATE_parser___ReduceAction303___action;
+  fra.me.line = 16896;
+  fra.me.meth = LOCATE_parser___ReduceAction424___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -32934,41 +45886,55 @@ void parser___ReduceAction303___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:11859 */
+  /* parser/parser.nit:16898 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11860 */
+  /* parser/parser.nit:16899 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11861 */
+  /* parser/parser.nit:16900 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11862 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11864 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:16901 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16902 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:16904 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11864);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16904);
   }
-  /* parser/parser.nit:11866 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:16905 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11866);
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* parser/parser.nit:11868 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TDotdotdot, ID_parser___parser_nodes___TDotdotdot)) /*cast nullable TDotdotdot*/;
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:16906 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:16909 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11868);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16909);
   }
-  /* parser/parser.nit:11869 */
-  fra.me.REG[3] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:11874 */
+  /* parser/parser.nit:16910 */
+  fra.me.REG[3] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5], fra.me.REG[3]);
+  /* parser/parser.nit:16914 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11875 */
+  /* parser/parser.nit:16915 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11875);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16915);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -32976,111 +45942,88 @@ void parser___ReduceAction303___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction304___action[] = "parser::ReduceAction304::(parser::ReduceAction::action)";
-void parser___ReduceAction304___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction425___action[] = "parser::ReduceAction425::(parser::ReduceAction::action)";
+void parser___ReduceAction425___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 = 11880;
-  fra.me.meth = LOCATE_parser___ReduceAction304___action;
+  fra.me.line = 16920;
+  fra.me.meth = LOCATE_parser___ReduceAction425___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11882 */
+  /* parser/parser.nit:16922 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11883 */
+  /* parser/parser.nit:16923 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11884 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:11886 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:16924 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16925 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16926 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16927 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:16929 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11886);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16929);
   }
-  /* parser/parser.nit:11887 */
-  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:11888 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:11889 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:16931 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11889);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16931);
   }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction305___action[] = "parser::ReduceAction305::(parser::ReduceAction::action)";
-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 = 11894;
-  fra.me.meth = LOCATE_parser___ReduceAction305___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  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:11896 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11897 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11898 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11899 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11900 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11902 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:16932 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11902);
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* parser/parser.nit:11904 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11904);
+    /* parser/parser.nit:16933 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[5]);
   }
-  /* parser/parser.nit:11906 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:16935 */
+  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:16937 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11906);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16937);
   }
-  /* parser/parser.nit:11907 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:11914 */
+  /* parser/parser.nit:16938 */
+  fra.me.REG[3] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6], fra.me.REG[3]);
+  /* parser/parser.nit:16942 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11915 */
+  /* parser/parser.nit:16943 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11915);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16943);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33088,72 +46031,43 @@ void parser___ReduceAction305___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction306___action[] = "parser::ReduceAction306::(parser::ReduceAction::action)";
-void parser___ReduceAction306___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction429___action[] = "parser::ReduceAction429::(parser::ReduceAction::action)";
+void parser___ReduceAction429___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11920;
-  fra.me.meth = LOCATE_parser___ReduceAction306___action;
+  fra.me.line = 16948;
+  fra.me.meth = LOCATE_parser___ReduceAction429___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11922 */
+  /* parser/parser.nit:16950 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11923 */
+  /* parser/parser.nit:16951 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11924 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11925 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11926 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11927 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11929 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11929);
-  }
-  /* parser/parser.nit:11931 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11931);
-  }
-  /* parser/parser.nit:11933 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11933);
-  }
-  /* parser/parser.nit:11935 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:16953 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreturn, ID_parser___parser_nodes___TKwreturn)) /*cast nullable TKwreturn*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11935);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16953);
   }
-  /* parser/parser.nit:11936 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:11943 */
+  /* parser/parser.nit:16954 */
+  fra.me.REG[3] = NEW_AReturnExpr_parser___parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:16958 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11944 */
+  /* parser/parser.nit:16959 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11944);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16959);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33161,74 +46075,96 @@ void parser___ReduceAction306___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction307___action[] = "parser::ReduceAction307::(parser::ReduceAction::action)";
-void parser___ReduceAction307___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction430___action[] = "parser::ReduceAction430::(parser::ReduceAction::action)";
+void parser___ReduceAction430___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11949;
-  fra.me.meth = LOCATE_parser___ReduceAction307___action;
+  fra.me.line = 16964;
+  fra.me.meth = LOCATE_parser___ReduceAction430___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11951 */
+  /* parser/parser.nit:16966 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11952 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11953 */
+  /* parser/parser.nit:16967 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11954 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11955 */
+  /* parser/parser.nit:16968 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11956 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11957 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11959 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:16970 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwreturn, ID_parser___parser_nodes___TKwreturn)) /*cast nullable TKwreturn*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11959);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16970);
   }
-  /* parser/parser.nit:11961 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:16972 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11961);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16972);
   }
-  /* parser/parser.nit:11963 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:16973 */
+  fra.me.REG[3] = NEW_AReturnExpr_parser___parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:16977 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:16978 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11963);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16978);
   }
-  /* parser/parser.nit:11965 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction431___action[] = "parser::ReduceAction431::(parser::ReduceAction::action)";
+void parser___ReduceAction431___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 16983;
+  fra.me.meth = LOCATE_parser___ReduceAction431___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:16985 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:16986 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:16988 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11965);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 16988);
   }
-  /* parser/parser.nit:11966 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:11973 */
+  /* parser/parser.nit:16989 */
+  fra.me.REG[3] = NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:16994 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:11974 */
+  /* parser/parser.nit:16995 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11974);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16995);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33236,83 +46172,52 @@ void parser___ReduceAction307___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction308___action[] = "parser::ReduceAction308::(parser::ReduceAction::action)";
-void parser___ReduceAction308___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction432___action[] = "parser::ReduceAction432::(parser::ReduceAction::action)";
+void parser___ReduceAction432___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11979;
-  fra.me.meth = LOCATE_parser___ReduceAction308___action;
+  fra.me.line = 17000;
+  fra.me.meth = LOCATE_parser___ReduceAction432___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:11981 */
+  /* parser/parser.nit:17002 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:11982 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11983 */
+  /* parser/parser.nit:17003 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11984 */
+  /* parser/parser.nit:17004 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11985 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11986 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11987 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11988 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:11990 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11990);
-  }
-  /* parser/parser.nit:11992 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11992);
-  }
-  /* parser/parser.nit:11994 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11994);
-  }
-  /* parser/parser.nit:11996 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:17006 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11996);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17006);
   }
-  /* parser/parser.nit:11998 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:17008 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11998);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17008);
   }
-  /* parser/parser.nit:11999 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:12006 */
+  /* parser/parser.nit:17009 */
+  fra.me.REG[3] = NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:17014 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12007 */
+  /* parser/parser.nit:17015 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12007);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17015);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33320,76 +46225,52 @@ void parser___ReduceAction308___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction309___action[] = "parser::ReduceAction309::(parser::ReduceAction::action)";
-void parser___ReduceAction309___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction433___action[] = "parser::ReduceAction433::(parser::ReduceAction::action)";
+void parser___ReduceAction433___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12012;
-  fra.me.meth = LOCATE_parser___ReduceAction309___action;
+  fra.me.line = 17020;
+  fra.me.meth = LOCATE_parser___ReduceAction433___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12014 */
+  /* parser/parser.nit:17022 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12015 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12016 */
+  /* parser/parser.nit:17023 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12017 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12018 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12019 */
+  /* parser/parser.nit:17024 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12020 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12021 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12023 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12023);
-  }
-  /* parser/parser.nit:12025 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12025);
-  }
-  /* parser/parser.nit:12027 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:17026 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12027);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17026);
   }
-  /* parser/parser.nit:12029 */
+  /* parser/parser.nit:17028 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12029);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17028);
   }
-  /* parser/parser.nit:12030 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:12037 */
+  /* parser/parser.nit:17029 */
+  fra.me.REG[3] = NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:17034 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12038 */
+  /* parser/parser.nit:17035 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12038);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17035);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33397,17 +46278,17 @@ void parser___ReduceAction309___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction310___action[] = "parser::ReduceAction310::(parser::ReduceAction::action)";
-void parser___ReduceAction310___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction434___action[] = "parser::ReduceAction434::(parser::ReduceAction::action)";
+void parser___ReduceAction434___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 = 12043;
-  fra.me.meth = LOCATE_parser___ReduceAction310___action;
+  fra.me.line = 17040;
+  fra.me.meth = LOCATE_parser___ReduceAction434___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -33415,67 +46296,43 @@ void parser___ReduceAction310___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = 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:12045 */
+  /* parser/parser.nit:17042 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12046 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12047 */
+  /* parser/parser.nit:17043 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12048 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12049 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12050 */
+  /* parser/parser.nit:17044 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12051 */
+  /* parser/parser.nit:17045 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12052 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12053 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12055 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12055);
-  }
-  /* parser/parser.nit:12057 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12057);
-  }
-  /* parser/parser.nit:12059 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:17047 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12059);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17047);
   }
-  /* parser/parser.nit:12061 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:17049 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12061);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17049);
   }
-  /* parser/parser.nit:12063 */
+  /* parser/parser.nit:17051 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12063);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17051);
   }
-  /* parser/parser.nit:12064 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:12071 */
+  /* parser/parser.nit:17052 */
+  fra.me.REG[3] = NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:17057 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12072 */
+  /* parser/parser.nit:17058 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12072);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17058);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33483,15 +46340,15 @@ void parser___ReduceAction310___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction311___action[] = "parser::ReduceAction311::(parser::ReduceAction::action)";
-void parser___ReduceAction311___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction435___action[] = "parser::ReduceAction435::(parser::ReduceAction::action)";
+void parser___ReduceAction435___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12077;
-  fra.me.meth = LOCATE_parser___ReduceAction311___action;
+  fra.me.line = 17063;
+  fra.me.meth = LOCATE_parser___ReduceAction435___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -33501,25 +46358,25 @@ void parser___ReduceAction311___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:12079 */
+  /* parser/parser.nit:17065 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12080 */
+  /* parser/parser.nit:17066 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12082 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:17068 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwabort, ID_parser___parser_nodes___TKwabort)) /*cast nullable TKwabort*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12082);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17068);
   }
-  /* parser/parser.nit:12083 */
-  fra.me.REG[3] = NEW_AReturnExpr_parser___parser_prod___AReturnExpr___init_areturnexpr(NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:12087 */
+  /* parser/parser.nit:17069 */
+  fra.me.REG[3] = NEW_AAbortExpr_parser___parser_prod___AAbortExpr___init_aabortexpr(fra.me.REG[3]);
+  /* parser/parser.nit:17072 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12088 */
+  /* parser/parser.nit:17073 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12088);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17073);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33527,76 +46384,43 @@ void parser___ReduceAction311___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction312___action[] = "parser::ReduceAction312::(parser::ReduceAction::action)";
-void parser___ReduceAction312___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction436___action[] = "parser::ReduceAction436::(parser::ReduceAction::action)";
+void parser___ReduceAction436___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12093;
-  fra.me.meth = LOCATE_parser___ReduceAction312___action;
+  fra.me.line = 17078;
+  fra.me.meth = LOCATE_parser___ReduceAction436___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12095 */
+  /* parser/parser.nit:17080 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12096 */
+  /* parser/parser.nit:17081 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12097 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12098 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12099 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12101 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12101);
-  }
-  /* parser/parser.nit:12103 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCall, ID_parser___parser_nodes___AExternCall)) /*cast nullable AExternCall*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12103);
-  }
-  /* parser/parser.nit:12104 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:17083 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17083);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:12105 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  /* parser/parser.nit:12107 */
-  fra.me.REG[5] = NEW_AExternCalls_parser___parser_prod___AExternCalls___init_aexterncalls(fra.me.REG[4], fra.me.REG[5]);
-  /* parser/parser.nit:12111 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:12112 */
+  /* parser/parser.nit:17084 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:17089 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:17090 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12112);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17090);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33604,88 +46428,52 @@ void parser___ReduceAction312___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction313___action[] = "parser::ReduceAction313::(parser::ReduceAction::action)";
-void parser___ReduceAction313___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction437___action[] = "parser::ReduceAction437::(parser::ReduceAction::action)";
+void parser___ReduceAction437___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 = 12117;
-  fra.me.meth = LOCATE_parser___ReduceAction313___action;
+  fra.me.line = 17095;
+  fra.me.meth = LOCATE_parser___ReduceAction437___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12119 */
+  /* parser/parser.nit:17097 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12120 */
+  /* parser/parser.nit:17098 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12121 */
+  /* parser/parser.nit:17099 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12122 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12123 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12124 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12126 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12126);
-  }
-  /* parser/parser.nit:12128 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCall, ID_parser___parser_nodes___AExternCall)) /*cast nullable AExternCall*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12128);
-  }
-  /* parser/parser.nit:12130 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:17101 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12130);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17101);
   }
-  /* parser/parser.nit:12131 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* parser/parser.nit:17103 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:12132 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17103);
   }
-  /* parser/parser.nit:12134 */
-  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:12135 */
-  fra.me.REG[6] = NEW_AExternCalls_parser___parser_prod___AExternCalls___init_aexterncalls(fra.me.REG[5], fra.me.REG[6]);
-  /* parser/parser.nit:12139 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* parser/parser.nit:12140 */
+  /* parser/parser.nit:17104 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:17109 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:17110 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12140);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17110);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33693,15 +46481,15 @@ void parser___ReduceAction313___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction314___action[] = "parser::ReduceAction314::(parser::ReduceAction::action)";
-void parser___ReduceAction314___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction438___action[] = "parser::ReduceAction438::(parser::ReduceAction::action)";
+void parser___ReduceAction438___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12145;
-  fra.me.meth = LOCATE_parser___ReduceAction314___action;
+  fra.me.line = 17115;
+  fra.me.meth = LOCATE_parser___ReduceAction438___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -33712,21 +46500,33 @@ void parser___ReduceAction314___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12147 */
+  /* parser/parser.nit:17117 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12148 */
+  /* parser/parser.nit:17118 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12149 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12150 */
+  /* parser/parser.nit:17119 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12152 */
+  /* parser/parser.nit:17121 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast nullable TKwcontinue*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17121);
+  }
+  /* parser/parser.nit:17123 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17123);
+  }
+  /* parser/parser.nit:17124 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:17129 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12153 */
+  /* parser/parser.nit:17130 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12153);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17130);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33734,35 +46534,61 @@ void parser___ReduceAction314___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction315___action[] = "parser::ReduceAction315::(parser::ReduceAction::action)";
-void parser___ReduceAction315___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction439___action[] = "parser::ReduceAction439::(parser::ReduceAction::action)";
+void parser___ReduceAction439___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 = 12158;
-  fra.me.meth = LOCATE_parser___ReduceAction315___action;
+  fra.me.line = 17135;
+  fra.me.meth = LOCATE_parser___ReduceAction439___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12160 */
+  /* parser/parser.nit:17137 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12161 */
+  /* parser/parser.nit:17138 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12163 */
+  /* parser/parser.nit:17139 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17140 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17142 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast nullable TKwcontinue*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17142);
+  }
+  /* parser/parser.nit:17144 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17144);
+  }
+  /* parser/parser.nit:17146 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17146);
+  }
+  /* parser/parser.nit:17147 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:17152 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12164 */
+  /* parser/parser.nit:17153 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12164);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17153);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33770,43 +46596,68 @@ void parser___ReduceAction315___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction317___action[] = "parser::ReduceAction317::(parser::ReduceAction::action)";
-void parser___ReduceAction317___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction446___action[] = "parser::ReduceAction446::(parser::ReduceAction::action)";
+void parser___ReduceAction446___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12169;
-  fra.me.meth = LOCATE_parser___ReduceAction317___action;
+  fra.me.line = 17158;
+  fra.me.meth = LOCATE_parser___ReduceAction446___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12171 */
+  /* parser/parser.nit:17160 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12172 */
+  /* parser/parser.nit:17161 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12174 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
+  /* parser/parser.nit:17162 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17163 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17164 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17165 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17166 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17168 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12174);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17168);
   }
-  /* parser/parser.nit:12175 */
-  fra.me.REG[3] = NEW_ASuperExternCall_parser___parser_prod___ASuperExternCall___init_asuperexterncall(fra.me.REG[3]);
-  /* parser/parser.nit:12178 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12179 */
+  /* parser/parser.nit:17170 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17170);
+  }
+  /* parser/parser.nit:17172 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17172);
+  }
+  /* parser/parser.nit:17173 */
+  fra.me.REG[6] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser.nit:17179 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:17180 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12179);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17180);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33814,43 +46665,58 @@ void parser___ReduceAction317___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction318___action[] = "parser::ReduceAction318::(parser::ReduceAction::action)";
-void parser___ReduceAction318___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction447___action[] = "parser::ReduceAction447::(parser::ReduceAction::action)";
+void parser___ReduceAction447___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 = 12184;
-  fra.me.meth = LOCATE_parser___ReduceAction318___action;
+  fra.me.line = 17185;
+  fra.me.meth = LOCATE_parser___ReduceAction447___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12186 */
+  /* parser/parser.nit:17187 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12187 */
+  /* parser/parser.nit:17188 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12189 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:17189 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17190 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17191 */
+  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:17193 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12189);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17193);
   }
-  /* parser/parser.nit:12190 */
-  fra.me.REG[3] = NEW_ALocalPropExternCall_parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall(fra.me.REG[3]);
-  /* parser/parser.nit:12193 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12194 */
+  /* parser/parser.nit:17195 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17195);
+  }
+  /* parser/parser.nit:17196 */
+  fra.me.REG[5] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser.nit:17202 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:17203 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12194);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17203);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33858,17 +46724,17 @@ void parser___ReduceAction318___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction319___action[] = "parser::ReduceAction319::(parser::ReduceAction::action)";
-void parser___ReduceAction319___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction448___action[] = "parser::ReduceAction448::(parser::ReduceAction::action)";
+void parser___ReduceAction448___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12199;
-  fra.me.meth = LOCATE_parser___ReduceAction319___action;
+  fra.me.line = 17208;
+  fra.me.meth = LOCATE_parser___ReduceAction448___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -33876,87 +46742,62 @@ void parser___ReduceAction319___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = 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:12201 */
+  /* parser/parser.nit:17210 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12202 */
+  /* parser/parser.nit:17211 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12203 */
+  /* parser/parser.nit:17212 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12204 */
+  /* parser/parser.nit:17213 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12206 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12206);
-  }
-  /* parser/parser.nit:12208 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast nullable TQuad*/;
+  /* parser/parser.nit:17214 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17215 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17216 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17217 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17219 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12208);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17219);
   }
-  /* parser/parser.nit:12210 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:17221 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12210);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17221);
   }
-  /* parser/parser.nit:12211 */
-  fra.me.REG[3] = NEW_AFullPropExternCall_parser___parser_prod___AFullPropExternCall___init_afullpropexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:12216 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12217 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:17223 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12217);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17223);
   }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction320___action[] = "parser::ReduceAction320::(parser::ReduceAction::action)";
-void parser___ReduceAction320___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12222;
-  fra.me.meth = LOCATE_parser___ReduceAction320___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser.nit:12224 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12225 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12227 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:17225 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12227);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17225);
   }
-  /* parser/parser.nit:12228 */
-  fra.me.REG[3] = NEW_AInitPropExternCall_parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall(fra.me.REG[3]);
-  /* parser/parser.nit:12231 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12232 */
+  /* parser/parser.nit:17226 */
+  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:17227 */
+  fra.me.REG[7] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[7]);
+  /* parser/parser.nit:17233 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:17234 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12232);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17234);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -33964,17 +46805,17 @@ void parser___ReduceAction320___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction321___action[] = "parser::ReduceAction321::(parser::ReduceAction::action)";
-void parser___ReduceAction321___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction449___action[] = "parser::ReduceAction449::(parser::ReduceAction::action)";
+void parser___ReduceAction449___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12237;
-  fra.me.meth = LOCATE_parser___ReduceAction321___action;
+  fra.me.line = 17239;
+  fra.me.meth = LOCATE_parser___ReduceAction449___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -33982,53 +46823,52 @@ void parser___ReduceAction321___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = 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:12239 */
+  /* parser/parser.nit:17241 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12240 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12241 */
+  /* parser/parser.nit:17242 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12242 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12243 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12244 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12245 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12246 */
+  /* parser/parser.nit:17243 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12247 */
+  /* parser/parser.nit:17244 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12249 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:17245 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17246 */
+  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:17248 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12249);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17248);
   }
-  /* parser/parser.nit:12251 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
+  /* parser/parser.nit:17250 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12251);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17250);
   }
-  /* parser/parser.nit:12253 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:17252 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12253);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17252);
   }
-  /* parser/parser.nit:12254 */
-  fra.me.REG[3] = NEW_ACastAsExternCall_parser___parser_prod___ACastAsExternCall___init_acastasexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:12259 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12260 */
+  /* parser/parser.nit:17253 */
+  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:17254 */
+  fra.me.REG[6] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[7], fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser.nit:17260 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:17261 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12260);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17261);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34036,63 +46876,52 @@ void parser___ReduceAction321___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction322___action[] = "parser::ReduceAction322::(parser::ReduceAction::action)";
-void parser___ReduceAction322___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction450___action[] = "parser::ReduceAction450::(parser::ReduceAction::action)";
+void parser___ReduceAction450___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12265;
-  fra.me.meth = LOCATE_parser___ReduceAction322___action;
+  fra.me.line = 17266;
+  fra.me.meth = LOCATE_parser___ReduceAction450___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12267 */
+  /* parser/parser.nit:17268 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12268 */
+  /* parser/parser.nit:17269 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12269 */
+  /* parser/parser.nit:17270 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12270 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12271 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12273 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12273);
-  }
-  /* parser/parser.nit:12275 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
+  /* parser/parser.nit:17272 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12275);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17272);
   }
-  /* parser/parser.nit:12277 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
+  /* parser/parser.nit:17274 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12277);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17274);
   }
-  /* parser/parser.nit:12278 */
-  fra.me.REG[3] = NEW_AAsNullableExternCall_parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:12283 */
+  /* parser/parser.nit:17275 */
+  fra.me.REG[3] = NEW_ASuperExpr_parser___parser_prod___ASuperExpr___init_asuperexpr(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:17280 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12284 */
+  /* parser/parser.nit:17281 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12284);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17281);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34100,17 +46929,17 @@ void parser___ReduceAction322___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction323___action[] = "parser::ReduceAction323::(parser::ReduceAction::action)";
-void parser___ReduceAction323___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction451___action[] = "parser::ReduceAction451::(parser::ReduceAction::action)";
+void parser___ReduceAction451___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 = 12289;
-  fra.me.meth = LOCATE_parser___ReduceAction323___action;
+  fra.me.line = 17286;
+  fra.me.meth = LOCATE_parser___ReduceAction451___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -34118,56 +46947,43 @@ void parser___ReduceAction323___action(val_t p0, val_t p1){
   fra.me.REG[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:12291 */
+  /* parser/parser.nit:17288 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12292 */
+  /* parser/parser.nit:17289 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12293 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12294 */
+  /* parser/parser.nit:17290 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12295 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12296 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12297 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12299 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12299);
-  }
-  /* parser/parser.nit:12301 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
+  /* parser/parser.nit:17291 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17293 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AQualified, ID_parser___parser_nodes___AQualified)) /*cast nullable AQualified*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12301);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17293);
   }
-  /* parser/parser.nit:12303 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast nullable TKwnot*/;
+  /* parser/parser.nit:17295 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12303);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17295);
   }
-  /* parser/parser.nit:12305 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
+  /* parser/parser.nit:17297 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12305);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17297);
   }
-  /* parser/parser.nit:12306 */
-  fra.me.REG[3] = NEW_AAsNotNullableExternCall_parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:12312 */
+  /* parser/parser.nit:17298 */
+  fra.me.REG[3] = NEW_ASuperExpr_parser___parser_prod___ASuperExpr___init_asuperexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:17303 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12313 */
+  /* parser/parser.nit:17304 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12313);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17304);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34175,52 +46991,65 @@ void parser___ReduceAction323___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction324___action[] = "parser::ReduceAction324::(parser::ReduceAction::action)";
-void parser___ReduceAction324___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction452___action[] = "parser::ReduceAction452::(parser::ReduceAction::action)";
+void parser___ReduceAction452___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 = 12318;
-  fra.me.meth = LOCATE_parser___ReduceAction324___action;
+  fra.me.line = 17309;
+  fra.me.meth = LOCATE_parser___ReduceAction452___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12320 */
+  /* parser/parser.nit:17311 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12321 */
+  /* parser/parser.nit:17312 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12322 */
+  /* parser/parser.nit:17313 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12324 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwin, ID_parser___parser_nodes___TKwin)) /*cast nullable TKwin*/;
+  /* parser/parser.nit:17314 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17315 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17316 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17318 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12324);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17318);
   }
-  /* parser/parser.nit:12326 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:17320 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12326);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17320);
   }
-  /* parser/parser.nit:12327 */
-  fra.me.REG[3] = NEW_AInLanguage_parser___parser_prod___AInLanguage___init_ainlanguage(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:12331 */
+  /* parser/parser.nit:17322 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17322);
+  }
+  /* parser/parser.nit:17323 */
+  fra.me.REG[3] = NEW_AInitExpr_parser___parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:17328 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12332 */
+  /* parser/parser.nit:17329 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12332);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17329);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34228,43 +47057,55 @@ void parser___ReduceAction324___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction325___action[] = "parser::ReduceAction325::(parser::ReduceAction::action)";
-void parser___ReduceAction325___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction453___action[] = "parser::ReduceAction453::(parser::ReduceAction::action)";
+void parser___ReduceAction453___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 = 12337;
-  fra.me.meth = LOCATE_parser___ReduceAction325___action;
+  fra.me.line = 17334;
+  fra.me.meth = LOCATE_parser___ReduceAction453___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12339 */
+  /* parser/parser.nit:17336 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12340 */
+  /* parser/parser.nit:17337 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12342 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TExternCodeSegment, ID_parser___parser_nodes___TExternCodeSegment)) /*cast nullable TExternCodeSegment*/;
+  /* parser/parser.nit:17338 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17339 */
+  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:17341 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12342);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17341);
   }
-  /* parser/parser.nit:12343 */
-  fra.me.REG[3] = NEW_AExternCodeBlock_parser___parser_prod___AExternCodeBlock___init_aexterncodeblock(NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:12347 */
+  /* parser/parser.nit:17343 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17343);
+  }
+  /* parser/parser.nit:17344 */
+  fra.me.REG[3] = NEW_AInitExpr_parser___parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:17349 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12348 */
+  /* parser/parser.nit:17350 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12348);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17350);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34272,52 +47113,72 @@ void parser___ReduceAction325___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction326___action[] = "parser::ReduceAction326::(parser::ReduceAction::action)";
-void parser___ReduceAction326___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction454___action[] = "parser::ReduceAction454::(parser::ReduceAction::action)";
+void parser___ReduceAction454___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 = 12353;
-  fra.me.meth = LOCATE_parser___ReduceAction326___action;
+  fra.me.line = 17355;
+  fra.me.meth = LOCATE_parser___ReduceAction454___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12355 */
+  /* parser/parser.nit:17357 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12356 */
+  /* parser/parser.nit:17358 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12357 */
+  /* parser/parser.nit:17359 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12359 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AInLanguage, ID_parser___parser_nodes___AInLanguage)) /*cast nullable AInLanguage*/;
+  /* parser/parser.nit:17360 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17361 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17362 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17364 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwdebug, ID_parser___parser_nodes___TKwdebug)) /*cast nullable TKwdebug*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12359);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17364);
   }
-  /* parser/parser.nit:12361 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TExternCodeSegment, ID_parser___parser_nodes___TExternCodeSegment)) /*cast nullable TExternCodeSegment*/;
+  /* parser/parser.nit:17366 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast nullable TKwtype*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12361);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17366);
   }
-  /* parser/parser.nit:12362 */
-  fra.me.REG[3] = NEW_AExternCodeBlock_parser___parser_prod___AExternCodeBlock___init_aexterncodeblock(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:12366 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12367 */
+  /* parser/parser.nit:17368 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17368);
+  }
+  /* parser/parser.nit:17370 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17370);
+  }
+  /* parser/parser.nit:17371 */
+  fra.me.REG[4] = NEW_ADebugTypeExpr_parser___parser_prod___ADebugTypeExpr___init_adebugtypeexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[3], fra.me.REG[4]);
+  /* parser/parser.nit:17377 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:17378 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12367);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17378);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34325,15 +47186,15 @@ void parser___ReduceAction326___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction327___action[] = "parser::ReduceAction327::(parser::ReduceAction::action)";
-void parser___ReduceAction327___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction455___action[] = "parser::ReduceAction455::(parser::ReduceAction::action)";
+void parser___ReduceAction455___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12372;
-  fra.me.meth = LOCATE_parser___ReduceAction327___action;
+  fra.me.line = 17383;
+  fra.me.meth = LOCATE_parser___ReduceAction455___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -34344,19 +47205,33 @@ void parser___ReduceAction327___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12374 */
+  /* parser/parser.nit:17385 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12375 */
+  /* parser/parser.nit:17386 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12376 */
+  /* parser/parser.nit:17387 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12378 */
+  /* parser/parser.nit:17389 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwlabel, ID_parser___parser_nodes___TKwlabel)) /*cast nullable TKwlabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17389);
+  }
+  /* parser/parser.nit:17391 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17391);
+  }
+  /* parser/parser.nit:17392 */
+  fra.me.REG[3] = NEW_ALabel_parser___parser_prod___ALabel___init_alabel(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:17396 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12379 */
+  /* parser/parser.nit:17397 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12379);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17397);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34364,15 +47239,16 @@ void parser___ReduceAction327___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction328___action[] = "parser::ReduceAction328::(parser::ReduceAction::action)";
-void parser___ReduceAction328___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction456___action[] = "parser::ReduceAction456::(parser::ReduceAction::action)";
+void parser___ReduceAction456___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 = 12384;
-  fra.me.meth = LOCATE_parser___ReduceAction328___action;
+  fra.me.line = 17402;
+  fra.me.meth = LOCATE_parser___ReduceAction456___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -34383,27 +47259,37 @@ void parser___ReduceAction328___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12386 */
+  /* parser/parser.nit:17404 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12387 */
+  /* parser/parser.nit:17405 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12388 */
+  /* parser/parser.nit:17406 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12390 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:17408 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12390);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* parser/parser.nit:12391 */
-  fra.me.REG[4] = NEW_AType_parser___parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  /* parser/parser.nit:12396 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:17409 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:17411 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:12397 */
+  /* parser/parser.nit:17412 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12397);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17412);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34411,15 +47297,16 @@ void parser___ReduceAction328___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction329___action[] = "parser::ReduceAction329::(parser::ReduceAction::action)";
-void parser___ReduceAction329___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction457___action[] = "parser::ReduceAction457::(parser::ReduceAction::action)";
+void parser___ReduceAction457___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 = 12402;
-  fra.me.meth = LOCATE_parser___ReduceAction329___action;
+  fra.me.line = 17417;
+  fra.me.meth = LOCATE_parser___ReduceAction457___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -34431,35 +47318,48 @@ void parser___ReduceAction329___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:12404 */
+  /* parser/parser.nit:17419 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12405 */
+  /* parser/parser.nit:17420 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12406 */
+  /* parser/parser.nit:17421 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12407 */
+  /* parser/parser.nit:17422 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12409 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
+  /* parser/parser.nit:17425 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12409);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17425);
   }
-  /* parser/parser.nit:12411 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:17426 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12411);
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* parser/parser.nit:12412 */
-  fra.me.REG[5] = NEW_AType_parser___parser_prod___AType___init_atype(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser.nit:12417 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:17427 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:17429 */
+  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:17430 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:12418 */
+  /* parser/parser.nit:17431 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12418);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17431);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34467,17 +47367,17 @@ void parser___ReduceAction329___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction330___action[] = "parser::ReduceAction330::(parser::ReduceAction::action)";
-void parser___ReduceAction330___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction458___action[] = "parser::ReduceAction458::(parser::ReduceAction::action)";
+void parser___ReduceAction458___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12423;
-  fra.me.meth = LOCATE_parser___ReduceAction330___action;
+  fra.me.line = 17436;
+  fra.me.meth = LOCATE_parser___ReduceAction458___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -34485,48 +47385,64 @@ void parser___ReduceAction330___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = 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:12425 */
+  /* parser/parser.nit:17438 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12426 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12427 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12428 */
+  /* parser/parser.nit:17439 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12429 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12430 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12431 */
+  /* parser/parser.nit:17440 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12432 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12434 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:17441 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17442 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17443 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17444 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17446 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12434);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17446);
   }
-  /* parser/parser.nit:12436 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:17448 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12436);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17448);
   }
-  /* parser/parser.nit:12437 */
-  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:12438 */
-  fra.me.REG[5] = NEW_AType_parser___parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* parser/parser.nit:12443 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:12444 */
+  /* parser/parser.nit:17450 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17450);
+  }
+  /* parser/parser.nit:17452 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17452);
+  }
+  /* parser/parser.nit:17454 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17454);
+  }
+  /* parser/parser.nit:17455 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:17463 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:17464 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12444);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17464);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34534,17 +47450,17 @@ void parser___ReduceAction330___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction331___action[] = "parser::ReduceAction331::(parser::ReduceAction::action)";
-void parser___ReduceAction331___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction459___action[] = "parser::ReduceAction459::(parser::ReduceAction::action)";
+void parser___ReduceAction459___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 = 12449;
-  fra.me.meth = LOCATE_parser___ReduceAction331___action;
+  fra.me.line = 17469;
+  fra.me.meth = LOCATE_parser___ReduceAction459___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -34553,114 +47469,79 @@ void parser___ReduceAction331___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:12451 */
+  /* parser/parser.nit:17471 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12452 */
+  /* parser/parser.nit:17472 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12453 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12454 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12455 */
+  /* parser/parser.nit:17473 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12456 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12457 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12458 */
+  /* parser/parser.nit:17474 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12459 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12461 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
+  /* parser/parser.nit:17475 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17476 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17477 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17478 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17479 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17480 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17482 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12461);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17482);
   }
-  /* parser/parser.nit:12463 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:17484 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12463);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17484);
   }
-  /* parser/parser.nit:12465 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:17486 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12465);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17486);
   }
-  /* parser/parser.nit:12466 */
-  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:12467 */
-  fra.me.REG[6] = NEW_AType_parser___parser_prod___AType___init_atype(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* parser/parser.nit:12472 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* parser/parser.nit:12473 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:17487 */
+  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:17489 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12473);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17489);
   }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction332___action[] = "parser::ReduceAction332::(parser::ReduceAction::action)";
-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 REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12478;
-  fra.me.meth = LOCATE_parser___ReduceAction332___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  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:12480 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12481 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12482 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12484 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:17491 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17491);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:17493 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:12485 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17493);
   }
-  /* parser/parser.nit:12487 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:12488 */
+  /* parser/parser.nit:17494 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[9], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:17502 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:17503 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12488);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17503);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34668,18 +47549,17 @@ void parser___ReduceAction332___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction333___action[] = "parser::ReduceAction333::(parser::ReduceAction::action)";
-void parser___ReduceAction333___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction460___action[] = "parser::ReduceAction460::(parser::ReduceAction::action)";
+void parser___ReduceAction460___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12493;
-  fra.me.meth = LOCATE_parser___ReduceAction333___action;
+  fra.me.line = 17508;
+  fra.me.meth = LOCATE_parser___ReduceAction460___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -34687,50 +47567,76 @@ void parser___ReduceAction333___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[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:12495 */
+  /* parser/parser.nit:17510 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12496 */
+  /* parser/parser.nit:17511 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12497 */
+  /* parser/parser.nit:17512 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12498 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12501 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:17513 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17514 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17515 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17516 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17517 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17519 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12501);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17519);
   }
-  /* parser/parser.nit:12502 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* parser/parser.nit:17521 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17521);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:17523 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:12503 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17523);
   }
-  /* parser/parser.nit:12505 */
-  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:12506 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:12507 */
+  /* parser/parser.nit:17524 */
+  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:17526 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17526);
+  }
+  /* parser/parser.nit:17528 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17528);
+  }
+  /* parser/parser.nit:17530 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17530);
+  }
+  /* parser/parser.nit:17531 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[9], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:17539 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:17540 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12507);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17540);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34738,40 +47644,73 @@ void parser___ReduceAction333___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction334___action[] = "parser::ReduceAction334::(parser::ReduceAction::action)";
-void parser___ReduceAction334___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction461___action[] = "parser::ReduceAction461::(parser::ReduceAction::action)";
+void parser___ReduceAction461___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12512;
-  fra.me.meth = LOCATE_parser___ReduceAction334___action;
+  fra.me.line = 17545;
+  fra.me.meth = LOCATE_parser___ReduceAction461___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12514 */
+  /* parser/parser.nit:17547 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12515 */
+  /* parser/parser.nit:17548 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12516 */
+  /* parser/parser.nit:17549 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12517 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12519 */
+  /* parser/parser.nit:17550 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17551 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17552 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17554 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17554);
+  }
+  /* parser/parser.nit:17556 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17556);
+  }
+  /* parser/parser.nit:17558 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17558);
+  }
+  /* parser/parser.nit:17560 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17560);
+  }
+  /* parser/parser.nit:17561 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:17569 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12520 */
+  /* parser/parser.nit:17570 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12520);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17570);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34779,38 +47718,89 @@ void parser___ReduceAction334___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction336___action[] = "parser::ReduceAction336::(parser::ReduceAction::action)";
-void parser___ReduceAction336___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction462___action[] = "parser::ReduceAction462::(parser::ReduceAction::action)";
+void parser___ReduceAction462___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12525;
-  fra.me.meth = LOCATE_parser___ReduceAction336___action;
+  fra.me.line = 17575;
+  fra.me.meth = LOCATE_parser___ReduceAction462___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12527 */
+  /* parser/parser.nit:17577 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12528 */
+  /* parser/parser.nit:17578 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12529 */
+  /* parser/parser.nit:17579 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12531 */
+  /* parser/parser.nit:17580 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17581 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17582 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17583 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17584 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17585 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17587 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17587);
+  }
+  /* parser/parser.nit:17589 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17589);
+  }
+  /* parser/parser.nit:17591 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17591);
+  }
+  /* parser/parser.nit:17592 */
+  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:17594 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17594);
+  }
+  /* parser/parser.nit:17596 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17596);
+  }
+  /* parser/parser.nit:17597 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:17605 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12532 */
+  /* parser/parser.nit:17606 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12532);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17606);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34818,48 +47808,85 @@ void parser___ReduceAction336___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction337___action[] = "parser::ReduceAction337::(parser::ReduceAction::action)";
-void parser___ReduceAction337___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction463___action[] = "parser::ReduceAction463::(parser::ReduceAction::action)";
+void parser___ReduceAction463___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12537;
-  fra.me.meth = LOCATE_parser___ReduceAction337___action;
+  fra.me.line = 17611;
+  fra.me.meth = LOCATE_parser___ReduceAction463___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12539 */
+  /* parser/parser.nit:17613 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12540 */
+  /* parser/parser.nit:17614 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12541 */
+  /* parser/parser.nit:17615 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12542 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12544 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:17616 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17617 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17618 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17619 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17621 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12544);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17621);
   }
-  /* parser/parser.nit:12545 */
-  fra.me.REG[3] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:12549 */
+  /* parser/parser.nit:17623 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17623);
+  }
+  /* parser/parser.nit:17625 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17625);
+  }
+  /* parser/parser.nit:17626 */
+  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:17628 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17628);
+  }
+  /* parser/parser.nit:17630 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17630);
+  }
+  /* parser/parser.nit:17631 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:17639 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12550 */
+  /* parser/parser.nit:17640 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12550);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17640);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34867,46 +47894,68 @@ void parser___ReduceAction337___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction338___action[] = "parser::ReduceAction338::(parser::ReduceAction::action)";
-void parser___ReduceAction338___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction464___action[] = "parser::ReduceAction464::(parser::ReduceAction::action)";
+void parser___ReduceAction464___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 = 12555;
-  fra.me.meth = LOCATE_parser___ReduceAction338___action;
+  fra.me.line = 17645;
+  fra.me.meth = LOCATE_parser___ReduceAction464___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12557 */
+  /* parser/parser.nit:17647 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12558 */
+  /* parser/parser.nit:17648 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12559 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12561 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:17649 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17650 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17651 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17652 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17653 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17655 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12561);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17655);
   }
-  /* parser/parser.nit:12562 */
-  fra.me.REG[3] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:12566 */
+  /* parser/parser.nit:17657 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17657);
+  }
+  /* parser/parser.nit:17659 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17659);
+  }
+  /* parser/parser.nit:17660 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:17668 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12567 */
+  /* parser/parser.nit:17669 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12567);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17669);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34914,35 +47963,84 @@ void parser___ReduceAction338___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction339___action[] = "parser::ReduceAction339::(parser::ReduceAction::action)";
-void parser___ReduceAction339___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction465___action[] = "parser::ReduceAction465::(parser::ReduceAction::action)";
+void parser___ReduceAction465___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12572;
-  fra.me.meth = LOCATE_parser___ReduceAction339___action;
+  fra.me.line = 17674;
+  fra.me.meth = LOCATE_parser___ReduceAction465___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12574 */
+  /* parser/parser.nit:17676 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12575 */
+  /* parser/parser.nit:17677 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12577 */
+  /* parser/parser.nit:17678 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17679 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17680 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17681 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17682 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17683 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17684 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17685 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17687 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17687);
+  }
+  /* parser/parser.nit:17689 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17689);
+  }
+  /* parser/parser.nit:17691 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17691);
+  }
+  /* parser/parser.nit:17692 */
+  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:17694 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17694);
+  }
+  /* parser/parser.nit:17695 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:17703 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12578 */
+  /* parser/parser.nit:17704 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12578);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17704);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -34950,65 +48048,80 @@ void parser___ReduceAction339___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction340___action[] = "parser::ReduceAction340::(parser::ReduceAction::action)";
-void parser___ReduceAction340___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction466___action[] = "parser::ReduceAction466::(parser::ReduceAction::action)";
+void parser___ReduceAction466___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12583;
-  fra.me.meth = LOCATE_parser___ReduceAction340___action;
+  fra.me.line = 17709;
+  fra.me.meth = LOCATE_parser___ReduceAction466___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12585 */
+  /* parser/parser.nit:17711 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12586 */
+  /* parser/parser.nit:17712 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12587 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12589 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:17713 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17714 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17715 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17716 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17717 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17718 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17720 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12589);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17720);
   }
-  /* parser/parser.nit:12590 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:17722 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17722);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:17724 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:12591 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17724);
   }
-  /* parser/parser.nit:12593 */
-  fra.me.REG[4] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4], NIT_NULL);
-  /* parser/parser.nit:12597 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:12598 */
+  /* parser/parser.nit:17725 */
+  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:17727 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17727);
+  }
+  /* parser/parser.nit:17728 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:17736 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:17737 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12598);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17737);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35016,18 +48129,17 @@ void parser___ReduceAction340___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction341___action[] = "parser::ReduceAction341::(parser::ReduceAction::action)";
-void parser___ReduceAction341___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction467___action[] = "parser::ReduceAction467::(parser::ReduceAction::action)";
+void parser___ReduceAction467___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12603;
-  fra.me.meth = LOCATE_parser___ReduceAction341___action;
+  fra.me.line = 17742;
+  fra.me.meth = LOCATE_parser___ReduceAction467___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -35035,58 +48147,57 @@ void parser___ReduceAction341___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = 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:12605 */
+  /* parser/parser.nit:17744 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12606 */
+  /* parser/parser.nit:17745 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12607 */
+  /* parser/parser.nit:17746 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12608 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12610 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:17747 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17748 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17749 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17750 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17752 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12610);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17752);
   }
-  /* parser/parser.nit:12612 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:17754 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12612);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17754);
   }
-  /* parser/parser.nit:12613 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* parser/parser.nit:17756 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17756);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:17758 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:12614 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17758);
   }
-  /* parser/parser.nit:12616 */
-  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:12617 */
-  fra.me.REG[5] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5], NIT_NULL);
-  /* parser/parser.nit:12621 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:12622 */
+  /* parser/parser.nit:17759 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:17767 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:17768 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12622);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17768);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35094,67 +48205,91 @@ void parser___ReduceAction341___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction342___action[] = "parser::ReduceAction342::(parser::ReduceAction::action)";
-void parser___ReduceAction342___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction468___action[] = "parser::ReduceAction468::(parser::ReduceAction::action)";
+void parser___ReduceAction468___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12627;
-  fra.me.meth = LOCATE_parser___ReduceAction342___action;
+  fra.me.line = 17773;
+  fra.me.meth = LOCATE_parser___ReduceAction468___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12629 */
+  /* parser/parser.nit:17775 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12630 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12631 */
+  /* parser/parser.nit:17776 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12632 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12634 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:17777 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17778 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17779 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17780 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17781 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17782 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17783 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17784 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17786 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12634);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17786);
   }
-  /* parser/parser.nit:12635 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:17788 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17788);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:17790 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:12636 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17790);
   }
-  /* parser/parser.nit:12638 */
-  fra.me.REG[4] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4], NIT_NULL);
-  /* parser/parser.nit:12642 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:12643 */
+  /* parser/parser.nit:17791 */
+  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:17793 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17793);
+  }
+  /* parser/parser.nit:17795 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17795);
+  }
+  /* parser/parser.nit:17796 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:17804 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:17805 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12643);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17805);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35162,18 +48297,17 @@ void parser___ReduceAction342___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction343___action[] = "parser::ReduceAction343::(parser::ReduceAction::action)";
-void parser___ReduceAction343___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction469___action[] = "parser::ReduceAction469::(parser::ReduceAction::action)";
+void parser___ReduceAction469___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12648;
-  fra.me.meth = LOCATE_parser___ReduceAction343___action;
+  fra.me.line = 17810;
+  fra.me.meth = LOCATE_parser___ReduceAction469___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -35181,60 +48315,69 @@ void parser___ReduceAction343___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = 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:12650 */
+  /* parser/parser.nit:17812 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12651 */
+  /* parser/parser.nit:17813 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12652 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12653 */
+  /* parser/parser.nit:17814 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12654 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12656 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:17815 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17816 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17817 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17818 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17819 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17821 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12656);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17821);
   }
-  /* parser/parser.nit:12658 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:17823 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12658);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17823);
   }
-  /* parser/parser.nit:12659 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* parser/parser.nit:17825 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17825);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:17826 */
+  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:17828 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:12660 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17828);
   }
-  /* parser/parser.nit:12662 */
-  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:12663 */
-  fra.me.REG[5] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5], NIT_NULL);
-  /* parser/parser.nit:12667 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:12668 */
+  /* parser/parser.nit:17830 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17830);
+  }
+  /* parser/parser.nit:17831 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:17839 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:17840 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12668);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17840);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35242,18 +48385,17 @@ void parser___ReduceAction343___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction344___action[] = "parser::ReduceAction344::(parser::ReduceAction::action)";
-void parser___ReduceAction344___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction470___action[] = "parser::ReduceAction470::(parser::ReduceAction::action)";
+void parser___ReduceAction470___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 = 12673;
-  fra.me.meth = LOCATE_parser___ReduceAction344___action;
+  fra.me.line = 17845;
+  fra.me.meth = LOCATE_parser___ReduceAction470___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -35261,57 +48403,48 @@ void parser___ReduceAction344___action(val_t p0, val_t p1){
   fra.me.REG[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:12675 */
+  /* parser/parser.nit:17847 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12676 */
+  /* parser/parser.nit:17848 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12677 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12678 */
+  /* parser/parser.nit:17849 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17850 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12679 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12681 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:17851 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17852 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17854 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12681);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17854);
   }
-  /* parser/parser.nit:12682 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* parser/parser.nit:17856 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:12683 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17856);
   }
-  /* parser/parser.nit:12686 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:17858 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12686);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17858);
   }
-  /* parser/parser.nit:12687 */
-  fra.me.REG[3] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5], fra.me.REG[3]);
-  /* parser/parser.nit:12691 */
+  /* parser/parser.nit:17859 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:17867 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12692 */
+  /* parser/parser.nit:17868 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12692);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17868);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35319,18 +48452,17 @@ void parser___ReduceAction344___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction345___action[] = "parser::ReduceAction345::(parser::ReduceAction::action)";
-void parser___ReduceAction345___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction471___action[] = "parser::ReduceAction471::(parser::ReduceAction::action)";
+void parser___ReduceAction471___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12697;
-  fra.me.meth = LOCATE_parser___ReduceAction345___action;
+  fra.me.line = 17873;
+  fra.me.meth = LOCATE_parser___ReduceAction471___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -35339,68 +48471,63 @@ void parser___ReduceAction345___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12699 */
+  /* parser/parser.nit:17875 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12700 */
+  /* parser/parser.nit:17876 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12701 */
+  /* parser/parser.nit:17877 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17878 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12702 */
+  /* parser/parser.nit:17879 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12703 */
+  /* parser/parser.nit:17880 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12704 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12706 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:17881 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17882 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17883 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17885 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12706);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17885);
   }
-  /* parser/parser.nit:12708 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:17887 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12708);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17887);
   }
-  /* parser/parser.nit:12709 */
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* parser/parser.nit:17889 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:12710 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[5]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17889);
   }
-  /* parser/parser.nit:12712 */
-  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:12714 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:17890 */
+  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:17892 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12714);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17892);
   }
-  /* parser/parser.nit:12715 */
-  fra.me.REG[3] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6], fra.me.REG[3]);
-  /* parser/parser.nit:12719 */
+  /* parser/parser.nit:17893 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:17901 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12720 */
+  /* parser/parser.nit:17902 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12720);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17902);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35408,43 +48535,78 @@ void parser___ReduceAction345___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction349___action[] = "parser::ReduceAction349::(parser::ReduceAction::action)";
-void parser___ReduceAction349___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction472___action[] = "parser::ReduceAction472::(parser::ReduceAction::action)";
+void parser___ReduceAction472___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12725;
-  fra.me.meth = LOCATE_parser___ReduceAction349___action;
+  fra.me.line = 17907;
+  fra.me.meth = LOCATE_parser___ReduceAction472___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12727 */
+  /* parser/parser.nit:17909 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12728 */
+  /* parser/parser.nit:17910 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12730 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreturn, ID_parser___parser_nodes___TKwreturn)) /*cast nullable TKwreturn*/;
+  /* parser/parser.nit:17911 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17912 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17913 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17914 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:17915 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:17917 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12730);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17917);
   }
-  /* parser/parser.nit:12731 */
-  fra.me.REG[3] = NEW_AReturnExpr_parser___parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:12735 */
+  /* parser/parser.nit:17919 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17919);
+  }
+  /* parser/parser.nit:17921 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17921);
+  }
+  /* parser/parser.nit:17922 */
+  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:17924 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17924);
+  }
+  /* parser/parser.nit:17925 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:17933 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12736 */
+  /* parser/parser.nit:17934 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12736);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17934);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35452,52 +48614,43 @@ void parser___ReduceAction349___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction350___action[] = "parser::ReduceAction350::(parser::ReduceAction::action)";
-void parser___ReduceAction350___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction473___action[] = "parser::ReduceAction473::(parser::ReduceAction::action)";
+void parser___ReduceAction473___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12741;
-  fra.me.meth = LOCATE_parser___ReduceAction350___action;
+  fra.me.line = 17939;
+  fra.me.meth = LOCATE_parser___ReduceAction473___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12743 */
+  /* parser/parser.nit:17941 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12744 */
+  /* parser/parser.nit:17942 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12745 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12747 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwreturn, ID_parser___parser_nodes___TKwreturn)) /*cast nullable TKwreturn*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12747);
-  }
-  /* parser/parser.nit:12749 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:17944 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12749);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17944);
   }
-  /* parser/parser.nit:12750 */
-  fra.me.REG[3] = NEW_AReturnExpr_parser___parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:12754 */
+  /* parser/parser.nit:17945 */
+  fra.me.REG[3] = NEW_ASimpleClosureId_parser___parser_prod___ASimpleClosureId___init_asimpleclosureid(fra.me.REG[3]);
+  /* parser/parser.nit:17948 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12755 */
+  /* parser/parser.nit:17949 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12755);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17949);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35505,15 +48658,15 @@ void parser___ReduceAction350___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction351___action[] = "parser::ReduceAction351::(parser::ReduceAction::action)";
-void parser___ReduceAction351___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction474___action[] = "parser::ReduceAction474::(parser::ReduceAction::action)";
+void parser___ReduceAction474___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12760;
-  fra.me.meth = LOCATE_parser___ReduceAction351___action;
+  fra.me.line = 17954;
+  fra.me.meth = LOCATE_parser___ReduceAction474___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -35523,25 +48676,25 @@ void parser___ReduceAction351___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12762 */
+  /* parser/parser.nit:17956 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12763 */
+  /* parser/parser.nit:17957 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12765 */
+  /* parser/parser.nit:17959 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12765);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17959);
   }
-  /* parser/parser.nit:12766 */
-  fra.me.REG[3] = NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:12771 */
+  /* parser/parser.nit:17960 */
+  fra.me.REG[3] = NEW_ABreakClosureId_parser___parser_prod___ABreakClosureId___init_abreakclosureid(fra.me.REG[3]);
+  /* parser/parser.nit:17963 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12772 */
+  /* parser/parser.nit:17964 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12772);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17964);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35549,52 +48702,43 @@ void parser___ReduceAction351___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction352___action[] = "parser::ReduceAction352::(parser::ReduceAction::action)";
-void parser___ReduceAction352___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction475___action[] = "parser::ReduceAction475::(parser::ReduceAction::action)";
+void parser___ReduceAction475___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12777;
-  fra.me.meth = LOCATE_parser___ReduceAction352___action;
+  fra.me.line = 17969;
+  fra.me.meth = LOCATE_parser___ReduceAction475___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12779 */
+  /* parser/parser.nit:17971 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12780 */
+  /* parser/parser.nit:17972 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12781 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12783 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12783);
-  }
-  /* parser/parser.nit:12785 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:17974 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12785);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17974);
   }
-  /* parser/parser.nit:12786 */
-  fra.me.REG[3] = NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:12791 */
+  /* parser/parser.nit:17975 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:17980 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12792 */
+  /* parser/parser.nit:17981 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12792);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 17981);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35602,15 +48746,15 @@ void parser___ReduceAction352___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction353___action[] = "parser::ReduceAction353::(parser::ReduceAction::action)";
-void parser___ReduceAction353___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction476___action[] = "parser::ReduceAction476::(parser::ReduceAction::action)";
+void parser___ReduceAction476___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12797;
-  fra.me.meth = LOCATE_parser___ReduceAction353___action;
+  fra.me.line = 17986;
+  fra.me.meth = LOCATE_parser___ReduceAction476___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -35621,33 +48765,33 @@ void parser___ReduceAction353___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:12799 */
+  /* parser/parser.nit:17988 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12800 */
+  /* parser/parser.nit:17989 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12801 */
+  /* parser/parser.nit:17990 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12803 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
+  /* parser/parser.nit:17992 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12803);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17992);
   }
-  /* parser/parser.nit:12805 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:17994 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12805);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 17994);
   }
-  /* parser/parser.nit:12806 */
-  fra.me.REG[3] = NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:12811 */
+  /* parser/parser.nit:17995 */
+  fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:18003 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12812 */
+  /* parser/parser.nit:18004 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12812);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18004);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35655,15 +48799,15 @@ void parser___ReduceAction353___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction354___action[] = "parser::ReduceAction354::(parser::ReduceAction::action)";
-void parser___ReduceAction354___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction477___action[] = "parser::ReduceAction477::(parser::ReduceAction::action)";
+void parser___ReduceAction477___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12817;
-  fra.me.meth = LOCATE_parser___ReduceAction354___action;
+  fra.me.line = 18009;
+  fra.me.meth = LOCATE_parser___ReduceAction477___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -35675,41 +48819,41 @@ void parser___ReduceAction354___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:12819 */
+  /* parser/parser.nit:18011 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12820 */
+  /* parser/parser.nit:18012 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12821 */
+  /* parser/parser.nit:18013 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12822 */
+  /* parser/parser.nit:18014 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12824 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
+  /* parser/parser.nit:18016 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12824);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18016);
   }
-  /* parser/parser.nit:12826 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:18018 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12826);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18018);
   }
-  /* parser/parser.nit:12828 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:18020 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12828);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18020);
   }
-  /* parser/parser.nit:12829 */
-  fra.me.REG[3] = NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:12834 */
+  /* parser/parser.nit:18021 */
+  fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:18029 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12835 */
+  /* parser/parser.nit:18030 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12835);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18030);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35717,43 +48861,61 @@ void parser___ReduceAction354___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction355___action[] = "parser::ReduceAction355::(parser::ReduceAction::action)";
-void parser___ReduceAction355___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction478___action[] = "parser::ReduceAction478::(parser::ReduceAction::action)";
+void parser___ReduceAction478___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12840;
-  fra.me.meth = LOCATE_parser___ReduceAction355___action;
+  fra.me.line = 18035;
+  fra.me.meth = LOCATE_parser___ReduceAction478___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12842 */
+  /* parser/parser.nit:18037 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12843 */
+  /* parser/parser.nit:18038 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12845 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwabort, ID_parser___parser_nodes___TKwabort)) /*cast nullable TKwabort*/;
+  /* parser/parser.nit:18039 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18040 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18042 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12845);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18042);
   }
-  /* parser/parser.nit:12846 */
-  fra.me.REG[3] = NEW_AAbortExpr_parser___parser_prod___AAbortExpr___init_aabortexpr(fra.me.REG[3]);
-  /* parser/parser.nit:12849 */
+  /* parser/parser.nit:18044 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18044);
+  }
+  /* parser/parser.nit:18046 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18046);
+  }
+  /* parser/parser.nit:18047 */
+  fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:18055 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12850 */
+  /* parser/parser.nit:18056 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12850);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18056);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35761,43 +48923,70 @@ void parser___ReduceAction355___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction356___action[] = "parser::ReduceAction356::(parser::ReduceAction::action)";
-void parser___ReduceAction356___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction479___action[] = "parser::ReduceAction479::(parser::ReduceAction::action)";
+void parser___ReduceAction479___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12855;
-  fra.me.meth = LOCATE_parser___ReduceAction356___action;
+  fra.me.line = 18061;
+  fra.me.meth = LOCATE_parser___ReduceAction479___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12857 */
+  /* parser/parser.nit:18063 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12858 */
+  /* parser/parser.nit:18064 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12860 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast nullable TKwcontinue*/;
+  /* parser/parser.nit:18065 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18066 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18067 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18069 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18069);
+  }
+  /* parser/parser.nit:18071 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12860);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18071);
   }
-  /* parser/parser.nit:12861 */
-  fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:12866 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12867 */
+  /* parser/parser.nit:18073 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18073);
+  }
+  /* parser/parser.nit:18075 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18075);
+  }
+  /* parser/parser.nit:18076 */
+  fra.me.REG[4] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[3], NIT_NULL, NIT_NULL, fra.me.REG[4]);
+  /* parser/parser.nit:18084 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:18085 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12867);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18085);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35805,52 +48994,72 @@ void parser___ReduceAction356___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction357___action[] = "parser::ReduceAction357::(parser::ReduceAction::action)";
-void parser___ReduceAction357___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction480___action[] = "parser::ReduceAction480::(parser::ReduceAction::action)";
+void parser___ReduceAction480___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 = 12872;
-  fra.me.meth = LOCATE_parser___ReduceAction357___action;
+  fra.me.line = 18090;
+  fra.me.meth = LOCATE_parser___ReduceAction480___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12874 */
+  /* parser/parser.nit:18092 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12875 */
+  /* parser/parser.nit:18093 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12876 */
+  /* parser/parser.nit:18094 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12878 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast nullable TKwcontinue*/;
+  /* parser/parser.nit:18095 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18096 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18097 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18099 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12878);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18099);
   }
-  /* parser/parser.nit:12880 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:18101 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12880);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18101);
   }
-  /* parser/parser.nit:12881 */
-  fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:12886 */
+  /* parser/parser.nit:18103 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18103);
+  }
+  /* parser/parser.nit:18105 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18105);
+  }
+  /* parser/parser.nit:18106 */
+  fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:18114 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12887 */
+  /* parser/parser.nit:18115 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12887);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18115);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35858,52 +49067,81 @@ void parser___ReduceAction357___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction358___action[] = "parser::ReduceAction358::(parser::ReduceAction::action)";
-void parser___ReduceAction358___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction481___action[] = "parser::ReduceAction481::(parser::ReduceAction::action)";
+void parser___ReduceAction481___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12892;
-  fra.me.meth = LOCATE_parser___ReduceAction358___action;
+  fra.me.line = 18120;
+  fra.me.meth = LOCATE_parser___ReduceAction481___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12894 */
+  /* parser/parser.nit:18122 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12895 */
+  /* parser/parser.nit:18123 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12896 */
+  /* parser/parser.nit:18124 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12898 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast nullable TKwcontinue*/;
+  /* parser/parser.nit:18125 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18126 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18127 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18128 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18130 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18130);
+  }
+  /* parser/parser.nit:18132 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18132);
+  }
+  /* parser/parser.nit:18134 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12898);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18134);
   }
-  /* parser/parser.nit:12900 */
+  /* parser/parser.nit:18136 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12900);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18136);
   }
-  /* parser/parser.nit:12901 */
-  fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:12906 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12907 */
+  /* parser/parser.nit:18138 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18138);
+  }
+  /* parser/parser.nit:18139 */
+  fra.me.REG[5] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser.nit:18147 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:18148 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12907);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18148);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35911,17 +49149,17 @@ void parser___ReduceAction358___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction359___action[] = "parser::ReduceAction359::(parser::ReduceAction::action)";
-void parser___ReduceAction359___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction482___action[] = "parser::ReduceAction482::(parser::ReduceAction::action)";
+void parser___ReduceAction482___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12912;
-  fra.me.meth = LOCATE_parser___ReduceAction359___action;
+  fra.me.line = 18153;
+  fra.me.meth = LOCATE_parser___ReduceAction482___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -35929,43 +49167,63 @@ void parser___ReduceAction359___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = 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:12914 */
+  /* parser/parser.nit:18155 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12915 */
+  /* parser/parser.nit:18156 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12916 */
+  /* parser/parser.nit:18157 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12917 */
+  /* parser/parser.nit:18158 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18159 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12919 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast nullable TKwcontinue*/;
+  /* parser/parser.nit:18160 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18161 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18163 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12919);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18163);
   }
-  /* parser/parser.nit:12921 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:18165 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18165);
+  }
+  /* parser/parser.nit:18167 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18167);
+  }
+  /* parser/parser.nit:18169 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12921);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18169);
   }
-  /* parser/parser.nit:12923 */
+  /* parser/parser.nit:18171 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12923);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18171);
   }
-  /* parser/parser.nit:12924 */
-  fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:12929 */
+  /* parser/parser.nit:18172 */
+  fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:18180 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:12930 */
+  /* parser/parser.nit:18181 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12930);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18181);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -35973,17 +49231,17 @@ void parser___ReduceAction359___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction366___action[] = "parser::ReduceAction366::(parser::ReduceAction::action)";
-void parser___ReduceAction366___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction483___action[] = "parser::ReduceAction483::(parser::ReduceAction::action)";
+void parser___ReduceAction483___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12935;
-  fra.me.meth = LOCATE_parser___ReduceAction366___action;
+  fra.me.line = 18186;
+  fra.me.meth = LOCATE_parser___ReduceAction483___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -35992,49 +49250,71 @@ void parser___ReduceAction366___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:12937 */
+  /* parser/parser.nit:18188 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12938 */
+  /* parser/parser.nit:18189 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12939 */
+  /* parser/parser.nit:18190 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12940 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12941 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12942 */
+  /* parser/parser.nit:18191 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18192 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12943 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12945 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:18193 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18194 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18195 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18197 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12945);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18197);
   }
-  /* parser/parser.nit:12947 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:18199 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12947);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18199);
   }
-  /* parser/parser.nit:12949 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  /* parser/parser.nit:18201 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12949);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18201);
   }
-  /* parser/parser.nit:12950 */
-  fra.me.REG[6] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[6]);
-  /* parser/parser.nit:12956 */
+  /* parser/parser.nit:18203 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18203);
+  }
+  /* parser/parser.nit:18205 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18205);
+  }
+  /* parser/parser.nit:18207 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18207);
+  }
+  /* parser/parser.nit:18208 */
+  fra.me.REG[6] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[8], fra.me.REG[7], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser.nit:18216 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* parser/parser.nit:12957 */
+  /* parser/parser.nit:18217 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12957);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18217);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36042,15 +49322,15 @@ void parser___ReduceAction366___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction367___action[] = "parser::ReduceAction367::(parser::ReduceAction::action)";
-void parser___ReduceAction367___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction484___action[] = "parser::ReduceAction484::(parser::ReduceAction::action)";
+void parser___ReduceAction484___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 = 12962;
-  fra.me.meth = LOCATE_parser___ReduceAction367___action;
+  fra.me.line = 18222;
+  fra.me.meth = LOCATE_parser___ReduceAction484___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
@@ -36063,37 +49343,53 @@ void parser___ReduceAction367___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:12964 */
+  /* parser/parser.nit:18224 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12965 */
+  /* parser/parser.nit:18225 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12966 */
+  /* parser/parser.nit:18226 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12967 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12968 */
-  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* parser/parser.nit:12970 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:18227 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18228 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18229 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18230 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18232 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12970);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18232);
   }
-  /* parser/parser.nit:12972 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  /* parser/parser.nit:18234 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12972);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18234);
   }
-  /* parser/parser.nit:12973 */
-  fra.me.REG[5] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser.nit:12979 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:12980 */
+  /* parser/parser.nit:18236 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18236);
+  }
+  /* parser/parser.nit:18238 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18238);
+  }
+  /* parser/parser.nit:18239 */
+  fra.me.REG[3] = NEW_AAttrAssignExpr_parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18245 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:18246 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12980);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18246);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36101,17 +49397,17 @@ void parser___ReduceAction367___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction368___action[] = "parser::ReduceAction368::(parser::ReduceAction::action)";
-void parser___ReduceAction368___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction485___action[] = "parser::ReduceAction485::(parser::ReduceAction::action)";
+void parser___ReduceAction485___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 = 12985;
-  fra.me.meth = LOCATE_parser___ReduceAction368___action;
+  fra.me.line = 18251;
+  fra.me.meth = LOCATE_parser___ReduceAction485___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -36120,61 +49416,45 @@ void parser___ReduceAction368___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:12987 */
+  /* parser/parser.nit:18253 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:12988 */
+  /* parser/parser.nit:18254 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12989 */
+  /* parser/parser.nit:18255 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12990 */
+  /* parser/parser.nit:18256 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12991 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12992 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12993 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:12994 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:12996 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12996);
-  }
-  /* parser/parser.nit:12998 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:18257 */
+  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:18259 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12998);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18259);
   }
-  /* parser/parser.nit:13000 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  /* parser/parser.nit:18261 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13000);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18261);
   }
-  /* parser/parser.nit:13002 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:18263 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13002);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18263);
   }
-  /* parser/parser.nit:13003 */
-  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:13004 */
-  fra.me.REG[7] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[7]);
-  /* parser/parser.nit:13010 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* parser/parser.nit:13011 */
+  /* parser/parser.nit:18264 */
+  fra.me.REG[3] = NEW_AAttrAssignExpr_parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18270 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:18271 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13011);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18271);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36182,15 +49462,15 @@ void parser___ReduceAction368___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction369___action[] = "parser::ReduceAction369::(parser::ReduceAction::action)";
-void parser___ReduceAction369___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction486___action[] = "parser::ReduceAction486::(parser::ReduceAction::action)";
+void parser___ReduceAction486___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13016;
-  fra.me.meth = LOCATE_parser___ReduceAction369___action;
+  fra.me.line = 18276;
+  fra.me.meth = LOCATE_parser___ReduceAction486___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
@@ -36204,48 +49484,61 @@ void parser___ReduceAction369___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:13018 */
+  /* parser/parser.nit:18278 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13019 */
+  /* parser/parser.nit:18279 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13020 */
+  /* parser/parser.nit:18280 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13021 */
+  /* parser/parser.nit:18281 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13022 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13023 */
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* parser/parser.nit:13025 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:18282 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18283 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18284 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18285 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18287 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13025);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18287);
   }
-  /* parser/parser.nit:13027 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  /* parser/parser.nit:18289 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13027);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18289);
   }
-  /* parser/parser.nit:13029 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:18291 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13029);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18291);
   }
-  /* parser/parser.nit:13030 */
-  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:13031 */
-  fra.me.REG[6] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[7], fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* parser/parser.nit:13037 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* parser/parser.nit:13038 */
+  /* parser/parser.nit:18293 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18293);
+  }
+  /* parser/parser.nit:18295 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18295);
+  }
+  /* parser/parser.nit:18296 */
+  fra.me.REG[3] = NEW_ACallAssignExpr_parser___parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18303 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:18304 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13038);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18304);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36253,52 +49546,73 @@ void parser___ReduceAction369___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction370___action[] = "parser::ReduceAction370::(parser::ReduceAction::action)";
-void parser___ReduceAction370___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction487___action[] = "parser::ReduceAction487::(parser::ReduceAction::action)";
+void parser___ReduceAction487___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13043;
-  fra.me.meth = LOCATE_parser___ReduceAction370___action;
+  fra.me.line = 18309;
+  fra.me.meth = LOCATE_parser___ReduceAction487___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:13045 */
+  /* parser/parser.nit:18311 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13046 */
+  /* parser/parser.nit:18312 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13047 */
+  /* parser/parser.nit:18313 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13049 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
+  /* parser/parser.nit:18314 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18315 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18316 */
+  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:18318 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13049);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18318);
   }
-  /* parser/parser.nit:13051 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  /* parser/parser.nit:18320 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13051);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18320);
   }
-  /* parser/parser.nit:13052 */
-  fra.me.REG[3] = NEW_ASuperExpr_parser___parser_prod___ASuperExpr___init_asuperexpr(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:13057 */
+  /* parser/parser.nit:18322 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18322);
+  }
+  /* parser/parser.nit:18324 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18324);
+  }
+  /* parser/parser.nit:18325 */
+  fra.me.REG[3] = NEW_ACallAssignExpr_parser___parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18332 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13058 */
+  /* parser/parser.nit:18333 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13058);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18333);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36306,17 +49620,17 @@ void parser___ReduceAction370___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction371___action[] = "parser::ReduceAction371::(parser::ReduceAction::action)";
-void parser___ReduceAction371___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction488___action[] = "parser::ReduceAction488::(parser::ReduceAction::action)";
+void parser___ReduceAction488___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 = 13063;
-  fra.me.meth = LOCATE_parser___ReduceAction371___action;
+  fra.me.line = 18338;
+  fra.me.meth = LOCATE_parser___ReduceAction488___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -36324,43 +49638,52 @@ void parser___ReduceAction371___action(val_t p0, val_t p1){
   fra.me.REG[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:13065 */
+  /* parser/parser.nit:18340 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13066 */
+  /* parser/parser.nit:18341 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13067 */
+  /* parser/parser.nit:18342 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13068 */
+  /* parser/parser.nit:18343 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13070 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AQualified, ID_parser___parser_nodes___AQualified)) /*cast nullable AQualified*/;
+  /* parser/parser.nit:18344 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18346 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13070);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18346);
   }
-  /* parser/parser.nit:13072 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
+  /* parser/parser.nit:18348 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13072);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18348);
   }
-  /* parser/parser.nit:13074 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  /* parser/parser.nit:18350 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13074);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18350);
   }
-  /* parser/parser.nit:13075 */
-  fra.me.REG[3] = NEW_ASuperExpr_parser___parser_prod___ASuperExpr___init_asuperexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:13080 */
+  /* parser/parser.nit:18352 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18352);
+  }
+  /* parser/parser.nit:18353 */
+  fra.me.REG[3] = NEW_ABraAssignExpr_parser___parser_prod___ABraAssignExpr___init_abraassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18359 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13081 */
+  /* parser/parser.nit:18360 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13081);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18360);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36368,17 +49691,17 @@ void parser___ReduceAction371___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction372___action[] = "parser::ReduceAction372::(parser::ReduceAction::action)";
-void parser___ReduceAction372___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction489___action[] = "parser::ReduceAction489::(parser::ReduceAction::action)";
+void parser___ReduceAction489___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 = 13086;
-  fra.me.meth = LOCATE_parser___ReduceAction372___action;
+  fra.me.line = 18365;
+  fra.me.meth = LOCATE_parser___ReduceAction489___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -36386,47 +49709,56 @@ void parser___ReduceAction372___action(val_t p0, val_t p1){
   fra.me.REG[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:13088 */
+  /* parser/parser.nit:18367 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13089 */
+  /* parser/parser.nit:18368 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13090 */
+  /* parser/parser.nit:18369 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13091 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13092 */
+  /* parser/parser.nit:18370 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13093 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13095 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:18371 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18372 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18373 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18375 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13095);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18375);
   }
-  /* parser/parser.nit:13097 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:18377 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13097);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18377);
   }
-  /* parser/parser.nit:13099 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  /* parser/parser.nit:18379 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13099);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18379);
   }
-  /* parser/parser.nit:13100 */
-  fra.me.REG[3] = NEW_AInitExpr_parser___parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:13105 */
+  /* parser/parser.nit:18381 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18381);
+  }
+  /* parser/parser.nit:18382 */
+  fra.me.REG[3] = NEW_AAttrReassignExpr_parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18388 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13106 */
+  /* parser/parser.nit:18389 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13106);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18389);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36434,17 +49766,17 @@ void parser___ReduceAction372___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction373___action[] = "parser::ReduceAction373::(parser::ReduceAction::action)";
-void parser___ReduceAction373___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction490___action[] = "parser::ReduceAction490::(parser::ReduceAction::action)";
+void parser___ReduceAction490___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 = 13111;
-  fra.me.meth = LOCATE_parser___ReduceAction373___action;
+  fra.me.line = 18394;
+  fra.me.meth = LOCATE_parser___ReduceAction490___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -36452,37 +49784,46 @@ void parser___ReduceAction373___action(val_t p0, val_t p1){
   fra.me.REG[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:13113 */
+  /* parser/parser.nit:18396 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13114 */
+  /* parser/parser.nit:18397 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13115 */
+  /* parser/parser.nit:18398 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13116 */
-  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* parser/parser.nit:13118 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:18399 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18400 */
+  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:18402 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13118);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18402);
   }
-  /* parser/parser.nit:13120 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  /* parser/parser.nit:18404 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13120);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18404);
   }
-  /* parser/parser.nit:13121 */
-  fra.me.REG[3] = NEW_AInitExpr_parser___parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:13126 */
+  /* parser/parser.nit:18406 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18406);
+  }
+  /* parser/parser.nit:18407 */
+  fra.me.REG[3] = NEW_AAttrReassignExpr_parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18413 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13127 */
+  /* parser/parser.nit:18414 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13127);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18414);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36490,17 +49831,17 @@ void parser___ReduceAction373___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction374___action[] = "parser::ReduceAction374::(parser::ReduceAction::action)";
-void parser___ReduceAction374___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction491___action[] = "parser::ReduceAction491::(parser::ReduceAction::action)";
+void parser___ReduceAction491___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13132;
-  fra.me.meth = LOCATE_parser___ReduceAction374___action;
+  fra.me.line = 18419;
+  fra.me.meth = LOCATE_parser___ReduceAction491___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -36509,53 +49850,64 @@ void parser___ReduceAction374___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:13134 */
+  /* parser/parser.nit:18421 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13135 */
+  /* parser/parser.nit:18422 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13136 */
+  /* parser/parser.nit:18423 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13137 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13138 */
+  /* parser/parser.nit:18424 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13139 */
+  /* parser/parser.nit:18425 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13141 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwdebug, ID_parser___parser_nodes___TKwdebug)) /*cast nullable TKwdebug*/;
+  /* parser/parser.nit:18426 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18427 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18428 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18430 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13141);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18430);
   }
-  /* parser/parser.nit:13143 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast nullable TKwtype*/;
+  /* parser/parser.nit:18432 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13143);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18432);
   }
-  /* parser/parser.nit:13145 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:18434 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13145);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18434);
   }
-  /* parser/parser.nit:13147 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:18436 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13147);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18436);
   }
-  /* parser/parser.nit:13148 */
-  fra.me.REG[4] = NEW_ADebugTypeExpr_parser___parser_prod___ADebugTypeExpr___init_adebugtypeexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[3], fra.me.REG[4]);
-  /* parser/parser.nit:13154 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:13155 */
+  /* parser/parser.nit:18438 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18438);
+  }
+  /* parser/parser.nit:18439 */
+  fra.me.REG[3] = NEW_ACallReassignExpr_parser___parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18446 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:18447 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13155);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18447);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36563,52 +49915,73 @@ void parser___ReduceAction374___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction375___action[] = "parser::ReduceAction375::(parser::ReduceAction::action)";
-void parser___ReduceAction375___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction492___action[] = "parser::ReduceAction492::(parser::ReduceAction::action)";
+void parser___ReduceAction492___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13160;
-  fra.me.meth = LOCATE_parser___ReduceAction375___action;
+  fra.me.line = 18452;
+  fra.me.meth = LOCATE_parser___ReduceAction492___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:13162 */
+  /* parser/parser.nit:18454 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13163 */
+  /* parser/parser.nit:18455 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13164 */
+  /* parser/parser.nit:18456 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13166 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwlabel, ID_parser___parser_nodes___TKwlabel)) /*cast nullable TKwlabel*/;
+  /* parser/parser.nit:18457 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18458 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18459 */
+  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:18461 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13166);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18461);
   }
-  /* parser/parser.nit:13168 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:18463 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13168);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18463);
   }
-  /* parser/parser.nit:13169 */
-  fra.me.REG[3] = NEW_ALabel_parser___parser_prod___ALabel___init_alabel(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:13173 */
+  /* parser/parser.nit:18465 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18465);
+  }
+  /* parser/parser.nit:18467 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18467);
+  }
+  /* parser/parser.nit:18468 */
+  fra.me.REG[3] = NEW_ACallReassignExpr_parser___parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18475 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13174 */
+  /* parser/parser.nit:18476 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13174);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18476);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36616,57 +49989,70 @@ void parser___ReduceAction375___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction376___action[] = "parser::ReduceAction376::(parser::ReduceAction::action)";
-void parser___ReduceAction376___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction493___action[] = "parser::ReduceAction493::(parser::ReduceAction::action)";
+void parser___ReduceAction493___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 = 13179;
-  fra.me.meth = LOCATE_parser___ReduceAction376___action;
+  fra.me.line = 18481;
+  fra.me.meth = LOCATE_parser___ReduceAction493___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:13181 */
+  /* parser/parser.nit:18483 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13182 */
+  /* parser/parser.nit:18484 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13183 */
-  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13185 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:18485 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18486 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18487 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18489 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18489);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:18491 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:13186 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18491);
   }
-  /* parser/parser.nit:13188 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:13189 */
+  /* parser/parser.nit:18493 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18493);
+  }
+  /* parser/parser.nit:18495 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18495);
+  }
+  /* parser/parser.nit:18496 */
+  fra.me.REG[3] = NEW_ABraReassignExpr_parser___parser_prod___ABraReassignExpr___init_abrareassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18502 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:18503 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13189);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18503);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36674,69 +50060,43 @@ void parser___ReduceAction376___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction377___action[] = "parser::ReduceAction377::(parser::ReduceAction::action)";
-void parser___ReduceAction377___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction494___action[] = "parser::ReduceAction494::(parser::ReduceAction::action)";
+void parser___ReduceAction494___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13194;
-  fra.me.meth = LOCATE_parser___ReduceAction377___action;
+  fra.me.line = 18508;
+  fra.me.meth = LOCATE_parser___ReduceAction494___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:13196 */
+  /* parser/parser.nit:18510 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13197 */
+  /* parser/parser.nit:18511 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13198 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13199 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13202 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13202);
-  }
-  /* parser/parser.nit:13203 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* parser/parser.nit:18513 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TPluseq, ID_parser___parser_nodes___TPluseq)) /*cast nullable TPluseq*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:13204 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18513);
   }
-  /* parser/parser.nit:13206 */
-  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:13207 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:13208 */
+  /* parser/parser.nit:18514 */
+  fra.me.REG[3] = NEW_APlusAssignOp_parser___parser_prod___APlusAssignOp___init_aplusassignop(fra.me.REG[3]);
+  /* parser/parser.nit:18517 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:18518 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13208);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18518);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36744,82 +50104,43 @@ void parser___ReduceAction377___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction378___action[] = "parser::ReduceAction378::(parser::ReduceAction::action)";
-void parser___ReduceAction378___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction495___action[] = "parser::ReduceAction495::(parser::ReduceAction::action)";
+void parser___ReduceAction495___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13213;
-  fra.me.meth = LOCATE_parser___ReduceAction378___action;
+  fra.me.line = 18523;
+  fra.me.meth = LOCATE_parser___ReduceAction495___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:13215 */
+  /* parser/parser.nit:18525 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13216 */
+  /* parser/parser.nit:18526 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13217 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13218 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13219 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13220 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13221 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13223 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13223);
-  }
-  /* parser/parser.nit:13225 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13225);
-  }
-  /* parser/parser.nit:13227 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13227);
-  }
-  /* parser/parser.nit:13229 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13229);
-  }
-  /* parser/parser.nit:13231 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:18528 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TMinuseq, ID_parser___parser_nodes___TMinuseq)) /*cast nullable TMinuseq*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13231);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18528);
   }
-  /* parser/parser.nit:13232 */
-  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:13240 */
+  /* parser/parser.nit:18529 */
+  fra.me.REG[3] = NEW_AMinusAssignOp_parser___parser_prod___AMinusAssignOp___init_aminusassignop(fra.me.REG[3]);
+  /* parser/parser.nit:18532 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13241 */
+  /* parser/parser.nit:18533 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13241);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18533);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36827,17 +50148,17 @@ void parser___ReduceAction378___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction379___action[] = "parser::ReduceAction379::(parser::ReduceAction::action)";
-void parser___ReduceAction379___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction496___action[] = "parser::ReduceAction496::(parser::ReduceAction::action)";
+void parser___ReduceAction496___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 = 13246;
-  fra.me.meth = LOCATE_parser___ReduceAction379___action;
+  fra.me.line = 18538;
+  fra.me.meth = LOCATE_parser___ReduceAction496___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -36845,80 +50166,43 @@ void parser___ReduceAction379___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[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:13248 */
+  /* parser/parser.nit:18540 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13249 */
+  /* parser/parser.nit:18541 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13250 */
+  /* parser/parser.nit:18542 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13251 */
+  /* parser/parser.nit:18543 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13252 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13253 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13254 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13255 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13256 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13257 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13259 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13259);
-  }
-  /* parser/parser.nit:13261 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13261);
-  }
-  /* parser/parser.nit:13263 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13263);
-  }
-  /* parser/parser.nit:13264 */
-  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:13266 */
+  /* parser/parser.nit:18545 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13266);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18545);
   }
-  /* parser/parser.nit:13268 */
+  /* parser/parser.nit:18547 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13268);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18547);
   }
-  /* parser/parser.nit:13270 */
+  /* parser/parser.nit:18549 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13270);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18549);
   }
-  /* parser/parser.nit:13271 */
-  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[9], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:13279 */
+  /* parser/parser.nit:18550 */
+  fra.me.REG[3] = NEW_ADoExpr_parser___parser_prod___ADoExpr___init_adoexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18555 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13280 */
+  /* parser/parser.nit:18556 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13280);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18556);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -36926,94 +50210,52 @@ void parser___ReduceAction379___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction380___action[] = "parser::ReduceAction380::(parser::ReduceAction::action)";
-void parser___ReduceAction380___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction497___action[] = "parser::ReduceAction497::(parser::ReduceAction::action)";
+void parser___ReduceAction497___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13285;
-  fra.me.meth = LOCATE_parser___ReduceAction380___action;
+  fra.me.line = 18561;
+  fra.me.meth = LOCATE_parser___ReduceAction497___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[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:13287 */
+  /* parser/parser.nit:18563 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13288 */
+  /* parser/parser.nit:18564 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13289 */
+  /* parser/parser.nit:18565 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13290 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13291 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13292 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13293 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13294 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13296 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13296);
-  }
-  /* parser/parser.nit:13298 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13298);
-  }
-  /* parser/parser.nit:13300 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13300);
-  }
-  /* parser/parser.nit:13301 */
-  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:13303 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13303);
-  }
-  /* parser/parser.nit:13305 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:18567 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13305);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18567);
   }
-  /* parser/parser.nit:13307 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:18569 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13307);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18569);
   }
-  /* parser/parser.nit:13308 */
-  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[9], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:13316 */
+  /* parser/parser.nit:18570 */
+  fra.me.REG[3] = NEW_ADoExpr_parser___parser_prod___ADoExpr___init_adoexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:18575 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13317 */
+  /* parser/parser.nit:18576 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13317);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18576);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -37021,17 +50263,17 @@ void parser___ReduceAction380___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction381___action[] = "parser::ReduceAction381::(parser::ReduceAction::action)";
-void parser___ReduceAction381___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction498___action[] = "parser::ReduceAction498::(parser::ReduceAction::action)";
+void parser___ReduceAction498___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 = 13322;
-  fra.me.meth = LOCATE_parser___ReduceAction381___action;
+  fra.me.line = 18581;
+  fra.me.meth = LOCATE_parser___ReduceAction498___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -37040,54 +50282,59 @@ void parser___ReduceAction381___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:13324 */
+  /* parser/parser.nit:18583 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13325 */
+  /* parser/parser.nit:18584 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13326 */
+  /* parser/parser.nit:18585 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18586 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13327 */
+  /* parser/parser.nit:18587 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13328 */
+  /* parser/parser.nit:18588 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18589 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18590 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13329 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13331 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:18591 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18593 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13331);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18593);
   }
-  /* parser/parser.nit:13333 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:18595 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13333);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18595);
   }
-  /* parser/parser.nit:13335 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:18597 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13335);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18597);
   }
-  /* parser/parser.nit:13337 */
+  /* parser/parser.nit:18599 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13337);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18599);
   }
-  /* parser/parser.nit:13338 */
-  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:13346 */
+  /* parser/parser.nit:18600 */
+  fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18606 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13347 */
+  /* parser/parser.nit:18607 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13347);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18607);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -37095,17 +50342,17 @@ void parser___ReduceAction381___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction382___action[] = "parser::ReduceAction382::(parser::ReduceAction::action)";
-void parser___ReduceAction382___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction499___action[] = "parser::ReduceAction499::(parser::ReduceAction::action)";
+void parser___ReduceAction499___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 = 13352;
-  fra.me.meth = LOCATE_parser___ReduceAction382___action;
+  fra.me.line = 18612;
+  fra.me.meth = LOCATE_parser___ReduceAction499___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -37113,71 +50360,49 @@ void parser___ReduceAction382___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:13354 */
+  /* parser/parser.nit:18614 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13355 */
+  /* parser/parser.nit:18615 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13356 */
+  /* parser/parser.nit:18616 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13357 */
+  /* parser/parser.nit:18617 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18618 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18619 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13358 */
+  /* parser/parser.nit:18620 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13359 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13360 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13361 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13362 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13364 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13364);
-  }
-  /* parser/parser.nit:13366 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13366);
-  }
-  /* parser/parser.nit:13368 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:18622 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13368);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18622);
   }
-  /* parser/parser.nit:13369 */
-  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:13371 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:18624 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13371);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18624);
   }
-  /* parser/parser.nit:13373 */
+  /* parser/parser.nit:18626 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13373);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18626);
   }
-  /* parser/parser.nit:13374 */
-  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:13382 */
+  /* parser/parser.nit:18627 */
+  fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:18633 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13383 */
+  /* parser/parser.nit:18634 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13383);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18634);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -37185,17 +50410,17 @@ void parser___ReduceAction382___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction383___action[] = "parser::ReduceAction383::(parser::ReduceAction::action)";
-void parser___ReduceAction383___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction500___action[] = "parser::ReduceAction500::(parser::ReduceAction::action)";
+void parser___ReduceAction500___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 = 13388;
-  fra.me.meth = LOCATE_parser___ReduceAction383___action;
+  fra.me.line = 18639;
+  fra.me.meth = LOCATE_parser___ReduceAction500___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -37204,66 +50429,59 @@ void parser___ReduceAction383___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:13390 */
+  /* parser/parser.nit:18641 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13391 */
+  /* parser/parser.nit:18642 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13392 */
+  /* parser/parser.nit:18643 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13393 */
+  /* parser/parser.nit:18644 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13394 */
+  /* parser/parser.nit:18645 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18646 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18647 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18648 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13395 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13396 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13398 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13398);
-  }
-  /* parser/parser.nit:13400 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:18649 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18651 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13400);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18651);
   }
-  /* parser/parser.nit:13402 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:18653 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13402);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18653);
   }
-  /* parser/parser.nit:13403 */
-  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:13405 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:18655 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13405);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18655);
   }
-  /* parser/parser.nit:13407 */
+  /* parser/parser.nit:18657 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13407);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18657);
   }
-  /* parser/parser.nit:13408 */
-  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:13416 */
+  /* parser/parser.nit:18658 */
+  fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18664 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13417 */
+  /* parser/parser.nit:18665 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13417);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18665);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -37271,17 +50489,17 @@ void parser___ReduceAction383___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction384___action[] = "parser::ReduceAction384::(parser::ReduceAction::action)";
-void parser___ReduceAction384___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction501___action[] = "parser::ReduceAction501::(parser::ReduceAction::action)";
+void parser___ReduceAction501___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 = 13422;
-  fra.me.meth = LOCATE_parser___ReduceAction384___action;
+  fra.me.line = 18670;
+  fra.me.meth = LOCATE_parser___ReduceAction501___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -37289,50 +50507,49 @@ void parser___ReduceAction384___action(val_t p0, val_t p1){
   fra.me.REG[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:13424 */
+  /* parser/parser.nit:18672 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13425 */
+  /* parser/parser.nit:18673 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13426 */
+  /* parser/parser.nit:18674 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13427 */
+  /* parser/parser.nit:18675 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13428 */
+  /* parser/parser.nit:18676 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13429 */
+  /* parser/parser.nit:18677 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13430 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13432 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:18678 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18680 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13432);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18680);
   }
-  /* parser/parser.nit:13434 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:18682 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13434);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18682);
   }
-  /* parser/parser.nit:13436 */
+  /* parser/parser.nit:18684 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13436);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18684);
   }
-  /* parser/parser.nit:13437 */
-  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:13445 */
+  /* parser/parser.nit:18685 */
+  fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:18691 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13446 */
+  /* parser/parser.nit:18692 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13446);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18692);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -37340,17 +50557,17 @@ void parser___ReduceAction384___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction385___action[] = "parser::ReduceAction385::(parser::ReduceAction::action)";
-void parser___ReduceAction385___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction502___action[] = "parser::ReduceAction502::(parser::ReduceAction::action)";
+void parser___ReduceAction502___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 = 13451;
-  fra.me.meth = LOCATE_parser___ReduceAction385___action;
+  fra.me.line = 18697;
+  fra.me.meth = LOCATE_parser___ReduceAction502___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -37358,66 +50575,51 @@ void parser___ReduceAction385___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = 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:13453 */
+  /* parser/parser.nit:18699 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13454 */
+  /* parser/parser.nit:18700 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13455 */
+  /* parser/parser.nit:18701 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13456 */
+  /* parser/parser.nit:18702 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13457 */
+  /* parser/parser.nit:18703 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13458 */
+  /* parser/parser.nit:18704 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13459 */
+  /* parser/parser.nit:18705 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13460 */
+  /* parser/parser.nit:18706 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13461 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13462 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13464 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13464);
-  }
-  /* parser/parser.nit:13466 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:18708 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13466);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18708);
   }
-  /* parser/parser.nit:13468 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:18710 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13468);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18710);
   }
-  /* parser/parser.nit:13469 */
-  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:13471 */
+  /* parser/parser.nit:18712 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13471);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18712);
   }
-  /* parser/parser.nit:13472 */
-  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:13480 */
+  /* parser/parser.nit:18713 */
+  fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:18719 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13481 */
+  /* parser/parser.nit:18720 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13481);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18720);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -37425,17 +50627,17 @@ void parser___ReduceAction385___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction386___action[] = "parser::ReduceAction386::(parser::ReduceAction::action)";
-void parser___ReduceAction386___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction505___action[] = "parser::ReduceAction505::(parser::ReduceAction::action)";
+void parser___ReduceAction505___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 = 13486;
-  fra.me.meth = LOCATE_parser___ReduceAction386___action;
+  fra.me.line = 18725;
+  fra.me.meth = LOCATE_parser___ReduceAction505___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -37443,62 +50645,43 @@ void parser___ReduceAction386___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = 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:13488 */
+  /* parser/parser.nit:18727 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13489 */
+  /* parser/parser.nit:18728 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13490 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13491 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13492 */
+  /* parser/parser.nit:18729 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13493 */
+  /* parser/parser.nit:18730 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13494 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13495 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13497 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13497);
-  }
-  /* parser/parser.nit:13499 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:18732 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwloop, ID_parser___parser_nodes___TKwloop)) /*cast nullable TKwloop*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13499);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18732);
   }
-  /* parser/parser.nit:13501 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:18734 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13501);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18734);
   }
-  /* parser/parser.nit:13502 */
-  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:13504 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:18736 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13504);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18736);
   }
-  /* parser/parser.nit:13505 */
-  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:13513 */
+  /* parser/parser.nit:18737 */
+  fra.me.REG[3] = NEW_ALoopExpr_parser___parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18742 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13514 */
+  /* parser/parser.nit:18743 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13514);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18743);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -37506,75 +50689,52 @@ void parser___ReduceAction386___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction387___action[] = "parser::ReduceAction387::(parser::ReduceAction::action)";
-void parser___ReduceAction387___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction506___action[] = "parser::ReduceAction506::(parser::ReduceAction::action)";
+void parser___ReduceAction506___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13519;
-  fra.me.meth = LOCATE_parser___ReduceAction387___action;
+  fra.me.line = 18748;
+  fra.me.meth = LOCATE_parser___ReduceAction506___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:13521 */
+  /* parser/parser.nit:18750 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13522 */
+  /* parser/parser.nit:18751 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13523 */
+  /* parser/parser.nit:18752 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13524 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13525 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13526 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13527 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13529 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13529);
-  }
-  /* parser/parser.nit:13531 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13531);
-  }
-  /* parser/parser.nit:13533 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:18754 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwloop, ID_parser___parser_nodes___TKwloop)) /*cast nullable TKwloop*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13533);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18754);
   }
-  /* parser/parser.nit:13535 */
+  /* parser/parser.nit:18756 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13535);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18756);
   }
-  /* parser/parser.nit:13536 */
-  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:13544 */
+  /* parser/parser.nit:18757 */
+  fra.me.REG[3] = NEW_ALoopExpr_parser___parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:18762 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13545 */
+  /* parser/parser.nit:18763 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13545);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18763);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -37582,17 +50742,17 @@ void parser___ReduceAction387___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction388___action[] = "parser::ReduceAction388::(parser::ReduceAction::action)";
-void parser___ReduceAction388___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction507___action[] = "parser::ReduceAction507::(parser::ReduceAction::action)";
+void parser___ReduceAction507___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13550;
-  fra.me.meth = LOCATE_parser___ReduceAction388___action;
+  fra.me.line = 18768;
+  fra.me.meth = LOCATE_parser___ReduceAction507___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -37602,71 +50762,63 @@ void parser___ReduceAction388___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:13552 */
+  /* parser/parser.nit:18770 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13553 */
+  /* parser/parser.nit:18771 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13554 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13555 */
+  /* parser/parser.nit:18772 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13556 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13557 */
+  /* parser/parser.nit:18773 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13558 */
+  /* parser/parser.nit:18774 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13559 */
+  /* parser/parser.nit:18775 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13560 */
+  /* parser/parser.nit:18776 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13561 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13563 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:18777 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18779 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwwhile, ID_parser___parser_nodes___TKwwhile)) /*cast nullable TKwwhile*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13563);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18779);
   }
-  /* parser/parser.nit:13565 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:18781 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13565);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18781);
   }
-  /* parser/parser.nit:13567 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:18783 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13567);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18783);
   }
-  /* parser/parser.nit:13568 */
-  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:13570 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:18785 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13570);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18785);
   }
-  /* parser/parser.nit:13572 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:18787 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13572);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18787);
   }
-  /* parser/parser.nit:13573 */
-  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:13581 */
+  /* parser/parser.nit:18788 */
+  fra.me.REG[3] = NEW_AWhileExpr_parser___parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18795 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13582 */
+  /* parser/parser.nit:18796 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13582);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18796);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -37674,17 +50826,17 @@ void parser___ReduceAction388___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction389___action[] = "parser::ReduceAction389::(parser::ReduceAction::action)";
-void parser___ReduceAction389___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction508___action[] = "parser::ReduceAction508::(parser::ReduceAction::action)";
+void parser___ReduceAction508___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 = 13587;
-  fra.me.meth = LOCATE_parser___ReduceAction389___action;
+  fra.me.line = 18801;
+  fra.me.meth = LOCATE_parser___ReduceAction508___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -37693,68 +50845,55 @@ void parser___ReduceAction389___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:13589 */
+  /* parser/parser.nit:18803 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13590 */
+  /* parser/parser.nit:18804 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13591 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13592 */
+  /* parser/parser.nit:18805 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13593 */
+  /* parser/parser.nit:18806 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13594 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13595 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13596 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13598 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13598);
-  }
-  /* parser/parser.nit:13600 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:18807 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18808 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18809 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18811 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwwhile, ID_parser___parser_nodes___TKwwhile)) /*cast nullable TKwwhile*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13600);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18811);
   }
-  /* parser/parser.nit:13602 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:18813 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13602);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18813);
   }
-  /* parser/parser.nit:13603 */
-  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:13605 */
+  /* parser/parser.nit:18815 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13605);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18815);
   }
-  /* parser/parser.nit:13607 */
+  /* parser/parser.nit:18817 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13607);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18817);
   }
-  /* parser/parser.nit:13608 */
-  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:13616 */
+  /* parser/parser.nit:18818 */
+  fra.me.REG[3] = NEW_AWhileExpr_parser___parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:18825 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13617 */
+  /* parser/parser.nit:18826 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13617);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18826);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -37762,17 +50901,17 @@ void parser___ReduceAction389___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction390___action[] = "parser::ReduceAction390::(parser::ReduceAction::action)";
-void parser___ReduceAction390___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction509___action[] = "parser::ReduceAction509::(parser::ReduceAction::action)";
+void parser___ReduceAction509___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 = 13622;
-  fra.me.meth = LOCATE_parser___ReduceAction390___action;
+  fra.me.line = 18831;
+  fra.me.meth = LOCATE_parser___ReduceAction509___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -37781,47 +50920,89 @@ void parser___ReduceAction390___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:13624 */
+  /* parser/parser.nit:18833 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13625 */
+  /* parser/parser.nit:18834 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13626 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13627 */
+  /* parser/parser.nit:18835 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13628 */
+  /* parser/parser.nit:18836 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13629 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13631 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:18837 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18838 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18839 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18840 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18841 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18842 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18843 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18844 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18845 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18846 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18847 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:18849 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast nullable TKwfor*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13631);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18849);
   }
-  /* parser/parser.nit:13633 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:18851 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13633);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18851);
   }
-  /* parser/parser.nit:13635 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:18852 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[7]);
+  fra.me.REG[9] = fra.me.REG[7];
+  /* parser/parser.nit:18854 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13635);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18854);
   }
-  /* parser/parser.nit:13636 */
-  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:13644 */
+  /* parser/parser.nit:18856 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18856);
+  }
+  /* parser/parser.nit:18858 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18858);
+  }
+  /* parser/parser.nit:18860 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18860);
+  }
+  /* parser/parser.nit:18861 */
+  fra.me.REG[3] = NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[8], fra.me.REG[9], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18869 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13645 */
+  /* parser/parser.nit:18870 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13645);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18870);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -37829,17 +51010,17 @@ void parser___ReduceAction390___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction391___action[] = "parser::ReduceAction391::(parser::ReduceAction::action)";
-void parser___ReduceAction391___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction510___action[] = "parser::ReduceAction510::(parser::ReduceAction::action)";
+void parser___ReduceAction510___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 = 13650;
-  fra.me.meth = LOCATE_parser___ReduceAction391___action;
+  fra.me.line = 18875;
+  fra.me.meth = LOCATE_parser___ReduceAction510___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -37849,62 +51030,84 @@ void parser___ReduceAction391___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:13652 */
+  /* parser/parser.nit:18877 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13653 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13654 */
+  /* parser/parser.nit:18878 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13655 */
+  /* parser/parser.nit:18879 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13656 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13657 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13658 */
+  /* parser/parser.nit:18880 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13659 */
+  /* parser/parser.nit:18881 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13660 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13662 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:18882 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18883 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18884 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18885 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18886 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18887 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18888 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18889 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:18891 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast nullable TKwfor*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13662);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18891);
   }
-  /* parser/parser.nit:13664 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:18893 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13664);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18893);
   }
-  /* parser/parser.nit:13666 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:18894 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[7]);
+  fra.me.REG[9] = fra.me.REG[7];
+  /* parser/parser.nit:18896 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13666);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18896);
   }
-  /* parser/parser.nit:13667 */
-  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:13669 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:18898 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13669);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18898);
   }
-  /* parser/parser.nit:13670 */
-  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:13678 */
+  /* parser/parser.nit:18900 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18900);
+  }
+  /* parser/parser.nit:18902 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18902);
+  }
+  /* parser/parser.nit:18903 */
+  fra.me.REG[3] = NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[8], fra.me.REG[9], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:18911 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13679 */
+  /* parser/parser.nit:18912 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13679);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18912);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -37912,17 +51115,17 @@ void parser___ReduceAction391___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction392___action[] = "parser::ReduceAction392::(parser::ReduceAction::action)";
-void parser___ReduceAction392___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction511___action[] = "parser::ReduceAction511::(parser::ReduceAction::action)";
+void parser___ReduceAction511___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13684;
-  fra.me.meth = LOCATE_parser___ReduceAction392___action;
+  fra.me.line = 18917;
+  fra.me.meth = LOCATE_parser___ReduceAction511___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -37932,58 +51135,79 @@ void parser___ReduceAction392___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:13686 */
+  /* parser/parser.nit:18919 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13687 */
+  /* parser/parser.nit:18920 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13688 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13689 */
+  /* parser/parser.nit:18921 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13690 */
+  /* parser/parser.nit:18922 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13691 */
+  /* parser/parser.nit:18923 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18924 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13692 */
-  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:13694 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:18925 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18926 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18927 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18928 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18929 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18930 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18931 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18932 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:18934 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast nullable TKwfor*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13694);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18934);
   }
-  /* parser/parser.nit:13696 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:18936 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13696);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18936);
   }
-  /* parser/parser.nit:13698 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:18937 */
+  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:18939 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13698);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18939);
   }
-  /* parser/parser.nit:13699 */
-  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:13701 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:18941 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13701);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18941);
   }
-  /* parser/parser.nit:13702 */
-  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:13710 */
+  /* parser/parser.nit:18943 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18943);
+  }
+  /* parser/parser.nit:18944 */
+  fra.me.REG[3] = NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[7], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:18952 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13711 */
+  /* parser/parser.nit:18953 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13711);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18953);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -37991,43 +51215,95 @@ void parser___ReduceAction392___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction393___action[] = "parser::ReduceAction393::(parser::ReduceAction::action)";
-void parser___ReduceAction393___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction512___action[] = "parser::ReduceAction512::(parser::ReduceAction::action)";
+void parser___ReduceAction512___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13716;
-  fra.me.meth = LOCATE_parser___ReduceAction393___action;
+  fra.me.line = 18958;
+  fra.me.meth = LOCATE_parser___ReduceAction512___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:13718 */
+  /* parser/parser.nit:18960 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13719 */
+  /* parser/parser.nit:18961 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13721 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:18962 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18963 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18964 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18965 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18966 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18967 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18968 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18969 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18970 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:18971 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:18973 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast nullable TKwfor*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13721);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18973);
   }
-  /* parser/parser.nit:13722 */
-  fra.me.REG[3] = NEW_ASimpleClosureId_parser___parser_prod___ASimpleClosureId___init_asimpleclosureid(fra.me.REG[3]);
-  /* parser/parser.nit:13725 */
+  /* parser/parser.nit:18975 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18975);
+  }
+  /* parser/parser.nit:18976 */
+  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:18978 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18978);
+  }
+  /* parser/parser.nit:18980 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18980);
+  }
+  /* parser/parser.nit:18982 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 18982);
+  }
+  /* parser/parser.nit:18983 */
+  fra.me.REG[3] = NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[7], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:18991 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13726 */
+  /* parser/parser.nit:18992 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13726);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 18992);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38035,43 +51311,63 @@ void parser___ReduceAction393___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction394___action[] = "parser::ReduceAction394::(parser::ReduceAction::action)";
-void parser___ReduceAction394___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction513___action[] = "parser::ReduceAction513::(parser::ReduceAction::action)";
+void parser___ReduceAction513___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 = 13731;
-  fra.me.meth = LOCATE_parser___ReduceAction394___action;
+  fra.me.line = 18997;
+  fra.me.meth = LOCATE_parser___ReduceAction513___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:13733 */
+  /* parser/parser.nit:18999 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13734 */
+  /* parser/parser.nit:19000 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13736 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
+  /* parser/parser.nit:19001 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19002 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19003 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19005 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast nullable TKwassert*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13736);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19005);
   }
-  /* parser/parser.nit:13737 */
-  fra.me.REG[3] = NEW_ABreakClosureId_parser___parser_prod___ABreakClosureId___init_abreakclosureid(fra.me.REG[3]);
-  /* parser/parser.nit:13740 */
+  /* parser/parser.nit:19007 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19007);
+  }
+  /* parser/parser.nit:19009 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19009);
+  }
+  /* parser/parser.nit:19010 */
+  fra.me.REG[3] = NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19016 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13741 */
+  /* parser/parser.nit:19017 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13741);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19017);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38079,43 +51375,72 @@ void parser___ReduceAction394___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction395___action[] = "parser::ReduceAction395::(parser::ReduceAction::action)";
-void parser___ReduceAction395___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction514___action[] = "parser::ReduceAction514::(parser::ReduceAction::action)";
+void parser___ReduceAction514___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 = 13746;
-  fra.me.meth = LOCATE_parser___ReduceAction395___action;
+  fra.me.line = 19022;
+  fra.me.meth = LOCATE_parser___ReduceAction514___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:13748 */
+  /* parser/parser.nit:19024 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13749 */
+  /* parser/parser.nit:19025 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13751 */
+  /* parser/parser.nit:19026 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19027 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19028 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19029 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19031 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast nullable TKwassert*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19031);
+  }
+  /* parser/parser.nit:19033 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19033);
+  }
+  /* parser/parser.nit:19035 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19035);
+  }
+  /* parser/parser.nit:19037 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13751);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19037);
   }
-  /* parser/parser.nit:13752 */
-  fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:13757 */
+  /* parser/parser.nit:19038 */
+  fra.me.REG[3] = NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19044 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13758 */
+  /* parser/parser.nit:19045 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13758);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19045);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38123,15 +51448,15 @@ void parser___ReduceAction395___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction396___action[] = "parser::ReduceAction396::(parser::ReduceAction::action)";
-void parser___ReduceAction396___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction515___action[] = "parser::ReduceAction515::(parser::ReduceAction::action)";
+void parser___ReduceAction515___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13763;
-  fra.me.meth = LOCATE_parser___ReduceAction396___action;
+  fra.me.line = 19050;
+  fra.me.meth = LOCATE_parser___ReduceAction515___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -38142,33 +51467,33 @@ void parser___ReduceAction396___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:13765 */
+  /* parser/parser.nit:19052 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13766 */
+  /* parser/parser.nit:19053 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13767 */
+  /* parser/parser.nit:19054 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13769 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:19056 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast nullable TKwassert*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13769);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19056);
   }
-  /* parser/parser.nit:13771 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:19058 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13771);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19058);
   }
-  /* parser/parser.nit:13772 */
-  fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:13779 */
+  /* parser/parser.nit:19059 */
+  fra.me.REG[3] = NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:19065 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13780 */
+  /* parser/parser.nit:19066 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13780);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19066);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38176,15 +51501,15 @@ void parser___ReduceAction396___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction397___action[] = "parser::ReduceAction397::(parser::ReduceAction::action)";
-void parser___ReduceAction397___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction516___action[] = "parser::ReduceAction516::(parser::ReduceAction::action)";
+void parser___ReduceAction516___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 = 13785;
-  fra.me.meth = LOCATE_parser___ReduceAction397___action;
+  fra.me.line = 19071;
+  fra.me.meth = LOCATE_parser___ReduceAction516___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -38196,41 +51521,41 @@ void parser___ReduceAction397___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:13787 */
+  /* parser/parser.nit:19073 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13788 */
+  /* parser/parser.nit:19074 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13789 */
+  /* parser/parser.nit:19075 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13790 */
+  /* parser/parser.nit:19076 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13792 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:19078 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast nullable TKwassert*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13792);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19078);
   }
-  /* parser/parser.nit:13794 */
+  /* parser/parser.nit:19080 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13794);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19080);
   }
-  /* parser/parser.nit:13796 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:19082 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13796);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19082);
   }
-  /* parser/parser.nit:13797 */
-  fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* parser/parser.nit:13804 */
+  /* parser/parser.nit:19083 */
+  fra.me.REG[3] = NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:19089 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13805 */
+  /* parser/parser.nit:19090 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13805);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19090);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38238,72 +51563,37 @@ void parser___ReduceAction397___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction398___action[] = "parser::ReduceAction398::(parser::ReduceAction::action)";
-void parser___ReduceAction398___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction517___action[] = "parser::ReduceAction517::(parser::ReduceAction::action)";
+void parser___ReduceAction517___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13810;
-  fra.me.meth = LOCATE_parser___ReduceAction398___action;
+  fra.me.line = 19095;
+  fra.me.meth = LOCATE_parser___ReduceAction517___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:13812 */
+  /* parser/parser.nit:19097 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13813 */
+  /* parser/parser.nit:19098 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13814 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13815 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13816 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13817 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13819 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13819);
-  }
-  /* parser/parser.nit:13821 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13821);
-  }
-  /* parser/parser.nit:13823 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13823);
-  }
-  /* parser/parser.nit:13825 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13825);
-  }
-  /* parser/parser.nit:13826 */
-  fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:13833 */
+  /* parser/parser.nit:19099 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19101 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13834 */
+  /* parser/parser.nit:19102 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13834);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19102);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38311,17 +51601,17 @@ void parser___ReduceAction398___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction399___action[] = "parser::ReduceAction399::(parser::ReduceAction::action)";
-void parser___ReduceAction399___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction521___action[] = "parser::ReduceAction521::(parser::ReduceAction::action)";
+void parser___ReduceAction521___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 = 13839;
-  fra.me.meth = LOCATE_parser___ReduceAction399___action;
+  fra.me.line = 19107;
+  fra.me.meth = LOCATE_parser___ReduceAction521___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -38330,62 +51620,48 @@ void parser___ReduceAction399___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:13841 */
+  /* parser/parser.nit:19109 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13842 */
+  /* parser/parser.nit:19110 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13843 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13844 */
+  /* parser/parser.nit:19111 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13845 */
+  /* parser/parser.nit:19112 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13846 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13847 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13849 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13849);
-  }
-  /* parser/parser.nit:13851 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13851);
-  }
-  /* parser/parser.nit:13853 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:19113 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:19115 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13853);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19115);
   }
-  /* parser/parser.nit:13855 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
+  /* parser/parser.nit:19117 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13855);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19117);
   }
-  /* parser/parser.nit:13857 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19119 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13857);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19119);
   }
-  /* parser/parser.nit:13858 */
-  fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:13865 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13866 */
+  /* parser/parser.nit:19120 */
+  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:19121 */
+  fra.me.REG[6] = NEW_ABraExpr_parser___parser_prod___ABraExpr___init_abraexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser.nit:19126 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:19127 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13866);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19127);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38393,17 +51669,17 @@ void parser___ReduceAction399___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction400___action[] = "parser::ReduceAction400::(parser::ReduceAction::action)";
-void parser___ReduceAction400___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction523___action[] = "parser::ReduceAction523::(parser::ReduceAction::action)";
+void parser___ReduceAction523___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13871;
-  fra.me.meth = LOCATE_parser___ReduceAction400___action;
+  fra.me.line = 19132;
+  fra.me.meth = LOCATE_parser___ReduceAction523___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -38412,55 +51688,79 @@ void parser___ReduceAction400___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:13873 */
+  /* parser/parser.nit:19134 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13874 */
+  /* parser/parser.nit:19135 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13875 */
+  /* parser/parser.nit:19136 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13876 */
+  /* parser/parser.nit:19137 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19138 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13877 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13878 */
+  /* parser/parser.nit:19139 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19140 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13879 */
+  /* parser/parser.nit:19141 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13881 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19142 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19143 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19144 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19145 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19147 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13881);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19147);
   }
-  /* parser/parser.nit:13883 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:19149 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13883);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19149);
   }
-  /* parser/parser.nit:13885 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
+  /* parser/parser.nit:19151 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwthen, ID_parser___parser_nodes___TKwthen)) /*cast nullable TKwthen*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13885);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19151);
   }
-  /* parser/parser.nit:13887 */
+  /* parser/parser.nit:19153 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19153);
+  }
+  /* parser/parser.nit:19155 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwelse, ID_parser___parser_nodes___TKwelse)) /*cast nullable TKwelse*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19155);
+  }
+  /* parser/parser.nit:19157 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13887);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19157);
   }
-  /* parser/parser.nit:13888 */
-  fra.me.REG[3] = NEW_AAttrAssignExpr_parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:13894 */
+  /* parser/parser.nit:19158 */
+  fra.me.REG[3] = NEW_AIfexprExpr_parser___parser_prod___AIfexprExpr___init_aifexprexpr(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19166 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13895 */
+  /* parser/parser.nit:19167 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13895);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19167);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38468,64 +51768,56 @@ void parser___ReduceAction400___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction401___action[] = "parser::ReduceAction401::(parser::ReduceAction::action)";
-void parser___ReduceAction401___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction525___action[] = "parser::ReduceAction525::(parser::ReduceAction::action)";
+void parser___ReduceAction525___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13900;
-  fra.me.meth = LOCATE_parser___ReduceAction401___action;
+  fra.me.line = 19172;
+  fra.me.meth = LOCATE_parser___ReduceAction525___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:13902 */
+  /* parser/parser.nit:19174 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13903 */
+  /* parser/parser.nit:19175 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13904 */
+  /* parser/parser.nit:19176 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13905 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13906 */
-  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* parser/parser.nit:13908 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13908);
-  }
-  /* parser/parser.nit:13910 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
+  /* parser/parser.nit:19177 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19178 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19180 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13910);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19180);
   }
-  /* parser/parser.nit:13912 */
+  /* parser/parser.nit:19182 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13912);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19182);
   }
-  /* parser/parser.nit:13913 */
-  fra.me.REG[3] = NEW_AAttrAssignExpr_parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:13919 */
+  /* parser/parser.nit:19183 */
+  fra.me.REG[3] = NEW_AOrExpr_parser___parser_prod___AOrExpr___init_aorexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19187 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13920 */
+  /* parser/parser.nit:19188 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13920);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19188);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38533,83 +51825,115 @@ void parser___ReduceAction401___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction402___action[] = "parser::ReduceAction402::(parser::ReduceAction::action)";
-void parser___ReduceAction402___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction526___action[] = "parser::ReduceAction526::(parser::ReduceAction::action)";
+void parser___ReduceAction526___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13925;
-  fra.me.meth = LOCATE_parser___ReduceAction402___action;
+  fra.me.line = 19193;
+  fra.me.meth = LOCATE_parser___ReduceAction526___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:13927 */
+  /* parser/parser.nit:19195 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13928 */
+  /* parser/parser.nit:19196 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13929 */
+  /* parser/parser.nit:19197 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13930 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13931 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13932 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13933 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13934 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13936 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19198 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19199 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19201 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13936);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19201);
   }
-  /* parser/parser.nit:13938 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:19203 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13938);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19203);
   }
-  /* parser/parser.nit:13940 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  /* parser/parser.nit:19204 */
+  fra.me.REG[3] = NEW_AAndExpr_parser___parser_prod___AAndExpr___init_aandexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19208 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:19209 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13940);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19209);
   }
-  /* parser/parser.nit:13942 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction527___action[] = "parser::ReduceAction527::(parser::ReduceAction::action)";
+void parser___ReduceAction527___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 19214;
+  fra.me.meth = LOCATE_parser___ReduceAction527___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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:19216 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:19217 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19218 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19219 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19220 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19221 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19223 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13942);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19223);
   }
-  /* parser/parser.nit:13944 */
+  /* parser/parser.nit:19225 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13944);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19225);
   }
-  /* parser/parser.nit:13945 */
-  fra.me.REG[3] = NEW_ACallAssignExpr_parser___parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:13952 */
+  /* parser/parser.nit:19226 */
+  fra.me.REG[3] = NEW_AOrElseExpr_parser___parser_prod___AOrElseExpr___init_aorelseexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19230 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13953 */
+  /* parser/parser.nit:19231 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13953);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19231);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38617,73 +51941,54 @@ void parser___ReduceAction402___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction403___action[] = "parser::ReduceAction403::(parser::ReduceAction::action)";
-void parser___ReduceAction403___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction529___action[] = "parser::ReduceAction529::(parser::ReduceAction::action)";
+void parser___ReduceAction529___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13958;
-  fra.me.meth = LOCATE_parser___ReduceAction403___action;
+  fra.me.line = 19236;
+  fra.me.meth = LOCATE_parser___ReduceAction529___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:13960 */
+  /* parser/parser.nit:19238 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13961 */
+  /* parser/parser.nit:19239 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13962 */
+  /* parser/parser.nit:19240 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13963 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13964 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13965 */
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* parser/parser.nit:13967 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13967);
-  }
-  /* parser/parser.nit:13969 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13969);
-  }
-  /* parser/parser.nit:13971 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
+  /* parser/parser.nit:19241 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19243 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast nullable TKwnot*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13971);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19243);
   }
-  /* parser/parser.nit:13973 */
+  /* parser/parser.nit:19245 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13973);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19245);
   }
-  /* parser/parser.nit:13974 */
-  fra.me.REG[3] = NEW_ACallAssignExpr_parser___parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:13981 */
+  /* parser/parser.nit:19246 */
+  fra.me.REG[3] = NEW_ANotExpr_parser___parser_prod___ANotExpr___init_anotexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19250 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:13982 */
+  /* parser/parser.nit:19251 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 13982);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19251);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38691,70 +51996,56 @@ void parser___ReduceAction403___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction404___action[] = "parser::ReduceAction404::(parser::ReduceAction::action)";
-void parser___ReduceAction404___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction531___action[] = "parser::ReduceAction531::(parser::ReduceAction::action)";
+void parser___ReduceAction531___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 13987;
-  fra.me.meth = LOCATE_parser___ReduceAction404___action;
+  fra.me.line = 19256;
+  fra.me.meth = LOCATE_parser___ReduceAction531___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:13989 */
+  /* parser/parser.nit:19258 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:13990 */
+  /* parser/parser.nit:19259 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13991 */
+  /* parser/parser.nit:19260 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13992 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13993 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:13995 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13995);
-  }
-  /* parser/parser.nit:13997 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13997);
-  }
-  /* parser/parser.nit:13999 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
+  /* parser/parser.nit:19261 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19262 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19264 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 13999);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19264);
   }
-  /* parser/parser.nit:14001 */
+  /* parser/parser.nit:19266 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14001);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19266);
   }
-  /* parser/parser.nit:14002 */
-  fra.me.REG[3] = NEW_ABraAssignExpr_parser___parser_prod___ABraAssignExpr___init_abraassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14008 */
+  /* parser/parser.nit:19267 */
+  fra.me.REG[3] = NEW_AEqExpr_parser___parser_prod___AEqExpr___init_aeqexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19271 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14009 */
+  /* parser/parser.nit:19272 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14009);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19272);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38762,74 +52053,56 @@ void parser___ReduceAction404___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction405___action[] = "parser::ReduceAction405::(parser::ReduceAction::action)";
-void parser___ReduceAction405___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction532___action[] = "parser::ReduceAction532::(parser::ReduceAction::action)";
+void parser___ReduceAction532___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14014;
-  fra.me.meth = LOCATE_parser___ReduceAction405___action;
+  fra.me.line = 19277;
+  fra.me.meth = LOCATE_parser___ReduceAction532___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14016 */
+  /* parser/parser.nit:19279 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14017 */
+  /* parser/parser.nit:19280 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14018 */
+  /* parser/parser.nit:19281 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14019 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14020 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14021 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14022 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14024 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14024);
-  }
-  /* parser/parser.nit:14026 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14026);
-  }
-  /* parser/parser.nit:14028 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
+  /* parser/parser.nit:19282 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19283 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19285 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14028);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19285);
   }
-  /* parser/parser.nit:14030 */
+  /* parser/parser.nit:19287 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14030);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19287);
   }
-  /* parser/parser.nit:14031 */
-  fra.me.REG[3] = NEW_AAttrReassignExpr_parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14037 */
+  /* parser/parser.nit:19288 */
+  fra.me.REG[3] = NEW_AEeExpr_parser___parser_prod___AEeExpr___init_aeeexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19292 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14038 */
+  /* parser/parser.nit:19293 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14038);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19293);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38837,64 +52110,56 @@ void parser___ReduceAction405___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction406___action[] = "parser::ReduceAction406::(parser::ReduceAction::action)";
-void parser___ReduceAction406___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction533___action[] = "parser::ReduceAction533::(parser::ReduceAction::action)";
+void parser___ReduceAction533___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14043;
-  fra.me.meth = LOCATE_parser___ReduceAction406___action;
+  fra.me.line = 19298;
+  fra.me.meth = LOCATE_parser___ReduceAction533___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14045 */
+  /* parser/parser.nit:19300 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14046 */
+  /* parser/parser.nit:19301 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14047 */
+  /* parser/parser.nit:19302 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14048 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14049 */
-  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* parser/parser.nit:14051 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14051);
-  }
-  /* parser/parser.nit:14053 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
+  /* parser/parser.nit:19303 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19304 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19306 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14053);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19306);
   }
-  /* parser/parser.nit:14055 */
+  /* parser/parser.nit:19308 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14055);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19308);
   }
-  /* parser/parser.nit:14056 */
-  fra.me.REG[3] = NEW_AAttrReassignExpr_parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14062 */
+  /* parser/parser.nit:19309 */
+  fra.me.REG[3] = NEW_ANeExpr_parser___parser_prod___ANeExpr___init_aneexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19313 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14063 */
+  /* parser/parser.nit:19314 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14063);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19314);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38902,83 +52167,56 @@ void parser___ReduceAction406___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction407___action[] = "parser::ReduceAction407::(parser::ReduceAction::action)";
-void parser___ReduceAction407___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction534___action[] = "parser::ReduceAction534::(parser::ReduceAction::action)";
+void parser___ReduceAction534___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14068;
-  fra.me.meth = LOCATE_parser___ReduceAction407___action;
+  fra.me.line = 19319;
+  fra.me.meth = LOCATE_parser___ReduceAction534___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14070 */
+  /* parser/parser.nit:19321 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14071 */
+  /* parser/parser.nit:19322 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14072 */
+  /* parser/parser.nit:19323 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14073 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14074 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14075 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14076 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14077 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14079 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14079);
-  }
-  /* parser/parser.nit:14081 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14081);
-  }
-  /* parser/parser.nit:14083 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14083);
-  }
-  /* parser/parser.nit:14085 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
+  /* parser/parser.nit:19324 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19325 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19327 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14085);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19327);
   }
-  /* parser/parser.nit:14087 */
+  /* parser/parser.nit:19329 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14087);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19329);
   }
-  /* parser/parser.nit:14088 */
-  fra.me.REG[3] = NEW_ACallReassignExpr_parser___parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14095 */
+  /* parser/parser.nit:19330 */
+  fra.me.REG[3] = NEW_ALtExpr_parser___parser_prod___ALtExpr___init_altexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19334 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14096 */
+  /* parser/parser.nit:19335 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14096);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19335);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -38986,73 +52224,56 @@ void parser___ReduceAction407___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction408___action[] = "parser::ReduceAction408::(parser::ReduceAction::action)";
-void parser___ReduceAction408___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction535___action[] = "parser::ReduceAction535::(parser::ReduceAction::action)";
+void parser___ReduceAction535___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14101;
-  fra.me.meth = LOCATE_parser___ReduceAction408___action;
+  fra.me.line = 19340;
+  fra.me.meth = LOCATE_parser___ReduceAction535___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14103 */
+  /* parser/parser.nit:19342 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14104 */
+  /* parser/parser.nit:19343 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14105 */
+  /* parser/parser.nit:19344 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14106 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14107 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14108 */
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* parser/parser.nit:14110 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14110);
-  }
-  /* parser/parser.nit:14112 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14112);
-  }
-  /* parser/parser.nit:14114 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
+  /* parser/parser.nit:19345 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19346 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19348 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14114);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19348);
   }
-  /* parser/parser.nit:14116 */
+  /* parser/parser.nit:19350 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14116);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19350);
   }
-  /* parser/parser.nit:14117 */
-  fra.me.REG[3] = NEW_ACallReassignExpr_parser___parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14124 */
+  /* parser/parser.nit:19351 */
+  fra.me.REG[3] = NEW_ALeExpr_parser___parser_prod___ALeExpr___init_aleexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19355 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14125 */
+  /* parser/parser.nit:19356 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14125);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19356);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39060,70 +52281,56 @@ void parser___ReduceAction408___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction409___action[] = "parser::ReduceAction409::(parser::ReduceAction::action)";
-void parser___ReduceAction409___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction536___action[] = "parser::ReduceAction536::(parser::ReduceAction::action)";
+void parser___ReduceAction536___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14130;
-  fra.me.meth = LOCATE_parser___ReduceAction409___action;
+  fra.me.line = 19361;
+  fra.me.meth = LOCATE_parser___ReduceAction536___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14132 */
+  /* parser/parser.nit:19363 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14133 */
+  /* parser/parser.nit:19364 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14134 */
+  /* parser/parser.nit:19365 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14135 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14136 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14138 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14138);
-  }
-  /* parser/parser.nit:14140 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14140);
-  }
-  /* parser/parser.nit:14142 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
+  /* parser/parser.nit:19366 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19367 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19369 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14142);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19369);
   }
-  /* parser/parser.nit:14144 */
+  /* parser/parser.nit:19371 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14144);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19371);
   }
-  /* parser/parser.nit:14145 */
-  fra.me.REG[3] = NEW_ABraReassignExpr_parser___parser_prod___ABraReassignExpr___init_abrareassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14151 */
+  /* parser/parser.nit:19372 */
+  fra.me.REG[3] = NEW_ALlExpr_parser___parser_prod___ALlExpr___init_allexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19376 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14152 */
+  /* parser/parser.nit:19377 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14152);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19377);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39131,43 +52338,56 @@ void parser___ReduceAction409___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction410___action[] = "parser::ReduceAction410::(parser::ReduceAction::action)";
-void parser___ReduceAction410___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction537___action[] = "parser::ReduceAction537::(parser::ReduceAction::action)";
+void parser___ReduceAction537___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14157;
-  fra.me.meth = LOCATE_parser___ReduceAction410___action;
+  fra.me.line = 19382;
+  fra.me.meth = LOCATE_parser___ReduceAction537___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14159 */
+  /* parser/parser.nit:19384 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14160 */
+  /* parser/parser.nit:19385 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14162 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TPluseq, ID_parser___parser_nodes___TPluseq)) /*cast nullable TPluseq*/;
+  /* parser/parser.nit:19386 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19387 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19388 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19390 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14162);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19390);
   }
-  /* parser/parser.nit:14163 */
-  fra.me.REG[3] = NEW_APlusAssignOp_parser___parser_prod___APlusAssignOp___init_aplusassignop(fra.me.REG[3]);
-  /* parser/parser.nit:14166 */
+  /* parser/parser.nit:19392 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19392);
+  }
+  /* parser/parser.nit:19393 */
+  fra.me.REG[3] = NEW_AGtExpr_parser___parser_prod___AGtExpr___init_agtexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19397 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14167 */
+  /* parser/parser.nit:19398 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14167);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19398);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39175,43 +52395,56 @@ void parser___ReduceAction410___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction411___action[] = "parser::ReduceAction411::(parser::ReduceAction::action)";
-void parser___ReduceAction411___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction538___action[] = "parser::ReduceAction538::(parser::ReduceAction::action)";
+void parser___ReduceAction538___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14172;
-  fra.me.meth = LOCATE_parser___ReduceAction411___action;
+  fra.me.line = 19403;
+  fra.me.meth = LOCATE_parser___ReduceAction538___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14174 */
+  /* parser/parser.nit:19405 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14175 */
+  /* parser/parser.nit:19406 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14177 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TMinuseq, ID_parser___parser_nodes___TMinuseq)) /*cast nullable TMinuseq*/;
+  /* parser/parser.nit:19407 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19408 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19409 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19411 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14177);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19411);
   }
-  /* parser/parser.nit:14178 */
-  fra.me.REG[3] = NEW_AMinusAssignOp_parser___parser_prod___AMinusAssignOp___init_aminusassignop(fra.me.REG[3]);
-  /* parser/parser.nit:14181 */
+  /* parser/parser.nit:19413 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19413);
+  }
+  /* parser/parser.nit:19414 */
+  fra.me.REG[3] = NEW_AGeExpr_parser___parser_prod___AGeExpr___init_ageexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19418 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14182 */
+  /* parser/parser.nit:19419 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14182);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19419);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39219,61 +52452,56 @@ void parser___ReduceAction411___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction412___action[] = "parser::ReduceAction412::(parser::ReduceAction::action)";
-void parser___ReduceAction412___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction539___action[] = "parser::ReduceAction539::(parser::ReduceAction::action)";
+void parser___ReduceAction539___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14187;
-  fra.me.meth = LOCATE_parser___ReduceAction412___action;
+  fra.me.line = 19424;
+  fra.me.meth = LOCATE_parser___ReduceAction539___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14189 */
+  /* parser/parser.nit:19426 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14190 */
+  /* parser/parser.nit:19427 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14191 */
+  /* parser/parser.nit:19428 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14192 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14194 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14194);
-  }
-  /* parser/parser.nit:14196 */
+  /* parser/parser.nit:19429 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19430 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19432 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14196);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19432);
   }
-  /* parser/parser.nit:14198 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:19434 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14198);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19434);
   }
-  /* parser/parser.nit:14199 */
-  fra.me.REG[3] = NEW_ADoExpr_parser___parser_prod___ADoExpr___init_adoexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14204 */
+  /* parser/parser.nit:19435 */
+  fra.me.REG[3] = NEW_AGgExpr_parser___parser_prod___AGgExpr___init_aggexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19439 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14205 */
+  /* parser/parser.nit:19440 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14205);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19440);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39281,15 +52509,15 @@ void parser___ReduceAction412___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction413___action[] = "parser::ReduceAction413::(parser::ReduceAction::action)";
-void parser___ReduceAction413___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction540___action[] = "parser::ReduceAction540::(parser::ReduceAction::action)";
+void parser___ReduceAction540___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14210;
-  fra.me.meth = LOCATE_parser___ReduceAction413___action;
+  fra.me.line = 19445;
+  fra.me.meth = LOCATE_parser___ReduceAction540___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -39300,33 +52528,37 @@ void parser___ReduceAction413___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:14212 */
+  /* parser/parser.nit:19447 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14213 */
+  /* parser/parser.nit:19448 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14214 */
+  /* parser/parser.nit:19449 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14216 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:19450 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19451 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19453 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14216);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19453);
   }
-  /* parser/parser.nit:14218 */
+  /* parser/parser.nit:19455 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14218);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19455);
   }
-  /* parser/parser.nit:14219 */
-  fra.me.REG[3] = NEW_ADoExpr_parser___parser_prod___ADoExpr___init_adoexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:14224 */
+  /* parser/parser.nit:19456 */
+  fra.me.REG[3] = NEW_AStarshipExpr_parser___parser_prod___AStarshipExpr___init_astarshipexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19460 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14225 */
+  /* parser/parser.nit:19461 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14225);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19461);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39334,78 +52566,56 @@ void parser___ReduceAction413___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction414___action[] = "parser::ReduceAction414::(parser::ReduceAction::action)";
-void parser___ReduceAction414___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction541___action[] = "parser::ReduceAction541::(parser::ReduceAction::action)";
+void parser___ReduceAction541___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14230;
-  fra.me.meth = LOCATE_parser___ReduceAction414___action;
+  fra.me.line = 19466;
+  fra.me.meth = LOCATE_parser___ReduceAction541___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14232 */
+  /* parser/parser.nit:19468 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14233 */
+  /* parser/parser.nit:19469 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14234 */
+  /* parser/parser.nit:19470 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14235 */
+  /* parser/parser.nit:19471 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14236 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14237 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14238 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14239 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14240 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14242 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14242);
-  }
-  /* parser/parser.nit:14244 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14244);
-  }
-  /* parser/parser.nit:14246 */
+  /* parser/parser.nit:19472 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19474 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14246);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19474);
   }
-  /* parser/parser.nit:14248 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19476 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14248);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19476);
   }
-  /* parser/parser.nit:14249 */
-  fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14255 */
+  /* parser/parser.nit:19477 */
+  fra.me.REG[3] = NEW_AIsaExpr_parser___parser_prod___AIsaExpr___init_aisaexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19481 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14256 */
+  /* parser/parser.nit:19482 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14256);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19482);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39413,67 +52623,56 @@ void parser___ReduceAction414___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction415___action[] = "parser::ReduceAction415::(parser::ReduceAction::action)";
-void parser___ReduceAction415___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction543___action[] = "parser::ReduceAction543::(parser::ReduceAction::action)";
+void parser___ReduceAction543___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14261;
-  fra.me.meth = LOCATE_parser___ReduceAction415___action;
+  fra.me.line = 19487;
+  fra.me.meth = LOCATE_parser___ReduceAction543___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14263 */
+  /* parser/parser.nit:19489 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14264 */
+  /* parser/parser.nit:19490 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14265 */
+  /* parser/parser.nit:19491 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14266 */
+  /* parser/parser.nit:19492 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14267 */
+  /* parser/parser.nit:19493 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14268 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14269 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14271 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14271);
-  }
-  /* parser/parser.nit:14273 */
+  /* parser/parser.nit:19495 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14273);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19495);
   }
-  /* parser/parser.nit:14275 */
+  /* parser/parser.nit:19497 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14275);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19497);
   }
-  /* parser/parser.nit:14276 */
-  fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:14282 */
+  /* parser/parser.nit:19498 */
+  fra.me.REG[3] = NEW_APlusExpr_parser___parser_prod___APlusExpr___init_aplusexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19502 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14283 */
+  /* parser/parser.nit:19503 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14283);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19503);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39481,78 +52680,56 @@ void parser___ReduceAction415___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction416___action[] = "parser::ReduceAction416::(parser::ReduceAction::action)";
-void parser___ReduceAction416___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction544___action[] = "parser::ReduceAction544::(parser::ReduceAction::action)";
+void parser___ReduceAction544___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14288;
-  fra.me.meth = LOCATE_parser___ReduceAction416___action;
+  fra.me.line = 19508;
+  fra.me.meth = LOCATE_parser___ReduceAction544___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14290 */
+  /* parser/parser.nit:19510 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14291 */
+  /* parser/parser.nit:19511 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14292 */
+  /* parser/parser.nit:19512 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14293 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14294 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14295 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14296 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14297 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14298 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14300 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14300);
-  }
-  /* parser/parser.nit:14302 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14302);
-  }
-  /* parser/parser.nit:14304 */
+  /* parser/parser.nit:19513 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19514 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19516 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14304);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19516);
   }
-  /* parser/parser.nit:14306 */
+  /* parser/parser.nit:19518 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14306);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19518);
   }
-  /* parser/parser.nit:14307 */
-  fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14313 */
+  /* parser/parser.nit:19519 */
+  fra.me.REG[3] = NEW_AMinusExpr_parser___parser_prod___AMinusExpr___init_aminusexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19523 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14314 */
+  /* parser/parser.nit:19524 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14314);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19524);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39560,67 +52737,56 @@ void parser___ReduceAction416___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction417___action[] = "parser::ReduceAction417::(parser::ReduceAction::action)";
-void parser___ReduceAction417___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction546___action[] = "parser::ReduceAction546::(parser::ReduceAction::action)";
+void parser___ReduceAction546___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14319;
-  fra.me.meth = LOCATE_parser___ReduceAction417___action;
+  fra.me.line = 19529;
+  fra.me.meth = LOCATE_parser___ReduceAction546___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14321 */
+  /* parser/parser.nit:19531 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14322 */
+  /* parser/parser.nit:19532 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14323 */
+  /* parser/parser.nit:19533 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14324 */
+  /* parser/parser.nit:19534 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14325 */
+  /* parser/parser.nit:19535 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14326 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14327 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14329 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14329);
-  }
-  /* parser/parser.nit:14331 */
+  /* parser/parser.nit:19537 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14331);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19537);
   }
-  /* parser/parser.nit:14333 */
+  /* parser/parser.nit:19539 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14333);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19539);
   }
-  /* parser/parser.nit:14334 */
-  fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:14340 */
+  /* parser/parser.nit:19540 */
+  fra.me.REG[3] = NEW_AStarExpr_parser___parser_prod___AStarExpr___init_astarexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19544 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14341 */
+  /* parser/parser.nit:19545 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14341);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19545);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39628,69 +52794,56 @@ void parser___ReduceAction417___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction418___action[] = "parser::ReduceAction418::(parser::ReduceAction::action)";
-void parser___ReduceAction418___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction547___action[] = "parser::ReduceAction547::(parser::ReduceAction::action)";
+void parser___ReduceAction547___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14346;
-  fra.me.meth = LOCATE_parser___ReduceAction418___action;
+  fra.me.line = 19550;
+  fra.me.meth = LOCATE_parser___ReduceAction547___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14348 */
+  /* parser/parser.nit:19552 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14349 */
+  /* parser/parser.nit:19553 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14350 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14351 */
+  /* parser/parser.nit:19554 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14352 */
+  /* parser/parser.nit:19555 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14353 */
+  /* parser/parser.nit:19556 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14354 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14355 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14357 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14357);
-  }
-  /* parser/parser.nit:14359 */
+  /* parser/parser.nit:19558 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14359);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19558);
   }
-  /* parser/parser.nit:14361 */
+  /* parser/parser.nit:19560 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14361);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19560);
   }
-  /* parser/parser.nit:14362 */
-  fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:14368 */
+  /* parser/parser.nit:19561 */
+  fra.me.REG[3] = NEW_ASlashExpr_parser___parser_prod___ASlashExpr___init_aslashexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19565 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14369 */
+  /* parser/parser.nit:19566 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14369);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19566);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39698,61 +52851,56 @@ void parser___ReduceAction418___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction421___action[] = "parser::ReduceAction421::(parser::ReduceAction::action)";
-void parser___ReduceAction421___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction548___action[] = "parser::ReduceAction548::(parser::ReduceAction::action)";
+void parser___ReduceAction548___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14374;
-  fra.me.meth = LOCATE_parser___ReduceAction421___action;
+  fra.me.line = 19571;
+  fra.me.meth = LOCATE_parser___ReduceAction548___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14376 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14377 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14378 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14379 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14381 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwloop, ID_parser___parser_nodes___TKwloop)) /*cast nullable TKwloop*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14381);
-  }
-  /* parser/parser.nit:14383 */
+  /* parser/parser.nit:19573 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:19574 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19575 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19576 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19577 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19579 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14383);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19579);
   }
-  /* parser/parser.nit:14385 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:19581 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14385);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19581);
   }
-  /* parser/parser.nit:14386 */
-  fra.me.REG[3] = NEW_ALoopExpr_parser___parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14391 */
+  /* parser/parser.nit:19582 */
+  fra.me.REG[3] = NEW_APercentExpr_parser___parser_prod___APercentExpr___init_apercentexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19586 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14392 */
+  /* parser/parser.nit:19587 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14392);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19587);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39760,15 +52908,15 @@ void parser___ReduceAction421___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction422___action[] = "parser::ReduceAction422::(parser::ReduceAction::action)";
-void parser___ReduceAction422___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction550___action[] = "parser::ReduceAction550::(parser::ReduceAction::action)";
+void parser___ReduceAction550___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14397;
-  fra.me.meth = LOCATE_parser___ReduceAction422___action;
+  fra.me.line = 19592;
+  fra.me.meth = LOCATE_parser___ReduceAction550___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -39779,33 +52927,35 @@ void parser___ReduceAction422___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:14399 */
+  /* parser/parser.nit:19594 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14400 */
+  /* parser/parser.nit:19595 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14401 */
+  /* parser/parser.nit:19596 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14403 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwloop, ID_parser___parser_nodes___TKwloop)) /*cast nullable TKwloop*/;
+  /* parser/parser.nit:19597 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19599 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TMinus, ID_parser___parser_nodes___TMinus)) /*cast nullable TMinus*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14403);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19599);
   }
-  /* parser/parser.nit:14405 */
+  /* parser/parser.nit:19601 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14405);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19601);
   }
-  /* parser/parser.nit:14406 */
-  fra.me.REG[3] = NEW_ALoopExpr_parser___parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:14411 */
+  /* parser/parser.nit:19602 */
+  fra.me.REG[3] = NEW_AUminusExpr_parser___parser_prod___AUminusExpr___init_auminusexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19606 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14412 */
+  /* parser/parser.nit:19607 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14412);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19607);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39813,83 +52963,54 @@ void parser___ReduceAction422___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction423___action[] = "parser::ReduceAction423::(parser::ReduceAction::action)";
-void parser___ReduceAction423___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+static const char LOCATE_parser___ReduceAction551___action[] = "parser::ReduceAction551::(parser::ReduceAction::action)";
+void parser___ReduceAction551___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14417;
-  fra.me.meth = LOCATE_parser___ReduceAction423___action;
+  fra.me.line = 19612;
+  fra.me.meth = LOCATE_parser___ReduceAction551___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14419 */
+  /* parser/parser.nit:19614 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14420 */
+  /* parser/parser.nit:19615 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14421 */
+  /* parser/parser.nit:19616 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14422 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14423 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14424 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14425 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14426 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14428 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwwhile, ID_parser___parser_nodes___TKwwhile)) /*cast nullable TKwwhile*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14428);
-  }
-  /* parser/parser.nit:14430 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14430);
-  }
-  /* parser/parser.nit:14432 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14432);
-  }
-  /* parser/parser.nit:14434 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19617 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19619 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwonce, ID_parser___parser_nodes___TKwonce)) /*cast nullable TKwonce*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14434);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19619);
   }
-  /* parser/parser.nit:14436 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:19621 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14436);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19621);
   }
-  /* parser/parser.nit:14437 */
-  fra.me.REG[3] = NEW_AWhileExpr_parser___parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14444 */
+  /* parser/parser.nit:19622 */
+  fra.me.REG[3] = NEW_AOnceExpr_parser___parser_prod___AOnceExpr___init_aonceexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19626 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14445 */
+  /* parser/parser.nit:19627 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14445);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19627);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39897,17 +53018,17 @@ void parser___ReduceAction423___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction424___action[] = "parser::ReduceAction424::(parser::ReduceAction::action)";
-void parser___ReduceAction424___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction553___action[] = "parser::ReduceAction553::(parser::ReduceAction::action)";
+void parser___ReduceAction553___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 = 14450;
-  fra.me.meth = LOCATE_parser___ReduceAction424___action;
+  fra.me.line = 19632;
+  fra.me.meth = LOCATE_parser___ReduceAction553___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -39915,56 +53036,45 @@ void parser___ReduceAction424___action(val_t p0, val_t p1){
   fra.me.REG[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:14452 */
+  /* parser/parser.nit:19634 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14453 */
+  /* parser/parser.nit:19635 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14454 */
+  /* parser/parser.nit:19636 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14455 */
+  /* parser/parser.nit:19637 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14456 */
+  /* parser/parser.nit:19638 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14457 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14458 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14460 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwwhile, ID_parser___parser_nodes___TKwwhile)) /*cast nullable TKwwhile*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14460);
-  }
-  /* parser/parser.nit:14462 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19640 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14462);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19640);
   }
-  /* parser/parser.nit:14464 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:19642 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14464);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19642);
   }
-  /* parser/parser.nit:14466 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19644 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14466);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19644);
   }
-  /* parser/parser.nit:14467 */
-  fra.me.REG[3] = NEW_AWhileExpr_parser___parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:14474 */
+  /* parser/parser.nit:19645 */
+  fra.me.REG[3] = NEW_ANewExpr_parser___parser_prod___ANewExpr___init_anewexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:19651 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14475 */
+  /* parser/parser.nit:19652 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14475);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19652);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -39972,17 +53082,17 @@ void parser___ReduceAction424___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction425___action[] = "parser::ReduceAction425::(parser::ReduceAction::action)";
-void parser___ReduceAction425___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction554___action[] = "parser::ReduceAction554::(parser::ReduceAction::action)";
+void parser___ReduceAction554___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 = 14480;
-  fra.me.meth = LOCATE_parser___ReduceAction425___action;
+  fra.me.line = 19657;
+  fra.me.meth = LOCATE_parser___ReduceAction554___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -39990,90 +53100,47 @@ void parser___ReduceAction425___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[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:14482 */
+  /* parser/parser.nit:19659 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14483 */
+  /* parser/parser.nit:19660 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14484 */
+  /* parser/parser.nit:19661 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19662 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19663 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14485 */
+  /* parser/parser.nit:19664 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14486 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14487 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14488 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14489 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14490 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14491 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14492 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14493 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14494 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14495 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14496 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:14498 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast nullable TKwfor*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14498);
-  }
-  /* parser/parser.nit:14500 */
-  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14500);
-  }
-  /* parser/parser.nit:14501 */
-  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[7]);
-  fra.me.REG[9] = fra.me.REG[7];
-  /* parser/parser.nit:14503 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14503);
-  }
-  /* parser/parser.nit:14505 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:19666 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwisset, ID_parser___parser_nodes___TKwisset)) /*cast nullable TKwisset*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14505);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19666);
   }
-  /* parser/parser.nit:14507 */
+  /* parser/parser.nit:19668 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14507);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19668);
   }
-  /* parser/parser.nit:14509 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:19670 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14509);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19670);
   }
-  /* parser/parser.nit:14510 */
-  fra.me.REG[3] = NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[8], fra.me.REG[9], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14518 */
+  /* parser/parser.nit:19671 */
+  fra.me.REG[3] = NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19676 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14519 */
+  /* parser/parser.nit:19677 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14519);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19677);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40081,17 +53148,17 @@ void parser___ReduceAction425___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction426___action[] = "parser::ReduceAction426::(parser::ReduceAction::action)";
-void parser___ReduceAction426___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+static const char LOCATE_parser___ReduceAction555___action[] = "parser::ReduceAction555::(parser::ReduceAction::action)";
+void parser___ReduceAction555___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 = 14524;
-  fra.me.meth = LOCATE_parser___ReduceAction426___action;
+  fra.me.line = 19682;
+  fra.me.meth = LOCATE_parser___ReduceAction555___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -40099,86 +53166,37 @@ void parser___ReduceAction426___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[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:14526 */
+  /* parser/parser.nit:19684 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14527 */
+  /* parser/parser.nit:19685 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14528 */
+  /* parser/parser.nit:19686 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14529 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14530 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14531 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14532 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14533 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14534 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14535 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14536 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14537 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14538 */
-  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:14540 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast nullable TKwfor*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14540);
-  }
-  /* parser/parser.nit:14542 */
-  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14542);
-  }
-  /* parser/parser.nit:14543 */
-  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[7]);
-  fra.me.REG[9] = fra.me.REG[7];
-  /* parser/parser.nit:14545 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14545);
-  }
-  /* parser/parser.nit:14547 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14547);
-  }
-  /* parser/parser.nit:14549 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19688 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwisset, ID_parser___parser_nodes___TKwisset)) /*cast nullable TKwisset*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14549);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19688);
   }
-  /* parser/parser.nit:14551 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:19689 */
+  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:19691 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14551);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19691);
   }
-  /* parser/parser.nit:14552 */
-  fra.me.REG[3] = NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[8], fra.me.REG[9], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14560 */
+  /* parser/parser.nit:19692 */
+  fra.me.REG[3] = NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3]);
+  /* parser/parser.nit:19697 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14561 */
+  /* parser/parser.nit:19698 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14561);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19698);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40186,99 +53204,56 @@ void parser___ReduceAction426___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction427___action[] = "parser::ReduceAction427::(parser::ReduceAction::action)";
-void parser___ReduceAction427___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction556___action[] = "parser::ReduceAction556::(parser::ReduceAction::action)";
+void parser___ReduceAction556___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14566;
-  fra.me.meth = LOCATE_parser___ReduceAction427___action;
+  fra.me.line = 19703;
+  fra.me.meth = LOCATE_parser___ReduceAction556___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:14568 */
+  /* parser/parser.nit:19705 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14569 */
+  /* parser/parser.nit:19706 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14570 */
+  /* parser/parser.nit:19707 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14571 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14572 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14573 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14574 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14575 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14576 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14577 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14578 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14579 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14580 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14581 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:14583 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast nullable TKwfor*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14583);
-  }
-  /* parser/parser.nit:14585 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14585);
-  }
-  /* parser/parser.nit:14586 */
-  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:14588 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14588);
-  }
-  /* parser/parser.nit:14590 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:19708 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19709 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19711 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14590);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19711);
   }
-  /* parser/parser.nit:14592 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19713 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14592);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19713);
   }
-  /* parser/parser.nit:14593 */
-  fra.me.REG[3] = NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[7], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:14601 */
+  /* parser/parser.nit:19714 */
+  fra.me.REG[3] = NEW_AAttrExpr_parser___parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19718 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14602 */
+  /* parser/parser.nit:19719 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14602);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19719);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40286,95 +53261,46 @@ void parser___ReduceAction427___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction428___action[] = "parser::ReduceAction428::(parser::ReduceAction::action)";
-void parser___ReduceAction428___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction557___action[] = "parser::ReduceAction557::(parser::ReduceAction::action)";
+void parser___ReduceAction557___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14607;
-  fra.me.meth = LOCATE_parser___ReduceAction428___action;
+  fra.me.line = 19724;
+  fra.me.meth = LOCATE_parser___ReduceAction557___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = 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:14609 */
+  /* parser/parser.nit:19726 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14610 */
+  /* parser/parser.nit:19727 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14611 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14612 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14613 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14614 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14615 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14616 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14617 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14618 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14619 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14620 */
-  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:14622 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast nullable TKwfor*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14622);
-  }
-  /* parser/parser.nit:14624 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14624);
-  }
-  /* parser/parser.nit:14625 */
-  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:14627 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14627);
-  }
-  /* parser/parser.nit:14629 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14629);
-  }
-  /* parser/parser.nit:14631 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19728 */
+  fra.me.REG[4] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:19730 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14631);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19730);
   }
-  /* parser/parser.nit:14632 */
-  fra.me.REG[3] = NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[7], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:14640 */
+  /* parser/parser.nit:19731 */
+  fra.me.REG[3] = NEW_AAttrExpr_parser___parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19735 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14641 */
+  /* parser/parser.nit:19736 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14641);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19736);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40382,15 +53308,15 @@ void parser___ReduceAction428___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction429___action[] = "parser::ReduceAction429::(parser::ReduceAction::action)";
-void parser___ReduceAction429___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction564___action[] = "parser::ReduceAction564::(parser::ReduceAction::action)";
+void parser___ReduceAction564___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 = 14646;
-  fra.me.meth = LOCATE_parser___ReduceAction429___action;
+  fra.me.line = 19741;
+  fra.me.meth = LOCATE_parser___ReduceAction564___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -40402,43 +53328,35 @@ void parser___ReduceAction429___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:14648 */
+  /* parser/parser.nit:19743 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14649 */
+  /* parser/parser.nit:19744 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14650 */
+  /* parser/parser.nit:19745 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14651 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14652 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14654 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast nullable TKwassert*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14654);
-  }
-  /* parser/parser.nit:14656 */
+  /* parser/parser.nit:19746 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:19748 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14656);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19748);
   }
-  /* parser/parser.nit:14658 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19750 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14658);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19750);
   }
-  /* parser/parser.nit:14659 */
-  fra.me.REG[3] = NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14665 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14666 */
+  /* parser/parser.nit:19751 */
+  fra.me.REG[5] = NEW_ABraExpr_parser___parser_prod___ABraExpr___init_abraexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser.nit:19756 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:19757 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14666);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19757);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40446,15 +53364,15 @@ void parser___ReduceAction429___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction430___action[] = "parser::ReduceAction430::(parser::ReduceAction::action)";
-void parser___ReduceAction430___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction565___action[] = "parser::ReduceAction565::(parser::ReduceAction::action)";
+void parser___ReduceAction565___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 = 14671;
-  fra.me.meth = LOCATE_parser___ReduceAction430___action;
+  fra.me.line = 19762;
+  fra.me.meth = LOCATE_parser___ReduceAction565___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
@@ -40467,51 +53385,55 @@ void parser___ReduceAction430___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:14673 */
+  /* parser/parser.nit:19764 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14674 */
+  /* parser/parser.nit:19765 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14675 */
+  /* parser/parser.nit:19766 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14676 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14677 */
+  /* parser/parser.nit:19767 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19768 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14678 */
+  /* parser/parser.nit:19769 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19770 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14680 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast nullable TKwassert*/;
+  /* parser/parser.nit:19771 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19773 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14680);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19773);
   }
-  /* parser/parser.nit:14682 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:19775 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14682);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19775);
   }
-  /* parser/parser.nit:14684 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19777 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14684);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19777);
   }
-  /* parser/parser.nit:14686 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19779 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14686);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19779);
   }
-  /* parser/parser.nit:14687 */
-  fra.me.REG[3] = NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14693 */
+  /* parser/parser.nit:19780 */
+  fra.me.REG[3] = NEW_ANewExpr_parser___parser_prod___ANewExpr___init_anewexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19786 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14694 */
+  /* parser/parser.nit:19787 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14694);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19787);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40519,52 +53441,80 @@ void parser___ReduceAction430___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction431___action[] = "parser::ReduceAction431::(parser::ReduceAction::action)";
-void parser___ReduceAction431___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction566___action[] = "parser::ReduceAction566::(parser::ReduceAction::action)";
+void parser___ReduceAction566___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 = 14699;
-  fra.me.meth = LOCATE_parser___ReduceAction431___action;
+  fra.me.line = 19792;
+  fra.me.meth = LOCATE_parser___ReduceAction566___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14701 */
+  /* parser/parser.nit:19794 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14702 */
+  /* parser/parser.nit:19795 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14703 */
+  /* parser/parser.nit:19796 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14705 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast nullable TKwassert*/;
+  /* parser/parser.nit:19797 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19798 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19799 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19800 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19801 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19802 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19803 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19805 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14705);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19805);
   }
-  /* parser/parser.nit:14707 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19807 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14707);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19807);
   }
-  /* parser/parser.nit:14708 */
-  fra.me.REG[3] = NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:14714 */
+  /* parser/parser.nit:19809 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19809);
+  }
+  /* parser/parser.nit:19811 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast nullable TCbra*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19811);
+  }
+  /* parser/parser.nit:19812 */
+  fra.me.REG[3] = NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:19819 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14715 */
+  /* parser/parser.nit:19820 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14715);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19820);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40572,17 +53522,17 @@ void parser___ReduceAction431___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction432___action[] = "parser::ReduceAction432::(parser::ReduceAction::action)";
-void parser___ReduceAction432___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction567___action[] = "parser::ReduceAction567::(parser::ReduceAction::action)";
+void parser___ReduceAction567___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14720;
-  fra.me.meth = LOCATE_parser___ReduceAction432___action;
+  fra.me.line = 19825;
+  fra.me.meth = LOCATE_parser___ReduceAction567___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -40590,81 +53540,71 @@ void parser___ReduceAction432___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = 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:14722 */
+  /* parser/parser.nit:19827 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14723 */
+  /* parser/parser.nit:19828 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14724 */
+  /* parser/parser.nit:19829 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14725 */
+  /* parser/parser.nit:19830 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14727 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast nullable TKwassert*/;
+  /* parser/parser.nit:19831 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19832 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19833 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19834 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19835 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19836 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19837 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19839 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14727);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19839);
   }
-  /* parser/parser.nit:14729 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:19841 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14729);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19841);
   }
-  /* parser/parser.nit:14731 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19843 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14731);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19843);
   }
-  /* parser/parser.nit:14732 */
-  fra.me.REG[3] = NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* parser/parser.nit:14738 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14739 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:19845 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast nullable TCbra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14739);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19845);
   }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction433___action[] = "parser::ReduceAction433::(parser::ReduceAction::action)";
-void parser___ReduceAction433___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 14744;
-  fra.me.meth = LOCATE_parser___ReduceAction433___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser.nit:14746 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14747 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14748 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14750 */
+  /* parser/parser.nit:19847 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19847);
+  }
+  /* parser/parser.nit:19848 */
+  fra.me.REG[3] = NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19855 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14751 */
+  /* parser/parser.nit:19856 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14751);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19856);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40672,15 +53612,15 @@ void parser___ReduceAction433___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction437___action[] = "parser::ReduceAction437::(parser::ReduceAction::action)";
-void parser___ReduceAction437___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction568___action[] = "parser::ReduceAction568::(parser::ReduceAction::action)";
+void parser___ReduceAction568___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 = 14756;
-  fra.me.meth = LOCATE_parser___ReduceAction437___action;
+  fra.me.line = 19861;
+  fra.me.meth = LOCATE_parser___ReduceAction568___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
@@ -40693,46 +53633,59 @@ void parser___ReduceAction437___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:14758 */
+  /* parser/parser.nit:19863 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14759 */
+  /* parser/parser.nit:19864 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14760 */
+  /* parser/parser.nit:19865 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14761 */
+  /* parser/parser.nit:19866 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19867 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14762 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:14764 */
+  /* parser/parser.nit:19868 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19869 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19870 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19871 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19872 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19874 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19874);
+  }
+  /* parser/parser.nit:19876 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14764);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19876);
   }
-  /* parser/parser.nit:14766 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  /* parser/parser.nit:19878 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14766);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19878);
   }
-  /* parser/parser.nit:14768 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:19880 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14768);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19880);
   }
-  /* parser/parser.nit:14769 */
-  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:14770 */
-  fra.me.REG[6] = NEW_ABraExpr_parser___parser_prod___ABraExpr___init_abraexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* parser/parser.nit:14775 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* parser/parser.nit:14776 */
+  /* parser/parser.nit:19881 */
+  fra.me.REG[3] = NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:19888 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:19889 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14776);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19889);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40740,17 +53693,17 @@ void parser___ReduceAction437___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction439___action[] = "parser::ReduceAction439::(parser::ReduceAction::action)";
-void parser___ReduceAction439___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+static const char LOCATE_parser___ReduceAction569___action[] = "parser::ReduceAction569::(parser::ReduceAction::action)";
+void parser___ReduceAction569___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14781;
-  fra.me.meth = LOCATE_parser___ReduceAction439___action;
+  fra.me.line = 19894;
+  fra.me.meth = LOCATE_parser___ReduceAction569___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -40760,78 +53713,113 @@ void parser___ReduceAction439___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:14783 */
+  /* parser/parser.nit:19896 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14784 */
+  /* parser/parser.nit:19897 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14785 */
+  /* parser/parser.nit:19898 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14786 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14787 */
+  /* parser/parser.nit:19899 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14788 */
+  /* parser/parser.nit:19900 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14789 */
+  /* parser/parser.nit:19901 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14790 */
+  /* parser/parser.nit:19902 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14791 */
+  /* parser/parser.nit:19903 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19904 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19905 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14792 */
+  /* parser/parser.nit:19906 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14793 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14794 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14796 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
+  /* parser/parser.nit:19908 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14796);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19908);
   }
-  /* parser/parser.nit:14798 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19910 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14798);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19910);
   }
-  /* parser/parser.nit:14800 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwthen, ID_parser___parser_nodes___TKwthen)) /*cast nullable TKwthen*/;
+  /* parser/parser.nit:19912 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14800);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19912);
   }
-  /* parser/parser.nit:14802 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19914 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14802);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19914);
   }
-  /* parser/parser.nit:14804 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwelse, ID_parser___parser_nodes___TKwelse)) /*cast nullable TKwelse*/;
+  /* parser/parser.nit:19916 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14804);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19916);
   }
-  /* parser/parser.nit:14806 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19917 */
+  fra.me.REG[3] = NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19924 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:19925 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19925);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction570___action[] = "parser::ReduceAction570::(parser::ReduceAction::action)";
+void parser___ReduceAction570___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 19930;
+  fra.me.meth = LOCATE_parser___ReduceAction570___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:19932 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:19933 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:19935 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14806);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19935);
   }
-  /* parser/parser.nit:14807 */
-  fra.me.REG[3] = NEW_AIfexprExpr_parser___parser_prod___AIfexprExpr___init_aifexprexpr(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14815 */
+  /* parser/parser.nit:19936 */
+  fra.me.REG[3] = NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr(fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:19940 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14816 */
+  /* parser/parser.nit:19941 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14816);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19941);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40839,15 +53827,15 @@ void parser___ReduceAction439___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction441___action[] = "parser::ReduceAction441::(parser::ReduceAction::action)";
-void parser___ReduceAction441___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction571___action[] = "parser::ReduceAction571::(parser::ReduceAction::action)";
+void parser___ReduceAction571___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14821;
-  fra.me.meth = LOCATE_parser___ReduceAction441___action;
+  fra.me.line = 19946;
+  fra.me.meth = LOCATE_parser___ReduceAction571___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -40858,37 +53846,33 @@ void parser___ReduceAction441___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:14823 */
+  /* parser/parser.nit:19948 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14824 */
+  /* parser/parser.nit:19949 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14825 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14826 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14827 */
+  /* parser/parser.nit:19950 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14829 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19952 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14829);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19952);
   }
-  /* parser/parser.nit:14831 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19954 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14831);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19954);
   }
-  /* parser/parser.nit:14832 */
-  fra.me.REG[3] = NEW_AOrExpr_parser___parser_prod___AOrExpr___init_aorexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14836 */
+  /* parser/parser.nit:19955 */
+  fra.me.REG[3] = NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19959 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14837 */
+  /* parser/parser.nit:19960 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14837);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19960);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40896,56 +53880,43 @@ void parser___ReduceAction441___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction442___action[] = "parser::ReduceAction442::(parser::ReduceAction::action)";
-void parser___ReduceAction442___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction572___action[] = "parser::ReduceAction572::(parser::ReduceAction::action)";
+void parser___ReduceAction572___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14842;
-  fra.me.meth = LOCATE_parser___ReduceAction442___action;
+  fra.me.line = 19965;
+  fra.me.meth = LOCATE_parser___ReduceAction572___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14844 */
+  /* parser/parser.nit:19967 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14845 */
+  /* parser/parser.nit:19968 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14846 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14847 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14848 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14850 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14850);
-  }
-  /* parser/parser.nit:14852 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19970 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwself, ID_parser___parser_nodes___TKwself)) /*cast nullable TKwself*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14852);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19970);
   }
-  /* parser/parser.nit:14853 */
-  fra.me.REG[3] = NEW_AAndExpr_parser___parser_prod___AAndExpr___init_aandexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14857 */
+  /* parser/parser.nit:19971 */
+  fra.me.REG[3] = NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:19975 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14858 */
+  /* parser/parser.nit:19976 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14858);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19976);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -40953,15 +53924,15 @@ void parser___ReduceAction442___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction443___action[] = "parser::ReduceAction443::(parser::ReduceAction::action)";
-void parser___ReduceAction443___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction573___action[] = "parser::ReduceAction573::(parser::ReduceAction::action)";
+void parser___ReduceAction573___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14863;
-  fra.me.meth = LOCATE_parser___ReduceAction443___action;
+  fra.me.line = 19981;
+  fra.me.meth = LOCATE_parser___ReduceAction573___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -40972,39 +53943,33 @@ void parser___ReduceAction443___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:14865 */
+  /* parser/parser.nit:19983 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14866 */
+  /* parser/parser.nit:19984 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14867 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14868 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14869 */
+  /* parser/parser.nit:19985 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14870 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14872 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19987 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwself, ID_parser___parser_nodes___TKwself)) /*cast nullable TKwself*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14872);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19987);
   }
-  /* parser/parser.nit:14874 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:19989 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14874);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 19989);
   }
-  /* parser/parser.nit:14875 */
-  fra.me.REG[3] = NEW_AOrElseExpr_parser___parser_prod___AOrElseExpr___init_aorelseexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14879 */
+  /* parser/parser.nit:19990 */
+  fra.me.REG[3] = NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:19994 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14880 */
+  /* parser/parser.nit:19995 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14880);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 19995);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41012,54 +53977,43 @@ void parser___ReduceAction443___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction445___action[] = "parser::ReduceAction445::(parser::ReduceAction::action)";
-void parser___ReduceAction445___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction574___action[] = "parser::ReduceAction574::(parser::ReduceAction::action)";
+void parser___ReduceAction574___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14885;
-  fra.me.meth = LOCATE_parser___ReduceAction445___action;
+  fra.me.line = 20000;
+  fra.me.meth = LOCATE_parser___ReduceAction574___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14887 */
+  /* parser/parser.nit:20002 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14888 */
+  /* parser/parser.nit:20003 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14889 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14890 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14892 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast nullable TKwnot*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14892);
-  }
-  /* parser/parser.nit:14894 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20005 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwtrue, ID_parser___parser_nodes___TKwtrue)) /*cast nullable TKwtrue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14894);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20005);
   }
-  /* parser/parser.nit:14895 */
-  fra.me.REG[3] = NEW_ANotExpr_parser___parser_prod___ANotExpr___init_anotexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14899 */
+  /* parser/parser.nit:20006 */
+  fra.me.REG[3] = NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr(fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:20010 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14900 */
+  /* parser/parser.nit:20011 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14900);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20011);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41067,15 +54021,15 @@ void parser___ReduceAction445___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction447___action[] = "parser::ReduceAction447::(parser::ReduceAction::action)";
-void parser___ReduceAction447___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction575___action[] = "parser::ReduceAction575::(parser::ReduceAction::action)";
+void parser___ReduceAction575___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14905;
-  fra.me.meth = LOCATE_parser___ReduceAction447___action;
+  fra.me.line = 20016;
+  fra.me.meth = LOCATE_parser___ReduceAction575___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -41086,37 +54040,33 @@ void parser___ReduceAction447___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:14907 */
+  /* parser/parser.nit:20018 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14908 */
+  /* parser/parser.nit:20019 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14909 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14910 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14911 */
+  /* parser/parser.nit:20020 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14913 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20022 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwtrue, ID_parser___parser_nodes___TKwtrue)) /*cast nullable TKwtrue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14913);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20022);
   }
-  /* parser/parser.nit:14915 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20024 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14915);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20024);
   }
-  /* parser/parser.nit:14916 */
-  fra.me.REG[3] = NEW_AEqExpr_parser___parser_prod___AEqExpr___init_aeqexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14920 */
+  /* parser/parser.nit:20025 */
+  fra.me.REG[3] = NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:20029 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14921 */
+  /* parser/parser.nit:20030 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14921);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20030);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41124,56 +54074,43 @@ void parser___ReduceAction447___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction448___action[] = "parser::ReduceAction448::(parser::ReduceAction::action)";
-void parser___ReduceAction448___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction576___action[] = "parser::ReduceAction576::(parser::ReduceAction::action)";
+void parser___ReduceAction576___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14926;
-  fra.me.meth = LOCATE_parser___ReduceAction448___action;
+  fra.me.line = 20035;
+  fra.me.meth = LOCATE_parser___ReduceAction576___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14928 */
+  /* parser/parser.nit:20037 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14929 */
+  /* parser/parser.nit:20038 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14930 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14931 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14932 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14934 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14934);
-  }
-  /* parser/parser.nit:14936 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20040 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwfalse, ID_parser___parser_nodes___TKwfalse)) /*cast nullable TKwfalse*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14936);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20040);
   }
-  /* parser/parser.nit:14937 */
-  fra.me.REG[3] = NEW_AEeExpr_parser___parser_prod___AEeExpr___init_aeeexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14941 */
+  /* parser/parser.nit:20041 */
+  fra.me.REG[3] = NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr(fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:20045 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14942 */
+  /* parser/parser.nit:20046 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14942);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20046);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41181,15 +54118,15 @@ void parser___ReduceAction448___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction449___action[] = "parser::ReduceAction449::(parser::ReduceAction::action)";
-void parser___ReduceAction449___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction577___action[] = "parser::ReduceAction577::(parser::ReduceAction::action)";
+void parser___ReduceAction577___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14947;
-  fra.me.meth = LOCATE_parser___ReduceAction449___action;
+  fra.me.line = 20051;
+  fra.me.meth = LOCATE_parser___ReduceAction577___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -41200,37 +54137,33 @@ void parser___ReduceAction449___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:14949 */
+  /* parser/parser.nit:20053 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14950 */
+  /* parser/parser.nit:20054 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14951 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14952 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14953 */
+  /* parser/parser.nit:20055 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14955 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20057 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwfalse, ID_parser___parser_nodes___TKwfalse)) /*cast nullable TKwfalse*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14955);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20057);
   }
-  /* parser/parser.nit:14957 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20059 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14957);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20059);
   }
-  /* parser/parser.nit:14958 */
-  fra.me.REG[3] = NEW_ANeExpr_parser___parser_prod___ANeExpr___init_aneexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14962 */
+  /* parser/parser.nit:20060 */
+  fra.me.REG[3] = NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:20064 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14963 */
+  /* parser/parser.nit:20065 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14963);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20065);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41238,56 +54171,43 @@ void parser___ReduceAction449___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction450___action[] = "parser::ReduceAction450::(parser::ReduceAction::action)";
-void parser___ReduceAction450___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction578___action[] = "parser::ReduceAction578::(parser::ReduceAction::action)";
+void parser___ReduceAction578___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14968;
-  fra.me.meth = LOCATE_parser___ReduceAction450___action;
+  fra.me.line = 20070;
+  fra.me.meth = LOCATE_parser___ReduceAction578___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:14970 */
+  /* parser/parser.nit:20072 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14971 */
+  /* parser/parser.nit:20073 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14972 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14973 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14974 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14976 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14976);
-  }
-  /* parser/parser.nit:14978 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20075 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwnull, ID_parser___parser_nodes___TKwnull)) /*cast nullable TKwnull*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14978);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20075);
   }
-  /* parser/parser.nit:14979 */
-  fra.me.REG[3] = NEW_ALtExpr_parser___parser_prod___ALtExpr___init_altexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:14983 */
+  /* parser/parser.nit:20076 */
+  fra.me.REG[3] = NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr(fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:20080 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:14984 */
+  /* parser/parser.nit:20081 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 14984);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20081);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41295,15 +54215,15 @@ void parser___ReduceAction450___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction451___action[] = "parser::ReduceAction451::(parser::ReduceAction::action)";
-void parser___ReduceAction451___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction579___action[] = "parser::ReduceAction579::(parser::ReduceAction::action)";
+void parser___ReduceAction579___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 14989;
-  fra.me.meth = LOCATE_parser___ReduceAction451___action;
+  fra.me.line = 20086;
+  fra.me.meth = LOCATE_parser___ReduceAction579___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -41314,37 +54234,33 @@ void parser___ReduceAction451___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:14991 */
+  /* parser/parser.nit:20088 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:14992 */
+  /* parser/parser.nit:20089 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14993 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14994 */
+  /* parser/parser.nit:20090 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14995 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:14997 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20092 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnull, ID_parser___parser_nodes___TKwnull)) /*cast nullable TKwnull*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14997);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20092);
   }
-  /* parser/parser.nit:14999 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20094 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 14999);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20094);
   }
-  /* parser/parser.nit:15000 */
-  fra.me.REG[3] = NEW_ALeExpr_parser___parser_prod___ALeExpr___init_aleexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15004 */
+  /* parser/parser.nit:20095 */
+  fra.me.REG[3] = NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:20099 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15005 */
+  /* parser/parser.nit:20100 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15005);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20100);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41352,56 +54268,43 @@ void parser___ReduceAction451___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction452___action[] = "parser::ReduceAction452::(parser::ReduceAction::action)";
-void parser___ReduceAction452___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction580___action[] = "parser::ReduceAction580::(parser::ReduceAction::action)";
+void parser___ReduceAction580___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15010;
-  fra.me.meth = LOCATE_parser___ReduceAction452___action;
+  fra.me.line = 20105;
+  fra.me.meth = LOCATE_parser___ReduceAction580___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15012 */
+  /* parser/parser.nit:20107 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15013 */
+  /* parser/parser.nit:20108 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15014 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15015 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15016 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15018 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15018);
-  }
-  /* parser/parser.nit:15020 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20110 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TNumber, ID_parser___parser_nodes___TNumber)) /*cast nullable TNumber*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15020);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20110);
   }
-  /* parser/parser.nit:15021 */
-  fra.me.REG[3] = NEW_ALlExpr_parser___parser_prod___ALlExpr___init_allexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15025 */
+  /* parser/parser.nit:20111 */
+  fra.me.REG[3] = NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:20115 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15026 */
+  /* parser/parser.nit:20116 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15026);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20116);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41409,15 +54312,15 @@ void parser___ReduceAction452___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction453___action[] = "parser::ReduceAction453::(parser::ReduceAction::action)";
-void parser___ReduceAction453___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction581___action[] = "parser::ReduceAction581::(parser::ReduceAction::action)";
+void parser___ReduceAction581___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15031;
-  fra.me.meth = LOCATE_parser___ReduceAction453___action;
+  fra.me.line = 20121;
+  fra.me.meth = LOCATE_parser___ReduceAction581___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -41428,37 +54331,33 @@ void parser___ReduceAction453___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:15033 */
+  /* parser/parser.nit:20123 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15034 */
+  /* parser/parser.nit:20124 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15035 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15036 */
+  /* parser/parser.nit:20125 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15037 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15039 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20127 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TNumber, ID_parser___parser_nodes___TNumber)) /*cast nullable TNumber*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15039);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20127);
   }
-  /* parser/parser.nit:15041 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20129 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15041);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20129);
   }
-  /* parser/parser.nit:15042 */
-  fra.me.REG[3] = NEW_AGtExpr_parser___parser_prod___AGtExpr___init_agtexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15046 */
+  /* parser/parser.nit:20130 */
+  fra.me.REG[3] = NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:20134 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15047 */
+  /* parser/parser.nit:20135 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15047);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20135);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41466,56 +54365,43 @@ void parser___ReduceAction453___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction454___action[] = "parser::ReduceAction454::(parser::ReduceAction::action)";
-void parser___ReduceAction454___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction582___action[] = "parser::ReduceAction582::(parser::ReduceAction::action)";
+void parser___ReduceAction582___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15052;
-  fra.me.meth = LOCATE_parser___ReduceAction454___action;
+  fra.me.line = 20140;
+  fra.me.meth = LOCATE_parser___ReduceAction582___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15054 */
+  /* parser/parser.nit:20142 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15055 */
+  /* parser/parser.nit:20143 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15056 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15057 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15058 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15060 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15060);
-  }
-  /* parser/parser.nit:15062 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20145 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TFloat, ID_parser___parser_nodes___TFloat)) /*cast nullable TFloat*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15062);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20145);
   }
-  /* parser/parser.nit:15063 */
-  fra.me.REG[3] = NEW_AGeExpr_parser___parser_prod___AGeExpr___init_ageexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15067 */
+  /* parser/parser.nit:20146 */
+  fra.me.REG[3] = NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:20150 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15068 */
+  /* parser/parser.nit:20151 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15068);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20151);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41523,15 +54409,15 @@ void parser___ReduceAction454___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction455___action[] = "parser::ReduceAction455::(parser::ReduceAction::action)";
-void parser___ReduceAction455___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction583___action[] = "parser::ReduceAction583::(parser::ReduceAction::action)";
+void parser___ReduceAction583___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15073;
-  fra.me.meth = LOCATE_parser___ReduceAction455___action;
+  fra.me.line = 20156;
+  fra.me.meth = LOCATE_parser___ReduceAction583___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -41542,37 +54428,33 @@ void parser___ReduceAction455___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:15075 */
+  /* parser/parser.nit:20158 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15076 */
+  /* parser/parser.nit:20159 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15077 */
+  /* parser/parser.nit:20160 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15078 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15079 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15081 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20162 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TFloat, ID_parser___parser_nodes___TFloat)) /*cast nullable TFloat*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15081);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20162);
   }
-  /* parser/parser.nit:15083 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20164 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15083);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20164);
   }
-  /* parser/parser.nit:15084 */
-  fra.me.REG[3] = NEW_AGgExpr_parser___parser_prod___AGgExpr___init_aggexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15088 */
+  /* parser/parser.nit:20165 */
+  fra.me.REG[3] = NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:20169 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15089 */
+  /* parser/parser.nit:20170 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15089);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20170);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41580,56 +54462,43 @@ void parser___ReduceAction455___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction456___action[] = "parser::ReduceAction456::(parser::ReduceAction::action)";
-void parser___ReduceAction456___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction584___action[] = "parser::ReduceAction584::(parser::ReduceAction::action)";
+void parser___ReduceAction584___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15094;
-  fra.me.meth = LOCATE_parser___ReduceAction456___action;
+  fra.me.line = 20175;
+  fra.me.meth = LOCATE_parser___ReduceAction584___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15096 */
+  /* parser/parser.nit:20177 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15097 */
+  /* parser/parser.nit:20178 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15098 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15099 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15100 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15102 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15102);
-  }
-  /* parser/parser.nit:15104 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20180 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TChar, ID_parser___parser_nodes___TChar)) /*cast nullable TChar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15104);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20180);
   }
-  /* parser/parser.nit:15105 */
-  fra.me.REG[3] = NEW_AStarshipExpr_parser___parser_prod___AStarshipExpr___init_astarshipexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15109 */
+  /* parser/parser.nit:20181 */
+  fra.me.REG[3] = NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:20185 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15110 */
+  /* parser/parser.nit:20186 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15110);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20186);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41637,15 +54506,15 @@ void parser___ReduceAction456___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction457___action[] = "parser::ReduceAction457::(parser::ReduceAction::action)";
-void parser___ReduceAction457___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction585___action[] = "parser::ReduceAction585::(parser::ReduceAction::action)";
+void parser___ReduceAction585___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15115;
-  fra.me.meth = LOCATE_parser___ReduceAction457___action;
+  fra.me.line = 20191;
+  fra.me.meth = LOCATE_parser___ReduceAction585___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -41656,37 +54525,33 @@ void parser___ReduceAction457___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:15117 */
+  /* parser/parser.nit:20193 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15118 */
+  /* parser/parser.nit:20194 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15119 */
+  /* parser/parser.nit:20195 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15120 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15121 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15123 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20197 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TChar, ID_parser___parser_nodes___TChar)) /*cast nullable TChar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15123);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20197);
   }
-  /* parser/parser.nit:15125 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:20199 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15125);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20199);
   }
-  /* parser/parser.nit:15126 */
-  fra.me.REG[3] = NEW_AIsaExpr_parser___parser_prod___AIsaExpr___init_aisaexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15130 */
+  /* parser/parser.nit:20200 */
+  fra.me.REG[3] = NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:20204 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15131 */
+  /* parser/parser.nit:20205 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15131);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20205);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41694,56 +54559,43 @@ void parser___ReduceAction457___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction459___action[] = "parser::ReduceAction459::(parser::ReduceAction::action)";
-void parser___ReduceAction459___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction586___action[] = "parser::ReduceAction586::(parser::ReduceAction::action)";
+void parser___ReduceAction586___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15136;
-  fra.me.meth = LOCATE_parser___ReduceAction459___action;
+  fra.me.line = 20210;
+  fra.me.meth = LOCATE_parser___ReduceAction586___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15138 */
+  /* parser/parser.nit:20212 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15139 */
+  /* parser/parser.nit:20213 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15140 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15141 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15142 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15144 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15144);
-  }
-  /* parser/parser.nit:15146 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20215 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15146);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20215);
   }
-  /* parser/parser.nit:15147 */
-  fra.me.REG[3] = NEW_APlusExpr_parser___parser_prod___APlusExpr___init_aplusexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15151 */
+  /* parser/parser.nit:20216 */
+  fra.me.REG[3] = NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr(fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:20220 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15152 */
+  /* parser/parser.nit:20221 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15152);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20221);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41751,15 +54603,15 @@ void parser___ReduceAction459___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction460___action[] = "parser::ReduceAction460::(parser::ReduceAction::action)";
-void parser___ReduceAction460___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction587___action[] = "parser::ReduceAction587::(parser::ReduceAction::action)";
+void parser___ReduceAction587___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15157;
-  fra.me.meth = LOCATE_parser___ReduceAction460___action;
+  fra.me.line = 20226;
+  fra.me.meth = LOCATE_parser___ReduceAction587___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -41770,37 +54622,33 @@ void parser___ReduceAction460___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:15159 */
+  /* parser/parser.nit:20228 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15160 */
+  /* parser/parser.nit:20229 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15161 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15162 */
+  /* parser/parser.nit:20230 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15163 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15165 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20232 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15165);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20232);
   }
-  /* parser/parser.nit:15167 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20234 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15167);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20234);
   }
-  /* parser/parser.nit:15168 */
-  fra.me.REG[3] = NEW_AMinusExpr_parser___parser_prod___AMinusExpr___init_aminusexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15172 */
+  /* parser/parser.nit:20235 */
+  fra.me.REG[3] = NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:20239 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15173 */
+  /* parser/parser.nit:20240 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15173);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20240);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41808,56 +54656,61 @@ void parser___ReduceAction460___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction462___action[] = "parser::ReduceAction462::(parser::ReduceAction::action)";
-void parser___ReduceAction462___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction589___action[] = "parser::ReduceAction589::(parser::ReduceAction::action)";
+void parser___ReduceAction589___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 = 15178;
-  fra.me.meth = LOCATE_parser___ReduceAction462___action;
+  fra.me.line = 20245;
+  fra.me.meth = LOCATE_parser___ReduceAction589___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15180 */
+  /* parser/parser.nit:20247 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15181 */
+  /* parser/parser.nit:20248 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15182 */
+  /* parser/parser.nit:20249 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15183 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15184 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15186 */
+  /* parser/parser.nit:20250 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20252 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20252);
+  }
+  /* parser/parser.nit:20254 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15186);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20254);
   }
-  /* parser/parser.nit:15188 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20256 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15188);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20256);
   }
-  /* parser/parser.nit:15189 */
-  fra.me.REG[3] = NEW_AStarExpr_parser___parser_prod___AStarExpr___init_astarexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15193 */
+  /* parser/parser.nit:20257 */
+  fra.me.REG[3] = NEW_AParExpr_parser___parser_prod___AParExpr___init_aparexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:20263 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15194 */
+  /* parser/parser.nit:20264 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15194);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20264);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41865,56 +54718,70 @@ void parser___ReduceAction462___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction463___action[] = "parser::ReduceAction463::(parser::ReduceAction::action)";
-void parser___ReduceAction463___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction590___action[] = "parser::ReduceAction590::(parser::ReduceAction::action)";
+void parser___ReduceAction590___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 = 15199;
-  fra.me.meth = LOCATE_parser___ReduceAction463___action;
+  fra.me.line = 20269;
+  fra.me.meth = LOCATE_parser___ReduceAction590___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15201 */
+  /* parser/parser.nit:20271 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15202 */
+  /* parser/parser.nit:20272 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15203 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15204 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15205 */
+  /* parser/parser.nit:20273 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15207 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20274 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20275 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20277 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15207);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20277);
   }
-  /* parser/parser.nit:15209 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20279 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15209);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20279);
   }
-  /* parser/parser.nit:15210 */
-  fra.me.REG[3] = NEW_ASlashExpr_parser___parser_prod___ASlashExpr___init_aslashexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15214 */
+  /* parser/parser.nit:20281 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20281);
+  }
+  /* parser/parser.nit:20283 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20283);
+  }
+  /* parser/parser.nit:20284 */
+  fra.me.REG[3] = NEW_AParExpr_parser___parser_prod___AParExpr___init_aparexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:20290 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15215 */
+  /* parser/parser.nit:20291 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15215);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20291);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41922,56 +54789,89 @@ void parser___ReduceAction463___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction464___action[] = "parser::ReduceAction464::(parser::ReduceAction::action)";
-void parser___ReduceAction464___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction591___action[] = "parser::ReduceAction591::(parser::ReduceAction::action)";
+void parser___ReduceAction591___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15220;
-  fra.me.meth = LOCATE_parser___ReduceAction464___action;
+  fra.me.line = 20296;
+  fra.me.meth = LOCATE_parser___ReduceAction591___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15222 */
+  /* parser/parser.nit:20298 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15223 */
+  /* parser/parser.nit:20299 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15224 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15225 */
+  /* parser/parser.nit:20300 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15226 */
+  /* parser/parser.nit:20301 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15228 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20302 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20303 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20304 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20305 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20306 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20307 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20308 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20310 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15228);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20310);
   }
-  /* parser/parser.nit:15230 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20312 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15230);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20312);
   }
-  /* parser/parser.nit:15231 */
-  fra.me.REG[3] = NEW_APercentExpr_parser___parser_prod___APercentExpr___init_apercentexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15235 */
+  /* parser/parser.nit:20314 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20314);
+  }
+  /* parser/parser.nit:20316 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20316);
+  }
+  /* parser/parser.nit:20318 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20318);
+  }
+  /* parser/parser.nit:20319 */
+  fra.me.REG[3] = NEW_AAsCastExpr_parser___parser_prod___AAsCastExpr___init_aascastexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:20326 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15236 */
+  /* parser/parser.nit:20327 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15236);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20327);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -41979,54 +54879,100 @@ void parser___ReduceAction464___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction466___action[] = "parser::ReduceAction466::(parser::ReduceAction::action)";
-void parser___ReduceAction466___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction592___action[] = "parser::ReduceAction592::(parser::ReduceAction::action)";
+void parser___ReduceAction592___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15241;
-  fra.me.meth = LOCATE_parser___ReduceAction466___action;
+  fra.me.line = 20332;
+  fra.me.meth = LOCATE_parser___ReduceAction592___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15243 */
+  /* parser/parser.nit:20334 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15244 */
+  /* parser/parser.nit:20335 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15245 */
+  /* parser/parser.nit:20336 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15246 */
+  /* parser/parser.nit:20337 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15248 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TMinus, ID_parser___parser_nodes___TMinus)) /*cast nullable TMinus*/;
+  /* parser/parser.nit:20338 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20339 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20340 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20341 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20342 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20343 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20344 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20345 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20346 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20348 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15248);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20348);
   }
-  /* parser/parser.nit:15250 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20350 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15250);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20350);
   }
-  /* parser/parser.nit:15251 */
-  fra.me.REG[3] = NEW_AUminusExpr_parser___parser_prod___AUminusExpr___init_auminusexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15255 */
+  /* parser/parser.nit:20352 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20352);
+  }
+  /* parser/parser.nit:20354 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast nullable TKwnot*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20354);
+  }
+  /* parser/parser.nit:20356 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnull, ID_parser___parser_nodes___TKwnull)) /*cast nullable TKwnull*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20356);
+  }
+  /* parser/parser.nit:20358 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20358);
+  }
+  /* parser/parser.nit:20359 */
+  fra.me.REG[3] = NEW_AAsNotnullExpr_parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:20367 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15256 */
+  /* parser/parser.nit:20368 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15256);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20368);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -42034,54 +54980,77 @@ void parser___ReduceAction466___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction467___action[] = "parser::ReduceAction467::(parser::ReduceAction::action)";
-void parser___ReduceAction467___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction593___action[] = "parser::ReduceAction593::(parser::ReduceAction::action)";
+void parser___ReduceAction593___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15261;
-  fra.me.meth = LOCATE_parser___ReduceAction467___action;
+  fra.me.line = 20373;
+  fra.me.meth = LOCATE_parser___ReduceAction593___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15263 */
+  /* parser/parser.nit:20375 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15264 */
+  /* parser/parser.nit:20376 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15265 */
+  /* parser/parser.nit:20377 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15266 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15268 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwonce, ID_parser___parser_nodes___TKwonce)) /*cast nullable TKwonce*/;
+  /* parser/parser.nit:20378 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20380 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15268);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20380);
   }
-  /* parser/parser.nit:15270 */
+  /* parser/parser.nit:20382 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15270);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20382);
   }
-  /* parser/parser.nit:15271 */
-  fra.me.REG[3] = NEW_AOnceExpr_parser___parser_prod___AOnceExpr___init_aonceexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15275 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15276 */
+  /* parser/parser.nit:20383 */
+  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:20384 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:20385 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:20387 */
+  fra.me.REG[5] = NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[5], NIT_NULL);
+  /* parser/parser.nit:20391 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:20392 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15276);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20392);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -42089,17 +55058,18 @@ void parser___ReduceAction467___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction469___action[] = "parser::ReduceAction469::(parser::ReduceAction::action)";
-void parser___ReduceAction469___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction594___action[] = "parser::ReduceAction594::(parser::ReduceAction::action)";
+void parser___ReduceAction594___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15281;
-  fra.me.meth = LOCATE_parser___ReduceAction469___action;
+  fra.me.line = 20397;
+  fra.me.meth = LOCATE_parser___ReduceAction594___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -42107,63 +55077,89 @@ void parser___ReduceAction469___action(val_t p0, val_t p1){
   fra.me.REG[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:15283 */
+  /* parser/parser.nit:20399 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15284 */
+  /* parser/parser.nit:20400 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15285 */
+  /* parser/parser.nit:20401 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15286 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15287 */
+  /* parser/parser.nit:20402 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15289 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  /* parser/parser.nit:20403 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20405 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15289);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20405);
   }
-  /* parser/parser.nit:15291 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:20407 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15291);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20407);
   }
-  /* parser/parser.nit:15293 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  /* parser/parser.nit:20409 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15293);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20409);
   }
-  /* parser/parser.nit:15294 */
-  fra.me.REG[3] = NEW_ANewExpr_parser___parser_prod___ANewExpr___init_anewexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* parser/parser.nit:15300 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15301 */
+  /* parser/parser.nit:20410 */
+  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:20411 */
+  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:20412 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:20413 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:20415 */
+  fra.me.REG[6] = NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[6], NIT_NULL);
+  /* parser/parser.nit:20419 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:20420 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15301);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20420);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction470___action[] = "parser::ReduceAction470::(parser::ReduceAction::action)";
-void parser___ReduceAction470___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  return;
+}
+static const char LOCATE_parser___ReduceAction595___action[] = "parser::ReduceAction595::(parser::ReduceAction::action)";
+void parser___ReduceAction595___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 = 15306;
-  fra.me.meth = LOCATE_parser___ReduceAction470___action;
+  fra.me.line = 20425;
+  fra.me.meth = LOCATE_parser___ReduceAction595___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -42171,47 +55167,67 @@ void parser___ReduceAction470___action(val_t p0, val_t p1){
   fra.me.REG[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:15308 */
+  /* parser/parser.nit:20427 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15309 */
+  /* parser/parser.nit:20428 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15310 */
+  /* parser/parser.nit:20429 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15311 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15312 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15313 */
+  /* parser/parser.nit:20430 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15315 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwisset, ID_parser___parser_nodes___TKwisset)) /*cast nullable TKwisset*/;
+  /* parser/parser.nit:20431 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20433 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15315);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20433);
   }
-  /* parser/parser.nit:15317 */
+  /* parser/parser.nit:20435 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15317);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20435);
   }
-  /* parser/parser.nit:15319 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:20436 */
+  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:20437 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15319);
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* parser/parser.nit:15320 */
-  fra.me.REG[3] = NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15325 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:20438 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:20441 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20441);
+  }
+  /* parser/parser.nit:20442 */
+  fra.me.REG[3] = NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[6], fra.me.REG[3]);
+  /* parser/parser.nit:20446 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15326 */
+  /* parser/parser.nit:20447 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15326);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20447);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -42219,17 +55235,18 @@ void parser___ReduceAction470___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction471___action[] = "parser::ReduceAction471::(parser::ReduceAction::action)";
-void parser___ReduceAction471___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction596___action[] = "parser::ReduceAction596::(parser::ReduceAction::action)";
+void parser___ReduceAction596___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15331;
-  fra.me.meth = LOCATE_parser___ReduceAction471___action;
+  fra.me.line = 20452;
+  fra.me.meth = LOCATE_parser___ReduceAction596___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -42237,37 +55254,79 @@ void parser___ReduceAction471___action(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = 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:15333 */
+  /* parser/parser.nit:20454 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15334 */
+  /* parser/parser.nit:20455 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15335 */
+  /* parser/parser.nit:20456 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15337 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwisset, ID_parser___parser_nodes___TKwisset)) /*cast nullable TKwisset*/;
+  /* parser/parser.nit:20457 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20458 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20459 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20461 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15337);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20461);
   }
-  /* parser/parser.nit:15338 */
-  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* parser/parser.nit:15340 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:20463 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15340);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20463);
   }
-  /* parser/parser.nit:15341 */
-  fra.me.REG[3] = NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3]);
-  /* parser/parser.nit:15346 */
+  /* parser/parser.nit:20465 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20465);
+  }
+  /* parser/parser.nit:20466 */
+  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:20467 */
+  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:20468 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:20469 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:20472 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20472);
+  }
+  /* parser/parser.nit:20473 */
+  fra.me.REG[3] = NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[7], fra.me.REG[3]);
+  /* parser/parser.nit:20477 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15347 */
+  /* parser/parser.nit:20478 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15347);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20478);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -42275,56 +55334,82 @@ void parser___ReduceAction471___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction472___action[] = "parser::ReduceAction472::(parser::ReduceAction::action)";
-void parser___ReduceAction472___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction597___action[] = "parser::ReduceAction597::(parser::ReduceAction::action)";
+void parser___ReduceAction597___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 = 15352;
-  fra.me.meth = LOCATE_parser___ReduceAction472___action;
+  fra.me.line = 20483;
+  fra.me.meth = LOCATE_parser___ReduceAction597___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15354 */
+  /* parser/parser.nit:20485 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15355 */
+  /* parser/parser.nit:20486 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15356 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15357 */
+  /* parser/parser.nit:20487 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20488 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15358 */
+  /* parser/parser.nit:20489 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15360 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20490 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20493 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15360);
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* parser/parser.nit:15362 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:20494 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:20496 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15362);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* parser/parser.nit:15363 */
-  fra.me.REG[3] = NEW_AAttrExpr_parser___parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15367 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15368 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:20497 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:20499 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:20500 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15368);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20500);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -42332,46 +55417,43 @@ void parser___ReduceAction472___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction473___action[] = "parser::ReduceAction473::(parser::ReduceAction::action)";
-void parser___ReduceAction473___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+static const char LOCATE_parser___ReduceAction598___action[] = "parser::ReduceAction598::(parser::ReduceAction::action)";
+void parser___ReduceAction598___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15373;
-  fra.me.meth = LOCATE_parser___ReduceAction473___action;
+  fra.me.line = 20505;
+  fra.me.meth = LOCATE_parser___ReduceAction598___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15375 */
+  /* parser/parser.nit:20507 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15376 */
+  /* parser/parser.nit:20508 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15377 */
-  fra.me.REG[4] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* parser/parser.nit:15379 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:20510 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TStartString, ID_parser___parser_nodes___TStartString)) /*cast nullable TStartString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15379);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20510);
   }
-  /* parser/parser.nit:15380 */
-  fra.me.REG[3] = NEW_AAttrExpr_parser___parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15384 */
+  /* parser/parser.nit:20511 */
+  fra.me.REG[3] = NEW_AStartStringExpr_parser___parser_prod___AStartStringExpr___init_astartstringexpr(fra.me.REG[3]);
+  /* parser/parser.nit:20514 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15385 */
+  /* parser/parser.nit:20515 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15385);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20515);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -42379,55 +55461,43 @@ void parser___ReduceAction473___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction480___action[] = "parser::ReduceAction480::(parser::ReduceAction::action)";
-void parser___ReduceAction480___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+static const char LOCATE_parser___ReduceAction600___action[] = "parser::ReduceAction600::(parser::ReduceAction::action)";
+void parser___ReduceAction600___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15390;
-  fra.me.meth = LOCATE_parser___ReduceAction480___action;
+  fra.me.line = 20520;
+  fra.me.meth = LOCATE_parser___ReduceAction600___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15392 */
+  /* parser/parser.nit:20522 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15393 */
+  /* parser/parser.nit:20523 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15394 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15395 */
-  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:15397 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15397);
-  }
-  /* parser/parser.nit:15399 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  /* parser/parser.nit:20525 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TMidString, ID_parser___parser_nodes___TMidString)) /*cast nullable TMidString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15399);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20525);
   }
-  /* parser/parser.nit:15400 */
-  fra.me.REG[5] = NEW_ABraExpr_parser___parser_prod___ABraExpr___init_abraexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser.nit:15405 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:15406 */
+  /* parser/parser.nit:20526 */
+  fra.me.REG[3] = NEW_AMidStringExpr_parser___parser_prod___AMidStringExpr___init_amidstringexpr(fra.me.REG[3]);
+  /* parser/parser.nit:20529 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:20530 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15406);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20530);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -42435,76 +55505,43 @@ void parser___ReduceAction480___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction481___action[] = "parser::ReduceAction481::(parser::ReduceAction::action)";
-void parser___ReduceAction481___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction601___action[] = "parser::ReduceAction601::(parser::ReduceAction::action)";
+void parser___ReduceAction601___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15411;
-  fra.me.meth = LOCATE_parser___ReduceAction481___action;
+  fra.me.line = 20535;
+  fra.me.meth = LOCATE_parser___ReduceAction601___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15413 */
+  /* parser/parser.nit:20537 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15414 */
+  /* parser/parser.nit:20538 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15415 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15416 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15417 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15418 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15419 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15420 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15422 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15422);
-  }
-  /* parser/parser.nit:15424 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15424);
-  }
-  /* parser/parser.nit:15426 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15426);
-  }
-  /* parser/parser.nit:15428 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  /* parser/parser.nit:20540 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TEndString, ID_parser___parser_nodes___TEndString)) /*cast nullable TEndString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15428);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20540);
   }
-  /* parser/parser.nit:15429 */
-  fra.me.REG[3] = NEW_ANewExpr_parser___parser_prod___ANewExpr___init_anewexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15435 */
+  /* parser/parser.nit:20541 */
+  fra.me.REG[3] = NEW_AEndStringExpr_parser___parser_prod___AEndStringExpr___init_aendstringexpr(fra.me.REG[3]);
+  /* parser/parser.nit:20544 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15436 */
+  /* parser/parser.nit:20545 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15436);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20545);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -42512,17 +55549,18 @@ void parser___ReduceAction481___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction482___action[] = "parser::ReduceAction482::(parser::ReduceAction::action)";
-void parser___ReduceAction482___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction602___action[] = "parser::ReduceAction602::(parser::ReduceAction::action)";
+void parser___ReduceAction602___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 = 15441;
-  fra.me.meth = LOCATE_parser___ReduceAction482___action;
+  fra.me.line = 20550;
+  fra.me.meth = LOCATE_parser___ReduceAction602___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -42530,62 +55568,55 @@ void parser___ReduceAction482___action(val_t p0, val_t p1){
   fra.me.REG[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:15443 */
+  /* parser/parser.nit:20552 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15444 */
+  /* parser/parser.nit:20553 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15445 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15446 */
+  /* parser/parser.nit:20554 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15447 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15448 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15449 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15450 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15451 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15452 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15454 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
+  /* parser/parser.nit:20555 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20557 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAt, ID_parser___parser_nodes___TAt)) /*cast nullable TAt*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15454);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20557);
   }
-  /* parser/parser.nit:15456 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20559 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotation, ID_parser___parser_nodes___AAnnotation)) /*cast nullable AAnnotation*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15456);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20559);
   }
-  /* parser/parser.nit:15458 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20560 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15458);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* parser/parser.nit:15460 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast nullable TCbra*/;
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15460);
+    /* parser/parser.nit:20561 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* parser/parser.nit:15461 */
-  fra.me.REG[3] = NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15467 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15468 */
+  /* parser/parser.nit:20563 */
+  fra.me.REG[5] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(fra.me.REG[4], NIT_NULL, fra.me.REG[5], NIT_NULL);
+  /* parser/parser.nit:20569 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:20570 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15468);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20570);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -42593,17 +55624,17 @@ void parser___ReduceAction482___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction483___action[] = "parser::ReduceAction483::(parser::ReduceAction::action)";
-void parser___ReduceAction483___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction603___action[] = "parser::ReduceAction603::(parser::ReduceAction::action)";
+void parser___ReduceAction603___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15473;
-  fra.me.meth = LOCATE_parser___ReduceAction483___action;
+  fra.me.line = 20575;
+  fra.me.meth = LOCATE_parser___ReduceAction603___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -42612,61 +55643,57 @@ void parser___ReduceAction483___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15475 */
+  /* parser/parser.nit:20577 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15476 */
+  /* parser/parser.nit:20578 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15477 */
+  /* parser/parser.nit:20579 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15478 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15479 */
+  /* parser/parser.nit:20580 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15480 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15481 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15482 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15483 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15484 */
+  /* parser/parser.nit:20581 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15486 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
+  /* parser/parser.nit:20582 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20584 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TAt, ID_parser___parser_nodes___TAt)) /*cast nullable TAt*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15486);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20584);
   }
-  /* parser/parser.nit:15488 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20586 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15488);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20586);
   }
-  /* parser/parser.nit:15490 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20588 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15490);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20588);
   }
-  /* parser/parser.nit:15492 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
+  /* parser/parser.nit:20589 */
+  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:20591 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15492);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20591);
   }
-  /* parser/parser.nit:15493 */
-  fra.me.REG[3] = NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15499 */
+  /* parser/parser.nit:20592 */
+  fra.me.REG[3] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3]);
+  /* parser/parser.nit:20598 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15500 */
+  /* parser/parser.nit:20599 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15500);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20599);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -42674,43 +55701,46 @@ void parser___ReduceAction483___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction484___action[] = "parser::ReduceAction484::(parser::ReduceAction::action)";
-void parser___ReduceAction484___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction604___action[] = "parser::ReduceAction604::(parser::ReduceAction::action)";
+void parser___ReduceAction604___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15505;
-  fra.me.meth = LOCATE_parser___ReduceAction484___action;
+  fra.me.line = 20604;
+  fra.me.meth = LOCATE_parser___ReduceAction604___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15507 */
+  /* parser/parser.nit:20606 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15508 */
+  /* parser/parser.nit:20607 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15510 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  /* parser/parser.nit:20608 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20610 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAtid, ID_parser___parser_nodes___AAtid)) /*cast nullable AAtid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15510);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20610);
   }
-  /* parser/parser.nit:15511 */
-  fra.me.REG[3] = NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr(fra.me.REG[3]);
-  /* parser/parser.nit:15514 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15515 */
+  /* parser/parser.nit:20611 */
+  fra.me.REG[4] = NEW_AAnnotation_parser___parser_prod___AAnnotation___init_aannotation(fra.me.REG[3], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:20618 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:20619 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15515);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20619);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -42718,43 +55748,55 @@ void parser___ReduceAction484___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction485___action[] = "parser::ReduceAction485::(parser::ReduceAction::action)";
-void parser___ReduceAction485___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction605___action[] = "parser::ReduceAction605::(parser::ReduceAction::action)";
+void parser___ReduceAction605___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 = 15520;
-  fra.me.meth = LOCATE_parser___ReduceAction485___action;
+  fra.me.line = 20624;
+  fra.me.meth = LOCATE_parser___ReduceAction605___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15522 */
+  /* parser/parser.nit:20626 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15523 */
+  /* parser/parser.nit:20627 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15525 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwself, ID_parser___parser_nodes___TKwself)) /*cast nullable TKwself*/;
+  /* parser/parser.nit:20628 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20629 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20631 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAtid, ID_parser___parser_nodes___AAtid)) /*cast nullable AAtid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20631);
+  }
+  /* parser/parser.nit:20633 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15525);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20633);
   }
-  /* parser/parser.nit:15526 */
-  fra.me.REG[3] = NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[3]);
-  /* parser/parser.nit:15529 */
+  /* parser/parser.nit:20634 */
+  fra.me.REG[3] = NEW_AAnnotation_parser___parser_prod___AAnnotation___init_aannotation(fra.me.REG[4], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:20641 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15530 */
+  /* parser/parser.nit:20642 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15530);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20642);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -42762,87 +55804,76 @@ void parser___ReduceAction485___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction486___action[] = "parser::ReduceAction486::(parser::ReduceAction::action)";
-void parser___ReduceAction486___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction606___action[] = "parser::ReduceAction606::(parser::ReduceAction::action)";
+void parser___ReduceAction606___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15535;
-  fra.me.meth = LOCATE_parser___ReduceAction486___action;
+  fra.me.line = 20647;
+  fra.me.meth = LOCATE_parser___ReduceAction606___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15537 */
+  /* parser/parser.nit:20649 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15538 */
+  /* parser/parser.nit:20650 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15540 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwtrue, ID_parser___parser_nodes___TKwtrue)) /*cast nullable TKwtrue*/;
+  /* parser/parser.nit:20651 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20652 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20653 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20654 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20656 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAtid, ID_parser___parser_nodes___AAtid)) /*cast nullable AAtid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15540);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20656);
   }
-  /* parser/parser.nit:15541 */
-  fra.me.REG[3] = NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr(fra.me.REG[3]);
-  /* parser/parser.nit:15544 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15545 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:20658 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15545);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20658);
   }
-  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___ReduceAction487___action[] = "parser::ReduceAction487::(parser::ReduceAction::action)";
-void parser___ReduceAction487___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 15550;
-  fra.me.meth = LOCATE_parser___ReduceAction487___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser.nit:15552 */
-  fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15553 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15555 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwfalse, ID_parser___parser_nodes___TKwfalse)) /*cast nullable TKwfalse*/;
+  /* parser/parser.nit:20660 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15555);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20660);
   }
-  /* parser/parser.nit:15556 */
-  fra.me.REG[3] = NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr(fra.me.REG[3]);
-  /* parser/parser.nit:15559 */
+  /* parser/parser.nit:20661 */
+  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:20663 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20663);
+  }
+  /* parser/parser.nit:20664 */
+  fra.me.REG[3] = NEW_AAnnotation_parser___parser_prod___AAnnotation___init_aannotation(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:20671 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15560 */
+  /* parser/parser.nit:20672 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15560);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20672);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -42850,43 +55881,85 @@ void parser___ReduceAction487___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction488___action[] = "parser::ReduceAction488::(parser::ReduceAction::action)";
-void parser___ReduceAction488___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction607___action[] = "parser::ReduceAction607::(parser::ReduceAction::action)";
+void parser___ReduceAction607___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15565;
-  fra.me.meth = LOCATE_parser___ReduceAction488___action;
+  fra.me.line = 20677;
+  fra.me.meth = LOCATE_parser___ReduceAction607___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15567 */
+  /* parser/parser.nit:20679 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15568 */
+  /* parser/parser.nit:20680 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15570 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwnull, ID_parser___parser_nodes___TKwnull)) /*cast nullable TKwnull*/;
+  /* parser/parser.nit:20681 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20682 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20683 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20684 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20685 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20687 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAtid, ID_parser___parser_nodes___AAtid)) /*cast nullable AAtid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15570);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20687);
   }
-  /* parser/parser.nit:15571 */
-  fra.me.REG[3] = NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr(fra.me.REG[3]);
-  /* parser/parser.nit:15574 */
+  /* parser/parser.nit:20689 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20689);
+  }
+  /* parser/parser.nit:20691 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20691);
+  }
+  /* parser/parser.nit:20692 */
+  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:20694 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20694);
+  }
+  /* parser/parser.nit:20696 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20696);
+  }
+  /* parser/parser.nit:20697 */
+  fra.me.REG[3] = NEW_AAnnotation_parser___parser_prod___AAnnotation___init_aannotation(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:20704 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15575 */
+  /* parser/parser.nit:20705 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15575);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20705);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -42894,43 +55967,49 @@ void parser___ReduceAction488___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction489___action[] = "parser::ReduceAction489::(parser::ReduceAction::action)";
-void parser___ReduceAction489___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction608___action[] = "parser::ReduceAction608::(parser::ReduceAction::action)";
+void parser___ReduceAction608___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15580;
-  fra.me.meth = LOCATE_parser___ReduceAction489___action;
+  fra.me.line = 20710;
+  fra.me.meth = LOCATE_parser___ReduceAction608___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15582 */
+  /* parser/parser.nit:20712 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15583 */
+  /* parser/parser.nit:20713 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15585 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TNumber, ID_parser___parser_nodes___TNumber)) /*cast nullable TNumber*/;
+  /* parser/parser.nit:20714 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20716 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15585);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20716);
   }
-  /* parser/parser.nit:15586 */
-  fra.me.REG[3] = NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(fra.me.REG[3]);
-  /* parser/parser.nit:15589 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15590 */
+  /* parser/parser.nit:20717 */
+  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:20718 */
+  fra.me.REG[4] = NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(NIT_NULL, NIT_NULL, fra.me.REG[4], NIT_NULL);
+  /* parser/parser.nit:20724 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:20725 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15590);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20725);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -42938,43 +56017,57 @@ void parser___ReduceAction489___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction490___action[] = "parser::ReduceAction490::(parser::ReduceAction::action)";
-void parser___ReduceAction490___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction609___action[] = "parser::ReduceAction609::(parser::ReduceAction::action)";
+void parser___ReduceAction609___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 = 15595;
-  fra.me.meth = LOCATE_parser___ReduceAction490___action;
+  fra.me.line = 20730;
+  fra.me.meth = LOCATE_parser___ReduceAction609___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15597 */
+  /* parser/parser.nit:20732 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15598 */
+  /* parser/parser.nit:20733 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15600 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TFloat, ID_parser___parser_nodes___TFloat)) /*cast nullable TFloat*/;
+  /* parser/parser.nit:20734 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20736 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15600);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* parser/parser.nit:15601 */
-  fra.me.REG[3] = NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(fra.me.REG[3]);
-  /* parser/parser.nit:15604 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15605 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:20737 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:20739 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:20740 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15605);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20740);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -42982,43 +56075,69 @@ void parser___ReduceAction490___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction491___action[] = "parser::ReduceAction491::(parser::ReduceAction::action)";
-void parser___ReduceAction491___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction610___action[] = "parser::ReduceAction610::(parser::ReduceAction::action)";
+void parser___ReduceAction610___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 = 15610;
-  fra.me.meth = LOCATE_parser___ReduceAction491___action;
+  fra.me.line = 20745;
+  fra.me.meth = LOCATE_parser___ReduceAction610___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15612 */
+  /* parser/parser.nit:20747 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15613 */
+  /* parser/parser.nit:20748 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15615 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TChar, ID_parser___parser_nodes___TChar)) /*cast nullable TChar*/;
+  /* parser/parser.nit:20749 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20750 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20753 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20753);
+  }
+  /* parser/parser.nit:20754 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15615);
+    /* parser/parser.nit:20755 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* parser/parser.nit:15616 */
-  fra.me.REG[3] = NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(fra.me.REG[3]);
-  /* parser/parser.nit:15619 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15620 */
+  /* parser/parser.nit:20757 */
+  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:20758 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:20759 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15620);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20759);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -43026,43 +56145,50 @@ void parser___ReduceAction491___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction492___action[] = "parser::ReduceAction492::(parser::ReduceAction::action)";
-void parser___ReduceAction492___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_parser___ReduceAction612___action[] = "parser::ReduceAction612::(parser::ReduceAction::action)";
+void parser___ReduceAction612___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15625;
-  fra.me.meth = LOCATE_parser___ReduceAction492___action;
+  fra.me.line = 20764;
+  fra.me.meth = LOCATE_parser___ReduceAction612___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15627 */
+  /* parser/parser.nit:20766 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15628 */
+  /* parser/parser.nit:20767 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15630 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:20768 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20769 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20770 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20772 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAtid, ID_parser___parser_nodes___AAtid)) /*cast nullable AAtid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15630);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20772);
   }
-  /* parser/parser.nit:15631 */
-  fra.me.REG[3] = NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr(fra.me.REG[3]);
-  /* parser/parser.nit:15634 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15635 */
+  /* parser/parser.nit:20773 */
+  fra.me.REG[4] = NEW_AAnnotation_parser___parser_prod___AAnnotation___init_aannotation(fra.me.REG[3], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:20780 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:20781 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15635);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20781);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -43070,15 +56196,15 @@ void parser___ReduceAction492___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction494___action[] = "parser::ReduceAction494::(parser::ReduceAction::action)";
-void parser___ReduceAction494___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction613___action[] = "parser::ReduceAction613::(parser::ReduceAction::action)";
+void parser___ReduceAction613___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 = 15640;
-  fra.me.meth = LOCATE_parser___ReduceAction494___action;
+  fra.me.line = 20786;
+  fra.me.meth = LOCATE_parser___ReduceAction613___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -43090,41 +56216,39 @@ void parser___ReduceAction494___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:15642 */
+  /* parser/parser.nit:20788 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15643 */
+  /* parser/parser.nit:20789 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20790 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15644 */
+  /* parser/parser.nit:20791 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15645 */
+  /* parser/parser.nit:20792 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15647 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15647);
-  }
-  /* parser/parser.nit:15649 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20793 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20795 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAtid, ID_parser___parser_nodes___AAtid)) /*cast nullable AAtid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15649);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20795);
   }
-  /* parser/parser.nit:15651 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  /* parser/parser.nit:20797 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15651);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20797);
   }
-  /* parser/parser.nit:15652 */
-  fra.me.REG[3] = NEW_AParExpr_parser___parser_prod___AParExpr___init_aparexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15657 */
+  /* parser/parser.nit:20798 */
+  fra.me.REG[3] = NEW_AAnnotation_parser___parser_prod___AAnnotation___init_aannotation(fra.me.REG[4], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:20805 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15658 */
+  /* parser/parser.nit:20806 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15658);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20806);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -43132,15 +56256,15 @@ void parser___ReduceAction494___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction495___action[] = "parser::ReduceAction495::(parser::ReduceAction::action)";
-void parser___ReduceAction495___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction614___action[] = "parser::ReduceAction614::(parser::ReduceAction::action)";
+void parser___ReduceAction614___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15663;
-  fra.me.meth = LOCATE_parser___ReduceAction495___action;
+  fra.me.line = 20811;
+  fra.me.meth = LOCATE_parser___ReduceAction614___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
@@ -43154,67 +56278,58 @@ void parser___ReduceAction495___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:15665 */
+  /* parser/parser.nit:20813 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15666 */
+  /* parser/parser.nit:20814 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15667 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15668 */
+  /* parser/parser.nit:20815 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20816 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15669 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15670 */
+  /* parser/parser.nit:20817 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15671 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15672 */
+  /* parser/parser.nit:20818 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15673 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15674 */
+  /* parser/parser.nit:20819 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15675 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15677 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15677);
-  }
-  /* parser/parser.nit:15679 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
+  /* parser/parser.nit:20820 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20822 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAtid, ID_parser___parser_nodes___AAtid)) /*cast nullable AAtid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15679);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20822);
   }
-  /* parser/parser.nit:15681 */
+  /* parser/parser.nit:20824 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15681);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20824);
   }
-  /* parser/parser.nit:15683 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:20826 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15683);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20826);
   }
-  /* parser/parser.nit:15685 */
+  /* parser/parser.nit:20827 */
+  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:20829 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15685);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20829);
   }
-  /* parser/parser.nit:15686 */
-  fra.me.REG[3] = NEW_AAsCastExpr_parser___parser_prod___AAsCastExpr___init_aascastexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15693 */
+  /* parser/parser.nit:20830 */
+  fra.me.REG[3] = NEW_AAnnotation_parser___parser_prod___AAnnotation___init_aannotation(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:20837 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15694 */
+  /* parser/parser.nit:20838 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15694);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20838);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -43222,15 +56337,15 @@ void parser___ReduceAction495___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction496___action[] = "parser::ReduceAction496::(parser::ReduceAction::action)";
-void parser___ReduceAction496___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction615___action[] = "parser::ReduceAction615::(parser::ReduceAction::action)";
+void parser___ReduceAction615___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15699;
-  fra.me.meth = LOCATE_parser___ReduceAction496___action;
+  fra.me.line = 20843;
+  fra.me.meth = LOCATE_parser___ReduceAction615___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
@@ -43245,77 +56360,66 @@ void parser___ReduceAction496___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:15701 */
+  /* parser/parser.nit:20845 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15702 */
+  /* parser/parser.nit:20846 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15703 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15704 */
+  /* parser/parser.nit:20847 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20848 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15705 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15706 */
+  /* parser/parser.nit:20849 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15707 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15708 */
+  /* parser/parser.nit:20850 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15709 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15710 */
+  /* parser/parser.nit:20851 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15711 */
+  /* parser/parser.nit:20852 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15712 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15713 */
-  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15715 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15715);
-  }
-  /* parser/parser.nit:15717 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
+  /* parser/parser.nit:20853 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20855 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAtid, ID_parser___parser_nodes___AAtid)) /*cast nullable AAtid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15717);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20855);
   }
-  /* parser/parser.nit:15719 */
+  /* parser/parser.nit:20857 */
   REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15719);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20857);
   }
-  /* parser/parser.nit:15721 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast nullable TKwnot*/;
+  /* parser/parser.nit:20859 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15721);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20859);
   }
-  /* parser/parser.nit:15723 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnull, ID_parser___parser_nodes___TKwnull)) /*cast nullable TKwnull*/;
+  /* parser/parser.nit:20860 */
+  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:20862 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15723);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20862);
   }
-  /* parser/parser.nit:15725 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  /* parser/parser.nit:20864 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15725);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20864);
   }
-  /* parser/parser.nit:15726 */
-  fra.me.REG[3] = NEW_AAsNotnullExpr_parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:15734 */
+  /* parser/parser.nit:20865 */
+  fra.me.REG[3] = NEW_AAnnotation_parser___parser_prod___AAnnotation___init_aannotation(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:20872 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15735 */
+  /* parser/parser.nit:20873 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15735);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20873);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -43323,16 +56427,15 @@ void parser___ReduceAction496___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction497___action[] = "parser::ReduceAction497::(parser::ReduceAction::action)";
-void parser___ReduceAction497___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction616___action[] = "parser::ReduceAction616::(parser::ReduceAction::action)";
+void parser___ReduceAction616___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 = 15740;
-  fra.me.meth = LOCATE_parser___ReduceAction497___action;
+  fra.me.line = 20878;
+  fra.me.meth = LOCATE_parser___ReduceAction616___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -43344,56 +56447,42 @@ void parser___ReduceAction497___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:15742 */
+  /* parser/parser.nit:20880 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15743 */
+  /* parser/parser.nit:20881 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20882 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15744 */
+  /* parser/parser.nit:20883 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15745 */
+  /* parser/parser.nit:20884 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20885 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:15747 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15747);
-  }
-  /* parser/parser.nit:15749 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20887 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAtid, ID_parser___parser_nodes___AAtid)) /*cast nullable AAtid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15749);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20887);
   }
-  /* parser/parser.nit:15750 */
-  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:15751 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:20889 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20889);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:15752 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  }
-  /* parser/parser.nit:15754 */
-  fra.me.REG[5] = NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[5]);
-  /* parser/parser.nit:15757 */
+  /* parser/parser.nit:20890 */
+  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:20891 */
+  fra.me.REG[5] = NEW_AAnnotation_parser___parser_prod___AAnnotation___init_aannotation(fra.me.REG[4], NIT_NULL, fra.me.REG[5], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:20898 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:15758 */
+  /* parser/parser.nit:20899 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15758);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20899);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -43401,63 +56490,74 @@ void parser___ReduceAction497___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction498___action[] = "parser::ReduceAction498::(parser::ReduceAction::action)";
-void parser___ReduceAction498___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+static const char LOCATE_parser___ReduceAction617___action[] = "parser::ReduceAction617::(parser::ReduceAction::action)";
+void parser___ReduceAction617___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 = 15763;
-  fra.me.meth = LOCATE_parser___ReduceAction498___action;
+  fra.me.line = 20904;
+  fra.me.meth = LOCATE_parser___ReduceAction617___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser.nit:15765 */
+  /* parser/parser.nit:20906 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15766 */
+  /* parser/parser.nit:20907 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15767 */
+  /* parser/parser.nit:20908 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15768 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15769 */
-  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:15771 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15771);
-  }
-  /* parser/parser.nit:15773 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15773);
-  }
-  /* parser/parser.nit:15775 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:20909 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20911 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:20912 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15775);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20912);
   }
-  /* parser/parser.nit:15776 */
-  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:15777 */
-  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:15778 */
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction618___action[] = "parser::ReduceAction618::(parser::ReduceAction::action)";
+void parser___ReduceAction618___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 = 20917;
+  fra.me.meth = LOCATE_parser___ReduceAction618___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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:20919 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:20920 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20921 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:20923 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -43472,18 +56572,16 @@ void parser___ReduceAction498___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:15779 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+    /* parser/parser.nit:20924 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:15781 */
-  fra.me.REG[6] = NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[6]);
-  /* parser/parser.nit:15784 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* parser/parser.nit:15785 */
+  /* parser/parser.nit:20926 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:20927 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15785);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20927);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -43491,16 +56589,16 @@ void parser___ReduceAction498___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction499___action[] = "parser::ReduceAction499::(parser::ReduceAction::action)";
-void parser___ReduceAction499___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction619___action[] = "parser::ReduceAction619::(parser::ReduceAction::action)";
+void parser___ReduceAction619___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 = 15790;
-  fra.me.meth = LOCATE_parser___ReduceAction499___action;
+  fra.me.line = 20932;
+  fra.me.meth = LOCATE_parser___ReduceAction619___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -43512,19 +56610,21 @@ void parser___ReduceAction499___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:15792 */
+  /* parser/parser.nit:20934 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15793 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15794 */
+  /* parser/parser.nit:20935 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15795 */
+  /* parser/parser.nit:20936 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15796 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15797 */
+  /* parser/parser.nit:20937 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:15800 */
+  /* parser/parser.nit:20940 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20940);
+  }
+  /* parser/parser.nit:20941 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -43539,34 +56639,104 @@ void parser___ReduceAction499___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:15801 */
+    /* parser/parser.nit:20942 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* parser/parser.nit:15803 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser.nit:20944 */
+  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:20945 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:20946 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20946);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction620___action[] = "parser::ReduceAction620::(parser::ReduceAction::action)";
+void parser___ReduceAction620___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 20951;
+  fra.me.meth = LOCATE_parser___ReduceAction620___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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:20953 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:20954 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20955 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20956 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20958 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:20959 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:15804 */
-    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20959);
   }
-  /* parser/parser.nit:15806 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:15807 */
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction621___action[] = "parser::ReduceAction621::(parser::ReduceAction::action)";
+void parser___ReduceAction621___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 20964;
+  fra.me.meth = LOCATE_parser___ReduceAction621___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:20966 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:20967 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:20969 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20969);
+  }
+  /* parser/parser.nit:20970 */
+  fra.me.REG[3] = NEW_ATypeAtArg_parser___parser_prod___ATypeAtArg___init_atypeatarg(fra.me.REG[3]);
+  /* parser/parser.nit:20973 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:20974 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15807);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20974);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -43574,15 +56744,15 @@ void parser___ReduceAction499___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction500___action[] = "parser::ReduceAction500::(parser::ReduceAction::action)";
-void parser___ReduceAction500___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction622___action[] = "parser::ReduceAction622::(parser::ReduceAction::action)";
+void parser___ReduceAction622___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15812;
-  fra.me.meth = LOCATE_parser___ReduceAction500___action;
+  fra.me.line = 20979;
+  fra.me.meth = LOCATE_parser___ReduceAction622___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -43592,25 +56762,25 @@ void parser___ReduceAction500___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:15814 */
+  /* parser/parser.nit:20981 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15815 */
+  /* parser/parser.nit:20982 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15817 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TStartString, ID_parser___parser_nodes___TStartString)) /*cast nullable TStartString*/;
+  /* parser/parser.nit:20984 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15817);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20984);
   }
-  /* parser/parser.nit:15818 */
-  fra.me.REG[3] = NEW_AStartStringExpr_parser___parser_prod___AStartStringExpr___init_astartstringexpr(fra.me.REG[3]);
-  /* parser/parser.nit:15821 */
+  /* parser/parser.nit:20985 */
+  fra.me.REG[3] = NEW_AExprAtArg_parser___parser_prod___AExprAtArg___init_aexpratarg(fra.me.REG[3]);
+  /* parser/parser.nit:20988 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15822 */
+  /* parser/parser.nit:20989 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15822);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 20989);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -43618,15 +56788,15 @@ void parser___ReduceAction500___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction502___action[] = "parser::ReduceAction502::(parser::ReduceAction::action)";
-void parser___ReduceAction502___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction624___action[] = "parser::ReduceAction624::(parser::ReduceAction::action)";
+void parser___ReduceAction624___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15827;
-  fra.me.meth = LOCATE_parser___ReduceAction502___action;
+  fra.me.line = 20994;
+  fra.me.meth = LOCATE_parser___ReduceAction624___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -43636,25 +56806,25 @@ void parser___ReduceAction502___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:15829 */
+  /* parser/parser.nit:20996 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15830 */
+  /* parser/parser.nit:20997 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15832 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TMidString, ID_parser___parser_nodes___TMidString)) /*cast nullable TMidString*/;
+  /* parser/parser.nit:20999 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast nullable AAnnotations*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15832);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 20999);
   }
-  /* parser/parser.nit:15833 */
-  fra.me.REG[3] = NEW_AMidStringExpr_parser___parser_prod___AMidStringExpr___init_amidstringexpr(fra.me.REG[3]);
-  /* parser/parser.nit:15836 */
+  /* parser/parser.nit:21000 */
+  fra.me.REG[3] = NEW_AAtAtArg_parser___parser_prod___AAtAtArg___init_aatatarg(fra.me.REG[3]);
+  /* parser/parser.nit:21003 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15837 */
+  /* parser/parser.nit:21004 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15837);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21004);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -43662,15 +56832,15 @@ void parser___ReduceAction502___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction503___action[] = "parser::ReduceAction503::(parser::ReduceAction::action)";
-void parser___ReduceAction503___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction625___action[] = "parser::ReduceAction625::(parser::ReduceAction::action)";
+void parser___ReduceAction625___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15842;
-  fra.me.meth = LOCATE_parser___ReduceAction503___action;
+  fra.me.line = 21009;
+  fra.me.meth = LOCATE_parser___ReduceAction625___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -43680,25 +56850,157 @@ void parser___ReduceAction503___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:15844 */
+  /* parser/parser.nit:21011 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15845 */
+  /* parser/parser.nit:21012 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15847 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TEndString, ID_parser___parser_nodes___TEndString)) /*cast nullable TEndString*/;
+  /* parser/parser.nit:21014 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15847);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21014);
   }
-  /* parser/parser.nit:15848 */
-  fra.me.REG[3] = NEW_AEndStringExpr_parser___parser_prod___AEndStringExpr___init_aendstringexpr(fra.me.REG[3]);
-  /* parser/parser.nit:15851 */
+  /* parser/parser.nit:21015 */
+  fra.me.REG[3] = NEW_AIdAtid_parser___parser_prod___AIdAtid___init_aidatid(fra.me.REG[3]);
+  /* parser/parser.nit:21018 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:21019 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21019);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction626___action[] = "parser::ReduceAction626::(parser::ReduceAction::action)";
+void parser___ReduceAction626___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 21024;
+  fra.me.meth = LOCATE_parser___ReduceAction626___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:21026 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:21027 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:21029 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreadable, ID_parser___parser_nodes___TKwreadable)) /*cast nullable TKwreadable*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21029);
+  }
+  /* parser/parser.nit:21030 */
+  fra.me.REG[3] = NEW_AKwreadableAtid_parser___parser_prod___AKwreadableAtid___init_akwreadableatid(fra.me.REG[3]);
+  /* parser/parser.nit:21033 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:21034 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21034);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction627___action[] = "parser::ReduceAction627::(parser::ReduceAction::action)";
+void parser___ReduceAction627___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 21039;
+  fra.me.meth = LOCATE_parser___ReduceAction627___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:21041 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:21042 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:21044 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21044);
+  }
+  /* parser/parser.nit:21045 */
+  fra.me.REG[3] = NEW_AKwwritableAtid_parser___parser_prod___AKwwritableAtid___init_akwwritableatid(fra.me.REG[3]);
+  /* parser/parser.nit:21048 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:21049 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21049);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction628___action[] = "parser::ReduceAction628::(parser::ReduceAction::action)";
+void parser___ReduceAction628___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 21054;
+  fra.me.meth = LOCATE_parser___ReduceAction628___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:21056 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:21057 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:21059 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21059);
+  }
+  /* parser/parser.nit:21060 */
+  fra.me.REG[3] = NEW_AKwimportAtid_parser___parser_prod___AKwimportAtid___init_akwimportatid(fra.me.REG[3]);
+  /* parser/parser.nit:21063 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15852 */
+  /* parser/parser.nit:21064 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15852);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21064);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -43706,15 +57008,15 @@ void parser___ReduceAction503___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction504___action[] = "parser::ReduceAction504::(parser::ReduceAction::action)";
-void parser___ReduceAction504___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction629___action[] = "parser::ReduceAction629::(parser::ReduceAction::action)";
+void parser___ReduceAction629___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 = 15857;
-  fra.me.meth = LOCATE_parser___ReduceAction504___action;
+  fra.me.line = 21069;
+  fra.me.meth = LOCATE_parser___ReduceAction629___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
@@ -43727,48 +57029,48 @@ void parser___ReduceAction504___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:15859 */
+  /* parser/parser.nit:21071 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15860 */
+  /* parser/parser.nit:21072 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15861 */
+  /* parser/parser.nit:21073 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15862 */
+  /* parser/parser.nit:21074 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15863 */
+  /* parser/parser.nit:21075 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15864 */
+  /* parser/parser.nit:21076 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:15866 */
+  /* parser/parser.nit:21078 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15866);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21078);
   }
-  /* parser/parser.nit:15868 */
+  /* parser/parser.nit:21080 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15868);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21080);
   }
-  /* parser/parser.nit:15869 */
+  /* parser/parser.nit:21081 */
   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:15871 */
+  /* parser/parser.nit:21083 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15871);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21083);
   }
-  /* parser/parser.nit:15872 */
+  /* parser/parser.nit:21084 */
   fra.me.REG[3] = NEW_AParExprs_parser___parser_prod___AParExprs___init_aparexprs(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3]);
-  /* parser/parser.nit:15877 */
+  /* parser/parser.nit:21089 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15878 */
+  /* parser/parser.nit:21090 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15878);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21090);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -43776,15 +57078,15 @@ void parser___ReduceAction504___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction505___action[] = "parser::ReduceAction505::(parser::ReduceAction::action)";
-void parser___ReduceAction505___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction630___action[] = "parser::ReduceAction630::(parser::ReduceAction::action)";
+void parser___ReduceAction630___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 = 15883;
-  fra.me.meth = LOCATE_parser___ReduceAction505___action;
+  fra.me.line = 21095;
+  fra.me.meth = LOCATE_parser___ReduceAction630___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -43796,37 +57098,37 @@ void parser___ReduceAction505___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:15885 */
+  /* parser/parser.nit:21097 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15886 */
+  /* parser/parser.nit:21098 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15887 */
+  /* parser/parser.nit:21099 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15888 */
+  /* parser/parser.nit:21100 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15889 */
+  /* parser/parser.nit:21101 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:15891 */
+  /* parser/parser.nit:21103 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15891);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21103);
   }
-  /* parser/parser.nit:15893 */
+  /* parser/parser.nit:21105 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15893);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21105);
   }
-  /* parser/parser.nit:15894 */
+  /* parser/parser.nit:21106 */
   fra.me.REG[3] = NEW_AParExprs_parser___parser_prod___AParExprs___init_aparexprs(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3]);
-  /* parser/parser.nit:15899 */
+  /* parser/parser.nit:21111 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15900 */
+  /* parser/parser.nit:21112 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15900);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21112);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -43834,15 +57136,15 @@ void parser___ReduceAction505___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction506___action[] = "parser::ReduceAction506::(parser::ReduceAction::action)";
-void parser___ReduceAction506___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction631___action[] = "parser::ReduceAction631::(parser::ReduceAction::action)";
+void parser___ReduceAction631___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15905;
-  fra.me.meth = LOCATE_parser___ReduceAction506___action;
+  fra.me.line = 21117;
+  fra.me.meth = LOCATE_parser___ReduceAction631___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -43852,19 +57154,19 @@ void parser___ReduceAction506___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:15907 */
+  /* parser/parser.nit:21119 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15908 */
+  /* parser/parser.nit:21120 */
   fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:15909 */
+  /* parser/parser.nit:21121 */
   fra.me.REG[3] = NEW_AListExprs_parser___parser_prod___AListExprs___init_alistexprs(fra.me.REG[3]);
-  /* parser/parser.nit:15912 */
+  /* parser/parser.nit:21124 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15913 */
+  /* parser/parser.nit:21125 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15913);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21125);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -43872,16 +57174,16 @@ void parser___ReduceAction506___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction508___action[] = "parser::ReduceAction508::(parser::ReduceAction::action)";
-void parser___ReduceAction508___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction633___action[] = "parser::ReduceAction633::(parser::ReduceAction::action)";
+void parser___ReduceAction633___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 = 15918;
-  fra.me.meth = LOCATE_parser___ReduceAction508___action;
+  fra.me.line = 21130;
+  fra.me.meth = LOCATE_parser___ReduceAction633___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -43892,19 +57194,19 @@ void parser___ReduceAction508___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:15920 */
+  /* parser/parser.nit:21132 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15921 */
+  /* parser/parser.nit:21133 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15922 */
+  /* parser/parser.nit:21134 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:15924 */
+  /* parser/parser.nit:21136 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15924);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21136);
   }
-  /* parser/parser.nit:15925 */
+  /* parser/parser.nit:21137 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -43919,18 +57221,18 @@ void parser___ReduceAction508___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:15926 */
+    /* parser/parser.nit:21138 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:15928 */
+  /* parser/parser.nit:21140 */
   fra.me.REG[4] = NEW_AListExprs_parser___parser_prod___AListExprs___init_alistexprs(fra.me.REG[4]);
-  /* parser/parser.nit:15931 */
+  /* parser/parser.nit:21143 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:15932 */
+  /* parser/parser.nit:21144 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15932);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21144);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -43938,15 +57240,15 @@ void parser___ReduceAction508___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction511___action[] = "parser::ReduceAction511::(parser::ReduceAction::action)";
-void parser___ReduceAction511___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction636___action[] = "parser::ReduceAction636::(parser::ReduceAction::action)";
+void parser___ReduceAction636___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 = 15937;
-  fra.me.meth = LOCATE_parser___ReduceAction511___action;
+  fra.me.line = 21149;
+  fra.me.meth = LOCATE_parser___ReduceAction636___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
@@ -43959,48 +57261,48 @@ void parser___ReduceAction511___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:15939 */
+  /* parser/parser.nit:21151 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15940 */
+  /* parser/parser.nit:21152 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15941 */
+  /* parser/parser.nit:21153 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15942 */
+  /* parser/parser.nit:21154 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15943 */
+  /* parser/parser.nit:21155 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15944 */
+  /* parser/parser.nit:21156 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:15946 */
+  /* parser/parser.nit:21158 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15946);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21158);
   }
-  /* parser/parser.nit:15948 */
+  /* parser/parser.nit:21160 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15948);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21160);
   }
-  /* parser/parser.nit:15949 */
+  /* parser/parser.nit:21161 */
   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:15951 */
+  /* parser/parser.nit:21163 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast nullable TCbra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15951);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21163);
   }
-  /* parser/parser.nit:15952 */
+  /* parser/parser.nit:21164 */
   fra.me.REG[3] = NEW_ABraExprs_parser___parser_prod___ABraExprs___init_abraexprs(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3]);
-  /* parser/parser.nit:15957 */
+  /* parser/parser.nit:21169 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:15958 */
+  /* parser/parser.nit:21170 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15958);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21170);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44008,16 +57310,16 @@ void parser___ReduceAction511___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction512___action[] = "parser::ReduceAction512::(parser::ReduceAction::action)";
-void parser___ReduceAction512___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction637___action[] = "parser::ReduceAction637::(parser::ReduceAction::action)";
+void parser___ReduceAction637___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 = 15963;
-  fra.me.meth = LOCATE_parser___ReduceAction512___action;
+  fra.me.line = 21175;
+  fra.me.meth = LOCATE_parser___ReduceAction637___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -44028,15 +57330,15 @@ void parser___ReduceAction512___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:15965 */
+  /* parser/parser.nit:21177 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15966 */
+  /* parser/parser.nit:21178 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15967 */
+  /* parser/parser.nit:21179 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15968 */
+  /* parser/parser.nit:21180 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:15970 */
+  /* parser/parser.nit:21182 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -44051,16 +57353,16 @@ void parser___ReduceAction512___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:15971 */
+    /* parser/parser.nit:21183 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:15973 */
+  /* parser/parser.nit:21185 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:15974 */
+  /* parser/parser.nit:21186 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15974);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21186);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44068,16 +57370,16 @@ void parser___ReduceAction512___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction513___action[] = "parser::ReduceAction513::(parser::ReduceAction::action)";
-void parser___ReduceAction513___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction638___action[] = "parser::ReduceAction638::(parser::ReduceAction::action)";
+void parser___ReduceAction638___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 = 15979;
-  fra.me.meth = LOCATE_parser___ReduceAction513___action;
+  fra.me.line = 21191;
+  fra.me.meth = LOCATE_parser___ReduceAction638___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -44089,23 +57391,23 @@ void parser___ReduceAction513___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:15981 */
+  /* parser/parser.nit:21193 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:15982 */
+  /* parser/parser.nit:21194 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15983 */
+  /* parser/parser.nit:21195 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15984 */
+  /* parser/parser.nit:21196 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:15985 */
+  /* parser/parser.nit:21197 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:15988 */
+  /* parser/parser.nit:21200 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 15988);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21200);
   }
-  /* parser/parser.nit:15989 */
+  /* parser/parser.nit:21201 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -44120,19 +57422,19 @@ void parser___ReduceAction513___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:15990 */
+    /* parser/parser.nit:21202 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* parser/parser.nit:15992 */
+  /* parser/parser.nit:21204 */
   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:15993 */
+  /* parser/parser.nit:21205 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:15994 */
+  /* parser/parser.nit:21206 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 15994);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21206);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44140,15 +57442,15 @@ void parser___ReduceAction513___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction514___action[] = "parser::ReduceAction514::(parser::ReduceAction::action)";
-void parser___ReduceAction514___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction639___action[] = "parser::ReduceAction639::(parser::ReduceAction::action)";
+void parser___ReduceAction639___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 15999;
-  fra.me.meth = LOCATE_parser___ReduceAction514___action;
+  fra.me.line = 21211;
+  fra.me.meth = LOCATE_parser___ReduceAction639___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -44159,23 +57461,23 @@ void parser___ReduceAction514___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:16001 */
+  /* parser/parser.nit:21213 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16002 */
+  /* parser/parser.nit:21214 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16003 */
+  /* parser/parser.nit:21215 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16004 */
+  /* parser/parser.nit:21216 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16005 */
+  /* parser/parser.nit:21217 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16007 */
+  /* parser/parser.nit:21219 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:16008 */
+  /* parser/parser.nit:21220 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16008);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21220);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44183,16 +57485,16 @@ void parser___ReduceAction514___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction515___action[] = "parser::ReduceAction515::(parser::ReduceAction::action)";
-void parser___ReduceAction515___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction640___action[] = "parser::ReduceAction640::(parser::ReduceAction::action)";
+void parser___ReduceAction640___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 = 16013;
-  fra.me.meth = LOCATE_parser___ReduceAction515___action;
+  fra.me.line = 21225;
+  fra.me.meth = LOCATE_parser___ReduceAction640___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -44203,13 +57505,13 @@ void parser___ReduceAction515___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:16015 */
+  /* parser/parser.nit:21227 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16016 */
+  /* parser/parser.nit:21228 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16017 */
+  /* parser/parser.nit:21229 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16019 */
+  /* parser/parser.nit:21231 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -44224,16 +57526,16 @@ void parser___ReduceAction515___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16020 */
+    /* parser/parser.nit:21232 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16022 */
+  /* parser/parser.nit:21234 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:16023 */
+  /* parser/parser.nit:21235 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16023);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21235);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44241,16 +57543,16 @@ void parser___ReduceAction515___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction516___action[] = "parser::ReduceAction516::(parser::ReduceAction::action)";
-void parser___ReduceAction516___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction641___action[] = "parser::ReduceAction641::(parser::ReduceAction::action)";
+void parser___ReduceAction641___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 = 16028;
-  fra.me.meth = LOCATE_parser___ReduceAction516___action;
+  fra.me.line = 21240;
+  fra.me.meth = LOCATE_parser___ReduceAction641___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -44262,30 +57564,30 @@ void parser___ReduceAction516___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:16030 */
+  /* parser/parser.nit:21242 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16031 */
+  /* parser/parser.nit:21243 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16032 */
+  /* parser/parser.nit:21244 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16033 */
+  /* parser/parser.nit:21245 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16034 */
+  /* parser/parser.nit:21246 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16035 */
+  /* parser/parser.nit:21247 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16036 */
+  /* parser/parser.nit:21248 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16038 */
+  /* parser/parser.nit:21250 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16038);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21250);
   }
-  /* parser/parser.nit:16040 */
+  /* parser/parser.nit:21252 */
   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:16041 */
+  /* parser/parser.nit:21253 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -44300,16 +57602,16 @@ void parser___ReduceAction516___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16042 */
+    /* parser/parser.nit:21254 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16044 */
+  /* parser/parser.nit:21256 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:16045 */
+  /* parser/parser.nit:21257 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16045);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21257);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44317,15 +57619,15 @@ void parser___ReduceAction516___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction517___action[] = "parser::ReduceAction517::(parser::ReduceAction::action)";
-void parser___ReduceAction517___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction642___action[] = "parser::ReduceAction642::(parser::ReduceAction::action)";
+void parser___ReduceAction642___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 16050;
-  fra.me.meth = LOCATE_parser___ReduceAction517___action;
+  fra.me.line = 21262;
+  fra.me.meth = LOCATE_parser___ReduceAction642___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -44336,27 +57638,27 @@ void parser___ReduceAction517___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:16052 */
+  /* parser/parser.nit:21264 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16053 */
+  /* parser/parser.nit:21265 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16054 */
+  /* parser/parser.nit:21266 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16056 */
+  /* parser/parser.nit:21268 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16056);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21268);
   }
-  /* parser/parser.nit:16057 */
+  /* parser/parser.nit:21269 */
   fra.me.REG[3] = NEW_AModuleName_parser___parser_prod___AModuleName___init_amodulename(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:16062 */
+  /* parser/parser.nit:21274 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:16063 */
+  /* parser/parser.nit:21275 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16063);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21275);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44364,15 +57666,15 @@ void parser___ReduceAction517___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction518___action[] = "parser::ReduceAction518::(parser::ReduceAction::action)";
-void parser___ReduceAction518___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction643___action[] = "parser::ReduceAction643::(parser::ReduceAction::action)";
+void parser___ReduceAction643___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 = 16068;
-  fra.me.meth = LOCATE_parser___ReduceAction518___action;
+  fra.me.line = 21280;
+  fra.me.meth = LOCATE_parser___ReduceAction643___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -44384,38 +57686,38 @@ void parser___ReduceAction518___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:16070 */
+  /* parser/parser.nit:21282 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16071 */
+  /* parser/parser.nit:21283 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16072 */
+  /* parser/parser.nit:21284 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16073 */
+  /* parser/parser.nit:21285 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16075 */
+  /* parser/parser.nit:21287 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16075);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21287);
   }
-  /* parser/parser.nit:16076 */
+  /* parser/parser.nit:21288 */
   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:16078 */
+  /* parser/parser.nit:21290 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16078);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21290);
   }
-  /* parser/parser.nit:16079 */
+  /* parser/parser.nit:21291 */
   fra.me.REG[3] = NEW_AModuleName_parser___parser_prod___AModuleName___init_amodulename(NIT_NULL, fra.me.REG[5], fra.me.REG[3]);
-  /* parser/parser.nit:16084 */
+  /* parser/parser.nit:21296 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:16085 */
+  /* parser/parser.nit:21297 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16085);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21297);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44423,15 +57725,15 @@ void parser___ReduceAction518___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction519___action[] = "parser::ReduceAction519::(parser::ReduceAction::action)";
-void parser___ReduceAction519___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction644___action[] = "parser::ReduceAction644::(parser::ReduceAction::action)";
+void parser___ReduceAction644___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 = 16090;
-  fra.me.meth = LOCATE_parser___ReduceAction519___action;
+  fra.me.line = 21302;
+  fra.me.meth = LOCATE_parser___ReduceAction644___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -44443,37 +57745,37 @@ void parser___ReduceAction519___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:16092 */
+  /* parser/parser.nit:21304 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16093 */
+  /* parser/parser.nit:21305 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16094 */
+  /* parser/parser.nit:21306 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16095 */
+  /* parser/parser.nit:21307 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16096 */
+  /* parser/parser.nit:21308 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16098 */
+  /* parser/parser.nit:21310 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast nullable TQuad*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16098);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21310);
   }
-  /* parser/parser.nit:16100 */
+  /* parser/parser.nit:21312 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16100);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21312);
   }
-  /* parser/parser.nit:16101 */
+  /* parser/parser.nit:21313 */
   fra.me.REG[3] = NEW_AModuleName_parser___parser_prod___AModuleName___init_amodulename(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3]);
-  /* parser/parser.nit:16106 */
+  /* parser/parser.nit:21318 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:16107 */
+  /* parser/parser.nit:21319 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16107);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21319);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44481,15 +57783,15 @@ void parser___ReduceAction519___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction520___action[] = "parser::ReduceAction520::(parser::ReduceAction::action)";
-void parser___ReduceAction520___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction645___action[] = "parser::ReduceAction645::(parser::ReduceAction::action)";
+void parser___ReduceAction645___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 = 16112;
-  fra.me.meth = LOCATE_parser___ReduceAction520___action;
+  fra.me.line = 21324;
+  fra.me.meth = LOCATE_parser___ReduceAction645___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
@@ -44502,48 +57804,48 @@ void parser___ReduceAction520___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:16114 */
+  /* parser/parser.nit:21326 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16115 */
+  /* parser/parser.nit:21327 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16116 */
+  /* parser/parser.nit:21328 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16117 */
+  /* parser/parser.nit:21329 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16118 */
+  /* parser/parser.nit:21330 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16119 */
+  /* parser/parser.nit:21331 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16121 */
+  /* parser/parser.nit:21333 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast nullable TQuad*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16121);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21333);
   }
-  /* parser/parser.nit:16123 */
+  /* parser/parser.nit:21335 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16123);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21335);
   }
-  /* parser/parser.nit:16124 */
+  /* parser/parser.nit:21336 */
   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:16126 */
+  /* parser/parser.nit:21338 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16126);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21338);
   }
-  /* parser/parser.nit:16127 */
+  /* parser/parser.nit:21339 */
   fra.me.REG[3] = NEW_AModuleName_parser___parser_prod___AModuleName___init_amodulename(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3]);
-  /* parser/parser.nit:16132 */
+  /* parser/parser.nit:21344 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:16133 */
+  /* parser/parser.nit:21345 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16133);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21345);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44551,15 +57853,15 @@ void parser___ReduceAction520___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction521___action[] = "parser::ReduceAction521::(parser::ReduceAction::action)";
-void parser___ReduceAction521___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction646___action[] = "parser::ReduceAction646::(parser::ReduceAction::action)";
+void parser___ReduceAction646___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 16138;
-  fra.me.meth = LOCATE_parser___ReduceAction521___action;
+  fra.me.line = 21350;
+  fra.me.meth = LOCATE_parser___ReduceAction646___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -44570,27 +57872,27 @@ void parser___ReduceAction521___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:16140 */
+  /* parser/parser.nit:21352 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16141 */
+  /* parser/parser.nit:21353 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16142 */
+  /* parser/parser.nit:21354 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16144 */
+  /* parser/parser.nit:21356 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16144);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21356);
   }
-  /* parser/parser.nit:16145 */
+  /* parser/parser.nit:21357 */
   fra.me.REG[3] = NEW_AQualified_parser___parser_prod___AQualified___init_aqualified(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:16149 */
+  /* parser/parser.nit:21361 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:16150 */
+  /* parser/parser.nit:21362 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16150);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21362);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44598,15 +57900,15 @@ void parser___ReduceAction521___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction522___action[] = "parser::ReduceAction522::(parser::ReduceAction::action)";
-void parser___ReduceAction522___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction647___action[] = "parser::ReduceAction647::(parser::ReduceAction::action)";
+void parser___ReduceAction647___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 = 16155;
-  fra.me.meth = LOCATE_parser___ReduceAction522___action;
+  fra.me.line = 21367;
+  fra.me.meth = LOCATE_parser___ReduceAction647___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -44618,38 +57920,38 @@ void parser___ReduceAction522___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:16157 */
+  /* parser/parser.nit:21369 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16158 */
+  /* parser/parser.nit:21370 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16159 */
+  /* parser/parser.nit:21371 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16160 */
+  /* parser/parser.nit:21372 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16162 */
+  /* parser/parser.nit:21374 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16162);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21374);
   }
-  /* parser/parser.nit:16163 */
+  /* parser/parser.nit:21375 */
   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:16165 */
+  /* parser/parser.nit:21377 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16165);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21377);
   }
-  /* parser/parser.nit:16166 */
+  /* parser/parser.nit:21378 */
   fra.me.REG[3] = NEW_AQualified_parser___parser_prod___AQualified___init_aqualified(fra.me.REG[5], fra.me.REG[3]);
-  /* parser/parser.nit:16170 */
+  /* parser/parser.nit:21382 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:16171 */
+  /* parser/parser.nit:21383 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16171);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21383);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44657,15 +57959,15 @@ void parser___ReduceAction522___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction523___action[] = "parser::ReduceAction523::(parser::ReduceAction::action)";
-void parser___ReduceAction523___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction648___action[] = "parser::ReduceAction648::(parser::ReduceAction::action)";
+void parser___ReduceAction648___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 16176;
-  fra.me.meth = LOCATE_parser___ReduceAction523___action;
+  fra.me.line = 21388;
+  fra.me.meth = LOCATE_parser___ReduceAction648___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -44676,30 +57978,30 @@ void parser___ReduceAction523___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:16178 */
+  /* parser/parser.nit:21390 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16179 */
+  /* parser/parser.nit:21391 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16180 */
+  /* parser/parser.nit:21392 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16182 */
+  /* parser/parser.nit:21394 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16182);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21394);
   }
-  /* parser/parser.nit:16183 */
+  /* parser/parser.nit:21395 */
   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:16184 */
+  /* parser/parser.nit:21396 */
   fra.me.REG[4] = NEW_AQualified_parser___parser_prod___AQualified___init_aqualified(fra.me.REG[4], NIT_NULL);
-  /* parser/parser.nit:16188 */
+  /* parser/parser.nit:21400 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:16189 */
+  /* parser/parser.nit:21401 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16189);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21401);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44707,15 +58009,15 @@ void parser___ReduceAction523___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction524___action[] = "parser::ReduceAction524::(parser::ReduceAction::action)";
-void parser___ReduceAction524___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction649___action[] = "parser::ReduceAction649::(parser::ReduceAction::action)";
+void parser___ReduceAction649___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 16194;
-  fra.me.meth = LOCATE_parser___ReduceAction524___action;
+  fra.me.line = 21406;
+  fra.me.meth = LOCATE_parser___ReduceAction649___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -44725,21 +58027,21 @@ void parser___ReduceAction524___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:16196 */
+  /* parser/parser.nit:21408 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16197 */
+  /* parser/parser.nit:21409 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16198 */
+  /* parser/parser.nit:21410 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16199 */
+  /* parser/parser.nit:21411 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16201 */
+  /* parser/parser.nit:21413 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:16202 */
+  /* parser/parser.nit:21414 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16202);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21414);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44747,15 +58049,15 @@ void parser___ReduceAction524___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction525___action[] = "parser::ReduceAction525::(parser::ReduceAction::action)";
-void parser___ReduceAction525___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction650___action[] = "parser::ReduceAction650::(parser::ReduceAction::action)";
+void parser___ReduceAction650___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 16207;
-  fra.me.meth = LOCATE_parser___ReduceAction525___action;
+  fra.me.line = 21419;
+  fra.me.meth = LOCATE_parser___ReduceAction650___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -44765,21 +58067,21 @@ void parser___ReduceAction525___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:16209 */
+  /* parser/parser.nit:21421 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16210 */
+  /* parser/parser.nit:21422 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16211 */
+  /* parser/parser.nit:21423 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16212 */
+  /* parser/parser.nit:21424 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16214 */
+  /* parser/parser.nit:21426 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:16215 */
+  /* parser/parser.nit:21427 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16215);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21427);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44787,15 +58089,15 @@ void parser___ReduceAction525___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction526___action[] = "parser::ReduceAction526::(parser::ReduceAction::action)";
-void parser___ReduceAction526___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction651___action[] = "parser::ReduceAction651::(parser::ReduceAction::action)";
+void parser___ReduceAction651___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 16220;
-  fra.me.meth = LOCATE_parser___ReduceAction526___action;
+  fra.me.line = 21432;
+  fra.me.meth = LOCATE_parser___ReduceAction651___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -44805,15 +58107,15 @@ void parser___ReduceAction526___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:16222 */
+  /* parser/parser.nit:21434 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16223 */
+  /* parser/parser.nit:21435 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16224 */
+  /* parser/parser.nit:21436 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16224);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21436);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44821,15 +58123,15 @@ void parser___ReduceAction526___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction528___action[] = "parser::ReduceAction528::(parser::ReduceAction::action)";
-void parser___ReduceAction528___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction653___action[] = "parser::ReduceAction653::(parser::ReduceAction::action)";
+void parser___ReduceAction653___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 16229;
-  fra.me.meth = LOCATE_parser___ReduceAction528___action;
+  fra.me.line = 21441;
+  fra.me.meth = LOCATE_parser___ReduceAction653___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -44840,30 +58142,30 @@ void parser___ReduceAction528___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:16231 */
+  /* parser/parser.nit:21443 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16232 */
+  /* parser/parser.nit:21444 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16233 */
+  /* parser/parser.nit:21445 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16235 */
+  /* parser/parser.nit:21447 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16235);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21447);
   }
-  /* parser/parser.nit:16236 */
+  /* parser/parser.nit:21448 */
   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:16237 */
+  /* parser/parser.nit:21449 */
   fra.me.REG[4] = NEW_ADoc_parser___parser_prod___ADoc___init_adoc(fra.me.REG[4]);
-  /* parser/parser.nit:16240 */
+  /* parser/parser.nit:21452 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:16241 */
+  /* parser/parser.nit:21453 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16241);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21453);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44871,15 +58173,15 @@ void parser___ReduceAction528___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction529___action[] = "parser::ReduceAction529::(parser::ReduceAction::action)";
-void parser___ReduceAction529___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction654___action[] = "parser::ReduceAction654::(parser::ReduceAction::action)";
+void parser___ReduceAction654___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 16246;
-  fra.me.meth = LOCATE_parser___ReduceAction529___action;
+  fra.me.line = 21458;
+  fra.me.meth = LOCATE_parser___ReduceAction654___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -44890,32 +58192,32 @@ void parser___ReduceAction529___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:16248 */
+  /* parser/parser.nit:21460 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16249 */
+  /* parser/parser.nit:21461 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16250 */
+  /* parser/parser.nit:21462 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16251 */
+  /* parser/parser.nit:21463 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16253 */
+  /* parser/parser.nit:21465 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16253);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21465);
   }
-  /* parser/parser.nit:16254 */
+  /* parser/parser.nit:21466 */
   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:16255 */
+  /* parser/parser.nit:21467 */
   fra.me.REG[4] = NEW_ADoc_parser___parser_prod___ADoc___init_adoc(fra.me.REG[4]);
-  /* parser/parser.nit:16258 */
+  /* parser/parser.nit:21470 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:16259 */
+  /* parser/parser.nit:21471 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16259);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21471);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44923,15 +58225,15 @@ void parser___ReduceAction529___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction531___action[] = "parser::ReduceAction531::(parser::ReduceAction::action)";
-void parser___ReduceAction531___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction656___action[] = "parser::ReduceAction656::(parser::ReduceAction::action)";
+void parser___ReduceAction656___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 = 16264;
-  fra.me.meth = LOCATE_parser___ReduceAction531___action;
+  fra.me.line = 21476;
+  fra.me.meth = LOCATE_parser___ReduceAction656___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.nitni_local_ref_head = NULL;
@@ -44940,15 +58242,15 @@ void parser___ReduceAction531___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:16266 */
+  /* parser/parser.nit:21478 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16267 */
+  /* parser/parser.nit:21479 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16268 */
+  /* parser/parser.nit:21480 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16268);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21480);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44956,15 +58258,15 @@ void parser___ReduceAction531___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction532___action[] = "parser::ReduceAction532::(parser::ReduceAction::action)";
-void parser___ReduceAction532___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction657___action[] = "parser::ReduceAction657::(parser::ReduceAction::action)";
+void parser___ReduceAction657___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 16273;
-  fra.me.meth = LOCATE_parser___ReduceAction532___action;
+  fra.me.line = 21485;
+  fra.me.meth = LOCATE_parser___ReduceAction657___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -44974,17 +58276,17 @@ void parser___ReduceAction532___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:16275 */
+  /* parser/parser.nit:21487 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16276 */
+  /* parser/parser.nit:21488 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16278 */
+  /* parser/parser.nit:21490 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:16279 */
+  /* parser/parser.nit:21491 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16279);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21491);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -44992,15 +58294,15 @@ void parser___ReduceAction532___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction533___action[] = "parser::ReduceAction533::(parser::ReduceAction::action)";
-void parser___ReduceAction533___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction658___action[] = "parser::ReduceAction658::(parser::ReduceAction::action)";
+void parser___ReduceAction658___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 16284;
-  fra.me.meth = LOCATE_parser___ReduceAction533___action;
+  fra.me.line = 21496;
+  fra.me.meth = LOCATE_parser___ReduceAction658___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -45010,17 +58312,17 @@ void parser___ReduceAction533___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:16286 */
+  /* parser/parser.nit:21498 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16287 */
+  /* parser/parser.nit:21499 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16288 */
+  /* parser/parser.nit:21500 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16289 */
+  /* parser/parser.nit:21501 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16289);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21501);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45028,15 +58330,15 @@ void parser___ReduceAction533___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction534___action[] = "parser::ReduceAction534::(parser::ReduceAction::action)";
-void parser___ReduceAction534___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction659___action[] = "parser::ReduceAction659::(parser::ReduceAction::action)";
+void parser___ReduceAction659___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 16294;
-  fra.me.meth = LOCATE_parser___ReduceAction534___action;
+  fra.me.line = 21506;
+  fra.me.meth = LOCATE_parser___ReduceAction659___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -45046,19 +58348,19 @@ void parser___ReduceAction534___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:16296 */
+  /* parser/parser.nit:21508 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16297 */
+  /* parser/parser.nit:21509 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16298 */
+  /* parser/parser.nit:21510 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16299 */
+  /* parser/parser.nit:21511 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16300 */
+  /* parser/parser.nit:21512 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16300);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21512);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45066,15 +58368,15 @@ void parser___ReduceAction534___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction806___action[] = "parser::ReduceAction806::(parser::ReduceAction::action)";
-void parser___ReduceAction806___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction931___action[] = "parser::ReduceAction931::(parser::ReduceAction::action)";
+void parser___ReduceAction931___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 = 16305;
-  fra.me.meth = LOCATE_parser___ReduceAction806___action;
+  fra.me.line = 21517;
+  fra.me.meth = LOCATE_parser___ReduceAction931___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -45086,41 +58388,41 @@ void parser___ReduceAction806___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:16307 */
+  /* parser/parser.nit:21519 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16308 */
+  /* parser/parser.nit:21520 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16309 */
+  /* parser/parser.nit:21521 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16310 */
+  /* parser/parser.nit:21522 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16312 */
+  /* parser/parser.nit:21524 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwisset, ID_parser___parser_nodes___TKwisset)) /*cast nullable TKwisset*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16312);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21524);
   }
-  /* parser/parser.nit:16314 */
+  /* parser/parser.nit:21526 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16314);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21526);
   }
-  /* parser/parser.nit:16316 */
+  /* parser/parser.nit:21528 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16316);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21528);
   }
-  /* parser/parser.nit:16317 */
+  /* parser/parser.nit:21529 */
   fra.me.REG[3] = NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:16322 */
+  /* parser/parser.nit:21534 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:16323 */
+  /* parser/parser.nit:21535 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16323);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21535);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45128,15 +58430,15 @@ void parser___ReduceAction806___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction807___action[] = "parser::ReduceAction807::(parser::ReduceAction::action)";
-void parser___ReduceAction807___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction932___action[] = "parser::ReduceAction932::(parser::ReduceAction::action)";
+void parser___ReduceAction932___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 16328;
-  fra.me.meth = LOCATE_parser___ReduceAction807___action;
+  fra.me.line = 21540;
+  fra.me.meth = LOCATE_parser___ReduceAction932___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -45147,33 +58449,33 @@ void parser___ReduceAction807___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:16330 */
+  /* parser/parser.nit:21542 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16331 */
+  /* parser/parser.nit:21543 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16332 */
+  /* parser/parser.nit:21544 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16334 */
+  /* parser/parser.nit:21546 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16334);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21546);
   }
-  /* parser/parser.nit:16336 */
+  /* parser/parser.nit:21548 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16336);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21548);
   }
-  /* parser/parser.nit:16337 */
+  /* parser/parser.nit:21549 */
   fra.me.REG[3] = NEW_AAttrExpr_parser___parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:16341 */
+  /* parser/parser.nit:21553 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:16342 */
+  /* parser/parser.nit:21554 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16342);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21554);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45181,15 +58483,15 @@ void parser___ReduceAction807___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction808___action[] = "parser::ReduceAction808::(parser::ReduceAction::action)";
-void parser___ReduceAction808___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction933___action[] = "parser::ReduceAction933::(parser::ReduceAction::action)";
+void parser___ReduceAction933___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 = 16347;
-  fra.me.meth = LOCATE_parser___ReduceAction808___action;
+  fra.me.line = 21559;
+  fra.me.meth = LOCATE_parser___ReduceAction933___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
@@ -45202,43 +58504,43 @@ void parser___ReduceAction808___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:16349 */
+  /* parser/parser.nit:21561 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16350 */
+  /* parser/parser.nit:21562 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16351 */
+  /* parser/parser.nit:21563 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16352 */
+  /* parser/parser.nit:21564 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16353 */
+  /* parser/parser.nit:21565 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16355 */
+  /* parser/parser.nit:21567 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16355);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21567);
   }
-  /* parser/parser.nit:16357 */
+  /* parser/parser.nit:21569 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16357);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21569);
   }
-  /* parser/parser.nit:16359 */
+  /* parser/parser.nit:21571 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16359);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21571);
   }
-  /* parser/parser.nit:16360 */
+  /* parser/parser.nit:21572 */
   fra.me.REG[6] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[6]);
-  /* parser/parser.nit:16366 */
+  /* parser/parser.nit:21578 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* parser/parser.nit:16367 */
+  /* parser/parser.nit:21579 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16367);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21579);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45246,15 +58548,15 @@ void parser___ReduceAction808___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction811___action[] = "parser::ReduceAction811::(parser::ReduceAction::action)";
-void parser___ReduceAction811___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction936___action[] = "parser::ReduceAction936::(parser::ReduceAction::action)";
+void parser___ReduceAction936___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 = 16372;
-  fra.me.meth = LOCATE_parser___ReduceAction811___action;
+  fra.me.line = 21584;
+  fra.me.meth = LOCATE_parser___ReduceAction936___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -45266,41 +58568,41 @@ void parser___ReduceAction811___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:16374 */
+  /* parser/parser.nit:21586 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16375 */
+  /* parser/parser.nit:21587 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16376 */
+  /* parser/parser.nit:21588 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16377 */
+  /* parser/parser.nit:21589 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16379 */
+  /* parser/parser.nit:21591 */
   REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16379);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21591);
   }
-  /* parser/parser.nit:16381 */
+  /* parser/parser.nit:21593 */
   REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16381);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21593);
   }
-  /* parser/parser.nit:16383 */
+  /* parser/parser.nit:21595 */
   REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16383);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21595);
   }
-  /* parser/parser.nit:16384 */
+  /* parser/parser.nit:21596 */
   fra.me.REG[3] = NEW_AInitExpr_parser___parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* parser/parser.nit:16389 */
+  /* parser/parser.nit:21601 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:16390 */
+  /* parser/parser.nit:21602 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16390);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21602);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45308,15 +58610,15 @@ void parser___ReduceAction811___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction824___action[] = "parser::ReduceAction824::(parser::ReduceAction::action)";
-void parser___ReduceAction824___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction957___action[] = "parser::ReduceAction957::(parser::ReduceAction::action)";
+void parser___ReduceAction957___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 16395;
-  fra.me.meth = LOCATE_parser___ReduceAction824___action;
+  fra.me.line = 21607;
+  fra.me.meth = LOCATE_parser___ReduceAction957___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -45326,21 +58628,21 @@ void parser___ReduceAction824___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:16397 */
+  /* parser/parser.nit:21609 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16398 */
+  /* parser/parser.nit:21610 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16399 */
+  /* parser/parser.nit:21611 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16400 */
+  /* parser/parser.nit:21612 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16402 */
+  /* parser/parser.nit:21614 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:16403 */
+  /* parser/parser.nit:21615 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16403);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21615);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45348,15 +58650,15 @@ void parser___ReduceAction824___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction825___action[] = "parser::ReduceAction825::(parser::ReduceAction::action)";
-void parser___ReduceAction825___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction958___action[] = "parser::ReduceAction958::(parser::ReduceAction::action)";
+void parser___ReduceAction958___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 16408;
-  fra.me.meth = LOCATE_parser___ReduceAction825___action;
+  fra.me.line = 21620;
+  fra.me.meth = LOCATE_parser___ReduceAction958___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -45366,17 +58668,17 @@ void parser___ReduceAction825___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:16410 */
+  /* parser/parser.nit:21622 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16411 */
+  /* parser/parser.nit:21623 */
   fra.me.REG[3] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* parser/parser.nit:16412 */
+  /* parser/parser.nit:21624 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* parser/parser.nit:16413 */
+  /* parser/parser.nit:21625 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16413);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21625);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45384,16 +58686,16 @@ void parser___ReduceAction825___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction832___action[] = "parser::ReduceAction832::(parser::ReduceAction::action)";
-void parser___ReduceAction832___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1250___action[] = "parser::ReduceAction1250::(parser::ReduceAction::action)";
+void parser___ReduceAction1250___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 = 16418;
-  fra.me.meth = LOCATE_parser___ReduceAction832___action;
+  fra.me.line = 21630;
+  fra.me.meth = LOCATE_parser___ReduceAction1250___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -45404,13 +58706,13 @@ void parser___ReduceAction832___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:16420 */
+  /* parser/parser.nit:21632 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16421 */
+  /* parser/parser.nit:21633 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16422 */
+  /* parser/parser.nit:21634 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16424 */
+  /* parser/parser.nit:21636 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -45425,16 +58727,16 @@ void parser___ReduceAction832___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16425 */
+    /* parser/parser.nit:21637 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16427 */
+  /* parser/parser.nit:21639 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:16428 */
+  /* parser/parser.nit:21640 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16428);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21640);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45442,16 +58744,16 @@ void parser___ReduceAction832___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction833___action[] = "parser::ReduceAction833::(parser::ReduceAction::action)";
-void parser___ReduceAction833___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1251___action[] = "parser::ReduceAction1251::(parser::ReduceAction::action)";
+void parser___ReduceAction1251___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 = 16433;
-  fra.me.meth = LOCATE_parser___ReduceAction833___action;
+  fra.me.line = 21645;
+  fra.me.meth = LOCATE_parser___ReduceAction1251___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -45463,24 +58765,24 @@ void parser___ReduceAction833___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:16435 */
+  /* parser/parser.nit:21647 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16436 */
+  /* parser/parser.nit:21648 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16437 */
+  /* parser/parser.nit:21649 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16438 */
+  /* parser/parser.nit:21650 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16440 */
+  /* parser/parser.nit:21652 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16440);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21652);
   }
-  /* parser/parser.nit:16442 */
+  /* parser/parser.nit:21654 */
   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:16443 */
+  /* parser/parser.nit:21655 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -45495,16 +58797,16 @@ void parser___ReduceAction833___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16444 */
+    /* parser/parser.nit:21656 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16446 */
+  /* parser/parser.nit:21658 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:16447 */
+  /* parser/parser.nit:21659 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16447);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21659);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45512,16 +58814,16 @@ void parser___ReduceAction833___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction834___action[] = "parser::ReduceAction834::(parser::ReduceAction::action)";
-void parser___ReduceAction834___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1252___action[] = "parser::ReduceAction1252::(parser::ReduceAction::action)";
+void parser___ReduceAction1252___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 = 16452;
-  fra.me.meth = LOCATE_parser___ReduceAction834___action;
+  fra.me.line = 21664;
+  fra.me.meth = LOCATE_parser___ReduceAction1252___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -45532,13 +58834,13 @@ void parser___ReduceAction834___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:16454 */
+  /* parser/parser.nit:21666 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16455 */
+  /* parser/parser.nit:21667 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16456 */
+  /* parser/parser.nit:21668 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16458 */
+  /* parser/parser.nit:21670 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -45553,16 +58855,16 @@ void parser___ReduceAction834___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16459 */
+    /* parser/parser.nit:21671 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16461 */
+  /* parser/parser.nit:21673 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:16462 */
+  /* parser/parser.nit:21674 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16462);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21674);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45570,16 +58872,16 @@ void parser___ReduceAction834___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction835___action[] = "parser::ReduceAction835::(parser::ReduceAction::action)";
-void parser___ReduceAction835___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1253___action[] = "parser::ReduceAction1253::(parser::ReduceAction::action)";
+void parser___ReduceAction1253___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 = 16467;
-  fra.me.meth = LOCATE_parser___ReduceAction835___action;
+  fra.me.line = 21679;
+  fra.me.meth = LOCATE_parser___ReduceAction1253___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -45591,24 +58893,24 @@ void parser___ReduceAction835___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:16469 */
+  /* parser/parser.nit:21681 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16470 */
+  /* parser/parser.nit:21682 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16471 */
+  /* parser/parser.nit:21683 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16472 */
+  /* parser/parser.nit:21684 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16474 */
+  /* parser/parser.nit:21686 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16474);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21686);
   }
-  /* parser/parser.nit:16476 */
+  /* parser/parser.nit:21688 */
   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:16477 */
+  /* parser/parser.nit:21689 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -45623,16 +58925,16 @@ void parser___ReduceAction835___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16478 */
+    /* parser/parser.nit:21690 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16480 */
+  /* parser/parser.nit:21692 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:16481 */
+  /* parser/parser.nit:21693 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16481);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21693);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45640,16 +58942,16 @@ void parser___ReduceAction835___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction836___action[] = "parser::ReduceAction836::(parser::ReduceAction::action)";
-void parser___ReduceAction836___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1254___action[] = "parser::ReduceAction1254::(parser::ReduceAction::action)";
+void parser___ReduceAction1254___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 = 16486;
-  fra.me.meth = LOCATE_parser___ReduceAction836___action;
+  fra.me.line = 21698;
+  fra.me.meth = LOCATE_parser___ReduceAction1254___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -45660,13 +58962,13 @@ void parser___ReduceAction836___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:16488 */
+  /* parser/parser.nit:21700 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16489 */
+  /* parser/parser.nit:21701 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16490 */
+  /* parser/parser.nit:21702 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16492 */
+  /* parser/parser.nit:21704 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -45681,16 +58983,16 @@ void parser___ReduceAction836___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16493 */
+    /* parser/parser.nit:21705 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16495 */
+  /* parser/parser.nit:21707 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:16496 */
+  /* parser/parser.nit:21708 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16496);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21708);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45698,16 +59000,16 @@ void parser___ReduceAction836___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction837___action[] = "parser::ReduceAction837::(parser::ReduceAction::action)";
-void parser___ReduceAction837___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1255___action[] = "parser::ReduceAction1255::(parser::ReduceAction::action)";
+void parser___ReduceAction1255___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 = 16501;
-  fra.me.meth = LOCATE_parser___ReduceAction837___action;
+  fra.me.line = 21713;
+  fra.me.meth = LOCATE_parser___ReduceAction1255___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -45719,24 +59021,24 @@ void parser___ReduceAction837___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:16503 */
+  /* parser/parser.nit:21715 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16504 */
+  /* parser/parser.nit:21716 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16505 */
+  /* parser/parser.nit:21717 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16506 */
+  /* parser/parser.nit:21718 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16508 */
+  /* parser/parser.nit:21720 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16508);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21720);
   }
-  /* parser/parser.nit:16510 */
+  /* parser/parser.nit:21722 */
   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:16511 */
+  /* parser/parser.nit:21723 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -45751,16 +59053,16 @@ void parser___ReduceAction837___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16512 */
+    /* parser/parser.nit:21724 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16514 */
+  /* parser/parser.nit:21726 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:16515 */
+  /* parser/parser.nit:21727 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16515);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21727);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45768,16 +59070,16 @@ void parser___ReduceAction837___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction838___action[] = "parser::ReduceAction838::(parser::ReduceAction::action)";
-void parser___ReduceAction838___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1256___action[] = "parser::ReduceAction1256::(parser::ReduceAction::action)";
+void parser___ReduceAction1256___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 = 16520;
-  fra.me.meth = LOCATE_parser___ReduceAction838___action;
+  fra.me.line = 21732;
+  fra.me.meth = LOCATE_parser___ReduceAction1256___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -45788,13 +59090,13 @@ void parser___ReduceAction838___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:16522 */
+  /* parser/parser.nit:21734 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16523 */
+  /* parser/parser.nit:21735 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16524 */
+  /* parser/parser.nit:21736 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16526 */
+  /* parser/parser.nit:21738 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -45809,16 +59111,16 @@ void parser___ReduceAction838___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16527 */
+    /* parser/parser.nit:21739 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16529 */
+  /* parser/parser.nit:21741 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:16530 */
+  /* parser/parser.nit:21742 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16530);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21742);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45826,16 +59128,16 @@ void parser___ReduceAction838___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction839___action[] = "parser::ReduceAction839::(parser::ReduceAction::action)";
-void parser___ReduceAction839___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1257___action[] = "parser::ReduceAction1257::(parser::ReduceAction::action)";
+void parser___ReduceAction1257___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 = 16535;
-  fra.me.meth = LOCATE_parser___ReduceAction839___action;
+  fra.me.line = 21747;
+  fra.me.meth = LOCATE_parser___ReduceAction1257___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -45847,24 +59149,24 @@ void parser___ReduceAction839___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:16537 */
+  /* parser/parser.nit:21749 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16538 */
+  /* parser/parser.nit:21750 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16539 */
+  /* parser/parser.nit:21751 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16540 */
+  /* parser/parser.nit:21752 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16542 */
+  /* parser/parser.nit:21754 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16542);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21754);
   }
-  /* parser/parser.nit:16544 */
+  /* parser/parser.nit:21756 */
   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:16545 */
+  /* parser/parser.nit:21757 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -45879,16 +59181,16 @@ void parser___ReduceAction839___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16546 */
+    /* parser/parser.nit:21758 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16548 */
+  /* parser/parser.nit:21760 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:16549 */
+  /* parser/parser.nit:21761 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16549);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21761);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45896,16 +59198,16 @@ void parser___ReduceAction839___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction840___action[] = "parser::ReduceAction840::(parser::ReduceAction::action)";
-void parser___ReduceAction840___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1258___action[] = "parser::ReduceAction1258::(parser::ReduceAction::action)";
+void parser___ReduceAction1258___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 = 16554;
-  fra.me.meth = LOCATE_parser___ReduceAction840___action;
+  fra.me.line = 21766;
+  fra.me.meth = LOCATE_parser___ReduceAction1258___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -45916,13 +59218,13 @@ void parser___ReduceAction840___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:16556 */
+  /* parser/parser.nit:21768 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16557 */
+  /* parser/parser.nit:21769 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16558 */
+  /* parser/parser.nit:21770 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16560 */
+  /* parser/parser.nit:21772 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -45937,16 +59239,16 @@ void parser___ReduceAction840___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16561 */
+    /* parser/parser.nit:21773 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16563 */
+  /* parser/parser.nit:21775 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:16564 */
+  /* parser/parser.nit:21776 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16564);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21776);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -45954,16 +59256,16 @@ void parser___ReduceAction840___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction841___action[] = "parser::ReduceAction841::(parser::ReduceAction::action)";
-void parser___ReduceAction841___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1259___action[] = "parser::ReduceAction1259::(parser::ReduceAction::action)";
+void parser___ReduceAction1259___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 = 16569;
-  fra.me.meth = LOCATE_parser___ReduceAction841___action;
+  fra.me.line = 21781;
+  fra.me.meth = LOCATE_parser___ReduceAction1259___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -45975,24 +59277,24 @@ void parser___ReduceAction841___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:16571 */
+  /* parser/parser.nit:21783 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16572 */
+  /* parser/parser.nit:21784 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16573 */
+  /* parser/parser.nit:21785 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16574 */
+  /* parser/parser.nit:21786 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16576 */
+  /* parser/parser.nit:21788 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16576);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21788);
   }
-  /* parser/parser.nit:16578 */
+  /* parser/parser.nit:21790 */
   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:16579 */
+  /* parser/parser.nit:21791 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46007,16 +59309,16 @@ void parser___ReduceAction841___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16580 */
+    /* parser/parser.nit:21792 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16582 */
+  /* parser/parser.nit:21794 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:16583 */
+  /* parser/parser.nit:21795 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16583);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21795);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -46024,16 +59326,16 @@ void parser___ReduceAction841___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction844___action[] = "parser::ReduceAction844::(parser::ReduceAction::action)";
-void parser___ReduceAction844___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1262___action[] = "parser::ReduceAction1262::(parser::ReduceAction::action)";
+void parser___ReduceAction1262___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 = 16588;
-  fra.me.meth = LOCATE_parser___ReduceAction844___action;
+  fra.me.line = 21800;
+  fra.me.meth = LOCATE_parser___ReduceAction1262___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -46044,13 +59346,13 @@ void parser___ReduceAction844___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:16590 */
+  /* parser/parser.nit:21802 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16591 */
+  /* parser/parser.nit:21803 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16592 */
+  /* parser/parser.nit:21804 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16594 */
+  /* parser/parser.nit:21806 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46065,16 +59367,16 @@ void parser___ReduceAction844___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16595 */
+    /* parser/parser.nit:21807 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16597 */
+  /* parser/parser.nit:21809 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:16598 */
+  /* parser/parser.nit:21810 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16598);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21810);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -46082,16 +59384,16 @@ void parser___ReduceAction844___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction845___action[] = "parser::ReduceAction845::(parser::ReduceAction::action)";
-void parser___ReduceAction845___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1263___action[] = "parser::ReduceAction1263::(parser::ReduceAction::action)";
+void parser___ReduceAction1263___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 = 16603;
-  fra.me.meth = LOCATE_parser___ReduceAction845___action;
+  fra.me.line = 21815;
+  fra.me.meth = LOCATE_parser___ReduceAction1263___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -46103,24 +59405,24 @@ void parser___ReduceAction845___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:16605 */
+  /* parser/parser.nit:21817 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16606 */
+  /* parser/parser.nit:21818 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16607 */
+  /* parser/parser.nit:21819 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16608 */
+  /* parser/parser.nit:21820 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16610 */
+  /* parser/parser.nit:21822 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16610);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21822);
   }
-  /* parser/parser.nit:16612 */
+  /* parser/parser.nit:21824 */
   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:16613 */
+  /* parser/parser.nit:21825 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46135,16 +59437,16 @@ void parser___ReduceAction845___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16614 */
+    /* parser/parser.nit:21826 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16616 */
+  /* parser/parser.nit:21828 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:16617 */
+  /* parser/parser.nit:21829 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16617);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21829);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -46152,16 +59454,16 @@ void parser___ReduceAction845___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction846___action[] = "parser::ReduceAction846::(parser::ReduceAction::action)";
-void parser___ReduceAction846___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1264___action[] = "parser::ReduceAction1264::(parser::ReduceAction::action)";
+void parser___ReduceAction1264___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 = 16622;
-  fra.me.meth = LOCATE_parser___ReduceAction846___action;
+  fra.me.line = 21834;
+  fra.me.meth = LOCATE_parser___ReduceAction1264___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -46172,13 +59474,13 @@ void parser___ReduceAction846___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:16624 */
+  /* parser/parser.nit:21836 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16625 */
+  /* parser/parser.nit:21837 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16626 */
+  /* parser/parser.nit:21838 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16628 */
+  /* parser/parser.nit:21840 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46193,16 +59495,16 @@ void parser___ReduceAction846___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16629 */
+    /* parser/parser.nit:21841 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16631 */
+  /* parser/parser.nit:21843 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:16632 */
+  /* parser/parser.nit:21844 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16632);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21844);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -46210,16 +59512,16 @@ void parser___ReduceAction846___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction847___action[] = "parser::ReduceAction847::(parser::ReduceAction::action)";
-void parser___ReduceAction847___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1265___action[] = "parser::ReduceAction1265::(parser::ReduceAction::action)";
+void parser___ReduceAction1265___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 = 16637;
-  fra.me.meth = LOCATE_parser___ReduceAction847___action;
+  fra.me.line = 21849;
+  fra.me.meth = LOCATE_parser___ReduceAction1265___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -46231,24 +59533,24 @@ void parser___ReduceAction847___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:16639 */
+  /* parser/parser.nit:21851 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16640 */
+  /* parser/parser.nit:21852 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16641 */
+  /* parser/parser.nit:21853 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16642 */
+  /* parser/parser.nit:21854 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16644 */
+  /* parser/parser.nit:21856 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16644);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21856);
   }
-  /* parser/parser.nit:16646 */
+  /* parser/parser.nit:21858 */
   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:16647 */
+  /* parser/parser.nit:21859 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46263,16 +59565,16 @@ void parser___ReduceAction847___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16648 */
+    /* parser/parser.nit:21860 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16650 */
+  /* parser/parser.nit:21862 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:16651 */
+  /* parser/parser.nit:21863 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16651);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21863);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -46280,16 +59582,16 @@ void parser___ReduceAction847___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction848___action[] = "parser::ReduceAction848::(parser::ReduceAction::action)";
-void parser___ReduceAction848___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1266___action[] = "parser::ReduceAction1266::(parser::ReduceAction::action)";
+void parser___ReduceAction1266___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 = 16656;
-  fra.me.meth = LOCATE_parser___ReduceAction848___action;
+  fra.me.line = 21868;
+  fra.me.meth = LOCATE_parser___ReduceAction1266___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -46300,13 +59602,13 @@ void parser___ReduceAction848___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:16658 */
+  /* parser/parser.nit:21870 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16659 */
+  /* parser/parser.nit:21871 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16660 */
+  /* parser/parser.nit:21872 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16662 */
+  /* parser/parser.nit:21874 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46321,16 +59623,16 @@ void parser___ReduceAction848___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16663 */
+    /* parser/parser.nit:21875 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16665 */
+  /* parser/parser.nit:21877 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:16666 */
+  /* parser/parser.nit:21878 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16666);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21878);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -46338,16 +59640,16 @@ void parser___ReduceAction848___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction849___action[] = "parser::ReduceAction849::(parser::ReduceAction::action)";
-void parser___ReduceAction849___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1267___action[] = "parser::ReduceAction1267::(parser::ReduceAction::action)";
+void parser___ReduceAction1267___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 = 16671;
-  fra.me.meth = LOCATE_parser___ReduceAction849___action;
+  fra.me.line = 21883;
+  fra.me.meth = LOCATE_parser___ReduceAction1267___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -46359,24 +59661,24 @@ void parser___ReduceAction849___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:16673 */
+  /* parser/parser.nit:21885 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16674 */
+  /* parser/parser.nit:21886 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16675 */
+  /* parser/parser.nit:21887 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16676 */
+  /* parser/parser.nit:21888 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16678 */
+  /* parser/parser.nit:21890 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16678);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21890);
   }
-  /* parser/parser.nit:16680 */
+  /* parser/parser.nit:21892 */
   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:16681 */
+  /* parser/parser.nit:21893 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46391,16 +59693,16 @@ void parser___ReduceAction849___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16682 */
+    /* parser/parser.nit:21894 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16684 */
+  /* parser/parser.nit:21896 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:16685 */
+  /* parser/parser.nit:21897 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16685);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21897);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -46408,16 +59710,16 @@ void parser___ReduceAction849___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction850___action[] = "parser::ReduceAction850::(parser::ReduceAction::action)";
-void parser___ReduceAction850___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1268___action[] = "parser::ReduceAction1268::(parser::ReduceAction::action)";
+void parser___ReduceAction1268___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 = 16690;
-  fra.me.meth = LOCATE_parser___ReduceAction850___action;
+  fra.me.line = 21902;
+  fra.me.meth = LOCATE_parser___ReduceAction1268___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -46428,13 +59730,13 @@ void parser___ReduceAction850___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:16692 */
+  /* parser/parser.nit:21904 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16693 */
+  /* parser/parser.nit:21905 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16694 */
+  /* parser/parser.nit:21906 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16696 */
+  /* parser/parser.nit:21908 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46449,16 +59751,16 @@ void parser___ReduceAction850___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16697 */
+    /* parser/parser.nit:21909 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16699 */
+  /* parser/parser.nit:21911 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:16700 */
+  /* parser/parser.nit:21912 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16700);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21912);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -46466,16 +59768,16 @@ void parser___ReduceAction850___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction851___action[] = "parser::ReduceAction851::(parser::ReduceAction::action)";
-void parser___ReduceAction851___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1269___action[] = "parser::ReduceAction1269::(parser::ReduceAction::action)";
+void parser___ReduceAction1269___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 = 16705;
-  fra.me.meth = LOCATE_parser___ReduceAction851___action;
+  fra.me.line = 21917;
+  fra.me.meth = LOCATE_parser___ReduceAction1269___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -46487,24 +59789,24 @@ void parser___ReduceAction851___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:16707 */
+  /* parser/parser.nit:21919 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16708 */
+  /* parser/parser.nit:21920 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16709 */
+  /* parser/parser.nit:21921 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16710 */
+  /* parser/parser.nit:21922 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16712 */
+  /* parser/parser.nit:21924 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16712);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21924);
   }
-  /* parser/parser.nit:16714 */
+  /* parser/parser.nit:21926 */
   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:16715 */
+  /* parser/parser.nit:21927 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46519,16 +59821,16 @@ void parser___ReduceAction851___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16716 */
+    /* parser/parser.nit:21928 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16718 */
+  /* parser/parser.nit:21930 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:16719 */
+  /* parser/parser.nit:21931 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16719);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21931);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -46536,16 +59838,16 @@ void parser___ReduceAction851___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction853___action[] = "parser::ReduceAction853::(parser::ReduceAction::action)";
-void parser___ReduceAction853___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1271___action[] = "parser::ReduceAction1271::(parser::ReduceAction::action)";
+void parser___ReduceAction1271___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 = 16724;
-  fra.me.meth = LOCATE_parser___ReduceAction853___action;
+  fra.me.line = 21936;
+  fra.me.meth = LOCATE_parser___ReduceAction1271___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -46557,24 +59859,24 @@ void parser___ReduceAction853___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:16726 */
+  /* parser/parser.nit:21938 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16727 */
+  /* parser/parser.nit:21939 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16728 */
+  /* parser/parser.nit:21940 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16729 */
+  /* parser/parser.nit:21941 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16731 */
+  /* parser/parser.nit:21943 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16731);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21943);
   }
-  /* parser/parser.nit:16733 */
+  /* parser/parser.nit:21945 */
   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:16734 */
+  /* parser/parser.nit:21946 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46589,16 +59891,16 @@ void parser___ReduceAction853___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16735 */
+    /* parser/parser.nit:21947 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16737 */
+  /* parser/parser.nit:21949 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:16738 */
+  /* parser/parser.nit:21950 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16738);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21950);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -46606,16 +59908,16 @@ void parser___ReduceAction853___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction854___action[] = "parser::ReduceAction854::(parser::ReduceAction::action)";
-void parser___ReduceAction854___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1272___action[] = "parser::ReduceAction1272::(parser::ReduceAction::action)";
+void parser___ReduceAction1272___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 = 16743;
-  fra.me.meth = LOCATE_parser___ReduceAction854___action;
+  fra.me.line = 21955;
+  fra.me.meth = LOCATE_parser___ReduceAction1272___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -46626,13 +59928,13 @@ void parser___ReduceAction854___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:16745 */
+  /* parser/parser.nit:21957 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16746 */
+  /* parser/parser.nit:21958 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16747 */
+  /* parser/parser.nit:21959 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16749 */
+  /* parser/parser.nit:21961 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46647,16 +59949,16 @@ void parser___ReduceAction854___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16750 */
+    /* parser/parser.nit:21962 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16752 */
+  /* parser/parser.nit:21964 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:16753 */
+  /* parser/parser.nit:21965 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16753);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21965);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -46664,16 +59966,16 @@ void parser___ReduceAction854___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction855___action[] = "parser::ReduceAction855::(parser::ReduceAction::action)";
-void parser___ReduceAction855___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1273___action[] = "parser::ReduceAction1273::(parser::ReduceAction::action)";
+void parser___ReduceAction1273___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 = 16758;
-  fra.me.meth = LOCATE_parser___ReduceAction855___action;
+  fra.me.line = 21970;
+  fra.me.meth = LOCATE_parser___ReduceAction1273___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -46685,24 +59987,24 @@ void parser___ReduceAction855___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:16760 */
+  /* parser/parser.nit:21972 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16761 */
+  /* parser/parser.nit:21973 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16762 */
+  /* parser/parser.nit:21974 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16763 */
+  /* parser/parser.nit:21975 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16765 */
+  /* parser/parser.nit:21977 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16765);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21977);
   }
-  /* parser/parser.nit:16767 */
+  /* parser/parser.nit:21979 */
   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:16768 */
+  /* parser/parser.nit:21980 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46717,16 +60019,16 @@ void parser___ReduceAction855___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16769 */
+    /* parser/parser.nit:21981 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16771 */
+  /* parser/parser.nit:21983 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:16772 */
+  /* parser/parser.nit:21984 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16772);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 21984);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -46734,15 +60036,15 @@ void parser___ReduceAction855___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction857___action[] = "parser::ReduceAction857::(parser::ReduceAction::action)";
-void parser___ReduceAction857___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1275___action[] = "parser::ReduceAction1275::(parser::ReduceAction::action)";
+void parser___ReduceAction1275___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 = 16777;
-  fra.me.meth = LOCATE_parser___ReduceAction857___action;
+  fra.me.line = 21989;
+  fra.me.meth = LOCATE_parser___ReduceAction1275___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -46754,39 +60056,39 @@ void parser___ReduceAction857___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:16779 */
+  /* parser/parser.nit:21991 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16780 */
+  /* parser/parser.nit:21992 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16781 */
+  /* parser/parser.nit:21993 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16782 */
+  /* parser/parser.nit:21994 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16784 */
+  /* parser/parser.nit:21996 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16784);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21996);
   }
-  /* parser/parser.nit:16786 */
+  /* parser/parser.nit:21998 */
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16786);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 21998);
   }
-  /* parser/parser.nit:16787 */
+  /* parser/parser.nit:21999 */
   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:16788 */
+  /* parser/parser.nit:22000 */
   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:16789 */
+  /* parser/parser.nit:22001 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:16790 */
+  /* parser/parser.nit:22002 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16790);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 22002);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -46794,16 +60096,16 @@ void parser___ReduceAction857___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction861___action[] = "parser::ReduceAction861::(parser::ReduceAction::action)";
-void parser___ReduceAction861___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1277___action[] = "parser::ReduceAction1277::(parser::ReduceAction::action)";
+void parser___ReduceAction1277___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 = 16795;
-  fra.me.meth = LOCATE_parser___ReduceAction861___action;
+  fra.me.line = 22007;
+  fra.me.meth = LOCATE_parser___ReduceAction1277___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -46815,24 +60117,24 @@ void parser___ReduceAction861___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:16797 */
+  /* parser/parser.nit:22009 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16798 */
+  /* parser/parser.nit:22010 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16799 */
+  /* parser/parser.nit:22011 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16800 */
+  /* parser/parser.nit:22012 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16802 */
+  /* parser/parser.nit:22014 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16802);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 22014);
   }
-  /* parser/parser.nit:16804 */
+  /* parser/parser.nit:22016 */
   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:16805 */
+  /* parser/parser.nit:22017 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46847,16 +60149,156 @@ void parser___ReduceAction861___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16806 */
+    /* parser/parser.nit:22018 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16808 */
+  /* parser/parser.nit:22020 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:16809 */
+  /* parser/parser.nit:22021 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 22021);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction1281___action[] = "parser::ReduceAction1281::(parser::ReduceAction::action)";
+void parser___ReduceAction1281___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 = 22026;
+  fra.me.meth = LOCATE_parser___ReduceAction1281___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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:22028 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:22029 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:22030 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:22031 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:22033 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 22033);
+  }
+  /* parser/parser.nit:22035 */
+  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:22036 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:22037 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:22039 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:22040 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 22040);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___ReduceAction1285___action[] = "parser::ReduceAction1285::(parser::ReduceAction::action)";
+void parser___ReduceAction1285___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 = 22045;
+  fra.me.meth = LOCATE_parser___ReduceAction1285___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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:22047 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:22048 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:22049 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:22050 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:22052 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 22052);
+  }
+  /* parser/parser.nit:22054 */
+  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:22055 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:22056 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:22058 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:22059 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16809);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 22059);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -46864,16 +60306,16 @@ void parser___ReduceAction861___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction862___action[] = "parser::ReduceAction862::(parser::ReduceAction::action)";
-void parser___ReduceAction862___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1286___action[] = "parser::ReduceAction1286::(parser::ReduceAction::action)";
+void parser___ReduceAction1286___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 = 16814;
-  fra.me.meth = LOCATE_parser___ReduceAction862___action;
+  fra.me.line = 22064;
+  fra.me.meth = LOCATE_parser___ReduceAction1286___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -46884,13 +60326,13 @@ void parser___ReduceAction862___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:16816 */
+  /* parser/parser.nit:22066 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16817 */
+  /* parser/parser.nit:22067 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16818 */
+  /* parser/parser.nit:22068 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16820 */
+  /* parser/parser.nit:22070 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46905,16 +60347,16 @@ void parser___ReduceAction862___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16821 */
+    /* parser/parser.nit:22071 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16823 */
+  /* parser/parser.nit:22073 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:16824 */
+  /* parser/parser.nit:22074 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16824);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 22074);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -46922,16 +60364,16 @@ void parser___ReduceAction862___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction863___action[] = "parser::ReduceAction863::(parser::ReduceAction::action)";
-void parser___ReduceAction863___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1287___action[] = "parser::ReduceAction1287::(parser::ReduceAction::action)";
+void parser___ReduceAction1287___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 = 16829;
-  fra.me.meth = LOCATE_parser___ReduceAction863___action;
+  fra.me.line = 22079;
+  fra.me.meth = LOCATE_parser___ReduceAction1287___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -46943,24 +60385,24 @@ void parser___ReduceAction863___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:16831 */
+  /* parser/parser.nit:22081 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16832 */
+  /* parser/parser.nit:22082 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16833 */
+  /* parser/parser.nit:22083 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16834 */
+  /* parser/parser.nit:22084 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16836 */
+  /* parser/parser.nit:22086 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16836);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 22086);
   }
-  /* parser/parser.nit:16838 */
+  /* parser/parser.nit:22088 */
   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:16839 */
+  /* parser/parser.nit:22089 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46975,16 +60417,16 @@ void parser___ReduceAction863___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16840 */
+    /* parser/parser.nit:22090 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16842 */
+  /* parser/parser.nit:22092 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:16843 */
+  /* parser/parser.nit:22093 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16843);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 22093);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -46992,16 +60434,16 @@ void parser___ReduceAction863___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction864___action[] = "parser::ReduceAction864::(parser::ReduceAction::action)";
-void parser___ReduceAction864___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1288___action[] = "parser::ReduceAction1288::(parser::ReduceAction::action)";
+void parser___ReduceAction1288___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 = 16848;
-  fra.me.meth = LOCATE_parser___ReduceAction864___action;
+  fra.me.line = 22098;
+  fra.me.meth = LOCATE_parser___ReduceAction1288___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -47012,13 +60454,13 @@ void parser___ReduceAction864___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:16850 */
+  /* parser/parser.nit:22100 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16851 */
+  /* parser/parser.nit:22101 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16852 */
+  /* parser/parser.nit:22102 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16854 */
+  /* parser/parser.nit:22104 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -47033,16 +60475,16 @@ void parser___ReduceAction864___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16855 */
+    /* parser/parser.nit:22105 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16857 */
+  /* parser/parser.nit:22107 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* parser/parser.nit:16858 */
+  /* parser/parser.nit:22108 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16858);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 22108);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -47050,16 +60492,16 @@ void parser___ReduceAction864___action(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___ReduceAction865___action[] = "parser::ReduceAction865::(parser::ReduceAction::action)";
-void parser___ReduceAction865___action(val_t p0, val_t p1){
+static const char LOCATE_parser___ReduceAction1289___action[] = "parser::ReduceAction1289::(parser::ReduceAction::action)";
+void parser___ReduceAction1289___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 = 16863;
-  fra.me.meth = LOCATE_parser___ReduceAction865___action;
+  fra.me.line = 22113;
+  fra.me.meth = LOCATE_parser___ReduceAction1289___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
@@ -47071,24 +60513,24 @@ void parser___ReduceAction865___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:16865 */
+  /* parser/parser.nit:22115 */
   fra.me.REG[2] = NIT_NULL;
-  /* parser/parser.nit:16866 */
+  /* parser/parser.nit:22116 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16867 */
+  /* parser/parser.nit:22117 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* parser/parser.nit:16868 */
+  /* parser/parser.nit:22118 */
   fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-  /* parser/parser.nit:16870 */
+  /* parser/parser.nit:22120 */
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 16870);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 22120);
   }
-  /* parser/parser.nit:16872 */
+  /* parser/parser.nit:22122 */
   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:16873 */
+  /* parser/parser.nit:22123 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -47103,16 +60545,16 @@ void parser___ReduceAction865___action(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser.nit:16874 */
+    /* parser/parser.nit:22124 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* parser/parser.nit:16876 */
+  /* parser/parser.nit:22126 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* parser/parser.nit:16877 */
+  /* parser/parser.nit:22127 */
   REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 16877);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 22127);
   }
   REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
index 28a4ed7..095348c 100644 (file)
@@ -152,9 +152,9 @@ extern const classtable_elt_t VFT_parser___ReduceAction68[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction69[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction71[];
+extern const classtable_elt_t VFT_parser___ReduceAction70[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction72[];
+extern const classtable_elt_t VFT_parser___ReduceAction71[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction73[];
 
@@ -642,6 +642,8 @@ extern const classtable_elt_t VFT_parser___ReduceAction314[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction315[];
 
+extern const classtable_elt_t VFT_parser___ReduceAction316[];
+
 extern const classtable_elt_t VFT_parser___ReduceAction317[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction318[];
@@ -654,8 +656,6 @@ extern const classtable_elt_t VFT_parser___ReduceAction321[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction322[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction323[];
-
 extern const classtable_elt_t VFT_parser___ReduceAction324[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction325[];
@@ -678,6 +678,8 @@ extern const classtable_elt_t VFT_parser___ReduceAction333[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction334[];
 
+extern const classtable_elt_t VFT_parser___ReduceAction335[];
+
 extern const classtable_elt_t VFT_parser___ReduceAction336[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction337[];
@@ -698,6 +700,12 @@ extern const classtable_elt_t VFT_parser___ReduceAction344[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction345[];
 
+extern const classtable_elt_t VFT_parser___ReduceAction346[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction347[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction348[];
+
 extern const classtable_elt_t VFT_parser___ReduceAction349[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction350[];
@@ -720,6 +728,18 @@ extern const classtable_elt_t VFT_parser___ReduceAction358[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction359[];
 
+extern const classtable_elt_t VFT_parser___ReduceAction360[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction361[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction362[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction363[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction364[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction365[];
+
 extern const classtable_elt_t VFT_parser___ReduceAction366[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction367[];
@@ -772,8 +792,6 @@ extern const classtable_elt_t VFT_parser___ReduceAction390[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction391[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction392[];
-
 extern const classtable_elt_t VFT_parser___ReduceAction393[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction394[];
@@ -818,14 +836,16 @@ extern const classtable_elt_t VFT_parser___ReduceAction413[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction414[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction415[];
-
 extern const classtable_elt_t VFT_parser___ReduceAction416[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction417[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction418[];
 
+extern const classtable_elt_t VFT_parser___ReduceAction419[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction420[];
+
 extern const classtable_elt_t VFT_parser___ReduceAction421[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction422[];
@@ -836,12 +856,6 @@ extern const classtable_elt_t VFT_parser___ReduceAction424[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction425[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction426[];
-
-extern const classtable_elt_t VFT_parser___ReduceAction427[];
-
-extern const classtable_elt_t VFT_parser___ReduceAction428[];
-
 extern const classtable_elt_t VFT_parser___ReduceAction429[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction430[];
@@ -852,17 +866,19 @@ extern const classtable_elt_t VFT_parser___ReduceAction432[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction433[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction437[];
+extern const classtable_elt_t VFT_parser___ReduceAction434[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction439[];
+extern const classtable_elt_t VFT_parser___ReduceAction435[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction441[];
+extern const classtable_elt_t VFT_parser___ReduceAction436[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction437[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction442[];
+extern const classtable_elt_t VFT_parser___ReduceAction438[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction443[];
+extern const classtable_elt_t VFT_parser___ReduceAction439[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction445[];
+extern const classtable_elt_t VFT_parser___ReduceAction446[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction447[];
 
@@ -886,20 +902,28 @@ extern const classtable_elt_t VFT_parser___ReduceAction456[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction457[];
 
+extern const classtable_elt_t VFT_parser___ReduceAction458[];
+
 extern const classtable_elt_t VFT_parser___ReduceAction459[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction460[];
 
+extern const classtable_elt_t VFT_parser___ReduceAction461[];
+
 extern const classtable_elt_t VFT_parser___ReduceAction462[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction463[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction464[];
 
+extern const classtable_elt_t VFT_parser___ReduceAction465[];
+
 extern const classtable_elt_t VFT_parser___ReduceAction466[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction467[];
 
+extern const classtable_elt_t VFT_parser___ReduceAction468[];
+
 extern const classtable_elt_t VFT_parser___ReduceAction469[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction470[];
@@ -910,6 +934,18 @@ extern const classtable_elt_t VFT_parser___ReduceAction472[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction473[];
 
+extern const classtable_elt_t VFT_parser___ReduceAction474[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction475[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction476[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction477[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction478[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction479[];
+
 extern const classtable_elt_t VFT_parser___ReduceAction480[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction481[];
@@ -936,6 +972,8 @@ extern const classtable_elt_t VFT_parser___ReduceAction491[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction492[];
 
+extern const classtable_elt_t VFT_parser___ReduceAction493[];
+
 extern const classtable_elt_t VFT_parser___ReduceAction494[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction495[];
@@ -950,18 +988,22 @@ extern const classtable_elt_t VFT_parser___ReduceAction499[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction500[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction502[];
-
-extern const classtable_elt_t VFT_parser___ReduceAction503[];
+extern const classtable_elt_t VFT_parser___ReduceAction501[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction504[];
+extern const classtable_elt_t VFT_parser___ReduceAction502[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction505[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction506[];
 
+extern const classtable_elt_t VFT_parser___ReduceAction507[];
+
 extern const classtable_elt_t VFT_parser___ReduceAction508[];
 
+extern const classtable_elt_t VFT_parser___ReduceAction509[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction510[];
+
 extern const classtable_elt_t VFT_parser___ReduceAction511[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction512[];
@@ -976,25 +1018,15 @@ extern const classtable_elt_t VFT_parser___ReduceAction516[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction517[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction518[];
-
-extern const classtable_elt_t VFT_parser___ReduceAction519[];
-
-extern const classtable_elt_t VFT_parser___ReduceAction520[];
-
 extern const classtable_elt_t VFT_parser___ReduceAction521[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction522[];
-
 extern const classtable_elt_t VFT_parser___ReduceAction523[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction524[];
-
 extern const classtable_elt_t VFT_parser___ReduceAction525[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction526[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction528[];
+extern const classtable_elt_t VFT_parser___ReduceAction527[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction529[];
 
@@ -1006,71 +1038,287 @@ extern const classtable_elt_t VFT_parser___ReduceAction533[];
 
 extern const classtable_elt_t VFT_parser___ReduceAction534[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction806[];
+extern const classtable_elt_t VFT_parser___ReduceAction535[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction536[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction537[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction538[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction539[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction540[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction541[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction543[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction544[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction546[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction547[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction548[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction550[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction551[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction553[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction554[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction555[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction556[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction557[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction564[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction565[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction566[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction567[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction568[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction569[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction570[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction571[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction572[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction573[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction574[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction575[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction576[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction577[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction578[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction579[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction580[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction581[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction582[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction583[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction584[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction585[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction586[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction587[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction589[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction590[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction591[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction592[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction593[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction594[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction595[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction596[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction597[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction598[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction600[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction601[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction602[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction603[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction604[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction605[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction606[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction607[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction608[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction609[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction610[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction612[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction613[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction614[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction615[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction616[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction617[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction618[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction619[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction620[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction621[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction622[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction624[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction625[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction626[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction627[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction628[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction629[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction630[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction631[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction633[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction636[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction637[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction638[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction639[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction640[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction641[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction642[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction643[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction644[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction645[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction646[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction647[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction648[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction649[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction650[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction651[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction653[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction654[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction656[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction657[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction658[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction659[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction931[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction932[];
+
+extern const classtable_elt_t VFT_parser___ReduceAction933[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction807[];
+extern const classtable_elt_t VFT_parser___ReduceAction936[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction808[];
+extern const classtable_elt_t VFT_parser___ReduceAction957[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction811[];
+extern const classtable_elt_t VFT_parser___ReduceAction958[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction824[];
+extern const classtable_elt_t VFT_parser___ReduceAction1250[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction825[];
+extern const classtable_elt_t VFT_parser___ReduceAction1251[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction832[];
+extern const classtable_elt_t VFT_parser___ReduceAction1252[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction833[];
+extern const classtable_elt_t VFT_parser___ReduceAction1253[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction834[];
+extern const classtable_elt_t VFT_parser___ReduceAction1254[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction835[];
+extern const classtable_elt_t VFT_parser___ReduceAction1255[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction836[];
+extern const classtable_elt_t VFT_parser___ReduceAction1256[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction837[];
+extern const classtable_elt_t VFT_parser___ReduceAction1257[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction838[];
+extern const classtable_elt_t VFT_parser___ReduceAction1258[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction839[];
+extern const classtable_elt_t VFT_parser___ReduceAction1259[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction840[];
+extern const classtable_elt_t VFT_parser___ReduceAction1262[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction841[];
+extern const classtable_elt_t VFT_parser___ReduceAction1263[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction844[];
+extern const classtable_elt_t VFT_parser___ReduceAction1264[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction845[];
+extern const classtable_elt_t VFT_parser___ReduceAction1265[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction846[];
+extern const classtable_elt_t VFT_parser___ReduceAction1266[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction847[];
+extern const classtable_elt_t VFT_parser___ReduceAction1267[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction848[];
+extern const classtable_elt_t VFT_parser___ReduceAction1268[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction849[];
+extern const classtable_elt_t VFT_parser___ReduceAction1269[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction850[];
+extern const classtable_elt_t VFT_parser___ReduceAction1271[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction851[];
+extern const classtable_elt_t VFT_parser___ReduceAction1272[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction853[];
+extern const classtable_elt_t VFT_parser___ReduceAction1273[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction854[];
+extern const classtable_elt_t VFT_parser___ReduceAction1275[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction855[];
+extern const classtable_elt_t VFT_parser___ReduceAction1277[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction857[];
+extern const classtable_elt_t VFT_parser___ReduceAction1281[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction861[];
+extern const classtable_elt_t VFT_parser___ReduceAction1285[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction862[];
+extern const classtable_elt_t VFT_parser___ReduceAction1286[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction863[];
+extern const classtable_elt_t VFT_parser___ReduceAction1287[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction864[];
+extern const classtable_elt_t VFT_parser___ReduceAction1288[];
 
-extern const classtable_elt_t VFT_parser___ReduceAction865[];
+extern const classtable_elt_t VFT_parser___ReduceAction1289[];
 extern const char LOCATE_parser[];
 extern const int SFT_parser[];
 #define ID_parser___State (SFT_parser[0])
@@ -1324,12 +1572,12 @@ extern const int SFT_parser[];
 #define ID_parser___ReduceAction69 (SFT_parser[224])
 #define COLOR_parser___ReduceAction69 (SFT_parser[225])
 #define INIT_TABLE_POS_parser___ReduceAction69 (SFT_parser[226] + 0)
-#define ID_parser___ReduceAction71 (SFT_parser[227])
-#define COLOR_parser___ReduceAction71 (SFT_parser[228])
-#define INIT_TABLE_POS_parser___ReduceAction71 (SFT_parser[229] + 0)
-#define ID_parser___ReduceAction72 (SFT_parser[230])
-#define COLOR_parser___ReduceAction72 (SFT_parser[231])
-#define INIT_TABLE_POS_parser___ReduceAction72 (SFT_parser[232] + 0)
+#define ID_parser___ReduceAction70 (SFT_parser[227])
+#define COLOR_parser___ReduceAction70 (SFT_parser[228])
+#define INIT_TABLE_POS_parser___ReduceAction70 (SFT_parser[229] + 0)
+#define ID_parser___ReduceAction71 (SFT_parser[230])
+#define COLOR_parser___ReduceAction71 (SFT_parser[231])
+#define INIT_TABLE_POS_parser___ReduceAction71 (SFT_parser[232] + 0)
 #define ID_parser___ReduceAction73 (SFT_parser[233])
 #define COLOR_parser___ReduceAction73 (SFT_parser[234])
 #define INIT_TABLE_POS_parser___ReduceAction73 (SFT_parser[235] + 0)
@@ -2059,27 +2307,27 @@ extern const int SFT_parser[];
 #define ID_parser___ReduceAction315 (SFT_parser[959])
 #define COLOR_parser___ReduceAction315 (SFT_parser[960])
 #define INIT_TABLE_POS_parser___ReduceAction315 (SFT_parser[961] + 0)
-#define ID_parser___ReduceAction317 (SFT_parser[962])
-#define COLOR_parser___ReduceAction317 (SFT_parser[963])
-#define INIT_TABLE_POS_parser___ReduceAction317 (SFT_parser[964] + 0)
-#define ID_parser___ReduceAction318 (SFT_parser[965])
-#define COLOR_parser___ReduceAction318 (SFT_parser[966])
-#define INIT_TABLE_POS_parser___ReduceAction318 (SFT_parser[967] + 0)
-#define ID_parser___ReduceAction319 (SFT_parser[968])
-#define COLOR_parser___ReduceAction319 (SFT_parser[969])
-#define INIT_TABLE_POS_parser___ReduceAction319 (SFT_parser[970] + 0)
-#define ID_parser___ReduceAction320 (SFT_parser[971])
-#define COLOR_parser___ReduceAction320 (SFT_parser[972])
-#define INIT_TABLE_POS_parser___ReduceAction320 (SFT_parser[973] + 0)
-#define ID_parser___ReduceAction321 (SFT_parser[974])
-#define COLOR_parser___ReduceAction321 (SFT_parser[975])
-#define INIT_TABLE_POS_parser___ReduceAction321 (SFT_parser[976] + 0)
-#define ID_parser___ReduceAction322 (SFT_parser[977])
-#define COLOR_parser___ReduceAction322 (SFT_parser[978])
-#define INIT_TABLE_POS_parser___ReduceAction322 (SFT_parser[979] + 0)
-#define ID_parser___ReduceAction323 (SFT_parser[980])
-#define COLOR_parser___ReduceAction323 (SFT_parser[981])
-#define INIT_TABLE_POS_parser___ReduceAction323 (SFT_parser[982] + 0)
+#define ID_parser___ReduceAction316 (SFT_parser[962])
+#define COLOR_parser___ReduceAction316 (SFT_parser[963])
+#define INIT_TABLE_POS_parser___ReduceAction316 (SFT_parser[964] + 0)
+#define ID_parser___ReduceAction317 (SFT_parser[965])
+#define COLOR_parser___ReduceAction317 (SFT_parser[966])
+#define INIT_TABLE_POS_parser___ReduceAction317 (SFT_parser[967] + 0)
+#define ID_parser___ReduceAction318 (SFT_parser[968])
+#define COLOR_parser___ReduceAction318 (SFT_parser[969])
+#define INIT_TABLE_POS_parser___ReduceAction318 (SFT_parser[970] + 0)
+#define ID_parser___ReduceAction319 (SFT_parser[971])
+#define COLOR_parser___ReduceAction319 (SFT_parser[972])
+#define INIT_TABLE_POS_parser___ReduceAction319 (SFT_parser[973] + 0)
+#define ID_parser___ReduceAction320 (SFT_parser[974])
+#define COLOR_parser___ReduceAction320 (SFT_parser[975])
+#define INIT_TABLE_POS_parser___ReduceAction320 (SFT_parser[976] + 0)
+#define ID_parser___ReduceAction321 (SFT_parser[977])
+#define COLOR_parser___ReduceAction321 (SFT_parser[978])
+#define INIT_TABLE_POS_parser___ReduceAction321 (SFT_parser[979] + 0)
+#define ID_parser___ReduceAction322 (SFT_parser[980])
+#define COLOR_parser___ReduceAction322 (SFT_parser[981])
+#define INIT_TABLE_POS_parser___ReduceAction322 (SFT_parser[982] + 0)
 #define ID_parser___ReduceAction324 (SFT_parser[983])
 #define COLOR_parser___ReduceAction324 (SFT_parser[984])
 #define INIT_TABLE_POS_parser___ReduceAction324 (SFT_parser[985] + 0)
@@ -2113,597 +2361,969 @@ extern const int SFT_parser[];
 #define ID_parser___ReduceAction334 (SFT_parser[1013])
 #define COLOR_parser___ReduceAction334 (SFT_parser[1014])
 #define INIT_TABLE_POS_parser___ReduceAction334 (SFT_parser[1015] + 0)
-#define ID_parser___ReduceAction336 (SFT_parser[1016])
-#define COLOR_parser___ReduceAction336 (SFT_parser[1017])
-#define INIT_TABLE_POS_parser___ReduceAction336 (SFT_parser[1018] + 0)
-#define ID_parser___ReduceAction337 (SFT_parser[1019])
-#define COLOR_parser___ReduceAction337 (SFT_parser[1020])
-#define INIT_TABLE_POS_parser___ReduceAction337 (SFT_parser[1021] + 0)
-#define ID_parser___ReduceAction338 (SFT_parser[1022])
-#define COLOR_parser___ReduceAction338 (SFT_parser[1023])
-#define INIT_TABLE_POS_parser___ReduceAction338 (SFT_parser[1024] + 0)
-#define ID_parser___ReduceAction339 (SFT_parser[1025])
-#define COLOR_parser___ReduceAction339 (SFT_parser[1026])
-#define INIT_TABLE_POS_parser___ReduceAction339 (SFT_parser[1027] + 0)
-#define ID_parser___ReduceAction340 (SFT_parser[1028])
-#define COLOR_parser___ReduceAction340 (SFT_parser[1029])
-#define INIT_TABLE_POS_parser___ReduceAction340 (SFT_parser[1030] + 0)
-#define ID_parser___ReduceAction341 (SFT_parser[1031])
-#define COLOR_parser___ReduceAction341 (SFT_parser[1032])
-#define INIT_TABLE_POS_parser___ReduceAction341 (SFT_parser[1033] + 0)
-#define ID_parser___ReduceAction342 (SFT_parser[1034])
-#define COLOR_parser___ReduceAction342 (SFT_parser[1035])
-#define INIT_TABLE_POS_parser___ReduceAction342 (SFT_parser[1036] + 0)
-#define ID_parser___ReduceAction343 (SFT_parser[1037])
-#define COLOR_parser___ReduceAction343 (SFT_parser[1038])
-#define INIT_TABLE_POS_parser___ReduceAction343 (SFT_parser[1039] + 0)
-#define ID_parser___ReduceAction344 (SFT_parser[1040])
-#define COLOR_parser___ReduceAction344 (SFT_parser[1041])
-#define INIT_TABLE_POS_parser___ReduceAction344 (SFT_parser[1042] + 0)
-#define ID_parser___ReduceAction345 (SFT_parser[1043])
-#define COLOR_parser___ReduceAction345 (SFT_parser[1044])
-#define INIT_TABLE_POS_parser___ReduceAction345 (SFT_parser[1045] + 0)
-#define ID_parser___ReduceAction349 (SFT_parser[1046])
-#define COLOR_parser___ReduceAction349 (SFT_parser[1047])
-#define INIT_TABLE_POS_parser___ReduceAction349 (SFT_parser[1048] + 0)
-#define ID_parser___ReduceAction350 (SFT_parser[1049])
-#define COLOR_parser___ReduceAction350 (SFT_parser[1050])
-#define INIT_TABLE_POS_parser___ReduceAction350 (SFT_parser[1051] + 0)
-#define ID_parser___ReduceAction351 (SFT_parser[1052])
-#define COLOR_parser___ReduceAction351 (SFT_parser[1053])
-#define INIT_TABLE_POS_parser___ReduceAction351 (SFT_parser[1054] + 0)
-#define ID_parser___ReduceAction352 (SFT_parser[1055])
-#define COLOR_parser___ReduceAction352 (SFT_parser[1056])
-#define INIT_TABLE_POS_parser___ReduceAction352 (SFT_parser[1057] + 0)
-#define ID_parser___ReduceAction353 (SFT_parser[1058])
-#define COLOR_parser___ReduceAction353 (SFT_parser[1059])
-#define INIT_TABLE_POS_parser___ReduceAction353 (SFT_parser[1060] + 0)
-#define ID_parser___ReduceAction354 (SFT_parser[1061])
-#define COLOR_parser___ReduceAction354 (SFT_parser[1062])
-#define INIT_TABLE_POS_parser___ReduceAction354 (SFT_parser[1063] + 0)
-#define ID_parser___ReduceAction355 (SFT_parser[1064])
-#define COLOR_parser___ReduceAction355 (SFT_parser[1065])
-#define INIT_TABLE_POS_parser___ReduceAction355 (SFT_parser[1066] + 0)
-#define ID_parser___ReduceAction356 (SFT_parser[1067])
-#define COLOR_parser___ReduceAction356 (SFT_parser[1068])
-#define INIT_TABLE_POS_parser___ReduceAction356 (SFT_parser[1069] + 0)
-#define ID_parser___ReduceAction357 (SFT_parser[1070])
-#define COLOR_parser___ReduceAction357 (SFT_parser[1071])
-#define INIT_TABLE_POS_parser___ReduceAction357 (SFT_parser[1072] + 0)
-#define ID_parser___ReduceAction358 (SFT_parser[1073])
-#define COLOR_parser___ReduceAction358 (SFT_parser[1074])
-#define INIT_TABLE_POS_parser___ReduceAction358 (SFT_parser[1075] + 0)
-#define ID_parser___ReduceAction359 (SFT_parser[1076])
-#define COLOR_parser___ReduceAction359 (SFT_parser[1077])
-#define INIT_TABLE_POS_parser___ReduceAction359 (SFT_parser[1078] + 0)
-#define ID_parser___ReduceAction366 (SFT_parser[1079])
-#define COLOR_parser___ReduceAction366 (SFT_parser[1080])
-#define INIT_TABLE_POS_parser___ReduceAction366 (SFT_parser[1081] + 0)
-#define ID_parser___ReduceAction367 (SFT_parser[1082])
-#define COLOR_parser___ReduceAction367 (SFT_parser[1083])
-#define INIT_TABLE_POS_parser___ReduceAction367 (SFT_parser[1084] + 0)
-#define ID_parser___ReduceAction368 (SFT_parser[1085])
-#define COLOR_parser___ReduceAction368 (SFT_parser[1086])
-#define INIT_TABLE_POS_parser___ReduceAction368 (SFT_parser[1087] + 0)
-#define ID_parser___ReduceAction369 (SFT_parser[1088])
-#define COLOR_parser___ReduceAction369 (SFT_parser[1089])
-#define INIT_TABLE_POS_parser___ReduceAction369 (SFT_parser[1090] + 0)
-#define ID_parser___ReduceAction370 (SFT_parser[1091])
-#define COLOR_parser___ReduceAction370 (SFT_parser[1092])
-#define INIT_TABLE_POS_parser___ReduceAction370 (SFT_parser[1093] + 0)
-#define ID_parser___ReduceAction371 (SFT_parser[1094])
-#define COLOR_parser___ReduceAction371 (SFT_parser[1095])
-#define INIT_TABLE_POS_parser___ReduceAction371 (SFT_parser[1096] + 0)
-#define ID_parser___ReduceAction372 (SFT_parser[1097])
-#define COLOR_parser___ReduceAction372 (SFT_parser[1098])
-#define INIT_TABLE_POS_parser___ReduceAction372 (SFT_parser[1099] + 0)
-#define ID_parser___ReduceAction373 (SFT_parser[1100])
-#define COLOR_parser___ReduceAction373 (SFT_parser[1101])
-#define INIT_TABLE_POS_parser___ReduceAction373 (SFT_parser[1102] + 0)
-#define ID_parser___ReduceAction374 (SFT_parser[1103])
-#define COLOR_parser___ReduceAction374 (SFT_parser[1104])
-#define INIT_TABLE_POS_parser___ReduceAction374 (SFT_parser[1105] + 0)
-#define ID_parser___ReduceAction375 (SFT_parser[1106])
-#define COLOR_parser___ReduceAction375 (SFT_parser[1107])
-#define INIT_TABLE_POS_parser___ReduceAction375 (SFT_parser[1108] + 0)
-#define ID_parser___ReduceAction376 (SFT_parser[1109])
-#define COLOR_parser___ReduceAction376 (SFT_parser[1110])
-#define INIT_TABLE_POS_parser___ReduceAction376 (SFT_parser[1111] + 0)
-#define ID_parser___ReduceAction377 (SFT_parser[1112])
-#define COLOR_parser___ReduceAction377 (SFT_parser[1113])
-#define INIT_TABLE_POS_parser___ReduceAction377 (SFT_parser[1114] + 0)
-#define ID_parser___ReduceAction378 (SFT_parser[1115])
-#define COLOR_parser___ReduceAction378 (SFT_parser[1116])
-#define INIT_TABLE_POS_parser___ReduceAction378 (SFT_parser[1117] + 0)
-#define ID_parser___ReduceAction379 (SFT_parser[1118])
-#define COLOR_parser___ReduceAction379 (SFT_parser[1119])
-#define INIT_TABLE_POS_parser___ReduceAction379 (SFT_parser[1120] + 0)
-#define ID_parser___ReduceAction380 (SFT_parser[1121])
-#define COLOR_parser___ReduceAction380 (SFT_parser[1122])
-#define INIT_TABLE_POS_parser___ReduceAction380 (SFT_parser[1123] + 0)
-#define ID_parser___ReduceAction381 (SFT_parser[1124])
-#define COLOR_parser___ReduceAction381 (SFT_parser[1125])
-#define INIT_TABLE_POS_parser___ReduceAction381 (SFT_parser[1126] + 0)
-#define ID_parser___ReduceAction382 (SFT_parser[1127])
-#define COLOR_parser___ReduceAction382 (SFT_parser[1128])
-#define INIT_TABLE_POS_parser___ReduceAction382 (SFT_parser[1129] + 0)
-#define ID_parser___ReduceAction383 (SFT_parser[1130])
-#define COLOR_parser___ReduceAction383 (SFT_parser[1131])
-#define INIT_TABLE_POS_parser___ReduceAction383 (SFT_parser[1132] + 0)
-#define ID_parser___ReduceAction384 (SFT_parser[1133])
-#define COLOR_parser___ReduceAction384 (SFT_parser[1134])
-#define INIT_TABLE_POS_parser___ReduceAction384 (SFT_parser[1135] + 0)
-#define ID_parser___ReduceAction385 (SFT_parser[1136])
-#define COLOR_parser___ReduceAction385 (SFT_parser[1137])
-#define INIT_TABLE_POS_parser___ReduceAction385 (SFT_parser[1138] + 0)
-#define ID_parser___ReduceAction386 (SFT_parser[1139])
-#define COLOR_parser___ReduceAction386 (SFT_parser[1140])
-#define INIT_TABLE_POS_parser___ReduceAction386 (SFT_parser[1141] + 0)
-#define ID_parser___ReduceAction387 (SFT_parser[1142])
-#define COLOR_parser___ReduceAction387 (SFT_parser[1143])
-#define INIT_TABLE_POS_parser___ReduceAction387 (SFT_parser[1144] + 0)
-#define ID_parser___ReduceAction388 (SFT_parser[1145])
-#define COLOR_parser___ReduceAction388 (SFT_parser[1146])
-#define INIT_TABLE_POS_parser___ReduceAction388 (SFT_parser[1147] + 0)
-#define ID_parser___ReduceAction389 (SFT_parser[1148])
-#define COLOR_parser___ReduceAction389 (SFT_parser[1149])
-#define INIT_TABLE_POS_parser___ReduceAction389 (SFT_parser[1150] + 0)
-#define ID_parser___ReduceAction390 (SFT_parser[1151])
-#define COLOR_parser___ReduceAction390 (SFT_parser[1152])
-#define INIT_TABLE_POS_parser___ReduceAction390 (SFT_parser[1153] + 0)
-#define ID_parser___ReduceAction391 (SFT_parser[1154])
-#define COLOR_parser___ReduceAction391 (SFT_parser[1155])
-#define INIT_TABLE_POS_parser___ReduceAction391 (SFT_parser[1156] + 0)
-#define ID_parser___ReduceAction392 (SFT_parser[1157])
-#define COLOR_parser___ReduceAction392 (SFT_parser[1158])
-#define INIT_TABLE_POS_parser___ReduceAction392 (SFT_parser[1159] + 0)
-#define ID_parser___ReduceAction393 (SFT_parser[1160])
-#define COLOR_parser___ReduceAction393 (SFT_parser[1161])
-#define INIT_TABLE_POS_parser___ReduceAction393 (SFT_parser[1162] + 0)
-#define ID_parser___ReduceAction394 (SFT_parser[1163])
-#define COLOR_parser___ReduceAction394 (SFT_parser[1164])
-#define INIT_TABLE_POS_parser___ReduceAction394 (SFT_parser[1165] + 0)
-#define ID_parser___ReduceAction395 (SFT_parser[1166])
-#define COLOR_parser___ReduceAction395 (SFT_parser[1167])
-#define INIT_TABLE_POS_parser___ReduceAction395 (SFT_parser[1168] + 0)
-#define ID_parser___ReduceAction396 (SFT_parser[1169])
-#define COLOR_parser___ReduceAction396 (SFT_parser[1170])
-#define INIT_TABLE_POS_parser___ReduceAction396 (SFT_parser[1171] + 0)
-#define ID_parser___ReduceAction397 (SFT_parser[1172])
-#define COLOR_parser___ReduceAction397 (SFT_parser[1173])
-#define INIT_TABLE_POS_parser___ReduceAction397 (SFT_parser[1174] + 0)
-#define ID_parser___ReduceAction398 (SFT_parser[1175])
-#define COLOR_parser___ReduceAction398 (SFT_parser[1176])
-#define INIT_TABLE_POS_parser___ReduceAction398 (SFT_parser[1177] + 0)
-#define ID_parser___ReduceAction399 (SFT_parser[1178])
-#define COLOR_parser___ReduceAction399 (SFT_parser[1179])
-#define INIT_TABLE_POS_parser___ReduceAction399 (SFT_parser[1180] + 0)
-#define ID_parser___ReduceAction400 (SFT_parser[1181])
-#define COLOR_parser___ReduceAction400 (SFT_parser[1182])
-#define INIT_TABLE_POS_parser___ReduceAction400 (SFT_parser[1183] + 0)
-#define ID_parser___ReduceAction401 (SFT_parser[1184])
-#define COLOR_parser___ReduceAction401 (SFT_parser[1185])
-#define INIT_TABLE_POS_parser___ReduceAction401 (SFT_parser[1186] + 0)
-#define ID_parser___ReduceAction402 (SFT_parser[1187])
-#define COLOR_parser___ReduceAction402 (SFT_parser[1188])
-#define INIT_TABLE_POS_parser___ReduceAction402 (SFT_parser[1189] + 0)
-#define ID_parser___ReduceAction403 (SFT_parser[1190])
-#define COLOR_parser___ReduceAction403 (SFT_parser[1191])
-#define INIT_TABLE_POS_parser___ReduceAction403 (SFT_parser[1192] + 0)
-#define ID_parser___ReduceAction404 (SFT_parser[1193])
-#define COLOR_parser___ReduceAction404 (SFT_parser[1194])
-#define INIT_TABLE_POS_parser___ReduceAction404 (SFT_parser[1195] + 0)
-#define ID_parser___ReduceAction405 (SFT_parser[1196])
-#define COLOR_parser___ReduceAction405 (SFT_parser[1197])
-#define INIT_TABLE_POS_parser___ReduceAction405 (SFT_parser[1198] + 0)
-#define ID_parser___ReduceAction406 (SFT_parser[1199])
-#define COLOR_parser___ReduceAction406 (SFT_parser[1200])
-#define INIT_TABLE_POS_parser___ReduceAction406 (SFT_parser[1201] + 0)
-#define ID_parser___ReduceAction407 (SFT_parser[1202])
-#define COLOR_parser___ReduceAction407 (SFT_parser[1203])
-#define INIT_TABLE_POS_parser___ReduceAction407 (SFT_parser[1204] + 0)
-#define ID_parser___ReduceAction408 (SFT_parser[1205])
-#define COLOR_parser___ReduceAction408 (SFT_parser[1206])
-#define INIT_TABLE_POS_parser___ReduceAction408 (SFT_parser[1207] + 0)
-#define ID_parser___ReduceAction409 (SFT_parser[1208])
-#define COLOR_parser___ReduceAction409 (SFT_parser[1209])
-#define INIT_TABLE_POS_parser___ReduceAction409 (SFT_parser[1210] + 0)
-#define ID_parser___ReduceAction410 (SFT_parser[1211])
-#define COLOR_parser___ReduceAction410 (SFT_parser[1212])
-#define INIT_TABLE_POS_parser___ReduceAction410 (SFT_parser[1213] + 0)
-#define ID_parser___ReduceAction411 (SFT_parser[1214])
-#define COLOR_parser___ReduceAction411 (SFT_parser[1215])
-#define INIT_TABLE_POS_parser___ReduceAction411 (SFT_parser[1216] + 0)
-#define ID_parser___ReduceAction412 (SFT_parser[1217])
-#define COLOR_parser___ReduceAction412 (SFT_parser[1218])
-#define INIT_TABLE_POS_parser___ReduceAction412 (SFT_parser[1219] + 0)
-#define ID_parser___ReduceAction413 (SFT_parser[1220])
-#define COLOR_parser___ReduceAction413 (SFT_parser[1221])
-#define INIT_TABLE_POS_parser___ReduceAction413 (SFT_parser[1222] + 0)
-#define ID_parser___ReduceAction414 (SFT_parser[1223])
-#define COLOR_parser___ReduceAction414 (SFT_parser[1224])
-#define INIT_TABLE_POS_parser___ReduceAction414 (SFT_parser[1225] + 0)
-#define ID_parser___ReduceAction415 (SFT_parser[1226])
-#define COLOR_parser___ReduceAction415 (SFT_parser[1227])
-#define INIT_TABLE_POS_parser___ReduceAction415 (SFT_parser[1228] + 0)
-#define ID_parser___ReduceAction416 (SFT_parser[1229])
-#define COLOR_parser___ReduceAction416 (SFT_parser[1230])
-#define INIT_TABLE_POS_parser___ReduceAction416 (SFT_parser[1231] + 0)
-#define ID_parser___ReduceAction417 (SFT_parser[1232])
-#define COLOR_parser___ReduceAction417 (SFT_parser[1233])
-#define INIT_TABLE_POS_parser___ReduceAction417 (SFT_parser[1234] + 0)
-#define ID_parser___ReduceAction418 (SFT_parser[1235])
-#define COLOR_parser___ReduceAction418 (SFT_parser[1236])
-#define INIT_TABLE_POS_parser___ReduceAction418 (SFT_parser[1237] + 0)
-#define ID_parser___ReduceAction421 (SFT_parser[1238])
-#define COLOR_parser___ReduceAction421 (SFT_parser[1239])
-#define INIT_TABLE_POS_parser___ReduceAction421 (SFT_parser[1240] + 0)
-#define ID_parser___ReduceAction422 (SFT_parser[1241])
-#define COLOR_parser___ReduceAction422 (SFT_parser[1242])
-#define INIT_TABLE_POS_parser___ReduceAction422 (SFT_parser[1243] + 0)
-#define ID_parser___ReduceAction423 (SFT_parser[1244])
-#define COLOR_parser___ReduceAction423 (SFT_parser[1245])
-#define INIT_TABLE_POS_parser___ReduceAction423 (SFT_parser[1246] + 0)
-#define ID_parser___ReduceAction424 (SFT_parser[1247])
-#define COLOR_parser___ReduceAction424 (SFT_parser[1248])
-#define INIT_TABLE_POS_parser___ReduceAction424 (SFT_parser[1249] + 0)
-#define ID_parser___ReduceAction425 (SFT_parser[1250])
-#define COLOR_parser___ReduceAction425 (SFT_parser[1251])
-#define INIT_TABLE_POS_parser___ReduceAction425 (SFT_parser[1252] + 0)
-#define ID_parser___ReduceAction426 (SFT_parser[1253])
-#define COLOR_parser___ReduceAction426 (SFT_parser[1254])
-#define INIT_TABLE_POS_parser___ReduceAction426 (SFT_parser[1255] + 0)
-#define ID_parser___ReduceAction427 (SFT_parser[1256])
-#define COLOR_parser___ReduceAction427 (SFT_parser[1257])
-#define INIT_TABLE_POS_parser___ReduceAction427 (SFT_parser[1258] + 0)
-#define ID_parser___ReduceAction428 (SFT_parser[1259])
-#define COLOR_parser___ReduceAction428 (SFT_parser[1260])
-#define INIT_TABLE_POS_parser___ReduceAction428 (SFT_parser[1261] + 0)
-#define ID_parser___ReduceAction429 (SFT_parser[1262])
-#define COLOR_parser___ReduceAction429 (SFT_parser[1263])
-#define INIT_TABLE_POS_parser___ReduceAction429 (SFT_parser[1264] + 0)
-#define ID_parser___ReduceAction430 (SFT_parser[1265])
-#define COLOR_parser___ReduceAction430 (SFT_parser[1266])
-#define INIT_TABLE_POS_parser___ReduceAction430 (SFT_parser[1267] + 0)
-#define ID_parser___ReduceAction431 (SFT_parser[1268])
-#define COLOR_parser___ReduceAction431 (SFT_parser[1269])
-#define INIT_TABLE_POS_parser___ReduceAction431 (SFT_parser[1270] + 0)
-#define ID_parser___ReduceAction432 (SFT_parser[1271])
-#define COLOR_parser___ReduceAction432 (SFT_parser[1272])
-#define INIT_TABLE_POS_parser___ReduceAction432 (SFT_parser[1273] + 0)
-#define ID_parser___ReduceAction433 (SFT_parser[1274])
-#define COLOR_parser___ReduceAction433 (SFT_parser[1275])
-#define INIT_TABLE_POS_parser___ReduceAction433 (SFT_parser[1276] + 0)
-#define ID_parser___ReduceAction437 (SFT_parser[1277])
-#define COLOR_parser___ReduceAction437 (SFT_parser[1278])
-#define INIT_TABLE_POS_parser___ReduceAction437 (SFT_parser[1279] + 0)
-#define ID_parser___ReduceAction439 (SFT_parser[1280])
-#define COLOR_parser___ReduceAction439 (SFT_parser[1281])
-#define INIT_TABLE_POS_parser___ReduceAction439 (SFT_parser[1282] + 0)
-#define ID_parser___ReduceAction441 (SFT_parser[1283])
-#define COLOR_parser___ReduceAction441 (SFT_parser[1284])
-#define INIT_TABLE_POS_parser___ReduceAction441 (SFT_parser[1285] + 0)
-#define ID_parser___ReduceAction442 (SFT_parser[1286])
-#define COLOR_parser___ReduceAction442 (SFT_parser[1287])
-#define INIT_TABLE_POS_parser___ReduceAction442 (SFT_parser[1288] + 0)
-#define ID_parser___ReduceAction443 (SFT_parser[1289])
-#define COLOR_parser___ReduceAction443 (SFT_parser[1290])
-#define INIT_TABLE_POS_parser___ReduceAction443 (SFT_parser[1291] + 0)
-#define ID_parser___ReduceAction445 (SFT_parser[1292])
-#define COLOR_parser___ReduceAction445 (SFT_parser[1293])
-#define INIT_TABLE_POS_parser___ReduceAction445 (SFT_parser[1294] + 0)
-#define ID_parser___ReduceAction447 (SFT_parser[1295])
-#define COLOR_parser___ReduceAction447 (SFT_parser[1296])
-#define INIT_TABLE_POS_parser___ReduceAction447 (SFT_parser[1297] + 0)
-#define ID_parser___ReduceAction448 (SFT_parser[1298])
-#define COLOR_parser___ReduceAction448 (SFT_parser[1299])
-#define INIT_TABLE_POS_parser___ReduceAction448 (SFT_parser[1300] + 0)
-#define ID_parser___ReduceAction449 (SFT_parser[1301])
-#define COLOR_parser___ReduceAction449 (SFT_parser[1302])
-#define INIT_TABLE_POS_parser___ReduceAction449 (SFT_parser[1303] + 0)
-#define ID_parser___ReduceAction450 (SFT_parser[1304])
-#define COLOR_parser___ReduceAction450 (SFT_parser[1305])
-#define INIT_TABLE_POS_parser___ReduceAction450 (SFT_parser[1306] + 0)
-#define ID_parser___ReduceAction451 (SFT_parser[1307])
-#define COLOR_parser___ReduceAction451 (SFT_parser[1308])
-#define INIT_TABLE_POS_parser___ReduceAction451 (SFT_parser[1309] + 0)
-#define ID_parser___ReduceAction452 (SFT_parser[1310])
-#define COLOR_parser___ReduceAction452 (SFT_parser[1311])
-#define INIT_TABLE_POS_parser___ReduceAction452 (SFT_parser[1312] + 0)
-#define ID_parser___ReduceAction453 (SFT_parser[1313])
-#define COLOR_parser___ReduceAction453 (SFT_parser[1314])
-#define INIT_TABLE_POS_parser___ReduceAction453 (SFT_parser[1315] + 0)
-#define ID_parser___ReduceAction454 (SFT_parser[1316])
-#define COLOR_parser___ReduceAction454 (SFT_parser[1317])
-#define INIT_TABLE_POS_parser___ReduceAction454 (SFT_parser[1318] + 0)
-#define ID_parser___ReduceAction455 (SFT_parser[1319])
-#define COLOR_parser___ReduceAction455 (SFT_parser[1320])
-#define INIT_TABLE_POS_parser___ReduceAction455 (SFT_parser[1321] + 0)
-#define ID_parser___ReduceAction456 (SFT_parser[1322])
-#define COLOR_parser___ReduceAction456 (SFT_parser[1323])
-#define INIT_TABLE_POS_parser___ReduceAction456 (SFT_parser[1324] + 0)
-#define ID_parser___ReduceAction457 (SFT_parser[1325])
-#define COLOR_parser___ReduceAction457 (SFT_parser[1326])
-#define INIT_TABLE_POS_parser___ReduceAction457 (SFT_parser[1327] + 0)
-#define ID_parser___ReduceAction459 (SFT_parser[1328])
-#define COLOR_parser___ReduceAction459 (SFT_parser[1329])
-#define INIT_TABLE_POS_parser___ReduceAction459 (SFT_parser[1330] + 0)
-#define ID_parser___ReduceAction460 (SFT_parser[1331])
-#define COLOR_parser___ReduceAction460 (SFT_parser[1332])
-#define INIT_TABLE_POS_parser___ReduceAction460 (SFT_parser[1333] + 0)
-#define ID_parser___ReduceAction462 (SFT_parser[1334])
-#define COLOR_parser___ReduceAction462 (SFT_parser[1335])
-#define INIT_TABLE_POS_parser___ReduceAction462 (SFT_parser[1336] + 0)
-#define ID_parser___ReduceAction463 (SFT_parser[1337])
-#define COLOR_parser___ReduceAction463 (SFT_parser[1338])
-#define INIT_TABLE_POS_parser___ReduceAction463 (SFT_parser[1339] + 0)
-#define ID_parser___ReduceAction464 (SFT_parser[1340])
-#define COLOR_parser___ReduceAction464 (SFT_parser[1341])
-#define INIT_TABLE_POS_parser___ReduceAction464 (SFT_parser[1342] + 0)
-#define ID_parser___ReduceAction466 (SFT_parser[1343])
-#define COLOR_parser___ReduceAction466 (SFT_parser[1344])
-#define INIT_TABLE_POS_parser___ReduceAction466 (SFT_parser[1345] + 0)
-#define ID_parser___ReduceAction467 (SFT_parser[1346])
-#define COLOR_parser___ReduceAction467 (SFT_parser[1347])
-#define INIT_TABLE_POS_parser___ReduceAction467 (SFT_parser[1348] + 0)
-#define ID_parser___ReduceAction469 (SFT_parser[1349])
-#define COLOR_parser___ReduceAction469 (SFT_parser[1350])
-#define INIT_TABLE_POS_parser___ReduceAction469 (SFT_parser[1351] + 0)
-#define ID_parser___ReduceAction470 (SFT_parser[1352])
-#define COLOR_parser___ReduceAction470 (SFT_parser[1353])
-#define INIT_TABLE_POS_parser___ReduceAction470 (SFT_parser[1354] + 0)
-#define ID_parser___ReduceAction471 (SFT_parser[1355])
-#define COLOR_parser___ReduceAction471 (SFT_parser[1356])
-#define INIT_TABLE_POS_parser___ReduceAction471 (SFT_parser[1357] + 0)
-#define ID_parser___ReduceAction472 (SFT_parser[1358])
-#define COLOR_parser___ReduceAction472 (SFT_parser[1359])
-#define INIT_TABLE_POS_parser___ReduceAction472 (SFT_parser[1360] + 0)
-#define ID_parser___ReduceAction473 (SFT_parser[1361])
-#define COLOR_parser___ReduceAction473 (SFT_parser[1362])
-#define INIT_TABLE_POS_parser___ReduceAction473 (SFT_parser[1363] + 0)
-#define ID_parser___ReduceAction480 (SFT_parser[1364])
-#define COLOR_parser___ReduceAction480 (SFT_parser[1365])
-#define INIT_TABLE_POS_parser___ReduceAction480 (SFT_parser[1366] + 0)
-#define ID_parser___ReduceAction481 (SFT_parser[1367])
-#define COLOR_parser___ReduceAction481 (SFT_parser[1368])
-#define INIT_TABLE_POS_parser___ReduceAction481 (SFT_parser[1369] + 0)
-#define ID_parser___ReduceAction482 (SFT_parser[1370])
-#define COLOR_parser___ReduceAction482 (SFT_parser[1371])
-#define INIT_TABLE_POS_parser___ReduceAction482 (SFT_parser[1372] + 0)
-#define ID_parser___ReduceAction483 (SFT_parser[1373])
-#define COLOR_parser___ReduceAction483 (SFT_parser[1374])
-#define INIT_TABLE_POS_parser___ReduceAction483 (SFT_parser[1375] + 0)
-#define ID_parser___ReduceAction484 (SFT_parser[1376])
-#define COLOR_parser___ReduceAction484 (SFT_parser[1377])
-#define INIT_TABLE_POS_parser___ReduceAction484 (SFT_parser[1378] + 0)
-#define ID_parser___ReduceAction485 (SFT_parser[1379])
-#define COLOR_parser___ReduceAction485 (SFT_parser[1380])
-#define INIT_TABLE_POS_parser___ReduceAction485 (SFT_parser[1381] + 0)
-#define ID_parser___ReduceAction486 (SFT_parser[1382])
-#define COLOR_parser___ReduceAction486 (SFT_parser[1383])
-#define INIT_TABLE_POS_parser___ReduceAction486 (SFT_parser[1384] + 0)
-#define ID_parser___ReduceAction487 (SFT_parser[1385])
-#define COLOR_parser___ReduceAction487 (SFT_parser[1386])
-#define INIT_TABLE_POS_parser___ReduceAction487 (SFT_parser[1387] + 0)
-#define ID_parser___ReduceAction488 (SFT_parser[1388])
-#define COLOR_parser___ReduceAction488 (SFT_parser[1389])
-#define INIT_TABLE_POS_parser___ReduceAction488 (SFT_parser[1390] + 0)
-#define ID_parser___ReduceAction489 (SFT_parser[1391])
-#define COLOR_parser___ReduceAction489 (SFT_parser[1392])
-#define INIT_TABLE_POS_parser___ReduceAction489 (SFT_parser[1393] + 0)
-#define ID_parser___ReduceAction490 (SFT_parser[1394])
-#define COLOR_parser___ReduceAction490 (SFT_parser[1395])
-#define INIT_TABLE_POS_parser___ReduceAction490 (SFT_parser[1396] + 0)
-#define ID_parser___ReduceAction491 (SFT_parser[1397])
-#define COLOR_parser___ReduceAction491 (SFT_parser[1398])
-#define INIT_TABLE_POS_parser___ReduceAction491 (SFT_parser[1399] + 0)
-#define ID_parser___ReduceAction492 (SFT_parser[1400])
-#define COLOR_parser___ReduceAction492 (SFT_parser[1401])
-#define INIT_TABLE_POS_parser___ReduceAction492 (SFT_parser[1402] + 0)
-#define ID_parser___ReduceAction494 (SFT_parser[1403])
-#define COLOR_parser___ReduceAction494 (SFT_parser[1404])
-#define INIT_TABLE_POS_parser___ReduceAction494 (SFT_parser[1405] + 0)
-#define ID_parser___ReduceAction495 (SFT_parser[1406])
-#define COLOR_parser___ReduceAction495 (SFT_parser[1407])
-#define INIT_TABLE_POS_parser___ReduceAction495 (SFT_parser[1408] + 0)
-#define ID_parser___ReduceAction496 (SFT_parser[1409])
-#define COLOR_parser___ReduceAction496 (SFT_parser[1410])
-#define INIT_TABLE_POS_parser___ReduceAction496 (SFT_parser[1411] + 0)
-#define ID_parser___ReduceAction497 (SFT_parser[1412])
-#define COLOR_parser___ReduceAction497 (SFT_parser[1413])
-#define INIT_TABLE_POS_parser___ReduceAction497 (SFT_parser[1414] + 0)
-#define ID_parser___ReduceAction498 (SFT_parser[1415])
-#define COLOR_parser___ReduceAction498 (SFT_parser[1416])
-#define INIT_TABLE_POS_parser___ReduceAction498 (SFT_parser[1417] + 0)
-#define ID_parser___ReduceAction499 (SFT_parser[1418])
-#define COLOR_parser___ReduceAction499 (SFT_parser[1419])
-#define INIT_TABLE_POS_parser___ReduceAction499 (SFT_parser[1420] + 0)
-#define ID_parser___ReduceAction500 (SFT_parser[1421])
-#define COLOR_parser___ReduceAction500 (SFT_parser[1422])
-#define INIT_TABLE_POS_parser___ReduceAction500 (SFT_parser[1423] + 0)
-#define ID_parser___ReduceAction502 (SFT_parser[1424])
-#define COLOR_parser___ReduceAction502 (SFT_parser[1425])
-#define INIT_TABLE_POS_parser___ReduceAction502 (SFT_parser[1426] + 0)
-#define ID_parser___ReduceAction503 (SFT_parser[1427])
-#define COLOR_parser___ReduceAction503 (SFT_parser[1428])
-#define INIT_TABLE_POS_parser___ReduceAction503 (SFT_parser[1429] + 0)
-#define ID_parser___ReduceAction504 (SFT_parser[1430])
-#define COLOR_parser___ReduceAction504 (SFT_parser[1431])
-#define INIT_TABLE_POS_parser___ReduceAction504 (SFT_parser[1432] + 0)
-#define ID_parser___ReduceAction505 (SFT_parser[1433])
-#define COLOR_parser___ReduceAction505 (SFT_parser[1434])
-#define INIT_TABLE_POS_parser___ReduceAction505 (SFT_parser[1435] + 0)
-#define ID_parser___ReduceAction506 (SFT_parser[1436])
-#define COLOR_parser___ReduceAction506 (SFT_parser[1437])
-#define INIT_TABLE_POS_parser___ReduceAction506 (SFT_parser[1438] + 0)
-#define ID_parser___ReduceAction508 (SFT_parser[1439])
-#define COLOR_parser___ReduceAction508 (SFT_parser[1440])
-#define INIT_TABLE_POS_parser___ReduceAction508 (SFT_parser[1441] + 0)
-#define ID_parser___ReduceAction511 (SFT_parser[1442])
-#define COLOR_parser___ReduceAction511 (SFT_parser[1443])
-#define INIT_TABLE_POS_parser___ReduceAction511 (SFT_parser[1444] + 0)
-#define ID_parser___ReduceAction512 (SFT_parser[1445])
-#define COLOR_parser___ReduceAction512 (SFT_parser[1446])
-#define INIT_TABLE_POS_parser___ReduceAction512 (SFT_parser[1447] + 0)
-#define ID_parser___ReduceAction513 (SFT_parser[1448])
-#define COLOR_parser___ReduceAction513 (SFT_parser[1449])
-#define INIT_TABLE_POS_parser___ReduceAction513 (SFT_parser[1450] + 0)
-#define ID_parser___ReduceAction514 (SFT_parser[1451])
-#define COLOR_parser___ReduceAction514 (SFT_parser[1452])
-#define INIT_TABLE_POS_parser___ReduceAction514 (SFT_parser[1453] + 0)
-#define ID_parser___ReduceAction515 (SFT_parser[1454])
-#define COLOR_parser___ReduceAction515 (SFT_parser[1455])
-#define INIT_TABLE_POS_parser___ReduceAction515 (SFT_parser[1456] + 0)
-#define ID_parser___ReduceAction516 (SFT_parser[1457])
-#define COLOR_parser___ReduceAction516 (SFT_parser[1458])
-#define INIT_TABLE_POS_parser___ReduceAction516 (SFT_parser[1459] + 0)
-#define ID_parser___ReduceAction517 (SFT_parser[1460])
-#define COLOR_parser___ReduceAction517 (SFT_parser[1461])
-#define INIT_TABLE_POS_parser___ReduceAction517 (SFT_parser[1462] + 0)
-#define ID_parser___ReduceAction518 (SFT_parser[1463])
-#define COLOR_parser___ReduceAction518 (SFT_parser[1464])
-#define INIT_TABLE_POS_parser___ReduceAction518 (SFT_parser[1465] + 0)
-#define ID_parser___ReduceAction519 (SFT_parser[1466])
-#define COLOR_parser___ReduceAction519 (SFT_parser[1467])
-#define INIT_TABLE_POS_parser___ReduceAction519 (SFT_parser[1468] + 0)
-#define ID_parser___ReduceAction520 (SFT_parser[1469])
-#define COLOR_parser___ReduceAction520 (SFT_parser[1470])
-#define INIT_TABLE_POS_parser___ReduceAction520 (SFT_parser[1471] + 0)
-#define ID_parser___ReduceAction521 (SFT_parser[1472])
-#define COLOR_parser___ReduceAction521 (SFT_parser[1473])
-#define INIT_TABLE_POS_parser___ReduceAction521 (SFT_parser[1474] + 0)
-#define ID_parser___ReduceAction522 (SFT_parser[1475])
-#define COLOR_parser___ReduceAction522 (SFT_parser[1476])
-#define INIT_TABLE_POS_parser___ReduceAction522 (SFT_parser[1477] + 0)
-#define ID_parser___ReduceAction523 (SFT_parser[1478])
-#define COLOR_parser___ReduceAction523 (SFT_parser[1479])
-#define INIT_TABLE_POS_parser___ReduceAction523 (SFT_parser[1480] + 0)
-#define ID_parser___ReduceAction524 (SFT_parser[1481])
-#define COLOR_parser___ReduceAction524 (SFT_parser[1482])
-#define INIT_TABLE_POS_parser___ReduceAction524 (SFT_parser[1483] + 0)
-#define ID_parser___ReduceAction525 (SFT_parser[1484])
-#define COLOR_parser___ReduceAction525 (SFT_parser[1485])
-#define INIT_TABLE_POS_parser___ReduceAction525 (SFT_parser[1486] + 0)
-#define ID_parser___ReduceAction526 (SFT_parser[1487])
-#define COLOR_parser___ReduceAction526 (SFT_parser[1488])
-#define INIT_TABLE_POS_parser___ReduceAction526 (SFT_parser[1489] + 0)
-#define ID_parser___ReduceAction528 (SFT_parser[1490])
-#define COLOR_parser___ReduceAction528 (SFT_parser[1491])
-#define INIT_TABLE_POS_parser___ReduceAction528 (SFT_parser[1492] + 0)
-#define ID_parser___ReduceAction529 (SFT_parser[1493])
-#define COLOR_parser___ReduceAction529 (SFT_parser[1494])
-#define INIT_TABLE_POS_parser___ReduceAction529 (SFT_parser[1495] + 0)
-#define ID_parser___ReduceAction531 (SFT_parser[1496])
-#define COLOR_parser___ReduceAction531 (SFT_parser[1497])
-#define INIT_TABLE_POS_parser___ReduceAction531 (SFT_parser[1498] + 0)
-#define ID_parser___ReduceAction532 (SFT_parser[1499])
-#define COLOR_parser___ReduceAction532 (SFT_parser[1500])
-#define INIT_TABLE_POS_parser___ReduceAction532 (SFT_parser[1501] + 0)
-#define ID_parser___ReduceAction533 (SFT_parser[1502])
-#define COLOR_parser___ReduceAction533 (SFT_parser[1503])
-#define INIT_TABLE_POS_parser___ReduceAction533 (SFT_parser[1504] + 0)
-#define ID_parser___ReduceAction534 (SFT_parser[1505])
-#define COLOR_parser___ReduceAction534 (SFT_parser[1506])
-#define INIT_TABLE_POS_parser___ReduceAction534 (SFT_parser[1507] + 0)
-#define ID_parser___ReduceAction806 (SFT_parser[1508])
-#define COLOR_parser___ReduceAction806 (SFT_parser[1509])
-#define INIT_TABLE_POS_parser___ReduceAction806 (SFT_parser[1510] + 0)
-#define ID_parser___ReduceAction807 (SFT_parser[1511])
-#define COLOR_parser___ReduceAction807 (SFT_parser[1512])
-#define INIT_TABLE_POS_parser___ReduceAction807 (SFT_parser[1513] + 0)
-#define ID_parser___ReduceAction808 (SFT_parser[1514])
-#define COLOR_parser___ReduceAction808 (SFT_parser[1515])
-#define INIT_TABLE_POS_parser___ReduceAction808 (SFT_parser[1516] + 0)
-#define ID_parser___ReduceAction811 (SFT_parser[1517])
-#define COLOR_parser___ReduceAction811 (SFT_parser[1518])
-#define INIT_TABLE_POS_parser___ReduceAction811 (SFT_parser[1519] + 0)
-#define ID_parser___ReduceAction824 (SFT_parser[1520])
-#define COLOR_parser___ReduceAction824 (SFT_parser[1521])
-#define INIT_TABLE_POS_parser___ReduceAction824 (SFT_parser[1522] + 0)
-#define ID_parser___ReduceAction825 (SFT_parser[1523])
-#define COLOR_parser___ReduceAction825 (SFT_parser[1524])
-#define INIT_TABLE_POS_parser___ReduceAction825 (SFT_parser[1525] + 0)
-#define ID_parser___ReduceAction832 (SFT_parser[1526])
-#define COLOR_parser___ReduceAction832 (SFT_parser[1527])
-#define INIT_TABLE_POS_parser___ReduceAction832 (SFT_parser[1528] + 0)
-#define ID_parser___ReduceAction833 (SFT_parser[1529])
-#define COLOR_parser___ReduceAction833 (SFT_parser[1530])
-#define INIT_TABLE_POS_parser___ReduceAction833 (SFT_parser[1531] + 0)
-#define ID_parser___ReduceAction834 (SFT_parser[1532])
-#define COLOR_parser___ReduceAction834 (SFT_parser[1533])
-#define INIT_TABLE_POS_parser___ReduceAction834 (SFT_parser[1534] + 0)
-#define ID_parser___ReduceAction835 (SFT_parser[1535])
-#define COLOR_parser___ReduceAction835 (SFT_parser[1536])
-#define INIT_TABLE_POS_parser___ReduceAction835 (SFT_parser[1537] + 0)
-#define ID_parser___ReduceAction836 (SFT_parser[1538])
-#define COLOR_parser___ReduceAction836 (SFT_parser[1539])
-#define INIT_TABLE_POS_parser___ReduceAction836 (SFT_parser[1540] + 0)
-#define ID_parser___ReduceAction837 (SFT_parser[1541])
-#define COLOR_parser___ReduceAction837 (SFT_parser[1542])
-#define INIT_TABLE_POS_parser___ReduceAction837 (SFT_parser[1543] + 0)
-#define ID_parser___ReduceAction838 (SFT_parser[1544])
-#define COLOR_parser___ReduceAction838 (SFT_parser[1545])
-#define INIT_TABLE_POS_parser___ReduceAction838 (SFT_parser[1546] + 0)
-#define ID_parser___ReduceAction839 (SFT_parser[1547])
-#define COLOR_parser___ReduceAction839 (SFT_parser[1548])
-#define INIT_TABLE_POS_parser___ReduceAction839 (SFT_parser[1549] + 0)
-#define ID_parser___ReduceAction840 (SFT_parser[1550])
-#define COLOR_parser___ReduceAction840 (SFT_parser[1551])
-#define INIT_TABLE_POS_parser___ReduceAction840 (SFT_parser[1552] + 0)
-#define ID_parser___ReduceAction841 (SFT_parser[1553])
-#define COLOR_parser___ReduceAction841 (SFT_parser[1554])
-#define INIT_TABLE_POS_parser___ReduceAction841 (SFT_parser[1555] + 0)
-#define ID_parser___ReduceAction844 (SFT_parser[1556])
-#define COLOR_parser___ReduceAction844 (SFT_parser[1557])
-#define INIT_TABLE_POS_parser___ReduceAction844 (SFT_parser[1558] + 0)
-#define ID_parser___ReduceAction845 (SFT_parser[1559])
-#define COLOR_parser___ReduceAction845 (SFT_parser[1560])
-#define INIT_TABLE_POS_parser___ReduceAction845 (SFT_parser[1561] + 0)
-#define ID_parser___ReduceAction846 (SFT_parser[1562])
-#define COLOR_parser___ReduceAction846 (SFT_parser[1563])
-#define INIT_TABLE_POS_parser___ReduceAction846 (SFT_parser[1564] + 0)
-#define ID_parser___ReduceAction847 (SFT_parser[1565])
-#define COLOR_parser___ReduceAction847 (SFT_parser[1566])
-#define INIT_TABLE_POS_parser___ReduceAction847 (SFT_parser[1567] + 0)
-#define ID_parser___ReduceAction848 (SFT_parser[1568])
-#define COLOR_parser___ReduceAction848 (SFT_parser[1569])
-#define INIT_TABLE_POS_parser___ReduceAction848 (SFT_parser[1570] + 0)
-#define ID_parser___ReduceAction849 (SFT_parser[1571])
-#define COLOR_parser___ReduceAction849 (SFT_parser[1572])
-#define INIT_TABLE_POS_parser___ReduceAction849 (SFT_parser[1573] + 0)
-#define ID_parser___ReduceAction850 (SFT_parser[1574])
-#define COLOR_parser___ReduceAction850 (SFT_parser[1575])
-#define INIT_TABLE_POS_parser___ReduceAction850 (SFT_parser[1576] + 0)
-#define ID_parser___ReduceAction851 (SFT_parser[1577])
-#define COLOR_parser___ReduceAction851 (SFT_parser[1578])
-#define INIT_TABLE_POS_parser___ReduceAction851 (SFT_parser[1579] + 0)
-#define ID_parser___ReduceAction853 (SFT_parser[1580])
-#define COLOR_parser___ReduceAction853 (SFT_parser[1581])
-#define INIT_TABLE_POS_parser___ReduceAction853 (SFT_parser[1582] + 0)
-#define ID_parser___ReduceAction854 (SFT_parser[1583])
-#define COLOR_parser___ReduceAction854 (SFT_parser[1584])
-#define INIT_TABLE_POS_parser___ReduceAction854 (SFT_parser[1585] + 0)
-#define ID_parser___ReduceAction855 (SFT_parser[1586])
-#define COLOR_parser___ReduceAction855 (SFT_parser[1587])
-#define INIT_TABLE_POS_parser___ReduceAction855 (SFT_parser[1588] + 0)
-#define ID_parser___ReduceAction857 (SFT_parser[1589])
-#define COLOR_parser___ReduceAction857 (SFT_parser[1590])
-#define INIT_TABLE_POS_parser___ReduceAction857 (SFT_parser[1591] + 0)
-#define ID_parser___ReduceAction861 (SFT_parser[1592])
-#define COLOR_parser___ReduceAction861 (SFT_parser[1593])
-#define INIT_TABLE_POS_parser___ReduceAction861 (SFT_parser[1594] + 0)
-#define ID_parser___ReduceAction862 (SFT_parser[1595])
-#define COLOR_parser___ReduceAction862 (SFT_parser[1596])
-#define INIT_TABLE_POS_parser___ReduceAction862 (SFT_parser[1597] + 0)
-#define ID_parser___ReduceAction863 (SFT_parser[1598])
-#define COLOR_parser___ReduceAction863 (SFT_parser[1599])
-#define INIT_TABLE_POS_parser___ReduceAction863 (SFT_parser[1600] + 0)
-#define ID_parser___ReduceAction864 (SFT_parser[1601])
-#define COLOR_parser___ReduceAction864 (SFT_parser[1602])
-#define INIT_TABLE_POS_parser___ReduceAction864 (SFT_parser[1603] + 0)
-#define ID_parser___ReduceAction865 (SFT_parser[1604])
-#define COLOR_parser___ReduceAction865 (SFT_parser[1605])
-#define INIT_TABLE_POS_parser___ReduceAction865 (SFT_parser[1606] + 0)
+#define ID_parser___ReduceAction335 (SFT_parser[1016])
+#define COLOR_parser___ReduceAction335 (SFT_parser[1017])
+#define INIT_TABLE_POS_parser___ReduceAction335 (SFT_parser[1018] + 0)
+#define ID_parser___ReduceAction336 (SFT_parser[1019])
+#define COLOR_parser___ReduceAction336 (SFT_parser[1020])
+#define INIT_TABLE_POS_parser___ReduceAction336 (SFT_parser[1021] + 0)
+#define ID_parser___ReduceAction337 (SFT_parser[1022])
+#define COLOR_parser___ReduceAction337 (SFT_parser[1023])
+#define INIT_TABLE_POS_parser___ReduceAction337 (SFT_parser[1024] + 0)
+#define ID_parser___ReduceAction338 (SFT_parser[1025])
+#define COLOR_parser___ReduceAction338 (SFT_parser[1026])
+#define INIT_TABLE_POS_parser___ReduceAction338 (SFT_parser[1027] + 0)
+#define ID_parser___ReduceAction339 (SFT_parser[1028])
+#define COLOR_parser___ReduceAction339 (SFT_parser[1029])
+#define INIT_TABLE_POS_parser___ReduceAction339 (SFT_parser[1030] + 0)
+#define ID_parser___ReduceAction340 (SFT_parser[1031])
+#define COLOR_parser___ReduceAction340 (SFT_parser[1032])
+#define INIT_TABLE_POS_parser___ReduceAction340 (SFT_parser[1033] + 0)
+#define ID_parser___ReduceAction341 (SFT_parser[1034])
+#define COLOR_parser___ReduceAction341 (SFT_parser[1035])
+#define INIT_TABLE_POS_parser___ReduceAction341 (SFT_parser[1036] + 0)
+#define ID_parser___ReduceAction342 (SFT_parser[1037])
+#define COLOR_parser___ReduceAction342 (SFT_parser[1038])
+#define INIT_TABLE_POS_parser___ReduceAction342 (SFT_parser[1039] + 0)
+#define ID_parser___ReduceAction343 (SFT_parser[1040])
+#define COLOR_parser___ReduceAction343 (SFT_parser[1041])
+#define INIT_TABLE_POS_parser___ReduceAction343 (SFT_parser[1042] + 0)
+#define ID_parser___ReduceAction344 (SFT_parser[1043])
+#define COLOR_parser___ReduceAction344 (SFT_parser[1044])
+#define INIT_TABLE_POS_parser___ReduceAction344 (SFT_parser[1045] + 0)
+#define ID_parser___ReduceAction345 (SFT_parser[1046])
+#define COLOR_parser___ReduceAction345 (SFT_parser[1047])
+#define INIT_TABLE_POS_parser___ReduceAction345 (SFT_parser[1048] + 0)
+#define ID_parser___ReduceAction346 (SFT_parser[1049])
+#define COLOR_parser___ReduceAction346 (SFT_parser[1050])
+#define INIT_TABLE_POS_parser___ReduceAction346 (SFT_parser[1051] + 0)
+#define ID_parser___ReduceAction347 (SFT_parser[1052])
+#define COLOR_parser___ReduceAction347 (SFT_parser[1053])
+#define INIT_TABLE_POS_parser___ReduceAction347 (SFT_parser[1054] + 0)
+#define ID_parser___ReduceAction348 (SFT_parser[1055])
+#define COLOR_parser___ReduceAction348 (SFT_parser[1056])
+#define INIT_TABLE_POS_parser___ReduceAction348 (SFT_parser[1057] + 0)
+#define ID_parser___ReduceAction349 (SFT_parser[1058])
+#define COLOR_parser___ReduceAction349 (SFT_parser[1059])
+#define INIT_TABLE_POS_parser___ReduceAction349 (SFT_parser[1060] + 0)
+#define ID_parser___ReduceAction350 (SFT_parser[1061])
+#define COLOR_parser___ReduceAction350 (SFT_parser[1062])
+#define INIT_TABLE_POS_parser___ReduceAction350 (SFT_parser[1063] + 0)
+#define ID_parser___ReduceAction351 (SFT_parser[1064])
+#define COLOR_parser___ReduceAction351 (SFT_parser[1065])
+#define INIT_TABLE_POS_parser___ReduceAction351 (SFT_parser[1066] + 0)
+#define ID_parser___ReduceAction352 (SFT_parser[1067])
+#define COLOR_parser___ReduceAction352 (SFT_parser[1068])
+#define INIT_TABLE_POS_parser___ReduceAction352 (SFT_parser[1069] + 0)
+#define ID_parser___ReduceAction353 (SFT_parser[1070])
+#define COLOR_parser___ReduceAction353 (SFT_parser[1071])
+#define INIT_TABLE_POS_parser___ReduceAction353 (SFT_parser[1072] + 0)
+#define ID_parser___ReduceAction354 (SFT_parser[1073])
+#define COLOR_parser___ReduceAction354 (SFT_parser[1074])
+#define INIT_TABLE_POS_parser___ReduceAction354 (SFT_parser[1075] + 0)
+#define ID_parser___ReduceAction355 (SFT_parser[1076])
+#define COLOR_parser___ReduceAction355 (SFT_parser[1077])
+#define INIT_TABLE_POS_parser___ReduceAction355 (SFT_parser[1078] + 0)
+#define ID_parser___ReduceAction356 (SFT_parser[1079])
+#define COLOR_parser___ReduceAction356 (SFT_parser[1080])
+#define INIT_TABLE_POS_parser___ReduceAction356 (SFT_parser[1081] + 0)
+#define ID_parser___ReduceAction357 (SFT_parser[1082])
+#define COLOR_parser___ReduceAction357 (SFT_parser[1083])
+#define INIT_TABLE_POS_parser___ReduceAction357 (SFT_parser[1084] + 0)
+#define ID_parser___ReduceAction358 (SFT_parser[1085])
+#define COLOR_parser___ReduceAction358 (SFT_parser[1086])
+#define INIT_TABLE_POS_parser___ReduceAction358 (SFT_parser[1087] + 0)
+#define ID_parser___ReduceAction359 (SFT_parser[1088])
+#define COLOR_parser___ReduceAction359 (SFT_parser[1089])
+#define INIT_TABLE_POS_parser___ReduceAction359 (SFT_parser[1090] + 0)
+#define ID_parser___ReduceAction360 (SFT_parser[1091])
+#define COLOR_parser___ReduceAction360 (SFT_parser[1092])
+#define INIT_TABLE_POS_parser___ReduceAction360 (SFT_parser[1093] + 0)
+#define ID_parser___ReduceAction361 (SFT_parser[1094])
+#define COLOR_parser___ReduceAction361 (SFT_parser[1095])
+#define INIT_TABLE_POS_parser___ReduceAction361 (SFT_parser[1096] + 0)
+#define ID_parser___ReduceAction362 (SFT_parser[1097])
+#define COLOR_parser___ReduceAction362 (SFT_parser[1098])
+#define INIT_TABLE_POS_parser___ReduceAction362 (SFT_parser[1099] + 0)
+#define ID_parser___ReduceAction363 (SFT_parser[1100])
+#define COLOR_parser___ReduceAction363 (SFT_parser[1101])
+#define INIT_TABLE_POS_parser___ReduceAction363 (SFT_parser[1102] + 0)
+#define ID_parser___ReduceAction364 (SFT_parser[1103])
+#define COLOR_parser___ReduceAction364 (SFT_parser[1104])
+#define INIT_TABLE_POS_parser___ReduceAction364 (SFT_parser[1105] + 0)
+#define ID_parser___ReduceAction365 (SFT_parser[1106])
+#define COLOR_parser___ReduceAction365 (SFT_parser[1107])
+#define INIT_TABLE_POS_parser___ReduceAction365 (SFT_parser[1108] + 0)
+#define ID_parser___ReduceAction366 (SFT_parser[1109])
+#define COLOR_parser___ReduceAction366 (SFT_parser[1110])
+#define INIT_TABLE_POS_parser___ReduceAction366 (SFT_parser[1111] + 0)
+#define ID_parser___ReduceAction367 (SFT_parser[1112])
+#define COLOR_parser___ReduceAction367 (SFT_parser[1113])
+#define INIT_TABLE_POS_parser___ReduceAction367 (SFT_parser[1114] + 0)
+#define ID_parser___ReduceAction368 (SFT_parser[1115])
+#define COLOR_parser___ReduceAction368 (SFT_parser[1116])
+#define INIT_TABLE_POS_parser___ReduceAction368 (SFT_parser[1117] + 0)
+#define ID_parser___ReduceAction369 (SFT_parser[1118])
+#define COLOR_parser___ReduceAction369 (SFT_parser[1119])
+#define INIT_TABLE_POS_parser___ReduceAction369 (SFT_parser[1120] + 0)
+#define ID_parser___ReduceAction370 (SFT_parser[1121])
+#define COLOR_parser___ReduceAction370 (SFT_parser[1122])
+#define INIT_TABLE_POS_parser___ReduceAction370 (SFT_parser[1123] + 0)
+#define ID_parser___ReduceAction371 (SFT_parser[1124])
+#define COLOR_parser___ReduceAction371 (SFT_parser[1125])
+#define INIT_TABLE_POS_parser___ReduceAction371 (SFT_parser[1126] + 0)
+#define ID_parser___ReduceAction372 (SFT_parser[1127])
+#define COLOR_parser___ReduceAction372 (SFT_parser[1128])
+#define INIT_TABLE_POS_parser___ReduceAction372 (SFT_parser[1129] + 0)
+#define ID_parser___ReduceAction373 (SFT_parser[1130])
+#define COLOR_parser___ReduceAction373 (SFT_parser[1131])
+#define INIT_TABLE_POS_parser___ReduceAction373 (SFT_parser[1132] + 0)
+#define ID_parser___ReduceAction374 (SFT_parser[1133])
+#define COLOR_parser___ReduceAction374 (SFT_parser[1134])
+#define INIT_TABLE_POS_parser___ReduceAction374 (SFT_parser[1135] + 0)
+#define ID_parser___ReduceAction375 (SFT_parser[1136])
+#define COLOR_parser___ReduceAction375 (SFT_parser[1137])
+#define INIT_TABLE_POS_parser___ReduceAction375 (SFT_parser[1138] + 0)
+#define ID_parser___ReduceAction376 (SFT_parser[1139])
+#define COLOR_parser___ReduceAction376 (SFT_parser[1140])
+#define INIT_TABLE_POS_parser___ReduceAction376 (SFT_parser[1141] + 0)
+#define ID_parser___ReduceAction377 (SFT_parser[1142])
+#define COLOR_parser___ReduceAction377 (SFT_parser[1143])
+#define INIT_TABLE_POS_parser___ReduceAction377 (SFT_parser[1144] + 0)
+#define ID_parser___ReduceAction378 (SFT_parser[1145])
+#define COLOR_parser___ReduceAction378 (SFT_parser[1146])
+#define INIT_TABLE_POS_parser___ReduceAction378 (SFT_parser[1147] + 0)
+#define ID_parser___ReduceAction379 (SFT_parser[1148])
+#define COLOR_parser___ReduceAction379 (SFT_parser[1149])
+#define INIT_TABLE_POS_parser___ReduceAction379 (SFT_parser[1150] + 0)
+#define ID_parser___ReduceAction380 (SFT_parser[1151])
+#define COLOR_parser___ReduceAction380 (SFT_parser[1152])
+#define INIT_TABLE_POS_parser___ReduceAction380 (SFT_parser[1153] + 0)
+#define ID_parser___ReduceAction381 (SFT_parser[1154])
+#define COLOR_parser___ReduceAction381 (SFT_parser[1155])
+#define INIT_TABLE_POS_parser___ReduceAction381 (SFT_parser[1156] + 0)
+#define ID_parser___ReduceAction382 (SFT_parser[1157])
+#define COLOR_parser___ReduceAction382 (SFT_parser[1158])
+#define INIT_TABLE_POS_parser___ReduceAction382 (SFT_parser[1159] + 0)
+#define ID_parser___ReduceAction383 (SFT_parser[1160])
+#define COLOR_parser___ReduceAction383 (SFT_parser[1161])
+#define INIT_TABLE_POS_parser___ReduceAction383 (SFT_parser[1162] + 0)
+#define ID_parser___ReduceAction384 (SFT_parser[1163])
+#define COLOR_parser___ReduceAction384 (SFT_parser[1164])
+#define INIT_TABLE_POS_parser___ReduceAction384 (SFT_parser[1165] + 0)
+#define ID_parser___ReduceAction385 (SFT_parser[1166])
+#define COLOR_parser___ReduceAction385 (SFT_parser[1167])
+#define INIT_TABLE_POS_parser___ReduceAction385 (SFT_parser[1168] + 0)
+#define ID_parser___ReduceAction386 (SFT_parser[1169])
+#define COLOR_parser___ReduceAction386 (SFT_parser[1170])
+#define INIT_TABLE_POS_parser___ReduceAction386 (SFT_parser[1171] + 0)
+#define ID_parser___ReduceAction387 (SFT_parser[1172])
+#define COLOR_parser___ReduceAction387 (SFT_parser[1173])
+#define INIT_TABLE_POS_parser___ReduceAction387 (SFT_parser[1174] + 0)
+#define ID_parser___ReduceAction388 (SFT_parser[1175])
+#define COLOR_parser___ReduceAction388 (SFT_parser[1176])
+#define INIT_TABLE_POS_parser___ReduceAction388 (SFT_parser[1177] + 0)
+#define ID_parser___ReduceAction389 (SFT_parser[1178])
+#define COLOR_parser___ReduceAction389 (SFT_parser[1179])
+#define INIT_TABLE_POS_parser___ReduceAction389 (SFT_parser[1180] + 0)
+#define ID_parser___ReduceAction390 (SFT_parser[1181])
+#define COLOR_parser___ReduceAction390 (SFT_parser[1182])
+#define INIT_TABLE_POS_parser___ReduceAction390 (SFT_parser[1183] + 0)
+#define ID_parser___ReduceAction391 (SFT_parser[1184])
+#define COLOR_parser___ReduceAction391 (SFT_parser[1185])
+#define INIT_TABLE_POS_parser___ReduceAction391 (SFT_parser[1186] + 0)
+#define ID_parser___ReduceAction393 (SFT_parser[1187])
+#define COLOR_parser___ReduceAction393 (SFT_parser[1188])
+#define INIT_TABLE_POS_parser___ReduceAction393 (SFT_parser[1189] + 0)
+#define ID_parser___ReduceAction394 (SFT_parser[1190])
+#define COLOR_parser___ReduceAction394 (SFT_parser[1191])
+#define INIT_TABLE_POS_parser___ReduceAction394 (SFT_parser[1192] + 0)
+#define ID_parser___ReduceAction395 (SFT_parser[1193])
+#define COLOR_parser___ReduceAction395 (SFT_parser[1194])
+#define INIT_TABLE_POS_parser___ReduceAction395 (SFT_parser[1195] + 0)
+#define ID_parser___ReduceAction396 (SFT_parser[1196])
+#define COLOR_parser___ReduceAction396 (SFT_parser[1197])
+#define INIT_TABLE_POS_parser___ReduceAction396 (SFT_parser[1198] + 0)
+#define ID_parser___ReduceAction397 (SFT_parser[1199])
+#define COLOR_parser___ReduceAction397 (SFT_parser[1200])
+#define INIT_TABLE_POS_parser___ReduceAction397 (SFT_parser[1201] + 0)
+#define ID_parser___ReduceAction398 (SFT_parser[1202])
+#define COLOR_parser___ReduceAction398 (SFT_parser[1203])
+#define INIT_TABLE_POS_parser___ReduceAction398 (SFT_parser[1204] + 0)
+#define ID_parser___ReduceAction399 (SFT_parser[1205])
+#define COLOR_parser___ReduceAction399 (SFT_parser[1206])
+#define INIT_TABLE_POS_parser___ReduceAction399 (SFT_parser[1207] + 0)
+#define ID_parser___ReduceAction400 (SFT_parser[1208])
+#define COLOR_parser___ReduceAction400 (SFT_parser[1209])
+#define INIT_TABLE_POS_parser___ReduceAction400 (SFT_parser[1210] + 0)
+#define ID_parser___ReduceAction401 (SFT_parser[1211])
+#define COLOR_parser___ReduceAction401 (SFT_parser[1212])
+#define INIT_TABLE_POS_parser___ReduceAction401 (SFT_parser[1213] + 0)
+#define ID_parser___ReduceAction402 (SFT_parser[1214])
+#define COLOR_parser___ReduceAction402 (SFT_parser[1215])
+#define INIT_TABLE_POS_parser___ReduceAction402 (SFT_parser[1216] + 0)
+#define ID_parser___ReduceAction403 (SFT_parser[1217])
+#define COLOR_parser___ReduceAction403 (SFT_parser[1218])
+#define INIT_TABLE_POS_parser___ReduceAction403 (SFT_parser[1219] + 0)
+#define ID_parser___ReduceAction404 (SFT_parser[1220])
+#define COLOR_parser___ReduceAction404 (SFT_parser[1221])
+#define INIT_TABLE_POS_parser___ReduceAction404 (SFT_parser[1222] + 0)
+#define ID_parser___ReduceAction405 (SFT_parser[1223])
+#define COLOR_parser___ReduceAction405 (SFT_parser[1224])
+#define INIT_TABLE_POS_parser___ReduceAction405 (SFT_parser[1225] + 0)
+#define ID_parser___ReduceAction406 (SFT_parser[1226])
+#define COLOR_parser___ReduceAction406 (SFT_parser[1227])
+#define INIT_TABLE_POS_parser___ReduceAction406 (SFT_parser[1228] + 0)
+#define ID_parser___ReduceAction407 (SFT_parser[1229])
+#define COLOR_parser___ReduceAction407 (SFT_parser[1230])
+#define INIT_TABLE_POS_parser___ReduceAction407 (SFT_parser[1231] + 0)
+#define ID_parser___ReduceAction408 (SFT_parser[1232])
+#define COLOR_parser___ReduceAction408 (SFT_parser[1233])
+#define INIT_TABLE_POS_parser___ReduceAction408 (SFT_parser[1234] + 0)
+#define ID_parser___ReduceAction409 (SFT_parser[1235])
+#define COLOR_parser___ReduceAction409 (SFT_parser[1236])
+#define INIT_TABLE_POS_parser___ReduceAction409 (SFT_parser[1237] + 0)
+#define ID_parser___ReduceAction410 (SFT_parser[1238])
+#define COLOR_parser___ReduceAction410 (SFT_parser[1239])
+#define INIT_TABLE_POS_parser___ReduceAction410 (SFT_parser[1240] + 0)
+#define ID_parser___ReduceAction411 (SFT_parser[1241])
+#define COLOR_parser___ReduceAction411 (SFT_parser[1242])
+#define INIT_TABLE_POS_parser___ReduceAction411 (SFT_parser[1243] + 0)
+#define ID_parser___ReduceAction412 (SFT_parser[1244])
+#define COLOR_parser___ReduceAction412 (SFT_parser[1245])
+#define INIT_TABLE_POS_parser___ReduceAction412 (SFT_parser[1246] + 0)
+#define ID_parser___ReduceAction413 (SFT_parser[1247])
+#define COLOR_parser___ReduceAction413 (SFT_parser[1248])
+#define INIT_TABLE_POS_parser___ReduceAction413 (SFT_parser[1249] + 0)
+#define ID_parser___ReduceAction414 (SFT_parser[1250])
+#define COLOR_parser___ReduceAction414 (SFT_parser[1251])
+#define INIT_TABLE_POS_parser___ReduceAction414 (SFT_parser[1252] + 0)
+#define ID_parser___ReduceAction416 (SFT_parser[1253])
+#define COLOR_parser___ReduceAction416 (SFT_parser[1254])
+#define INIT_TABLE_POS_parser___ReduceAction416 (SFT_parser[1255] + 0)
+#define ID_parser___ReduceAction417 (SFT_parser[1256])
+#define COLOR_parser___ReduceAction417 (SFT_parser[1257])
+#define INIT_TABLE_POS_parser___ReduceAction417 (SFT_parser[1258] + 0)
+#define ID_parser___ReduceAction418 (SFT_parser[1259])
+#define COLOR_parser___ReduceAction418 (SFT_parser[1260])
+#define INIT_TABLE_POS_parser___ReduceAction418 (SFT_parser[1261] + 0)
+#define ID_parser___ReduceAction419 (SFT_parser[1262])
+#define COLOR_parser___ReduceAction419 (SFT_parser[1263])
+#define INIT_TABLE_POS_parser___ReduceAction419 (SFT_parser[1264] + 0)
+#define ID_parser___ReduceAction420 (SFT_parser[1265])
+#define COLOR_parser___ReduceAction420 (SFT_parser[1266])
+#define INIT_TABLE_POS_parser___ReduceAction420 (SFT_parser[1267] + 0)
+#define ID_parser___ReduceAction421 (SFT_parser[1268])
+#define COLOR_parser___ReduceAction421 (SFT_parser[1269])
+#define INIT_TABLE_POS_parser___ReduceAction421 (SFT_parser[1270] + 0)
+#define ID_parser___ReduceAction422 (SFT_parser[1271])
+#define COLOR_parser___ReduceAction422 (SFT_parser[1272])
+#define INIT_TABLE_POS_parser___ReduceAction422 (SFT_parser[1273] + 0)
+#define ID_parser___ReduceAction423 (SFT_parser[1274])
+#define COLOR_parser___ReduceAction423 (SFT_parser[1275])
+#define INIT_TABLE_POS_parser___ReduceAction423 (SFT_parser[1276] + 0)
+#define ID_parser___ReduceAction424 (SFT_parser[1277])
+#define COLOR_parser___ReduceAction424 (SFT_parser[1278])
+#define INIT_TABLE_POS_parser___ReduceAction424 (SFT_parser[1279] + 0)
+#define ID_parser___ReduceAction425 (SFT_parser[1280])
+#define COLOR_parser___ReduceAction425 (SFT_parser[1281])
+#define INIT_TABLE_POS_parser___ReduceAction425 (SFT_parser[1282] + 0)
+#define ID_parser___ReduceAction429 (SFT_parser[1283])
+#define COLOR_parser___ReduceAction429 (SFT_parser[1284])
+#define INIT_TABLE_POS_parser___ReduceAction429 (SFT_parser[1285] + 0)
+#define ID_parser___ReduceAction430 (SFT_parser[1286])
+#define COLOR_parser___ReduceAction430 (SFT_parser[1287])
+#define INIT_TABLE_POS_parser___ReduceAction430 (SFT_parser[1288] + 0)
+#define ID_parser___ReduceAction431 (SFT_parser[1289])
+#define COLOR_parser___ReduceAction431 (SFT_parser[1290])
+#define INIT_TABLE_POS_parser___ReduceAction431 (SFT_parser[1291] + 0)
+#define ID_parser___ReduceAction432 (SFT_parser[1292])
+#define COLOR_parser___ReduceAction432 (SFT_parser[1293])
+#define INIT_TABLE_POS_parser___ReduceAction432 (SFT_parser[1294] + 0)
+#define ID_parser___ReduceAction433 (SFT_parser[1295])
+#define COLOR_parser___ReduceAction433 (SFT_parser[1296])
+#define INIT_TABLE_POS_parser___ReduceAction433 (SFT_parser[1297] + 0)
+#define ID_parser___ReduceAction434 (SFT_parser[1298])
+#define COLOR_parser___ReduceAction434 (SFT_parser[1299])
+#define INIT_TABLE_POS_parser___ReduceAction434 (SFT_parser[1300] + 0)
+#define ID_parser___ReduceAction435 (SFT_parser[1301])
+#define COLOR_parser___ReduceAction435 (SFT_parser[1302])
+#define INIT_TABLE_POS_parser___ReduceAction435 (SFT_parser[1303] + 0)
+#define ID_parser___ReduceAction436 (SFT_parser[1304])
+#define COLOR_parser___ReduceAction436 (SFT_parser[1305])
+#define INIT_TABLE_POS_parser___ReduceAction436 (SFT_parser[1306] + 0)
+#define ID_parser___ReduceAction437 (SFT_parser[1307])
+#define COLOR_parser___ReduceAction437 (SFT_parser[1308])
+#define INIT_TABLE_POS_parser___ReduceAction437 (SFT_parser[1309] + 0)
+#define ID_parser___ReduceAction438 (SFT_parser[1310])
+#define COLOR_parser___ReduceAction438 (SFT_parser[1311])
+#define INIT_TABLE_POS_parser___ReduceAction438 (SFT_parser[1312] + 0)
+#define ID_parser___ReduceAction439 (SFT_parser[1313])
+#define COLOR_parser___ReduceAction439 (SFT_parser[1314])
+#define INIT_TABLE_POS_parser___ReduceAction439 (SFT_parser[1315] + 0)
+#define ID_parser___ReduceAction446 (SFT_parser[1316])
+#define COLOR_parser___ReduceAction446 (SFT_parser[1317])
+#define INIT_TABLE_POS_parser___ReduceAction446 (SFT_parser[1318] + 0)
+#define ID_parser___ReduceAction447 (SFT_parser[1319])
+#define COLOR_parser___ReduceAction447 (SFT_parser[1320])
+#define INIT_TABLE_POS_parser___ReduceAction447 (SFT_parser[1321] + 0)
+#define ID_parser___ReduceAction448 (SFT_parser[1322])
+#define COLOR_parser___ReduceAction448 (SFT_parser[1323])
+#define INIT_TABLE_POS_parser___ReduceAction448 (SFT_parser[1324] + 0)
+#define ID_parser___ReduceAction449 (SFT_parser[1325])
+#define COLOR_parser___ReduceAction449 (SFT_parser[1326])
+#define INIT_TABLE_POS_parser___ReduceAction449 (SFT_parser[1327] + 0)
+#define ID_parser___ReduceAction450 (SFT_parser[1328])
+#define COLOR_parser___ReduceAction450 (SFT_parser[1329])
+#define INIT_TABLE_POS_parser___ReduceAction450 (SFT_parser[1330] + 0)
+#define ID_parser___ReduceAction451 (SFT_parser[1331])
+#define COLOR_parser___ReduceAction451 (SFT_parser[1332])
+#define INIT_TABLE_POS_parser___ReduceAction451 (SFT_parser[1333] + 0)
+#define ID_parser___ReduceAction452 (SFT_parser[1334])
+#define COLOR_parser___ReduceAction452 (SFT_parser[1335])
+#define INIT_TABLE_POS_parser___ReduceAction452 (SFT_parser[1336] + 0)
+#define ID_parser___ReduceAction453 (SFT_parser[1337])
+#define COLOR_parser___ReduceAction453 (SFT_parser[1338])
+#define INIT_TABLE_POS_parser___ReduceAction453 (SFT_parser[1339] + 0)
+#define ID_parser___ReduceAction454 (SFT_parser[1340])
+#define COLOR_parser___ReduceAction454 (SFT_parser[1341])
+#define INIT_TABLE_POS_parser___ReduceAction454 (SFT_parser[1342] + 0)
+#define ID_parser___ReduceAction455 (SFT_parser[1343])
+#define COLOR_parser___ReduceAction455 (SFT_parser[1344])
+#define INIT_TABLE_POS_parser___ReduceAction455 (SFT_parser[1345] + 0)
+#define ID_parser___ReduceAction456 (SFT_parser[1346])
+#define COLOR_parser___ReduceAction456 (SFT_parser[1347])
+#define INIT_TABLE_POS_parser___ReduceAction456 (SFT_parser[1348] + 0)
+#define ID_parser___ReduceAction457 (SFT_parser[1349])
+#define COLOR_parser___ReduceAction457 (SFT_parser[1350])
+#define INIT_TABLE_POS_parser___ReduceAction457 (SFT_parser[1351] + 0)
+#define ID_parser___ReduceAction458 (SFT_parser[1352])
+#define COLOR_parser___ReduceAction458 (SFT_parser[1353])
+#define INIT_TABLE_POS_parser___ReduceAction458 (SFT_parser[1354] + 0)
+#define ID_parser___ReduceAction459 (SFT_parser[1355])
+#define COLOR_parser___ReduceAction459 (SFT_parser[1356])
+#define INIT_TABLE_POS_parser___ReduceAction459 (SFT_parser[1357] + 0)
+#define ID_parser___ReduceAction460 (SFT_parser[1358])
+#define COLOR_parser___ReduceAction460 (SFT_parser[1359])
+#define INIT_TABLE_POS_parser___ReduceAction460 (SFT_parser[1360] + 0)
+#define ID_parser___ReduceAction461 (SFT_parser[1361])
+#define COLOR_parser___ReduceAction461 (SFT_parser[1362])
+#define INIT_TABLE_POS_parser___ReduceAction461 (SFT_parser[1363] + 0)
+#define ID_parser___ReduceAction462 (SFT_parser[1364])
+#define COLOR_parser___ReduceAction462 (SFT_parser[1365])
+#define INIT_TABLE_POS_parser___ReduceAction462 (SFT_parser[1366] + 0)
+#define ID_parser___ReduceAction463 (SFT_parser[1367])
+#define COLOR_parser___ReduceAction463 (SFT_parser[1368])
+#define INIT_TABLE_POS_parser___ReduceAction463 (SFT_parser[1369] + 0)
+#define ID_parser___ReduceAction464 (SFT_parser[1370])
+#define COLOR_parser___ReduceAction464 (SFT_parser[1371])
+#define INIT_TABLE_POS_parser___ReduceAction464 (SFT_parser[1372] + 0)
+#define ID_parser___ReduceAction465 (SFT_parser[1373])
+#define COLOR_parser___ReduceAction465 (SFT_parser[1374])
+#define INIT_TABLE_POS_parser___ReduceAction465 (SFT_parser[1375] + 0)
+#define ID_parser___ReduceAction466 (SFT_parser[1376])
+#define COLOR_parser___ReduceAction466 (SFT_parser[1377])
+#define INIT_TABLE_POS_parser___ReduceAction466 (SFT_parser[1378] + 0)
+#define ID_parser___ReduceAction467 (SFT_parser[1379])
+#define COLOR_parser___ReduceAction467 (SFT_parser[1380])
+#define INIT_TABLE_POS_parser___ReduceAction467 (SFT_parser[1381] + 0)
+#define ID_parser___ReduceAction468 (SFT_parser[1382])
+#define COLOR_parser___ReduceAction468 (SFT_parser[1383])
+#define INIT_TABLE_POS_parser___ReduceAction468 (SFT_parser[1384] + 0)
+#define ID_parser___ReduceAction469 (SFT_parser[1385])
+#define COLOR_parser___ReduceAction469 (SFT_parser[1386])
+#define INIT_TABLE_POS_parser___ReduceAction469 (SFT_parser[1387] + 0)
+#define ID_parser___ReduceAction470 (SFT_parser[1388])
+#define COLOR_parser___ReduceAction470 (SFT_parser[1389])
+#define INIT_TABLE_POS_parser___ReduceAction470 (SFT_parser[1390] + 0)
+#define ID_parser___ReduceAction471 (SFT_parser[1391])
+#define COLOR_parser___ReduceAction471 (SFT_parser[1392])
+#define INIT_TABLE_POS_parser___ReduceAction471 (SFT_parser[1393] + 0)
+#define ID_parser___ReduceAction472 (SFT_parser[1394])
+#define COLOR_parser___ReduceAction472 (SFT_parser[1395])
+#define INIT_TABLE_POS_parser___ReduceAction472 (SFT_parser[1396] + 0)
+#define ID_parser___ReduceAction473 (SFT_parser[1397])
+#define COLOR_parser___ReduceAction473 (SFT_parser[1398])
+#define INIT_TABLE_POS_parser___ReduceAction473 (SFT_parser[1399] + 0)
+#define ID_parser___ReduceAction474 (SFT_parser[1400])
+#define COLOR_parser___ReduceAction474 (SFT_parser[1401])
+#define INIT_TABLE_POS_parser___ReduceAction474 (SFT_parser[1402] + 0)
+#define ID_parser___ReduceAction475 (SFT_parser[1403])
+#define COLOR_parser___ReduceAction475 (SFT_parser[1404])
+#define INIT_TABLE_POS_parser___ReduceAction475 (SFT_parser[1405] + 0)
+#define ID_parser___ReduceAction476 (SFT_parser[1406])
+#define COLOR_parser___ReduceAction476 (SFT_parser[1407])
+#define INIT_TABLE_POS_parser___ReduceAction476 (SFT_parser[1408] + 0)
+#define ID_parser___ReduceAction477 (SFT_parser[1409])
+#define COLOR_parser___ReduceAction477 (SFT_parser[1410])
+#define INIT_TABLE_POS_parser___ReduceAction477 (SFT_parser[1411] + 0)
+#define ID_parser___ReduceAction478 (SFT_parser[1412])
+#define COLOR_parser___ReduceAction478 (SFT_parser[1413])
+#define INIT_TABLE_POS_parser___ReduceAction478 (SFT_parser[1414] + 0)
+#define ID_parser___ReduceAction479 (SFT_parser[1415])
+#define COLOR_parser___ReduceAction479 (SFT_parser[1416])
+#define INIT_TABLE_POS_parser___ReduceAction479 (SFT_parser[1417] + 0)
+#define ID_parser___ReduceAction480 (SFT_parser[1418])
+#define COLOR_parser___ReduceAction480 (SFT_parser[1419])
+#define INIT_TABLE_POS_parser___ReduceAction480 (SFT_parser[1420] + 0)
+#define ID_parser___ReduceAction481 (SFT_parser[1421])
+#define COLOR_parser___ReduceAction481 (SFT_parser[1422])
+#define INIT_TABLE_POS_parser___ReduceAction481 (SFT_parser[1423] + 0)
+#define ID_parser___ReduceAction482 (SFT_parser[1424])
+#define COLOR_parser___ReduceAction482 (SFT_parser[1425])
+#define INIT_TABLE_POS_parser___ReduceAction482 (SFT_parser[1426] + 0)
+#define ID_parser___ReduceAction483 (SFT_parser[1427])
+#define COLOR_parser___ReduceAction483 (SFT_parser[1428])
+#define INIT_TABLE_POS_parser___ReduceAction483 (SFT_parser[1429] + 0)
+#define ID_parser___ReduceAction484 (SFT_parser[1430])
+#define COLOR_parser___ReduceAction484 (SFT_parser[1431])
+#define INIT_TABLE_POS_parser___ReduceAction484 (SFT_parser[1432] + 0)
+#define ID_parser___ReduceAction485 (SFT_parser[1433])
+#define COLOR_parser___ReduceAction485 (SFT_parser[1434])
+#define INIT_TABLE_POS_parser___ReduceAction485 (SFT_parser[1435] + 0)
+#define ID_parser___ReduceAction486 (SFT_parser[1436])
+#define COLOR_parser___ReduceAction486 (SFT_parser[1437])
+#define INIT_TABLE_POS_parser___ReduceAction486 (SFT_parser[1438] + 0)
+#define ID_parser___ReduceAction487 (SFT_parser[1439])
+#define COLOR_parser___ReduceAction487 (SFT_parser[1440])
+#define INIT_TABLE_POS_parser___ReduceAction487 (SFT_parser[1441] + 0)
+#define ID_parser___ReduceAction488 (SFT_parser[1442])
+#define COLOR_parser___ReduceAction488 (SFT_parser[1443])
+#define INIT_TABLE_POS_parser___ReduceAction488 (SFT_parser[1444] + 0)
+#define ID_parser___ReduceAction489 (SFT_parser[1445])
+#define COLOR_parser___ReduceAction489 (SFT_parser[1446])
+#define INIT_TABLE_POS_parser___ReduceAction489 (SFT_parser[1447] + 0)
+#define ID_parser___ReduceAction490 (SFT_parser[1448])
+#define COLOR_parser___ReduceAction490 (SFT_parser[1449])
+#define INIT_TABLE_POS_parser___ReduceAction490 (SFT_parser[1450] + 0)
+#define ID_parser___ReduceAction491 (SFT_parser[1451])
+#define COLOR_parser___ReduceAction491 (SFT_parser[1452])
+#define INIT_TABLE_POS_parser___ReduceAction491 (SFT_parser[1453] + 0)
+#define ID_parser___ReduceAction492 (SFT_parser[1454])
+#define COLOR_parser___ReduceAction492 (SFT_parser[1455])
+#define INIT_TABLE_POS_parser___ReduceAction492 (SFT_parser[1456] + 0)
+#define ID_parser___ReduceAction493 (SFT_parser[1457])
+#define COLOR_parser___ReduceAction493 (SFT_parser[1458])
+#define INIT_TABLE_POS_parser___ReduceAction493 (SFT_parser[1459] + 0)
+#define ID_parser___ReduceAction494 (SFT_parser[1460])
+#define COLOR_parser___ReduceAction494 (SFT_parser[1461])
+#define INIT_TABLE_POS_parser___ReduceAction494 (SFT_parser[1462] + 0)
+#define ID_parser___ReduceAction495 (SFT_parser[1463])
+#define COLOR_parser___ReduceAction495 (SFT_parser[1464])
+#define INIT_TABLE_POS_parser___ReduceAction495 (SFT_parser[1465] + 0)
+#define ID_parser___ReduceAction496 (SFT_parser[1466])
+#define COLOR_parser___ReduceAction496 (SFT_parser[1467])
+#define INIT_TABLE_POS_parser___ReduceAction496 (SFT_parser[1468] + 0)
+#define ID_parser___ReduceAction497 (SFT_parser[1469])
+#define COLOR_parser___ReduceAction497 (SFT_parser[1470])
+#define INIT_TABLE_POS_parser___ReduceAction497 (SFT_parser[1471] + 0)
+#define ID_parser___ReduceAction498 (SFT_parser[1472])
+#define COLOR_parser___ReduceAction498 (SFT_parser[1473])
+#define INIT_TABLE_POS_parser___ReduceAction498 (SFT_parser[1474] + 0)
+#define ID_parser___ReduceAction499 (SFT_parser[1475])
+#define COLOR_parser___ReduceAction499 (SFT_parser[1476])
+#define INIT_TABLE_POS_parser___ReduceAction499 (SFT_parser[1477] + 0)
+#define ID_parser___ReduceAction500 (SFT_parser[1478])
+#define COLOR_parser___ReduceAction500 (SFT_parser[1479])
+#define INIT_TABLE_POS_parser___ReduceAction500 (SFT_parser[1480] + 0)
+#define ID_parser___ReduceAction501 (SFT_parser[1481])
+#define COLOR_parser___ReduceAction501 (SFT_parser[1482])
+#define INIT_TABLE_POS_parser___ReduceAction501 (SFT_parser[1483] + 0)
+#define ID_parser___ReduceAction502 (SFT_parser[1484])
+#define COLOR_parser___ReduceAction502 (SFT_parser[1485])
+#define INIT_TABLE_POS_parser___ReduceAction502 (SFT_parser[1486] + 0)
+#define ID_parser___ReduceAction505 (SFT_parser[1487])
+#define COLOR_parser___ReduceAction505 (SFT_parser[1488])
+#define INIT_TABLE_POS_parser___ReduceAction505 (SFT_parser[1489] + 0)
+#define ID_parser___ReduceAction506 (SFT_parser[1490])
+#define COLOR_parser___ReduceAction506 (SFT_parser[1491])
+#define INIT_TABLE_POS_parser___ReduceAction506 (SFT_parser[1492] + 0)
+#define ID_parser___ReduceAction507 (SFT_parser[1493])
+#define COLOR_parser___ReduceAction507 (SFT_parser[1494])
+#define INIT_TABLE_POS_parser___ReduceAction507 (SFT_parser[1495] + 0)
+#define ID_parser___ReduceAction508 (SFT_parser[1496])
+#define COLOR_parser___ReduceAction508 (SFT_parser[1497])
+#define INIT_TABLE_POS_parser___ReduceAction508 (SFT_parser[1498] + 0)
+#define ID_parser___ReduceAction509 (SFT_parser[1499])
+#define COLOR_parser___ReduceAction509 (SFT_parser[1500])
+#define INIT_TABLE_POS_parser___ReduceAction509 (SFT_parser[1501] + 0)
+#define ID_parser___ReduceAction510 (SFT_parser[1502])
+#define COLOR_parser___ReduceAction510 (SFT_parser[1503])
+#define INIT_TABLE_POS_parser___ReduceAction510 (SFT_parser[1504] + 0)
+#define ID_parser___ReduceAction511 (SFT_parser[1505])
+#define COLOR_parser___ReduceAction511 (SFT_parser[1506])
+#define INIT_TABLE_POS_parser___ReduceAction511 (SFT_parser[1507] + 0)
+#define ID_parser___ReduceAction512 (SFT_parser[1508])
+#define COLOR_parser___ReduceAction512 (SFT_parser[1509])
+#define INIT_TABLE_POS_parser___ReduceAction512 (SFT_parser[1510] + 0)
+#define ID_parser___ReduceAction513 (SFT_parser[1511])
+#define COLOR_parser___ReduceAction513 (SFT_parser[1512])
+#define INIT_TABLE_POS_parser___ReduceAction513 (SFT_parser[1513] + 0)
+#define ID_parser___ReduceAction514 (SFT_parser[1514])
+#define COLOR_parser___ReduceAction514 (SFT_parser[1515])
+#define INIT_TABLE_POS_parser___ReduceAction514 (SFT_parser[1516] + 0)
+#define ID_parser___ReduceAction515 (SFT_parser[1517])
+#define COLOR_parser___ReduceAction515 (SFT_parser[1518])
+#define INIT_TABLE_POS_parser___ReduceAction515 (SFT_parser[1519] + 0)
+#define ID_parser___ReduceAction516 (SFT_parser[1520])
+#define COLOR_parser___ReduceAction516 (SFT_parser[1521])
+#define INIT_TABLE_POS_parser___ReduceAction516 (SFT_parser[1522] + 0)
+#define ID_parser___ReduceAction517 (SFT_parser[1523])
+#define COLOR_parser___ReduceAction517 (SFT_parser[1524])
+#define INIT_TABLE_POS_parser___ReduceAction517 (SFT_parser[1525] + 0)
+#define ID_parser___ReduceAction521 (SFT_parser[1526])
+#define COLOR_parser___ReduceAction521 (SFT_parser[1527])
+#define INIT_TABLE_POS_parser___ReduceAction521 (SFT_parser[1528] + 0)
+#define ID_parser___ReduceAction523 (SFT_parser[1529])
+#define COLOR_parser___ReduceAction523 (SFT_parser[1530])
+#define INIT_TABLE_POS_parser___ReduceAction523 (SFT_parser[1531] + 0)
+#define ID_parser___ReduceAction525 (SFT_parser[1532])
+#define COLOR_parser___ReduceAction525 (SFT_parser[1533])
+#define INIT_TABLE_POS_parser___ReduceAction525 (SFT_parser[1534] + 0)
+#define ID_parser___ReduceAction526 (SFT_parser[1535])
+#define COLOR_parser___ReduceAction526 (SFT_parser[1536])
+#define INIT_TABLE_POS_parser___ReduceAction526 (SFT_parser[1537] + 0)
+#define ID_parser___ReduceAction527 (SFT_parser[1538])
+#define COLOR_parser___ReduceAction527 (SFT_parser[1539])
+#define INIT_TABLE_POS_parser___ReduceAction527 (SFT_parser[1540] + 0)
+#define ID_parser___ReduceAction529 (SFT_parser[1541])
+#define COLOR_parser___ReduceAction529 (SFT_parser[1542])
+#define INIT_TABLE_POS_parser___ReduceAction529 (SFT_parser[1543] + 0)
+#define ID_parser___ReduceAction531 (SFT_parser[1544])
+#define COLOR_parser___ReduceAction531 (SFT_parser[1545])
+#define INIT_TABLE_POS_parser___ReduceAction531 (SFT_parser[1546] + 0)
+#define ID_parser___ReduceAction532 (SFT_parser[1547])
+#define COLOR_parser___ReduceAction532 (SFT_parser[1548])
+#define INIT_TABLE_POS_parser___ReduceAction532 (SFT_parser[1549] + 0)
+#define ID_parser___ReduceAction533 (SFT_parser[1550])
+#define COLOR_parser___ReduceAction533 (SFT_parser[1551])
+#define INIT_TABLE_POS_parser___ReduceAction533 (SFT_parser[1552] + 0)
+#define ID_parser___ReduceAction534 (SFT_parser[1553])
+#define COLOR_parser___ReduceAction534 (SFT_parser[1554])
+#define INIT_TABLE_POS_parser___ReduceAction534 (SFT_parser[1555] + 0)
+#define ID_parser___ReduceAction535 (SFT_parser[1556])
+#define COLOR_parser___ReduceAction535 (SFT_parser[1557])
+#define INIT_TABLE_POS_parser___ReduceAction535 (SFT_parser[1558] + 0)
+#define ID_parser___ReduceAction536 (SFT_parser[1559])
+#define COLOR_parser___ReduceAction536 (SFT_parser[1560])
+#define INIT_TABLE_POS_parser___ReduceAction536 (SFT_parser[1561] + 0)
+#define ID_parser___ReduceAction537 (SFT_parser[1562])
+#define COLOR_parser___ReduceAction537 (SFT_parser[1563])
+#define INIT_TABLE_POS_parser___ReduceAction537 (SFT_parser[1564] + 0)
+#define ID_parser___ReduceAction538 (SFT_parser[1565])
+#define COLOR_parser___ReduceAction538 (SFT_parser[1566])
+#define INIT_TABLE_POS_parser___ReduceAction538 (SFT_parser[1567] + 0)
+#define ID_parser___ReduceAction539 (SFT_parser[1568])
+#define COLOR_parser___ReduceAction539 (SFT_parser[1569])
+#define INIT_TABLE_POS_parser___ReduceAction539 (SFT_parser[1570] + 0)
+#define ID_parser___ReduceAction540 (SFT_parser[1571])
+#define COLOR_parser___ReduceAction540 (SFT_parser[1572])
+#define INIT_TABLE_POS_parser___ReduceAction540 (SFT_parser[1573] + 0)
+#define ID_parser___ReduceAction541 (SFT_parser[1574])
+#define COLOR_parser___ReduceAction541 (SFT_parser[1575])
+#define INIT_TABLE_POS_parser___ReduceAction541 (SFT_parser[1576] + 0)
+#define ID_parser___ReduceAction543 (SFT_parser[1577])
+#define COLOR_parser___ReduceAction543 (SFT_parser[1578])
+#define INIT_TABLE_POS_parser___ReduceAction543 (SFT_parser[1579] + 0)
+#define ID_parser___ReduceAction544 (SFT_parser[1580])
+#define COLOR_parser___ReduceAction544 (SFT_parser[1581])
+#define INIT_TABLE_POS_parser___ReduceAction544 (SFT_parser[1582] + 0)
+#define ID_parser___ReduceAction546 (SFT_parser[1583])
+#define COLOR_parser___ReduceAction546 (SFT_parser[1584])
+#define INIT_TABLE_POS_parser___ReduceAction546 (SFT_parser[1585] + 0)
+#define ID_parser___ReduceAction547 (SFT_parser[1586])
+#define COLOR_parser___ReduceAction547 (SFT_parser[1587])
+#define INIT_TABLE_POS_parser___ReduceAction547 (SFT_parser[1588] + 0)
+#define ID_parser___ReduceAction548 (SFT_parser[1589])
+#define COLOR_parser___ReduceAction548 (SFT_parser[1590])
+#define INIT_TABLE_POS_parser___ReduceAction548 (SFT_parser[1591] + 0)
+#define ID_parser___ReduceAction550 (SFT_parser[1592])
+#define COLOR_parser___ReduceAction550 (SFT_parser[1593])
+#define INIT_TABLE_POS_parser___ReduceAction550 (SFT_parser[1594] + 0)
+#define ID_parser___ReduceAction551 (SFT_parser[1595])
+#define COLOR_parser___ReduceAction551 (SFT_parser[1596])
+#define INIT_TABLE_POS_parser___ReduceAction551 (SFT_parser[1597] + 0)
+#define ID_parser___ReduceAction553 (SFT_parser[1598])
+#define COLOR_parser___ReduceAction553 (SFT_parser[1599])
+#define INIT_TABLE_POS_parser___ReduceAction553 (SFT_parser[1600] + 0)
+#define ID_parser___ReduceAction554 (SFT_parser[1601])
+#define COLOR_parser___ReduceAction554 (SFT_parser[1602])
+#define INIT_TABLE_POS_parser___ReduceAction554 (SFT_parser[1603] + 0)
+#define ID_parser___ReduceAction555 (SFT_parser[1604])
+#define COLOR_parser___ReduceAction555 (SFT_parser[1605])
+#define INIT_TABLE_POS_parser___ReduceAction555 (SFT_parser[1606] + 0)
+#define ID_parser___ReduceAction556 (SFT_parser[1607])
+#define COLOR_parser___ReduceAction556 (SFT_parser[1608])
+#define INIT_TABLE_POS_parser___ReduceAction556 (SFT_parser[1609] + 0)
+#define ID_parser___ReduceAction557 (SFT_parser[1610])
+#define COLOR_parser___ReduceAction557 (SFT_parser[1611])
+#define INIT_TABLE_POS_parser___ReduceAction557 (SFT_parser[1612] + 0)
+#define ID_parser___ReduceAction564 (SFT_parser[1613])
+#define COLOR_parser___ReduceAction564 (SFT_parser[1614])
+#define INIT_TABLE_POS_parser___ReduceAction564 (SFT_parser[1615] + 0)
+#define ID_parser___ReduceAction565 (SFT_parser[1616])
+#define COLOR_parser___ReduceAction565 (SFT_parser[1617])
+#define INIT_TABLE_POS_parser___ReduceAction565 (SFT_parser[1618] + 0)
+#define ID_parser___ReduceAction566 (SFT_parser[1619])
+#define COLOR_parser___ReduceAction566 (SFT_parser[1620])
+#define INIT_TABLE_POS_parser___ReduceAction566 (SFT_parser[1621] + 0)
+#define ID_parser___ReduceAction567 (SFT_parser[1622])
+#define COLOR_parser___ReduceAction567 (SFT_parser[1623])
+#define INIT_TABLE_POS_parser___ReduceAction567 (SFT_parser[1624] + 0)
+#define ID_parser___ReduceAction568 (SFT_parser[1625])
+#define COLOR_parser___ReduceAction568 (SFT_parser[1626])
+#define INIT_TABLE_POS_parser___ReduceAction568 (SFT_parser[1627] + 0)
+#define ID_parser___ReduceAction569 (SFT_parser[1628])
+#define COLOR_parser___ReduceAction569 (SFT_parser[1629])
+#define INIT_TABLE_POS_parser___ReduceAction569 (SFT_parser[1630] + 0)
+#define ID_parser___ReduceAction570 (SFT_parser[1631])
+#define COLOR_parser___ReduceAction570 (SFT_parser[1632])
+#define INIT_TABLE_POS_parser___ReduceAction570 (SFT_parser[1633] + 0)
+#define ID_parser___ReduceAction571 (SFT_parser[1634])
+#define COLOR_parser___ReduceAction571 (SFT_parser[1635])
+#define INIT_TABLE_POS_parser___ReduceAction571 (SFT_parser[1636] + 0)
+#define ID_parser___ReduceAction572 (SFT_parser[1637])
+#define COLOR_parser___ReduceAction572 (SFT_parser[1638])
+#define INIT_TABLE_POS_parser___ReduceAction572 (SFT_parser[1639] + 0)
+#define ID_parser___ReduceAction573 (SFT_parser[1640])
+#define COLOR_parser___ReduceAction573 (SFT_parser[1641])
+#define INIT_TABLE_POS_parser___ReduceAction573 (SFT_parser[1642] + 0)
+#define ID_parser___ReduceAction574 (SFT_parser[1643])
+#define COLOR_parser___ReduceAction574 (SFT_parser[1644])
+#define INIT_TABLE_POS_parser___ReduceAction574 (SFT_parser[1645] + 0)
+#define ID_parser___ReduceAction575 (SFT_parser[1646])
+#define COLOR_parser___ReduceAction575 (SFT_parser[1647])
+#define INIT_TABLE_POS_parser___ReduceAction575 (SFT_parser[1648] + 0)
+#define ID_parser___ReduceAction576 (SFT_parser[1649])
+#define COLOR_parser___ReduceAction576 (SFT_parser[1650])
+#define INIT_TABLE_POS_parser___ReduceAction576 (SFT_parser[1651] + 0)
+#define ID_parser___ReduceAction577 (SFT_parser[1652])
+#define COLOR_parser___ReduceAction577 (SFT_parser[1653])
+#define INIT_TABLE_POS_parser___ReduceAction577 (SFT_parser[1654] + 0)
+#define ID_parser___ReduceAction578 (SFT_parser[1655])
+#define COLOR_parser___ReduceAction578 (SFT_parser[1656])
+#define INIT_TABLE_POS_parser___ReduceAction578 (SFT_parser[1657] + 0)
+#define ID_parser___ReduceAction579 (SFT_parser[1658])
+#define COLOR_parser___ReduceAction579 (SFT_parser[1659])
+#define INIT_TABLE_POS_parser___ReduceAction579 (SFT_parser[1660] + 0)
+#define ID_parser___ReduceAction580 (SFT_parser[1661])
+#define COLOR_parser___ReduceAction580 (SFT_parser[1662])
+#define INIT_TABLE_POS_parser___ReduceAction580 (SFT_parser[1663] + 0)
+#define ID_parser___ReduceAction581 (SFT_parser[1664])
+#define COLOR_parser___ReduceAction581 (SFT_parser[1665])
+#define INIT_TABLE_POS_parser___ReduceAction581 (SFT_parser[1666] + 0)
+#define ID_parser___ReduceAction582 (SFT_parser[1667])
+#define COLOR_parser___ReduceAction582 (SFT_parser[1668])
+#define INIT_TABLE_POS_parser___ReduceAction582 (SFT_parser[1669] + 0)
+#define ID_parser___ReduceAction583 (SFT_parser[1670])
+#define COLOR_parser___ReduceAction583 (SFT_parser[1671])
+#define INIT_TABLE_POS_parser___ReduceAction583 (SFT_parser[1672] + 0)
+#define ID_parser___ReduceAction584 (SFT_parser[1673])
+#define COLOR_parser___ReduceAction584 (SFT_parser[1674])
+#define INIT_TABLE_POS_parser___ReduceAction584 (SFT_parser[1675] + 0)
+#define ID_parser___ReduceAction585 (SFT_parser[1676])
+#define COLOR_parser___ReduceAction585 (SFT_parser[1677])
+#define INIT_TABLE_POS_parser___ReduceAction585 (SFT_parser[1678] + 0)
+#define ID_parser___ReduceAction586 (SFT_parser[1679])
+#define COLOR_parser___ReduceAction586 (SFT_parser[1680])
+#define INIT_TABLE_POS_parser___ReduceAction586 (SFT_parser[1681] + 0)
+#define ID_parser___ReduceAction587 (SFT_parser[1682])
+#define COLOR_parser___ReduceAction587 (SFT_parser[1683])
+#define INIT_TABLE_POS_parser___ReduceAction587 (SFT_parser[1684] + 0)
+#define ID_parser___ReduceAction589 (SFT_parser[1685])
+#define COLOR_parser___ReduceAction589 (SFT_parser[1686])
+#define INIT_TABLE_POS_parser___ReduceAction589 (SFT_parser[1687] + 0)
+#define ID_parser___ReduceAction590 (SFT_parser[1688])
+#define COLOR_parser___ReduceAction590 (SFT_parser[1689])
+#define INIT_TABLE_POS_parser___ReduceAction590 (SFT_parser[1690] + 0)
+#define ID_parser___ReduceAction591 (SFT_parser[1691])
+#define COLOR_parser___ReduceAction591 (SFT_parser[1692])
+#define INIT_TABLE_POS_parser___ReduceAction591 (SFT_parser[1693] + 0)
+#define ID_parser___ReduceAction592 (SFT_parser[1694])
+#define COLOR_parser___ReduceAction592 (SFT_parser[1695])
+#define INIT_TABLE_POS_parser___ReduceAction592 (SFT_parser[1696] + 0)
+#define ID_parser___ReduceAction593 (SFT_parser[1697])
+#define COLOR_parser___ReduceAction593 (SFT_parser[1698])
+#define INIT_TABLE_POS_parser___ReduceAction593 (SFT_parser[1699] + 0)
+#define ID_parser___ReduceAction594 (SFT_parser[1700])
+#define COLOR_parser___ReduceAction594 (SFT_parser[1701])
+#define INIT_TABLE_POS_parser___ReduceAction594 (SFT_parser[1702] + 0)
+#define ID_parser___ReduceAction595 (SFT_parser[1703])
+#define COLOR_parser___ReduceAction595 (SFT_parser[1704])
+#define INIT_TABLE_POS_parser___ReduceAction595 (SFT_parser[1705] + 0)
+#define ID_parser___ReduceAction596 (SFT_parser[1706])
+#define COLOR_parser___ReduceAction596 (SFT_parser[1707])
+#define INIT_TABLE_POS_parser___ReduceAction596 (SFT_parser[1708] + 0)
+#define ID_parser___ReduceAction597 (SFT_parser[1709])
+#define COLOR_parser___ReduceAction597 (SFT_parser[1710])
+#define INIT_TABLE_POS_parser___ReduceAction597 (SFT_parser[1711] + 0)
+#define ID_parser___ReduceAction598 (SFT_parser[1712])
+#define COLOR_parser___ReduceAction598 (SFT_parser[1713])
+#define INIT_TABLE_POS_parser___ReduceAction598 (SFT_parser[1714] + 0)
+#define ID_parser___ReduceAction600 (SFT_parser[1715])
+#define COLOR_parser___ReduceAction600 (SFT_parser[1716])
+#define INIT_TABLE_POS_parser___ReduceAction600 (SFT_parser[1717] + 0)
+#define ID_parser___ReduceAction601 (SFT_parser[1718])
+#define COLOR_parser___ReduceAction601 (SFT_parser[1719])
+#define INIT_TABLE_POS_parser___ReduceAction601 (SFT_parser[1720] + 0)
+#define ID_parser___ReduceAction602 (SFT_parser[1721])
+#define COLOR_parser___ReduceAction602 (SFT_parser[1722])
+#define INIT_TABLE_POS_parser___ReduceAction602 (SFT_parser[1723] + 0)
+#define ID_parser___ReduceAction603 (SFT_parser[1724])
+#define COLOR_parser___ReduceAction603 (SFT_parser[1725])
+#define INIT_TABLE_POS_parser___ReduceAction603 (SFT_parser[1726] + 0)
+#define ID_parser___ReduceAction604 (SFT_parser[1727])
+#define COLOR_parser___ReduceAction604 (SFT_parser[1728])
+#define INIT_TABLE_POS_parser___ReduceAction604 (SFT_parser[1729] + 0)
+#define ID_parser___ReduceAction605 (SFT_parser[1730])
+#define COLOR_parser___ReduceAction605 (SFT_parser[1731])
+#define INIT_TABLE_POS_parser___ReduceAction605 (SFT_parser[1732] + 0)
+#define ID_parser___ReduceAction606 (SFT_parser[1733])
+#define COLOR_parser___ReduceAction606 (SFT_parser[1734])
+#define INIT_TABLE_POS_parser___ReduceAction606 (SFT_parser[1735] + 0)
+#define ID_parser___ReduceAction607 (SFT_parser[1736])
+#define COLOR_parser___ReduceAction607 (SFT_parser[1737])
+#define INIT_TABLE_POS_parser___ReduceAction607 (SFT_parser[1738] + 0)
+#define ID_parser___ReduceAction608 (SFT_parser[1739])
+#define COLOR_parser___ReduceAction608 (SFT_parser[1740])
+#define INIT_TABLE_POS_parser___ReduceAction608 (SFT_parser[1741] + 0)
+#define ID_parser___ReduceAction609 (SFT_parser[1742])
+#define COLOR_parser___ReduceAction609 (SFT_parser[1743])
+#define INIT_TABLE_POS_parser___ReduceAction609 (SFT_parser[1744] + 0)
+#define ID_parser___ReduceAction610 (SFT_parser[1745])
+#define COLOR_parser___ReduceAction610 (SFT_parser[1746])
+#define INIT_TABLE_POS_parser___ReduceAction610 (SFT_parser[1747] + 0)
+#define ID_parser___ReduceAction612 (SFT_parser[1748])
+#define COLOR_parser___ReduceAction612 (SFT_parser[1749])
+#define INIT_TABLE_POS_parser___ReduceAction612 (SFT_parser[1750] + 0)
+#define ID_parser___ReduceAction613 (SFT_parser[1751])
+#define COLOR_parser___ReduceAction613 (SFT_parser[1752])
+#define INIT_TABLE_POS_parser___ReduceAction613 (SFT_parser[1753] + 0)
+#define ID_parser___ReduceAction614 (SFT_parser[1754])
+#define COLOR_parser___ReduceAction614 (SFT_parser[1755])
+#define INIT_TABLE_POS_parser___ReduceAction614 (SFT_parser[1756] + 0)
+#define ID_parser___ReduceAction615 (SFT_parser[1757])
+#define COLOR_parser___ReduceAction615 (SFT_parser[1758])
+#define INIT_TABLE_POS_parser___ReduceAction615 (SFT_parser[1759] + 0)
+#define ID_parser___ReduceAction616 (SFT_parser[1760])
+#define COLOR_parser___ReduceAction616 (SFT_parser[1761])
+#define INIT_TABLE_POS_parser___ReduceAction616 (SFT_parser[1762] + 0)
+#define ID_parser___ReduceAction617 (SFT_parser[1763])
+#define COLOR_parser___ReduceAction617 (SFT_parser[1764])
+#define INIT_TABLE_POS_parser___ReduceAction617 (SFT_parser[1765] + 0)
+#define ID_parser___ReduceAction618 (SFT_parser[1766])
+#define COLOR_parser___ReduceAction618 (SFT_parser[1767])
+#define INIT_TABLE_POS_parser___ReduceAction618 (SFT_parser[1768] + 0)
+#define ID_parser___ReduceAction619 (SFT_parser[1769])
+#define COLOR_parser___ReduceAction619 (SFT_parser[1770])
+#define INIT_TABLE_POS_parser___ReduceAction619 (SFT_parser[1771] + 0)
+#define ID_parser___ReduceAction620 (SFT_parser[1772])
+#define COLOR_parser___ReduceAction620 (SFT_parser[1773])
+#define INIT_TABLE_POS_parser___ReduceAction620 (SFT_parser[1774] + 0)
+#define ID_parser___ReduceAction621 (SFT_parser[1775])
+#define COLOR_parser___ReduceAction621 (SFT_parser[1776])
+#define INIT_TABLE_POS_parser___ReduceAction621 (SFT_parser[1777] + 0)
+#define ID_parser___ReduceAction622 (SFT_parser[1778])
+#define COLOR_parser___ReduceAction622 (SFT_parser[1779])
+#define INIT_TABLE_POS_parser___ReduceAction622 (SFT_parser[1780] + 0)
+#define ID_parser___ReduceAction624 (SFT_parser[1781])
+#define COLOR_parser___ReduceAction624 (SFT_parser[1782])
+#define INIT_TABLE_POS_parser___ReduceAction624 (SFT_parser[1783] + 0)
+#define ID_parser___ReduceAction625 (SFT_parser[1784])
+#define COLOR_parser___ReduceAction625 (SFT_parser[1785])
+#define INIT_TABLE_POS_parser___ReduceAction625 (SFT_parser[1786] + 0)
+#define ID_parser___ReduceAction626 (SFT_parser[1787])
+#define COLOR_parser___ReduceAction626 (SFT_parser[1788])
+#define INIT_TABLE_POS_parser___ReduceAction626 (SFT_parser[1789] + 0)
+#define ID_parser___ReduceAction627 (SFT_parser[1790])
+#define COLOR_parser___ReduceAction627 (SFT_parser[1791])
+#define INIT_TABLE_POS_parser___ReduceAction627 (SFT_parser[1792] + 0)
+#define ID_parser___ReduceAction628 (SFT_parser[1793])
+#define COLOR_parser___ReduceAction628 (SFT_parser[1794])
+#define INIT_TABLE_POS_parser___ReduceAction628 (SFT_parser[1795] + 0)
+#define ID_parser___ReduceAction629 (SFT_parser[1796])
+#define COLOR_parser___ReduceAction629 (SFT_parser[1797])
+#define INIT_TABLE_POS_parser___ReduceAction629 (SFT_parser[1798] + 0)
+#define ID_parser___ReduceAction630 (SFT_parser[1799])
+#define COLOR_parser___ReduceAction630 (SFT_parser[1800])
+#define INIT_TABLE_POS_parser___ReduceAction630 (SFT_parser[1801] + 0)
+#define ID_parser___ReduceAction631 (SFT_parser[1802])
+#define COLOR_parser___ReduceAction631 (SFT_parser[1803])
+#define INIT_TABLE_POS_parser___ReduceAction631 (SFT_parser[1804] + 0)
+#define ID_parser___ReduceAction633 (SFT_parser[1805])
+#define COLOR_parser___ReduceAction633 (SFT_parser[1806])
+#define INIT_TABLE_POS_parser___ReduceAction633 (SFT_parser[1807] + 0)
+#define ID_parser___ReduceAction636 (SFT_parser[1808])
+#define COLOR_parser___ReduceAction636 (SFT_parser[1809])
+#define INIT_TABLE_POS_parser___ReduceAction636 (SFT_parser[1810] + 0)
+#define ID_parser___ReduceAction637 (SFT_parser[1811])
+#define COLOR_parser___ReduceAction637 (SFT_parser[1812])
+#define INIT_TABLE_POS_parser___ReduceAction637 (SFT_parser[1813] + 0)
+#define ID_parser___ReduceAction638 (SFT_parser[1814])
+#define COLOR_parser___ReduceAction638 (SFT_parser[1815])
+#define INIT_TABLE_POS_parser___ReduceAction638 (SFT_parser[1816] + 0)
+#define ID_parser___ReduceAction639 (SFT_parser[1817])
+#define COLOR_parser___ReduceAction639 (SFT_parser[1818])
+#define INIT_TABLE_POS_parser___ReduceAction639 (SFT_parser[1819] + 0)
+#define ID_parser___ReduceAction640 (SFT_parser[1820])
+#define COLOR_parser___ReduceAction640 (SFT_parser[1821])
+#define INIT_TABLE_POS_parser___ReduceAction640 (SFT_parser[1822] + 0)
+#define ID_parser___ReduceAction641 (SFT_parser[1823])
+#define COLOR_parser___ReduceAction641 (SFT_parser[1824])
+#define INIT_TABLE_POS_parser___ReduceAction641 (SFT_parser[1825] + 0)
+#define ID_parser___ReduceAction642 (SFT_parser[1826])
+#define COLOR_parser___ReduceAction642 (SFT_parser[1827])
+#define INIT_TABLE_POS_parser___ReduceAction642 (SFT_parser[1828] + 0)
+#define ID_parser___ReduceAction643 (SFT_parser[1829])
+#define COLOR_parser___ReduceAction643 (SFT_parser[1830])
+#define INIT_TABLE_POS_parser___ReduceAction643 (SFT_parser[1831] + 0)
+#define ID_parser___ReduceAction644 (SFT_parser[1832])
+#define COLOR_parser___ReduceAction644 (SFT_parser[1833])
+#define INIT_TABLE_POS_parser___ReduceAction644 (SFT_parser[1834] + 0)
+#define ID_parser___ReduceAction645 (SFT_parser[1835])
+#define COLOR_parser___ReduceAction645 (SFT_parser[1836])
+#define INIT_TABLE_POS_parser___ReduceAction645 (SFT_parser[1837] + 0)
+#define ID_parser___ReduceAction646 (SFT_parser[1838])
+#define COLOR_parser___ReduceAction646 (SFT_parser[1839])
+#define INIT_TABLE_POS_parser___ReduceAction646 (SFT_parser[1840] + 0)
+#define ID_parser___ReduceAction647 (SFT_parser[1841])
+#define COLOR_parser___ReduceAction647 (SFT_parser[1842])
+#define INIT_TABLE_POS_parser___ReduceAction647 (SFT_parser[1843] + 0)
+#define ID_parser___ReduceAction648 (SFT_parser[1844])
+#define COLOR_parser___ReduceAction648 (SFT_parser[1845])
+#define INIT_TABLE_POS_parser___ReduceAction648 (SFT_parser[1846] + 0)
+#define ID_parser___ReduceAction649 (SFT_parser[1847])
+#define COLOR_parser___ReduceAction649 (SFT_parser[1848])
+#define INIT_TABLE_POS_parser___ReduceAction649 (SFT_parser[1849] + 0)
+#define ID_parser___ReduceAction650 (SFT_parser[1850])
+#define COLOR_parser___ReduceAction650 (SFT_parser[1851])
+#define INIT_TABLE_POS_parser___ReduceAction650 (SFT_parser[1852] + 0)
+#define ID_parser___ReduceAction651 (SFT_parser[1853])
+#define COLOR_parser___ReduceAction651 (SFT_parser[1854])
+#define INIT_TABLE_POS_parser___ReduceAction651 (SFT_parser[1855] + 0)
+#define ID_parser___ReduceAction653 (SFT_parser[1856])
+#define COLOR_parser___ReduceAction653 (SFT_parser[1857])
+#define INIT_TABLE_POS_parser___ReduceAction653 (SFT_parser[1858] + 0)
+#define ID_parser___ReduceAction654 (SFT_parser[1859])
+#define COLOR_parser___ReduceAction654 (SFT_parser[1860])
+#define INIT_TABLE_POS_parser___ReduceAction654 (SFT_parser[1861] + 0)
+#define ID_parser___ReduceAction656 (SFT_parser[1862])
+#define COLOR_parser___ReduceAction656 (SFT_parser[1863])
+#define INIT_TABLE_POS_parser___ReduceAction656 (SFT_parser[1864] + 0)
+#define ID_parser___ReduceAction657 (SFT_parser[1865])
+#define COLOR_parser___ReduceAction657 (SFT_parser[1866])
+#define INIT_TABLE_POS_parser___ReduceAction657 (SFT_parser[1867] + 0)
+#define ID_parser___ReduceAction658 (SFT_parser[1868])
+#define COLOR_parser___ReduceAction658 (SFT_parser[1869])
+#define INIT_TABLE_POS_parser___ReduceAction658 (SFT_parser[1870] + 0)
+#define ID_parser___ReduceAction659 (SFT_parser[1871])
+#define COLOR_parser___ReduceAction659 (SFT_parser[1872])
+#define INIT_TABLE_POS_parser___ReduceAction659 (SFT_parser[1873] + 0)
+#define ID_parser___ReduceAction931 (SFT_parser[1874])
+#define COLOR_parser___ReduceAction931 (SFT_parser[1875])
+#define INIT_TABLE_POS_parser___ReduceAction931 (SFT_parser[1876] + 0)
+#define ID_parser___ReduceAction932 (SFT_parser[1877])
+#define COLOR_parser___ReduceAction932 (SFT_parser[1878])
+#define INIT_TABLE_POS_parser___ReduceAction932 (SFT_parser[1879] + 0)
+#define ID_parser___ReduceAction933 (SFT_parser[1880])
+#define COLOR_parser___ReduceAction933 (SFT_parser[1881])
+#define INIT_TABLE_POS_parser___ReduceAction933 (SFT_parser[1882] + 0)
+#define ID_parser___ReduceAction936 (SFT_parser[1883])
+#define COLOR_parser___ReduceAction936 (SFT_parser[1884])
+#define INIT_TABLE_POS_parser___ReduceAction936 (SFT_parser[1885] + 0)
+#define ID_parser___ReduceAction957 (SFT_parser[1886])
+#define COLOR_parser___ReduceAction957 (SFT_parser[1887])
+#define INIT_TABLE_POS_parser___ReduceAction957 (SFT_parser[1888] + 0)
+#define ID_parser___ReduceAction958 (SFT_parser[1889])
+#define COLOR_parser___ReduceAction958 (SFT_parser[1890])
+#define INIT_TABLE_POS_parser___ReduceAction958 (SFT_parser[1891] + 0)
+#define ID_parser___ReduceAction1250 (SFT_parser[1892])
+#define COLOR_parser___ReduceAction1250 (SFT_parser[1893])
+#define INIT_TABLE_POS_parser___ReduceAction1250 (SFT_parser[1894] + 0)
+#define ID_parser___ReduceAction1251 (SFT_parser[1895])
+#define COLOR_parser___ReduceAction1251 (SFT_parser[1896])
+#define INIT_TABLE_POS_parser___ReduceAction1251 (SFT_parser[1897] + 0)
+#define ID_parser___ReduceAction1252 (SFT_parser[1898])
+#define COLOR_parser___ReduceAction1252 (SFT_parser[1899])
+#define INIT_TABLE_POS_parser___ReduceAction1252 (SFT_parser[1900] + 0)
+#define ID_parser___ReduceAction1253 (SFT_parser[1901])
+#define COLOR_parser___ReduceAction1253 (SFT_parser[1902])
+#define INIT_TABLE_POS_parser___ReduceAction1253 (SFT_parser[1903] + 0)
+#define ID_parser___ReduceAction1254 (SFT_parser[1904])
+#define COLOR_parser___ReduceAction1254 (SFT_parser[1905])
+#define INIT_TABLE_POS_parser___ReduceAction1254 (SFT_parser[1906] + 0)
+#define ID_parser___ReduceAction1255 (SFT_parser[1907])
+#define COLOR_parser___ReduceAction1255 (SFT_parser[1908])
+#define INIT_TABLE_POS_parser___ReduceAction1255 (SFT_parser[1909] + 0)
+#define ID_parser___ReduceAction1256 (SFT_parser[1910])
+#define COLOR_parser___ReduceAction1256 (SFT_parser[1911])
+#define INIT_TABLE_POS_parser___ReduceAction1256 (SFT_parser[1912] + 0)
+#define ID_parser___ReduceAction1257 (SFT_parser[1913])
+#define COLOR_parser___ReduceAction1257 (SFT_parser[1914])
+#define INIT_TABLE_POS_parser___ReduceAction1257 (SFT_parser[1915] + 0)
+#define ID_parser___ReduceAction1258 (SFT_parser[1916])
+#define COLOR_parser___ReduceAction1258 (SFT_parser[1917])
+#define INIT_TABLE_POS_parser___ReduceAction1258 (SFT_parser[1918] + 0)
+#define ID_parser___ReduceAction1259 (SFT_parser[1919])
+#define COLOR_parser___ReduceAction1259 (SFT_parser[1920])
+#define INIT_TABLE_POS_parser___ReduceAction1259 (SFT_parser[1921] + 0)
+#define ID_parser___ReduceAction1262 (SFT_parser[1922])
+#define COLOR_parser___ReduceAction1262 (SFT_parser[1923])
+#define INIT_TABLE_POS_parser___ReduceAction1262 (SFT_parser[1924] + 0)
+#define ID_parser___ReduceAction1263 (SFT_parser[1925])
+#define COLOR_parser___ReduceAction1263 (SFT_parser[1926])
+#define INIT_TABLE_POS_parser___ReduceAction1263 (SFT_parser[1927] + 0)
+#define ID_parser___ReduceAction1264 (SFT_parser[1928])
+#define COLOR_parser___ReduceAction1264 (SFT_parser[1929])
+#define INIT_TABLE_POS_parser___ReduceAction1264 (SFT_parser[1930] + 0)
+#define ID_parser___ReduceAction1265 (SFT_parser[1931])
+#define COLOR_parser___ReduceAction1265 (SFT_parser[1932])
+#define INIT_TABLE_POS_parser___ReduceAction1265 (SFT_parser[1933] + 0)
+#define ID_parser___ReduceAction1266 (SFT_parser[1934])
+#define COLOR_parser___ReduceAction1266 (SFT_parser[1935])
+#define INIT_TABLE_POS_parser___ReduceAction1266 (SFT_parser[1936] + 0)
+#define ID_parser___ReduceAction1267 (SFT_parser[1937])
+#define COLOR_parser___ReduceAction1267 (SFT_parser[1938])
+#define INIT_TABLE_POS_parser___ReduceAction1267 (SFT_parser[1939] + 0)
+#define ID_parser___ReduceAction1268 (SFT_parser[1940])
+#define COLOR_parser___ReduceAction1268 (SFT_parser[1941])
+#define INIT_TABLE_POS_parser___ReduceAction1268 (SFT_parser[1942] + 0)
+#define ID_parser___ReduceAction1269 (SFT_parser[1943])
+#define COLOR_parser___ReduceAction1269 (SFT_parser[1944])
+#define INIT_TABLE_POS_parser___ReduceAction1269 (SFT_parser[1945] + 0)
+#define ID_parser___ReduceAction1271 (SFT_parser[1946])
+#define COLOR_parser___ReduceAction1271 (SFT_parser[1947])
+#define INIT_TABLE_POS_parser___ReduceAction1271 (SFT_parser[1948] + 0)
+#define ID_parser___ReduceAction1272 (SFT_parser[1949])
+#define COLOR_parser___ReduceAction1272 (SFT_parser[1950])
+#define INIT_TABLE_POS_parser___ReduceAction1272 (SFT_parser[1951] + 0)
+#define ID_parser___ReduceAction1273 (SFT_parser[1952])
+#define COLOR_parser___ReduceAction1273 (SFT_parser[1953])
+#define INIT_TABLE_POS_parser___ReduceAction1273 (SFT_parser[1954] + 0)
+#define ID_parser___ReduceAction1275 (SFT_parser[1955])
+#define COLOR_parser___ReduceAction1275 (SFT_parser[1956])
+#define INIT_TABLE_POS_parser___ReduceAction1275 (SFT_parser[1957] + 0)
+#define ID_parser___ReduceAction1277 (SFT_parser[1958])
+#define COLOR_parser___ReduceAction1277 (SFT_parser[1959])
+#define INIT_TABLE_POS_parser___ReduceAction1277 (SFT_parser[1960] + 0)
+#define ID_parser___ReduceAction1281 (SFT_parser[1961])
+#define COLOR_parser___ReduceAction1281 (SFT_parser[1962])
+#define INIT_TABLE_POS_parser___ReduceAction1281 (SFT_parser[1963] + 0)
+#define ID_parser___ReduceAction1285 (SFT_parser[1964])
+#define COLOR_parser___ReduceAction1285 (SFT_parser[1965])
+#define INIT_TABLE_POS_parser___ReduceAction1285 (SFT_parser[1966] + 0)
+#define ID_parser___ReduceAction1286 (SFT_parser[1967])
+#define COLOR_parser___ReduceAction1286 (SFT_parser[1968])
+#define INIT_TABLE_POS_parser___ReduceAction1286 (SFT_parser[1969] + 0)
+#define ID_parser___ReduceAction1287 (SFT_parser[1970])
+#define COLOR_parser___ReduceAction1287 (SFT_parser[1971])
+#define INIT_TABLE_POS_parser___ReduceAction1287 (SFT_parser[1972] + 0)
+#define ID_parser___ReduceAction1288 (SFT_parser[1973])
+#define COLOR_parser___ReduceAction1288 (SFT_parser[1974])
+#define INIT_TABLE_POS_parser___ReduceAction1288 (SFT_parser[1975] + 0)
+#define ID_parser___ReduceAction1289 (SFT_parser[1976])
+#define COLOR_parser___ReduceAction1289 (SFT_parser[1977])
+#define INIT_TABLE_POS_parser___ReduceAction1289 (SFT_parser[1978] + 0)
 val_t parser___State___state(val_t p0);
 typedef val_t (*parser___State___state_t)(val_t p0);
 void parser___State___state__eq(val_t p0, val_t p1);
@@ -2953,12 +3573,12 @@ val_t NEW_ReduceAction68_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction69___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction69___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction69_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction70___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction70___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction70_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction71___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction71___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction71_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction72___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction72___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction72_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction73___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction73___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction73_parser___ReduceAction___init(val_t p0);
@@ -3688,6 +4308,9 @@ val_t NEW_ReduceAction314_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction315___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction315___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction315_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction316___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction316___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction316_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction317___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction317___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction317_parser___ReduceAction___init(val_t p0);
@@ -3706,9 +4329,6 @@ val_t NEW_ReduceAction321_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction322___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction322___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction322_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction323___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction323___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction323_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction324___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction324___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction324_parser___ReduceAction___init(val_t p0);
@@ -3742,6 +4362,9 @@ val_t NEW_ReduceAction333_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction334___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction334___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction334_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction335___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction335___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction335_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction336___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction336___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction336_parser___ReduceAction___init(val_t p0);
@@ -3772,6 +4395,15 @@ val_t NEW_ReduceAction344_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction345___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction345___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction345_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction346___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction346___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction346_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction347___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction347___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction347_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction348___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction348___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction348_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction349___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction349___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction349_parser___ReduceAction___init(val_t p0);
@@ -3805,6 +4437,24 @@ val_t NEW_ReduceAction358_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction359___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction359___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction359_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction360___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction360___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction360_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction361___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction361___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction361_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction362___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction362___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction362_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction363___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction363___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction363_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction364___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction364___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction364_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction365___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction365___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction365_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction366___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction366___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction366_parser___ReduceAction___init(val_t p0);
@@ -3883,9 +4533,6 @@ val_t NEW_ReduceAction390_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction391___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction391___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction391_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction392___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction392___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction392_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction393___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction393___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction393_parser___ReduceAction___init(val_t p0);
@@ -3952,9 +4599,6 @@ val_t NEW_ReduceAction413_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction414___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction414___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction414_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction415___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction415___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction415_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction416___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction416___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction416_parser___ReduceAction___init(val_t p0);
@@ -3964,6 +4608,12 @@ val_t NEW_ReduceAction417_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction418___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction418___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction418_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction419___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction419___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction419_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction420___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction420___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction420_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction421___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction421___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction421_parser___ReduceAction___init(val_t p0);
@@ -3979,15 +4629,6 @@ val_t NEW_ReduceAction424_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction425___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction425___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction425_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction426___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction426___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction426_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction427___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction427___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction427_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction428___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction428___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction428_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction429___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction429___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction429_parser___ReduceAction___init(val_t p0);
@@ -4003,24 +4644,27 @@ val_t NEW_ReduceAction432_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction433___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction433___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction433_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction434___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction434___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction434_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction435___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction435___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction435_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction436___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction436___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction436_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction437___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction437___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction437_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction438___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction438___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction438_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction439___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction439___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction439_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction441___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction441___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction441_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction442___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction442___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction442_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction443___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction443___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction443_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction445___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction445___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction445_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction446___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction446___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction446_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction447___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction447___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction447_parser___ReduceAction___init(val_t p0);
@@ -4054,12 +4698,18 @@ val_t NEW_ReduceAction456_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction457___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction457___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction457_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction458___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction458___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction458_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction459___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction459___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction459_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction460___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction460___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction460_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction461___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction461___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction461_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction462___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction462___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction462_parser___ReduceAction___init(val_t p0);
@@ -4069,12 +4719,18 @@ val_t NEW_ReduceAction463_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction464___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction464___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction464_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction465___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction465___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction465_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction466___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction466___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction466_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction467___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction467___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction467_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction468___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction468___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction468_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction469___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction469___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction469_parser___ReduceAction___init(val_t p0);
@@ -4090,6 +4746,24 @@ val_t NEW_ReduceAction472_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction473___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction473___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction473_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction474___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction474___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction474_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction475___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction475___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction475_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction476___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction476___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction476_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction477___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction477___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction477_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction478___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction478___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction478_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction479___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction479___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction479_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction480___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction480___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction480_parser___ReduceAction___init(val_t p0);
@@ -4129,6 +4803,9 @@ val_t NEW_ReduceAction491_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction492___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction492___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction492_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction493___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction493___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction493_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction494___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction494___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction494_parser___ReduceAction___init(val_t p0);
@@ -4150,24 +4827,30 @@ val_t NEW_ReduceAction499_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction500___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction500___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction500_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction501___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction501___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction501_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction502___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction502___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction502_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction503___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction503___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction503_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction504___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction504___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction504_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction505___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction505___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction505_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction506___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction506___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction506_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction507___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction507___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction507_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction508___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction508___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction508_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction509___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction509___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction509_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction510___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction510___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction510_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction511___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction511___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction511_parser___ReduceAction___init(val_t p0);
@@ -4189,36 +4872,21 @@ val_t NEW_ReduceAction516_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction517___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction517___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction517_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction518___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction518___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction518_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction519___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction519___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction519_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction520___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction520___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction520_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction521___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction521___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction521_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction522___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction522___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction522_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction523___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction523___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction523_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction524___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction524___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction524_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction525___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction525___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction525_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction526___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction526___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction526_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction528___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction528___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction528_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction527___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction527___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction527_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction529___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction529___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction529_parser___ReduceAction___init(val_t p0);
@@ -4234,103 +4902,427 @@ val_t NEW_ReduceAction533_parser___ReduceAction___init(val_t p0);
 void parser___ReduceAction534___action(val_t p0, val_t p1);
 typedef void (*parser___ReduceAction534___action_t)(val_t p0, val_t p1);
 val_t NEW_ReduceAction534_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction806___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction806___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction806_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction807___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction807___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction807_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction808___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction808___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction808_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction811___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction811___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction811_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction824___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction824___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction824_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction825___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction825___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction825_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction832___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction832___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction832_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction833___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction833___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction833_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction834___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction834___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction834_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction835___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction835___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction835_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction836___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction836___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction836_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction837___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction837___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction837_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction838___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction838___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction838_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction839___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction839___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction839_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction840___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction840___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction840_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction841___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction841___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction841_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction844___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction844___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction844_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction845___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction845___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction845_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction846___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction846___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction846_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction847___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction847___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction847_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction848___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction848___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction848_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction849___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction849___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction849_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction850___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction850___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction850_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction851___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction851___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction851_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction853___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction853___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction853_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction854___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction854___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction854_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction855___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction855___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction855_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction857___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction857___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction857_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction861___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction861___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction861_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction862___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction862___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction862_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction863___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction863___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction863_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction864___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction864___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction864_parser___ReduceAction___init(val_t p0);
-void parser___ReduceAction865___action(val_t p0, val_t p1);
-typedef void (*parser___ReduceAction865___action_t)(val_t p0, val_t p1);
-val_t NEW_ReduceAction865_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction535___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction535___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction535_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction536___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction536___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction536_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction537___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction537___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction537_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction538___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction538___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction538_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction539___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction539___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction539_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction540___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction540___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction540_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction541___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction541___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction541_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction543___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction543___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction543_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction544___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction544___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction544_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction546___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction546___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction546_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction547___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction547___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction547_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction548___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction548___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction548_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction550___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction550___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction550_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction551___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction551___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction551_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction553___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction553___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction553_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction554___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction554___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction554_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction555___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction555___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction555_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction556___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction556___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction556_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction557___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction557___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction557_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction564___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction564___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction564_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction565___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction565___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction565_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction566___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction566___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction566_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction567___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction567___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction567_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction568___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction568___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction568_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction569___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction569___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction569_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction570___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction570___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction570_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction571___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction571___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction571_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction572___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction572___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction572_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction573___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction573___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction573_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction574___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction574___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction574_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction575___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction575___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction575_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction576___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction576___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction576_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction577___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction577___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction577_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction578___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction578___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction578_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction579___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction579___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction579_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction580___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction580___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction580_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction581___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction581___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction581_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction582___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction582___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction582_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction583___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction583___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction583_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction584___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction584___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction584_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction585___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction585___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction585_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction586___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction586___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction586_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction587___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction587___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction587_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction589___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction589___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction589_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction590___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction590___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction590_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction591___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction591___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction591_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction592___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction592___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction592_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction593___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction593___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction593_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction594___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction594___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction594_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction595___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction595___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction595_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction596___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction596___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction596_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction597___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction597___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction597_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction598___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction598___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction598_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction600___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction600___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction600_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction601___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction601___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction601_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction602___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction602___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction602_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction603___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction603___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction603_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction604___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction604___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction604_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction605___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction605___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction605_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction606___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction606___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction606_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction607___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction607___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction607_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction608___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction608___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction608_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction609___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction609___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction609_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction610___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction610___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction610_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction612___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction612___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction612_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction613___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction613___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction613_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction614___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction614___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction614_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction615___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction615___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction615_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction616___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction616___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction616_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction617___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction617___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction617_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction618___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction618___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction618_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction619___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction619___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction619_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction620___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction620___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction620_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction621___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction621___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction621_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction622___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction622___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction622_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction624___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction624___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction624_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction625___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction625___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction625_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction626___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction626___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction626_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction627___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction627___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction627_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction628___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction628___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction628_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction629___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction629___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction629_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction630___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction630___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction630_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction631___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction631___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction631_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction633___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction633___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction633_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction636___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction636___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction636_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction637___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction637___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction637_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction638___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction638___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction638_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction639___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction639___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction639_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction640___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction640___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction640_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction641___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction641___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction641_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction642___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction642___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction642_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction643___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction643___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction643_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction644___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction644___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction644_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction645___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction645___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction645_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction646___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction646___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction646_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction647___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction647___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction647_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction648___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction648___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction648_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction649___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction649___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction649_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction650___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction650___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction650_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction651___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction651___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction651_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction653___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction653___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction653_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction654___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction654___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction654_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction656___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction656___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction656_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction657___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction657___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction657_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction658___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction658___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction658_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction659___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction659___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction659_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction931___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction931___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction931_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction932___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction932___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction932_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction933___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction933___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction933_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction936___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction936___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction936_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction957___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction957___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction957_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction958___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction958___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction958_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1250___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1250___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1250_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1251___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1251___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1251_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1252___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1252___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1252_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1253___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1253___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1253_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1254___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1254___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1254_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1255___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1255___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1255_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1256___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1256___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1256_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1257___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1257___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1257_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1258___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1258___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1258_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1259___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1259___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1259_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1262___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1262___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1262_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1263___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1263___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1263_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1264___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1264___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1264_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1265___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1265___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1265_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1266___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1266___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1266_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1267___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1267___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1267_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1268___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1268___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1268_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1269___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1269___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1269_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1271___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1271___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1271_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1272___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1272___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1272_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1273___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1273___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1273_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1275___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1275___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1275_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1277___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1277___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1277_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1281___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1281___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1281_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1285___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1285___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1285_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1286___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1286___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1286_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1287___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1287___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1287_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1288___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1288___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1288_parser___ReduceAction___init(val_t p0);
+void parser___ReduceAction1289___action(val_t p0, val_t p1);
+typedef void (*parser___ReduceAction1289___action_t)(val_t p0, val_t p1);
+val_t NEW_ReduceAction1289_parser___ReduceAction___init(val_t p0);
 #endif
index 975c2cd..a9546b2 100644 (file)
@@ -51,19 +51,39 @@ val_t parser___lexer___Token___text(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[2];
 }
+static const char LOCATE_parser___lexer___Token___text__eq[] = "lexer::Token::(parser_nodes::Token::text=)";
+void parser___lexer___Token___text__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___lexer;
+  fra.me.line = 20;
+  fra.me.meth = LOCATE_parser___lexer___Token___text__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/lexer.nit:22 */
+  ATTR_parser___lexer___Token____text(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+  return;
+}
 static const char LOCATE_parser___lexer___Token___parser_index[] = "lexer::Token::parser_index";
 val_t parser___lexer___Token___parser_index(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 20;
+  fra.me.line = 25;
   fra.me.meth = LOCATE_parser___lexer___Token___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  /* parser/lexer.nit:20 */
-  nit_abort("Deferred method called", NULL, LOCATE_parser___lexer, 20);
+  /* parser/lexer.nit:25 */
+  nit_abort("Deferred method called", NULL, LOCATE_parser___lexer, 25);
   stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
@@ -74,14 +94,14 @@ val_t parser___lexer___TEol___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 24;
+  fra.me.line = 29;
   fra.me.meth = LOCATE_parser___lexer___TEol___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:26 */
+  /* parser/lexer.nit:31 */
   REGB0 = TAG_Int(0);
   goto label1;
   label1: while(0);
@@ -96,7 +116,7 @@ void parser___lexer___TEol___init_tk(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos0]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 29;
+  fra.me.line = 34;
   fra.me.meth = LOCATE_parser___lexer___TEol___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -105,7 +125,7 @@ void parser___lexer___TEol___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:31 */
+  /* parser/lexer.nit:36 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos0] = 1;
@@ -118,14 +138,14 @@ val_t parser___lexer___TComment___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 36;
+  fra.me.line = 41;
   fra.me.meth = LOCATE_parser___lexer___TComment___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:38 */
+  /* parser/lexer.nit:43 */
   REGB0 = TAG_Int(1);
   goto label1;
   label1: while(0);
@@ -140,7 +160,7 @@ void parser___lexer___TComment___init_tk(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos1]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 41;
+  fra.me.line = 46;
   fra.me.meth = LOCATE_parser___lexer___TComment___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -149,7 +169,7 @@ void parser___lexer___TComment___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:43 */
+  /* parser/lexer.nit:48 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos1] = 1;
@@ -162,14 +182,14 @@ val_t parser___lexer___TKwmodule___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 48;
+  fra.me.line = 53;
   fra.me.meth = LOCATE_parser___lexer___TKwmodule___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:50 */
+  /* parser/lexer.nit:55 */
   REGB0 = TAG_Int(2);
   goto label1;
   label1: while(0);
@@ -184,7 +204,7 @@ void parser___lexer___TKwmodule___init_tk(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos2]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 53;
+  fra.me.line = 58;
   fra.me.meth = LOCATE_parser___lexer___TKwmodule___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -193,7 +213,7 @@ void parser___lexer___TKwmodule___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:55 */
+  /* parser/lexer.nit:60 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos2] = 1;
@@ -206,14 +226,14 @@ val_t parser___lexer___TKwimport___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 60;
+  fra.me.line = 65;
   fra.me.meth = LOCATE_parser___lexer___TKwimport___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:62 */
+  /* parser/lexer.nit:67 */
   REGB0 = TAG_Int(3);
   goto label1;
   label1: while(0);
@@ -228,7 +248,7 @@ void parser___lexer___TKwimport___init_tk(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos3]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 65;
+  fra.me.line = 70;
   fra.me.meth = LOCATE_parser___lexer___TKwimport___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -237,7 +257,7 @@ void parser___lexer___TKwimport___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:67 */
+  /* parser/lexer.nit:72 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos3] = 1;
@@ -250,14 +270,14 @@ val_t parser___lexer___TKwclass___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 72;
+  fra.me.line = 77;
   fra.me.meth = LOCATE_parser___lexer___TKwclass___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:74 */
+  /* parser/lexer.nit:79 */
   REGB0 = TAG_Int(4);
   goto label1;
   label1: while(0);
@@ -272,7 +292,7 @@ void parser___lexer___TKwclass___init_tk(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___lexer;
-  fra.me.line = 77;
+  fra.me.line = 82;
   fra.me.meth = LOCATE_parser___lexer___TKwclass___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -281,7 +301,7 @@ void parser___lexer___TKwclass___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:79 */
+  /* parser/lexer.nit:84 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos4] = 1;
@@ -294,14 +314,14 @@ val_t parser___lexer___TKwabstract___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 84;
+  fra.me.line = 89;
   fra.me.meth = LOCATE_parser___lexer___TKwabstract___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:86 */
+  /* parser/lexer.nit:91 */
   REGB0 = TAG_Int(5);
   goto label1;
   label1: while(0);
@@ -316,7 +336,7 @@ void parser___lexer___TKwabstract___init_tk(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___lexer;
-  fra.me.line = 89;
+  fra.me.line = 94;
   fra.me.meth = LOCATE_parser___lexer___TKwabstract___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -325,7 +345,7 @@ void parser___lexer___TKwabstract___init_tk(val_t p0, val_t p1, int* init_table)
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:91 */
+  /* parser/lexer.nit:96 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos5] = 1;
@@ -338,14 +358,14 @@ val_t parser___lexer___TKwinterface___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 96;
+  fra.me.line = 101;
   fra.me.meth = LOCATE_parser___lexer___TKwinterface___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:98 */
+  /* parser/lexer.nit:103 */
   REGB0 = TAG_Int(6);
   goto label1;
   label1: while(0);
@@ -360,7 +380,7 @@ void parser___lexer___TKwinterface___init_tk(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___lexer;
-  fra.me.line = 101;
+  fra.me.line = 106;
   fra.me.meth = LOCATE_parser___lexer___TKwinterface___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -369,7 +389,7 @@ void parser___lexer___TKwinterface___init_tk(val_t p0, val_t p1, int* init_table
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:103 */
+  /* parser/lexer.nit:108 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos6] = 1;
@@ -382,14 +402,14 @@ val_t parser___lexer___TKwenum___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 108;
+  fra.me.line = 113;
   fra.me.meth = LOCATE_parser___lexer___TKwenum___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:110 */
+  /* parser/lexer.nit:115 */
   REGB0 = TAG_Int(7);
   goto label1;
   label1: while(0);
@@ -404,7 +424,7 @@ void parser___lexer___TKwenum___init_tk(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___lexer;
-  fra.me.line = 113;
+  fra.me.line = 118;
   fra.me.meth = LOCATE_parser___lexer___TKwenum___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -413,56 +433,12 @@ void parser___lexer___TKwenum___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:115 */
+  /* parser/lexer.nit:120 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos7] = 1;
   return;
 }
-static const char LOCATE_parser___lexer___TKwspecial___parser_index[] = "lexer::TKwspecial::(lexer::Token::parser_index)";
-val_t parser___lexer___TKwspecial___parser_index(val_t p0){
-  struct {struct stack_frame_t me;} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 120;
-  fra.me.meth = LOCATE_parser___lexer___TKwspecial___parser_index;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* parser/lexer.nit:122 */
-  REGB0 = TAG_Int(8);
-  goto label1;
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return REGB0;
-}
-static const char LOCATE_parser___lexer___TKwspecial___init_tk[] = "lexer::TKwspecial::init_tk";
-void parser___lexer___TKwspecial___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos8 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwspecial].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  if (init_table[itpos8]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 125;
-  fra.me.meth = LOCATE_parser___lexer___TKwspecial___init_tk;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/lexer.nit:127 */
-  ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
-  stack_frame_head = fra.me.prev;
-  init_table[itpos8] = 1;
-  return;
-}
 static const char LOCATE_parser___lexer___TKwend___parser_index[] = "lexer::TKwend::(lexer::Token::parser_index)";
 val_t parser___lexer___TKwend___parser_index(val_t p0){
   struct {struct stack_frame_t me;} fra;
@@ -470,15 +446,15 @@ val_t parser___lexer___TKwend___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 132;
+  fra.me.line = 125;
   fra.me.meth = LOCATE_parser___lexer___TKwend___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:134 */
-  REGB0 = TAG_Int(9);
+  /* parser/lexer.nit:127 */
+  REGB0 = TAG_Int(8);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -486,13 +462,13 @@ val_t parser___lexer___TKwend___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwend___init_tk[] = "lexer::TKwend::init_tk";
 void parser___lexer___TKwend___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos9 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwend].i;
+  int itpos8 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwend].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos9]) return;
+  if (init_table[itpos8]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 137;
+  fra.me.line = 130;
   fra.me.meth = LOCATE_parser___lexer___TKwend___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -501,10 +477,10 @@ void parser___lexer___TKwend___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:139 */
+  /* parser/lexer.nit:132 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos9] = 1;
+  init_table[itpos8] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwmeth___parser_index[] = "lexer::TKwmeth::(lexer::Token::parser_index)";
@@ -514,15 +490,15 @@ val_t parser___lexer___TKwmeth___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 144;
+  fra.me.line = 137;
   fra.me.meth = LOCATE_parser___lexer___TKwmeth___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:146 */
-  REGB0 = TAG_Int(10);
+  /* parser/lexer.nit:139 */
+  REGB0 = TAG_Int(9);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -530,13 +506,13 @@ val_t parser___lexer___TKwmeth___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwmeth___init_tk[] = "lexer::TKwmeth::init_tk";
 void parser___lexer___TKwmeth___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos10 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwmeth].i;
+  int itpos9 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwmeth].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos10]) return;
+  if (init_table[itpos9]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 149;
+  fra.me.line = 142;
   fra.me.meth = LOCATE_parser___lexer___TKwmeth___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -545,10 +521,10 @@ void parser___lexer___TKwmeth___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:151 */
+  /* parser/lexer.nit:144 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos10] = 1;
+  init_table[itpos9] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwtype___parser_index[] = "lexer::TKwtype::(lexer::Token::parser_index)";
@@ -558,15 +534,15 @@ val_t parser___lexer___TKwtype___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 156;
+  fra.me.line = 149;
   fra.me.meth = LOCATE_parser___lexer___TKwtype___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:158 */
-  REGB0 = TAG_Int(11);
+  /* parser/lexer.nit:151 */
+  REGB0 = TAG_Int(10);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -574,13 +550,13 @@ val_t parser___lexer___TKwtype___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwtype___init_tk[] = "lexer::TKwtype::init_tk";
 void parser___lexer___TKwtype___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos11 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwtype].i;
+  int itpos10 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwtype].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos11]) return;
+  if (init_table[itpos10]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 161;
+  fra.me.line = 154;
   fra.me.meth = LOCATE_parser___lexer___TKwtype___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -589,10 +565,10 @@ void parser___lexer___TKwtype___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:163 */
+  /* parser/lexer.nit:156 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos11] = 1;
+  init_table[itpos10] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwinit___parser_index[] = "lexer::TKwinit::(lexer::Token::parser_index)";
@@ -602,15 +578,15 @@ val_t parser___lexer___TKwinit___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 168;
+  fra.me.line = 161;
   fra.me.meth = LOCATE_parser___lexer___TKwinit___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:170 */
-  REGB0 = TAG_Int(12);
+  /* parser/lexer.nit:163 */
+  REGB0 = TAG_Int(11);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -618,13 +594,13 @@ val_t parser___lexer___TKwinit___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwinit___init_tk[] = "lexer::TKwinit::init_tk";
 void parser___lexer___TKwinit___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos12 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwinit].i;
+  int itpos11 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwinit].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos12]) return;
+  if (init_table[itpos11]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 173;
+  fra.me.line = 166;
   fra.me.meth = LOCATE_parser___lexer___TKwinit___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -633,10 +609,10 @@ void parser___lexer___TKwinit___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:175 */
+  /* parser/lexer.nit:168 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos12] = 1;
+  init_table[itpos11] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwredef___parser_index[] = "lexer::TKwredef::(lexer::Token::parser_index)";
@@ -646,15 +622,15 @@ val_t parser___lexer___TKwredef___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 180;
+  fra.me.line = 173;
   fra.me.meth = LOCATE_parser___lexer___TKwredef___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:182 */
-  REGB0 = TAG_Int(13);
+  /* parser/lexer.nit:175 */
+  REGB0 = TAG_Int(12);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -662,13 +638,13 @@ val_t parser___lexer___TKwredef___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwredef___init_tk[] = "lexer::TKwredef::init_tk";
 void parser___lexer___TKwredef___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos13 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwredef].i;
+  int itpos12 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwredef].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos13]) return;
+  if (init_table[itpos12]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 185;
+  fra.me.line = 178;
   fra.me.meth = LOCATE_parser___lexer___TKwredef___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -677,10 +653,10 @@ void parser___lexer___TKwredef___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:187 */
+  /* parser/lexer.nit:180 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos13] = 1;
+  init_table[itpos12] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwis___parser_index[] = "lexer::TKwis::(lexer::Token::parser_index)";
@@ -690,15 +666,15 @@ val_t parser___lexer___TKwis___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 192;
+  fra.me.line = 185;
   fra.me.meth = LOCATE_parser___lexer___TKwis___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:194 */
-  REGB0 = TAG_Int(14);
+  /* parser/lexer.nit:187 */
+  REGB0 = TAG_Int(13);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -706,13 +682,13 @@ val_t parser___lexer___TKwis___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwis___init_tk[] = "lexer::TKwis::init_tk";
 void parser___lexer___TKwis___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos14 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwis].i;
+  int itpos13 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwis].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos14]) return;
+  if (init_table[itpos13]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 197;
+  fra.me.line = 190;
   fra.me.meth = LOCATE_parser___lexer___TKwis___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -721,10 +697,10 @@ void parser___lexer___TKwis___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:199 */
+  /* parser/lexer.nit:192 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos14] = 1;
+  init_table[itpos13] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwdo___parser_index[] = "lexer::TKwdo::(lexer::Token::parser_index)";
@@ -734,15 +710,15 @@ val_t parser___lexer___TKwdo___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 204;
+  fra.me.line = 197;
   fra.me.meth = LOCATE_parser___lexer___TKwdo___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:206 */
-  REGB0 = TAG_Int(15);
+  /* parser/lexer.nit:199 */
+  REGB0 = TAG_Int(14);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -750,13 +726,13 @@ val_t parser___lexer___TKwdo___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwdo___init_tk[] = "lexer::TKwdo::init_tk";
 void parser___lexer___TKwdo___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos15 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwdo].i;
+  int itpos14 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwdo].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos15]) return;
+  if (init_table[itpos14]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 209;
+  fra.me.line = 202;
   fra.me.meth = LOCATE_parser___lexer___TKwdo___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -765,10 +741,10 @@ void parser___lexer___TKwdo___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:211 */
+  /* parser/lexer.nit:204 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos15] = 1;
+  init_table[itpos14] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwreadable___parser_index[] = "lexer::TKwreadable::(lexer::Token::parser_index)";
@@ -778,15 +754,15 @@ val_t parser___lexer___TKwreadable___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 216;
+  fra.me.line = 209;
   fra.me.meth = LOCATE_parser___lexer___TKwreadable___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:218 */
-  REGB0 = TAG_Int(16);
+  /* parser/lexer.nit:211 */
+  REGB0 = TAG_Int(15);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -794,13 +770,13 @@ val_t parser___lexer___TKwreadable___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwreadable___init_tk[] = "lexer::TKwreadable::init_tk";
 void parser___lexer___TKwreadable___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos16 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwreadable].i;
+  int itpos15 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwreadable].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos16]) return;
+  if (init_table[itpos15]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 221;
+  fra.me.line = 214;
   fra.me.meth = LOCATE_parser___lexer___TKwreadable___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -809,10 +785,10 @@ void parser___lexer___TKwreadable___init_tk(val_t p0, val_t p1, int* init_table)
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:223 */
+  /* parser/lexer.nit:216 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos16] = 1;
+  init_table[itpos15] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwwritable___parser_index[] = "lexer::TKwwritable::(lexer::Token::parser_index)";
@@ -822,15 +798,15 @@ val_t parser___lexer___TKwwritable___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 228;
+  fra.me.line = 221;
   fra.me.meth = LOCATE_parser___lexer___TKwwritable___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:230 */
-  REGB0 = TAG_Int(17);
+  /* parser/lexer.nit:223 */
+  REGB0 = TAG_Int(16);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -838,13 +814,13 @@ val_t parser___lexer___TKwwritable___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwwritable___init_tk[] = "lexer::TKwwritable::init_tk";
 void parser___lexer___TKwwritable___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos17 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwwritable].i;
+  int itpos16 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwwritable].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos17]) return;
+  if (init_table[itpos16]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 233;
+  fra.me.line = 226;
   fra.me.meth = LOCATE_parser___lexer___TKwwritable___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -853,10 +829,10 @@ void parser___lexer___TKwwritable___init_tk(val_t p0, val_t p1, int* init_table)
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:235 */
+  /* parser/lexer.nit:228 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos17] = 1;
+  init_table[itpos16] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwvar___parser_index[] = "lexer::TKwvar::(lexer::Token::parser_index)";
@@ -866,15 +842,15 @@ val_t parser___lexer___TKwvar___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 240;
+  fra.me.line = 233;
   fra.me.meth = LOCATE_parser___lexer___TKwvar___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:242 */
-  REGB0 = TAG_Int(18);
+  /* parser/lexer.nit:235 */
+  REGB0 = TAG_Int(17);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -882,13 +858,13 @@ val_t parser___lexer___TKwvar___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwvar___init_tk[] = "lexer::TKwvar::init_tk";
 void parser___lexer___TKwvar___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos18 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwvar].i;
+  int itpos17 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwvar].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos18]) return;
+  if (init_table[itpos17]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 245;
+  fra.me.line = 238;
   fra.me.meth = LOCATE_parser___lexer___TKwvar___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -897,10 +873,10 @@ void parser___lexer___TKwvar___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:247 */
+  /* parser/lexer.nit:240 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos18] = 1;
+  init_table[itpos17] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwintern___parser_index[] = "lexer::TKwintern::(lexer::Token::parser_index)";
@@ -910,15 +886,15 @@ val_t parser___lexer___TKwintern___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 252;
+  fra.me.line = 245;
   fra.me.meth = LOCATE_parser___lexer___TKwintern___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:254 */
-  REGB0 = TAG_Int(19);
+  /* parser/lexer.nit:247 */
+  REGB0 = TAG_Int(18);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -926,13 +902,13 @@ val_t parser___lexer___TKwintern___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwintern___init_tk[] = "lexer::TKwintern::init_tk";
 void parser___lexer___TKwintern___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos19 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwintern].i;
+  int itpos18 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwintern].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos19]) return;
+  if (init_table[itpos18]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 257;
+  fra.me.line = 250;
   fra.me.meth = LOCATE_parser___lexer___TKwintern___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -941,10 +917,10 @@ void parser___lexer___TKwintern___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:259 */
+  /* parser/lexer.nit:252 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos19] = 1;
+  init_table[itpos18] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwextern___parser_index[] = "lexer::TKwextern::(lexer::Token::parser_index)";
@@ -954,15 +930,15 @@ val_t parser___lexer___TKwextern___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 264;
+  fra.me.line = 257;
   fra.me.meth = LOCATE_parser___lexer___TKwextern___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:266 */
-  REGB0 = TAG_Int(20);
+  /* parser/lexer.nit:259 */
+  REGB0 = TAG_Int(19);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -970,13 +946,13 @@ val_t parser___lexer___TKwextern___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwextern___init_tk[] = "lexer::TKwextern::init_tk";
 void parser___lexer___TKwextern___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos20 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwextern].i;
+  int itpos19 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwextern].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos20]) return;
+  if (init_table[itpos19]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 269;
+  fra.me.line = 262;
   fra.me.meth = LOCATE_parser___lexer___TKwextern___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -985,10 +961,10 @@ void parser___lexer___TKwextern___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:271 */
+  /* parser/lexer.nit:264 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos20] = 1;
+  init_table[itpos19] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwprotected___parser_index[] = "lexer::TKwprotected::(lexer::Token::parser_index)";
@@ -998,15 +974,15 @@ val_t parser___lexer___TKwprotected___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 276;
+  fra.me.line = 269;
   fra.me.meth = LOCATE_parser___lexer___TKwprotected___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:278 */
-  REGB0 = TAG_Int(21);
+  /* parser/lexer.nit:271 */
+  REGB0 = TAG_Int(20);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1014,13 +990,13 @@ val_t parser___lexer___TKwprotected___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwprotected___init_tk[] = "lexer::TKwprotected::init_tk";
 void parser___lexer___TKwprotected___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos21 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwprotected].i;
+  int itpos20 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwprotected].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos21]) return;
+  if (init_table[itpos20]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 281;
+  fra.me.line = 274;
   fra.me.meth = LOCATE_parser___lexer___TKwprotected___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1029,10 +1005,10 @@ void parser___lexer___TKwprotected___init_tk(val_t p0, val_t p1, int* init_table
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:283 */
+  /* parser/lexer.nit:276 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos21] = 1;
+  init_table[itpos20] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwprivate___parser_index[] = "lexer::TKwprivate::(lexer::Token::parser_index)";
@@ -1042,15 +1018,15 @@ val_t parser___lexer___TKwprivate___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 288;
+  fra.me.line = 281;
   fra.me.meth = LOCATE_parser___lexer___TKwprivate___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:290 */
-  REGB0 = TAG_Int(22);
+  /* parser/lexer.nit:283 */
+  REGB0 = TAG_Int(21);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1058,13 +1034,13 @@ val_t parser___lexer___TKwprivate___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwprivate___init_tk[] = "lexer::TKwprivate::init_tk";
 void parser___lexer___TKwprivate___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos22 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwprivate].i;
+  int itpos21 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwprivate].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos22]) return;
+  if (init_table[itpos21]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 293;
+  fra.me.line = 286;
   fra.me.meth = LOCATE_parser___lexer___TKwprivate___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1073,10 +1049,10 @@ void parser___lexer___TKwprivate___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:295 */
+  /* parser/lexer.nit:288 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos22] = 1;
+  init_table[itpos21] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwintrude___parser_index[] = "lexer::TKwintrude::(lexer::Token::parser_index)";
@@ -1086,15 +1062,15 @@ val_t parser___lexer___TKwintrude___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 300;
+  fra.me.line = 293;
   fra.me.meth = LOCATE_parser___lexer___TKwintrude___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:302 */
-  REGB0 = TAG_Int(23);
+  /* parser/lexer.nit:295 */
+  REGB0 = TAG_Int(22);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1102,13 +1078,13 @@ val_t parser___lexer___TKwintrude___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwintrude___init_tk[] = "lexer::TKwintrude::init_tk";
 void parser___lexer___TKwintrude___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos23 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwintrude].i;
+  int itpos22 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwintrude].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos23]) return;
+  if (init_table[itpos22]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 305;
+  fra.me.line = 298;
   fra.me.meth = LOCATE_parser___lexer___TKwintrude___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1117,10 +1093,10 @@ void parser___lexer___TKwintrude___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:307 */
+  /* parser/lexer.nit:300 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos23] = 1;
+  init_table[itpos22] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwif___parser_index[] = "lexer::TKwif::(lexer::Token::parser_index)";
@@ -1130,15 +1106,15 @@ val_t parser___lexer___TKwif___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 312;
+  fra.me.line = 305;
   fra.me.meth = LOCATE_parser___lexer___TKwif___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:314 */
-  REGB0 = TAG_Int(24);
+  /* parser/lexer.nit:307 */
+  REGB0 = TAG_Int(23);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1146,13 +1122,13 @@ val_t parser___lexer___TKwif___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwif___init_tk[] = "lexer::TKwif::init_tk";
 void parser___lexer___TKwif___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos24 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwif].i;
+  int itpos23 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwif].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos24]) return;
+  if (init_table[itpos23]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 317;
+  fra.me.line = 310;
   fra.me.meth = LOCATE_parser___lexer___TKwif___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1161,10 +1137,10 @@ void parser___lexer___TKwif___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:319 */
+  /* parser/lexer.nit:312 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos24] = 1;
+  init_table[itpos23] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwthen___parser_index[] = "lexer::TKwthen::(lexer::Token::parser_index)";
@@ -1174,15 +1150,15 @@ val_t parser___lexer___TKwthen___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 324;
+  fra.me.line = 317;
   fra.me.meth = LOCATE_parser___lexer___TKwthen___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:326 */
-  REGB0 = TAG_Int(25);
+  /* parser/lexer.nit:319 */
+  REGB0 = TAG_Int(24);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1190,13 +1166,13 @@ val_t parser___lexer___TKwthen___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwthen___init_tk[] = "lexer::TKwthen::init_tk";
 void parser___lexer___TKwthen___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos25 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwthen].i;
+  int itpos24 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwthen].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos25]) return;
+  if (init_table[itpos24]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 329;
+  fra.me.line = 322;
   fra.me.meth = LOCATE_parser___lexer___TKwthen___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1205,10 +1181,10 @@ void parser___lexer___TKwthen___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:331 */
+  /* parser/lexer.nit:324 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos25] = 1;
+  init_table[itpos24] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwelse___parser_index[] = "lexer::TKwelse::(lexer::Token::parser_index)";
@@ -1218,15 +1194,15 @@ val_t parser___lexer___TKwelse___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 336;
+  fra.me.line = 329;
   fra.me.meth = LOCATE_parser___lexer___TKwelse___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:338 */
-  REGB0 = TAG_Int(26);
+  /* parser/lexer.nit:331 */
+  REGB0 = TAG_Int(25);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1234,13 +1210,13 @@ val_t parser___lexer___TKwelse___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwelse___init_tk[] = "lexer::TKwelse::init_tk";
 void parser___lexer___TKwelse___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos26 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwelse].i;
+  int itpos25 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwelse].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos26]) return;
+  if (init_table[itpos25]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 341;
+  fra.me.line = 334;
   fra.me.meth = LOCATE_parser___lexer___TKwelse___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1249,10 +1225,10 @@ void parser___lexer___TKwelse___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:343 */
+  /* parser/lexer.nit:336 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos26] = 1;
+  init_table[itpos25] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwwhile___parser_index[] = "lexer::TKwwhile::(lexer::Token::parser_index)";
@@ -1262,15 +1238,15 @@ val_t parser___lexer___TKwwhile___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 348;
+  fra.me.line = 341;
   fra.me.meth = LOCATE_parser___lexer___TKwwhile___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:350 */
-  REGB0 = TAG_Int(27);
+  /* parser/lexer.nit:343 */
+  REGB0 = TAG_Int(26);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1278,13 +1254,13 @@ val_t parser___lexer___TKwwhile___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwwhile___init_tk[] = "lexer::TKwwhile::init_tk";
 void parser___lexer___TKwwhile___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos27 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwwhile].i;
+  int itpos26 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwwhile].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos27]) return;
+  if (init_table[itpos26]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 353;
+  fra.me.line = 346;
   fra.me.meth = LOCATE_parser___lexer___TKwwhile___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1293,10 +1269,10 @@ void parser___lexer___TKwwhile___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:355 */
+  /* parser/lexer.nit:348 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos27] = 1;
+  init_table[itpos26] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwloop___parser_index[] = "lexer::TKwloop::(lexer::Token::parser_index)";
@@ -1306,15 +1282,15 @@ val_t parser___lexer___TKwloop___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 360;
+  fra.me.line = 353;
   fra.me.meth = LOCATE_parser___lexer___TKwloop___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:362 */
-  REGB0 = TAG_Int(28);
+  /* parser/lexer.nit:355 */
+  REGB0 = TAG_Int(27);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1322,13 +1298,13 @@ val_t parser___lexer___TKwloop___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwloop___init_tk[] = "lexer::TKwloop::init_tk";
 void parser___lexer___TKwloop___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos28 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwloop].i;
+  int itpos27 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwloop].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos28]) return;
+  if (init_table[itpos27]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 365;
+  fra.me.line = 358;
   fra.me.meth = LOCATE_parser___lexer___TKwloop___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1337,10 +1313,10 @@ void parser___lexer___TKwloop___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:367 */
+  /* parser/lexer.nit:360 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos28] = 1;
+  init_table[itpos27] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwfor___parser_index[] = "lexer::TKwfor::(lexer::Token::parser_index)";
@@ -1350,15 +1326,15 @@ val_t parser___lexer___TKwfor___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 372;
+  fra.me.line = 365;
   fra.me.meth = LOCATE_parser___lexer___TKwfor___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:374 */
-  REGB0 = TAG_Int(29);
+  /* parser/lexer.nit:367 */
+  REGB0 = TAG_Int(28);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1366,13 +1342,13 @@ val_t parser___lexer___TKwfor___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwfor___init_tk[] = "lexer::TKwfor::init_tk";
 void parser___lexer___TKwfor___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos29 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwfor].i;
+  int itpos28 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwfor].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos29]) return;
+  if (init_table[itpos28]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 377;
+  fra.me.line = 370;
   fra.me.meth = LOCATE_parser___lexer___TKwfor___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1381,10 +1357,10 @@ void parser___lexer___TKwfor___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:379 */
+  /* parser/lexer.nit:372 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos29] = 1;
+  init_table[itpos28] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwin___parser_index[] = "lexer::TKwin::(lexer::Token::parser_index)";
@@ -1394,15 +1370,15 @@ val_t parser___lexer___TKwin___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 384;
+  fra.me.line = 377;
   fra.me.meth = LOCATE_parser___lexer___TKwin___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:386 */
-  REGB0 = TAG_Int(30);
+  /* parser/lexer.nit:379 */
+  REGB0 = TAG_Int(29);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1410,13 +1386,13 @@ val_t parser___lexer___TKwin___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwin___init_tk[] = "lexer::TKwin::init_tk";
 void parser___lexer___TKwin___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos30 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwin].i;
+  int itpos29 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwin].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos30]) return;
+  if (init_table[itpos29]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 389;
+  fra.me.line = 382;
   fra.me.meth = LOCATE_parser___lexer___TKwin___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1425,10 +1401,10 @@ void parser___lexer___TKwin___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:391 */
+  /* parser/lexer.nit:384 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos30] = 1;
+  init_table[itpos29] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwand___parser_index[] = "lexer::TKwand::(lexer::Token::parser_index)";
@@ -1438,15 +1414,15 @@ val_t parser___lexer___TKwand___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 396;
+  fra.me.line = 389;
   fra.me.meth = LOCATE_parser___lexer___TKwand___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:398 */
-  REGB0 = TAG_Int(31);
+  /* parser/lexer.nit:391 */
+  REGB0 = TAG_Int(30);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1454,13 +1430,13 @@ val_t parser___lexer___TKwand___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwand___init_tk[] = "lexer::TKwand::init_tk";
 void parser___lexer___TKwand___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos31 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwand].i;
+  int itpos30 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwand].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos31]) return;
+  if (init_table[itpos30]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 401;
+  fra.me.line = 394;
   fra.me.meth = LOCATE_parser___lexer___TKwand___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1469,10 +1445,10 @@ void parser___lexer___TKwand___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:403 */
+  /* parser/lexer.nit:396 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos31] = 1;
+  init_table[itpos30] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwor___parser_index[] = "lexer::TKwor::(lexer::Token::parser_index)";
@@ -1482,15 +1458,15 @@ val_t parser___lexer___TKwor___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 408;
+  fra.me.line = 401;
   fra.me.meth = LOCATE_parser___lexer___TKwor___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:410 */
-  REGB0 = TAG_Int(32);
+  /* parser/lexer.nit:403 */
+  REGB0 = TAG_Int(31);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1498,13 +1474,13 @@ val_t parser___lexer___TKwor___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwor___init_tk[] = "lexer::TKwor::init_tk";
 void parser___lexer___TKwor___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos32 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwor].i;
+  int itpos31 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwor].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos32]) return;
+  if (init_table[itpos31]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 413;
+  fra.me.line = 406;
   fra.me.meth = LOCATE_parser___lexer___TKwor___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1513,10 +1489,10 @@ void parser___lexer___TKwor___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:415 */
+  /* parser/lexer.nit:408 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos32] = 1;
+  init_table[itpos31] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwnot___parser_index[] = "lexer::TKwnot::(lexer::Token::parser_index)";
@@ -1526,15 +1502,15 @@ val_t parser___lexer___TKwnot___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 420;
+  fra.me.line = 413;
   fra.me.meth = LOCATE_parser___lexer___TKwnot___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:422 */
-  REGB0 = TAG_Int(33);
+  /* parser/lexer.nit:415 */
+  REGB0 = TAG_Int(32);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1542,13 +1518,13 @@ val_t parser___lexer___TKwnot___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwnot___init_tk[] = "lexer::TKwnot::init_tk";
 void parser___lexer___TKwnot___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos33 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwnot].i;
+  int itpos32 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwnot].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos33]) return;
+  if (init_table[itpos32]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 425;
+  fra.me.line = 418;
   fra.me.meth = LOCATE_parser___lexer___TKwnot___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1557,10 +1533,10 @@ void parser___lexer___TKwnot___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:427 */
+  /* parser/lexer.nit:420 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos33] = 1;
+  init_table[itpos32] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwreturn___parser_index[] = "lexer::TKwreturn::(lexer::Token::parser_index)";
@@ -1570,15 +1546,15 @@ val_t parser___lexer___TKwreturn___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 432;
+  fra.me.line = 425;
   fra.me.meth = LOCATE_parser___lexer___TKwreturn___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:434 */
-  REGB0 = TAG_Int(34);
+  /* parser/lexer.nit:427 */
+  REGB0 = TAG_Int(33);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1586,13 +1562,13 @@ val_t parser___lexer___TKwreturn___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwreturn___init_tk[] = "lexer::TKwreturn::init_tk";
 void parser___lexer___TKwreturn___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos34 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwreturn].i;
+  int itpos33 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwreturn].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos34]) return;
+  if (init_table[itpos33]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 437;
+  fra.me.line = 430;
   fra.me.meth = LOCATE_parser___lexer___TKwreturn___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1601,10 +1577,10 @@ void parser___lexer___TKwreturn___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:439 */
+  /* parser/lexer.nit:432 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos34] = 1;
+  init_table[itpos33] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwcontinue___parser_index[] = "lexer::TKwcontinue::(lexer::Token::parser_index)";
@@ -1614,15 +1590,15 @@ val_t parser___lexer___TKwcontinue___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 444;
+  fra.me.line = 437;
   fra.me.meth = LOCATE_parser___lexer___TKwcontinue___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:446 */
-  REGB0 = TAG_Int(35);
+  /* parser/lexer.nit:439 */
+  REGB0 = TAG_Int(34);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1630,13 +1606,13 @@ val_t parser___lexer___TKwcontinue___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwcontinue___init_tk[] = "lexer::TKwcontinue::init_tk";
 void parser___lexer___TKwcontinue___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos35 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwcontinue].i;
+  int itpos34 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwcontinue].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos35]) return;
+  if (init_table[itpos34]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 449;
+  fra.me.line = 442;
   fra.me.meth = LOCATE_parser___lexer___TKwcontinue___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1645,10 +1621,10 @@ void parser___lexer___TKwcontinue___init_tk(val_t p0, val_t p1, int* init_table)
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:451 */
+  /* parser/lexer.nit:444 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos35] = 1;
+  init_table[itpos34] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwbreak___parser_index[] = "lexer::TKwbreak::(lexer::Token::parser_index)";
@@ -1658,15 +1634,15 @@ val_t parser___lexer___TKwbreak___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 456;
+  fra.me.line = 449;
   fra.me.meth = LOCATE_parser___lexer___TKwbreak___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:458 */
-  REGB0 = TAG_Int(36);
+  /* parser/lexer.nit:451 */
+  REGB0 = TAG_Int(35);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1674,13 +1650,13 @@ val_t parser___lexer___TKwbreak___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwbreak___init_tk[] = "lexer::TKwbreak::init_tk";
 void parser___lexer___TKwbreak___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos36 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwbreak].i;
+  int itpos35 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwbreak].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos36]) return;
+  if (init_table[itpos35]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 461;
+  fra.me.line = 454;
   fra.me.meth = LOCATE_parser___lexer___TKwbreak___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1689,10 +1665,10 @@ void parser___lexer___TKwbreak___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:463 */
+  /* parser/lexer.nit:456 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos36] = 1;
+  init_table[itpos35] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwabort___parser_index[] = "lexer::TKwabort::(lexer::Token::parser_index)";
@@ -1702,15 +1678,15 @@ val_t parser___lexer___TKwabort___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 468;
+  fra.me.line = 461;
   fra.me.meth = LOCATE_parser___lexer___TKwabort___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:470 */
-  REGB0 = TAG_Int(37);
+  /* parser/lexer.nit:463 */
+  REGB0 = TAG_Int(36);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1718,13 +1694,13 @@ val_t parser___lexer___TKwabort___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwabort___init_tk[] = "lexer::TKwabort::init_tk";
 void parser___lexer___TKwabort___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos37 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwabort].i;
+  int itpos36 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwabort].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos37]) return;
+  if (init_table[itpos36]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 473;
+  fra.me.line = 466;
   fra.me.meth = LOCATE_parser___lexer___TKwabort___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1733,10 +1709,10 @@ void parser___lexer___TKwabort___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:475 */
+  /* parser/lexer.nit:468 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos37] = 1;
+  init_table[itpos36] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwassert___parser_index[] = "lexer::TKwassert::(lexer::Token::parser_index)";
@@ -1746,15 +1722,15 @@ val_t parser___lexer___TKwassert___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 480;
+  fra.me.line = 473;
   fra.me.meth = LOCATE_parser___lexer___TKwassert___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:482 */
-  REGB0 = TAG_Int(38);
+  /* parser/lexer.nit:475 */
+  REGB0 = TAG_Int(37);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1762,13 +1738,13 @@ val_t parser___lexer___TKwassert___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwassert___init_tk[] = "lexer::TKwassert::init_tk";
 void parser___lexer___TKwassert___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos38 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwassert].i;
+  int itpos37 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwassert].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos38]) return;
+  if (init_table[itpos37]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 485;
+  fra.me.line = 478;
   fra.me.meth = LOCATE_parser___lexer___TKwassert___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1777,10 +1753,10 @@ void parser___lexer___TKwassert___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:487 */
+  /* parser/lexer.nit:480 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos38] = 1;
+  init_table[itpos37] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwnew___parser_index[] = "lexer::TKwnew::(lexer::Token::parser_index)";
@@ -1790,15 +1766,15 @@ val_t parser___lexer___TKwnew___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 492;
+  fra.me.line = 485;
   fra.me.meth = LOCATE_parser___lexer___TKwnew___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:494 */
-  REGB0 = TAG_Int(39);
+  /* parser/lexer.nit:487 */
+  REGB0 = TAG_Int(38);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1806,13 +1782,13 @@ val_t parser___lexer___TKwnew___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwnew___init_tk[] = "lexer::TKwnew::init_tk";
 void parser___lexer___TKwnew___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos39 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwnew].i;
+  int itpos38 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwnew].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos39]) return;
+  if (init_table[itpos38]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 497;
+  fra.me.line = 490;
   fra.me.meth = LOCATE_parser___lexer___TKwnew___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1821,10 +1797,10 @@ void parser___lexer___TKwnew___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:499 */
+  /* parser/lexer.nit:492 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos39] = 1;
+  init_table[itpos38] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwisa___parser_index[] = "lexer::TKwisa::(lexer::Token::parser_index)";
@@ -1834,15 +1810,15 @@ val_t parser___lexer___TKwisa___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 504;
+  fra.me.line = 497;
   fra.me.meth = LOCATE_parser___lexer___TKwisa___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:506 */
-  REGB0 = TAG_Int(40);
+  /* parser/lexer.nit:499 */
+  REGB0 = TAG_Int(39);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1850,13 +1826,13 @@ val_t parser___lexer___TKwisa___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwisa___init_tk[] = "lexer::TKwisa::init_tk";
 void parser___lexer___TKwisa___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos40 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwisa].i;
+  int itpos39 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwisa].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos40]) return;
+  if (init_table[itpos39]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 509;
+  fra.me.line = 502;
   fra.me.meth = LOCATE_parser___lexer___TKwisa___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1865,10 +1841,10 @@ void parser___lexer___TKwisa___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:511 */
+  /* parser/lexer.nit:504 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos40] = 1;
+  init_table[itpos39] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwonce___parser_index[] = "lexer::TKwonce::(lexer::Token::parser_index)";
@@ -1878,15 +1854,15 @@ val_t parser___lexer___TKwonce___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 516;
+  fra.me.line = 509;
   fra.me.meth = LOCATE_parser___lexer___TKwonce___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:518 */
-  REGB0 = TAG_Int(41);
+  /* parser/lexer.nit:511 */
+  REGB0 = TAG_Int(40);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1894,13 +1870,13 @@ val_t parser___lexer___TKwonce___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwonce___init_tk[] = "lexer::TKwonce::init_tk";
 void parser___lexer___TKwonce___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos41 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwonce].i;
+  int itpos40 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwonce].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos41]) return;
+  if (init_table[itpos40]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 521;
+  fra.me.line = 514;
   fra.me.meth = LOCATE_parser___lexer___TKwonce___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1909,10 +1885,10 @@ void parser___lexer___TKwonce___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:523 */
+  /* parser/lexer.nit:516 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos41] = 1;
+  init_table[itpos40] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwsuper___parser_index[] = "lexer::TKwsuper::(lexer::Token::parser_index)";
@@ -1922,15 +1898,15 @@ val_t parser___lexer___TKwsuper___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 528;
+  fra.me.line = 521;
   fra.me.meth = LOCATE_parser___lexer___TKwsuper___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:530 */
-  REGB0 = TAG_Int(42);
+  /* parser/lexer.nit:523 */
+  REGB0 = TAG_Int(41);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1938,13 +1914,13 @@ val_t parser___lexer___TKwsuper___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwsuper___init_tk[] = "lexer::TKwsuper::init_tk";
 void parser___lexer___TKwsuper___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos42 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwsuper].i;
+  int itpos41 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwsuper].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos42]) return;
+  if (init_table[itpos41]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 533;
+  fra.me.line = 526;
   fra.me.meth = LOCATE_parser___lexer___TKwsuper___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1953,10 +1929,10 @@ void parser___lexer___TKwsuper___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:535 */
+  /* parser/lexer.nit:528 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos42] = 1;
+  init_table[itpos41] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwself___parser_index[] = "lexer::TKwself::(lexer::Token::parser_index)";
@@ -1966,15 +1942,15 @@ val_t parser___lexer___TKwself___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 540;
+  fra.me.line = 533;
   fra.me.meth = LOCATE_parser___lexer___TKwself___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:542 */
-  REGB0 = TAG_Int(43);
+  /* parser/lexer.nit:535 */
+  REGB0 = TAG_Int(42);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1982,13 +1958,13 @@ val_t parser___lexer___TKwself___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwself___init_tk[] = "lexer::TKwself::init_tk";
 void parser___lexer___TKwself___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos43 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwself].i;
+  int itpos42 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwself].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos43]) return;
+  if (init_table[itpos42]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 545;
+  fra.me.line = 538;
   fra.me.meth = LOCATE_parser___lexer___TKwself___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1997,10 +1973,10 @@ void parser___lexer___TKwself___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:547 */
+  /* parser/lexer.nit:540 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos43] = 1;
+  init_table[itpos42] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwtrue___parser_index[] = "lexer::TKwtrue::(lexer::Token::parser_index)";
@@ -2010,15 +1986,15 @@ val_t parser___lexer___TKwtrue___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 552;
+  fra.me.line = 545;
   fra.me.meth = LOCATE_parser___lexer___TKwtrue___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:554 */
-  REGB0 = TAG_Int(44);
+  /* parser/lexer.nit:547 */
+  REGB0 = TAG_Int(43);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2026,13 +2002,13 @@ val_t parser___lexer___TKwtrue___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwtrue___init_tk[] = "lexer::TKwtrue::init_tk";
 void parser___lexer___TKwtrue___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos44 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwtrue].i;
+  int itpos43 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwtrue].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos44]) return;
+  if (init_table[itpos43]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 557;
+  fra.me.line = 550;
   fra.me.meth = LOCATE_parser___lexer___TKwtrue___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2041,10 +2017,10 @@ void parser___lexer___TKwtrue___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:559 */
+  /* parser/lexer.nit:552 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos44] = 1;
+  init_table[itpos43] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwfalse___parser_index[] = "lexer::TKwfalse::(lexer::Token::parser_index)";
@@ -2054,15 +2030,15 @@ val_t parser___lexer___TKwfalse___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 564;
+  fra.me.line = 557;
   fra.me.meth = LOCATE_parser___lexer___TKwfalse___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:566 */
-  REGB0 = TAG_Int(45);
+  /* parser/lexer.nit:559 */
+  REGB0 = TAG_Int(44);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2070,13 +2046,13 @@ val_t parser___lexer___TKwfalse___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwfalse___init_tk[] = "lexer::TKwfalse::init_tk";
 void parser___lexer___TKwfalse___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos45 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwfalse].i;
+  int itpos44 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwfalse].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos45]) return;
+  if (init_table[itpos44]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 569;
+  fra.me.line = 562;
   fra.me.meth = LOCATE_parser___lexer___TKwfalse___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2085,10 +2061,10 @@ void parser___lexer___TKwfalse___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:571 */
+  /* parser/lexer.nit:564 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos45] = 1;
+  init_table[itpos44] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwnull___parser_index[] = "lexer::TKwnull::(lexer::Token::parser_index)";
@@ -2098,15 +2074,15 @@ val_t parser___lexer___TKwnull___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 576;
+  fra.me.line = 569;
   fra.me.meth = LOCATE_parser___lexer___TKwnull___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:578 */
-  REGB0 = TAG_Int(46);
+  /* parser/lexer.nit:571 */
+  REGB0 = TAG_Int(45);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2114,13 +2090,13 @@ val_t parser___lexer___TKwnull___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwnull___init_tk[] = "lexer::TKwnull::init_tk";
 void parser___lexer___TKwnull___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos46 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwnull].i;
+  int itpos45 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwnull].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos46]) return;
+  if (init_table[itpos45]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 581;
+  fra.me.line = 574;
   fra.me.meth = LOCATE_parser___lexer___TKwnull___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2129,10 +2105,10 @@ void parser___lexer___TKwnull___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:583 */
+  /* parser/lexer.nit:576 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos46] = 1;
+  init_table[itpos45] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwas___parser_index[] = "lexer::TKwas::(lexer::Token::parser_index)";
@@ -2142,15 +2118,15 @@ val_t parser___lexer___TKwas___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 588;
+  fra.me.line = 581;
   fra.me.meth = LOCATE_parser___lexer___TKwas___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:590 */
-  REGB0 = TAG_Int(47);
+  /* parser/lexer.nit:583 */
+  REGB0 = TAG_Int(46);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2158,13 +2134,13 @@ val_t parser___lexer___TKwas___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwas___init_tk[] = "lexer::TKwas::init_tk";
 void parser___lexer___TKwas___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos47 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwas].i;
+  int itpos46 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwas].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos47]) return;
+  if (init_table[itpos46]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 593;
+  fra.me.line = 586;
   fra.me.meth = LOCATE_parser___lexer___TKwas___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2173,10 +2149,10 @@ void parser___lexer___TKwas___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:595 */
+  /* parser/lexer.nit:588 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos47] = 1;
+  init_table[itpos46] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwnullable___parser_index[] = "lexer::TKwnullable::(lexer::Token::parser_index)";
@@ -2186,15 +2162,15 @@ val_t parser___lexer___TKwnullable___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 600;
+  fra.me.line = 593;
   fra.me.meth = LOCATE_parser___lexer___TKwnullable___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:602 */
-  REGB0 = TAG_Int(48);
+  /* parser/lexer.nit:595 */
+  REGB0 = TAG_Int(47);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2202,13 +2178,13 @@ val_t parser___lexer___TKwnullable___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwnullable___init_tk[] = "lexer::TKwnullable::init_tk";
 void parser___lexer___TKwnullable___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos48 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwnullable].i;
+  int itpos47 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwnullable].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos48]) return;
+  if (init_table[itpos47]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 605;
+  fra.me.line = 598;
   fra.me.meth = LOCATE_parser___lexer___TKwnullable___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2217,10 +2193,10 @@ void parser___lexer___TKwnullable___init_tk(val_t p0, val_t p1, int* init_table)
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:607 */
+  /* parser/lexer.nit:600 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos48] = 1;
+  init_table[itpos47] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwisset___parser_index[] = "lexer::TKwisset::(lexer::Token::parser_index)";
@@ -2230,15 +2206,15 @@ val_t parser___lexer___TKwisset___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 612;
+  fra.me.line = 605;
   fra.me.meth = LOCATE_parser___lexer___TKwisset___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:614 */
-  REGB0 = TAG_Int(49);
+  /* parser/lexer.nit:607 */
+  REGB0 = TAG_Int(48);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2246,13 +2222,13 @@ val_t parser___lexer___TKwisset___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwisset___init_tk[] = "lexer::TKwisset::init_tk";
 void parser___lexer___TKwisset___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos49 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwisset].i;
+  int itpos48 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwisset].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos49]) return;
+  if (init_table[itpos48]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 617;
+  fra.me.line = 610;
   fra.me.meth = LOCATE_parser___lexer___TKwisset___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2261,10 +2237,10 @@ void parser___lexer___TKwisset___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:619 */
+  /* parser/lexer.nit:612 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos49] = 1;
+  init_table[itpos48] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwlabel___parser_index[] = "lexer::TKwlabel::(lexer::Token::parser_index)";
@@ -2274,15 +2250,15 @@ val_t parser___lexer___TKwlabel___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 624;
+  fra.me.line = 617;
   fra.me.meth = LOCATE_parser___lexer___TKwlabel___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:626 */
-  REGB0 = TAG_Int(50);
+  /* parser/lexer.nit:619 */
+  REGB0 = TAG_Int(49);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2290,13 +2266,13 @@ val_t parser___lexer___TKwlabel___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwlabel___init_tk[] = "lexer::TKwlabel::init_tk";
 void parser___lexer___TKwlabel___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos50 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwlabel].i;
+  int itpos49 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwlabel].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos50]) return;
+  if (init_table[itpos49]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 629;
+  fra.me.line = 622;
   fra.me.meth = LOCATE_parser___lexer___TKwlabel___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2305,10 +2281,10 @@ void parser___lexer___TKwlabel___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:631 */
+  /* parser/lexer.nit:624 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos50] = 1;
+  init_table[itpos49] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TKwdebug___parser_index[] = "lexer::TKwdebug::(lexer::Token::parser_index)";
@@ -2318,15 +2294,15 @@ val_t parser___lexer___TKwdebug___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 636;
+  fra.me.line = 629;
   fra.me.meth = LOCATE_parser___lexer___TKwdebug___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:638 */
-  REGB0 = TAG_Int(51);
+  /* parser/lexer.nit:631 */
+  REGB0 = TAG_Int(50);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2334,13 +2310,13 @@ val_t parser___lexer___TKwdebug___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TKwdebug___init_tk[] = "lexer::TKwdebug::init_tk";
 void parser___lexer___TKwdebug___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos51 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwdebug].i;
+  int itpos50 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TKwdebug].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos51]) return;
+  if (init_table[itpos50]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 641;
+  fra.me.line = 634;
   fra.me.meth = LOCATE_parser___lexer___TKwdebug___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2349,10 +2325,10 @@ void parser___lexer___TKwdebug___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:643 */
+  /* parser/lexer.nit:636 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos51] = 1;
+  init_table[itpos50] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TOpar___parser_index[] = "lexer::TOpar::(lexer::Token::parser_index)";
@@ -2362,15 +2338,15 @@ val_t parser___lexer___TOpar___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 648;
+  fra.me.line = 641;
   fra.me.meth = LOCATE_parser___lexer___TOpar___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:650 */
-  REGB0 = TAG_Int(52);
+  /* parser/lexer.nit:643 */
+  REGB0 = TAG_Int(51);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2378,13 +2354,13 @@ val_t parser___lexer___TOpar___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TOpar___init_tk[] = "lexer::TOpar::init_tk";
 void parser___lexer___TOpar___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos52 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TOpar].i;
+  int itpos51 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TOpar].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos52]) return;
+  if (init_table[itpos51]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 653;
+  fra.me.line = 646;
   fra.me.meth = LOCATE_parser___lexer___TOpar___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2393,10 +2369,10 @@ void parser___lexer___TOpar___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:655 */
+  /* parser/lexer.nit:648 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos52] = 1;
+  init_table[itpos51] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TCpar___parser_index[] = "lexer::TCpar::(lexer::Token::parser_index)";
@@ -2406,15 +2382,15 @@ val_t parser___lexer___TCpar___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 660;
+  fra.me.line = 653;
   fra.me.meth = LOCATE_parser___lexer___TCpar___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:662 */
-  REGB0 = TAG_Int(53);
+  /* parser/lexer.nit:655 */
+  REGB0 = TAG_Int(52);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2422,13 +2398,13 @@ val_t parser___lexer___TCpar___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TCpar___init_tk[] = "lexer::TCpar::init_tk";
 void parser___lexer___TCpar___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos53 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TCpar].i;
+  int itpos52 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TCpar].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos53]) return;
+  if (init_table[itpos52]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 665;
+  fra.me.line = 658;
   fra.me.meth = LOCATE_parser___lexer___TCpar___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2437,10 +2413,10 @@ void parser___lexer___TCpar___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:667 */
+  /* parser/lexer.nit:660 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos53] = 1;
+  init_table[itpos52] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TObra___parser_index[] = "lexer::TObra::(lexer::Token::parser_index)";
@@ -2450,15 +2426,15 @@ val_t parser___lexer___TObra___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 672;
+  fra.me.line = 665;
   fra.me.meth = LOCATE_parser___lexer___TObra___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:674 */
-  REGB0 = TAG_Int(54);
+  /* parser/lexer.nit:667 */
+  REGB0 = TAG_Int(53);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2466,13 +2442,13 @@ val_t parser___lexer___TObra___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TObra___init_tk[] = "lexer::TObra::init_tk";
 void parser___lexer___TObra___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos54 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TObra].i;
+  int itpos53 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TObra].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos54]) return;
+  if (init_table[itpos53]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 677;
+  fra.me.line = 670;
   fra.me.meth = LOCATE_parser___lexer___TObra___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2481,10 +2457,10 @@ void parser___lexer___TObra___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:679 */
+  /* parser/lexer.nit:672 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos54] = 1;
+  init_table[itpos53] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TCbra___parser_index[] = "lexer::TCbra::(lexer::Token::parser_index)";
@@ -2494,15 +2470,15 @@ val_t parser___lexer___TCbra___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 684;
+  fra.me.line = 677;
   fra.me.meth = LOCATE_parser___lexer___TCbra___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:686 */
-  REGB0 = TAG_Int(55);
+  /* parser/lexer.nit:679 */
+  REGB0 = TAG_Int(54);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2510,13 +2486,13 @@ val_t parser___lexer___TCbra___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TCbra___init_tk[] = "lexer::TCbra::init_tk";
 void parser___lexer___TCbra___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos55 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TCbra].i;
+  int itpos54 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TCbra].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos55]) return;
+  if (init_table[itpos54]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 689;
+  fra.me.line = 682;
   fra.me.meth = LOCATE_parser___lexer___TCbra___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2525,10 +2501,10 @@ void parser___lexer___TCbra___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:691 */
+  /* parser/lexer.nit:684 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos55] = 1;
+  init_table[itpos54] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TComma___parser_index[] = "lexer::TComma::(lexer::Token::parser_index)";
@@ -2538,15 +2514,15 @@ val_t parser___lexer___TComma___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 696;
+  fra.me.line = 689;
   fra.me.meth = LOCATE_parser___lexer___TComma___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:698 */
-  REGB0 = TAG_Int(56);
+  /* parser/lexer.nit:691 */
+  REGB0 = TAG_Int(55);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2554,13 +2530,13 @@ val_t parser___lexer___TComma___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TComma___init_tk[] = "lexer::TComma::init_tk";
 void parser___lexer___TComma___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos56 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TComma].i;
+  int itpos55 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TComma].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos56]) return;
+  if (init_table[itpos55]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 701;
+  fra.me.line = 694;
   fra.me.meth = LOCATE_parser___lexer___TComma___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2569,10 +2545,10 @@ void parser___lexer___TComma___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:703 */
+  /* parser/lexer.nit:696 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos56] = 1;
+  init_table[itpos55] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TColumn___parser_index[] = "lexer::TColumn::(lexer::Token::parser_index)";
@@ -2582,15 +2558,15 @@ val_t parser___lexer___TColumn___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 708;
+  fra.me.line = 701;
   fra.me.meth = LOCATE_parser___lexer___TColumn___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:710 */
-  REGB0 = TAG_Int(57);
+  /* parser/lexer.nit:703 */
+  REGB0 = TAG_Int(56);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2598,13 +2574,13 @@ val_t parser___lexer___TColumn___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TColumn___init_tk[] = "lexer::TColumn::init_tk";
 void parser___lexer___TColumn___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos57 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TColumn].i;
+  int itpos56 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TColumn].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos57]) return;
+  if (init_table[itpos56]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 713;
+  fra.me.line = 706;
   fra.me.meth = LOCATE_parser___lexer___TColumn___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2613,10 +2589,10 @@ void parser___lexer___TColumn___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:715 */
+  /* parser/lexer.nit:708 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos57] = 1;
+  init_table[itpos56] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TQuad___parser_index[] = "lexer::TQuad::(lexer::Token::parser_index)";
@@ -2626,15 +2602,15 @@ val_t parser___lexer___TQuad___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 720;
+  fra.me.line = 713;
   fra.me.meth = LOCATE_parser___lexer___TQuad___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:722 */
-  REGB0 = TAG_Int(58);
+  /* parser/lexer.nit:715 */
+  REGB0 = TAG_Int(57);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2642,13 +2618,13 @@ val_t parser___lexer___TQuad___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TQuad___init_tk[] = "lexer::TQuad::init_tk";
 void parser___lexer___TQuad___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos58 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TQuad].i;
+  int itpos57 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TQuad].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos58]) return;
+  if (init_table[itpos57]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 725;
+  fra.me.line = 718;
   fra.me.meth = LOCATE_parser___lexer___TQuad___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2657,10 +2633,10 @@ void parser___lexer___TQuad___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:727 */
+  /* parser/lexer.nit:720 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos58] = 1;
+  init_table[itpos57] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TAssign___parser_index[] = "lexer::TAssign::(lexer::Token::parser_index)";
@@ -2670,15 +2646,15 @@ val_t parser___lexer___TAssign___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 732;
+  fra.me.line = 725;
   fra.me.meth = LOCATE_parser___lexer___TAssign___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:734 */
-  REGB0 = TAG_Int(59);
+  /* parser/lexer.nit:727 */
+  REGB0 = TAG_Int(58);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2686,13 +2662,13 @@ val_t parser___lexer___TAssign___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TAssign___init_tk[] = "lexer::TAssign::init_tk";
 void parser___lexer___TAssign___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos59 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TAssign].i;
+  int itpos58 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TAssign].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos59]) return;
+  if (init_table[itpos58]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 737;
+  fra.me.line = 730;
   fra.me.meth = LOCATE_parser___lexer___TAssign___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2701,10 +2677,10 @@ void parser___lexer___TAssign___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:739 */
+  /* parser/lexer.nit:732 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos59] = 1;
+  init_table[itpos58] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TPluseq___parser_index[] = "lexer::TPluseq::(lexer::Token::parser_index)";
@@ -2714,15 +2690,15 @@ val_t parser___lexer___TPluseq___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 744;
+  fra.me.line = 737;
   fra.me.meth = LOCATE_parser___lexer___TPluseq___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:746 */
-  REGB0 = TAG_Int(60);
+  /* parser/lexer.nit:739 */
+  REGB0 = TAG_Int(59);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2730,13 +2706,13 @@ val_t parser___lexer___TPluseq___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TPluseq___init_tk[] = "lexer::TPluseq::init_tk";
 void parser___lexer___TPluseq___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos60 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TPluseq].i;
+  int itpos59 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TPluseq].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos60]) return;
+  if (init_table[itpos59]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 749;
+  fra.me.line = 742;
   fra.me.meth = LOCATE_parser___lexer___TPluseq___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2745,10 +2721,10 @@ void parser___lexer___TPluseq___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:751 */
+  /* parser/lexer.nit:744 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos60] = 1;
+  init_table[itpos59] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TMinuseq___parser_index[] = "lexer::TMinuseq::(lexer::Token::parser_index)";
@@ -2758,15 +2734,15 @@ val_t parser___lexer___TMinuseq___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 756;
+  fra.me.line = 749;
   fra.me.meth = LOCATE_parser___lexer___TMinuseq___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:758 */
-  REGB0 = TAG_Int(61);
+  /* parser/lexer.nit:751 */
+  REGB0 = TAG_Int(60);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2774,13 +2750,13 @@ val_t parser___lexer___TMinuseq___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TMinuseq___init_tk[] = "lexer::TMinuseq::init_tk";
 void parser___lexer___TMinuseq___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos61 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TMinuseq].i;
+  int itpos60 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TMinuseq].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos61]) return;
+  if (init_table[itpos60]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 761;
+  fra.me.line = 754;
   fra.me.meth = LOCATE_parser___lexer___TMinuseq___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2789,10 +2765,10 @@ void parser___lexer___TMinuseq___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:763 */
+  /* parser/lexer.nit:756 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos61] = 1;
+  init_table[itpos60] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TDotdotdot___parser_index[] = "lexer::TDotdotdot::(lexer::Token::parser_index)";
@@ -2802,15 +2778,15 @@ val_t parser___lexer___TDotdotdot___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 768;
+  fra.me.line = 761;
   fra.me.meth = LOCATE_parser___lexer___TDotdotdot___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:770 */
-  REGB0 = TAG_Int(62);
+  /* parser/lexer.nit:763 */
+  REGB0 = TAG_Int(61);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2818,13 +2794,13 @@ val_t parser___lexer___TDotdotdot___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TDotdotdot___init_tk[] = "lexer::TDotdotdot::init_tk";
 void parser___lexer___TDotdotdot___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos62 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TDotdotdot].i;
+  int itpos61 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TDotdotdot].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos62]) return;
+  if (init_table[itpos61]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 773;
+  fra.me.line = 766;
   fra.me.meth = LOCATE_parser___lexer___TDotdotdot___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2833,10 +2809,10 @@ void parser___lexer___TDotdotdot___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:775 */
+  /* parser/lexer.nit:768 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos62] = 1;
+  init_table[itpos61] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TDotdot___parser_index[] = "lexer::TDotdot::(lexer::Token::parser_index)";
@@ -2846,15 +2822,15 @@ val_t parser___lexer___TDotdot___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 780;
+  fra.me.line = 773;
   fra.me.meth = LOCATE_parser___lexer___TDotdot___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:782 */
-  REGB0 = TAG_Int(63);
+  /* parser/lexer.nit:775 */
+  REGB0 = TAG_Int(62);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2862,13 +2838,13 @@ val_t parser___lexer___TDotdot___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TDotdot___init_tk[] = "lexer::TDotdot::init_tk";
 void parser___lexer___TDotdot___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos63 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TDotdot].i;
+  int itpos62 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TDotdot].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos63]) return;
+  if (init_table[itpos62]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 785;
+  fra.me.line = 778;
   fra.me.meth = LOCATE_parser___lexer___TDotdot___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2877,10 +2853,10 @@ void parser___lexer___TDotdot___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:787 */
+  /* parser/lexer.nit:780 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos63] = 1;
+  init_table[itpos62] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TDot___parser_index[] = "lexer::TDot::(lexer::Token::parser_index)";
@@ -2890,15 +2866,15 @@ val_t parser___lexer___TDot___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 792;
+  fra.me.line = 785;
   fra.me.meth = LOCATE_parser___lexer___TDot___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:794 */
-  REGB0 = TAG_Int(64);
+  /* parser/lexer.nit:787 */
+  REGB0 = TAG_Int(63);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2906,13 +2882,13 @@ val_t parser___lexer___TDot___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TDot___init_tk[] = "lexer::TDot::init_tk";
 void parser___lexer___TDot___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos64 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TDot].i;
+  int itpos63 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TDot].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos64]) return;
+  if (init_table[itpos63]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 797;
+  fra.me.line = 790;
   fra.me.meth = LOCATE_parser___lexer___TDot___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2921,10 +2897,10 @@ void parser___lexer___TDot___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:799 */
+  /* parser/lexer.nit:792 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos64] = 1;
+  init_table[itpos63] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TPlus___parser_index[] = "lexer::TPlus::(lexer::Token::parser_index)";
@@ -2934,15 +2910,15 @@ val_t parser___lexer___TPlus___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 804;
+  fra.me.line = 797;
   fra.me.meth = LOCATE_parser___lexer___TPlus___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:806 */
-  REGB0 = TAG_Int(65);
+  /* parser/lexer.nit:799 */
+  REGB0 = TAG_Int(64);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2950,13 +2926,13 @@ val_t parser___lexer___TPlus___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TPlus___init_tk[] = "lexer::TPlus::init_tk";
 void parser___lexer___TPlus___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos65 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TPlus].i;
+  int itpos64 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TPlus].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos65]) return;
+  if (init_table[itpos64]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 809;
+  fra.me.line = 802;
   fra.me.meth = LOCATE_parser___lexer___TPlus___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2965,10 +2941,10 @@ void parser___lexer___TPlus___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:811 */
+  /* parser/lexer.nit:804 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos65] = 1;
+  init_table[itpos64] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TMinus___parser_index[] = "lexer::TMinus::(lexer::Token::parser_index)";
@@ -2978,15 +2954,15 @@ val_t parser___lexer___TMinus___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 816;
+  fra.me.line = 809;
   fra.me.meth = LOCATE_parser___lexer___TMinus___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:818 */
-  REGB0 = TAG_Int(66);
+  /* parser/lexer.nit:811 */
+  REGB0 = TAG_Int(65);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -2994,13 +2970,13 @@ val_t parser___lexer___TMinus___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TMinus___init_tk[] = "lexer::TMinus::init_tk";
 void parser___lexer___TMinus___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos66 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TMinus].i;
+  int itpos65 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TMinus].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos66]) return;
+  if (init_table[itpos65]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 821;
+  fra.me.line = 814;
   fra.me.meth = LOCATE_parser___lexer___TMinus___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3009,10 +2985,10 @@ void parser___lexer___TMinus___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:823 */
+  /* parser/lexer.nit:816 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos66] = 1;
+  init_table[itpos65] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TStar___parser_index[] = "lexer::TStar::(lexer::Token::parser_index)";
@@ -3022,15 +2998,15 @@ val_t parser___lexer___TStar___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 828;
+  fra.me.line = 821;
   fra.me.meth = LOCATE_parser___lexer___TStar___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:830 */
-  REGB0 = TAG_Int(67);
+  /* parser/lexer.nit:823 */
+  REGB0 = TAG_Int(66);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -3038,13 +3014,13 @@ val_t parser___lexer___TStar___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TStar___init_tk[] = "lexer::TStar::init_tk";
 void parser___lexer___TStar___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos67 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TStar].i;
+  int itpos66 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TStar].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos67]) return;
+  if (init_table[itpos66]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 833;
+  fra.me.line = 826;
   fra.me.meth = LOCATE_parser___lexer___TStar___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3053,10 +3029,10 @@ void parser___lexer___TStar___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:835 */
+  /* parser/lexer.nit:828 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos67] = 1;
+  init_table[itpos66] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TSlash___parser_index[] = "lexer::TSlash::(lexer::Token::parser_index)";
@@ -3066,15 +3042,15 @@ val_t parser___lexer___TSlash___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 840;
+  fra.me.line = 833;
   fra.me.meth = LOCATE_parser___lexer___TSlash___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:842 */
-  REGB0 = TAG_Int(68);
+  /* parser/lexer.nit:835 */
+  REGB0 = TAG_Int(67);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -3082,13 +3058,13 @@ val_t parser___lexer___TSlash___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TSlash___init_tk[] = "lexer::TSlash::init_tk";
 void parser___lexer___TSlash___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos68 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TSlash].i;
+  int itpos67 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TSlash].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos68]) return;
+  if (init_table[itpos67]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 845;
+  fra.me.line = 838;
   fra.me.meth = LOCATE_parser___lexer___TSlash___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3097,10 +3073,10 @@ void parser___lexer___TSlash___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:847 */
+  /* parser/lexer.nit:840 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos68] = 1;
+  init_table[itpos67] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TPercent___parser_index[] = "lexer::TPercent::(lexer::Token::parser_index)";
@@ -3110,15 +3086,15 @@ val_t parser___lexer___TPercent___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 852;
+  fra.me.line = 845;
   fra.me.meth = LOCATE_parser___lexer___TPercent___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:854 */
-  REGB0 = TAG_Int(69);
+  /* parser/lexer.nit:847 */
+  REGB0 = TAG_Int(68);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -3126,13 +3102,13 @@ val_t parser___lexer___TPercent___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TPercent___init_tk[] = "lexer::TPercent::init_tk";
 void parser___lexer___TPercent___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos69 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TPercent].i;
+  int itpos68 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TPercent].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos69]) return;
+  if (init_table[itpos68]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 857;
+  fra.me.line = 850;
   fra.me.meth = LOCATE_parser___lexer___TPercent___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3141,10 +3117,10 @@ void parser___lexer___TPercent___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:859 */
+  /* parser/lexer.nit:852 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos69] = 1;
+  init_table[itpos68] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TEq___parser_index[] = "lexer::TEq::(lexer::Token::parser_index)";
@@ -3154,15 +3130,15 @@ val_t parser___lexer___TEq___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 864;
+  fra.me.line = 857;
   fra.me.meth = LOCATE_parser___lexer___TEq___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:866 */
-  REGB0 = TAG_Int(70);
+  /* parser/lexer.nit:859 */
+  REGB0 = TAG_Int(69);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -3170,13 +3146,13 @@ val_t parser___lexer___TEq___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TEq___init_tk[] = "lexer::TEq::init_tk";
 void parser___lexer___TEq___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos70 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TEq].i;
+  int itpos69 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TEq].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos70]) return;
+  if (init_table[itpos69]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 869;
+  fra.me.line = 862;
   fra.me.meth = LOCATE_parser___lexer___TEq___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3185,10 +3161,10 @@ void parser___lexer___TEq___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:871 */
+  /* parser/lexer.nit:864 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos70] = 1;
+  init_table[itpos69] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TNe___parser_index[] = "lexer::TNe::(lexer::Token::parser_index)";
@@ -3198,15 +3174,15 @@ val_t parser___lexer___TNe___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 876;
+  fra.me.line = 869;
   fra.me.meth = LOCATE_parser___lexer___TNe___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:878 */
-  REGB0 = TAG_Int(71);
+  /* parser/lexer.nit:871 */
+  REGB0 = TAG_Int(70);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -3214,13 +3190,13 @@ val_t parser___lexer___TNe___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TNe___init_tk[] = "lexer::TNe::init_tk";
 void parser___lexer___TNe___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos71 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TNe].i;
+  int itpos70 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TNe].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos71]) return;
+  if (init_table[itpos70]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 881;
+  fra.me.line = 874;
   fra.me.meth = LOCATE_parser___lexer___TNe___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3229,10 +3205,10 @@ void parser___lexer___TNe___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:883 */
+  /* parser/lexer.nit:876 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos71] = 1;
+  init_table[itpos70] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TLt___parser_index[] = "lexer::TLt::(lexer::Token::parser_index)";
@@ -3242,15 +3218,15 @@ val_t parser___lexer___TLt___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 888;
+  fra.me.line = 881;
   fra.me.meth = LOCATE_parser___lexer___TLt___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:890 */
-  REGB0 = TAG_Int(72);
+  /* parser/lexer.nit:883 */
+  REGB0 = TAG_Int(71);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -3258,13 +3234,13 @@ val_t parser___lexer___TLt___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TLt___init_tk[] = "lexer::TLt::init_tk";
 void parser___lexer___TLt___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos72 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TLt].i;
+  int itpos71 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TLt].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos72]) return;
+  if (init_table[itpos71]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 893;
+  fra.me.line = 886;
   fra.me.meth = LOCATE_parser___lexer___TLt___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3273,10 +3249,10 @@ void parser___lexer___TLt___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:895 */
+  /* parser/lexer.nit:888 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos72] = 1;
+  init_table[itpos71] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TLe___parser_index[] = "lexer::TLe::(lexer::Token::parser_index)";
@@ -3286,15 +3262,15 @@ val_t parser___lexer___TLe___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 900;
+  fra.me.line = 893;
   fra.me.meth = LOCATE_parser___lexer___TLe___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:902 */
-  REGB0 = TAG_Int(73);
+  /* parser/lexer.nit:895 */
+  REGB0 = TAG_Int(72);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -3302,13 +3278,13 @@ val_t parser___lexer___TLe___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TLe___init_tk[] = "lexer::TLe::init_tk";
 void parser___lexer___TLe___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos73 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TLe].i;
+  int itpos72 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TLe].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos73]) return;
+  if (init_table[itpos72]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 905;
+  fra.me.line = 898;
   fra.me.meth = LOCATE_parser___lexer___TLe___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3317,10 +3293,10 @@ void parser___lexer___TLe___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:907 */
+  /* parser/lexer.nit:900 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos73] = 1;
+  init_table[itpos72] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TLl___parser_index[] = "lexer::TLl::(lexer::Token::parser_index)";
@@ -3330,15 +3306,15 @@ val_t parser___lexer___TLl___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 912;
+  fra.me.line = 905;
   fra.me.meth = LOCATE_parser___lexer___TLl___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:914 */
-  REGB0 = TAG_Int(74);
+  /* parser/lexer.nit:907 */
+  REGB0 = TAG_Int(73);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -3346,13 +3322,13 @@ val_t parser___lexer___TLl___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TLl___init_tk[] = "lexer::TLl::init_tk";
 void parser___lexer___TLl___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos74 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TLl].i;
+  int itpos73 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TLl].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos74]) return;
+  if (init_table[itpos73]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 917;
+  fra.me.line = 910;
   fra.me.meth = LOCATE_parser___lexer___TLl___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3361,10 +3337,10 @@ void parser___lexer___TLl___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:919 */
+  /* parser/lexer.nit:912 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos74] = 1;
+  init_table[itpos73] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TGt___parser_index[] = "lexer::TGt::(lexer::Token::parser_index)";
@@ -3374,15 +3350,15 @@ val_t parser___lexer___TGt___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 924;
+  fra.me.line = 917;
   fra.me.meth = LOCATE_parser___lexer___TGt___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:926 */
-  REGB0 = TAG_Int(75);
+  /* parser/lexer.nit:919 */
+  REGB0 = TAG_Int(74);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -3390,13 +3366,13 @@ val_t parser___lexer___TGt___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TGt___init_tk[] = "lexer::TGt::init_tk";
 void parser___lexer___TGt___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos75 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TGt].i;
+  int itpos74 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TGt].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos75]) return;
+  if (init_table[itpos74]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 929;
+  fra.me.line = 922;
   fra.me.meth = LOCATE_parser___lexer___TGt___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3405,10 +3381,10 @@ void parser___lexer___TGt___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:931 */
+  /* parser/lexer.nit:924 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos75] = 1;
+  init_table[itpos74] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TGe___parser_index[] = "lexer::TGe::(lexer::Token::parser_index)";
@@ -3418,15 +3394,15 @@ val_t parser___lexer___TGe___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 936;
+  fra.me.line = 929;
   fra.me.meth = LOCATE_parser___lexer___TGe___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:938 */
-  REGB0 = TAG_Int(76);
+  /* parser/lexer.nit:931 */
+  REGB0 = TAG_Int(75);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -3434,13 +3410,13 @@ val_t parser___lexer___TGe___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TGe___init_tk[] = "lexer::TGe::init_tk";
 void parser___lexer___TGe___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos76 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TGe].i;
+  int itpos75 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TGe].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos76]) return;
+  if (init_table[itpos75]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 941;
+  fra.me.line = 934;
   fra.me.meth = LOCATE_parser___lexer___TGe___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3449,10 +3425,10 @@ void parser___lexer___TGe___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:943 */
+  /* parser/lexer.nit:936 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos76] = 1;
+  init_table[itpos75] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TGg___parser_index[] = "lexer::TGg::(lexer::Token::parser_index)";
@@ -3462,15 +3438,15 @@ val_t parser___lexer___TGg___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 948;
+  fra.me.line = 941;
   fra.me.meth = LOCATE_parser___lexer___TGg___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:950 */
-  REGB0 = TAG_Int(77);
+  /* parser/lexer.nit:943 */
+  REGB0 = TAG_Int(76);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -3478,13 +3454,13 @@ val_t parser___lexer___TGg___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TGg___init_tk[] = "lexer::TGg::init_tk";
 void parser___lexer___TGg___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos77 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TGg].i;
+  int itpos76 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TGg].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos77]) return;
+  if (init_table[itpos76]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 953;
+  fra.me.line = 946;
   fra.me.meth = LOCATE_parser___lexer___TGg___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3493,10 +3469,10 @@ void parser___lexer___TGg___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:955 */
+  /* parser/lexer.nit:948 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos77] = 1;
+  init_table[itpos76] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TStarship___parser_index[] = "lexer::TStarship::(lexer::Token::parser_index)";
@@ -3506,15 +3482,15 @@ val_t parser___lexer___TStarship___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 960;
+  fra.me.line = 953;
   fra.me.meth = LOCATE_parser___lexer___TStarship___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:962 */
-  REGB0 = TAG_Int(78);
+  /* parser/lexer.nit:955 */
+  REGB0 = TAG_Int(77);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -3522,13 +3498,13 @@ val_t parser___lexer___TStarship___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TStarship___init_tk[] = "lexer::TStarship::init_tk";
 void parser___lexer___TStarship___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos78 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TStarship].i;
+  int itpos77 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TStarship].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos78]) return;
+  if (init_table[itpos77]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 965;
+  fra.me.line = 958;
   fra.me.meth = LOCATE_parser___lexer___TStarship___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3537,10 +3513,10 @@ void parser___lexer___TStarship___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:967 */
+  /* parser/lexer.nit:960 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos78] = 1;
+  init_table[itpos77] = 1;
   return;
 }
 static const char LOCATE_parser___lexer___TBang___parser_index[] = "lexer::TBang::(lexer::Token::parser_index)";
@@ -3550,15 +3526,15 @@ val_t parser___lexer___TBang___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 972;
+  fra.me.line = 965;
   fra.me.meth = LOCATE_parser___lexer___TBang___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:974 */
-  REGB0 = TAG_Int(79);
+  /* parser/lexer.nit:967 */
+  REGB0 = TAG_Int(78);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -3566,13 +3542,13 @@ val_t parser___lexer___TBang___parser_index(val_t p0){
 }
 static const char LOCATE_parser___lexer___TBang___init_tk[] = "lexer::TBang::init_tk";
 void parser___lexer___TBang___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos79 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TBang].i;
+  int itpos78 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TBang].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos79]) return;
+  if (init_table[itpos78]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 977;
+  fra.me.line = 970;
   fra.me.meth = LOCATE_parser___lexer___TBang___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3581,7 +3557,51 @@ void parser___lexer___TBang___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
+  /* parser/lexer.nit:972 */
+  ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+  init_table[itpos78] = 1;
+  return;
+}
+static const char LOCATE_parser___lexer___TAt___parser_index[] = "lexer::TAt::(lexer::Token::parser_index)";
+val_t parser___lexer___TAt___parser_index(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___lexer;
+  fra.me.line = 977;
+  fra.me.meth = LOCATE_parser___lexer___TAt___parser_index;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
   /* parser/lexer.nit:979 */
+  REGB0 = TAG_Int(79);
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+static const char LOCATE_parser___lexer___TAt___init_tk[] = "lexer::TAt::init_tk";
+void parser___lexer___TAt___init_tk(val_t p0, val_t p1, int* init_table){
+  int itpos79 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TAt].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  if (init_table[itpos79]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___lexer;
+  fra.me.line = 982;
+  fra.me.meth = LOCATE_parser___lexer___TAt___init_tk;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/lexer.nit:984 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos79] = 1;
@@ -3594,14 +3614,14 @@ val_t parser___lexer___TClassid___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 984;
+  fra.me.line = 989;
   fra.me.meth = LOCATE_parser___lexer___TClassid___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:986 */
+  /* parser/lexer.nit:991 */
   REGB0 = TAG_Int(80);
   goto label1;
   label1: while(0);
@@ -3616,7 +3636,7 @@ void parser___lexer___TClassid___init_tk(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___lexer;
-  fra.me.line = 989;
+  fra.me.line = 994;
   fra.me.meth = LOCATE_parser___lexer___TClassid___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3625,7 +3645,7 @@ void parser___lexer___TClassid___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:991 */
+  /* parser/lexer.nit:996 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos80] = 1;
@@ -3638,14 +3658,14 @@ val_t parser___lexer___TId___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 996;
+  fra.me.line = 1001;
   fra.me.meth = LOCATE_parser___lexer___TId___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:998 */
+  /* parser/lexer.nit:1003 */
   REGB0 = TAG_Int(81);
   goto label1;
   label1: while(0);
@@ -3660,7 +3680,7 @@ void parser___lexer___TId___init_tk(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___lexer;
-  fra.me.line = 1001;
+  fra.me.line = 1006;
   fra.me.meth = LOCATE_parser___lexer___TId___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3669,7 +3689,7 @@ void parser___lexer___TId___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:1003 */
+  /* parser/lexer.nit:1008 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos81] = 1;
@@ -3682,14 +3702,14 @@ val_t parser___lexer___TAttrid___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1008;
+  fra.me.line = 1013;
   fra.me.meth = LOCATE_parser___lexer___TAttrid___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1010 */
+  /* parser/lexer.nit:1015 */
   REGB0 = TAG_Int(82);
   goto label1;
   label1: while(0);
@@ -3704,7 +3724,7 @@ void parser___lexer___TAttrid___init_tk(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___lexer;
-  fra.me.line = 1013;
+  fra.me.line = 1018;
   fra.me.meth = LOCATE_parser___lexer___TAttrid___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3713,7 +3733,7 @@ void parser___lexer___TAttrid___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:1015 */
+  /* parser/lexer.nit:1020 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos82] = 1;
@@ -3726,14 +3746,14 @@ val_t parser___lexer___TNumber___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1020;
+  fra.me.line = 1025;
   fra.me.meth = LOCATE_parser___lexer___TNumber___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1022 */
+  /* parser/lexer.nit:1027 */
   REGB0 = TAG_Int(83);
   goto label1;
   label1: while(0);
@@ -3748,7 +3768,7 @@ void parser___lexer___TNumber___init_tk(val_t p0, val_t p1, int* init_table){
   if (init_table[itpos83]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1025;
+  fra.me.line = 1030;
   fra.me.meth = LOCATE_parser___lexer___TNumber___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3757,7 +3777,7 @@ void parser___lexer___TNumber___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:1027 */
+  /* parser/lexer.nit:1032 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos83] = 1;
@@ -3770,14 +3790,14 @@ val_t parser___lexer___TFloat___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1032;
+  fra.me.line = 1037;
   fra.me.meth = LOCATE_parser___lexer___TFloat___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1034 */
+  /* parser/lexer.nit:1039 */
   REGB0 = TAG_Int(84);
   goto label1;
   label1: while(0);
@@ -3792,7 +3812,7 @@ void parser___lexer___TFloat___init_tk(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___lexer;
-  fra.me.line = 1037;
+  fra.me.line = 1042;
   fra.me.meth = LOCATE_parser___lexer___TFloat___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3801,43 +3821,43 @@ void parser___lexer___TFloat___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:1039 */
+  /* parser/lexer.nit:1044 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos84] = 1;
   return;
 }
-static const char LOCATE_parser___lexer___TChar___parser_index[] = "lexer::TChar::(lexer::Token::parser_index)";
-val_t parser___lexer___TChar___parser_index(val_t p0){
+static const char LOCATE_parser___lexer___TString___parser_index[] = "lexer::TString::(lexer::Token::parser_index)";
+val_t parser___lexer___TString___parser_index(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1044;
-  fra.me.meth = LOCATE_parser___lexer___TChar___parser_index;
+  fra.me.line = 1049;
+  fra.me.meth = LOCATE_parser___lexer___TString___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1046 */
+  /* parser/lexer.nit:1051 */
   REGB0 = TAG_Int(85);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return REGB0;
 }
-static const char LOCATE_parser___lexer___TChar___init_tk[] = "lexer::TChar::init_tk";
-void parser___lexer___TChar___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos85 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TChar].i;
+static const char LOCATE_parser___lexer___TString___init_tk[] = "lexer::TString::init_tk";
+void parser___lexer___TString___init_tk(val_t p0, val_t p1, int* init_table){
+  int itpos85 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TString].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   if (init_table[itpos85]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1049;
-  fra.me.meth = LOCATE_parser___lexer___TChar___init_tk;
+  fra.me.line = 1054;
+  fra.me.meth = LOCATE_parser___lexer___TString___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
@@ -3845,43 +3865,43 @@ void parser___lexer___TChar___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:1051 */
+  /* parser/lexer.nit:1056 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos85] = 1;
   return;
 }
-static const char LOCATE_parser___lexer___TString___parser_index[] = "lexer::TString::(lexer::Token::parser_index)";
-val_t parser___lexer___TString___parser_index(val_t p0){
+static const char LOCATE_parser___lexer___TStartString___parser_index[] = "lexer::TStartString::(lexer::Token::parser_index)";
+val_t parser___lexer___TStartString___parser_index(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1056;
-  fra.me.meth = LOCATE_parser___lexer___TString___parser_index;
+  fra.me.line = 1061;
+  fra.me.meth = LOCATE_parser___lexer___TStartString___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1058 */
+  /* parser/lexer.nit:1063 */
   REGB0 = TAG_Int(86);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return REGB0;
 }
-static const char LOCATE_parser___lexer___TString___init_tk[] = "lexer::TString::init_tk";
-void parser___lexer___TString___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos86 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TString].i;
+static const char LOCATE_parser___lexer___TStartString___init_tk[] = "lexer::TStartString::init_tk";
+void parser___lexer___TStartString___init_tk(val_t p0, val_t p1, int* init_table){
+  int itpos86 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TStartString].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   if (init_table[itpos86]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1061;
-  fra.me.meth = LOCATE_parser___lexer___TString___init_tk;
+  fra.me.line = 1066;
+  fra.me.meth = LOCATE_parser___lexer___TStartString___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
@@ -3889,43 +3909,43 @@ void parser___lexer___TString___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:1063 */
+  /* parser/lexer.nit:1068 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos86] = 1;
   return;
 }
-static const char LOCATE_parser___lexer___TStartString___parser_index[] = "lexer::TStartString::(lexer::Token::parser_index)";
-val_t parser___lexer___TStartString___parser_index(val_t p0){
+static const char LOCATE_parser___lexer___TMidString___parser_index[] = "lexer::TMidString::(lexer::Token::parser_index)";
+val_t parser___lexer___TMidString___parser_index(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1068;
-  fra.me.meth = LOCATE_parser___lexer___TStartString___parser_index;
+  fra.me.line = 1073;
+  fra.me.meth = LOCATE_parser___lexer___TMidString___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1070 */
+  /* parser/lexer.nit:1075 */
   REGB0 = TAG_Int(87);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return REGB0;
 }
-static const char LOCATE_parser___lexer___TStartString___init_tk[] = "lexer::TStartString::init_tk";
-void parser___lexer___TStartString___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos87 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TStartString].i;
+static const char LOCATE_parser___lexer___TMidString___init_tk[] = "lexer::TMidString::init_tk";
+void parser___lexer___TMidString___init_tk(val_t p0, val_t p1, int* init_table){
+  int itpos87 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TMidString].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   if (init_table[itpos87]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1073;
-  fra.me.meth = LOCATE_parser___lexer___TStartString___init_tk;
+  fra.me.line = 1078;
+  fra.me.meth = LOCATE_parser___lexer___TMidString___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
@@ -3933,43 +3953,43 @@ void parser___lexer___TStartString___init_tk(val_t p0, val_t p1, int* init_table
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:1075 */
+  /* parser/lexer.nit:1080 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos87] = 1;
   return;
 }
-static const char LOCATE_parser___lexer___TMidString___parser_index[] = "lexer::TMidString::(lexer::Token::parser_index)";
-val_t parser___lexer___TMidString___parser_index(val_t p0){
+static const char LOCATE_parser___lexer___TEndString___parser_index[] = "lexer::TEndString::(lexer::Token::parser_index)";
+val_t parser___lexer___TEndString___parser_index(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1080;
-  fra.me.meth = LOCATE_parser___lexer___TMidString___parser_index;
+  fra.me.line = 1085;
+  fra.me.meth = LOCATE_parser___lexer___TEndString___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1082 */
+  /* parser/lexer.nit:1087 */
   REGB0 = TAG_Int(88);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return REGB0;
 }
-static const char LOCATE_parser___lexer___TMidString___init_tk[] = "lexer::TMidString::init_tk";
-void parser___lexer___TMidString___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos88 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TMidString].i;
+static const char LOCATE_parser___lexer___TEndString___init_tk[] = "lexer::TEndString::init_tk";
+void parser___lexer___TEndString___init_tk(val_t p0, val_t p1, int* init_table){
+  int itpos88 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TEndString].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   if (init_table[itpos88]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1085;
-  fra.me.meth = LOCATE_parser___lexer___TMidString___init_tk;
+  fra.me.line = 1090;
+  fra.me.meth = LOCATE_parser___lexer___TEndString___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
@@ -3977,43 +3997,43 @@ void parser___lexer___TMidString___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:1087 */
+  /* parser/lexer.nit:1092 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos88] = 1;
   return;
 }
-static const char LOCATE_parser___lexer___TEndString___parser_index[] = "lexer::TEndString::(lexer::Token::parser_index)";
-val_t parser___lexer___TEndString___parser_index(val_t p0){
+static const char LOCATE_parser___lexer___TChar___parser_index[] = "lexer::TChar::(lexer::Token::parser_index)";
+val_t parser___lexer___TChar___parser_index(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1092;
-  fra.me.meth = LOCATE_parser___lexer___TEndString___parser_index;
+  fra.me.line = 1097;
+  fra.me.meth = LOCATE_parser___lexer___TChar___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1094 */
+  /* parser/lexer.nit:1099 */
   REGB0 = TAG_Int(89);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return REGB0;
 }
-static const char LOCATE_parser___lexer___TEndString___init_tk[] = "lexer::TEndString::init_tk";
-void parser___lexer___TEndString___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos89 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TEndString].i;
+static const char LOCATE_parser___lexer___TChar___init_tk[] = "lexer::TChar::init_tk";
+void parser___lexer___TChar___init_tk(val_t p0, val_t p1, int* init_table){
+  int itpos89 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TChar].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   if (init_table[itpos89]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1097;
-  fra.me.meth = LOCATE_parser___lexer___TEndString___init_tk;
+  fra.me.line = 1102;
+  fra.me.meth = LOCATE_parser___lexer___TChar___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
@@ -4021,43 +4041,43 @@ void parser___lexer___TEndString___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:1099 */
+  /* parser/lexer.nit:1104 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos89] = 1;
   return;
 }
-static const char LOCATE_parser___lexer___TBadChar___parser_index[] = "lexer::TBadChar::(lexer::Token::parser_index)";
-val_t parser___lexer___TBadChar___parser_index(val_t p0){
+static const char LOCATE_parser___lexer___TBadString___parser_index[] = "lexer::TBadString::(lexer::Token::parser_index)";
+val_t parser___lexer___TBadString___parser_index(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1104;
-  fra.me.meth = LOCATE_parser___lexer___TBadChar___parser_index;
+  fra.me.line = 1109;
+  fra.me.meth = LOCATE_parser___lexer___TBadString___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1106 */
+  /* parser/lexer.nit:1111 */
   REGB0 = TAG_Int(90);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return REGB0;
 }
-static const char LOCATE_parser___lexer___TBadChar___init_tk[] = "lexer::TBadChar::init_tk";
-void parser___lexer___TBadChar___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos90 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TBadChar].i;
+static const char LOCATE_parser___lexer___TBadString___init_tk[] = "lexer::TBadString::init_tk";
+void parser___lexer___TBadString___init_tk(val_t p0, val_t p1, int* init_table){
+  int itpos90 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TBadString].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   if (init_table[itpos90]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1109;
-  fra.me.meth = LOCATE_parser___lexer___TBadChar___init_tk;
+  fra.me.line = 1114;
+  fra.me.meth = LOCATE_parser___lexer___TBadString___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
@@ -4065,43 +4085,43 @@ void parser___lexer___TBadChar___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:1111 */
+  /* parser/lexer.nit:1116 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos90] = 1;
   return;
 }
-static const char LOCATE_parser___lexer___TBadString___parser_index[] = "lexer::TBadString::(lexer::Token::parser_index)";
-val_t parser___lexer___TBadString___parser_index(val_t p0){
+static const char LOCATE_parser___lexer___TBadChar___parser_index[] = "lexer::TBadChar::(lexer::Token::parser_index)";
+val_t parser___lexer___TBadChar___parser_index(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1116;
-  fra.me.meth = LOCATE_parser___lexer___TBadString___parser_index;
+  fra.me.line = 1121;
+  fra.me.meth = LOCATE_parser___lexer___TBadChar___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1118 */
+  /* parser/lexer.nit:1123 */
   REGB0 = TAG_Int(91);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return REGB0;
 }
-static const char LOCATE_parser___lexer___TBadString___init_tk[] = "lexer::TBadString::init_tk";
-void parser___lexer___TBadString___init_tk(val_t p0, val_t p1, int* init_table){
-  int itpos91 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TBadString].i;
+static const char LOCATE_parser___lexer___TBadChar___init_tk[] = "lexer::TBadChar::init_tk";
+void parser___lexer___TBadChar___init_tk(val_t p0, val_t p1, int* init_table){
+  int itpos91 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___TBadChar].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   if (init_table[itpos91]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1121;
-  fra.me.meth = LOCATE_parser___lexer___TBadString___init_tk;
+  fra.me.line = 1126;
+  fra.me.meth = LOCATE_parser___lexer___TBadChar___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
@@ -4109,7 +4129,7 @@ void parser___lexer___TBadString___init_tk(val_t p0, val_t p1, int* init_table){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:1123 */
+  /* parser/lexer.nit:1128 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos91] = 1;
@@ -4122,14 +4142,14 @@ val_t parser___lexer___TExternCodeSegment___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1128;
+  fra.me.line = 1133;
   fra.me.meth = LOCATE_parser___lexer___TExternCodeSegment___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1130 */
+  /* parser/lexer.nit:1135 */
   REGB0 = TAG_Int(92);
   goto label1;
   label1: while(0);
@@ -4144,7 +4164,7 @@ void parser___lexer___TExternCodeSegment___init_tk(val_t p0, val_t p1, int* init
   if (init_table[itpos92]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1133;
+  fra.me.line = 1138;
   fra.me.meth = LOCATE_parser___lexer___TExternCodeSegment___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4153,7 +4173,7 @@ void parser___lexer___TExternCodeSegment___init_tk(val_t p0, val_t p1, int* init
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:1135 */
+  /* parser/lexer.nit:1140 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos92] = 1;
@@ -4166,22 +4186,22 @@ val_t parser___lexer___EOF___parser_index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1141;
+  fra.me.line = 1146;
   fra.me.meth = LOCATE_parser___lexer___EOF___parser_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1143 */
+  /* parser/lexer.nit:1148 */
   REGB0 = TAG_Int(93);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return REGB0;
 }
-static const char LOCATE_parser___lexer___EOF___init[] = "lexer::EOF::init";
-void parser___lexer___EOF___init(val_t p0, val_t p1, int* init_table){
+static const char LOCATE_parser___lexer___EOF___init_tk[] = "lexer::EOF::init_tk";
+void parser___lexer___EOF___init_tk(val_t p0, val_t p1, int* init_table){
   int itpos93 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___EOF].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
@@ -4190,8 +4210,8 @@ void parser___lexer___EOF___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___lexer;
-  fra.me.line = 1146;
-  fra.me.meth = LOCATE_parser___lexer___EOF___init;
+  fra.me.line = 1151;
+  fra.me.meth = LOCATE_parser___lexer___EOF___init_tk;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.nitni_local_ref_head = NULL;
@@ -4200,7 +4220,7 @@ void parser___lexer___EOF___init(val_t p0, val_t p1, int* init_table){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/lexer.nit:1148 */
+  /* parser/lexer.nit:1153 */
   if (!once_value_1) {
     fra.me.REG[2] = BOX_NativeString("");
     REGB0 = TAG_Int(0);
@@ -4210,7 +4230,7 @@ void parser___lexer___EOF___init(val_t p0, val_t p1, int* init_table){
   } else fra.me.REG[2] = once_value_1;
   fra.me.REG[2] = fra.me.REG[2];
   ATTR_parser___lexer___Token____text(fra.me.REG[0]) = fra.me.REG[2];
-  /* parser/lexer.nit:1149 */
+  /* parser/lexer.nit:1154 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos93] = 1;
@@ -4223,18 +4243,18 @@ val_t parser___lexer___AError___message(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1154;
+  fra.me.line = 1159;
   fra.me.meth = LOCATE_parser___lexer___AError___message;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1154 */
+  /* parser/lexer.nit:1159 */
   REGB0 = TAG_Bool(ATTR_parser___lexer___AError____message(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_message", LOCATE_parser___lexer, 1154);
+    nit_abort("Uninitialized attribute %s", "_message", LOCATE_parser___lexer, 1159);
   }
   fra.me.REG[0] = ATTR_parser___lexer___AError____message(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4248,7 +4268,7 @@ void parser___lexer___AError___init_error(val_t p0, val_t p1, val_t p2, int* ini
   if (init_table[itpos94]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1156;
+  fra.me.line = 1161;
   fra.me.meth = LOCATE_parser___lexer___AError___init_error;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -4259,102 +4279,208 @@ void parser___lexer___AError___init_error(val_t p0, val_t p1, val_t p2, int* ini
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/lexer.nit:1158 */
-  CALL_parser___lexer___EOF___init(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[2], init_table);
-  /* parser/lexer.nit:1159 */
+  /* parser/lexer.nit:1163 */
+  CALL_parser___lexer___EOF___init_tk(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[2], init_table);
+  /* parser/lexer.nit:1164 */
   ATTR_parser___lexer___AError____message(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos94] = 1;
   return;
 }
-static const char LOCATE_parser___lexer___Lexer___file[] = "lexer::Lexer::file";
-val_t parser___lexer___Lexer___file(val_t p0){
+static const char LOCATE_parser___lexer___ALexerError___string[] = "lexer::ALexerError::string";
+val_t parser___lexer___ALexerError___string(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1174;
-  fra.me.meth = LOCATE_parser___lexer___Lexer___file;
+  fra.me.line = 1169;
+  fra.me.meth = LOCATE_parser___lexer___ALexerError___string;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1174 */
-  REGB0 = TAG_Bool(ATTR_parser___lexer___Lexer____file(fra.me.REG[0])!=NIT_NULL);
+  /* parser/lexer.nit:1169 */
+  REGB0 = TAG_Bool(ATTR_parser___lexer___ALexerError____string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_file", LOCATE_parser___lexer, 1174);
+    nit_abort("Uninitialized attribute %s", "_string", LOCATE_parser___lexer, 1169);
   }
-  fra.me.REG[0] = ATTR_parser___lexer___Lexer____file(fra.me.REG[0]);
+  fra.me.REG[0] = ATTR_parser___lexer___ALexerError____string(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-static const char LOCATE_parser___lexer___Lexer___state_initial[] = "lexer::Lexer::state_initial";
-val_t parser___lexer___Lexer___state_initial(val_t p0){
-  struct {struct stack_frame_t me;} fra;
-  val_t REGB0;
+static const char LOCATE_parser___lexer___ALexerError___init_lexer_error[] = "lexer::ALexerError::init_lexer_error";
+void parser___lexer___ALexerError___init_lexer_error(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos95 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ALexerError].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t tmp;
+  if (init_table[itpos95]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1189;
-  fra.me.meth = LOCATE_parser___lexer___Lexer___state_initial;
+  fra.me.line = 1171;
+  fra.me.meth = LOCATE_parser___lexer___ALexerError___init_lexer_error;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1190 */
-  REGB0 = TAG_Int(0);
-  goto label1;
-  label1: while(0);
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* parser/lexer.nit:1173 */
+  CALL_parser___lexer___AError___init_error(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
+  /* parser/lexer.nit:1174 */
+  ATTR_parser___lexer___ALexerError____string(fra.me.REG[0]) = fra.me.REG[3];
   stack_frame_head = fra.me.prev;
-  return REGB0;
+  init_table[itpos95] = 1;
+  return;
 }
-static const char LOCATE_parser___lexer___Lexer___init[] = "lexer::Lexer::init";
-void parser___lexer___Lexer___init(val_t p0, val_t p1, int* init_table){
-  int itpos95 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___lexer___Lexer].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+static const char LOCATE_parser___lexer___AParserError___token[] = "lexer::AParserError::token";
+val_t parser___lexer___AParserError___token(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos95]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1192;
-  fra.me.meth = LOCATE_parser___lexer___Lexer___init;
+  fra.me.line = 1179;
+  fra.me.meth = LOCATE_parser___lexer___AParserError___token;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/lexer.nit:1195 */
-  ATTR_parser___lexer___Lexer____file(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/lexer.nit:1179 */
+  REGB0 = TAG_Bool(ATTR_parser___lexer___AParserError____token(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_token", LOCATE_parser___lexer, 1179);
+  }
+  fra.me.REG[0] = ATTR_parser___lexer___AParserError____token(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos95] = 1;
-  return;
+  return fra.me.REG[0];
 }
-static const char LOCATE_parser___lexer___Lexer___peek[] = "lexer::Lexer::peek";
-val_t parser___lexer___Lexer___peek(val_t p0){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t REGB1;
+static const char LOCATE_parser___lexer___AParserError___init_parser_error[] = "lexer::AParserError::init_parser_error";
+void parser___lexer___AParserError___init_parser_error(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos96 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AParserError].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t tmp;
+  if (init_table[itpos96]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1198;
-  fra.me.meth = LOCATE_parser___lexer___Lexer___peek;
+  fra.me.line = 1181;
+  fra.me.meth = LOCATE_parser___lexer___AParserError___init_parser_error;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* parser/lexer.nit:1183 */
+  CALL_parser___lexer___AError___init_error(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
+  /* parser/lexer.nit:1184 */
+  ATTR_parser___lexer___AParserError____token(fra.me.REG[0]) = fra.me.REG[3];
+  stack_frame_head = fra.me.prev;
+  init_table[itpos96] = 1;
+  return;
+}
+static const char LOCATE_parser___lexer___Lexer___file[] = "lexer::Lexer::file";
+val_t parser___lexer___Lexer___file(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___lexer;
+  fra.me.line = 1198;
+  fra.me.meth = LOCATE_parser___lexer___Lexer___file;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   /* parser/lexer.nit:1198 */
+  REGB0 = TAG_Bool(ATTR_parser___lexer___Lexer____file(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_file", LOCATE_parser___lexer, 1198);
+  }
+  fra.me.REG[0] = ATTR_parser___lexer___Lexer____file(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_parser___lexer___Lexer___state_initial[] = "lexer::Lexer::state_initial";
+val_t parser___lexer___Lexer___state_initial(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___lexer;
+  fra.me.line = 1213;
+  fra.me.meth = LOCATE_parser___lexer___Lexer___state_initial;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/lexer.nit:1214 */
+  REGB0 = TAG_Int(0);
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+static const char LOCATE_parser___lexer___Lexer___init[] = "lexer::Lexer::init";
+void parser___lexer___Lexer___init(val_t p0, val_t p1, int* init_table){
+  int itpos97 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___lexer___Lexer].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  if (init_table[itpos97]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___lexer;
+  fra.me.line = 1216;
+  fra.me.meth = LOCATE_parser___lexer___Lexer___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/lexer.nit:1219 */
+  ATTR_parser___lexer___Lexer____file(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+  init_table[itpos97] = 1;
+  return;
+}
+static const char LOCATE_parser___lexer___Lexer___peek[] = "lexer::Lexer::peek";
+val_t parser___lexer___Lexer___peek(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___lexer;
+  fra.me.line = 1222;
+  fra.me.meth = LOCATE_parser___lexer___Lexer___peek;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/lexer.nit:1222 */
   fra.me.REG[1] = fra.me.REG[0];
-  /* parser/lexer.nit:1201 */
+  /* parser/lexer.nit:1225 */
   while(1) {
     fra.me.REG[2] = ATTR_parser___lexer___Lexer____token(fra.me.REG[1]);
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -4370,21 +4496,21 @@ val_t parser___lexer___Lexer___peek(val_t p0){
       }
     }
     if (UNTAG_Bool(REGB0)) {
-      /* parser/lexer.nit:1202 */
+      /* parser/lexer.nit:1226 */
       fra.me.REG[2] = CALL_parser___lexer___Lexer___get_token(fra.me.REG[1])(fra.me.REG[1]);
       ATTR_parser___lexer___Lexer____token(fra.me.REG[1]) = fra.me.REG[2];
     } else {
-      /* parser/lexer.nit:1201 */
+      /* parser/lexer.nit:1225 */
       goto label1;
     }
   }
   label1: while(0);
-  /* parser/lexer.nit:1204 */
+  /* parser/lexer.nit:1228 */
   fra.me.REG[1] = ATTR_parser___lexer___Lexer____token(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___lexer, 1204);
+    nit_abort("Cast failed", NULL, LOCATE_parser___lexer, 1228);
   }
   goto label2;
   label2: while(0);
@@ -4399,7 +4525,7 @@ val_t parser___lexer___Lexer___next(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1207;
+  fra.me.line = 1231;
   fra.me.meth = LOCATE_parser___lexer___Lexer___next;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -4408,9 +4534,9 @@ val_t parser___lexer___Lexer___next(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1210 */
+  /* parser/lexer.nit:1234 */
   fra.me.REG[1] = ATTR_parser___lexer___Lexer____token(fra.me.REG[0]);
-  /* parser/lexer.nit:1211 */
+  /* parser/lexer.nit:1235 */
   while(1) {
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
@@ -4425,18 +4551,18 @@ val_t parser___lexer___Lexer___next(val_t p0){
       }
     }
     if (UNTAG_Bool(REGB0)) {
-      /* parser/lexer.nit:1212 */
+      /* parser/lexer.nit:1236 */
       fra.me.REG[2] = CALL_parser___lexer___Lexer___get_token(fra.me.REG[0])(fra.me.REG[0]);
       fra.me.REG[1] = fra.me.REG[2];
     } else {
-      /* parser/lexer.nit:1211 */
+      /* parser/lexer.nit:1235 */
       goto label1;
     }
   }
   label1: while(0);
-  /* parser/lexer.nit:1214 */
+  /* parser/lexer.nit:1238 */
   ATTR_parser___lexer___Lexer____token(fra.me.REG[0]) = NIT_NULL;
-  /* parser/lexer.nit:1215 */
+  /* parser/lexer.nit:1239 */
   goto label2;
   label2: while(0);
   stack_frame_head = fra.me.prev;
@@ -4472,7 +4598,7 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
           static val_t once_value_5; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___lexer;
-  fra.me.line = 1218;
+  fra.me.line = 1242;
   fra.me.meth = LOCATE_parser___lexer___Lexer___get_token;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -4485,36 +4611,36 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/lexer.nit:1221 */
+  /* parser/lexer.nit:1245 */
   REGB0 = TAG_Int(0);
-  /* parser/lexer.nit:1223 */
+  /* parser/lexer.nit:1247 */
   REGB1 = TAG_Bool(ATTR_parser___lexer___Lexer____stream_pos(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_stream_pos", LOCATE_parser___lexer, 1223);
+    nit_abort("Uninitialized attribute %s", "_stream_pos", LOCATE_parser___lexer, 1247);
   }
   REGB1 = ATTR_parser___lexer___Lexer____stream_pos(fra.me.REG[0]);
-  /* parser/lexer.nit:1224 */
+  /* parser/lexer.nit:1248 */
   REGB2 = REGB1;
-  /* parser/lexer.nit:1225 */
+  /* parser/lexer.nit:1249 */
   REGB3 = TAG_Bool(ATTR_parser___lexer___Lexer____pos(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB3)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_pos", LOCATE_parser___lexer, 1225);
+    nit_abort("Uninitialized attribute %s", "_pos", LOCATE_parser___lexer, 1249);
   }
   REGB3 = ATTR_parser___lexer___Lexer____pos(fra.me.REG[0]);
-  /* parser/lexer.nit:1226 */
+  /* parser/lexer.nit:1250 */
   REGB4 = TAG_Bool(ATTR_parser___lexer___Lexer____line(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB4)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_line", LOCATE_parser___lexer, 1226);
+    nit_abort("Uninitialized attribute %s", "_line", LOCATE_parser___lexer, 1250);
   }
   REGB4 = ATTR_parser___lexer___Lexer____line(fra.me.REG[0]);
-  /* parser/lexer.nit:1227 */
+  /* parser/lexer.nit:1251 */
   REGB5 = TAG_Bool(ATTR_parser___lexer___Lexer____file(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB5)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_file", LOCATE_parser___lexer, 1227);
+    nit_abort("Uninitialized attribute %s", "_file", LOCATE_parser___lexer, 1251);
   }
   fra.me.REG[1] = ATTR_parser___lexer___Lexer____file(fra.me.REG[0]);
   fra.me.REG[1] = CALL_location___SourceFile___string(fra.me.REG[1])(fra.me.REG[1]);
@@ -4525,27 +4651,27 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB5 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
-  /* parser/lexer.nit:1230 */
+  /* parser/lexer.nit:1254 */
   REGB6 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:239 */
   REGB6 = TAG_Int(-UNTAG_Int(REGB6));
-  /* parser/lexer.nit:1231 */
+  /* parser/lexer.nit:1255 */
   REGB7 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:239 */
   REGB7 = TAG_Int(-UNTAG_Int(REGB7));
-  /* parser/lexer.nit:1232 */
+  /* parser/lexer.nit:1256 */
   REGB8 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:239 */
   REGB8 = TAG_Int(-UNTAG_Int(REGB8));
-  /* parser/lexer.nit:1233 */
+  /* parser/lexer.nit:1257 */
   REGB9 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:239 */
   REGB9 = TAG_Int(-UNTAG_Int(REGB9));
-  /* parser/lexer.nit:1234 */
+  /* parser/lexer.nit:1258 */
   REGB10 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:239 */
   REGB10 = TAG_Int(-UNTAG_Int(REGB10));
-  /* parser/lexer.nit:1236 */
+  /* parser/lexer.nit:1260 */
   while(1) {
     REGB11 = TAG_Bool(VAL_ISA(REGB5, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
     if (UNTAG_Bool(REGB11)) {
@@ -4554,141 +4680,141 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
     }
     /* ../lib/standard/kernel.nit:236 */
     REGB11 = TAG_Bool(UNTAG_Int(REGB1)>=UNTAG_Int(REGB5));
-    /* parser/lexer.nit:1237 */
+    /* parser/lexer.nit:1261 */
     if (UNTAG_Bool(REGB11)) {
-      /* parser/lexer.nit:1238 */
+      /* parser/lexer.nit:1262 */
       REGB11 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:239 */
       REGB11 = TAG_Int(-UNTAG_Int(REGB11));
-      /* parser/lexer.nit:1238 */
+      /* parser/lexer.nit:1262 */
       REGB0 = REGB11;
     } else {
-      /* parser/lexer.nit:1240 */
+      /* parser/lexer.nit:1264 */
       REGB11 = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[1])(fra.me.REG[1], REGB1);
       /* ../lib/standard/kernel.nit:416 */
       REGB11 = TAG_Int((unsigned char)UNTAG_Char(REGB11));
-      /* parser/lexer.nit:1241 */
+      /* parser/lexer.nit:1265 */
       REGB12 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:238 */
       REGB12 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB12));
-      /* parser/lexer.nit:1241 */
+      /* parser/lexer.nit:1265 */
       REGB1 = REGB12;
-      /* parser/lexer.nit:1243 */
+      /* parser/lexer.nit:1267 */
       REGB12 = TAG_Bool(ATTR_parser___lexer___Lexer____cr(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB12)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_cr", LOCATE_parser___lexer, 1243);
+        nit_abort("Uninitialized attribute %s", "_cr", LOCATE_parser___lexer, 1267);
       }
       REGB12 = ATTR_parser___lexer___Lexer____cr(fra.me.REG[0]);
-      /* parser/lexer.nit:1244 */
+      /* parser/lexer.nit:1268 */
       REGB13 = TAG_Bool(ATTR_parser___lexer___Lexer____line(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB13)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_line", LOCATE_parser___lexer, 1244);
+        nit_abort("Uninitialized attribute %s", "_line", LOCATE_parser___lexer, 1268);
       }
       REGB13 = ATTR_parser___lexer___Lexer____line(fra.me.REG[0]);
-      /* parser/lexer.nit:1245 */
+      /* parser/lexer.nit:1269 */
       REGB14 = TAG_Bool(ATTR_parser___lexer___Lexer____pos(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB14)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_pos", LOCATE_parser___lexer, 1245);
+        nit_abort("Uninitialized attribute %s", "_pos", LOCATE_parser___lexer, 1269);
       }
       REGB14 = ATTR_parser___lexer___Lexer____pos(fra.me.REG[0]);
-      /* parser/lexer.nit:1246 */
+      /* parser/lexer.nit:1270 */
       REGB15 = TAG_Int(10);
       REGB16 = TAG_Bool(IS_EQUAL_OO(REGB11,REGB15));
       if (UNTAG_Bool(REGB16)) {
       } else {
         /* ../lib/standard/kernel.nit:230 */
         REGB15 = TAG_Bool((REGB11)==(REGB15));
-        /* parser/lexer.nit:1246 */
+        /* parser/lexer.nit:1270 */
         REGB16 = REGB15;
       }
       if (UNTAG_Bool(REGB16)) {
-        /* parser/lexer.nit:1247 */
+        /* parser/lexer.nit:1271 */
         if (UNTAG_Bool(REGB12)) {
-          /* parser/lexer.nit:1248 */
+          /* parser/lexer.nit:1272 */
           REGB16 = TAG_Bool(0);
           REGB12 = REGB16;
-          /* parser/lexer.nit:1249 */
+          /* parser/lexer.nit:1273 */
           REGB16 = TAG_Bool(ATTR_parser___lexer___Lexer____file(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB16)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_file", LOCATE_parser___lexer, 1249);
+            nit_abort("Uninitialized attribute %s", "_file", LOCATE_parser___lexer, 1273);
           }
           fra.me.REG[2] = ATTR_parser___lexer___Lexer____file(fra.me.REG[0]);
           fra.me.REG[2] = CALL_location___SourceFile___line_starts(fra.me.REG[2])(fra.me.REG[2]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[2])(fra.me.REG[2], REGB13, REGB1);
         } else {
-          /* parser/lexer.nit:1251 */
+          /* parser/lexer.nit:1275 */
           REGB16 = TAG_Int(1);
           /* ../lib/standard/kernel.nit:238 */
           REGB16 = TAG_Int(UNTAG_Int(REGB13)+UNTAG_Int(REGB16));
-          /* parser/lexer.nit:1251 */
+          /* parser/lexer.nit:1275 */
           REGB13 = REGB16;
-          /* parser/lexer.nit:1252 */
+          /* parser/lexer.nit:1276 */
           REGB16 = TAG_Int(0);
           REGB14 = REGB16;
-          /* parser/lexer.nit:1253 */
+          /* parser/lexer.nit:1277 */
           REGB16 = TAG_Bool(ATTR_parser___lexer___Lexer____file(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB16)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_file", LOCATE_parser___lexer, 1253);
+            nit_abort("Uninitialized attribute %s", "_file", LOCATE_parser___lexer, 1277);
           }
           fra.me.REG[2] = ATTR_parser___lexer___Lexer____file(fra.me.REG[0]);
           fra.me.REG[2] = CALL_location___SourceFile___line_starts(fra.me.REG[2])(fra.me.REG[2]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[2])(fra.me.REG[2], REGB13, REGB1);
         }
       } else {
-        /* parser/lexer.nit:1255 */
+        /* parser/lexer.nit:1279 */
         REGB16 = TAG_Int(13);
         REGB15 = TAG_Bool(IS_EQUAL_OO(REGB11,REGB16));
         if (UNTAG_Bool(REGB15)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB16 = TAG_Bool((REGB11)==(REGB16));
-          /* parser/lexer.nit:1255 */
+          /* parser/lexer.nit:1279 */
           REGB15 = REGB16;
         }
         if (UNTAG_Bool(REGB15)) {
-          /* parser/lexer.nit:1256 */
+          /* parser/lexer.nit:1280 */
           REGB15 = TAG_Int(1);
           /* ../lib/standard/kernel.nit:238 */
           REGB15 = TAG_Int(UNTAG_Int(REGB13)+UNTAG_Int(REGB15));
-          /* parser/lexer.nit:1256 */
+          /* parser/lexer.nit:1280 */
           REGB13 = REGB15;
-          /* parser/lexer.nit:1257 */
+          /* parser/lexer.nit:1281 */
           REGB15 = TAG_Int(0);
           REGB14 = REGB15;
-          /* parser/lexer.nit:1258 */
+          /* parser/lexer.nit:1282 */
           REGB15 = TAG_Bool(1);
           REGB12 = REGB15;
-          /* parser/lexer.nit:1259 */
+          /* parser/lexer.nit:1283 */
           REGB15 = TAG_Bool(ATTR_parser___lexer___Lexer____file(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB15)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_file", LOCATE_parser___lexer, 1259);
+            nit_abort("Uninitialized attribute %s", "_file", LOCATE_parser___lexer, 1283);
           }
           fra.me.REG[2] = ATTR_parser___lexer___Lexer____file(fra.me.REG[0]);
           fra.me.REG[2] = CALL_location___SourceFile___line_starts(fra.me.REG[2])(fra.me.REG[2]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[2])(fra.me.REG[2], REGB13, REGB1);
         } else {
-          /* parser/lexer.nit:1261 */
+          /* parser/lexer.nit:1285 */
           REGB15 = TAG_Int(1);
           /* ../lib/standard/kernel.nit:238 */
           REGB15 = TAG_Int(UNTAG_Int(REGB14)+UNTAG_Int(REGB15));
-          /* parser/lexer.nit:1261 */
+          /* parser/lexer.nit:1285 */
           REGB14 = REGB15;
-          /* parser/lexer.nit:1262 */
+          /* parser/lexer.nit:1286 */
           REGB15 = TAG_Bool(0);
           REGB12 = REGB15;
         }
       }
-      /* parser/lexer.nit:1265 */
+      /* parser/lexer.nit:1289 */
       while(1) {
-        /* parser/lexer.nit:1266 */
+        /* parser/lexer.nit:1290 */
         REGB15 = REGB0;
-        /* parser/lexer.nit:1267 */
+        /* parser/lexer.nit:1291 */
         REGB16 = TAG_Int(1);
         /* ../lib/standard/kernel.nit:239 */
         REGB16 = TAG_Int(-UNTAG_Int(REGB16));
@@ -4699,32 +4825,32 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         /* ../lib/standard/kernel.nit:235 */
         REGB16 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB16));
-        /* parser/lexer.nit:1267 */
+        /* parser/lexer.nit:1291 */
         if (UNTAG_Bool(REGB16)) {
-          /* parser/lexer.nit:1268 */
+          /* parser/lexer.nit:1292 */
           REGB16 = TAG_Int(2);
           /* ../lib/standard/kernel.nit:239 */
           REGB16 = TAG_Int(-UNTAG_Int(REGB16));
           /* ../lib/standard/kernel.nit:240 */
           REGB16 = TAG_Int(UNTAG_Int(REGB16)-UNTAG_Int(REGB0));
-          /* parser/lexer.nit:1268 */
+          /* parser/lexer.nit:1292 */
           REGB15 = REGB16;
         }
-        /* parser/lexer.nit:1271 */
+        /* parser/lexer.nit:1295 */
         REGB16 = TAG_Int(1);
         /* ../lib/standard/kernel.nit:239 */
         REGB16 = TAG_Int(-UNTAG_Int(REGB16));
-        /* parser/lexer.nit:1271 */
+        /* parser/lexer.nit:1295 */
         REGB0 = REGB16;
-        /* parser/lexer.nit:1273 */
+        /* parser/lexer.nit:1297 */
         REGB16 = TAG_Int(0);
-        /* parser/lexer.nit:1274 */
+        /* parser/lexer.nit:1298 */
         REGB17 = TAG_Int(0);
         REGB17 = CALL_parser___tables___TablesCapable___lexer_goto(fra.me.REG[0])(fra.me.REG[0], REGB15, REGB17);
         REGB18 = TAG_Int(1);
         /* ../lib/standard/kernel.nit:240 */
         REGB18 = TAG_Int(UNTAG_Int(REGB17)-UNTAG_Int(REGB18));
-        /* parser/lexer.nit:1276 */
+        /* parser/lexer.nit:1300 */
         REGB17 = TAG_Int(0);
         REGB19 = TAG_Bool(VAL_ISA(REGB17, VTCOLOR_standard___kernel___Comparable___OTHER(REGB18), VTID_standard___kernel___Comparable___OTHER(REGB18))) /*cast OTHER*/;
         if (UNTAG_Bool(REGB19)) {
@@ -4733,9 +4859,9 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         /* ../lib/standard/kernel.nit:236 */
         REGB17 = TAG_Bool(UNTAG_Int(REGB18)>=UNTAG_Int(REGB17));
-        /* parser/lexer.nit:1276 */
+        /* parser/lexer.nit:1300 */
         if (UNTAG_Bool(REGB17)) {
-          /* parser/lexer.nit:1277 */
+          /* parser/lexer.nit:1301 */
           while(1) {
             REGB17 = TAG_Bool(VAL_ISA(REGB18, VTCOLOR_standard___kernel___Comparable___OTHER(REGB16), VTID_standard___kernel___Comparable___OTHER(REGB16))) /*cast OTHER*/;
             if (UNTAG_Bool(REGB17)) {
@@ -4744,23 +4870,23 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
             }
             /* ../lib/standard/kernel.nit:234 */
             REGB17 = TAG_Bool(UNTAG_Int(REGB16)<=UNTAG_Int(REGB18));
-            /* parser/lexer.nit:1277 */
+            /* parser/lexer.nit:1301 */
             if (UNTAG_Bool(REGB17)) {
               /* ../lib/standard/kernel.nit:238 */
               REGB17 = TAG_Int(UNTAG_Int(REGB16)+UNTAG_Int(REGB18));
-              /* parser/lexer.nit:1278 */
+              /* parser/lexer.nit:1302 */
               REGB19 = TAG_Int(2);
               /* ../lib/standard/kernel.nit:242 */
               REGB19 = TAG_Int(UNTAG_Int(REGB17)/UNTAG_Int(REGB19));
-              /* parser/lexer.nit:1279 */
+              /* parser/lexer.nit:1303 */
               REGB17 = TAG_Int(3);
               /* ../lib/standard/kernel.nit:241 */
               REGB17 = TAG_Int(UNTAG_Int(REGB19)*UNTAG_Int(REGB17));
-              /* parser/lexer.nit:1279 */
+              /* parser/lexer.nit:1303 */
               REGB20 = TAG_Int(1);
               /* ../lib/standard/kernel.nit:238 */
               REGB20 = TAG_Int(UNTAG_Int(REGB17)+UNTAG_Int(REGB20));
-              /* parser/lexer.nit:1281 */
+              /* parser/lexer.nit:1305 */
               REGB17 = CALL_parser___tables___TablesCapable___lexer_goto(fra.me.REG[0])(fra.me.REG[0], REGB15, REGB20);
               REGB21 = TAG_Bool(VAL_ISA(REGB17, VTCOLOR_standard___kernel___Comparable___OTHER(REGB11), VTID_standard___kernel___Comparable___OTHER(REGB11))) /*cast OTHER*/;
               if (UNTAG_Bool(REGB21)) {
@@ -4769,20 +4895,20 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
               }
               /* ../lib/standard/kernel.nit:235 */
               REGB17 = TAG_Bool(UNTAG_Int(REGB11)<UNTAG_Int(REGB17));
-              /* parser/lexer.nit:1281 */
+              /* parser/lexer.nit:1305 */
               if (UNTAG_Bool(REGB17)) {
-               /* parser/lexer.nit:1282 */
+               /* parser/lexer.nit:1306 */
                REGB17 = TAG_Int(1);
                /* ../lib/standard/kernel.nit:240 */
                REGB17 = TAG_Int(UNTAG_Int(REGB19)-UNTAG_Int(REGB17));
-               /* parser/lexer.nit:1282 */
+               /* parser/lexer.nit:1306 */
                REGB18 = REGB17;
               } else {
-               /* parser/lexer.nit:1283 */
+               /* parser/lexer.nit:1307 */
                REGB17 = TAG_Int(1);
                /* ../lib/standard/kernel.nit:238 */
                REGB17 = TAG_Int(UNTAG_Int(REGB20)+UNTAG_Int(REGB17));
-               /* parser/lexer.nit:1283 */
+               /* parser/lexer.nit:1307 */
                REGB17 = CALL_parser___tables___TablesCapable___lexer_goto(fra.me.REG[0])(fra.me.REG[0], REGB15, REGB17);
                REGB21 = TAG_Bool(VAL_ISA(REGB17, VTCOLOR_standard___kernel___Comparable___OTHER(REGB11), VTID_standard___kernel___Comparable___OTHER(REGB11))) /*cast OTHER*/;
                if (UNTAG_Bool(REGB21)) {
@@ -4791,34 +4917,34 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
                }
                /* ../lib/standard/kernel.nit:237 */
                REGB17 = TAG_Bool(UNTAG_Int(REGB11)>UNTAG_Int(REGB17));
-               /* parser/lexer.nit:1283 */
+               /* parser/lexer.nit:1307 */
                if (UNTAG_Bool(REGB17)) {
-               /* parser/lexer.nit:1284 */
+               /* parser/lexer.nit:1308 */
                REGB17 = TAG_Int(1);
                /* ../lib/standard/kernel.nit:238 */
                REGB17 = TAG_Int(UNTAG_Int(REGB19)+UNTAG_Int(REGB17));
-               /* parser/lexer.nit:1284 */
+               /* parser/lexer.nit:1308 */
                REGB16 = REGB17;
                } else {
-               /* parser/lexer.nit:1286 */
+               /* parser/lexer.nit:1310 */
                REGB17 = TAG_Int(2);
                /* ../lib/standard/kernel.nit:238 */
                REGB17 = TAG_Int(UNTAG_Int(REGB20)+UNTAG_Int(REGB17));
-               /* parser/lexer.nit:1286 */
+               /* parser/lexer.nit:1310 */
                REGB17 = CALL_parser___tables___TablesCapable___lexer_goto(fra.me.REG[0])(fra.me.REG[0], REGB15, REGB17);
                REGB0 = REGB17;
-               /* parser/lexer.nit:1287 */
+               /* parser/lexer.nit:1311 */
                goto label1;
                }
               }
             } else {
-              /* parser/lexer.nit:1277 */
+              /* parser/lexer.nit:1301 */
               goto label1;
             }
           }
           label1: while(0);
         }
-        /* parser/lexer.nit:1291 */
+        /* parser/lexer.nit:1315 */
         REGB15 = TAG_Int(2);
         /* ../lib/standard/kernel.nit:239 */
         REGB15 = TAG_Int(-UNTAG_Int(REGB15));
@@ -4829,20 +4955,20 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         /* ../lib/standard/kernel.nit:237 */
         REGB15 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB15));
-        /* parser/lexer.nit:1291 */
+        /* parser/lexer.nit:1315 */
         if (UNTAG_Bool(REGB15)) {
           goto label2;
         }
       }
       label2: while(0);
-      /* parser/lexer.nit:1294 */
+      /* parser/lexer.nit:1318 */
       ATTR_parser___lexer___Lexer____cr(fra.me.REG[0]) = REGB12;
-      /* parser/lexer.nit:1295 */
+      /* parser/lexer.nit:1319 */
       ATTR_parser___lexer___Lexer____line(fra.me.REG[0]) = REGB13;
-      /* parser/lexer.nit:1296 */
+      /* parser/lexer.nit:1320 */
       ATTR_parser___lexer___Lexer____pos(fra.me.REG[0]) = REGB14;
     }
-    /* parser/lexer.nit:1299 */
+    /* parser/lexer.nit:1323 */
     REGB14 = TAG_Int(0);
     REGB13 = TAG_Bool(VAL_ISA(REGB14, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
     if (UNTAG_Bool(REGB13)) {
@@ -4851,623 +4977,495 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
     }
     /* ../lib/standard/kernel.nit:236 */
     REGB14 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB14));
-    /* parser/lexer.nit:1299 */
+    /* parser/lexer.nit:1323 */
     if (UNTAG_Bool(REGB14)) {
-      /* parser/lexer.nit:1300 */
+      /* parser/lexer.nit:1324 */
       REGB14 = CALL_parser___tables___TablesCapable___lexer_accept(fra.me.REG[0])(fra.me.REG[0], REGB0);
-      /* parser/lexer.nit:1301 */
+      /* parser/lexer.nit:1325 */
       REGB13 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:239 */
       REGB13 = TAG_Int(-UNTAG_Int(REGB13));
-      /* parser/lexer.nit:1301 */
+      /* parser/lexer.nit:1325 */
       REGB12 = TAG_Bool(IS_EQUAL_OO(REGB14,REGB13));
       if (UNTAG_Bool(REGB12)) {
       } else {
         /* ../lib/standard/kernel.nit:230 */
         REGB13 = TAG_Bool((REGB14)==(REGB13));
-        /* parser/lexer.nit:1301 */
+        /* parser/lexer.nit:1325 */
         REGB12 = REGB13;
       }
       REGB12 = TAG_Bool(!UNTAG_Bool(REGB12));
       if (UNTAG_Bool(REGB12)) {
-        /* parser/lexer.nit:1302 */
+        /* parser/lexer.nit:1326 */
         REGB6 = REGB0;
-        /* parser/lexer.nit:1303 */
+        /* parser/lexer.nit:1327 */
         REGB7 = REGB14;
         /* ../lib/standard/kernel.nit:240 */
         REGB14 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB2));
-        /* parser/lexer.nit:1304 */
+        /* parser/lexer.nit:1328 */
         REGB8 = REGB14;
-        /* parser/lexer.nit:1305 */
+        /* parser/lexer.nit:1329 */
         REGB14 = TAG_Bool(ATTR_parser___lexer___Lexer____pos(fra.me.REG[0])!=NIT_NULL);
         if (UNTAG_Bool(REGB14)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_pos", LOCATE_parser___lexer, 1305);
+          nit_abort("Uninitialized attribute %s", "_pos", LOCATE_parser___lexer, 1329);
         }
         REGB14 = ATTR_parser___lexer___Lexer____pos(fra.me.REG[0]);
         REGB9 = REGB14;
-        /* parser/lexer.nit:1306 */
+        /* parser/lexer.nit:1330 */
         REGB14 = TAG_Bool(ATTR_parser___lexer___Lexer____line(fra.me.REG[0])!=NIT_NULL);
         if (UNTAG_Bool(REGB14)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_line", LOCATE_parser___lexer, 1306);
+          nit_abort("Uninitialized attribute %s", "_line", LOCATE_parser___lexer, 1330);
         }
         REGB14 = ATTR_parser___lexer___Lexer____line(fra.me.REG[0]);
         REGB10 = REGB14;
       }
     } else {
-      /* parser/lexer.nit:1309 */
+      /* parser/lexer.nit:1333 */
       REGB14 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:239 */
       REGB14 = TAG_Int(-UNTAG_Int(REGB14));
-      /* parser/lexer.nit:1309 */
+      /* parser/lexer.nit:1333 */
       REGB12 = TAG_Bool(IS_EQUAL_OO(REGB6,REGB14));
       if (UNTAG_Bool(REGB12)) {
       } else {
         /* ../lib/standard/kernel.nit:230 */
         REGB14 = TAG_Bool((REGB6)==(REGB14));
-        /* parser/lexer.nit:1309 */
+        /* parser/lexer.nit:1333 */
         REGB12 = REGB14;
       }
       REGB12 = TAG_Bool(!UNTAG_Bool(REGB12));
       if (UNTAG_Bool(REGB12)) {
-        /* parser/lexer.nit:1310 */
+        /* parser/lexer.nit:1334 */
         REGB12 = TAG_Bool(ATTR_parser___lexer___Lexer____file(fra.me.REG[0])!=NIT_NULL);
         if (UNTAG_Bool(REGB12)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_file", LOCATE_parser___lexer, 1310);
+          nit_abort("Uninitialized attribute %s", "_file", LOCATE_parser___lexer, 1334);
         }
         fra.me.REG[2] = ATTR_parser___lexer___Lexer____file(fra.me.REG[0]);
         REGB12 = TAG_Int(1);
         /* ../lib/standard/kernel.nit:238 */
         REGB12 = TAG_Int(UNTAG_Int(REGB4)+UNTAG_Int(REGB12));
-        /* parser/lexer.nit:1310 */
+        /* parser/lexer.nit:1334 */
         REGB14 = TAG_Int(1);
         /* ../lib/standard/kernel.nit:238 */
         REGB14 = TAG_Int(UNTAG_Int(REGB10)+UNTAG_Int(REGB14));
-        /* parser/lexer.nit:1310 */
+        /* parser/lexer.nit:1334 */
         REGB13 = TAG_Int(1);
         /* ../lib/standard/kernel.nit:238 */
         REGB13 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB13));
-        /* parser/lexer.nit:1310 */
+        /* parser/lexer.nit:1334 */
         fra.me.REG[2] = NEW_Location_location___Location___init(fra.me.REG[2], REGB12, REGB14, REGB13, REGB9);
-        /* parser/lexer.nit:1311 */
+        /* parser/lexer.nit:1335 */
         ATTR_parser___lexer___Lexer____pos(fra.me.REG[0]) = REGB9;
-        /* parser/lexer.nit:1312 */
+        /* parser/lexer.nit:1336 */
         ATTR_parser___lexer___Lexer____line(fra.me.REG[0]) = REGB10;
         /* ../lib/standard/kernel.nit:238 */
         REGB13 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB8));
-        /* parser/lexer.nit:1313 */
+        /* parser/lexer.nit:1337 */
         ATTR_parser___lexer___Lexer____stream_pos(fra.me.REG[0]) = REGB13;
-        /* parser/lexer.nit:1314 */
+        /* parser/lexer.nit:1338 */
         REGB13 = TAG_Int(0);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB13 = TAG_Bool((REGB7)==(REGB13));
-          /* parser/lexer.nit:1314 */
+          /* parser/lexer.nit:1338 */
           REGB14 = REGB13;
         }
         if (UNTAG_Bool(REGB14)) {
-          /* parser/lexer.nit:1315 */
+          /* parser/lexer.nit:1339 */
           fra.me.REG[3] = NIT_NULL;
           goto label3;
         }
-        /* parser/lexer.nit:1317 */
+        /* parser/lexer.nit:1341 */
         REGB14 = TAG_Int(1);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB14 = TAG_Bool((REGB7)==(REGB14));
-          /* parser/lexer.nit:1317 */
+          /* parser/lexer.nit:1341 */
           REGB13 = REGB14;
         }
         if (UNTAG_Bool(REGB13)) {
-          /* parser/lexer.nit:1318 */
+          /* parser/lexer.nit:1342 */
           fra.me.REG[4] = NEW_TEol_parser___lexer___TEol___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1320 */
+        /* parser/lexer.nit:1344 */
         REGB13 = TAG_Int(2);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB13 = TAG_Bool((REGB7)==(REGB13));
-          /* parser/lexer.nit:1320 */
+          /* parser/lexer.nit:1344 */
           REGB14 = REGB13;
         }
         if (UNTAG_Bool(REGB14)) {
-          /* parser/lexer.nit:1321 */
+          /* parser/lexer.nit:1345 */
           fra.me.REG[4] = NEW_TComment_parser___lexer___TComment___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1323 */
+        /* parser/lexer.nit:1347 */
         REGB14 = TAG_Int(3);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB14 = TAG_Bool((REGB7)==(REGB14));
-          /* parser/lexer.nit:1323 */
+          /* parser/lexer.nit:1347 */
           REGB13 = REGB14;
         }
         if (UNTAG_Bool(REGB13)) {
-          /* parser/lexer.nit:1324 */
+          /* parser/lexer.nit:1348 */
           fra.me.REG[4] = NEW_TKwmodule_parser___lexer___TKwmodule___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1326 */
+        /* parser/lexer.nit:1350 */
         REGB13 = TAG_Int(4);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB13 = TAG_Bool((REGB7)==(REGB13));
-          /* parser/lexer.nit:1326 */
+          /* parser/lexer.nit:1350 */
           REGB14 = REGB13;
         }
         if (UNTAG_Bool(REGB14)) {
-          /* parser/lexer.nit:1327 */
+          /* parser/lexer.nit:1351 */
           fra.me.REG[4] = NEW_TKwimport_parser___lexer___TKwimport___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1329 */
+        /* parser/lexer.nit:1353 */
         REGB14 = TAG_Int(5);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB14 = TAG_Bool((REGB7)==(REGB14));
-          /* parser/lexer.nit:1329 */
+          /* parser/lexer.nit:1353 */
           REGB13 = REGB14;
         }
         if (UNTAG_Bool(REGB13)) {
-          /* parser/lexer.nit:1330 */
+          /* parser/lexer.nit:1354 */
           fra.me.REG[4] = NEW_TKwclass_parser___lexer___TKwclass___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1332 */
+        /* parser/lexer.nit:1356 */
         REGB13 = TAG_Int(6);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB13 = TAG_Bool((REGB7)==(REGB13));
-          /* parser/lexer.nit:1332 */
+          /* parser/lexer.nit:1356 */
           REGB14 = REGB13;
         }
         if (UNTAG_Bool(REGB14)) {
-          /* parser/lexer.nit:1333 */
+          /* parser/lexer.nit:1357 */
           fra.me.REG[4] = NEW_TKwabstract_parser___lexer___TKwabstract___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1335 */
+        /* parser/lexer.nit:1359 */
         REGB14 = TAG_Int(7);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB14 = TAG_Bool((REGB7)==(REGB14));
-          /* parser/lexer.nit:1335 */
+          /* parser/lexer.nit:1359 */
           REGB13 = REGB14;
         }
         if (UNTAG_Bool(REGB13)) {
-          /* parser/lexer.nit:1336 */
+          /* parser/lexer.nit:1360 */
           fra.me.REG[4] = NEW_TKwinterface_parser___lexer___TKwinterface___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1338 */
+        /* parser/lexer.nit:1362 */
         REGB13 = TAG_Int(8);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB13 = TAG_Bool((REGB7)==(REGB13));
-          /* parser/lexer.nit:1338 */
+          /* parser/lexer.nit:1362 */
           REGB14 = REGB13;
         }
         if (UNTAG_Bool(REGB14)) {
-          /* parser/lexer.nit:1339 */
+          /* parser/lexer.nit:1363 */
           fra.me.REG[4] = NEW_TKwenum_parser___lexer___TKwenum___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1341 */
+        /* parser/lexer.nit:1365 */
         REGB14 = TAG_Int(9);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB14 = TAG_Bool((REGB7)==(REGB14));
-          /* parser/lexer.nit:1341 */
+          /* parser/lexer.nit:1365 */
           REGB13 = REGB14;
         }
         if (UNTAG_Bool(REGB13)) {
-          /* parser/lexer.nit:1342 */
-          fra.me.REG[4] = NEW_TKwspecial_parser___lexer___TKwspecial___init_tk(fra.me.REG[2]);
+          /* parser/lexer.nit:1366 */
+          fra.me.REG[4] = NEW_TKwend_parser___lexer___TKwend___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1344 */
+        /* parser/lexer.nit:1368 */
         REGB13 = TAG_Int(10);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB13 = TAG_Bool((REGB7)==(REGB13));
-          /* parser/lexer.nit:1344 */
+          /* parser/lexer.nit:1368 */
           REGB14 = REGB13;
         }
         if (UNTAG_Bool(REGB14)) {
-          /* parser/lexer.nit:1345 */
-          fra.me.REG[4] = NEW_TKwend_parser___lexer___TKwend___init_tk(fra.me.REG[2]);
+          /* parser/lexer.nit:1369 */
+          fra.me.REG[4] = NEW_TKwmeth_parser___lexer___TKwmeth___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1347 */
+        /* parser/lexer.nit:1371 */
         REGB14 = TAG_Int(11);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB14 = TAG_Bool((REGB7)==(REGB14));
-          /* parser/lexer.nit:1347 */
+          /* parser/lexer.nit:1371 */
           REGB13 = REGB14;
         }
         if (UNTAG_Bool(REGB13)) {
-          /* parser/lexer.nit:1348 */
-          fra.me.REG[4] = NEW_TKwmeth_parser___lexer___TKwmeth___init_tk(fra.me.REG[2]);
+          /* parser/lexer.nit:1372 */
+          fra.me.REG[4] = NEW_TKwtype_parser___lexer___TKwtype___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1350 */
+        /* parser/lexer.nit:1374 */
         REGB13 = TAG_Int(12);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB13 = TAG_Bool((REGB7)==(REGB13));
-          /* parser/lexer.nit:1350 */
+          /* parser/lexer.nit:1374 */
           REGB14 = REGB13;
         }
         if (UNTAG_Bool(REGB14)) {
-          /* parser/lexer.nit:1351 */
-          fra.me.REG[4] = NEW_TKwtype_parser___lexer___TKwtype___init_tk(fra.me.REG[2]);
+          /* parser/lexer.nit:1375 */
+          fra.me.REG[4] = NEW_TKwinit_parser___lexer___TKwinit___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1353 */
+        /* parser/lexer.nit:1377 */
         REGB14 = TAG_Int(13);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB14 = TAG_Bool((REGB7)==(REGB14));
-          /* parser/lexer.nit:1353 */
+          /* parser/lexer.nit:1377 */
           REGB13 = REGB14;
         }
         if (UNTAG_Bool(REGB13)) {
-          /* parser/lexer.nit:1354 */
-          fra.me.REG[4] = NEW_TKwinit_parser___lexer___TKwinit___init_tk(fra.me.REG[2]);
+          /* parser/lexer.nit:1378 */
+          fra.me.REG[4] = NEW_TKwredef_parser___lexer___TKwredef___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1356 */
+        /* parser/lexer.nit:1380 */
         REGB13 = TAG_Int(14);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB13 = TAG_Bool((REGB7)==(REGB13));
-          /* parser/lexer.nit:1356 */
+          /* parser/lexer.nit:1380 */
           REGB14 = REGB13;
         }
         if (UNTAG_Bool(REGB14)) {
-          /* parser/lexer.nit:1357 */
-          fra.me.REG[4] = NEW_TKwredef_parser___lexer___TKwredef___init_tk(fra.me.REG[2]);
+          /* parser/lexer.nit:1381 */
+          fra.me.REG[4] = NEW_TKwis_parser___lexer___TKwis___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1359 */
+        /* parser/lexer.nit:1383 */
         REGB14 = TAG_Int(15);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB14 = TAG_Bool((REGB7)==(REGB14));
-          /* parser/lexer.nit:1359 */
+          /* parser/lexer.nit:1383 */
           REGB13 = REGB14;
         }
         if (UNTAG_Bool(REGB13)) {
-          /* parser/lexer.nit:1360 */
-          fra.me.REG[4] = NEW_TKwis_parser___lexer___TKwis___init_tk(fra.me.REG[2]);
+          /* parser/lexer.nit:1384 */
+          fra.me.REG[4] = NEW_TKwdo_parser___lexer___TKwdo___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1362 */
+        /* parser/lexer.nit:1386 */
         REGB13 = TAG_Int(16);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB13 = TAG_Bool((REGB7)==(REGB13));
-          /* parser/lexer.nit:1362 */
+          /* parser/lexer.nit:1386 */
           REGB14 = REGB13;
         }
         if (UNTAG_Bool(REGB14)) {
-          /* parser/lexer.nit:1363 */
-          fra.me.REG[4] = NEW_TKwdo_parser___lexer___TKwdo___init_tk(fra.me.REG[2]);
+          /* parser/lexer.nit:1387 */
+          fra.me.REG[4] = NEW_TKwreadable_parser___lexer___TKwreadable___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1365 */
+        /* parser/lexer.nit:1389 */
         REGB14 = TAG_Int(17);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB14 = TAG_Bool((REGB7)==(REGB14));
-          /* parser/lexer.nit:1365 */
+          /* parser/lexer.nit:1389 */
           REGB13 = REGB14;
         }
         if (UNTAG_Bool(REGB13)) {
-          /* parser/lexer.nit:1366 */
-          fra.me.REG[4] = NEW_TKwreadable_parser___lexer___TKwreadable___init_tk(fra.me.REG[2]);
+          /* parser/lexer.nit:1390 */
+          fra.me.REG[4] = NEW_TKwwritable_parser___lexer___TKwwritable___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1368 */
+        /* parser/lexer.nit:1392 */
         REGB13 = TAG_Int(18);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB13 = TAG_Bool((REGB7)==(REGB13));
-          /* parser/lexer.nit:1368 */
+          /* parser/lexer.nit:1392 */
           REGB14 = REGB13;
         }
         if (UNTAG_Bool(REGB14)) {
-          /* parser/lexer.nit:1369 */
-          fra.me.REG[4] = NEW_TKwwritable_parser___lexer___TKwwritable___init_tk(fra.me.REG[2]);
+          /* parser/lexer.nit:1393 */
+          fra.me.REG[4] = NEW_TKwvar_parser___lexer___TKwvar___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1371 */
+        /* parser/lexer.nit:1395 */
         REGB14 = TAG_Int(19);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB14 = TAG_Bool((REGB7)==(REGB14));
-          /* parser/lexer.nit:1371 */
+          /* parser/lexer.nit:1395 */
           REGB13 = REGB14;
         }
         if (UNTAG_Bool(REGB13)) {
-          /* parser/lexer.nit:1372 */
-          fra.me.REG[4] = NEW_TKwvar_parser___lexer___TKwvar___init_tk(fra.me.REG[2]);
+          /* parser/lexer.nit:1396 */
+          fra.me.REG[4] = NEW_TKwintern_parser___lexer___TKwintern___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1374 */
+        /* parser/lexer.nit:1398 */
         REGB13 = TAG_Int(20);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB13 = TAG_Bool((REGB7)==(REGB13));
-          /* parser/lexer.nit:1374 */
+          /* parser/lexer.nit:1398 */
           REGB14 = REGB13;
         }
         if (UNTAG_Bool(REGB14)) {
-          /* parser/lexer.nit:1375 */
-          fra.me.REG[4] = NEW_TKwintern_parser___lexer___TKwintern___init_tk(fra.me.REG[2]);
+          /* parser/lexer.nit:1399 */
+          fra.me.REG[4] = NEW_TKwextern_parser___lexer___TKwextern___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1377 */
+        /* parser/lexer.nit:1401 */
         REGB14 = TAG_Int(21);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB14 = TAG_Bool((REGB7)==(REGB14));
-          /* parser/lexer.nit:1377 */
+          /* parser/lexer.nit:1401 */
           REGB13 = REGB14;
         }
         if (UNTAG_Bool(REGB13)) {
-          /* parser/lexer.nit:1378 */
-          fra.me.REG[4] = NEW_TKwextern_parser___lexer___TKwextern___init_tk(fra.me.REG[2]);
+          /* parser/lexer.nit:1402 */
+          fra.me.REG[4] = NEW_TKwprotected_parser___lexer___TKwprotected___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1380 */
+        /* parser/lexer.nit:1404 */
         REGB13 = TAG_Int(22);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB13 = TAG_Bool((REGB7)==(REGB13));
-          /* parser/lexer.nit:1380 */
+          /* parser/lexer.nit:1404 */
           REGB14 = REGB13;
         }
         if (UNTAG_Bool(REGB14)) {
-          /* parser/lexer.nit:1381 */
-          fra.me.REG[4] = NEW_TKwprotected_parser___lexer___TKwprotected___init_tk(fra.me.REG[2]);
+          /* parser/lexer.nit:1405 */
+          fra.me.REG[4] = NEW_TKwprivate_parser___lexer___TKwprivate___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1383 */
+        /* parser/lexer.nit:1407 */
         REGB14 = TAG_Int(23);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB14 = TAG_Bool((REGB7)==(REGB14));
-          /* parser/lexer.nit:1383 */
+          /* parser/lexer.nit:1407 */
           REGB13 = REGB14;
         }
         if (UNTAG_Bool(REGB13)) {
-          /* parser/lexer.nit:1384 */
-          fra.me.REG[4] = NEW_TKwprivate_parser___lexer___TKwprivate___init_tk(fra.me.REG[2]);
+          /* parser/lexer.nit:1408 */
+          fra.me.REG[4] = NEW_TKwintrude_parser___lexer___TKwintrude___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
-        /* parser/lexer.nit:1386 */
+        /* parser/lexer.nit:1410 */
         REGB13 = TAG_Int(24);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
           /* ../lib/standard/kernel.nit:230 */
           REGB13 = TAG_Bool((REGB7)==(REGB13));
-          /* parser/lexer.nit:1386 */
-          REGB14 = REGB13;
-        }
-        if (UNTAG_Bool(REGB14)) {
-          /* parser/lexer.nit:1387 */
-          fra.me.REG[4] = NEW_TKwintrude_parser___lexer___TKwintrude___init_tk(fra.me.REG[2]);
-          fra.me.REG[3] = fra.me.REG[4];
-          goto label3;
-        }
-        /* parser/lexer.nit:1389 */
-        REGB14 = TAG_Int(25);
-        REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
-        if (UNTAG_Bool(REGB13)) {
-        } else {
-          /* ../lib/standard/kernel.nit:230 */
-          REGB14 = TAG_Bool((REGB7)==(REGB14));
-          /* parser/lexer.nit:1389 */
-          REGB13 = REGB14;
-        }
-        if (UNTAG_Bool(REGB13)) {
-          /* parser/lexer.nit:1390 */
-          fra.me.REG[4] = NEW_TKwif_parser___lexer___TKwif___init_tk(fra.me.REG[2]);
-          fra.me.REG[3] = fra.me.REG[4];
-          goto label3;
-        }
-        /* parser/lexer.nit:1392 */
-        REGB13 = TAG_Int(26);
-        REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
-        if (UNTAG_Bool(REGB14)) {
-        } else {
-          /* ../lib/standard/kernel.nit:230 */
-          REGB13 = TAG_Bool((REGB7)==(REGB13));
-          /* parser/lexer.nit:1392 */
-          REGB14 = REGB13;
-        }
-        if (UNTAG_Bool(REGB14)) {
-          /* parser/lexer.nit:1393 */
-          fra.me.REG[4] = NEW_TKwthen_parser___lexer___TKwthen___init_tk(fra.me.REG[2]);
-          fra.me.REG[3] = fra.me.REG[4];
-          goto label3;
-        }
-        /* parser/lexer.nit:1395 */
-        REGB14 = TAG_Int(27);
-        REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
-        if (UNTAG_Bool(REGB13)) {
-        } else {
-          /* ../lib/standard/kernel.nit:230 */
-          REGB14 = TAG_Bool((REGB7)==(REGB14));
-          /* parser/lexer.nit:1395 */
-          REGB13 = REGB14;
-        }
-        if (UNTAG_Bool(REGB13)) {
-          /* parser/lexer.nit:1396 */
-          fra.me.REG[4] = NEW_TKwelse_parser___lexer___TKwelse___init_tk(fra.me.REG[2]);
-          fra.me.REG[3] = fra.me.REG[4];
-          goto label3;
-        }
-        /* parser/lexer.nit:1398 */
-        REGB13 = TAG_Int(28);
-        REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
-        if (UNTAG_Bool(REGB14)) {
-        } else {
-          /* ../lib/standard/kernel.nit:230 */
-          REGB13 = TAG_Bool((REGB7)==(REGB13));
-          /* parser/lexer.nit:1398 */
-          REGB14 = REGB13;
-        }
-        if (UNTAG_Bool(REGB14)) {
-          /* parser/lexer.nit:1399 */
-          fra.me.REG[4] = NEW_TKwwhile_parser___lexer___TKwwhile___init_tk(fra.me.REG[2]);
-          fra.me.REG[3] = fra.me.REG[4];
-          goto label3;
-        }
-        /* parser/lexer.nit:1401 */
-        REGB14 = TAG_Int(29);
-        REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
-        if (UNTAG_Bool(REGB13)) {
-        } else {
-          /* ../lib/standard/kernel.nit:230 */
-          REGB14 = TAG_Bool((REGB7)==(REGB14));
-          /* parser/lexer.nit:1401 */
-          REGB13 = REGB14;
-        }
-        if (UNTAG_Bool(REGB13)) {
-          /* parser/lexer.nit:1402 */
-          fra.me.REG[4] = NEW_TKwloop_parser___lexer___TKwloop___init_tk(fra.me.REG[2]);
-          fra.me.REG[3] = fra.me.REG[4];
-          goto label3;
-        }
-        /* parser/lexer.nit:1404 */
-        REGB13 = TAG_Int(30);
-        REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
-        if (UNTAG_Bool(REGB14)) {
-        } else {
-          /* ../lib/standard/kernel.nit:230 */
-          REGB13 = TAG_Bool((REGB7)==(REGB13));
-          /* parser/lexer.nit:1404 */
-          REGB14 = REGB13;
-        }
-        if (UNTAG_Bool(REGB14)) {
-          /* parser/lexer.nit:1405 */
-          fra.me.REG[4] = NEW_TKwfor_parser___lexer___TKwfor___init_tk(fra.me.REG[2]);
-          fra.me.REG[3] = fra.me.REG[4];
-          goto label3;
-        }
-        /* parser/lexer.nit:1407 */
-        REGB14 = TAG_Int(31);
-        REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
-        if (UNTAG_Bool(REGB13)) {
-        } else {
-          /* ../lib/standard/kernel.nit:230 */
-          REGB14 = TAG_Bool((REGB7)==(REGB14));
-          /* parser/lexer.nit:1407 */
-          REGB13 = REGB14;
-        }
-        if (UNTAG_Bool(REGB13)) {
-          /* parser/lexer.nit:1408 */
-          fra.me.REG[4] = NEW_TKwin_parser___lexer___TKwin___init_tk(fra.me.REG[2]);
-          fra.me.REG[3] = fra.me.REG[4];
-          goto label3;
-        }
-        /* parser/lexer.nit:1410 */
-        REGB13 = TAG_Int(32);
-        REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
-        if (UNTAG_Bool(REGB14)) {
-        } else {
-          /* ../lib/standard/kernel.nit:230 */
-          REGB13 = TAG_Bool((REGB7)==(REGB13));
           /* parser/lexer.nit:1410 */
           REGB14 = REGB13;
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1411 */
-          fra.me.REG[4] = NEW_TKwand_parser___lexer___TKwand___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwif_parser___lexer___TKwif___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1413 */
-        REGB14 = TAG_Int(33);
+        REGB14 = TAG_Int(25);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5478,12 +5476,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1414 */
-          fra.me.REG[4] = NEW_TKwor_parser___lexer___TKwor___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwthen_parser___lexer___TKwthen___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1416 */
-        REGB13 = TAG_Int(34);
+        REGB13 = TAG_Int(26);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -5494,12 +5492,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1417 */
-          fra.me.REG[4] = NEW_TKwnot_parser___lexer___TKwnot___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwelse_parser___lexer___TKwelse___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1419 */
-        REGB14 = TAG_Int(35);
+        REGB14 = TAG_Int(27);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5510,12 +5508,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1420 */
-          fra.me.REG[4] = NEW_TKwreturn_parser___lexer___TKwreturn___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwwhile_parser___lexer___TKwwhile___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1422 */
-        REGB13 = TAG_Int(36);
+        REGB13 = TAG_Int(28);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -5526,12 +5524,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1423 */
-          fra.me.REG[4] = NEW_TKwcontinue_parser___lexer___TKwcontinue___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwloop_parser___lexer___TKwloop___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1425 */
-        REGB14 = TAG_Int(37);
+        REGB14 = TAG_Int(29);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5542,12 +5540,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1426 */
-          fra.me.REG[4] = NEW_TKwbreak_parser___lexer___TKwbreak___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwfor_parser___lexer___TKwfor___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1428 */
-        REGB13 = TAG_Int(38);
+        REGB13 = TAG_Int(30);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -5558,12 +5556,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1429 */
-          fra.me.REG[4] = NEW_TKwabort_parser___lexer___TKwabort___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwin_parser___lexer___TKwin___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1431 */
-        REGB14 = TAG_Int(39);
+        REGB14 = TAG_Int(31);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5574,12 +5572,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1432 */
-          fra.me.REG[4] = NEW_TKwassert_parser___lexer___TKwassert___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwand_parser___lexer___TKwand___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1434 */
-        REGB13 = TAG_Int(40);
+        REGB13 = TAG_Int(32);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -5590,12 +5588,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1435 */
-          fra.me.REG[4] = NEW_TKwnew_parser___lexer___TKwnew___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwor_parser___lexer___TKwor___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1437 */
-        REGB14 = TAG_Int(41);
+        REGB14 = TAG_Int(33);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5606,12 +5604,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1438 */
-          fra.me.REG[4] = NEW_TKwisa_parser___lexer___TKwisa___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwnot_parser___lexer___TKwnot___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1440 */
-        REGB13 = TAG_Int(42);
+        REGB13 = TAG_Int(34);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -5622,12 +5620,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1441 */
-          fra.me.REG[4] = NEW_TKwonce_parser___lexer___TKwonce___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwreturn_parser___lexer___TKwreturn___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1443 */
-        REGB14 = TAG_Int(43);
+        REGB14 = TAG_Int(35);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5638,12 +5636,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1444 */
-          fra.me.REG[4] = NEW_TKwsuper_parser___lexer___TKwsuper___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwcontinue_parser___lexer___TKwcontinue___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1446 */
-        REGB13 = TAG_Int(44);
+        REGB13 = TAG_Int(36);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -5654,12 +5652,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1447 */
-          fra.me.REG[4] = NEW_TKwself_parser___lexer___TKwself___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwbreak_parser___lexer___TKwbreak___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1449 */
-        REGB14 = TAG_Int(45);
+        REGB14 = TAG_Int(37);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5670,12 +5668,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1450 */
-          fra.me.REG[4] = NEW_TKwtrue_parser___lexer___TKwtrue___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwabort_parser___lexer___TKwabort___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1452 */
-        REGB13 = TAG_Int(46);
+        REGB13 = TAG_Int(38);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -5686,12 +5684,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1453 */
-          fra.me.REG[4] = NEW_TKwfalse_parser___lexer___TKwfalse___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwassert_parser___lexer___TKwassert___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1455 */
-        REGB14 = TAG_Int(47);
+        REGB14 = TAG_Int(39);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5702,12 +5700,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1456 */
-          fra.me.REG[4] = NEW_TKwnull_parser___lexer___TKwnull___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwnew_parser___lexer___TKwnew___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1458 */
-        REGB13 = TAG_Int(48);
+        REGB13 = TAG_Int(40);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -5718,12 +5716,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1459 */
-          fra.me.REG[4] = NEW_TKwas_parser___lexer___TKwas___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwisa_parser___lexer___TKwisa___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1461 */
-        REGB14 = TAG_Int(49);
+        REGB14 = TAG_Int(41);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5734,12 +5732,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1462 */
-          fra.me.REG[4] = NEW_TKwnullable_parser___lexer___TKwnullable___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwonce_parser___lexer___TKwonce___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1464 */
-        REGB13 = TAG_Int(50);
+        REGB13 = TAG_Int(42);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -5750,12 +5748,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1465 */
-          fra.me.REG[4] = NEW_TKwisset_parser___lexer___TKwisset___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwsuper_parser___lexer___TKwsuper___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1467 */
-        REGB14 = TAG_Int(51);
+        REGB14 = TAG_Int(43);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5766,12 +5764,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1468 */
-          fra.me.REG[4] = NEW_TKwlabel_parser___lexer___TKwlabel___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwself_parser___lexer___TKwself___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1470 */
-        REGB13 = TAG_Int(52);
+        REGB13 = TAG_Int(44);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -5782,12 +5780,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1471 */
-          fra.me.REG[4] = NEW_TKwdebug_parser___lexer___TKwdebug___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwtrue_parser___lexer___TKwtrue___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1473 */
-        REGB14 = TAG_Int(53);
+        REGB14 = TAG_Int(45);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5798,12 +5796,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1474 */
-          fra.me.REG[4] = NEW_TOpar_parser___lexer___TOpar___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwfalse_parser___lexer___TKwfalse___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1476 */
-        REGB13 = TAG_Int(54);
+        REGB13 = TAG_Int(46);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -5814,12 +5812,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1477 */
-          fra.me.REG[4] = NEW_TCpar_parser___lexer___TCpar___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwnull_parser___lexer___TKwnull___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1479 */
-        REGB14 = TAG_Int(55);
+        REGB14 = TAG_Int(47);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5830,12 +5828,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1480 */
-          fra.me.REG[4] = NEW_TObra_parser___lexer___TObra___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwas_parser___lexer___TKwas___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1482 */
-        REGB13 = TAG_Int(56);
+        REGB13 = TAG_Int(48);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -5846,12 +5844,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1483 */
-          fra.me.REG[4] = NEW_TCbra_parser___lexer___TCbra___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwnullable_parser___lexer___TKwnullable___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1485 */
-        REGB14 = TAG_Int(57);
+        REGB14 = TAG_Int(49);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5862,12 +5860,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1486 */
-          fra.me.REG[4] = NEW_TComma_parser___lexer___TComma___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwisset_parser___lexer___TKwisset___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1488 */
-        REGB13 = TAG_Int(58);
+        REGB13 = TAG_Int(50);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -5878,12 +5876,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1489 */
-          fra.me.REG[4] = NEW_TColumn_parser___lexer___TColumn___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwlabel_parser___lexer___TKwlabel___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1491 */
-        REGB14 = TAG_Int(59);
+        REGB14 = TAG_Int(51);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5894,12 +5892,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1492 */
-          fra.me.REG[4] = NEW_TQuad_parser___lexer___TQuad___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TKwdebug_parser___lexer___TKwdebug___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1494 */
-        REGB13 = TAG_Int(60);
+        REGB13 = TAG_Int(52);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -5910,12 +5908,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1495 */
-          fra.me.REG[4] = NEW_TAssign_parser___lexer___TAssign___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TOpar_parser___lexer___TOpar___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1497 */
-        REGB14 = TAG_Int(61);
+        REGB14 = TAG_Int(53);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5926,12 +5924,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1498 */
-          fra.me.REG[4] = NEW_TPluseq_parser___lexer___TPluseq___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TCpar_parser___lexer___TCpar___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1500 */
-        REGB13 = TAG_Int(62);
+        REGB13 = TAG_Int(54);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -5942,12 +5940,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1501 */
-          fra.me.REG[4] = NEW_TMinuseq_parser___lexer___TMinuseq___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TObra_parser___lexer___TObra___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1503 */
-        REGB14 = TAG_Int(63);
+        REGB14 = TAG_Int(55);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5958,12 +5956,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1504 */
-          fra.me.REG[4] = NEW_TDotdotdot_parser___lexer___TDotdotdot___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TCbra_parser___lexer___TCbra___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1506 */
-        REGB13 = TAG_Int(64);
+        REGB13 = TAG_Int(56);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -5974,12 +5972,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1507 */
-          fra.me.REG[4] = NEW_TDotdot_parser___lexer___TDotdot___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TComma_parser___lexer___TComma___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1509 */
-        REGB14 = TAG_Int(65);
+        REGB14 = TAG_Int(57);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -5990,12 +5988,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1510 */
-          fra.me.REG[4] = NEW_TDot_parser___lexer___TDot___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TColumn_parser___lexer___TColumn___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1512 */
-        REGB13 = TAG_Int(66);
+        REGB13 = TAG_Int(58);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -6006,12 +6004,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1513 */
-          fra.me.REG[4] = NEW_TPlus_parser___lexer___TPlus___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TQuad_parser___lexer___TQuad___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1515 */
-        REGB14 = TAG_Int(67);
+        REGB14 = TAG_Int(59);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -6022,12 +6020,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1516 */
-          fra.me.REG[4] = NEW_TMinus_parser___lexer___TMinus___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TAssign_parser___lexer___TAssign___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1518 */
-        REGB13 = TAG_Int(68);
+        REGB13 = TAG_Int(60);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -6038,12 +6036,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1519 */
-          fra.me.REG[4] = NEW_TStar_parser___lexer___TStar___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TPluseq_parser___lexer___TPluseq___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1521 */
-        REGB14 = TAG_Int(69);
+        REGB14 = TAG_Int(61);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -6054,12 +6052,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1522 */
-          fra.me.REG[4] = NEW_TSlash_parser___lexer___TSlash___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TMinuseq_parser___lexer___TMinuseq___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1524 */
-        REGB13 = TAG_Int(70);
+        REGB13 = TAG_Int(62);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -6070,12 +6068,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1525 */
-          fra.me.REG[4] = NEW_TPercent_parser___lexer___TPercent___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TDotdotdot_parser___lexer___TDotdotdot___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1527 */
-        REGB14 = TAG_Int(71);
+        REGB14 = TAG_Int(63);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -6086,12 +6084,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1528 */
-          fra.me.REG[4] = NEW_TEq_parser___lexer___TEq___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TDotdot_parser___lexer___TDotdot___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1530 */
-        REGB13 = TAG_Int(72);
+        REGB13 = TAG_Int(64);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -6102,12 +6100,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1531 */
-          fra.me.REG[4] = NEW_TNe_parser___lexer___TNe___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TDot_parser___lexer___TDot___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1533 */
-        REGB14 = TAG_Int(73);
+        REGB14 = TAG_Int(65);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -6118,12 +6116,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1534 */
-          fra.me.REG[4] = NEW_TLt_parser___lexer___TLt___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TPlus_parser___lexer___TPlus___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1536 */
-        REGB13 = TAG_Int(74);
+        REGB13 = TAG_Int(66);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -6134,12 +6132,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1537 */
-          fra.me.REG[4] = NEW_TLe_parser___lexer___TLe___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TMinus_parser___lexer___TMinus___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1539 */
-        REGB14 = TAG_Int(75);
+        REGB14 = TAG_Int(67);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -6150,12 +6148,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1540 */
-          fra.me.REG[4] = NEW_TLl_parser___lexer___TLl___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TStar_parser___lexer___TStar___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1542 */
-        REGB13 = TAG_Int(76);
+        REGB13 = TAG_Int(68);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -6166,12 +6164,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1543 */
-          fra.me.REG[4] = NEW_TGt_parser___lexer___TGt___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TSlash_parser___lexer___TSlash___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1545 */
-        REGB14 = TAG_Int(77);
+        REGB14 = TAG_Int(69);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -6182,12 +6180,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1546 */
-          fra.me.REG[4] = NEW_TGe_parser___lexer___TGe___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TPercent_parser___lexer___TPercent___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1548 */
-        REGB13 = TAG_Int(78);
+        REGB13 = TAG_Int(70);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -6198,12 +6196,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1549 */
-          fra.me.REG[4] = NEW_TGg_parser___lexer___TGg___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TEq_parser___lexer___TEq___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1551 */
-        REGB14 = TAG_Int(79);
+        REGB14 = TAG_Int(71);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -6214,12 +6212,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1552 */
-          fra.me.REG[4] = NEW_TStarship_parser___lexer___TStarship___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TNe_parser___lexer___TNe___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1554 */
-        REGB13 = TAG_Int(80);
+        REGB13 = TAG_Int(72);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -6230,12 +6228,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1555 */
-          fra.me.REG[4] = NEW_TBang_parser___lexer___TBang___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TLt_parser___lexer___TLt___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1557 */
-        REGB14 = TAG_Int(81);
+        REGB14 = TAG_Int(73);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -6246,12 +6244,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1558 */
-          fra.me.REG[4] = NEW_TClassid_parser___lexer___TClassid___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TLe_parser___lexer___TLe___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1560 */
-        REGB13 = TAG_Int(82);
+        REGB13 = TAG_Int(74);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -6262,12 +6260,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1561 */
-          fra.me.REG[4] = NEW_TId_parser___lexer___TId___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TLl_parser___lexer___TLl___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1563 */
-        REGB14 = TAG_Int(83);
+        REGB14 = TAG_Int(75);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -6278,12 +6276,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1564 */
-          fra.me.REG[4] = NEW_TAttrid_parser___lexer___TAttrid___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TGt_parser___lexer___TGt___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1566 */
-        REGB13 = TAG_Int(84);
+        REGB13 = TAG_Int(76);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -6294,12 +6292,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1567 */
-          fra.me.REG[4] = NEW_TNumber_parser___lexer___TNumber___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TGe_parser___lexer___TGe___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1569 */
-        REGB14 = TAG_Int(85);
+        REGB14 = TAG_Int(77);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -6310,12 +6308,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1570 */
-          fra.me.REG[4] = NEW_TFloat_parser___lexer___TFloat___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TGg_parser___lexer___TGg___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1572 */
-        REGB13 = TAG_Int(86);
+        REGB13 = TAG_Int(78);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -6326,12 +6324,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1573 */
-          fra.me.REG[4] = NEW_TChar_parser___lexer___TChar___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TStarship_parser___lexer___TStarship___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1575 */
-        REGB14 = TAG_Int(87);
+        REGB14 = TAG_Int(79);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -6342,12 +6340,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1576 */
-          fra.me.REG[4] = NEW_TString_parser___lexer___TString___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TBang_parser___lexer___TBang___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1578 */
-        REGB13 = TAG_Int(88);
+        REGB13 = TAG_Int(80);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -6358,12 +6356,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1579 */
-          fra.me.REG[4] = NEW_TStartString_parser___lexer___TStartString___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TAt_parser___lexer___TAt___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1581 */
-        REGB14 = TAG_Int(89);
+        REGB14 = TAG_Int(81);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -6374,12 +6372,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1582 */
-          fra.me.REG[4] = NEW_TMidString_parser___lexer___TMidString___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TClassid_parser___lexer___TClassid___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1584 */
-        REGB13 = TAG_Int(90);
+        REGB13 = TAG_Int(82);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -6390,12 +6388,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1585 */
-          fra.me.REG[4] = NEW_TEndString_parser___lexer___TEndString___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TId_parser___lexer___TId___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1587 */
-        REGB14 = TAG_Int(91);
+        REGB14 = TAG_Int(83);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -6406,12 +6404,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1588 */
-          fra.me.REG[4] = NEW_TBadChar_parser___lexer___TBadChar___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TAttrid_parser___lexer___TAttrid___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1590 */
-        REGB13 = TAG_Int(92);
+        REGB13 = TAG_Int(84);
         REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
         if (UNTAG_Bool(REGB14)) {
         } else {
@@ -6422,12 +6420,12 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB14)) {
           /* parser/lexer.nit:1591 */
-          fra.me.REG[4] = NEW_TBadString_parser___lexer___TBadString___init_tk(fra.me.REG[2]);
+          fra.me.REG[4] = NEW_TNumber_parser___lexer___TNumber___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         }
         /* parser/lexer.nit:1593 */
-        REGB14 = TAG_Int(93);
+        REGB14 = TAG_Int(85);
         REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
         if (UNTAG_Bool(REGB13)) {
         } else {
@@ -6438,36 +6436,164 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         if (UNTAG_Bool(REGB13)) {
           /* parser/lexer.nit:1594 */
+          fra.me.REG[4] = NEW_TFloat_parser___lexer___TFloat___init_tk(fra.me.REG[2]);
+          fra.me.REG[3] = fra.me.REG[4];
+          goto label3;
+        }
+        /* parser/lexer.nit:1596 */
+        REGB13 = TAG_Int(86);
+        REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
+        if (UNTAG_Bool(REGB14)) {
+        } else {
+          /* ../lib/standard/kernel.nit:230 */
+          REGB13 = TAG_Bool((REGB7)==(REGB13));
+          /* parser/lexer.nit:1596 */
+          REGB14 = REGB13;
+        }
+        if (UNTAG_Bool(REGB14)) {
+          /* parser/lexer.nit:1597 */
+          fra.me.REG[4] = NEW_TString_parser___lexer___TString___init_tk(fra.me.REG[2]);
+          fra.me.REG[3] = fra.me.REG[4];
+          goto label3;
+        }
+        /* parser/lexer.nit:1599 */
+        REGB14 = TAG_Int(87);
+        REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
+        if (UNTAG_Bool(REGB13)) {
+        } else {
+          /* ../lib/standard/kernel.nit:230 */
+          REGB14 = TAG_Bool((REGB7)==(REGB14));
+          /* parser/lexer.nit:1599 */
+          REGB13 = REGB14;
+        }
+        if (UNTAG_Bool(REGB13)) {
+          /* parser/lexer.nit:1600 */
+          fra.me.REG[4] = NEW_TStartString_parser___lexer___TStartString___init_tk(fra.me.REG[2]);
+          fra.me.REG[3] = fra.me.REG[4];
+          goto label3;
+        }
+        /* parser/lexer.nit:1602 */
+        REGB13 = TAG_Int(88);
+        REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
+        if (UNTAG_Bool(REGB14)) {
+        } else {
+          /* ../lib/standard/kernel.nit:230 */
+          REGB13 = TAG_Bool((REGB7)==(REGB13));
+          /* parser/lexer.nit:1602 */
+          REGB14 = REGB13;
+        }
+        if (UNTAG_Bool(REGB14)) {
+          /* parser/lexer.nit:1603 */
+          fra.me.REG[4] = NEW_TMidString_parser___lexer___TMidString___init_tk(fra.me.REG[2]);
+          fra.me.REG[3] = fra.me.REG[4];
+          goto label3;
+        }
+        /* parser/lexer.nit:1605 */
+        REGB14 = TAG_Int(89);
+        REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
+        if (UNTAG_Bool(REGB13)) {
+        } else {
+          /* ../lib/standard/kernel.nit:230 */
+          REGB14 = TAG_Bool((REGB7)==(REGB14));
+          /* parser/lexer.nit:1605 */
+          REGB13 = REGB14;
+        }
+        if (UNTAG_Bool(REGB13)) {
+          /* parser/lexer.nit:1606 */
+          fra.me.REG[4] = NEW_TEndString_parser___lexer___TEndString___init_tk(fra.me.REG[2]);
+          fra.me.REG[3] = fra.me.REG[4];
+          goto label3;
+        }
+        /* parser/lexer.nit:1608 */
+        REGB13 = TAG_Int(90);
+        REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
+        if (UNTAG_Bool(REGB14)) {
+        } else {
+          /* ../lib/standard/kernel.nit:230 */
+          REGB13 = TAG_Bool((REGB7)==(REGB13));
+          /* parser/lexer.nit:1608 */
+          REGB14 = REGB13;
+        }
+        if (UNTAG_Bool(REGB14)) {
+          /* parser/lexer.nit:1609 */
+          fra.me.REG[4] = NEW_TChar_parser___lexer___TChar___init_tk(fra.me.REG[2]);
+          fra.me.REG[3] = fra.me.REG[4];
+          goto label3;
+        }
+        /* parser/lexer.nit:1611 */
+        REGB14 = TAG_Int(91);
+        REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
+        if (UNTAG_Bool(REGB13)) {
+        } else {
+          /* ../lib/standard/kernel.nit:230 */
+          REGB14 = TAG_Bool((REGB7)==(REGB14));
+          /* parser/lexer.nit:1611 */
+          REGB13 = REGB14;
+        }
+        if (UNTAG_Bool(REGB13)) {
+          /* parser/lexer.nit:1612 */
+          fra.me.REG[4] = NEW_TBadString_parser___lexer___TBadString___init_tk(fra.me.REG[2]);
+          fra.me.REG[3] = fra.me.REG[4];
+          goto label3;
+        }
+        /* parser/lexer.nit:1614 */
+        REGB13 = TAG_Int(92);
+        REGB14 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB13));
+        if (UNTAG_Bool(REGB14)) {
+        } else {
+          /* ../lib/standard/kernel.nit:230 */
+          REGB13 = TAG_Bool((REGB7)==(REGB13));
+          /* parser/lexer.nit:1614 */
+          REGB14 = REGB13;
+        }
+        if (UNTAG_Bool(REGB14)) {
+          /* parser/lexer.nit:1615 */
+          fra.me.REG[4] = NEW_TBadChar_parser___lexer___TBadChar___init_tk(fra.me.REG[2]);
+          fra.me.REG[3] = fra.me.REG[4];
+          goto label3;
+        }
+        /* parser/lexer.nit:1617 */
+        REGB14 = TAG_Int(93);
+        REGB13 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB14));
+        if (UNTAG_Bool(REGB13)) {
+        } else {
+          /* ../lib/standard/kernel.nit:230 */
+          REGB14 = TAG_Bool((REGB7)==(REGB14));
+          /* parser/lexer.nit:1617 */
+          REGB13 = REGB14;
+        }
+        if (UNTAG_Bool(REGB13)) {
+          /* parser/lexer.nit:1618 */
           fra.me.REG[2] = NEW_TExternCodeSegment_parser___lexer___TExternCodeSegment___init_tk(fra.me.REG[2]);
           fra.me.REG[3] = fra.me.REG[2];
           goto label3;
         }
       } else {
-        /* parser/lexer.nit:1597 */
+        /* parser/lexer.nit:1621 */
         ATTR_parser___lexer___Lexer____stream_pos(fra.me.REG[0]) = REGB1;
-        /* parser/lexer.nit:1598 */
+        /* parser/lexer.nit:1622 */
         REGB13 = TAG_Bool(ATTR_parser___lexer___Lexer____file(fra.me.REG[0])!=NIT_NULL);
         if (UNTAG_Bool(REGB13)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_file", LOCATE_parser___lexer, 1598);
+          nit_abort("Uninitialized attribute %s", "_file", LOCATE_parser___lexer, 1622);
         }
         fra.me.REG[2] = ATTR_parser___lexer___Lexer____file(fra.me.REG[0]);
         REGB13 = TAG_Int(1);
         /* ../lib/standard/kernel.nit:238 */
         REGB13 = TAG_Int(UNTAG_Int(REGB4)+UNTAG_Int(REGB13));
-        /* parser/lexer.nit:1598 */
+        /* parser/lexer.nit:1622 */
         REGB14 = TAG_Int(1);
         /* ../lib/standard/kernel.nit:238 */
         REGB14 = TAG_Int(UNTAG_Int(REGB4)+UNTAG_Int(REGB14));
-        /* parser/lexer.nit:1598 */
+        /* parser/lexer.nit:1622 */
         REGB12 = TAG_Int(1);
         /* ../lib/standard/kernel.nit:238 */
         REGB12 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB12));
-        /* parser/lexer.nit:1598 */
+        /* parser/lexer.nit:1622 */
         REGB11 = TAG_Int(1);
         /* ../lib/standard/kernel.nit:238 */
         REGB11 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB11));
-        /* parser/lexer.nit:1598 */
+        /* parser/lexer.nit:1622 */
         fra.me.REG[2] = NEW_Location_location___Location___init(fra.me.REG[2], REGB13, REGB14, REGB12, REGB11);
         REGB11 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
         if (UNTAG_Bool(REGB11)) {
@@ -6476,13 +6602,13 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
         }
         /* ../lib/standard/kernel.nit:237 */
         REGB11 = TAG_Bool(UNTAG_Int(REGB1)>UNTAG_Int(REGB2));
-        /* parser/lexer.nit:1599 */
+        /* parser/lexer.nit:1623 */
         if (UNTAG_Bool(REGB11)) {
           /* ../lib/standard/kernel.nit:240 */
           REGB11 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB2));
-          /* parser/lexer.nit:1600 */
+          /* parser/lexer.nit:1624 */
           fra.me.REG[4] = CALL_standard___string___AbstractString___substring(fra.me.REG[1])(fra.me.REG[1], REGB2, REGB11);
-          /* parser/lexer.nit:1601 */
+          /* parser/lexer.nit:1625 */
           REGB11 = TAG_Int(3);
           fra.me.REG[5] = NEW_Array_standard___collection___array___Array___with_capacity(REGB11);
           if (!once_value_4) {
@@ -6496,23 +6622,23 @@ val_t parser___lexer___Lexer___get_token(val_t p0){
           CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
           CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
           if (!once_value_5) {
-            fra.me.REG[4] = BOX_NativeString(".");
+            fra.me.REG[6] = BOX_NativeString(".");
             REGB11 = TAG_Int(1);
-            fra.me.REG[4] = NEW_String_standard___string___String___with_native(fra.me.REG[4], REGB11);
-            once_value_5 = fra.me.REG[4];
+            fra.me.REG[6] = NEW_String_standard___string___String___with_native(fra.me.REG[6], REGB11);
+            once_value_5 = fra.me.REG[6];
             register_static_object(&once_value_5);
-          } else fra.me.REG[4] = once_value_5;
-          fra.me.REG[4] = fra.me.REG[4];
-          CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+          } else fra.me.REG[6] = once_value_5;
+          fra.me.REG[6] = fra.me.REG[6];
+          CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
           fra.me.REG[5] = CALL_standard___string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
-          fra.me.REG[5] = NEW_AError_parser___lexer___AError___init_error(fra.me.REG[5], fra.me.REG[2]);
-          /* parser/lexer.nit:1602 */
-          fra.me.REG[3] = fra.me.REG[5];
+          fra.me.REG[4] = NEW_ALexerError_parser___lexer___ALexerError___init_lexer_error(fra.me.REG[5], fra.me.REG[2], fra.me.REG[4]);
+          /* parser/lexer.nit:1626 */
+          fra.me.REG[3] = fra.me.REG[4];
           goto label3;
         } else {
-          /* parser/lexer.nit:1604 */
-          fra.me.REG[2] = NEW_EOF_parser___lexer___EOF___init(fra.me.REG[2]);
-          /* parser/lexer.nit:1605 */
+          /* parser/lexer.nit:1628 */
+          fra.me.REG[2] = NEW_EOF_parser___lexer___EOF___init_tk(fra.me.REG[2]);
+          /* parser/lexer.nit:1629 */
           fra.me.REG[3] = fra.me.REG[2];
           goto label3;
         }
index 9fa9f78..396ed4c 100644 (file)
@@ -18,113 +18,121 @@ extern const int SFT_parser___lexer[];
 #define CALL_parser___lexer___TKwabstract___init_tk(recv) ((parser___lexer___TKwabstract___init_tk_t)CALL((recv), (SFT_parser___lexer[7] + 0)))
 #define CALL_parser___lexer___TKwinterface___init_tk(recv) ((parser___lexer___TKwinterface___init_tk_t)CALL((recv), (SFT_parser___lexer[8] + 0)))
 #define CALL_parser___lexer___TKwenum___init_tk(recv) ((parser___lexer___TKwenum___init_tk_t)CALL((recv), (SFT_parser___lexer[9] + 0)))
-#define CALL_parser___lexer___TKwspecial___init_tk(recv) ((parser___lexer___TKwspecial___init_tk_t)CALL((recv), (SFT_parser___lexer[10] + 0)))
-#define CALL_parser___lexer___TKwend___init_tk(recv) ((parser___lexer___TKwend___init_tk_t)CALL((recv), (SFT_parser___lexer[11] + 0)))
-#define CALL_parser___lexer___TKwmeth___init_tk(recv) ((parser___lexer___TKwmeth___init_tk_t)CALL((recv), (SFT_parser___lexer[12] + 0)))
-#define CALL_parser___lexer___TKwtype___init_tk(recv) ((parser___lexer___TKwtype___init_tk_t)CALL((recv), (SFT_parser___lexer[13] + 0)))
-#define CALL_parser___lexer___TKwinit___init_tk(recv) ((parser___lexer___TKwinit___init_tk_t)CALL((recv), (SFT_parser___lexer[14] + 0)))
-#define CALL_parser___lexer___TKwredef___init_tk(recv) ((parser___lexer___TKwredef___init_tk_t)CALL((recv), (SFT_parser___lexer[15] + 0)))
-#define CALL_parser___lexer___TKwis___init_tk(recv) ((parser___lexer___TKwis___init_tk_t)CALL((recv), (SFT_parser___lexer[16] + 0)))
-#define CALL_parser___lexer___TKwdo___init_tk(recv) ((parser___lexer___TKwdo___init_tk_t)CALL((recv), (SFT_parser___lexer[17] + 0)))
-#define CALL_parser___lexer___TKwreadable___init_tk(recv) ((parser___lexer___TKwreadable___init_tk_t)CALL((recv), (SFT_parser___lexer[18] + 0)))
-#define CALL_parser___lexer___TKwwritable___init_tk(recv) ((parser___lexer___TKwwritable___init_tk_t)CALL((recv), (SFT_parser___lexer[19] + 0)))
-#define CALL_parser___lexer___TKwvar___init_tk(recv) ((parser___lexer___TKwvar___init_tk_t)CALL((recv), (SFT_parser___lexer[20] + 0)))
-#define CALL_parser___lexer___TKwintern___init_tk(recv) ((parser___lexer___TKwintern___init_tk_t)CALL((recv), (SFT_parser___lexer[21] + 0)))
-#define CALL_parser___lexer___TKwextern___init_tk(recv) ((parser___lexer___TKwextern___init_tk_t)CALL((recv), (SFT_parser___lexer[22] + 0)))
-#define CALL_parser___lexer___TKwprotected___init_tk(recv) ((parser___lexer___TKwprotected___init_tk_t)CALL((recv), (SFT_parser___lexer[23] + 0)))
-#define CALL_parser___lexer___TKwprivate___init_tk(recv) ((parser___lexer___TKwprivate___init_tk_t)CALL((recv), (SFT_parser___lexer[24] + 0)))
-#define CALL_parser___lexer___TKwintrude___init_tk(recv) ((parser___lexer___TKwintrude___init_tk_t)CALL((recv), (SFT_parser___lexer[25] + 0)))
-#define CALL_parser___lexer___TKwif___init_tk(recv) ((parser___lexer___TKwif___init_tk_t)CALL((recv), (SFT_parser___lexer[26] + 0)))
-#define CALL_parser___lexer___TKwthen___init_tk(recv) ((parser___lexer___TKwthen___init_tk_t)CALL((recv), (SFT_parser___lexer[27] + 0)))
-#define CALL_parser___lexer___TKwelse___init_tk(recv) ((parser___lexer___TKwelse___init_tk_t)CALL((recv), (SFT_parser___lexer[28] + 0)))
-#define CALL_parser___lexer___TKwwhile___init_tk(recv) ((parser___lexer___TKwwhile___init_tk_t)CALL((recv), (SFT_parser___lexer[29] + 0)))
-#define CALL_parser___lexer___TKwloop___init_tk(recv) ((parser___lexer___TKwloop___init_tk_t)CALL((recv), (SFT_parser___lexer[30] + 0)))
-#define CALL_parser___lexer___TKwfor___init_tk(recv) ((parser___lexer___TKwfor___init_tk_t)CALL((recv), (SFT_parser___lexer[31] + 0)))
-#define CALL_parser___lexer___TKwin___init_tk(recv) ((parser___lexer___TKwin___init_tk_t)CALL((recv), (SFT_parser___lexer[32] + 0)))
-#define CALL_parser___lexer___TKwand___init_tk(recv) ((parser___lexer___TKwand___init_tk_t)CALL((recv), (SFT_parser___lexer[33] + 0)))
-#define CALL_parser___lexer___TKwor___init_tk(recv) ((parser___lexer___TKwor___init_tk_t)CALL((recv), (SFT_parser___lexer[34] + 0)))
-#define CALL_parser___lexer___TKwnot___init_tk(recv) ((parser___lexer___TKwnot___init_tk_t)CALL((recv), (SFT_parser___lexer[35] + 0)))
-#define CALL_parser___lexer___TKwreturn___init_tk(recv) ((parser___lexer___TKwreturn___init_tk_t)CALL((recv), (SFT_parser___lexer[36] + 0)))
-#define CALL_parser___lexer___TKwcontinue___init_tk(recv) ((parser___lexer___TKwcontinue___init_tk_t)CALL((recv), (SFT_parser___lexer[37] + 0)))
-#define CALL_parser___lexer___TKwbreak___init_tk(recv) ((parser___lexer___TKwbreak___init_tk_t)CALL((recv), (SFT_parser___lexer[38] + 0)))
-#define CALL_parser___lexer___TKwabort___init_tk(recv) ((parser___lexer___TKwabort___init_tk_t)CALL((recv), (SFT_parser___lexer[39] + 0)))
-#define CALL_parser___lexer___TKwassert___init_tk(recv) ((parser___lexer___TKwassert___init_tk_t)CALL((recv), (SFT_parser___lexer[40] + 0)))
-#define CALL_parser___lexer___TKwnew___init_tk(recv) ((parser___lexer___TKwnew___init_tk_t)CALL((recv), (SFT_parser___lexer[41] + 0)))
-#define CALL_parser___lexer___TKwisa___init_tk(recv) ((parser___lexer___TKwisa___init_tk_t)CALL((recv), (SFT_parser___lexer[42] + 0)))
-#define CALL_parser___lexer___TKwonce___init_tk(recv) ((parser___lexer___TKwonce___init_tk_t)CALL((recv), (SFT_parser___lexer[43] + 0)))
-#define CALL_parser___lexer___TKwsuper___init_tk(recv) ((parser___lexer___TKwsuper___init_tk_t)CALL((recv), (SFT_parser___lexer[44] + 0)))
-#define CALL_parser___lexer___TKwself___init_tk(recv) ((parser___lexer___TKwself___init_tk_t)CALL((recv), (SFT_parser___lexer[45] + 0)))
-#define CALL_parser___lexer___TKwtrue___init_tk(recv) ((parser___lexer___TKwtrue___init_tk_t)CALL((recv), (SFT_parser___lexer[46] + 0)))
-#define CALL_parser___lexer___TKwfalse___init_tk(recv) ((parser___lexer___TKwfalse___init_tk_t)CALL((recv), (SFT_parser___lexer[47] + 0)))
-#define CALL_parser___lexer___TKwnull___init_tk(recv) ((parser___lexer___TKwnull___init_tk_t)CALL((recv), (SFT_parser___lexer[48] + 0)))
-#define CALL_parser___lexer___TKwas___init_tk(recv) ((parser___lexer___TKwas___init_tk_t)CALL((recv), (SFT_parser___lexer[49] + 0)))
-#define CALL_parser___lexer___TKwnullable___init_tk(recv) ((parser___lexer___TKwnullable___init_tk_t)CALL((recv), (SFT_parser___lexer[50] + 0)))
-#define CALL_parser___lexer___TKwisset___init_tk(recv) ((parser___lexer___TKwisset___init_tk_t)CALL((recv), (SFT_parser___lexer[51] + 0)))
-#define CALL_parser___lexer___TKwlabel___init_tk(recv) ((parser___lexer___TKwlabel___init_tk_t)CALL((recv), (SFT_parser___lexer[52] + 0)))
-#define CALL_parser___lexer___TKwdebug___init_tk(recv) ((parser___lexer___TKwdebug___init_tk_t)CALL((recv), (SFT_parser___lexer[53] + 0)))
-#define CALL_parser___lexer___TOpar___init_tk(recv) ((parser___lexer___TOpar___init_tk_t)CALL((recv), (SFT_parser___lexer[54] + 0)))
-#define CALL_parser___lexer___TCpar___init_tk(recv) ((parser___lexer___TCpar___init_tk_t)CALL((recv), (SFT_parser___lexer[55] + 0)))
-#define CALL_parser___lexer___TObra___init_tk(recv) ((parser___lexer___TObra___init_tk_t)CALL((recv), (SFT_parser___lexer[56] + 0)))
-#define CALL_parser___lexer___TCbra___init_tk(recv) ((parser___lexer___TCbra___init_tk_t)CALL((recv), (SFT_parser___lexer[57] + 0)))
-#define CALL_parser___lexer___TComma___init_tk(recv) ((parser___lexer___TComma___init_tk_t)CALL((recv), (SFT_parser___lexer[58] + 0)))
-#define CALL_parser___lexer___TColumn___init_tk(recv) ((parser___lexer___TColumn___init_tk_t)CALL((recv), (SFT_parser___lexer[59] + 0)))
-#define CALL_parser___lexer___TQuad___init_tk(recv) ((parser___lexer___TQuad___init_tk_t)CALL((recv), (SFT_parser___lexer[60] + 0)))
-#define CALL_parser___lexer___TAssign___init_tk(recv) ((parser___lexer___TAssign___init_tk_t)CALL((recv), (SFT_parser___lexer[61] + 0)))
-#define CALL_parser___lexer___TPluseq___init_tk(recv) ((parser___lexer___TPluseq___init_tk_t)CALL((recv), (SFT_parser___lexer[62] + 0)))
-#define CALL_parser___lexer___TMinuseq___init_tk(recv) ((parser___lexer___TMinuseq___init_tk_t)CALL((recv), (SFT_parser___lexer[63] + 0)))
-#define CALL_parser___lexer___TDotdotdot___init_tk(recv) ((parser___lexer___TDotdotdot___init_tk_t)CALL((recv), (SFT_parser___lexer[64] + 0)))
-#define CALL_parser___lexer___TDotdot___init_tk(recv) ((parser___lexer___TDotdot___init_tk_t)CALL((recv), (SFT_parser___lexer[65] + 0)))
-#define CALL_parser___lexer___TDot___init_tk(recv) ((parser___lexer___TDot___init_tk_t)CALL((recv), (SFT_parser___lexer[66] + 0)))
-#define CALL_parser___lexer___TPlus___init_tk(recv) ((parser___lexer___TPlus___init_tk_t)CALL((recv), (SFT_parser___lexer[67] + 0)))
-#define CALL_parser___lexer___TMinus___init_tk(recv) ((parser___lexer___TMinus___init_tk_t)CALL((recv), (SFT_parser___lexer[68] + 0)))
-#define CALL_parser___lexer___TStar___init_tk(recv) ((parser___lexer___TStar___init_tk_t)CALL((recv), (SFT_parser___lexer[69] + 0)))
-#define CALL_parser___lexer___TSlash___init_tk(recv) ((parser___lexer___TSlash___init_tk_t)CALL((recv), (SFT_parser___lexer[70] + 0)))
-#define CALL_parser___lexer___TPercent___init_tk(recv) ((parser___lexer___TPercent___init_tk_t)CALL((recv), (SFT_parser___lexer[71] + 0)))
-#define CALL_parser___lexer___TEq___init_tk(recv) ((parser___lexer___TEq___init_tk_t)CALL((recv), (SFT_parser___lexer[72] + 0)))
-#define CALL_parser___lexer___TNe___init_tk(recv) ((parser___lexer___TNe___init_tk_t)CALL((recv), (SFT_parser___lexer[73] + 0)))
-#define CALL_parser___lexer___TLt___init_tk(recv) ((parser___lexer___TLt___init_tk_t)CALL((recv), (SFT_parser___lexer[74] + 0)))
-#define CALL_parser___lexer___TLe___init_tk(recv) ((parser___lexer___TLe___init_tk_t)CALL((recv), (SFT_parser___lexer[75] + 0)))
-#define CALL_parser___lexer___TLl___init_tk(recv) ((parser___lexer___TLl___init_tk_t)CALL((recv), (SFT_parser___lexer[76] + 0)))
-#define CALL_parser___lexer___TGt___init_tk(recv) ((parser___lexer___TGt___init_tk_t)CALL((recv), (SFT_parser___lexer[77] + 0)))
-#define CALL_parser___lexer___TGe___init_tk(recv) ((parser___lexer___TGe___init_tk_t)CALL((recv), (SFT_parser___lexer[78] + 0)))
-#define CALL_parser___lexer___TGg___init_tk(recv) ((parser___lexer___TGg___init_tk_t)CALL((recv), (SFT_parser___lexer[79] + 0)))
-#define CALL_parser___lexer___TStarship___init_tk(recv) ((parser___lexer___TStarship___init_tk_t)CALL((recv), (SFT_parser___lexer[80] + 0)))
-#define CALL_parser___lexer___TBang___init_tk(recv) ((parser___lexer___TBang___init_tk_t)CALL((recv), (SFT_parser___lexer[81] + 0)))
+#define CALL_parser___lexer___TKwend___init_tk(recv) ((parser___lexer___TKwend___init_tk_t)CALL((recv), (SFT_parser___lexer[10] + 0)))
+#define CALL_parser___lexer___TKwmeth___init_tk(recv) ((parser___lexer___TKwmeth___init_tk_t)CALL((recv), (SFT_parser___lexer[11] + 0)))
+#define CALL_parser___lexer___TKwtype___init_tk(recv) ((parser___lexer___TKwtype___init_tk_t)CALL((recv), (SFT_parser___lexer[12] + 0)))
+#define CALL_parser___lexer___TKwinit___init_tk(recv) ((parser___lexer___TKwinit___init_tk_t)CALL((recv), (SFT_parser___lexer[13] + 0)))
+#define CALL_parser___lexer___TKwredef___init_tk(recv) ((parser___lexer___TKwredef___init_tk_t)CALL((recv), (SFT_parser___lexer[14] + 0)))
+#define CALL_parser___lexer___TKwis___init_tk(recv) ((parser___lexer___TKwis___init_tk_t)CALL((recv), (SFT_parser___lexer[15] + 0)))
+#define CALL_parser___lexer___TKwdo___init_tk(recv) ((parser___lexer___TKwdo___init_tk_t)CALL((recv), (SFT_parser___lexer[16] + 0)))
+#define CALL_parser___lexer___TKwreadable___init_tk(recv) ((parser___lexer___TKwreadable___init_tk_t)CALL((recv), (SFT_parser___lexer[17] + 0)))
+#define CALL_parser___lexer___TKwwritable___init_tk(recv) ((parser___lexer___TKwwritable___init_tk_t)CALL((recv), (SFT_parser___lexer[18] + 0)))
+#define CALL_parser___lexer___TKwvar___init_tk(recv) ((parser___lexer___TKwvar___init_tk_t)CALL((recv), (SFT_parser___lexer[19] + 0)))
+#define CALL_parser___lexer___TKwintern___init_tk(recv) ((parser___lexer___TKwintern___init_tk_t)CALL((recv), (SFT_parser___lexer[20] + 0)))
+#define CALL_parser___lexer___TKwextern___init_tk(recv) ((parser___lexer___TKwextern___init_tk_t)CALL((recv), (SFT_parser___lexer[21] + 0)))
+#define CALL_parser___lexer___TKwprotected___init_tk(recv) ((parser___lexer___TKwprotected___init_tk_t)CALL((recv), (SFT_parser___lexer[22] + 0)))
+#define CALL_parser___lexer___TKwprivate___init_tk(recv) ((parser___lexer___TKwprivate___init_tk_t)CALL((recv), (SFT_parser___lexer[23] + 0)))
+#define CALL_parser___lexer___TKwintrude___init_tk(recv) ((parser___lexer___TKwintrude___init_tk_t)CALL((recv), (SFT_parser___lexer[24] + 0)))
+#define CALL_parser___lexer___TKwif___init_tk(recv) ((parser___lexer___TKwif___init_tk_t)CALL((recv), (SFT_parser___lexer[25] + 0)))
+#define CALL_parser___lexer___TKwthen___init_tk(recv) ((parser___lexer___TKwthen___init_tk_t)CALL((recv), (SFT_parser___lexer[26] + 0)))
+#define CALL_parser___lexer___TKwelse___init_tk(recv) ((parser___lexer___TKwelse___init_tk_t)CALL((recv), (SFT_parser___lexer[27] + 0)))
+#define CALL_parser___lexer___TKwwhile___init_tk(recv) ((parser___lexer___TKwwhile___init_tk_t)CALL((recv), (SFT_parser___lexer[28] + 0)))
+#define CALL_parser___lexer___TKwloop___init_tk(recv) ((parser___lexer___TKwloop___init_tk_t)CALL((recv), (SFT_parser___lexer[29] + 0)))
+#define CALL_parser___lexer___TKwfor___init_tk(recv) ((parser___lexer___TKwfor___init_tk_t)CALL((recv), (SFT_parser___lexer[30] + 0)))
+#define CALL_parser___lexer___TKwin___init_tk(recv) ((parser___lexer___TKwin___init_tk_t)CALL((recv), (SFT_parser___lexer[31] + 0)))
+#define CALL_parser___lexer___TKwand___init_tk(recv) ((parser___lexer___TKwand___init_tk_t)CALL((recv), (SFT_parser___lexer[32] + 0)))
+#define CALL_parser___lexer___TKwor___init_tk(recv) ((parser___lexer___TKwor___init_tk_t)CALL((recv), (SFT_parser___lexer[33] + 0)))
+#define CALL_parser___lexer___TKwnot___init_tk(recv) ((parser___lexer___TKwnot___init_tk_t)CALL((recv), (SFT_parser___lexer[34] + 0)))
+#define CALL_parser___lexer___TKwreturn___init_tk(recv) ((parser___lexer___TKwreturn___init_tk_t)CALL((recv), (SFT_parser___lexer[35] + 0)))
+#define CALL_parser___lexer___TKwcontinue___init_tk(recv) ((parser___lexer___TKwcontinue___init_tk_t)CALL((recv), (SFT_parser___lexer[36] + 0)))
+#define CALL_parser___lexer___TKwbreak___init_tk(recv) ((parser___lexer___TKwbreak___init_tk_t)CALL((recv), (SFT_parser___lexer[37] + 0)))
+#define CALL_parser___lexer___TKwabort___init_tk(recv) ((parser___lexer___TKwabort___init_tk_t)CALL((recv), (SFT_parser___lexer[38] + 0)))
+#define CALL_parser___lexer___TKwassert___init_tk(recv) ((parser___lexer___TKwassert___init_tk_t)CALL((recv), (SFT_parser___lexer[39] + 0)))
+#define CALL_parser___lexer___TKwnew___init_tk(recv) ((parser___lexer___TKwnew___init_tk_t)CALL((recv), (SFT_parser___lexer[40] + 0)))
+#define CALL_parser___lexer___TKwisa___init_tk(recv) ((parser___lexer___TKwisa___init_tk_t)CALL((recv), (SFT_parser___lexer[41] + 0)))
+#define CALL_parser___lexer___TKwonce___init_tk(recv) ((parser___lexer___TKwonce___init_tk_t)CALL((recv), (SFT_parser___lexer[42] + 0)))
+#define CALL_parser___lexer___TKwsuper___init_tk(recv) ((parser___lexer___TKwsuper___init_tk_t)CALL((recv), (SFT_parser___lexer[43] + 0)))
+#define CALL_parser___lexer___TKwself___init_tk(recv) ((parser___lexer___TKwself___init_tk_t)CALL((recv), (SFT_parser___lexer[44] + 0)))
+#define CALL_parser___lexer___TKwtrue___init_tk(recv) ((parser___lexer___TKwtrue___init_tk_t)CALL((recv), (SFT_parser___lexer[45] + 0)))
+#define CALL_parser___lexer___TKwfalse___init_tk(recv) ((parser___lexer___TKwfalse___init_tk_t)CALL((recv), (SFT_parser___lexer[46] + 0)))
+#define CALL_parser___lexer___TKwnull___init_tk(recv) ((parser___lexer___TKwnull___init_tk_t)CALL((recv), (SFT_parser___lexer[47] + 0)))
+#define CALL_parser___lexer___TKwas___init_tk(recv) ((parser___lexer___TKwas___init_tk_t)CALL((recv), (SFT_parser___lexer[48] + 0)))
+#define CALL_parser___lexer___TKwnullable___init_tk(recv) ((parser___lexer___TKwnullable___init_tk_t)CALL((recv), (SFT_parser___lexer[49] + 0)))
+#define CALL_parser___lexer___TKwisset___init_tk(recv) ((parser___lexer___TKwisset___init_tk_t)CALL((recv), (SFT_parser___lexer[50] + 0)))
+#define CALL_parser___lexer___TKwlabel___init_tk(recv) ((parser___lexer___TKwlabel___init_tk_t)CALL((recv), (SFT_parser___lexer[51] + 0)))
+#define CALL_parser___lexer___TKwdebug___init_tk(recv) ((parser___lexer___TKwdebug___init_tk_t)CALL((recv), (SFT_parser___lexer[52] + 0)))
+#define CALL_parser___lexer___TOpar___init_tk(recv) ((parser___lexer___TOpar___init_tk_t)CALL((recv), (SFT_parser___lexer[53] + 0)))
+#define CALL_parser___lexer___TCpar___init_tk(recv) ((parser___lexer___TCpar___init_tk_t)CALL((recv), (SFT_parser___lexer[54] + 0)))
+#define CALL_parser___lexer___TObra___init_tk(recv) ((parser___lexer___TObra___init_tk_t)CALL((recv), (SFT_parser___lexer[55] + 0)))
+#define CALL_parser___lexer___TCbra___init_tk(recv) ((parser___lexer___TCbra___init_tk_t)CALL((recv), (SFT_parser___lexer[56] + 0)))
+#define CALL_parser___lexer___TComma___init_tk(recv) ((parser___lexer___TComma___init_tk_t)CALL((recv), (SFT_parser___lexer[57] + 0)))
+#define CALL_parser___lexer___TColumn___init_tk(recv) ((parser___lexer___TColumn___init_tk_t)CALL((recv), (SFT_parser___lexer[58] + 0)))
+#define CALL_parser___lexer___TQuad___init_tk(recv) ((parser___lexer___TQuad___init_tk_t)CALL((recv), (SFT_parser___lexer[59] + 0)))
+#define CALL_parser___lexer___TAssign___init_tk(recv) ((parser___lexer___TAssign___init_tk_t)CALL((recv), (SFT_parser___lexer[60] + 0)))
+#define CALL_parser___lexer___TPluseq___init_tk(recv) ((parser___lexer___TPluseq___init_tk_t)CALL((recv), (SFT_parser___lexer[61] + 0)))
+#define CALL_parser___lexer___TMinuseq___init_tk(recv) ((parser___lexer___TMinuseq___init_tk_t)CALL((recv), (SFT_parser___lexer[62] + 0)))
+#define CALL_parser___lexer___TDotdotdot___init_tk(recv) ((parser___lexer___TDotdotdot___init_tk_t)CALL((recv), (SFT_parser___lexer[63] + 0)))
+#define CALL_parser___lexer___TDotdot___init_tk(recv) ((parser___lexer___TDotdot___init_tk_t)CALL((recv), (SFT_parser___lexer[64] + 0)))
+#define CALL_parser___lexer___TDot___init_tk(recv) ((parser___lexer___TDot___init_tk_t)CALL((recv), (SFT_parser___lexer[65] + 0)))
+#define CALL_parser___lexer___TPlus___init_tk(recv) ((parser___lexer___TPlus___init_tk_t)CALL((recv), (SFT_parser___lexer[66] + 0)))
+#define CALL_parser___lexer___TMinus___init_tk(recv) ((parser___lexer___TMinus___init_tk_t)CALL((recv), (SFT_parser___lexer[67] + 0)))
+#define CALL_parser___lexer___TStar___init_tk(recv) ((parser___lexer___TStar___init_tk_t)CALL((recv), (SFT_parser___lexer[68] + 0)))
+#define CALL_parser___lexer___TSlash___init_tk(recv) ((parser___lexer___TSlash___init_tk_t)CALL((recv), (SFT_parser___lexer[69] + 0)))
+#define CALL_parser___lexer___TPercent___init_tk(recv) ((parser___lexer___TPercent___init_tk_t)CALL((recv), (SFT_parser___lexer[70] + 0)))
+#define CALL_parser___lexer___TEq___init_tk(recv) ((parser___lexer___TEq___init_tk_t)CALL((recv), (SFT_parser___lexer[71] + 0)))
+#define CALL_parser___lexer___TNe___init_tk(recv) ((parser___lexer___TNe___init_tk_t)CALL((recv), (SFT_parser___lexer[72] + 0)))
+#define CALL_parser___lexer___TLt___init_tk(recv) ((parser___lexer___TLt___init_tk_t)CALL((recv), (SFT_parser___lexer[73] + 0)))
+#define CALL_parser___lexer___TLe___init_tk(recv) ((parser___lexer___TLe___init_tk_t)CALL((recv), (SFT_parser___lexer[74] + 0)))
+#define CALL_parser___lexer___TLl___init_tk(recv) ((parser___lexer___TLl___init_tk_t)CALL((recv), (SFT_parser___lexer[75] + 0)))
+#define CALL_parser___lexer___TGt___init_tk(recv) ((parser___lexer___TGt___init_tk_t)CALL((recv), (SFT_parser___lexer[76] + 0)))
+#define CALL_parser___lexer___TGe___init_tk(recv) ((parser___lexer___TGe___init_tk_t)CALL((recv), (SFT_parser___lexer[77] + 0)))
+#define CALL_parser___lexer___TGg___init_tk(recv) ((parser___lexer___TGg___init_tk_t)CALL((recv), (SFT_parser___lexer[78] + 0)))
+#define CALL_parser___lexer___TStarship___init_tk(recv) ((parser___lexer___TStarship___init_tk_t)CALL((recv), (SFT_parser___lexer[79] + 0)))
+#define CALL_parser___lexer___TBang___init_tk(recv) ((parser___lexer___TBang___init_tk_t)CALL((recv), (SFT_parser___lexer[80] + 0)))
+#define CALL_parser___lexer___TAt___init_tk(recv) ((parser___lexer___TAt___init_tk_t)CALL((recv), (SFT_parser___lexer[81] + 0)))
 #define CALL_parser___lexer___TClassid___init_tk(recv) ((parser___lexer___TClassid___init_tk_t)CALL((recv), (SFT_parser___lexer[82] + 0)))
 #define CALL_parser___lexer___TId___init_tk(recv) ((parser___lexer___TId___init_tk_t)CALL((recv), (SFT_parser___lexer[83] + 0)))
 #define CALL_parser___lexer___TAttrid___init_tk(recv) ((parser___lexer___TAttrid___init_tk_t)CALL((recv), (SFT_parser___lexer[84] + 0)))
 #define CALL_parser___lexer___TNumber___init_tk(recv) ((parser___lexer___TNumber___init_tk_t)CALL((recv), (SFT_parser___lexer[85] + 0)))
 #define CALL_parser___lexer___TFloat___init_tk(recv) ((parser___lexer___TFloat___init_tk_t)CALL((recv), (SFT_parser___lexer[86] + 0)))
-#define CALL_parser___lexer___TChar___init_tk(recv) ((parser___lexer___TChar___init_tk_t)CALL((recv), (SFT_parser___lexer[87] + 0)))
-#define CALL_parser___lexer___TString___init_tk(recv) ((parser___lexer___TString___init_tk_t)CALL((recv), (SFT_parser___lexer[88] + 0)))
-#define CALL_parser___lexer___TStartString___init_tk(recv) ((parser___lexer___TStartString___init_tk_t)CALL((recv), (SFT_parser___lexer[89] + 0)))
-#define CALL_parser___lexer___TMidString___init_tk(recv) ((parser___lexer___TMidString___init_tk_t)CALL((recv), (SFT_parser___lexer[90] + 0)))
-#define CALL_parser___lexer___TEndString___init_tk(recv) ((parser___lexer___TEndString___init_tk_t)CALL((recv), (SFT_parser___lexer[91] + 0)))
-#define CALL_parser___lexer___TBadChar___init_tk(recv) ((parser___lexer___TBadChar___init_tk_t)CALL((recv), (SFT_parser___lexer[92] + 0)))
-#define CALL_parser___lexer___TBadString___init_tk(recv) ((parser___lexer___TBadString___init_tk_t)CALL((recv), (SFT_parser___lexer[93] + 0)))
+#define CALL_parser___lexer___TString___init_tk(recv) ((parser___lexer___TString___init_tk_t)CALL((recv), (SFT_parser___lexer[87] + 0)))
+#define CALL_parser___lexer___TStartString___init_tk(recv) ((parser___lexer___TStartString___init_tk_t)CALL((recv), (SFT_parser___lexer[88] + 0)))
+#define CALL_parser___lexer___TMidString___init_tk(recv) ((parser___lexer___TMidString___init_tk_t)CALL((recv), (SFT_parser___lexer[89] + 0)))
+#define CALL_parser___lexer___TEndString___init_tk(recv) ((parser___lexer___TEndString___init_tk_t)CALL((recv), (SFT_parser___lexer[90] + 0)))
+#define CALL_parser___lexer___TChar___init_tk(recv) ((parser___lexer___TChar___init_tk_t)CALL((recv), (SFT_parser___lexer[91] + 0)))
+#define CALL_parser___lexer___TBadString___init_tk(recv) ((parser___lexer___TBadString___init_tk_t)CALL((recv), (SFT_parser___lexer[92] + 0)))
+#define CALL_parser___lexer___TBadChar___init_tk(recv) ((parser___lexer___TBadChar___init_tk_t)CALL((recv), (SFT_parser___lexer[93] + 0)))
 #define CALL_parser___lexer___TExternCodeSegment___init_tk(recv) ((parser___lexer___TExternCodeSegment___init_tk_t)CALL((recv), (SFT_parser___lexer[94] + 0)))
-#define CALL_parser___lexer___EOF___init(recv) ((parser___lexer___EOF___init_t)CALL((recv), (SFT_parser___lexer[95] + 0)))
+#define CALL_parser___lexer___EOF___init_tk(recv) ((parser___lexer___EOF___init_tk_t)CALL((recv), (SFT_parser___lexer[95] + 0)))
 #define ATTR_parser___lexer___AError____message(recv) ATTR(recv, (SFT_parser___lexer[96] + 0))
 #define CALL_parser___lexer___AError___message(recv) ((parser___lexer___AError___message_t)CALL((recv), (SFT_parser___lexer[97] + 0)))
 #define CALL_parser___lexer___AError___init_error(recv) ((parser___lexer___AError___init_error_t)CALL((recv), (SFT_parser___lexer[97] + 1)))
-#define ID_parser___lexer___Lexer (SFT_parser___lexer[98])
-#define COLOR_parser___lexer___Lexer (SFT_parser___lexer[99])
-#define ATTR_parser___lexer___Lexer____token(recv) ATTR(recv, (SFT_parser___lexer[100] + 0))
-#define ATTR_parser___lexer___Lexer____state(recv) ATTR(recv, (SFT_parser___lexer[100] + 1))
-#define ATTR_parser___lexer___Lexer____file(recv) ATTR(recv, (SFT_parser___lexer[100] + 2))
-#define ATTR_parser___lexer___Lexer____stream_pos(recv) ATTR(recv, (SFT_parser___lexer[100] + 3))
-#define ATTR_parser___lexer___Lexer____line(recv) ATTR(recv, (SFT_parser___lexer[100] + 4))
-#define ATTR_parser___lexer___Lexer____pos(recv) ATTR(recv, (SFT_parser___lexer[100] + 5))
-#define ATTR_parser___lexer___Lexer____cr(recv) ATTR(recv, (SFT_parser___lexer[100] + 6))
-#define INIT_TABLE_POS_parser___lexer___Lexer (SFT_parser___lexer[101] + 0)
-#define CALL_parser___lexer___Lexer___file(recv) ((parser___lexer___Lexer___file_t)CALL((recv), (SFT_parser___lexer[101] + 1)))
-#define CALL_parser___lexer___Lexer___state_initial(recv) ((parser___lexer___Lexer___state_initial_t)CALL((recv), (SFT_parser___lexer[101] + 2)))
-#define CALL_parser___lexer___Lexer___init(recv) ((parser___lexer___Lexer___init_t)CALL((recv), (SFT_parser___lexer[101] + 3)))
-#define CALL_parser___lexer___Lexer___peek(recv) ((parser___lexer___Lexer___peek_t)CALL((recv), (SFT_parser___lexer[101] + 4)))
-#define CALL_parser___lexer___Lexer___next(recv) ((parser___lexer___Lexer___next_t)CALL((recv), (SFT_parser___lexer[101] + 5)))
-#define CALL_parser___lexer___Lexer___get_token(recv) ((parser___lexer___Lexer___get_token_t)CALL((recv), (SFT_parser___lexer[101] + 6)))
+#define ATTR_parser___lexer___ALexerError____string(recv) ATTR(recv, (SFT_parser___lexer[98] + 0))
+#define CALL_parser___lexer___ALexerError___string(recv) ((parser___lexer___ALexerError___string_t)CALL((recv), (SFT_parser___lexer[99] + 0)))
+#define CALL_parser___lexer___ALexerError___init_lexer_error(recv) ((parser___lexer___ALexerError___init_lexer_error_t)CALL((recv), (SFT_parser___lexer[99] + 1)))
+#define ATTR_parser___lexer___AParserError____token(recv) ATTR(recv, (SFT_parser___lexer[100] + 0))
+#define CALL_parser___lexer___AParserError___token(recv) ((parser___lexer___AParserError___token_t)CALL((recv), (SFT_parser___lexer[101] + 0)))
+#define CALL_parser___lexer___AParserError___init_parser_error(recv) ((parser___lexer___AParserError___init_parser_error_t)CALL((recv), (SFT_parser___lexer[101] + 1)))
+#define ID_parser___lexer___Lexer (SFT_parser___lexer[102])
+#define COLOR_parser___lexer___Lexer (SFT_parser___lexer[103])
+#define ATTR_parser___lexer___Lexer____token(recv) ATTR(recv, (SFT_parser___lexer[104] + 0))
+#define ATTR_parser___lexer___Lexer____state(recv) ATTR(recv, (SFT_parser___lexer[104] + 1))
+#define ATTR_parser___lexer___Lexer____file(recv) ATTR(recv, (SFT_parser___lexer[104] + 2))
+#define ATTR_parser___lexer___Lexer____stream_pos(recv) ATTR(recv, (SFT_parser___lexer[104] + 3))
+#define ATTR_parser___lexer___Lexer____line(recv) ATTR(recv, (SFT_parser___lexer[104] + 4))
+#define ATTR_parser___lexer___Lexer____pos(recv) ATTR(recv, (SFT_parser___lexer[104] + 5))
+#define ATTR_parser___lexer___Lexer____cr(recv) ATTR(recv, (SFT_parser___lexer[104] + 6))
+#define INIT_TABLE_POS_parser___lexer___Lexer (SFT_parser___lexer[105] + 0)
+#define CALL_parser___lexer___Lexer___file(recv) ((parser___lexer___Lexer___file_t)CALL((recv), (SFT_parser___lexer[105] + 1)))
+#define CALL_parser___lexer___Lexer___state_initial(recv) ((parser___lexer___Lexer___state_initial_t)CALL((recv), (SFT_parser___lexer[105] + 2)))
+#define CALL_parser___lexer___Lexer___init(recv) ((parser___lexer___Lexer___init_t)CALL((recv), (SFT_parser___lexer[105] + 3)))
+#define CALL_parser___lexer___Lexer___peek(recv) ((parser___lexer___Lexer___peek_t)CALL((recv), (SFT_parser___lexer[105] + 4)))
+#define CALL_parser___lexer___Lexer___next(recv) ((parser___lexer___Lexer___next_t)CALL((recv), (SFT_parser___lexer[105] + 5)))
+#define CALL_parser___lexer___Lexer___get_token(recv) ((parser___lexer___Lexer___get_token_t)CALL((recv), (SFT_parser___lexer[105] + 6)))
 val_t parser___lexer___Token___text(val_t p0);
 typedef val_t (*parser___lexer___Token___text_t)(val_t p0);
+void parser___lexer___Token___text__eq(val_t p0, val_t p1);
+typedef void (*parser___lexer___Token___text__eq_t)(val_t p0, val_t p1);
 val_t parser___lexer___Token___parser_index(val_t p0);
 typedef val_t (*parser___lexer___Token___parser_index_t)(val_t p0);
 val_t NEW_Token_parser___parser_nodes___ANode___init();
@@ -176,12 +184,6 @@ void parser___lexer___TKwenum___init_tk(val_t p0, val_t p1, int* init_table);
 typedef void (*parser___lexer___TKwenum___init_tk_t)(val_t p0, val_t p1, int* init_table);
 val_t NEW_TKwenum_parser___lexer___TKwenum___init_tk(val_t p0);
 val_t NEW_TKwenum_parser___parser_nodes___ANode___init();
-val_t parser___lexer___TKwspecial___parser_index(val_t p0);
-typedef val_t (*parser___lexer___TKwspecial___parser_index_t)(val_t p0);
-void parser___lexer___TKwspecial___init_tk(val_t p0, val_t p1, int* init_table);
-typedef void (*parser___lexer___TKwspecial___init_tk_t)(val_t p0, val_t p1, int* init_table);
-val_t NEW_TKwspecial_parser___lexer___TKwspecial___init_tk(val_t p0);
-val_t NEW_TKwspecial_parser___parser_nodes___ANode___init();
 val_t parser___lexer___TKwend___parser_index(val_t p0);
 typedef val_t (*parser___lexer___TKwend___parser_index_t)(val_t p0);
 void parser___lexer___TKwend___init_tk(val_t p0, val_t p1, int* init_table);
@@ -608,6 +610,12 @@ void parser___lexer___TBang___init_tk(val_t p0, val_t p1, int* init_table);
 typedef void (*parser___lexer___TBang___init_tk_t)(val_t p0, val_t p1, int* init_table);
 val_t NEW_TBang_parser___lexer___TBang___init_tk(val_t p0);
 val_t NEW_TBang_parser___parser_nodes___ANode___init();
+val_t parser___lexer___TAt___parser_index(val_t p0);
+typedef val_t (*parser___lexer___TAt___parser_index_t)(val_t p0);
+void parser___lexer___TAt___init_tk(val_t p0, val_t p1, int* init_table);
+typedef void (*parser___lexer___TAt___init_tk_t)(val_t p0, val_t p1, int* init_table);
+val_t NEW_TAt_parser___lexer___TAt___init_tk(val_t p0);
+val_t NEW_TAt_parser___parser_nodes___ANode___init();
 val_t parser___lexer___TClassid___parser_index(val_t p0);
 typedef val_t (*parser___lexer___TClassid___parser_index_t)(val_t p0);
 void parser___lexer___TClassid___init_tk(val_t p0, val_t p1, int* init_table);
@@ -638,12 +646,6 @@ void parser___lexer___TFloat___init_tk(val_t p0, val_t p1, int* init_table);
 typedef void (*parser___lexer___TFloat___init_tk_t)(val_t p0, val_t p1, int* init_table);
 val_t NEW_TFloat_parser___lexer___TFloat___init_tk(val_t p0);
 val_t NEW_TFloat_parser___parser_nodes___ANode___init();
-val_t parser___lexer___TChar___parser_index(val_t p0);
-typedef val_t (*parser___lexer___TChar___parser_index_t)(val_t p0);
-void parser___lexer___TChar___init_tk(val_t p0, val_t p1, int* init_table);
-typedef void (*parser___lexer___TChar___init_tk_t)(val_t p0, val_t p1, int* init_table);
-val_t NEW_TChar_parser___lexer___TChar___init_tk(val_t p0);
-val_t NEW_TChar_parser___parser_nodes___ANode___init();
 val_t parser___lexer___TString___parser_index(val_t p0);
 typedef val_t (*parser___lexer___TString___parser_index_t)(val_t p0);
 void parser___lexer___TString___init_tk(val_t p0, val_t p1, int* init_table);
@@ -668,18 +670,24 @@ void parser___lexer___TEndString___init_tk(val_t p0, val_t p1, int* init_table);
 typedef void (*parser___lexer___TEndString___init_tk_t)(val_t p0, val_t p1, int* init_table);
 val_t NEW_TEndString_parser___lexer___TEndString___init_tk(val_t p0);
 val_t NEW_TEndString_parser___parser_nodes___ANode___init();
-val_t parser___lexer___TBadChar___parser_index(val_t p0);
-typedef val_t (*parser___lexer___TBadChar___parser_index_t)(val_t p0);
-void parser___lexer___TBadChar___init_tk(val_t p0, val_t p1, int* init_table);
-typedef void (*parser___lexer___TBadChar___init_tk_t)(val_t p0, val_t p1, int* init_table);
-val_t NEW_TBadChar_parser___lexer___TBadChar___init_tk(val_t p0);
-val_t NEW_TBadChar_parser___parser_nodes___ANode___init();
+val_t parser___lexer___TChar___parser_index(val_t p0);
+typedef val_t (*parser___lexer___TChar___parser_index_t)(val_t p0);
+void parser___lexer___TChar___init_tk(val_t p0, val_t p1, int* init_table);
+typedef void (*parser___lexer___TChar___init_tk_t)(val_t p0, val_t p1, int* init_table);
+val_t NEW_TChar_parser___lexer___TChar___init_tk(val_t p0);
+val_t NEW_TChar_parser___parser_nodes___ANode___init();
 val_t parser___lexer___TBadString___parser_index(val_t p0);
 typedef val_t (*parser___lexer___TBadString___parser_index_t)(val_t p0);
 void parser___lexer___TBadString___init_tk(val_t p0, val_t p1, int* init_table);
 typedef void (*parser___lexer___TBadString___init_tk_t)(val_t p0, val_t p1, int* init_table);
 val_t NEW_TBadString_parser___lexer___TBadString___init_tk(val_t p0);
 val_t NEW_TBadString_parser___parser_nodes___ANode___init();
+val_t parser___lexer___TBadChar___parser_index(val_t p0);
+typedef val_t (*parser___lexer___TBadChar___parser_index_t)(val_t p0);
+void parser___lexer___TBadChar___init_tk(val_t p0, val_t p1, int* init_table);
+typedef void (*parser___lexer___TBadChar___init_tk_t)(val_t p0, val_t p1, int* init_table);
+val_t NEW_TBadChar_parser___lexer___TBadChar___init_tk(val_t p0);
+val_t NEW_TBadChar_parser___parser_nodes___ANode___init();
 val_t parser___lexer___TExternCodeSegment___parser_index(val_t p0);
 typedef val_t (*parser___lexer___TExternCodeSegment___parser_index_t)(val_t p0);
 void parser___lexer___TExternCodeSegment___init_tk(val_t p0, val_t p1, int* init_table);
@@ -688,16 +696,33 @@ val_t NEW_TExternCodeSegment_parser___lexer___TExternCodeSegment___init_tk(val_t
 val_t NEW_TExternCodeSegment_parser___parser_nodes___ANode___init();
 val_t parser___lexer___EOF___parser_index(val_t p0);
 typedef val_t (*parser___lexer___EOF___parser_index_t)(val_t p0);
-void parser___lexer___EOF___init(val_t p0, val_t p1, int* init_table);
-typedef void (*parser___lexer___EOF___init_t)(val_t p0, val_t p1, int* init_table);
-val_t NEW_EOF_parser___lexer___EOF___init(val_t p0);
-val_t NEW_EOF_parser___parser_nodes___EOF___noinit();
+void parser___lexer___EOF___init_tk(val_t p0, val_t p1, int* init_table);
+typedef void (*parser___lexer___EOF___init_tk_t)(val_t p0, val_t p1, int* init_table);
+val_t NEW_EOF_parser___lexer___EOF___init_tk(val_t p0);
+val_t NEW_EOF_parser___parser_nodes___ANode___init();
 val_t parser___lexer___AError___message(val_t p0);
 typedef val_t (*parser___lexer___AError___message_t)(val_t p0);
 void parser___lexer___AError___init_error(val_t p0, val_t p1, val_t p2, int* init_table);
 typedef void (*parser___lexer___AError___init_error_t)(val_t p0, val_t p1, val_t p2, int* init_table);
 val_t NEW_AError_parser___lexer___AError___init_error(val_t p0, val_t p1);
-val_t NEW_AError_parser___parser_nodes___AError___noinit();
+val_t NEW_AError_parser___lexer___EOF___init_tk(val_t p0);
+val_t NEW_AError_parser___parser_nodes___ANode___init();
+val_t parser___lexer___ALexerError___string(val_t p0);
+typedef val_t (*parser___lexer___ALexerError___string_t)(val_t p0);
+void parser___lexer___ALexerError___init_lexer_error(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
+typedef void (*parser___lexer___ALexerError___init_lexer_error_t)(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
+val_t NEW_ALexerError_parser___lexer___ALexerError___init_lexer_error(val_t p0, val_t p1, val_t p2);
+val_t NEW_ALexerError_parser___lexer___AError___init_error(val_t p0, val_t p1);
+val_t NEW_ALexerError_parser___parser_nodes___ANode___init();
+val_t NEW_ALexerError_parser___lexer___EOF___init_tk(val_t p0);
+val_t parser___lexer___AParserError___token(val_t p0);
+typedef val_t (*parser___lexer___AParserError___token_t)(val_t p0);
+void parser___lexer___AParserError___init_parser_error(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
+typedef void (*parser___lexer___AParserError___init_parser_error_t)(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
+val_t NEW_AParserError_parser___lexer___AParserError___init_parser_error(val_t p0, val_t p1, val_t p2);
+val_t NEW_AParserError_parser___lexer___AError___init_error(val_t p0, val_t p1);
+val_t NEW_AParserError_parser___parser_nodes___ANode___init();
+val_t NEW_AParserError_parser___lexer___EOF___init_tk(val_t p0);
 val_t parser___lexer___Lexer___file(val_t p0);
 typedef val_t (*parser___lexer___Lexer___file_t)(val_t p0);
 val_t parser___lexer___Lexer___state_initial(val_t p0);
index 6a75dd2..18600c1 100644 (file)
@@ -178,6 +178,22 @@ val_t parser___parser_nodes___Token___text(val_t p0){
   stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
+static const char LOCATE_parser___parser_nodes___Token___text__eq[] = "parser_nodes::Token::text=";
+void parser___parser_nodes___Token___text__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_nodes;
+  fra.me.line = 45;
+  fra.me.meth = LOCATE_parser___parser_nodes___Token___text__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  fra.me.nitni_local_ref_head = NULL;
+  /* parser/parser_nodes.nit:45 */
+  nit_abort("Deferred method called", NULL, LOCATE_parser___parser_nodes, 45);
+  stack_frame_head = fra.me.prev;
+  return;
+}
 static const char LOCATE_parser___parser_nodes___Token___to_s[] = "parser_nodes::Token::(string::Object::to_s)";
 val_t parser___parser_nodes___Token___to_s(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
@@ -187,7 +203,7 @@ val_t parser___parser_nodes___Token___to_s(val_t p0){
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 46;
+  fra.me.line = 47;
   fra.me.meth = LOCATE_parser___parser_nodes___Token___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -196,7 +212,7 @@ val_t parser___parser_nodes___Token___to_s(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:47 */
+  /* parser/parser_nodes.nit:48 */
   REGB0 = TAG_Int(3);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_1) {
@@ -231,7 +247,7 @@ void parser___parser_nodes___Prod___location__eq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 54;
+  fra.me.line = 55;
   fra.me.meth = LOCATE_parser___parser_nodes___Prod___location__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -240,11 +256,29 @@ void parser___parser_nodes___Prod___location__eq(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_nodes.nit:54 */
+  /* parser/parser_nodes.nit:55 */
   ATTR_parser___parser_nodes___ANode____location(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
 }
+static const char LOCATE_parser___parser_nodes___Prod___n_annotations[] = "parser_nodes::Prod::n_annotations";
+val_t parser___parser_nodes___Prod___n_annotations(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_nodes;
+  fra.me.line = 56;
+  fra.me.meth = LOCATE_parser___parser_nodes___Prod___n_annotations;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:56 */
+  fra.me.REG[0] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
 static const char LOCATE_parser___parser_nodes___TEol___to_s[] = "parser_nodes::TEol::(string::Object::to_s)";
 val_t parser___parser_nodes___TEol___to_s(val_t p0){
   struct {struct stack_frame_t me;} fra;
@@ -253,14 +287,14 @@ val_t parser___parser_nodes___TEol___to_s(val_t p0){
   static val_t once_value_1; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 58;
+  fra.me.line = 60;
   fra.me.meth = LOCATE_parser___parser_nodes___TEol___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:60 */
+  /* parser/parser_nodes.nit:62 */
   if (!once_value_1) {
     fra.me.REG[0] = BOX_NativeString("end of line");
     REGB0 = TAG_Int(11);
@@ -283,7 +317,7 @@ val_t parser___parser_nodes___TokenKeyword___to_s(val_t p0){
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 68;
+  fra.me.line = 70;
   fra.me.meth = LOCATE_parser___parser_nodes___TokenKeyword___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -292,7 +326,7 @@ val_t parser___parser_nodes___TokenKeyword___to_s(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:70 */
+  /* parser/parser_nodes.nit:72 */
   REGB0 = TAG_Int(3);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_1) {
@@ -330,7 +364,7 @@ val_t parser___parser_nodes___TokenOperator___to_s(val_t p0){
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 249;
+  fra.me.line = 248;
   fra.me.meth = LOCATE_parser___parser_nodes___TokenOperator___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -339,7 +373,7 @@ val_t parser___parser_nodes___TokenOperator___to_s(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:251 */
+  /* parser/parser_nodes.nit:250 */
   REGB0 = TAG_Int(3);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_1) {
@@ -377,7 +411,7 @@ val_t parser___parser_nodes___TClassid___to_s(val_t p0){
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 316;
+  fra.me.line = 318;
   fra.me.meth = LOCATE_parser___parser_nodes___TClassid___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -386,7 +420,7 @@ val_t parser___parser_nodes___TClassid___to_s(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:318 */
+  /* parser/parser_nodes.nit:320 */
   REGB0 = TAG_Int(3);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_1) {
@@ -424,7 +458,7 @@ val_t parser___parser_nodes___TId___to_s(val_t p0){
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 323;
+  fra.me.line = 325;
   fra.me.meth = LOCATE_parser___parser_nodes___TId___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -433,7 +467,7 @@ val_t parser___parser_nodes___TId___to_s(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:325 */
+  /* parser/parser_nodes.nit:327 */
   REGB0 = TAG_Int(3);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_1) {
@@ -471,7 +505,7 @@ val_t parser___parser_nodes___TAttrid___to_s(val_t p0){
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 330;
+  fra.me.line = 332;
   fra.me.meth = LOCATE_parser___parser_nodes___TAttrid___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -480,7 +514,7 @@ val_t parser___parser_nodes___TAttrid___to_s(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:332 */
+  /* parser/parser_nodes.nit:334 */
   REGB0 = TAG_Int(3);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_1) {
@@ -518,7 +552,7 @@ val_t parser___parser_nodes___TokenLiteral___to_s(val_t p0){
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 337;
+  fra.me.line = 339;
   fra.me.meth = LOCATE_parser___parser_nodes___TokenLiteral___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -527,7 +561,7 @@ val_t parser___parser_nodes___TokenLiteral___to_s(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:339 */
+  /* parser/parser_nodes.nit:341 */
   REGB0 = TAG_Int(3);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_1) {
@@ -565,7 +599,7 @@ val_t parser___parser_nodes___TBadString___to_s(val_t p0){
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 365;
+  fra.me.line = 367;
   fra.me.meth = LOCATE_parser___parser_nodes___TBadString___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -574,7 +608,7 @@ val_t parser___parser_nodes___TBadString___to_s(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:367 */
+  /* parser/parser_nodes.nit:369 */
   REGB0 = TAG_Int(3);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_1) {
@@ -612,7 +646,7 @@ val_t parser___parser_nodes___TBadChar___to_s(val_t p0){
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 372;
+  fra.me.line = 374;
   fra.me.meth = LOCATE_parser___parser_nodes___TBadChar___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -621,7 +655,7 @@ val_t parser___parser_nodes___TBadChar___to_s(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:374 */
+  /* parser/parser_nodes.nit:376 */
   REGB0 = TAG_Int(3);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_1) {
@@ -650,25 +684,6 @@ val_t parser___parser_nodes___TBadChar___to_s(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_parser___parser_nodes___EOF___noinit[] = "parser_nodes::EOF::noinit";
-void parser___parser_nodes___EOF___noinit(val_t p0, int* init_table){
-  int itpos1 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___EOF].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos1]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 382;
-  fra.me.meth = LOCATE_parser___parser_nodes___EOF___noinit;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos1] = 1;
-  return;
-}
 static const char LOCATE_parser___parser_nodes___EOF___to_s[] = "parser_nodes::EOF::(string::Object::to_s)";
 val_t parser___parser_nodes___EOF___to_s(val_t p0){
   struct {struct stack_frame_t me;} fra;
@@ -677,14 +692,14 @@ val_t parser___parser_nodes___EOF___to_s(val_t p0){
   static val_t once_value_1; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 383;
+  fra.me.line = 384;
   fra.me.meth = LOCATE_parser___parser_nodes___EOF___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:385 */
+  /* parser/parser_nodes.nit:386 */
   if (!once_value_1) {
     fra.me.REG[0] = BOX_NativeString("end of file");
     REGB0 = TAG_Int(11);
@@ -698,41 +713,20 @@ val_t parser___parser_nodes___EOF___to_s(val_t p0){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-static const char LOCATE_parser___parser_nodes___AError___noinit[] = "parser_nodes::AError::noinit";
-void parser___parser_nodes___AError___noinit(val_t p0, int* init_table){
-  int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AError].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos2]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 390;
-  fra.me.meth = LOCATE_parser___parser_nodes___AError___noinit;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:390 */
-  CALL_parser___parser_nodes___EOF___noinit(fra.me.REG[0])(fra.me.REG[0], init_table);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos2] = 1;
-  return;
-}
 static const char LOCATE_parser___parser_nodes___AModule___n_moduledecl[] = "parser_nodes::AModule::n_moduledecl";
 val_t parser___parser_nodes___AModule___n_moduledecl(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 395;
+  fra.me.line = 401;
   fra.me.meth = LOCATE_parser___parser_nodes___AModule___n_moduledecl;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:395 */
+  /* parser/parser_nodes.nit:401 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AModule____n_moduledecl(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -744,18 +738,18 @@ val_t parser___parser_nodes___AModule___n_imports(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 396;
+  fra.me.line = 402;
   fra.me.meth = LOCATE_parser___parser_nodes___AModule___n_imports;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:396 */
+  /* parser/parser_nodes.nit:402 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_nodes, 396);
+    nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser___parser_nodes, 402);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AModule____n_imports(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -768,18 +762,18 @@ val_t parser___parser_nodes___AModule___n_extern_code_blocks(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 397;
+  fra.me.line = 403;
   fra.me.meth = LOCATE_parser___parser_nodes___AModule___n_extern_code_blocks;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:397 */
+  /* parser/parser_nodes.nit:403 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_extern_code_blocks", LOCATE_parser___parser_nodes, 397);
+    nit_abort("Uninitialized attribute %s", "_n_extern_code_blocks", LOCATE_parser___parser_nodes, 403);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -792,18 +786,18 @@ val_t parser___parser_nodes___AModule___n_classdefs(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 398;
+  fra.me.line = 404;
   fra.me.meth = LOCATE_parser___parser_nodes___AModule___n_classdefs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:398 */
+  /* parser/parser_nodes.nit:404 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_nodes, 398);
+    nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser___parser_nodes, 404);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -815,14 +809,14 @@ val_t parser___parser_nodes___AModuledecl___n_doc(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 402;
+  fra.me.line = 408;
   fra.me.meth = LOCATE_parser___parser_nodes___AModuledecl___n_doc;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:402 */
+  /* parser/parser_nodes.nit:408 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -834,18 +828,18 @@ val_t parser___parser_nodes___AModuledecl___n_kwmodule(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 403;
+  fra.me.line = 409;
   fra.me.meth = LOCATE_parser___parser_nodes___AModuledecl___n_kwmodule;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:403 */
+  /* parser/parser_nodes.nit:409 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmodule", LOCATE_parser___parser_nodes, 403);
+    nit_abort("Uninitialized attribute %s", "_n_kwmodule", LOCATE_parser___parser_nodes, 409);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -858,18 +852,18 @@ val_t parser___parser_nodes___AModuledecl___n_name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 404;
+  fra.me.line = 410;
   fra.me.meth = LOCATE_parser___parser_nodes___AModuledecl___n_name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:404 */
+  /* parser/parser_nodes.nit:410 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_nodes, 404);
+    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_nodes, 410);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -882,18 +876,18 @@ val_t parser___parser_nodes___AStdImport___n_visibility(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 409;
+  fra.me.line = 415;
   fra.me.meth = LOCATE_parser___parser_nodes___AStdImport___n_visibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:409 */
+  /* parser/parser_nodes.nit:415 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_nodes, 409);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_nodes, 415);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -906,18 +900,18 @@ val_t parser___parser_nodes___AStdImport___n_kwimport(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 410;
+  fra.me.line = 416;
   fra.me.meth = LOCATE_parser___parser_nodes___AStdImport___n_kwimport;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:410 */
+  /* parser/parser_nodes.nit:416 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_nodes, 410);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_nodes, 416);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -930,18 +924,18 @@ val_t parser___parser_nodes___AStdImport___n_name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 411;
+  fra.me.line = 417;
   fra.me.meth = LOCATE_parser___parser_nodes___AStdImport___n_name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:411 */
+  /* parser/parser_nodes.nit:417 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_nodes, 411);
+    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_nodes, 417);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -954,18 +948,18 @@ val_t parser___parser_nodes___ANoImport___n_visibility(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 415;
+  fra.me.line = 421;
   fra.me.meth = LOCATE_parser___parser_nodes___ANoImport___n_visibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:415 */
+  /* parser/parser_nodes.nit:421 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_nodes, 415);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_nodes, 421);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -978,18 +972,18 @@ val_t parser___parser_nodes___ANoImport___n_kwimport(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 416;
+  fra.me.line = 422;
   fra.me.meth = LOCATE_parser___parser_nodes___ANoImport___n_kwimport;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:416 */
+  /* parser/parser_nodes.nit:422 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_nodes, 416);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_nodes, 422);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1002,18 +996,18 @@ val_t parser___parser_nodes___ANoImport___n_kwend(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 417;
+  fra.me.line = 423;
   fra.me.meth = LOCATE_parser___parser_nodes___ANoImport___n_kwend;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:417 */
+  /* parser/parser_nodes.nit:423 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_nodes, 417);
+    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_nodes, 423);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1026,18 +1020,18 @@ val_t parser___parser_nodes___APrivateVisibility___n_kwprivate(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 425;
+  fra.me.line = 431;
   fra.me.meth = LOCATE_parser___parser_nodes___APrivateVisibility___n_kwprivate;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:425 */
+  /* parser/parser_nodes.nit:431 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwprivate", LOCATE_parser___parser_nodes, 425);
+    nit_abort("Uninitialized attribute %s", "_n_kwprivate", LOCATE_parser___parser_nodes, 431);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1050,18 +1044,18 @@ val_t parser___parser_nodes___AProtectedVisibility___n_kwprotected(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 429;
+  fra.me.line = 435;
   fra.me.meth = LOCATE_parser___parser_nodes___AProtectedVisibility___n_kwprotected;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:429 */
+  /* parser/parser_nodes.nit:435 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwprotected", LOCATE_parser___parser_nodes, 429);
+    nit_abort("Uninitialized attribute %s", "_n_kwprotected", LOCATE_parser___parser_nodes, 435);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1074,18 +1068,18 @@ val_t parser___parser_nodes___AIntrudeVisibility___n_kwintrude(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 433;
+  fra.me.line = 439;
   fra.me.meth = LOCATE_parser___parser_nodes___AIntrudeVisibility___n_kwintrude;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:433 */
+  /* parser/parser_nodes.nit:439 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwintrude", LOCATE_parser___parser_nodes, 433);
+    nit_abort("Uninitialized attribute %s", "_n_kwintrude", LOCATE_parser___parser_nodes, 439);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1098,18 +1092,18 @@ val_t parser___parser_nodes___AClassdef___n_propdefs(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 436;
+  fra.me.line = 442;
   fra.me.meth = LOCATE_parser___parser_nodes___AClassdef___n_propdefs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:436 */
+  /* parser/parser_nodes.nit:442 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_nodes, 436);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_nodes, 442);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1121,14 +1115,14 @@ val_t parser___parser_nodes___AStdClassdef___n_doc(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 440;
+  fra.me.line = 446;
   fra.me.meth = LOCATE_parser___parser_nodes___AStdClassdef___n_doc;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:440 */
+  /* parser/parser_nodes.nit:446 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1139,14 +1133,14 @@ val_t parser___parser_nodes___AStdClassdef___n_kwredef(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 441;
+  fra.me.line = 447;
   fra.me.meth = LOCATE_parser___parser_nodes___AStdClassdef___n_kwredef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:441 */
+  /* parser/parser_nodes.nit:447 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1158,18 +1152,18 @@ val_t parser___parser_nodes___AStdClassdef___n_visibility(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 442;
+  fra.me.line = 448;
   fra.me.meth = LOCATE_parser___parser_nodes___AStdClassdef___n_visibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:442 */
+  /* parser/parser_nodes.nit:448 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_nodes, 442);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_nodes, 448);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1182,18 +1176,18 @@ val_t parser___parser_nodes___AStdClassdef___n_classkind(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 443;
+  fra.me.line = 449;
   fra.me.meth = LOCATE_parser___parser_nodes___AStdClassdef___n_classkind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:443 */
+  /* parser/parser_nodes.nit:449 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classkind", LOCATE_parser___parser_nodes, 443);
+    nit_abort("Uninitialized attribute %s", "_n_classkind", LOCATE_parser___parser_nodes, 449);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1205,14 +1199,14 @@ val_t parser___parser_nodes___AStdClassdef___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 444;
+  fra.me.line = 450;
   fra.me.meth = LOCATE_parser___parser_nodes___AStdClassdef___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:444 */
+  /* parser/parser_nodes.nit:450 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1224,18 +1218,18 @@ val_t parser___parser_nodes___AStdClassdef___n_formaldefs(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 445;
+  fra.me.line = 451;
   fra.me.meth = LOCATE_parser___parser_nodes___AStdClassdef___n_formaldefs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:445 */
+  /* parser/parser_nodes.nit:451 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_nodes, 445);
+    nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_nodes, 451);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1247,14 +1241,14 @@ val_t parser___parser_nodes___AStdClassdef___n_extern_code_block(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 446;
+  fra.me.line = 452;
   fra.me.meth = LOCATE_parser___parser_nodes___AStdClassdef___n_extern_code_block;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:446 */
+  /* parser/parser_nodes.nit:452 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1266,18 +1260,18 @@ val_t parser___parser_nodes___AStdClassdef___n_superclasses(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 447;
+  fra.me.line = 453;
   fra.me.meth = LOCATE_parser___parser_nodes___AStdClassdef___n_superclasses;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:447 */
+  /* parser/parser_nodes.nit:453 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_nodes, 447);
+    nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_nodes, 453);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1290,18 +1284,18 @@ val_t parser___parser_nodes___AStdClassdef___n_kwend(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 448;
+  fra.me.line = 454;
   fra.me.meth = LOCATE_parser___parser_nodes___AStdClassdef___n_kwend;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:448 */
+  /* parser/parser_nodes.nit:454 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_nodes, 448);
+    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_nodes, 454);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1314,18 +1308,18 @@ val_t parser___parser_nodes___AStdClassdef___hot_location(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 449;
+  fra.me.line = 455;
   fra.me.meth = LOCATE_parser___parser_nodes___AStdClassdef___hot_location;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:449 */
+  /* parser/parser_nodes.nit:455 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AStdClassdef___n_id(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_nodes, 449);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_nodes, 455);
   }
   fra.me.REG[0] = CALL_parser___parser_nodes___ANode___location(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -1340,18 +1334,18 @@ val_t parser___parser_nodes___AConcreteClasskind___n_kwclass(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 460;
+  fra.me.line = 466;
   fra.me.meth = LOCATE_parser___parser_nodes___AConcreteClasskind___n_kwclass;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:460 */
+  /* parser/parser_nodes.nit:466 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_nodes, 460);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_nodes, 466);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1364,18 +1358,18 @@ val_t parser___parser_nodes___AAbstractClasskind___n_kwabstract(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 464;
+  fra.me.line = 470;
   fra.me.meth = LOCATE_parser___parser_nodes___AAbstractClasskind___n_kwabstract;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:464 */
+  /* parser/parser_nodes.nit:470 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwabstract", LOCATE_parser___parser_nodes, 464);
+    nit_abort("Uninitialized attribute %s", "_n_kwabstract", LOCATE_parser___parser_nodes, 470);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1388,18 +1382,18 @@ val_t parser___parser_nodes___AAbstractClasskind___n_kwclass(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 465;
+  fra.me.line = 471;
   fra.me.meth = LOCATE_parser___parser_nodes___AAbstractClasskind___n_kwclass;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:465 */
+  /* parser/parser_nodes.nit:471 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_nodes, 465);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_nodes, 471);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1412,18 +1406,18 @@ val_t parser___parser_nodes___AInterfaceClasskind___n_kwinterface(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 469;
+  fra.me.line = 475;
   fra.me.meth = LOCATE_parser___parser_nodes___AInterfaceClasskind___n_kwinterface;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:469 */
+  /* parser/parser_nodes.nit:475 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinterface", LOCATE_parser___parser_nodes, 469);
+    nit_abort("Uninitialized attribute %s", "_n_kwinterface", LOCATE_parser___parser_nodes, 475);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1436,18 +1430,18 @@ val_t parser___parser_nodes___AEnumClasskind___n_kwenum(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 473;
+  fra.me.line = 479;
   fra.me.meth = LOCATE_parser___parser_nodes___AEnumClasskind___n_kwenum;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:473 */
+  /* parser/parser_nodes.nit:479 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwenum", LOCATE_parser___parser_nodes, 473);
+    nit_abort("Uninitialized attribute %s", "_n_kwenum", LOCATE_parser___parser_nodes, 479);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1460,23 +1454,41 @@ val_t parser___parser_nodes___AExternClasskind___n_kwextern(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 477;
+  fra.me.line = 483;
   fra.me.meth = LOCATE_parser___parser_nodes___AExternClasskind___n_kwextern;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:477 */
+  /* parser/parser_nodes.nit:483 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwextern", LOCATE_parser___parser_nodes, 477);
+    nit_abort("Uninitialized attribute %s", "_n_kwextern", LOCATE_parser___parser_nodes, 483);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
+static const char LOCATE_parser___parser_nodes___AExternClasskind___n_kwclass[] = "parser_nodes::AExternClasskind::n_kwclass";
+val_t parser___parser_nodes___AExternClasskind___n_kwclass(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_nodes;
+  fra.me.line = 484;
+  fra.me.meth = LOCATE_parser___parser_nodes___AExternClasskind___n_kwclass;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:484 */
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AExternClasskind____n_kwclass(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
 static const char LOCATE_parser___parser_nodes___AFormaldef___n_id[] = "parser_nodes::AFormaldef::n_id";
 val_t parser___parser_nodes___AFormaldef___n_id(val_t p0){
   struct {struct stack_frame_t me;} fra;
@@ -1484,18 +1496,18 @@ val_t parser___parser_nodes___AFormaldef___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 481;
+  fra.me.line = 488;
   fra.me.meth = LOCATE_parser___parser_nodes___AFormaldef___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:481 */
+  /* parser/parser_nodes.nit:488 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 481);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 488);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1507,50 +1519,38 @@ val_t parser___parser_nodes___AFormaldef___n_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 482;
+  fra.me.line = 489;
   fra.me.meth = LOCATE_parser___parser_nodes___AFormaldef___n_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:482 */
+  /* parser/parser_nodes.nit:489 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-static const char LOCATE_parser___parser_nodes___ASuperclass___n_kwspecial[] = "parser_nodes::ASuperclass::n_kwspecial";
-val_t parser___parser_nodes___ASuperclass___n_kwspecial(val_t p0){
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 486;
-  fra.me.meth = LOCATE_parser___parser_nodes___ASuperclass___n_kwspecial;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:486 */
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return fra.me.REG[0];
-}
 static const char LOCATE_parser___parser_nodes___ASuperclass___n_kwsuper[] = "parser_nodes::ASuperclass::n_kwsuper";
 val_t parser___parser_nodes___ASuperclass___n_kwsuper(val_t p0){
   struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 487;
+  fra.me.line = 493;
   fra.me.meth = LOCATE_parser___parser_nodes___ASuperclass___n_kwsuper;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:487 */
+  /* parser/parser_nodes.nit:493 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_nodes, 493);
+  }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1562,18 +1562,18 @@ val_t parser___parser_nodes___ASuperclass___n_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 488;
+  fra.me.line = 494;
   fra.me.meth = LOCATE_parser___parser_nodes___ASuperclass___n_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:488 */
+  /* parser/parser_nodes.nit:494 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 488);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 494);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1585,14 +1585,14 @@ val_t parser___parser_nodes___APropdef___n_doc(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 491;
+  fra.me.line = 497;
   fra.me.meth = LOCATE_parser___parser_nodes___APropdef___n_doc;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:491 */
+  /* parser/parser_nodes.nit:497 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1603,14 +1603,14 @@ val_t parser___parser_nodes___AAttrPropdef___n_kwredef(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 495;
+  fra.me.line = 501;
   fra.me.meth = LOCATE_parser___parser_nodes___AAttrPropdef___n_kwredef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:495 */
+  /* parser/parser_nodes.nit:501 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1622,18 +1622,18 @@ val_t parser___parser_nodes___AAttrPropdef___n_visibility(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 496;
+  fra.me.line = 502;
   fra.me.meth = LOCATE_parser___parser_nodes___AAttrPropdef___n_visibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:496 */
+  /* parser/parser_nodes.nit:502 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_nodes, 496);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_nodes, 502);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1646,18 +1646,18 @@ val_t parser___parser_nodes___AAttrPropdef___n_kwvar(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 497;
+  fra.me.line = 503;
   fra.me.meth = LOCATE_parser___parser_nodes___AAttrPropdef___n_kwvar;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:497 */
+  /* parser/parser_nodes.nit:503 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_nodes, 497);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_nodes, 503);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1669,14 +1669,14 @@ val_t parser___parser_nodes___AAttrPropdef___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 498;
+  fra.me.line = 504;
   fra.me.meth = LOCATE_parser___parser_nodes___AAttrPropdef___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:498 */
+  /* parser/parser_nodes.nit:504 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1687,14 +1687,14 @@ val_t parser___parser_nodes___AAttrPropdef___n_id2(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 499;
+  fra.me.line = 505;
   fra.me.meth = LOCATE_parser___parser_nodes___AAttrPropdef___n_id2;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:499 */
+  /* parser/parser_nodes.nit:505 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1705,14 +1705,14 @@ val_t parser___parser_nodes___AAttrPropdef___n_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 500;
+  fra.me.line = 506;
   fra.me.meth = LOCATE_parser___parser_nodes___AAttrPropdef___n_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:500 */
+  /* parser/parser_nodes.nit:506 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1723,14 +1723,14 @@ val_t parser___parser_nodes___AAttrPropdef___n_readable(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 501;
+  fra.me.line = 507;
   fra.me.meth = LOCATE_parser___parser_nodes___AAttrPropdef___n_readable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:501 */
+  /* parser/parser_nodes.nit:507 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1741,14 +1741,14 @@ val_t parser___parser_nodes___AAttrPropdef___n_writable(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 502;
+  fra.me.line = 508;
   fra.me.meth = LOCATE_parser___parser_nodes___AAttrPropdef___n_writable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:502 */
+  /* parser/parser_nodes.nit:508 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1759,14 +1759,14 @@ val_t parser___parser_nodes___AAttrPropdef___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 503;
+  fra.me.line = 509;
   fra.me.meth = LOCATE_parser___parser_nodes___AAttrPropdef___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:503 */
+  /* parser/parser_nodes.nit:509 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1779,7 +1779,7 @@ val_t parser___parser_nodes___AAttrPropdef___hot_location(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 504;
+  fra.me.line = 510;
   fra.me.meth = LOCATE_parser___parser_nodes___AAttrPropdef___hot_location;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1787,7 +1787,7 @@ val_t parser___parser_nodes___AAttrPropdef___hot_location(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:506 */
+  /* parser/parser_nodes.nit:512 */
   fra.me.REG[1] = CALL_parser___parser_nodes___AAttrPropdef___n_id(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -1806,7 +1806,7 @@ val_t parser___parser_nodes___AAttrPropdef___hot_location(val_t p0){
     fra.me.REG[1] = CALL_parser___parser_nodes___AAttrPropdef___n_id(fra.me.REG[0])(fra.me.REG[0]);
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_nodes, 506);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_nodes, 512);
     }
     fra.me.REG[1] = CALL_parser___parser_nodes___ANode___location(fra.me.REG[1])(fra.me.REG[1]);
     goto label1;
@@ -1814,7 +1814,7 @@ val_t parser___parser_nodes___AAttrPropdef___hot_location(val_t p0){
     fra.me.REG[0] = CALL_parser___parser_nodes___AAttrPropdef___n_id2(fra.me.REG[0])(fra.me.REG[0]);
     REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_nodes, 506);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_nodes, 512);
     }
     fra.me.REG[0] = CALL_parser___parser_nodes___ANode___location(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[1] = fra.me.REG[0];
@@ -1830,14 +1830,14 @@ val_t parser___parser_nodes___AMethPropdef___n_kwredef(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 511;
+  fra.me.line = 517;
   fra.me.meth = LOCATE_parser___parser_nodes___AMethPropdef___n_kwredef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:511 */
+  /* parser/parser_nodes.nit:517 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1848,14 +1848,14 @@ val_t parser___parser_nodes___AMethPropdef___n_visibility(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 512;
+  fra.me.line = 518;
   fra.me.meth = LOCATE_parser___parser_nodes___AMethPropdef___n_visibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:512 */
+  /* parser/parser_nodes.nit:518 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1866,14 +1866,14 @@ val_t parser___parser_nodes___AMethPropdef___n_methid(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 513;
+  fra.me.line = 519;
   fra.me.meth = LOCATE_parser___parser_nodes___AMethPropdef___n_methid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:513 */
+  /* parser/parser_nodes.nit:519 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1884,14 +1884,14 @@ val_t parser___parser_nodes___AMethPropdef___n_signature(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 514;
+  fra.me.line = 520;
   fra.me.meth = LOCATE_parser___parser_nodes___AMethPropdef___n_signature;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:514 */
+  /* parser/parser_nodes.nit:520 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1904,7 +1904,7 @@ val_t parser___parser_nodes___AMethPropdef___hot_location(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 515;
+  fra.me.line = 521;
   fra.me.meth = LOCATE_parser___parser_nodes___AMethPropdef___hot_location;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1912,7 +1912,7 @@ val_t parser___parser_nodes___AMethPropdef___hot_location(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:517 */
+  /* parser/parser_nodes.nit:523 */
   fra.me.REG[1] = CALL_parser___parser_nodes___AMethPropdef___n_methid(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -1928,16 +1928,16 @@ val_t parser___parser_nodes___AMethPropdef___hot_location(val_t p0){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_nodes.nit:518 */
+    /* parser/parser_nodes.nit:524 */
     fra.me.REG[1] = CALL_parser___parser_nodes___AMethPropdef___n_methid(fra.me.REG[0])(fra.me.REG[0]);
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_nodes, 518);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_nodes, 524);
     }
     fra.me.REG[1] = CALL_parser___parser_nodes___ANode___location(fra.me.REG[1])(fra.me.REG[1]);
     goto label1;
   } else {
-    /* parser/parser_nodes.nit:520 */
+    /* parser/parser_nodes.nit:526 */
     fra.me.REG[0] = CALL_parser___parser_nodes___ANode___location(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[1] = fra.me.REG[0];
     goto label1;
@@ -1953,18 +1953,18 @@ val_t parser___parser_nodes___ADeferredMethPropdef___n_kwmeth(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 526;
+  fra.me.line = 532;
   fra.me.meth = LOCATE_parser___parser_nodes___ADeferredMethPropdef___n_kwmeth;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:526 */
+  /* parser/parser_nodes.nit:532 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_nodes, 526);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_nodes, 532);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1977,18 +1977,18 @@ val_t parser___parser_nodes___AInternMethPropdef___n_kwmeth(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 530;
+  fra.me.line = 536;
   fra.me.meth = LOCATE_parser___parser_nodes___AInternMethPropdef___n_kwmeth;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:530 */
+  /* parser/parser_nodes.nit:536 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_nodes, 530);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_nodes, 536);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2000,14 +2000,14 @@ val_t parser___parser_nodes___AExternPropdef___n_extern(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 534;
+  fra.me.line = 540;
   fra.me.meth = LOCATE_parser___parser_nodes___AExternPropdef___n_extern;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:534 */
+  /* parser/parser_nodes.nit:540 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -2018,14 +2018,14 @@ val_t parser___parser_nodes___AExternPropdef___n_extern_calls(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 535;
+  fra.me.line = 541;
   fra.me.meth = LOCATE_parser___parser_nodes___AExternPropdef___n_extern_calls;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:535 */
+  /* parser/parser_nodes.nit:541 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -2036,14 +2036,14 @@ val_t parser___parser_nodes___AExternPropdef___n_extern_code_block(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 536;
+  fra.me.line = 542;
   fra.me.meth = LOCATE_parser___parser_nodes___AExternPropdef___n_extern_code_block;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:536 */
+  /* parser/parser_nodes.nit:542 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -2055,18 +2055,18 @@ val_t parser___parser_nodes___AExternMethPropdef___n_kwmeth(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 541;
+  fra.me.line = 547;
   fra.me.meth = LOCATE_parser___parser_nodes___AExternMethPropdef___n_kwmeth;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:541 */
+  /* parser/parser_nodes.nit:547 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_nodes, 541);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_nodes, 547);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2078,14 +2078,14 @@ val_t parser___parser_nodes___AConcreteMethPropdef___n_kwmeth(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 545;
+  fra.me.line = 551;
   fra.me.meth = LOCATE_parser___parser_nodes___AConcreteMethPropdef___n_kwmeth;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:545 */
+  /* parser/parser_nodes.nit:551 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -2096,14 +2096,14 @@ val_t parser___parser_nodes___AConcreteMethPropdef___n_block(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 546;
+  fra.me.line = 552;
   fra.me.meth = LOCATE_parser___parser_nodes___AConcreteMethPropdef___n_block;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:546 */
+  /* parser/parser_nodes.nit:552 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -2115,18 +2115,18 @@ val_t parser___parser_nodes___AConcreteInitPropdef___n_kwinit(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 554;
+  fra.me.line = 560;
   fra.me.meth = LOCATE_parser___parser_nodes___AConcreteInitPropdef___n_kwinit;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:554 */
+  /* parser/parser_nodes.nit:560 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_nodes, 554);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_nodes, 560);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2138,14 +2138,14 @@ val_t parser___parser_nodes___AConcreteInitPropdef___hot_location(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 555;
+  fra.me.line = 561;
   fra.me.meth = LOCATE_parser___parser_nodes___AConcreteInitPropdef___hot_location;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:555 */
+  /* parser/parser_nodes.nit:561 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AConcreteInitPropdef___n_kwinit(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_parser___parser_nodes___ANode___location(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -2160,18 +2160,18 @@ val_t parser___parser_nodes___AExternInitPropdef___n_kwnew(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 560;
+  fra.me.line = 566;
   fra.me.meth = LOCATE_parser___parser_nodes___AExternInitPropdef___n_kwnew;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:560 */
+  /* parser/parser_nodes.nit:566 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_nodes, 560);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_nodes, 566);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2184,18 +2184,18 @@ val_t parser___parser_nodes___AExternCalls___n_kwimport(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 567;
+  fra.me.line = 573;
   fra.me.meth = LOCATE_parser___parser_nodes___AExternCalls___n_kwimport;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:567 */
+  /* parser/parser_nodes.nit:573 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_nodes, 567);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_nodes, 573);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2208,18 +2208,18 @@ val_t parser___parser_nodes___AExternCalls___n_extern_calls(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 568;
+  fra.me.line = 574;
   fra.me.meth = LOCATE_parser___parser_nodes___AExternCalls___n_extern_calls;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:568 */
+  /* parser/parser_nodes.nit:574 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_nodes, 568);
+    nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_nodes, 574);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2232,18 +2232,18 @@ val_t parser___parser_nodes___ALocalPropExternCall___n_methid(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 578;
+  fra.me.line = 584;
   fra.me.meth = LOCATE_parser___parser_nodes___ALocalPropExternCall___n_methid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:578 */
+  /* parser/parser_nodes.nit:584 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_nodes, 578);
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_nodes, 584);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2256,18 +2256,18 @@ val_t parser___parser_nodes___AFullPropExternCall___n_classid(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 582;
+  fra.me.line = 588;
   fra.me.meth = LOCATE_parser___parser_nodes___AFullPropExternCall___n_classid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:582 */
+  /* parser/parser_nodes.nit:588 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_nodes, 582);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_nodes, 588);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2279,14 +2279,14 @@ val_t parser___parser_nodes___AFullPropExternCall___n_quad(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 583;
+  fra.me.line = 589;
   fra.me.meth = LOCATE_parser___parser_nodes___AFullPropExternCall___n_quad;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:583 */
+  /* parser/parser_nodes.nit:589 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -2298,18 +2298,18 @@ val_t parser___parser_nodes___AFullPropExternCall___n_methid(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 584;
+  fra.me.line = 590;
   fra.me.meth = LOCATE_parser___parser_nodes___AFullPropExternCall___n_methid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:584 */
+  /* parser/parser_nodes.nit:590 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_nodes, 584);
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_nodes, 590);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2322,18 +2322,18 @@ val_t parser___parser_nodes___AInitPropExternCall___n_classid(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 588;
+  fra.me.line = 594;
   fra.me.meth = LOCATE_parser___parser_nodes___AInitPropExternCall___n_classid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:588 */
+  /* parser/parser_nodes.nit:594 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_nodes, 588);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_nodes, 594);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2346,18 +2346,18 @@ val_t parser___parser_nodes___ASuperExternCall___n_kwsuper(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 592;
+  fra.me.line = 598;
   fra.me.meth = LOCATE_parser___parser_nodes___ASuperExternCall___n_kwsuper;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:592 */
+  /* parser/parser_nodes.nit:598 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_nodes, 592);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_nodes, 598);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2370,18 +2370,18 @@ val_t parser___parser_nodes___ACastAsExternCall___n_from_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 599;
+  fra.me.line = 605;
   fra.me.meth = LOCATE_parser___parser_nodes___ACastAsExternCall___n_from_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:599 */
+  /* parser/parser_nodes.nit:605 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_from_type", LOCATE_parser___parser_nodes, 599);
+    nit_abort("Uninitialized attribute %s", "_n_from_type", LOCATE_parser___parser_nodes, 605);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2394,18 +2394,18 @@ val_t parser___parser_nodes___ACastAsExternCall___n_kwas(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 600;
+  fra.me.line = 606;
   fra.me.meth = LOCATE_parser___parser_nodes___ACastAsExternCall___n_kwas;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:600 */
+  /* parser/parser_nodes.nit:606 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_nodes, 600);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_nodes, 606);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2418,18 +2418,18 @@ val_t parser___parser_nodes___ACastAsExternCall___n_to_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 601;
+  fra.me.line = 607;
   fra.me.meth = LOCATE_parser___parser_nodes___ACastAsExternCall___n_to_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:601 */
+  /* parser/parser_nodes.nit:607 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_to_type", LOCATE_parser___parser_nodes, 601);
+    nit_abort("Uninitialized attribute %s", "_n_to_type", LOCATE_parser___parser_nodes, 607);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2442,18 +2442,18 @@ val_t parser___parser_nodes___AAsNullableExternCall___n_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 605;
+  fra.me.line = 611;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsNullableExternCall___n_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:605 */
+  /* parser/parser_nodes.nit:611 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 605);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 611);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2466,18 +2466,18 @@ val_t parser___parser_nodes___AAsNullableExternCall___n_kwas(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 606;
+  fra.me.line = 612;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsNullableExternCall___n_kwas;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:606 */
+  /* parser/parser_nodes.nit:612 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_nodes, 606);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_nodes, 612);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2490,18 +2490,18 @@ val_t parser___parser_nodes___AAsNullableExternCall___n_kwnullable(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 607;
+  fra.me.line = 613;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsNullableExternCall___n_kwnullable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:607 */
+  /* parser/parser_nodes.nit:613 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_nodes, 607);
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_nodes, 613);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2514,18 +2514,18 @@ val_t parser___parser_nodes___AAsNotNullableExternCall___n_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 611;
+  fra.me.line = 617;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsNotNullableExternCall___n_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:611 */
+  /* parser/parser_nodes.nit:617 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 611);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 617);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2538,18 +2538,18 @@ val_t parser___parser_nodes___AAsNotNullableExternCall___n_kwas(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 612;
+  fra.me.line = 618;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsNotNullableExternCall___n_kwas;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:612 */
+  /* parser/parser_nodes.nit:618 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_nodes, 612);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_nodes, 618);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2562,18 +2562,18 @@ val_t parser___parser_nodes___AAsNotNullableExternCall___n_kwnot(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 613;
+  fra.me.line = 619;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsNotNullableExternCall___n_kwnot;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:613 */
+  /* parser/parser_nodes.nit:619 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_nodes, 613);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_nodes, 619);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2586,18 +2586,18 @@ val_t parser___parser_nodes___AAsNotNullableExternCall___n_kwnullable(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 614;
+  fra.me.line = 620;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsNotNullableExternCall___n_kwnullable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:614 */
+  /* parser/parser_nodes.nit:620 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_nodes, 614);
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_nodes, 620);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2609,14 +2609,14 @@ val_t parser___parser_nodes___ATypePropdef___n_kwredef(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 618;
+  fra.me.line = 624;
   fra.me.meth = LOCATE_parser___parser_nodes___ATypePropdef___n_kwredef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:618 */
+  /* parser/parser_nodes.nit:624 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -2628,18 +2628,18 @@ val_t parser___parser_nodes___ATypePropdef___n_visibility(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 619;
+  fra.me.line = 625;
   fra.me.meth = LOCATE_parser___parser_nodes___ATypePropdef___n_visibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:619 */
+  /* parser/parser_nodes.nit:625 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_nodes, 619);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_nodes, 625);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2652,18 +2652,18 @@ val_t parser___parser_nodes___ATypePropdef___n_kwtype(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 620;
+  fra.me.line = 626;
   fra.me.meth = LOCATE_parser___parser_nodes___ATypePropdef___n_kwtype;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:620 */
+  /* parser/parser_nodes.nit:626 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_nodes, 620);
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_nodes, 626);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2676,18 +2676,18 @@ val_t parser___parser_nodes___ATypePropdef___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 621;
+  fra.me.line = 627;
   fra.me.meth = LOCATE_parser___parser_nodes___ATypePropdef___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:621 */
+  /* parser/parser_nodes.nit:627 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 621);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 627);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2700,18 +2700,18 @@ val_t parser___parser_nodes___ATypePropdef___n_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 622;
+  fra.me.line = 628;
   fra.me.meth = LOCATE_parser___parser_nodes___ATypePropdef___n_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:622 */
+  /* parser/parser_nodes.nit:628 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 622);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 628);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2723,14 +2723,14 @@ val_t parser___parser_nodes___AAble___n_visibility(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 625;
+  fra.me.line = 631;
   fra.me.meth = LOCATE_parser___parser_nodes___AAble___n_visibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:625 */
+  /* parser/parser_nodes.nit:631 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -2741,14 +2741,14 @@ val_t parser___parser_nodes___AAble___n_kwredef(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 626;
+  fra.me.line = 632;
   fra.me.meth = LOCATE_parser___parser_nodes___AAble___n_kwredef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:626 */
+  /* parser/parser_nodes.nit:632 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -2760,18 +2760,18 @@ val_t parser___parser_nodes___AReadAble___n_kwreadable(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 630;
+  fra.me.line = 636;
   fra.me.meth = LOCATE_parser___parser_nodes___AReadAble___n_kwreadable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:630 */
+  /* parser/parser_nodes.nit:636 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwreadable", LOCATE_parser___parser_nodes, 630);
+    nit_abort("Uninitialized attribute %s", "_n_kwreadable", LOCATE_parser___parser_nodes, 636);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2784,18 +2784,18 @@ val_t parser___parser_nodes___AWriteAble___n_kwwritable(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 634;
+  fra.me.line = 640;
   fra.me.meth = LOCATE_parser___parser_nodes___AWriteAble___n_kwwritable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:634 */
+  /* parser/parser_nodes.nit:640 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwwritable", LOCATE_parser___parser_nodes, 634);
+    nit_abort("Uninitialized attribute %s", "_n_kwwritable", LOCATE_parser___parser_nodes, 640);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2808,18 +2808,18 @@ val_t parser___parser_nodes___AIdMethid___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 639;
+  fra.me.line = 645;
   fra.me.meth = LOCATE_parser___parser_nodes___AIdMethid___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:639 */
+  /* parser/parser_nodes.nit:645 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 639);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 645);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2832,18 +2832,18 @@ val_t parser___parser_nodes___APlusMethid___n_plus(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 643;
+  fra.me.line = 649;
   fra.me.meth = LOCATE_parser___parser_nodes___APlusMethid___n_plus;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:643 */
+  /* parser/parser_nodes.nit:649 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_plus", LOCATE_parser___parser_nodes, 643);
+    nit_abort("Uninitialized attribute %s", "_n_plus", LOCATE_parser___parser_nodes, 649);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2856,18 +2856,18 @@ val_t parser___parser_nodes___AMinusMethid___n_minus(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 647;
+  fra.me.line = 653;
   fra.me.meth = LOCATE_parser___parser_nodes___AMinusMethid___n_minus;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:647 */
+  /* parser/parser_nodes.nit:653 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_nodes, 647);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_nodes, 653);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2880,18 +2880,18 @@ val_t parser___parser_nodes___AStarMethid___n_star(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 651;
+  fra.me.line = 657;
   fra.me.meth = LOCATE_parser___parser_nodes___AStarMethid___n_star;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:651 */
+  /* parser/parser_nodes.nit:657 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_star", LOCATE_parser___parser_nodes, 651);
+    nit_abort("Uninitialized attribute %s", "_n_star", LOCATE_parser___parser_nodes, 657);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2904,18 +2904,18 @@ val_t parser___parser_nodes___ASlashMethid___n_slash(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 655;
+  fra.me.line = 661;
   fra.me.meth = LOCATE_parser___parser_nodes___ASlashMethid___n_slash;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:655 */
+  /* parser/parser_nodes.nit:661 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_slash", LOCATE_parser___parser_nodes, 655);
+    nit_abort("Uninitialized attribute %s", "_n_slash", LOCATE_parser___parser_nodes, 661);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2928,18 +2928,18 @@ val_t parser___parser_nodes___APercentMethid___n_percent(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 659;
+  fra.me.line = 665;
   fra.me.meth = LOCATE_parser___parser_nodes___APercentMethid___n_percent;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:659 */
+  /* parser/parser_nodes.nit:665 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_percent", LOCATE_parser___parser_nodes, 659);
+    nit_abort("Uninitialized attribute %s", "_n_percent", LOCATE_parser___parser_nodes, 665);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2952,18 +2952,18 @@ val_t parser___parser_nodes___AEqMethid___n_eq(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 663;
+  fra.me.line = 669;
   fra.me.meth = LOCATE_parser___parser_nodes___AEqMethid___n_eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:663 */
+  /* parser/parser_nodes.nit:669 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_eq", LOCATE_parser___parser_nodes, 663);
+    nit_abort("Uninitialized attribute %s", "_n_eq", LOCATE_parser___parser_nodes, 669);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2976,18 +2976,18 @@ val_t parser___parser_nodes___ANeMethid___n_ne(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 667;
+  fra.me.line = 673;
   fra.me.meth = LOCATE_parser___parser_nodes___ANeMethid___n_ne;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:667 */
+  /* parser/parser_nodes.nit:673 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ne", LOCATE_parser___parser_nodes, 667);
+    nit_abort("Uninitialized attribute %s", "_n_ne", LOCATE_parser___parser_nodes, 673);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3000,18 +3000,18 @@ val_t parser___parser_nodes___ALeMethid___n_le(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 671;
+  fra.me.line = 677;
   fra.me.meth = LOCATE_parser___parser_nodes___ALeMethid___n_le;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:671 */
+  /* parser/parser_nodes.nit:677 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_le", LOCATE_parser___parser_nodes, 671);
+    nit_abort("Uninitialized attribute %s", "_n_le", LOCATE_parser___parser_nodes, 677);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3024,18 +3024,18 @@ val_t parser___parser_nodes___AGeMethid___n_ge(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 675;
+  fra.me.line = 681;
   fra.me.meth = LOCATE_parser___parser_nodes___AGeMethid___n_ge;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:675 */
+  /* parser/parser_nodes.nit:681 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ge", LOCATE_parser___parser_nodes, 675);
+    nit_abort("Uninitialized attribute %s", "_n_ge", LOCATE_parser___parser_nodes, 681);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3048,18 +3048,18 @@ val_t parser___parser_nodes___ALtMethid___n_lt(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 679;
+  fra.me.line = 685;
   fra.me.meth = LOCATE_parser___parser_nodes___ALtMethid___n_lt;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:679 */
+  /* parser/parser_nodes.nit:685 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_lt", LOCATE_parser___parser_nodes, 679);
+    nit_abort("Uninitialized attribute %s", "_n_lt", LOCATE_parser___parser_nodes, 685);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3072,18 +3072,18 @@ val_t parser___parser_nodes___AGtMethid___n_gt(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 683;
+  fra.me.line = 689;
   fra.me.meth = LOCATE_parser___parser_nodes___AGtMethid___n_gt;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:683 */
+  /* parser/parser_nodes.nit:689 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_gt", LOCATE_parser___parser_nodes, 683);
+    nit_abort("Uninitialized attribute %s", "_n_gt", LOCATE_parser___parser_nodes, 689);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3096,18 +3096,18 @@ val_t parser___parser_nodes___ALlMethid___n_ll(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 687;
+  fra.me.line = 693;
   fra.me.meth = LOCATE_parser___parser_nodes___ALlMethid___n_ll;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:687 */
+  /* parser/parser_nodes.nit:693 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ll", LOCATE_parser___parser_nodes, 687);
+    nit_abort("Uninitialized attribute %s", "_n_ll", LOCATE_parser___parser_nodes, 693);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3119,7 +3119,7 @@ void parser___parser_nodes___ALlMethid___n_ll__eq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 687;
+  fra.me.line = 693;
   fra.me.meth = LOCATE_parser___parser_nodes___ALlMethid___n_ll__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3128,7 +3128,7 @@ void parser___parser_nodes___ALlMethid___n_ll__eq(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_nodes.nit:687 */
+  /* parser/parser_nodes.nit:693 */
   ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -3140,18 +3140,18 @@ val_t parser___parser_nodes___AGgMethid___n_gg(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 691;
+  fra.me.line = 697;
   fra.me.meth = LOCATE_parser___parser_nodes___AGgMethid___n_gg;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:691 */
+  /* parser/parser_nodes.nit:697 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_gg", LOCATE_parser___parser_nodes, 691);
+    nit_abort("Uninitialized attribute %s", "_n_gg", LOCATE_parser___parser_nodes, 697);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3163,7 +3163,7 @@ void parser___parser_nodes___AGgMethid___n_gg__eq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 691;
+  fra.me.line = 697;
   fra.me.meth = LOCATE_parser___parser_nodes___AGgMethid___n_gg__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3172,7 +3172,7 @@ void parser___parser_nodes___AGgMethid___n_gg__eq(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_nodes.nit:691 */
+  /* parser/parser_nodes.nit:697 */
   ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -3184,18 +3184,18 @@ val_t parser___parser_nodes___ABraMethid___n_obra(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 695;
+  fra.me.line = 701;
   fra.me.meth = LOCATE_parser___parser_nodes___ABraMethid___n_obra;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:695 */
+  /* parser/parser_nodes.nit:701 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_nodes, 695);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_nodes, 701);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3208,18 +3208,18 @@ val_t parser___parser_nodes___ABraMethid___n_cbra(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 696;
+  fra.me.line = 702;
   fra.me.meth = LOCATE_parser___parser_nodes___ABraMethid___n_cbra;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:696 */
+  /* parser/parser_nodes.nit:702 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_nodes, 696);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_nodes, 702);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3232,18 +3232,18 @@ val_t parser___parser_nodes___AStarshipMethid___n_starship(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 700;
+  fra.me.line = 706;
   fra.me.meth = LOCATE_parser___parser_nodes___AStarshipMethid___n_starship;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:700 */
+  /* parser/parser_nodes.nit:706 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_starship", LOCATE_parser___parser_nodes, 700);
+    nit_abort("Uninitialized attribute %s", "_n_starship", LOCATE_parser___parser_nodes, 706);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3256,18 +3256,18 @@ val_t parser___parser_nodes___AAssignMethid___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 704;
+  fra.me.line = 710;
   fra.me.meth = LOCATE_parser___parser_nodes___AAssignMethid___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:704 */
+  /* parser/parser_nodes.nit:710 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 704);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 710);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3280,18 +3280,18 @@ val_t parser___parser_nodes___AAssignMethid___n_assign(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 705;
+  fra.me.line = 711;
   fra.me.meth = LOCATE_parser___parser_nodes___AAssignMethid___n_assign;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:705 */
+  /* parser/parser_nodes.nit:711 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_nodes, 705);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_nodes, 711);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3304,18 +3304,18 @@ val_t parser___parser_nodes___ABraassignMethid___n_obra(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 709;
+  fra.me.line = 715;
   fra.me.meth = LOCATE_parser___parser_nodes___ABraassignMethid___n_obra;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:709 */
+  /* parser/parser_nodes.nit:715 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_nodes, 709);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_nodes, 715);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3328,18 +3328,18 @@ val_t parser___parser_nodes___ABraassignMethid___n_cbra(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 710;
+  fra.me.line = 716;
   fra.me.meth = LOCATE_parser___parser_nodes___ABraassignMethid___n_cbra;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:710 */
+  /* parser/parser_nodes.nit:716 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_nodes, 710);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_nodes, 716);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3352,18 +3352,18 @@ val_t parser___parser_nodes___ABraassignMethid___n_assign(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 711;
+  fra.me.line = 717;
   fra.me.meth = LOCATE_parser___parser_nodes___ABraassignMethid___n_assign;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:711 */
+  /* parser/parser_nodes.nit:717 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_nodes, 711);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_nodes, 717);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3375,14 +3375,14 @@ val_t parser___parser_nodes___ASignature___n_opar(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 715;
+  fra.me.line = 721;
   fra.me.meth = LOCATE_parser___parser_nodes___ASignature___n_opar;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:715 */
+  /* parser/parser_nodes.nit:721 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3394,18 +3394,18 @@ val_t parser___parser_nodes___ASignature___n_params(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 716;
+  fra.me.line = 722;
   fra.me.meth = LOCATE_parser___parser_nodes___ASignature___n_params;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:716 */
+  /* parser/parser_nodes.nit:722 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_nodes, 716);
+    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_nodes, 722);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3417,14 +3417,14 @@ val_t parser___parser_nodes___ASignature___n_cpar(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 717;
+  fra.me.line = 723;
   fra.me.meth = LOCATE_parser___parser_nodes___ASignature___n_cpar;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:717 */
+  /* parser/parser_nodes.nit:723 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3435,14 +3435,14 @@ val_t parser___parser_nodes___ASignature___n_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 718;
+  fra.me.line = 724;
   fra.me.meth = LOCATE_parser___parser_nodes___ASignature___n_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:718 */
+  /* parser/parser_nodes.nit:724 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3454,18 +3454,18 @@ val_t parser___parser_nodes___ASignature___n_closure_decls(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 719;
+  fra.me.line = 725;
   fra.me.meth = LOCATE_parser___parser_nodes___ASignature___n_closure_decls;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:719 */
+  /* parser/parser_nodes.nit:725 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_nodes, 719);
+    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_nodes, 725);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3478,18 +3478,18 @@ val_t parser___parser_nodes___AParam___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 723;
+  fra.me.line = 729;
   fra.me.meth = LOCATE_parser___parser_nodes___AParam___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:723 */
+  /* parser/parser_nodes.nit:729 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 723);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 729);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3501,14 +3501,14 @@ val_t parser___parser_nodes___AParam___n_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 724;
+  fra.me.line = 730;
   fra.me.meth = LOCATE_parser___parser_nodes___AParam___n_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:724 */
+  /* parser/parser_nodes.nit:730 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3519,14 +3519,14 @@ val_t parser___parser_nodes___AParam___n_dotdotdot(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 725;
+  fra.me.line = 731;
   fra.me.meth = LOCATE_parser___parser_nodes___AParam___n_dotdotdot;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:725 */
+  /* parser/parser_nodes.nit:731 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3537,14 +3537,14 @@ val_t parser___parser_nodes___AClosureDecl___n_kwbreak(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 729;
+  fra.me.line = 735;
   fra.me.meth = LOCATE_parser___parser_nodes___AClosureDecl___n_kwbreak;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:729 */
+  /* parser/parser_nodes.nit:735 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3556,18 +3556,18 @@ val_t parser___parser_nodes___AClosureDecl___n_bang(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 730;
+  fra.me.line = 736;
   fra.me.meth = LOCATE_parser___parser_nodes___AClosureDecl___n_bang;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:730 */
+  /* parser/parser_nodes.nit:736 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_nodes, 730);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_nodes, 736);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3580,18 +3580,18 @@ val_t parser___parser_nodes___AClosureDecl___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 731;
+  fra.me.line = 737;
   fra.me.meth = LOCATE_parser___parser_nodes___AClosureDecl___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:731 */
+  /* parser/parser_nodes.nit:737 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 731);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 737);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3604,18 +3604,18 @@ val_t parser___parser_nodes___AClosureDecl___n_signature(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 732;
+  fra.me.line = 738;
   fra.me.meth = LOCATE_parser___parser_nodes___AClosureDecl___n_signature;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:732 */
+  /* parser/parser_nodes.nit:738 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_parser___parser_nodes, 732);
+    nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_parser___parser_nodes, 738);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3627,14 +3627,14 @@ val_t parser___parser_nodes___AClosureDecl___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 733;
+  fra.me.line = 739;
   fra.me.meth = LOCATE_parser___parser_nodes___AClosureDecl___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:733 */
+  /* parser/parser_nodes.nit:739 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3645,14 +3645,14 @@ val_t parser___parser_nodes___AType___n_kwnullable(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 737;
+  fra.me.line = 743;
   fra.me.meth = LOCATE_parser___parser_nodes___AType___n_kwnullable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:737 */
+  /* parser/parser_nodes.nit:743 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3664,18 +3664,18 @@ val_t parser___parser_nodes___AType___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 738;
+  fra.me.line = 744;
   fra.me.meth = LOCATE_parser___parser_nodes___AType___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:738 */
+  /* parser/parser_nodes.nit:744 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 738);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 744);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3688,18 +3688,18 @@ val_t parser___parser_nodes___AType___n_types(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 739;
+  fra.me.line = 745;
   fra.me.meth = LOCATE_parser___parser_nodes___AType___n_types;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:739 */
+  /* parser/parser_nodes.nit:745 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_nodes, 739);
+    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_nodes, 745);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3712,18 +3712,18 @@ val_t parser___parser_nodes___ALabel___n_kwlabel(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 743;
+  fra.me.line = 749;
   fra.me.meth = LOCATE_parser___parser_nodes___ALabel___n_kwlabel;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:743 */
+  /* parser/parser_nodes.nit:749 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwlabel", LOCATE_parser___parser_nodes, 743);
+    nit_abort("Uninitialized attribute %s", "_n_kwlabel", LOCATE_parser___parser_nodes, 749);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3736,18 +3736,18 @@ val_t parser___parser_nodes___ALabel___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 744;
+  fra.me.line = 750;
   fra.me.meth = LOCATE_parser___parser_nodes___ALabel___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:744 */
+  /* parser/parser_nodes.nit:750 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 744);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 750);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3760,18 +3760,18 @@ val_t parser___parser_nodes___ABlockExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 749;
+  fra.me.line = 755;
   fra.me.meth = LOCATE_parser___parser_nodes___ABlockExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:749 */
+  /* parser/parser_nodes.nit:755 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 749);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 755);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3783,14 +3783,14 @@ val_t parser___parser_nodes___ABlockExpr___n_kwend(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 750;
+  fra.me.line = 756;
   fra.me.meth = LOCATE_parser___parser_nodes___ABlockExpr___n_kwend;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:750 */
+  /* parser/parser_nodes.nit:756 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3802,18 +3802,18 @@ val_t parser___parser_nodes___AVardeclExpr___n_kwvar(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 754;
+  fra.me.line = 760;
   fra.me.meth = LOCATE_parser___parser_nodes___AVardeclExpr___n_kwvar;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:754 */
+  /* parser/parser_nodes.nit:760 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_nodes, 754);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_nodes, 760);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3826,18 +3826,18 @@ val_t parser___parser_nodes___AVardeclExpr___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 755;
+  fra.me.line = 761;
   fra.me.meth = LOCATE_parser___parser_nodes___AVardeclExpr___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:755 */
+  /* parser/parser_nodes.nit:761 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 755);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 761);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3849,14 +3849,14 @@ val_t parser___parser_nodes___AVardeclExpr___n_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 756;
+  fra.me.line = 762;
   fra.me.meth = LOCATE_parser___parser_nodes___AVardeclExpr___n_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:756 */
+  /* parser/parser_nodes.nit:762 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3867,14 +3867,14 @@ val_t parser___parser_nodes___AVardeclExpr___n_assign(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 757;
+  fra.me.line = 763;
   fra.me.meth = LOCATE_parser___parser_nodes___AVardeclExpr___n_assign;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:757 */
+  /* parser/parser_nodes.nit:763 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3885,14 +3885,14 @@ val_t parser___parser_nodes___AVardeclExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 758;
+  fra.me.line = 764;
   fra.me.meth = LOCATE_parser___parser_nodes___AVardeclExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:758 */
+  /* parser/parser_nodes.nit:764 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3903,14 +3903,14 @@ val_t parser___parser_nodes___AReturnExpr___n_kwreturn(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 762;
+  fra.me.line = 768;
   fra.me.meth = LOCATE_parser___parser_nodes___AReturnExpr___n_kwreturn;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:762 */
+  /* parser/parser_nodes.nit:768 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3921,14 +3921,14 @@ val_t parser___parser_nodes___AReturnExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 763;
+  fra.me.line = 769;
   fra.me.meth = LOCATE_parser___parser_nodes___AReturnExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:763 */
+  /* parser/parser_nodes.nit:769 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3939,14 +3939,14 @@ val_t parser___parser_nodes___ALabelable___n_label(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 767;
+  fra.me.line = 773;
   fra.me.meth = LOCATE_parser___parser_nodes___ALabelable___n_label;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:767 */
+  /* parser/parser_nodes.nit:773 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3958,18 +3958,18 @@ val_t parser___parser_nodes___ABreakExpr___n_kwbreak(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 772;
+  fra.me.line = 778;
   fra.me.meth = LOCATE_parser___parser_nodes___ABreakExpr___n_kwbreak;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:772 */
+  /* parser/parser_nodes.nit:778 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_nodes, 772);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_nodes, 778);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3981,14 +3981,14 @@ val_t parser___parser_nodes___ABreakExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 773;
+  fra.me.line = 779;
   fra.me.meth = LOCATE_parser___parser_nodes___ABreakExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:773 */
+  /* parser/parser_nodes.nit:779 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -4000,18 +4000,18 @@ val_t parser___parser_nodes___AAbortExpr___n_kwabort(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 777;
+  fra.me.line = 783;
   fra.me.meth = LOCATE_parser___parser_nodes___AAbortExpr___n_kwabort;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:777 */
+  /* parser/parser_nodes.nit:783 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwabort", LOCATE_parser___parser_nodes, 777);
+    nit_abort("Uninitialized attribute %s", "_n_kwabort", LOCATE_parser___parser_nodes, 783);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4023,14 +4023,14 @@ val_t parser___parser_nodes___AContinueExpr___n_kwcontinue(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 782;
+  fra.me.line = 788;
   fra.me.meth = LOCATE_parser___parser_nodes___AContinueExpr___n_kwcontinue;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:782 */
+  /* parser/parser_nodes.nit:788 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -4041,14 +4041,14 @@ val_t parser___parser_nodes___AContinueExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 783;
+  fra.me.line = 789;
   fra.me.meth = LOCATE_parser___parser_nodes___AContinueExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:783 */
+  /* parser/parser_nodes.nit:789 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -4060,18 +4060,18 @@ val_t parser___parser_nodes___ADoExpr___n_kwdo(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 788;
+  fra.me.line = 794;
   fra.me.meth = LOCATE_parser___parser_nodes___ADoExpr___n_kwdo;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:788 */
+  /* parser/parser_nodes.nit:794 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_nodes, 788);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_nodes, 794);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4083,14 +4083,14 @@ val_t parser___parser_nodes___ADoExpr___n_block(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 789;
+  fra.me.line = 795;
   fra.me.meth = LOCATE_parser___parser_nodes___ADoExpr___n_block;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:789 */
+  /* parser/parser_nodes.nit:795 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -4102,18 +4102,18 @@ val_t parser___parser_nodes___AIfExpr___n_kwif(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 793;
+  fra.me.line = 799;
   fra.me.meth = LOCATE_parser___parser_nodes___AIfExpr___n_kwif;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:793 */
+  /* parser/parser_nodes.nit:799 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_nodes, 793);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_nodes, 799);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4126,18 +4126,18 @@ val_t parser___parser_nodes___AIfExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 794;
+  fra.me.line = 800;
   fra.me.meth = LOCATE_parser___parser_nodes___AIfExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:794 */
+  /* parser/parser_nodes.nit:800 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 794);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 800);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4149,14 +4149,14 @@ val_t parser___parser_nodes___AIfExpr___n_then(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 795;
+  fra.me.line = 801;
   fra.me.meth = LOCATE_parser___parser_nodes___AIfExpr___n_then;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:795 */
+  /* parser/parser_nodes.nit:801 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -4167,14 +4167,14 @@ val_t parser___parser_nodes___AIfExpr___n_else(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 796;
+  fra.me.line = 802;
   fra.me.meth = LOCATE_parser___parser_nodes___AIfExpr___n_else;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:796 */
+  /* parser/parser_nodes.nit:802 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -4186,18 +4186,18 @@ val_t parser___parser_nodes___AIfexprExpr___n_kwif(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 800;
+  fra.me.line = 806;
   fra.me.meth = LOCATE_parser___parser_nodes___AIfexprExpr___n_kwif;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:800 */
+  /* parser/parser_nodes.nit:806 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_nodes, 800);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_nodes, 806);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4210,18 +4210,18 @@ val_t parser___parser_nodes___AIfexprExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 801;
+  fra.me.line = 807;
   fra.me.meth = LOCATE_parser___parser_nodes___AIfexprExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:801 */
+  /* parser/parser_nodes.nit:807 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 801);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 807);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4234,18 +4234,18 @@ val_t parser___parser_nodes___AIfexprExpr___n_kwthen(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 802;
+  fra.me.line = 808;
   fra.me.meth = LOCATE_parser___parser_nodes___AIfexprExpr___n_kwthen;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:802 */
+  /* parser/parser_nodes.nit:808 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwthen", LOCATE_parser___parser_nodes, 802);
+    nit_abort("Uninitialized attribute %s", "_n_kwthen", LOCATE_parser___parser_nodes, 808);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4258,18 +4258,18 @@ val_t parser___parser_nodes___AIfexprExpr___n_then(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 803;
+  fra.me.line = 809;
   fra.me.meth = LOCATE_parser___parser_nodes___AIfexprExpr___n_then;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:803 */
+  /* parser/parser_nodes.nit:809 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_then", LOCATE_parser___parser_nodes, 803);
+    nit_abort("Uninitialized attribute %s", "_n_then", LOCATE_parser___parser_nodes, 809);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4282,18 +4282,18 @@ val_t parser___parser_nodes___AIfexprExpr___n_kwelse(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 804;
+  fra.me.line = 810;
   fra.me.meth = LOCATE_parser___parser_nodes___AIfexprExpr___n_kwelse;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:804 */
+  /* parser/parser_nodes.nit:810 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwelse", LOCATE_parser___parser_nodes, 804);
+    nit_abort("Uninitialized attribute %s", "_n_kwelse", LOCATE_parser___parser_nodes, 810);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4306,18 +4306,18 @@ val_t parser___parser_nodes___AIfexprExpr___n_else(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 805;
+  fra.me.line = 811;
   fra.me.meth = LOCATE_parser___parser_nodes___AIfexprExpr___n_else;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:805 */
+  /* parser/parser_nodes.nit:811 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_else", LOCATE_parser___parser_nodes, 805);
+    nit_abort("Uninitialized attribute %s", "_n_else", LOCATE_parser___parser_nodes, 811);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4330,18 +4330,18 @@ val_t parser___parser_nodes___AWhileExpr___n_kwwhile(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 810;
+  fra.me.line = 816;
   fra.me.meth = LOCATE_parser___parser_nodes___AWhileExpr___n_kwwhile;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:810 */
+  /* parser/parser_nodes.nit:816 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwwhile", LOCATE_parser___parser_nodes, 810);
+    nit_abort("Uninitialized attribute %s", "_n_kwwhile", LOCATE_parser___parser_nodes, 816);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4354,18 +4354,18 @@ val_t parser___parser_nodes___AWhileExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 811;
+  fra.me.line = 817;
   fra.me.meth = LOCATE_parser___parser_nodes___AWhileExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:811 */
+  /* parser/parser_nodes.nit:817 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 811);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 817);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4378,18 +4378,18 @@ val_t parser___parser_nodes___AWhileExpr___n_kwdo(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 812;
+  fra.me.line = 818;
   fra.me.meth = LOCATE_parser___parser_nodes___AWhileExpr___n_kwdo;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:812 */
+  /* parser/parser_nodes.nit:818 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_nodes, 812);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_nodes, 818);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4401,14 +4401,14 @@ val_t parser___parser_nodes___AWhileExpr___n_block(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 813;
+  fra.me.line = 819;
   fra.me.meth = LOCATE_parser___parser_nodes___AWhileExpr___n_block;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:813 */
+  /* parser/parser_nodes.nit:819 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -4420,18 +4420,18 @@ val_t parser___parser_nodes___ALoopExpr___n_kwloop(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 818;
+  fra.me.line = 824;
   fra.me.meth = LOCATE_parser___parser_nodes___ALoopExpr___n_kwloop;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:818 */
+  /* parser/parser_nodes.nit:824 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_parser___parser_nodes, 818);
+    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_parser___parser_nodes, 824);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4443,14 +4443,14 @@ val_t parser___parser_nodes___ALoopExpr___n_block(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 819;
+  fra.me.line = 825;
   fra.me.meth = LOCATE_parser___parser_nodes___ALoopExpr___n_block;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:819 */
+  /* parser/parser_nodes.nit:825 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -4462,18 +4462,18 @@ val_t parser___parser_nodes___AForExpr___n_kwfor(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 824;
+  fra.me.line = 830;
   fra.me.meth = LOCATE_parser___parser_nodes___AForExpr___n_kwfor;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:824 */
+  /* parser/parser_nodes.nit:830 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwfor", LOCATE_parser___parser_nodes, 824);
+    nit_abort("Uninitialized attribute %s", "_n_kwfor", LOCATE_parser___parser_nodes, 830);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4486,18 +4486,18 @@ val_t parser___parser_nodes___AForExpr___n_ids(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 825;
+  fra.me.line = 831;
   fra.me.meth = LOCATE_parser___parser_nodes___AForExpr___n_ids;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:825 */
+  /* parser/parser_nodes.nit:831 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_nodes, 825);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_nodes, 831);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4510,18 +4510,18 @@ val_t parser___parser_nodes___AForExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 826;
+  fra.me.line = 832;
   fra.me.meth = LOCATE_parser___parser_nodes___AForExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:826 */
+  /* parser/parser_nodes.nit:832 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 826);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 832);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4534,18 +4534,18 @@ val_t parser___parser_nodes___AForExpr___n_kwdo(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 827;
+  fra.me.line = 833;
   fra.me.meth = LOCATE_parser___parser_nodes___AForExpr___n_kwdo;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:827 */
+  /* parser/parser_nodes.nit:833 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_nodes, 827);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_nodes, 833);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4557,14 +4557,14 @@ val_t parser___parser_nodes___AForExpr___n_block(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 828;
+  fra.me.line = 834;
   fra.me.meth = LOCATE_parser___parser_nodes___AForExpr___n_block;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:828 */
+  /* parser/parser_nodes.nit:834 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -4576,18 +4576,18 @@ val_t parser___parser_nodes___AAssertExpr___n_kwassert(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 832;
+  fra.me.line = 838;
   fra.me.meth = LOCATE_parser___parser_nodes___AAssertExpr___n_kwassert;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:832 */
+  /* parser/parser_nodes.nit:838 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwassert", LOCATE_parser___parser_nodes, 832);
+    nit_abort("Uninitialized attribute %s", "_n_kwassert", LOCATE_parser___parser_nodes, 838);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4599,14 +4599,14 @@ val_t parser___parser_nodes___AAssertExpr___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 833;
+  fra.me.line = 839;
   fra.me.meth = LOCATE_parser___parser_nodes___AAssertExpr___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:833 */
+  /* parser/parser_nodes.nit:839 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -4618,18 +4618,18 @@ val_t parser___parser_nodes___AAssertExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 834;
+  fra.me.line = 840;
   fra.me.meth = LOCATE_parser___parser_nodes___AAssertExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:834 */
+  /* parser/parser_nodes.nit:840 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 834);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 840);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4641,14 +4641,14 @@ val_t parser___parser_nodes___AAssertExpr___n_else(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 835;
+  fra.me.line = 841;
   fra.me.meth = LOCATE_parser___parser_nodes___AAssertExpr___n_else;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:835 */
+  /* parser/parser_nodes.nit:841 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -4660,18 +4660,18 @@ val_t parser___parser_nodes___AAssignFormExpr___n_assign(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 839;
+  fra.me.line = 845;
   fra.me.meth = LOCATE_parser___parser_nodes___AAssignFormExpr___n_assign;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:839 */
+  /* parser/parser_nodes.nit:845 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_nodes, 839);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_nodes, 845);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4684,18 +4684,18 @@ val_t parser___parser_nodes___AAssignFormExpr___n_value(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 840;
+  fra.me.line = 846;
   fra.me.meth = LOCATE_parser___parser_nodes___AAssignFormExpr___n_value;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:840 */
+  /* parser/parser_nodes.nit:846 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_nodes, 840);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_nodes, 846);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4708,18 +4708,18 @@ val_t parser___parser_nodes___AReassignFormExpr___n_assign_op(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 844;
+  fra.me.line = 850;
   fra.me.meth = LOCATE_parser___parser_nodes___AReassignFormExpr___n_assign_op;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:844 */
+  /* parser/parser_nodes.nit:850 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_nodes, 844);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_nodes, 850);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4732,18 +4732,18 @@ val_t parser___parser_nodes___AReassignFormExpr___n_value(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 845;
+  fra.me.line = 851;
   fra.me.meth = LOCATE_parser___parser_nodes___AReassignFormExpr___n_value;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:845 */
+  /* parser/parser_nodes.nit:851 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_nodes, 845);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_nodes, 851);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4756,18 +4756,18 @@ val_t parser___parser_nodes___AOnceExpr___n_kwonce(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 849;
+  fra.me.line = 855;
   fra.me.meth = LOCATE_parser___parser_nodes___AOnceExpr___n_kwonce;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:849 */
+  /* parser/parser_nodes.nit:855 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_parser___parser_nodes, 849);
+    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_parser___parser_nodes, 855);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4780,18 +4780,18 @@ val_t parser___parser_nodes___ASendExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 853;
+  fra.me.line = 859;
   fra.me.meth = LOCATE_parser___parser_nodes___ASendExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:853 */
+  /* parser/parser_nodes.nit:859 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 853);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 859);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4804,18 +4804,18 @@ val_t parser___parser_nodes___ASendExpr___n_closure_defs(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 854;
+  fra.me.line = 860;
   fra.me.meth = LOCATE_parser___parser_nodes___ASendExpr___n_closure_defs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:854 */
+  /* parser/parser_nodes.nit:860 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_nodes, 854);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_nodes, 860);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4828,18 +4828,18 @@ val_t parser___parser_nodes___ABinopExpr___n_expr2(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 858;
+  fra.me.line = 864;
   fra.me.meth = LOCATE_parser___parser_nodes___ABinopExpr___n_expr2;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:858 */
+  /* parser/parser_nodes.nit:864 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_nodes, 858);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_nodes, 864);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4852,18 +4852,18 @@ val_t parser___parser_nodes___AOrExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 865;
+  fra.me.line = 871;
   fra.me.meth = LOCATE_parser___parser_nodes___AOrExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:865 */
+  /* parser/parser_nodes.nit:871 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 865);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 871);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4876,18 +4876,18 @@ val_t parser___parser_nodes___AOrExpr___n_expr2(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 866;
+  fra.me.line = 872;
   fra.me.meth = LOCATE_parser___parser_nodes___AOrExpr___n_expr2;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:866 */
+  /* parser/parser_nodes.nit:872 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_nodes, 866);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_nodes, 872);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4900,18 +4900,18 @@ val_t parser___parser_nodes___AAndExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 870;
+  fra.me.line = 876;
   fra.me.meth = LOCATE_parser___parser_nodes___AAndExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:870 */
+  /* parser/parser_nodes.nit:876 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 870);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 876);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4924,18 +4924,18 @@ val_t parser___parser_nodes___AAndExpr___n_expr2(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 871;
+  fra.me.line = 877;
   fra.me.meth = LOCATE_parser___parser_nodes___AAndExpr___n_expr2;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:871 */
+  /* parser/parser_nodes.nit:877 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_nodes, 871);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_nodes, 877);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4948,18 +4948,18 @@ val_t parser___parser_nodes___AOrElseExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 875;
+  fra.me.line = 881;
   fra.me.meth = LOCATE_parser___parser_nodes___AOrElseExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:875 */
+  /* parser/parser_nodes.nit:881 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 875);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 881);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4972,18 +4972,18 @@ val_t parser___parser_nodes___AOrElseExpr___n_expr2(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 876;
+  fra.me.line = 882;
   fra.me.meth = LOCATE_parser___parser_nodes___AOrElseExpr___n_expr2;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:876 */
+  /* parser/parser_nodes.nit:882 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_nodes, 876);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_nodes, 882);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4996,18 +4996,18 @@ val_t parser___parser_nodes___ANotExpr___n_kwnot(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 880;
+  fra.me.line = 886;
   fra.me.meth = LOCATE_parser___parser_nodes___ANotExpr___n_kwnot;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:880 */
+  /* parser/parser_nodes.nit:886 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_nodes, 880);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_nodes, 886);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5020,18 +5020,18 @@ val_t parser___parser_nodes___ANotExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 881;
+  fra.me.line = 887;
   fra.me.meth = LOCATE_parser___parser_nodes___ANotExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:881 */
+  /* parser/parser_nodes.nit:887 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 881);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 887);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5044,18 +5044,18 @@ val_t parser___parser_nodes___AEeExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 888;
+  fra.me.line = 894;
   fra.me.meth = LOCATE_parser___parser_nodes___AEeExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:888 */
+  /* parser/parser_nodes.nit:894 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 888);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 894);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5068,18 +5068,18 @@ val_t parser___parser_nodes___AEeExpr___n_expr2(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 889;
+  fra.me.line = 895;
   fra.me.meth = LOCATE_parser___parser_nodes___AEeExpr___n_expr2;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:889 */
+  /* parser/parser_nodes.nit:895 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_nodes, 889);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_nodes, 895);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5092,18 +5092,18 @@ val_t parser___parser_nodes___AIsaExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 914;
+  fra.me.line = 920;
   fra.me.meth = LOCATE_parser___parser_nodes___AIsaExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:914 */
+  /* parser/parser_nodes.nit:920 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 914);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 920);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5116,18 +5116,18 @@ val_t parser___parser_nodes___AIsaExpr___n_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 915;
+  fra.me.line = 921;
   fra.me.meth = LOCATE_parser___parser_nodes___AIsaExpr___n_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:915 */
+  /* parser/parser_nodes.nit:921 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 915);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 921);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5140,18 +5140,18 @@ val_t parser___parser_nodes___AUminusExpr___n_minus(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 937;
+  fra.me.line = 943;
   fra.me.meth = LOCATE_parser___parser_nodes___AUminusExpr___n_minus;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:937 */
+  /* parser/parser_nodes.nit:943 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_nodes, 937);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_nodes, 943);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5164,18 +5164,18 @@ val_t parser___parser_nodes___ANewExpr___n_kwnew(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 941;
+  fra.me.line = 947;
   fra.me.meth = LOCATE_parser___parser_nodes___ANewExpr___n_kwnew;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:941 */
+  /* parser/parser_nodes.nit:947 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_nodes, 941);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_nodes, 947);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5188,18 +5188,18 @@ val_t parser___parser_nodes___ANewExpr___n_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 942;
+  fra.me.line = 948;
   fra.me.meth = LOCATE_parser___parser_nodes___ANewExpr___n_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:942 */
+  /* parser/parser_nodes.nit:948 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 942);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 948);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5211,14 +5211,14 @@ val_t parser___parser_nodes___ANewExpr___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 943;
+  fra.me.line = 949;
   fra.me.meth = LOCATE_parser___parser_nodes___ANewExpr___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:943 */
+  /* parser/parser_nodes.nit:949 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -5230,18 +5230,18 @@ val_t parser___parser_nodes___ANewExpr___n_args(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 944;
+  fra.me.line = 950;
   fra.me.meth = LOCATE_parser___parser_nodes___ANewExpr___n_args;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:944 */
+  /* parser/parser_nodes.nit:950 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_nodes, 944);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_nodes, 950);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5254,18 +5254,18 @@ val_t parser___parser_nodes___AAttrFormExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 948;
+  fra.me.line = 954;
   fra.me.meth = LOCATE_parser___parser_nodes___AAttrFormExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:948 */
+  /* parser/parser_nodes.nit:954 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 948);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 954);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5278,18 +5278,18 @@ val_t parser___parser_nodes___AAttrFormExpr___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 949;
+  fra.me.line = 955;
   fra.me.meth = LOCATE_parser___parser_nodes___AAttrFormExpr___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:949 */
+  /* parser/parser_nodes.nit:955 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 949);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 955);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5302,18 +5302,18 @@ val_t parser___parser_nodes___ACallFormExpr___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 960;
+  fra.me.line = 966;
   fra.me.meth = LOCATE_parser___parser_nodes___ACallFormExpr___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:960 */
+  /* parser/parser_nodes.nit:966 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 960);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 966);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5326,18 +5326,18 @@ val_t parser___parser_nodes___ACallFormExpr___n_args(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 961;
+  fra.me.line = 967;
   fra.me.meth = LOCATE_parser___parser_nodes___ACallFormExpr___n_args;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:961 */
+  /* parser/parser_nodes.nit:967 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_nodes, 961);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_nodes, 967);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5349,14 +5349,14 @@ val_t parser___parser_nodes___ASuperExpr___n_qualified(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 986;
+  fra.me.line = 992;
   fra.me.meth = LOCATE_parser___parser_nodes___ASuperExpr___n_qualified;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:986 */
+  /* parser/parser_nodes.nit:992 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -5368,18 +5368,18 @@ val_t parser___parser_nodes___ASuperExpr___n_kwsuper(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 987;
+  fra.me.line = 993;
   fra.me.meth = LOCATE_parser___parser_nodes___ASuperExpr___n_kwsuper;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:987 */
+  /* parser/parser_nodes.nit:993 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_nodes, 987);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_nodes, 993);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5392,18 +5392,18 @@ val_t parser___parser_nodes___ASuperExpr___n_args(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 988;
+  fra.me.line = 994;
   fra.me.meth = LOCATE_parser___parser_nodes___ASuperExpr___n_args;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:988 */
+  /* parser/parser_nodes.nit:994 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_nodes, 988);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_nodes, 994);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5416,18 +5416,18 @@ val_t parser___parser_nodes___AInitExpr___n_kwinit(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 992;
+  fra.me.line = 998;
   fra.me.meth = LOCATE_parser___parser_nodes___AInitExpr___n_kwinit;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:992 */
+  /* parser/parser_nodes.nit:998 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_nodes, 992);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_nodes, 998);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5440,18 +5440,18 @@ val_t parser___parser_nodes___AInitExpr___n_args(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 993;
+  fra.me.line = 999;
   fra.me.meth = LOCATE_parser___parser_nodes___AInitExpr___n_args;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:993 */
+  /* parser/parser_nodes.nit:999 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_nodes, 993);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_nodes, 999);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5464,18 +5464,18 @@ val_t parser___parser_nodes___ABraFormExpr___n_args(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 997;
+  fra.me.line = 1003;
   fra.me.meth = LOCATE_parser___parser_nodes___ABraFormExpr___n_args;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:997 */
+  /* parser/parser_nodes.nit:1003 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_nodes, 997);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_nodes, 1003);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5488,18 +5488,18 @@ val_t parser___parser_nodes___AVarFormExpr___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1008;
+  fra.me.line = 1014;
   fra.me.meth = LOCATE_parser___parser_nodes___AVarFormExpr___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1008 */
+  /* parser/parser_nodes.nit:1014 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 1008);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 1014);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5512,18 +5512,18 @@ val_t parser___parser_nodes___AClosureCallExpr___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1016;
+  fra.me.line = 1022;
   fra.me.meth = LOCATE_parser___parser_nodes___AClosureCallExpr___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1016 */
+  /* parser/parser_nodes.nit:1022 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 1016);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 1022);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5536,18 +5536,18 @@ val_t parser___parser_nodes___AClosureCallExpr___n_args(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1017;
+  fra.me.line = 1023;
   fra.me.meth = LOCATE_parser___parser_nodes___AClosureCallExpr___n_args;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1017 */
+  /* parser/parser_nodes.nit:1023 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_nodes, 1017);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_nodes, 1023);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5560,18 +5560,18 @@ val_t parser___parser_nodes___AClosureCallExpr___n_closure_defs(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1018;
+  fra.me.line = 1024;
   fra.me.meth = LOCATE_parser___parser_nodes___AClosureCallExpr___n_closure_defs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1018 */
+  /* parser/parser_nodes.nit:1024 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_nodes, 1018);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_nodes, 1024);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5584,18 +5584,18 @@ val_t parser___parser_nodes___ARangeExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1033;
+  fra.me.line = 1039;
   fra.me.meth = LOCATE_parser___parser_nodes___ARangeExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1033 */
+  /* parser/parser_nodes.nit:1039 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 1033);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 1039);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5608,18 +5608,18 @@ val_t parser___parser_nodes___ARangeExpr___n_expr2(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1034;
+  fra.me.line = 1040;
   fra.me.meth = LOCATE_parser___parser_nodes___ARangeExpr___n_expr2;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1034 */
+  /* parser/parser_nodes.nit:1040 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_nodes, 1034);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_nodes, 1040);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5632,18 +5632,18 @@ val_t parser___parser_nodes___ACrangeExpr___n_obra(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1038;
+  fra.me.line = 1044;
   fra.me.meth = LOCATE_parser___parser_nodes___ACrangeExpr___n_obra;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1038 */
+  /* parser/parser_nodes.nit:1044 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_nodes, 1038);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_nodes, 1044);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5656,18 +5656,18 @@ val_t parser___parser_nodes___ACrangeExpr___n_cbra(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1039;
+  fra.me.line = 1045;
   fra.me.meth = LOCATE_parser___parser_nodes___ACrangeExpr___n_cbra;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1039 */
+  /* parser/parser_nodes.nit:1045 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_nodes, 1039);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_nodes, 1045);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5680,18 +5680,18 @@ val_t parser___parser_nodes___AOrangeExpr___n_obra(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1043;
+  fra.me.line = 1049;
   fra.me.meth = LOCATE_parser___parser_nodes___AOrangeExpr___n_obra;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1043 */
+  /* parser/parser_nodes.nit:1049 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_nodes, 1043);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_nodes, 1049);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5704,18 +5704,18 @@ val_t parser___parser_nodes___AOrangeExpr___n_cbra(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1044;
+  fra.me.line = 1050;
   fra.me.meth = LOCATE_parser___parser_nodes___AOrangeExpr___n_cbra;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1044 */
+  /* parser/parser_nodes.nit:1050 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_nodes, 1044);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_nodes, 1050);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5728,18 +5728,18 @@ val_t parser___parser_nodes___AArrayExpr___n_exprs(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1048;
+  fra.me.line = 1054;
   fra.me.meth = LOCATE_parser___parser_nodes___AArrayExpr___n_exprs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1048 */
+  /* parser/parser_nodes.nit:1054 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_nodes, 1048);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_nodes, 1054);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5751,14 +5751,14 @@ val_t parser___parser_nodes___ASelfExpr___n_kwself(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1052;
+  fra.me.line = 1058;
   fra.me.meth = LOCATE_parser___parser_nodes___ASelfExpr___n_kwself;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1052 */
+  /* parser/parser_nodes.nit:1058 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -5770,18 +5770,18 @@ val_t parser___parser_nodes___ATrueExpr___n_kwtrue(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1059;
+  fra.me.line = 1065;
   fra.me.meth = LOCATE_parser___parser_nodes___ATrueExpr___n_kwtrue;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1059 */
+  /* parser/parser_nodes.nit:1065 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser___parser_nodes, 1059);
+    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser___parser_nodes, 1065);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5794,18 +5794,18 @@ val_t parser___parser_nodes___AFalseExpr___n_kwfalse(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1063;
+  fra.me.line = 1069;
   fra.me.meth = LOCATE_parser___parser_nodes___AFalseExpr___n_kwfalse;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1063 */
+  /* parser/parser_nodes.nit:1069 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser___parser_nodes, 1063);
+    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser___parser_nodes, 1069);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5818,18 +5818,18 @@ val_t parser___parser_nodes___ANullExpr___n_kwnull(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1067;
+  fra.me.line = 1073;
   fra.me.meth = LOCATE_parser___parser_nodes___ANullExpr___n_kwnull;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1067 */
+  /* parser/parser_nodes.nit:1073 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_nodes, 1067);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_nodes, 1073);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5842,18 +5842,18 @@ val_t parser___parser_nodes___AIntExpr___n_number(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1071;
+  fra.me.line = 1077;
   fra.me.meth = LOCATE_parser___parser_nodes___AIntExpr___n_number;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1071 */
+  /* parser/parser_nodes.nit:1077 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser___parser_nodes, 1071);
+    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser___parser_nodes, 1077);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5866,18 +5866,18 @@ val_t parser___parser_nodes___AFloatExpr___n_float(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1075;
+  fra.me.line = 1081;
   fra.me.meth = LOCATE_parser___parser_nodes___AFloatExpr___n_float;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1075 */
+  /* parser/parser_nodes.nit:1081 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser___parser_nodes, 1075);
+    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser___parser_nodes, 1081);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5890,116 +5890,44 @@ val_t parser___parser_nodes___ACharExpr___n_char(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1079;
+  fra.me.line = 1085;
   fra.me.meth = LOCATE_parser___parser_nodes___ACharExpr___n_char;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1079 */
+  /* parser/parser_nodes.nit:1085 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser___parser_nodes, 1079);
+    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser___parser_nodes, 1085);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-static const char LOCATE_parser___parser_nodes___AStringExpr___n_string[] = "parser_nodes::AStringExpr::n_string";
-val_t parser___parser_nodes___AStringExpr___n_string(val_t p0){
-  struct {struct stack_frame_t me;} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1086;
-  fra.me.meth = LOCATE_parser___parser_nodes___AStringExpr___n_string;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1086 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_nodes, 1086);
-  }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AStringExpr____n_string(fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return fra.me.REG[0];
-}
-static const char LOCATE_parser___parser_nodes___AStartStringExpr___n_string[] = "parser_nodes::AStartStringExpr::n_string";
-val_t parser___parser_nodes___AStartStringExpr___n_string(val_t p0){
-  struct {struct stack_frame_t me;} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1090;
-  fra.me.meth = LOCATE_parser___parser_nodes___AStartStringExpr___n_string;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1090 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStartStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_nodes, 1090);
-  }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return fra.me.REG[0];
-}
-static const char LOCATE_parser___parser_nodes___AMidStringExpr___n_string[] = "parser_nodes::AMidStringExpr::n_string";
-val_t parser___parser_nodes___AMidStringExpr___n_string(val_t p0){
-  struct {struct stack_frame_t me;} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1094;
-  fra.me.meth = LOCATE_parser___parser_nodes___AMidStringExpr___n_string;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1094 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMidStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_nodes, 1094);
-  }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return fra.me.REG[0];
-}
-static const char LOCATE_parser___parser_nodes___AEndStringExpr___n_string[] = "parser_nodes::AEndStringExpr::n_string";
-val_t parser___parser_nodes___AEndStringExpr___n_string(val_t p0){
+static const char LOCATE_parser___parser_nodes___AStringFormExpr___n_string[] = "parser_nodes::AStringFormExpr::n_string";
+val_t parser___parser_nodes___AStringFormExpr___n_string(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1098;
-  fra.me.meth = LOCATE_parser___parser_nodes___AEndStringExpr___n_string;
+  fra.me.line = 1089;
+  fra.me.meth = LOCATE_parser___parser_nodes___AStringFormExpr___n_string;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1098 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEndStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_nodes.nit:1089 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_nodes, 1098);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_nodes, 1089);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]);
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
@@ -6010,18 +5938,18 @@ val_t parser___parser_nodes___ASuperstringExpr___n_exprs(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1102;
+  fra.me.line = 1105;
   fra.me.meth = LOCATE_parser___parser_nodes___ASuperstringExpr___n_exprs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1102 */
+  /* parser/parser_nodes.nit:1105 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_nodes, 1102);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_nodes, 1105);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6034,18 +5962,18 @@ val_t parser___parser_nodes___AParExpr___n_opar(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1106;
+  fra.me.line = 1109;
   fra.me.meth = LOCATE_parser___parser_nodes___AParExpr___n_opar;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1106 */
+  /* parser/parser_nodes.nit:1109 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_nodes, 1106);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_nodes, 1109);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6058,18 +5986,18 @@ val_t parser___parser_nodes___AParExpr___n_cpar(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1107;
+  fra.me.line = 1110;
   fra.me.meth = LOCATE_parser___parser_nodes___AParExpr___n_cpar;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1107 */
+  /* parser/parser_nodes.nit:1110 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_nodes, 1107);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_nodes, 1110);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6082,18 +6010,18 @@ val_t parser___parser_nodes___AProxyExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1111;
+  fra.me.line = 1114;
   fra.me.meth = LOCATE_parser___parser_nodes___AProxyExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1111 */
+  /* parser/parser_nodes.nit:1114 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 1111);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 1114);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6106,18 +6034,18 @@ val_t parser___parser_nodes___AAsCastExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1115;
+  fra.me.line = 1118;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsCastExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1115 */
+  /* parser/parser_nodes.nit:1118 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 1115);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 1118);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6130,18 +6058,18 @@ val_t parser___parser_nodes___AAsCastExpr___n_kwas(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1116;
+  fra.me.line = 1119;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsCastExpr___n_kwas;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1116 */
+  /* parser/parser_nodes.nit:1119 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_nodes, 1116);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_nodes, 1119);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6154,18 +6082,18 @@ val_t parser___parser_nodes___AAsCastExpr___n_opar(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1117;
+  fra.me.line = 1120;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsCastExpr___n_opar;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1117 */
+  /* parser/parser_nodes.nit:1120 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_nodes, 1117);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_nodes, 1120);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6178,18 +6106,18 @@ val_t parser___parser_nodes___AAsCastExpr___n_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1118;
+  fra.me.line = 1121;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsCastExpr___n_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1118 */
+  /* parser/parser_nodes.nit:1121 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 1118);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 1121);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6202,18 +6130,18 @@ val_t parser___parser_nodes___AAsCastExpr___n_cpar(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1119;
+  fra.me.line = 1122;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsCastExpr___n_cpar;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1119 */
+  /* parser/parser_nodes.nit:1122 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_nodes, 1119);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_nodes, 1122);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6226,18 +6154,18 @@ val_t parser___parser_nodes___AAsNotnullExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1123;
+  fra.me.line = 1126;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsNotnullExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1123 */
+  /* parser/parser_nodes.nit:1126 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 1123);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 1126);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6250,18 +6178,18 @@ val_t parser___parser_nodes___AAsNotnullExpr___n_kwas(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1124;
+  fra.me.line = 1127;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsNotnullExpr___n_kwas;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1124 */
+  /* parser/parser_nodes.nit:1127 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_nodes, 1124);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_nodes, 1127);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6274,18 +6202,18 @@ val_t parser___parser_nodes___AAsNotnullExpr___n_opar(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1125;
+  fra.me.line = 1128;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsNotnullExpr___n_opar;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1125 */
+  /* parser/parser_nodes.nit:1128 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_nodes, 1125);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_nodes, 1128);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6298,18 +6226,18 @@ val_t parser___parser_nodes___AAsNotnullExpr___n_kwnot(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1126;
+  fra.me.line = 1129;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsNotnullExpr___n_kwnot;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1126 */
+  /* parser/parser_nodes.nit:1129 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_nodes, 1126);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_nodes, 1129);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6322,18 +6250,18 @@ val_t parser___parser_nodes___AAsNotnullExpr___n_kwnull(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1127;
+  fra.me.line = 1130;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsNotnullExpr___n_kwnull;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1127 */
+  /* parser/parser_nodes.nit:1130 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_nodes, 1127);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_nodes, 1130);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6346,18 +6274,18 @@ val_t parser___parser_nodes___AAsNotnullExpr___n_cpar(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1128;
+  fra.me.line = 1131;
   fra.me.meth = LOCATE_parser___parser_nodes___AAsNotnullExpr___n_cpar;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1128 */
+  /* parser/parser_nodes.nit:1131 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_nodes, 1128);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_nodes, 1131);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6370,18 +6298,18 @@ val_t parser___parser_nodes___AIssetAttrExpr___n_kwisset(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1132;
+  fra.me.line = 1135;
   fra.me.meth = LOCATE_parser___parser_nodes___AIssetAttrExpr___n_kwisset;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1132 */
+  /* parser/parser_nodes.nit:1135 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_parser___parser_nodes, 1132);
+    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_parser___parser_nodes, 1135);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6394,18 +6322,18 @@ val_t parser___parser_nodes___AExprs___n_exprs(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1136;
+  fra.me.line = 1139;
   fra.me.meth = LOCATE_parser___parser_nodes___AExprs___n_exprs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1136 */
+  /* parser/parser_nodes.nit:1139 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_nodes, 1136);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_nodes, 1139);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6418,18 +6346,18 @@ val_t parser___parser_nodes___ADebugTypeExpr___n_kwdebug(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1140;
+  fra.me.line = 1143;
   fra.me.meth = LOCATE_parser___parser_nodes___ADebugTypeExpr___n_kwdebug;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1140 */
+  /* parser/parser_nodes.nit:1143 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdebug", LOCATE_parser___parser_nodes, 1140);
+    nit_abort("Uninitialized attribute %s", "_n_kwdebug", LOCATE_parser___parser_nodes, 1143);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6442,18 +6370,18 @@ val_t parser___parser_nodes___ADebugTypeExpr___n_kwtype(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1141;
+  fra.me.line = 1144;
   fra.me.meth = LOCATE_parser___parser_nodes___ADebugTypeExpr___n_kwtype;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1141 */
+  /* parser/parser_nodes.nit:1144 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_nodes, 1141);
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_nodes, 1144);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6466,18 +6394,18 @@ val_t parser___parser_nodes___ADebugTypeExpr___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1142;
+  fra.me.line = 1145;
   fra.me.meth = LOCATE_parser___parser_nodes___ADebugTypeExpr___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1142 */
+  /* parser/parser_nodes.nit:1145 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 1142);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 1145);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6490,18 +6418,18 @@ val_t parser___parser_nodes___ADebugTypeExpr___n_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1143;
+  fra.me.line = 1146;
   fra.me.meth = LOCATE_parser___parser_nodes___ADebugTypeExpr___n_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1143 */
+  /* parser/parser_nodes.nit:1146 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 1143);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 1146);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6514,18 +6442,18 @@ val_t parser___parser_nodes___AParExprs___n_opar(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1150;
+  fra.me.line = 1153;
   fra.me.meth = LOCATE_parser___parser_nodes___AParExprs___n_opar;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1150 */
+  /* parser/parser_nodes.nit:1153 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_nodes, 1150);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_nodes, 1153);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6538,18 +6466,18 @@ val_t parser___parser_nodes___AParExprs___n_cpar(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1151;
+  fra.me.line = 1154;
   fra.me.meth = LOCATE_parser___parser_nodes___AParExprs___n_cpar;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1151 */
+  /* parser/parser_nodes.nit:1154 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_nodes, 1151);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_nodes, 1154);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6562,18 +6490,18 @@ val_t parser___parser_nodes___ABraExprs___n_obra(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1155;
+  fra.me.line = 1158;
   fra.me.meth = LOCATE_parser___parser_nodes___ABraExprs___n_obra;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1155 */
+  /* parser/parser_nodes.nit:1158 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_nodes, 1155);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_nodes, 1158);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6586,18 +6514,18 @@ val_t parser___parser_nodes___ABraExprs___n_cbra(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1156;
+  fra.me.line = 1159;
   fra.me.meth = LOCATE_parser___parser_nodes___ABraExprs___n_cbra;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1156 */
+  /* parser/parser_nodes.nit:1159 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_nodes, 1156);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_nodes, 1159);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6610,18 +6538,18 @@ val_t parser___parser_nodes___APlusAssignOp___n_pluseq(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1161;
+  fra.me.line = 1164;
   fra.me.meth = LOCATE_parser___parser_nodes___APlusAssignOp___n_pluseq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1161 */
+  /* parser/parser_nodes.nit:1164 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_pluseq", LOCATE_parser___parser_nodes, 1161);
+    nit_abort("Uninitialized attribute %s", "_n_pluseq", LOCATE_parser___parser_nodes, 1164);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6634,18 +6562,18 @@ val_t parser___parser_nodes___AMinusAssignOp___n_minuseq(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1165;
+  fra.me.line = 1168;
   fra.me.meth = LOCATE_parser___parser_nodes___AMinusAssignOp___n_minuseq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1165 */
+  /* parser/parser_nodes.nit:1168 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_minuseq", LOCATE_parser___parser_nodes, 1165);
+    nit_abort("Uninitialized attribute %s", "_n_minuseq", LOCATE_parser___parser_nodes, 1168);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6658,18 +6586,18 @@ val_t parser___parser_nodes___AClosureDef___n_bang(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1169;
+  fra.me.line = 1172;
   fra.me.meth = LOCATE_parser___parser_nodes___AClosureDef___n_bang;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1169 */
+  /* parser/parser_nodes.nit:1172 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_nodes, 1169);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_nodes, 1172);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6682,18 +6610,18 @@ val_t parser___parser_nodes___AClosureDef___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1170;
+  fra.me.line = 1173;
   fra.me.meth = LOCATE_parser___parser_nodes___AClosureDef___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1170 */
+  /* parser/parser_nodes.nit:1173 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 1170);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 1173);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6706,18 +6634,18 @@ val_t parser___parser_nodes___AClosureDef___n_ids(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1171;
+  fra.me.line = 1174;
   fra.me.meth = LOCATE_parser___parser_nodes___AClosureDef___n_ids;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1171 */
+  /* parser/parser_nodes.nit:1174 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_nodes, 1171);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_nodes, 1174);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6729,14 +6657,14 @@ val_t parser___parser_nodes___AClosureDef___n_kwdo(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1172;
+  fra.me.line = 1175;
   fra.me.meth = LOCATE_parser___parser_nodes___AClosureDef___n_kwdo;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1172 */
+  /* parser/parser_nodes.nit:1175 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -6747,14 +6675,14 @@ val_t parser___parser_nodes___AClosureDef___n_expr(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1173;
+  fra.me.line = 1176;
   fra.me.meth = LOCATE_parser___parser_nodes___AClosureDef___n_expr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1173 */
+  /* parser/parser_nodes.nit:1176 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -6765,14 +6693,14 @@ val_t parser___parser_nodes___AClosureDef___hot_location(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1174;
+  fra.me.line = 1177;
   fra.me.meth = LOCATE_parser___parser_nodes___AClosureDef___hot_location;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1174 */
+  /* parser/parser_nodes.nit:1177 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AClosureDef___n_id(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_parser___parser_nodes___ANode___location(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -6787,18 +6715,18 @@ val_t parser___parser_nodes___ASimpleClosureId___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1181;
+  fra.me.line = 1184;
   fra.me.meth = LOCATE_parser___parser_nodes___ASimpleClosureId___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1181 */
+  /* parser/parser_nodes.nit:1184 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 1181);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 1184);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6811,18 +6739,18 @@ val_t parser___parser_nodes___ABreakClosureId___n_kwbreak(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1185;
+  fra.me.line = 1188;
   fra.me.meth = LOCATE_parser___parser_nodes___ABreakClosureId___n_kwbreak;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1185 */
+  /* parser/parser_nodes.nit:1188 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_nodes, 1185);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_nodes, 1188);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6834,14 +6762,14 @@ val_t parser___parser_nodes___AModuleName___n_quad(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1189;
+  fra.me.line = 1192;
   fra.me.meth = LOCATE_parser___parser_nodes___AModuleName___n_quad;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1189 */
+  /* parser/parser_nodes.nit:1192 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -6853,18 +6781,18 @@ val_t parser___parser_nodes___AModuleName___n_path(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1190;
+  fra.me.line = 1193;
   fra.me.meth = LOCATE_parser___parser_nodes___AModuleName___n_path;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1190 */
+  /* parser/parser_nodes.nit:1193 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_nodes, 1190);
+    nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_nodes, 1193);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6877,18 +6805,18 @@ val_t parser___parser_nodes___AModuleName___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1191;
+  fra.me.line = 1194;
   fra.me.meth = LOCATE_parser___parser_nodes___AModuleName___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1191 */
+  /* parser/parser_nodes.nit:1194 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 1191);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 1194);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6901,18 +6829,18 @@ val_t parser___parser_nodes___AInLanguage___n_kwin(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1195;
+  fra.me.line = 1198;
   fra.me.meth = LOCATE_parser___parser_nodes___AInLanguage___n_kwin;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1195 */
+  /* parser/parser_nodes.nit:1198 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwin", LOCATE_parser___parser_nodes, 1195);
+    nit_abort("Uninitialized attribute %s", "_n_kwin", LOCATE_parser___parser_nodes, 1198);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6925,18 +6853,18 @@ val_t parser___parser_nodes___AInLanguage___n_string(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1196;
+  fra.me.line = 1199;
   fra.me.meth = LOCATE_parser___parser_nodes___AInLanguage___n_string;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1196 */
+  /* parser/parser_nodes.nit:1199 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_nodes, 1196);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_nodes, 1199);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6948,14 +6876,14 @@ val_t parser___parser_nodes___AExternCodeBlock___n_in_language(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1200;
+  fra.me.line = 1203;
   fra.me.meth = LOCATE_parser___parser_nodes___AExternCodeBlock___n_in_language;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1200 */
+  /* parser/parser_nodes.nit:1203 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -6967,18 +6895,18 @@ val_t parser___parser_nodes___AExternCodeBlock___n_extern_code_segment(val_t p0)
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1201;
+  fra.me.line = 1204;
   fra.me.meth = LOCATE_parser___parser_nodes___AExternCodeBlock___n_extern_code_segment;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1201 */
+  /* parser/parser_nodes.nit:1204 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_extern_code_segment", LOCATE_parser___parser_nodes, 1201);
+    nit_abort("Uninitialized attribute %s", "_n_extern_code_segment", LOCATE_parser___parser_nodes, 1204);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -6990,14 +6918,14 @@ val_t parser___parser_nodes___AQualified___n_quad(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1205;
+  fra.me.line = 1208;
   fra.me.meth = LOCATE_parser___parser_nodes___AQualified___n_quad;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1205 */
+  /* parser/parser_nodes.nit:1208 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AQualified____n_quad(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -7009,18 +6937,18 @@ val_t parser___parser_nodes___AQualified___n_id(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1206;
+  fra.me.line = 1209;
   fra.me.meth = LOCATE_parser___parser_nodes___AQualified___n_id;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1206 */
+  /* parser/parser_nodes.nit:1209 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 1206);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 1209);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -7032,14 +6960,14 @@ val_t parser___parser_nodes___AQualified___n_classid(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1207;
+  fra.me.line = 1210;
   fra.me.meth = LOCATE_parser___parser_nodes___AQualified___n_classid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1207 */
+  /* parser/parser_nodes.nit:1210 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -7051,37 +6979,271 @@ val_t parser___parser_nodes___ADoc___n_comment(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1211;
+  fra.me.line = 1214;
   fra.me.meth = LOCATE_parser___parser_nodes___ADoc___n_comment;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1211 */
+  /* parser/parser_nodes.nit:1214 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_nodes, 1211);
+    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_nodes, 1214);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
+static const char LOCATE_parser___parser_nodes___AAnnotations___n_at[] = "parser_nodes::AAnnotations::n_at";
+val_t parser___parser_nodes___AAnnotations___n_at(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_nodes;
+  fra.me.line = 1219;
+  fra.me.meth = LOCATE_parser___parser_nodes___AAnnotations___n_at;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:1219 */
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAnnotations____n_at(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_parser___parser_nodes___AAnnotations___n_opar[] = "parser_nodes::AAnnotations::n_opar";
+val_t parser___parser_nodes___AAnnotations___n_opar(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_nodes;
+  fra.me.line = 1220;
+  fra.me.meth = LOCATE_parser___parser_nodes___AAnnotations___n_opar;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:1220 */
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAnnotations____n_opar(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_parser___parser_nodes___AAnnotations___n_items[] = "parser_nodes::AAnnotations::n_items";
+val_t parser___parser_nodes___AAnnotations___n_items(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_nodes;
+  fra.me.line = 1221;
+  fra.me.meth = LOCATE_parser___parser_nodes___AAnnotations___n_items;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:1221 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_nodes, 1221);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_parser___parser_nodes___AAnnotations___n_cpar[] = "parser_nodes::AAnnotations::n_cpar";
+val_t parser___parser_nodes___AAnnotations___n_cpar(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_nodes;
+  fra.me.line = 1222;
+  fra.me.meth = LOCATE_parser___parser_nodes___AAnnotations___n_cpar;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:1222 */
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAnnotations____n_cpar(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_parser___parser_nodes___AAnnotation___n_atid[] = "parser_nodes::AAnnotation::n_atid";
+val_t parser___parser_nodes___AAnnotation___n_atid(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_nodes;
+  fra.me.line = 1226;
+  fra.me.meth = LOCATE_parser___parser_nodes___AAnnotation___n_atid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:1226 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_atid(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_atid", LOCATE_parser___parser_nodes, 1226);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAnnotation____n_atid(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_parser___parser_nodes___AAnnotation___n_opar[] = "parser_nodes::AAnnotation::n_opar";
+val_t parser___parser_nodes___AAnnotation___n_opar(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_nodes;
+  fra.me.line = 1227;
+  fra.me.meth = LOCATE_parser___parser_nodes___AAnnotation___n_opar;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:1227 */
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAnnotation____n_opar(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_parser___parser_nodes___AAnnotation___n_args[] = "parser_nodes::AAnnotation::n_args";
+val_t parser___parser_nodes___AAnnotation___n_args(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_nodes;
+  fra.me.line = 1228;
+  fra.me.meth = LOCATE_parser___parser_nodes___AAnnotation___n_args;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:1228 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_nodes, 1228);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_parser___parser_nodes___AAnnotation___n_cpar[] = "parser_nodes::AAnnotation::n_cpar";
+val_t parser___parser_nodes___AAnnotation___n_cpar(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_nodes;
+  fra.me.line = 1229;
+  fra.me.meth = LOCATE_parser___parser_nodes___AAnnotation___n_cpar;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:1229 */
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAnnotation____n_cpar(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_parser___parser_nodes___ATypeAtArg___n_type[] = "parser_nodes::ATypeAtArg::n_type";
+val_t parser___parser_nodes___ATypeAtArg___n_type(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_nodes;
+  fra.me.line = 1236;
+  fra.me.meth = LOCATE_parser___parser_nodes___ATypeAtArg___n_type;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:1236 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_nodes, 1236);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_parser___parser_nodes___AExprAtArg___n_expr[] = "parser_nodes::AExprAtArg::n_expr";
+val_t parser___parser_nodes___AExprAtArg___n_expr(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_nodes;
+  fra.me.line = 1240;
+  fra.me.meth = LOCATE_parser___parser_nodes___AExprAtArg___n_expr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:1240 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_nodes, 1240);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_parser___parser_nodes___AAtid___n_id[] = "parser_nodes::AAtid::n_id";
+val_t parser___parser_nodes___AAtid___n_id(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_nodes;
+  fra.me.line = 1247;
+  fra.me.meth = LOCATE_parser___parser_nodes___AAtid___n_id;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* parser/parser_nodes.nit:1247 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_nodes, 1247);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
 static const char LOCATE_parser___parser_nodes___Start___n_base[] = "parser_nodes::Start::n_base";
 val_t parser___parser_nodes___Start___n_base(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1216;
+  fra.me.line = 1270;
   fra.me.meth = LOCATE_parser___parser_nodes___Start___n_base;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1216 */
+  /* parser/parser_nodes.nit:1270 */
   fra.me.REG[0] = ATTR_parser___parser_nodes___Start____n_base(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -7093,18 +7255,18 @@ val_t parser___parser_nodes___Start___n_eof(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1217;
+  fra.me.line = 1271;
   fra.me.meth = LOCATE_parser___parser_nodes___Start___n_eof;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_nodes.nit:1217 */
+  /* parser/parser_nodes.nit:1271 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___Start____n_eof(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_eof", LOCATE_parser___parser_nodes, 1217);
+    nit_abort("Uninitialized attribute %s", "_n_eof", LOCATE_parser___parser_nodes, 1271);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___Start____n_eof(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -7112,13 +7274,13 @@ val_t parser___parser_nodes___Start___n_eof(val_t p0){
 }
 static const char LOCATE_parser___parser_nodes___Start___init[] = "parser_nodes::Start::init";
 void parser___parser_nodes___Start___init(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___Start].i;
+  int itpos1 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___Start].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
-  if (init_table[itpos3]) return;
+  if (init_table[itpos1]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_nodes;
-  fra.me.line = 1218;
+  fra.me.line = 1272;
   fra.me.meth = LOCATE_parser___parser_nodes___Start___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -7129,11 +7291,11 @@ void parser___parser_nodes___Start___init(val_t p0, val_t p1, val_t p2, int* ini
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_nodes.nit:1220 */
+  /* parser/parser_nodes.nit:1274 */
   ATTR_parser___parser_nodes___Start____n_base(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_nodes.nit:1221 */
+  /* parser/parser_nodes.nit:1275 */
   ATTR_parser___parser_nodes___Start____n_eof(fra.me.REG[0]) = fra.me.REG[2];
   stack_frame_head = fra.me.prev;
-  init_table[itpos3] = 1;
+  init_table[itpos1] = 1;
   return;
 }
index c6f3d06..de5377f 100644 (file)
@@ -28,8 +28,6 @@ extern const classtable_elt_t VFT_parser___parser_nodes___TKwinterface[];
 
 extern const classtable_elt_t VFT_parser___parser_nodes___TKwenum[];
 
-extern const classtable_elt_t VFT_parser___parser_nodes___TKwspecial[];
-
 extern const classtable_elt_t VFT_parser___parser_nodes___TKwend[];
 
 extern const classtable_elt_t VFT_parser___parser_nodes___TKwmeth[];
@@ -174,6 +172,8 @@ extern const classtable_elt_t VFT_parser___parser_nodes___TStarship[];
 
 extern const classtable_elt_t VFT_parser___parser_nodes___TBang[];
 
+extern const classtable_elt_t VFT_parser___parser_nodes___TAt[];
+
 extern const classtable_elt_t VFT_parser___parser_nodes___TClassid[];
 
 extern const classtable_elt_t VFT_parser___parser_nodes___TId[];
@@ -206,6 +206,10 @@ extern const classtable_elt_t VFT_parser___parser_nodes___EOF[];
 
 extern const classtable_elt_t VFT_parser___parser_nodes___AError[];
 
+extern const classtable_elt_t VFT_parser___parser_nodes___ALexerError[];
+
+extern const classtable_elt_t VFT_parser___parser_nodes___AParserError[];
+
 extern const classtable_elt_t VFT_parser___parser_nodes___AModule[];
 
 extern const classtable_elt_t VFT_parser___parser_nodes___AModuledecl[];
@@ -558,6 +562,32 @@ extern const classtable_elt_t VFT_parser___parser_nodes___AQualified[];
 
 extern const classtable_elt_t VFT_parser___parser_nodes___ADoc[];
 
+extern const classtable_elt_t VFT_parser___parser_nodes___AAnnotations[];
+
+extern const classtable_elt_t VFT_parser___parser_nodes___AAnnotation[];
+
+extern const classtable_elt_t VFT_parser___parser_nodes___AAtArg[];
+
+extern const classtable_elt_t VFT_parser___parser_nodes___ATypeAtArg[];
+
+extern const classtable_elt_t VFT_parser___parser_nodes___AExprAtArg[];
+
+extern const classtable_elt_t VFT_parser___parser_nodes___AAtAtArg[];
+
+extern const classtable_elt_t VFT_parser___parser_nodes___AAtid[];
+
+extern const classtable_elt_t VFT_parser___parser_nodes___AIdAtid[];
+
+extern const classtable_elt_t VFT_parser___parser_nodes___AKwexternAtid[];
+
+extern const classtable_elt_t VFT_parser___parser_nodes___AKwinternAtid[];
+
+extern const classtable_elt_t VFT_parser___parser_nodes___AKwreadableAtid[];
+
+extern const classtable_elt_t VFT_parser___parser_nodes___AKwwritableAtid[];
+
+extern const classtable_elt_t VFT_parser___parser_nodes___AKwimportAtid[];
+
 extern const classtable_elt_t VFT_parser___parser_nodes___Start[];
 extern const char LOCATE_parser___parser_nodes[];
 extern const int SFT_parser___parser_nodes[];
@@ -573,1388 +603,1450 @@ extern const int SFT_parser___parser_nodes[];
 #define COLOR_parser___parser_nodes___Token (SFT_parser___parser_nodes[5])
 #define INIT_TABLE_POS_parser___parser_nodes___Token (SFT_parser___parser_nodes[6] + 0)
 #define CALL_parser___parser_nodes___Token___text(recv) ((parser___parser_nodes___Token___text_t)CALL((recv), (SFT_parser___parser_nodes[6] + 1)))
+#define CALL_parser___parser_nodes___Token___text__eq(recv) ((parser___parser_nodes___Token___text__eq_t)CALL((recv), (SFT_parser___parser_nodes[6] + 2)))
 #define ID_parser___parser_nodes___Prod (SFT_parser___parser_nodes[7])
 #define COLOR_parser___parser_nodes___Prod (SFT_parser___parser_nodes[8])
-#define INIT_TABLE_POS_parser___parser_nodes___Prod (SFT_parser___parser_nodes[9] + 0)
-#define CALL_parser___parser_nodes___Prod___location__eq(recv) ((parser___parser_nodes___Prod___location__eq_t)CALL((recv), (SFT_parser___parser_nodes[9] + 1)))
-#define ID_parser___parser_nodes___TEol (SFT_parser___parser_nodes[10])
-#define COLOR_parser___parser_nodes___TEol (SFT_parser___parser_nodes[11])
-#define INIT_TABLE_POS_parser___parser_nodes___TEol (SFT_parser___parser_nodes[12] + 0)
-#define ID_parser___parser_nodes___TComment (SFT_parser___parser_nodes[13])
-#define COLOR_parser___parser_nodes___TComment (SFT_parser___parser_nodes[14])
-#define INIT_TABLE_POS_parser___parser_nodes___TComment (SFT_parser___parser_nodes[15] + 0)
-#define ID_parser___parser_nodes___TokenKeyword (SFT_parser___parser_nodes[16])
-#define COLOR_parser___parser_nodes___TokenKeyword (SFT_parser___parser_nodes[17])
-#define INIT_TABLE_POS_parser___parser_nodes___TokenKeyword (SFT_parser___parser_nodes[18] + 0)
-#define ID_parser___parser_nodes___TKwmodule (SFT_parser___parser_nodes[19])
-#define COLOR_parser___parser_nodes___TKwmodule (SFT_parser___parser_nodes[20])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwmodule (SFT_parser___parser_nodes[21] + 0)
-#define ID_parser___parser_nodes___TKwimport (SFT_parser___parser_nodes[22])
-#define COLOR_parser___parser_nodes___TKwimport (SFT_parser___parser_nodes[23])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwimport (SFT_parser___parser_nodes[24] + 0)
-#define ID_parser___parser_nodes___TKwclass (SFT_parser___parser_nodes[25])
-#define COLOR_parser___parser_nodes___TKwclass (SFT_parser___parser_nodes[26])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwclass (SFT_parser___parser_nodes[27] + 0)
-#define ID_parser___parser_nodes___TKwabstract (SFT_parser___parser_nodes[28])
-#define COLOR_parser___parser_nodes___TKwabstract (SFT_parser___parser_nodes[29])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwabstract (SFT_parser___parser_nodes[30] + 0)
-#define ID_parser___parser_nodes___TKwinterface (SFT_parser___parser_nodes[31])
-#define COLOR_parser___parser_nodes___TKwinterface (SFT_parser___parser_nodes[32])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwinterface (SFT_parser___parser_nodes[33] + 0)
-#define ID_parser___parser_nodes___TKwenum (SFT_parser___parser_nodes[34])
-#define COLOR_parser___parser_nodes___TKwenum (SFT_parser___parser_nodes[35])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwenum (SFT_parser___parser_nodes[36] + 0)
-#define ID_parser___parser_nodes___TKwspecial (SFT_parser___parser_nodes[37])
-#define COLOR_parser___parser_nodes___TKwspecial (SFT_parser___parser_nodes[38])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwspecial (SFT_parser___parser_nodes[39] + 0)
-#define ID_parser___parser_nodes___TKwend (SFT_parser___parser_nodes[40])
-#define COLOR_parser___parser_nodes___TKwend (SFT_parser___parser_nodes[41])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwend (SFT_parser___parser_nodes[42] + 0)
-#define ID_parser___parser_nodes___TKwmeth (SFT_parser___parser_nodes[43])
-#define COLOR_parser___parser_nodes___TKwmeth (SFT_parser___parser_nodes[44])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwmeth (SFT_parser___parser_nodes[45] + 0)
-#define ID_parser___parser_nodes___TKwtype (SFT_parser___parser_nodes[46])
-#define COLOR_parser___parser_nodes___TKwtype (SFT_parser___parser_nodes[47])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwtype (SFT_parser___parser_nodes[48] + 0)
-#define ID_parser___parser_nodes___TKwinit (SFT_parser___parser_nodes[49])
-#define COLOR_parser___parser_nodes___TKwinit (SFT_parser___parser_nodes[50])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwinit (SFT_parser___parser_nodes[51] + 0)
-#define ID_parser___parser_nodes___TKwredef (SFT_parser___parser_nodes[52])
-#define COLOR_parser___parser_nodes___TKwredef (SFT_parser___parser_nodes[53])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwredef (SFT_parser___parser_nodes[54] + 0)
-#define ID_parser___parser_nodes___TKwis (SFT_parser___parser_nodes[55])
-#define COLOR_parser___parser_nodes___TKwis (SFT_parser___parser_nodes[56])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwis (SFT_parser___parser_nodes[57] + 0)
-#define ID_parser___parser_nodes___TKwdo (SFT_parser___parser_nodes[58])
-#define COLOR_parser___parser_nodes___TKwdo (SFT_parser___parser_nodes[59])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwdo (SFT_parser___parser_nodes[60] + 0)
-#define ID_parser___parser_nodes___TKwreadable (SFT_parser___parser_nodes[61])
-#define COLOR_parser___parser_nodes___TKwreadable (SFT_parser___parser_nodes[62])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwreadable (SFT_parser___parser_nodes[63] + 0)
-#define ID_parser___parser_nodes___TKwwritable (SFT_parser___parser_nodes[64])
-#define COLOR_parser___parser_nodes___TKwwritable (SFT_parser___parser_nodes[65])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwwritable (SFT_parser___parser_nodes[66] + 0)
-#define ID_parser___parser_nodes___TKwvar (SFT_parser___parser_nodes[67])
-#define COLOR_parser___parser_nodes___TKwvar (SFT_parser___parser_nodes[68])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwvar (SFT_parser___parser_nodes[69] + 0)
-#define ID_parser___parser_nodes___TKwintern (SFT_parser___parser_nodes[70])
-#define COLOR_parser___parser_nodes___TKwintern (SFT_parser___parser_nodes[71])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwintern (SFT_parser___parser_nodes[72] + 0)
-#define ID_parser___parser_nodes___TKwextern (SFT_parser___parser_nodes[73])
-#define COLOR_parser___parser_nodes___TKwextern (SFT_parser___parser_nodes[74])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwextern (SFT_parser___parser_nodes[75] + 0)
-#define ID_parser___parser_nodes___TKwprotected (SFT_parser___parser_nodes[76])
-#define COLOR_parser___parser_nodes___TKwprotected (SFT_parser___parser_nodes[77])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwprotected (SFT_parser___parser_nodes[78] + 0)
-#define ID_parser___parser_nodes___TKwprivate (SFT_parser___parser_nodes[79])
-#define COLOR_parser___parser_nodes___TKwprivate (SFT_parser___parser_nodes[80])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwprivate (SFT_parser___parser_nodes[81] + 0)
-#define ID_parser___parser_nodes___TKwintrude (SFT_parser___parser_nodes[82])
-#define COLOR_parser___parser_nodes___TKwintrude (SFT_parser___parser_nodes[83])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwintrude (SFT_parser___parser_nodes[84] + 0)
-#define ID_parser___parser_nodes___TKwif (SFT_parser___parser_nodes[85])
-#define COLOR_parser___parser_nodes___TKwif (SFT_parser___parser_nodes[86])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwif (SFT_parser___parser_nodes[87] + 0)
-#define ID_parser___parser_nodes___TKwthen (SFT_parser___parser_nodes[88])
-#define COLOR_parser___parser_nodes___TKwthen (SFT_parser___parser_nodes[89])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwthen (SFT_parser___parser_nodes[90] + 0)
-#define ID_parser___parser_nodes___TKwelse (SFT_parser___parser_nodes[91])
-#define COLOR_parser___parser_nodes___TKwelse (SFT_parser___parser_nodes[92])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwelse (SFT_parser___parser_nodes[93] + 0)
-#define ID_parser___parser_nodes___TKwwhile (SFT_parser___parser_nodes[94])
-#define COLOR_parser___parser_nodes___TKwwhile (SFT_parser___parser_nodes[95])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwwhile (SFT_parser___parser_nodes[96] + 0)
-#define ID_parser___parser_nodes___TKwloop (SFT_parser___parser_nodes[97])
-#define COLOR_parser___parser_nodes___TKwloop (SFT_parser___parser_nodes[98])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwloop (SFT_parser___parser_nodes[99] + 0)
-#define ID_parser___parser_nodes___TKwfor (SFT_parser___parser_nodes[100])
-#define COLOR_parser___parser_nodes___TKwfor (SFT_parser___parser_nodes[101])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwfor (SFT_parser___parser_nodes[102] + 0)
-#define ID_parser___parser_nodes___TKwin (SFT_parser___parser_nodes[103])
-#define COLOR_parser___parser_nodes___TKwin (SFT_parser___parser_nodes[104])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwin (SFT_parser___parser_nodes[105] + 0)
-#define ID_parser___parser_nodes___TKwand (SFT_parser___parser_nodes[106])
-#define COLOR_parser___parser_nodes___TKwand (SFT_parser___parser_nodes[107])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwand (SFT_parser___parser_nodes[108] + 0)
-#define ID_parser___parser_nodes___TKwor (SFT_parser___parser_nodes[109])
-#define COLOR_parser___parser_nodes___TKwor (SFT_parser___parser_nodes[110])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwor (SFT_parser___parser_nodes[111] + 0)
-#define ID_parser___parser_nodes___TKwnot (SFT_parser___parser_nodes[112])
-#define COLOR_parser___parser_nodes___TKwnot (SFT_parser___parser_nodes[113])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwnot (SFT_parser___parser_nodes[114] + 0)
-#define ID_parser___parser_nodes___TKwreturn (SFT_parser___parser_nodes[115])
-#define COLOR_parser___parser_nodes___TKwreturn (SFT_parser___parser_nodes[116])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwreturn (SFT_parser___parser_nodes[117] + 0)
-#define ID_parser___parser_nodes___TKwcontinue (SFT_parser___parser_nodes[118])
-#define COLOR_parser___parser_nodes___TKwcontinue (SFT_parser___parser_nodes[119])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwcontinue (SFT_parser___parser_nodes[120] + 0)
-#define ID_parser___parser_nodes___TKwbreak (SFT_parser___parser_nodes[121])
-#define COLOR_parser___parser_nodes___TKwbreak (SFT_parser___parser_nodes[122])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwbreak (SFT_parser___parser_nodes[123] + 0)
-#define ID_parser___parser_nodes___TKwabort (SFT_parser___parser_nodes[124])
-#define COLOR_parser___parser_nodes___TKwabort (SFT_parser___parser_nodes[125])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwabort (SFT_parser___parser_nodes[126] + 0)
-#define ID_parser___parser_nodes___TKwassert (SFT_parser___parser_nodes[127])
-#define COLOR_parser___parser_nodes___TKwassert (SFT_parser___parser_nodes[128])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwassert (SFT_parser___parser_nodes[129] + 0)
-#define ID_parser___parser_nodes___TKwnew (SFT_parser___parser_nodes[130])
-#define COLOR_parser___parser_nodes___TKwnew (SFT_parser___parser_nodes[131])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwnew (SFT_parser___parser_nodes[132] + 0)
-#define ID_parser___parser_nodes___TKwisa (SFT_parser___parser_nodes[133])
-#define COLOR_parser___parser_nodes___TKwisa (SFT_parser___parser_nodes[134])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwisa (SFT_parser___parser_nodes[135] + 0)
-#define ID_parser___parser_nodes___TKwonce (SFT_parser___parser_nodes[136])
-#define COLOR_parser___parser_nodes___TKwonce (SFT_parser___parser_nodes[137])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwonce (SFT_parser___parser_nodes[138] + 0)
-#define ID_parser___parser_nodes___TKwsuper (SFT_parser___parser_nodes[139])
-#define COLOR_parser___parser_nodes___TKwsuper (SFT_parser___parser_nodes[140])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwsuper (SFT_parser___parser_nodes[141] + 0)
-#define ID_parser___parser_nodes___TKwself (SFT_parser___parser_nodes[142])
-#define COLOR_parser___parser_nodes___TKwself (SFT_parser___parser_nodes[143])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwself (SFT_parser___parser_nodes[144] + 0)
-#define ID_parser___parser_nodes___TKwtrue (SFT_parser___parser_nodes[145])
-#define COLOR_parser___parser_nodes___TKwtrue (SFT_parser___parser_nodes[146])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwtrue (SFT_parser___parser_nodes[147] + 0)
-#define ID_parser___parser_nodes___TKwfalse (SFT_parser___parser_nodes[148])
-#define COLOR_parser___parser_nodes___TKwfalse (SFT_parser___parser_nodes[149])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwfalse (SFT_parser___parser_nodes[150] + 0)
-#define ID_parser___parser_nodes___TKwnull (SFT_parser___parser_nodes[151])
-#define COLOR_parser___parser_nodes___TKwnull (SFT_parser___parser_nodes[152])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwnull (SFT_parser___parser_nodes[153] + 0)
-#define ID_parser___parser_nodes___TKwas (SFT_parser___parser_nodes[154])
-#define COLOR_parser___parser_nodes___TKwas (SFT_parser___parser_nodes[155])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwas (SFT_parser___parser_nodes[156] + 0)
-#define ID_parser___parser_nodes___TKwnullable (SFT_parser___parser_nodes[157])
-#define COLOR_parser___parser_nodes___TKwnullable (SFT_parser___parser_nodes[158])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwnullable (SFT_parser___parser_nodes[159] + 0)
-#define ID_parser___parser_nodes___TKwisset (SFT_parser___parser_nodes[160])
-#define COLOR_parser___parser_nodes___TKwisset (SFT_parser___parser_nodes[161])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwisset (SFT_parser___parser_nodes[162] + 0)
-#define ID_parser___parser_nodes___TKwlabel (SFT_parser___parser_nodes[163])
-#define COLOR_parser___parser_nodes___TKwlabel (SFT_parser___parser_nodes[164])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwlabel (SFT_parser___parser_nodes[165] + 0)
-#define ID_parser___parser_nodes___TKwdebug (SFT_parser___parser_nodes[166])
-#define COLOR_parser___parser_nodes___TKwdebug (SFT_parser___parser_nodes[167])
-#define INIT_TABLE_POS_parser___parser_nodes___TKwdebug (SFT_parser___parser_nodes[168] + 0)
-#define ID_parser___parser_nodes___TOpar (SFT_parser___parser_nodes[169])
-#define COLOR_parser___parser_nodes___TOpar (SFT_parser___parser_nodes[170])
-#define INIT_TABLE_POS_parser___parser_nodes___TOpar (SFT_parser___parser_nodes[171] + 0)
-#define ID_parser___parser_nodes___TCpar (SFT_parser___parser_nodes[172])
-#define COLOR_parser___parser_nodes___TCpar (SFT_parser___parser_nodes[173])
-#define INIT_TABLE_POS_parser___parser_nodes___TCpar (SFT_parser___parser_nodes[174] + 0)
-#define ID_parser___parser_nodes___TObra (SFT_parser___parser_nodes[175])
-#define COLOR_parser___parser_nodes___TObra (SFT_parser___parser_nodes[176])
-#define INIT_TABLE_POS_parser___parser_nodes___TObra (SFT_parser___parser_nodes[177] + 0)
-#define ID_parser___parser_nodes___TCbra (SFT_parser___parser_nodes[178])
-#define COLOR_parser___parser_nodes___TCbra (SFT_parser___parser_nodes[179])
-#define INIT_TABLE_POS_parser___parser_nodes___TCbra (SFT_parser___parser_nodes[180] + 0)
-#define ID_parser___parser_nodes___TComma (SFT_parser___parser_nodes[181])
-#define COLOR_parser___parser_nodes___TComma (SFT_parser___parser_nodes[182])
-#define INIT_TABLE_POS_parser___parser_nodes___TComma (SFT_parser___parser_nodes[183] + 0)
-#define ID_parser___parser_nodes___TColumn (SFT_parser___parser_nodes[184])
-#define COLOR_parser___parser_nodes___TColumn (SFT_parser___parser_nodes[185])
-#define INIT_TABLE_POS_parser___parser_nodes___TColumn (SFT_parser___parser_nodes[186] + 0)
-#define ID_parser___parser_nodes___TQuad (SFT_parser___parser_nodes[187])
-#define COLOR_parser___parser_nodes___TQuad (SFT_parser___parser_nodes[188])
-#define INIT_TABLE_POS_parser___parser_nodes___TQuad (SFT_parser___parser_nodes[189] + 0)
-#define ID_parser___parser_nodes___TAssign (SFT_parser___parser_nodes[190])
-#define COLOR_parser___parser_nodes___TAssign (SFT_parser___parser_nodes[191])
-#define INIT_TABLE_POS_parser___parser_nodes___TAssign (SFT_parser___parser_nodes[192] + 0)
-#define ID_parser___parser_nodes___TokenOperator (SFT_parser___parser_nodes[193])
-#define COLOR_parser___parser_nodes___TokenOperator (SFT_parser___parser_nodes[194])
-#define INIT_TABLE_POS_parser___parser_nodes___TokenOperator (SFT_parser___parser_nodes[195] + 0)
-#define ID_parser___parser_nodes___TPluseq (SFT_parser___parser_nodes[196])
-#define COLOR_parser___parser_nodes___TPluseq (SFT_parser___parser_nodes[197])
-#define INIT_TABLE_POS_parser___parser_nodes___TPluseq (SFT_parser___parser_nodes[198] + 0)
-#define ID_parser___parser_nodes___TMinuseq (SFT_parser___parser_nodes[199])
-#define COLOR_parser___parser_nodes___TMinuseq (SFT_parser___parser_nodes[200])
-#define INIT_TABLE_POS_parser___parser_nodes___TMinuseq (SFT_parser___parser_nodes[201] + 0)
-#define ID_parser___parser_nodes___TDotdotdot (SFT_parser___parser_nodes[202])
-#define COLOR_parser___parser_nodes___TDotdotdot (SFT_parser___parser_nodes[203])
-#define INIT_TABLE_POS_parser___parser_nodes___TDotdotdot (SFT_parser___parser_nodes[204] + 0)
-#define ID_parser___parser_nodes___TDotdot (SFT_parser___parser_nodes[205])
-#define COLOR_parser___parser_nodes___TDotdot (SFT_parser___parser_nodes[206])
-#define INIT_TABLE_POS_parser___parser_nodes___TDotdot (SFT_parser___parser_nodes[207] + 0)
-#define ID_parser___parser_nodes___TDot (SFT_parser___parser_nodes[208])
-#define COLOR_parser___parser_nodes___TDot (SFT_parser___parser_nodes[209])
-#define INIT_TABLE_POS_parser___parser_nodes___TDot (SFT_parser___parser_nodes[210] + 0)
-#define ID_parser___parser_nodes___TPlus (SFT_parser___parser_nodes[211])
-#define COLOR_parser___parser_nodes___TPlus (SFT_parser___parser_nodes[212])
-#define INIT_TABLE_POS_parser___parser_nodes___TPlus (SFT_parser___parser_nodes[213] + 0)
-#define ID_parser___parser_nodes___TMinus (SFT_parser___parser_nodes[214])
-#define COLOR_parser___parser_nodes___TMinus (SFT_parser___parser_nodes[215])
-#define INIT_TABLE_POS_parser___parser_nodes___TMinus (SFT_parser___parser_nodes[216] + 0)
-#define ID_parser___parser_nodes___TStar (SFT_parser___parser_nodes[217])
-#define COLOR_parser___parser_nodes___TStar (SFT_parser___parser_nodes[218])
-#define INIT_TABLE_POS_parser___parser_nodes___TStar (SFT_parser___parser_nodes[219] + 0)
-#define ID_parser___parser_nodes___TSlash (SFT_parser___parser_nodes[220])
-#define COLOR_parser___parser_nodes___TSlash (SFT_parser___parser_nodes[221])
-#define INIT_TABLE_POS_parser___parser_nodes___TSlash (SFT_parser___parser_nodes[222] + 0)
-#define ID_parser___parser_nodes___TPercent (SFT_parser___parser_nodes[223])
-#define COLOR_parser___parser_nodes___TPercent (SFT_parser___parser_nodes[224])
-#define INIT_TABLE_POS_parser___parser_nodes___TPercent (SFT_parser___parser_nodes[225] + 0)
-#define ID_parser___parser_nodes___TEq (SFT_parser___parser_nodes[226])
-#define COLOR_parser___parser_nodes___TEq (SFT_parser___parser_nodes[227])
-#define INIT_TABLE_POS_parser___parser_nodes___TEq (SFT_parser___parser_nodes[228] + 0)
-#define ID_parser___parser_nodes___TNe (SFT_parser___parser_nodes[229])
-#define COLOR_parser___parser_nodes___TNe (SFT_parser___parser_nodes[230])
-#define INIT_TABLE_POS_parser___parser_nodes___TNe (SFT_parser___parser_nodes[231] + 0)
-#define ID_parser___parser_nodes___TLt (SFT_parser___parser_nodes[232])
-#define COLOR_parser___parser_nodes___TLt (SFT_parser___parser_nodes[233])
-#define INIT_TABLE_POS_parser___parser_nodes___TLt (SFT_parser___parser_nodes[234] + 0)
-#define ID_parser___parser_nodes___TLe (SFT_parser___parser_nodes[235])
-#define COLOR_parser___parser_nodes___TLe (SFT_parser___parser_nodes[236])
-#define INIT_TABLE_POS_parser___parser_nodes___TLe (SFT_parser___parser_nodes[237] + 0)
-#define ID_parser___parser_nodes___TLl (SFT_parser___parser_nodes[238])
-#define COLOR_parser___parser_nodes___TLl (SFT_parser___parser_nodes[239])
-#define INIT_TABLE_POS_parser___parser_nodes___TLl (SFT_parser___parser_nodes[240] + 0)
-#define ID_parser___parser_nodes___TGt (SFT_parser___parser_nodes[241])
-#define COLOR_parser___parser_nodes___TGt (SFT_parser___parser_nodes[242])
-#define INIT_TABLE_POS_parser___parser_nodes___TGt (SFT_parser___parser_nodes[243] + 0)
-#define ID_parser___parser_nodes___TGe (SFT_parser___parser_nodes[244])
-#define COLOR_parser___parser_nodes___TGe (SFT_parser___parser_nodes[245])
-#define INIT_TABLE_POS_parser___parser_nodes___TGe (SFT_parser___parser_nodes[246] + 0)
-#define ID_parser___parser_nodes___TGg (SFT_parser___parser_nodes[247])
-#define COLOR_parser___parser_nodes___TGg (SFT_parser___parser_nodes[248])
-#define INIT_TABLE_POS_parser___parser_nodes___TGg (SFT_parser___parser_nodes[249] + 0)
-#define ID_parser___parser_nodes___TStarship (SFT_parser___parser_nodes[250])
-#define COLOR_parser___parser_nodes___TStarship (SFT_parser___parser_nodes[251])
-#define INIT_TABLE_POS_parser___parser_nodes___TStarship (SFT_parser___parser_nodes[252] + 0)
-#define ID_parser___parser_nodes___TBang (SFT_parser___parser_nodes[253])
-#define COLOR_parser___parser_nodes___TBang (SFT_parser___parser_nodes[254])
-#define INIT_TABLE_POS_parser___parser_nodes___TBang (SFT_parser___parser_nodes[255] + 0)
-#define ID_parser___parser_nodes___TClassid (SFT_parser___parser_nodes[256])
-#define COLOR_parser___parser_nodes___TClassid (SFT_parser___parser_nodes[257])
-#define INIT_TABLE_POS_parser___parser_nodes___TClassid (SFT_parser___parser_nodes[258] + 0)
-#define ID_parser___parser_nodes___TId (SFT_parser___parser_nodes[259])
-#define COLOR_parser___parser_nodes___TId (SFT_parser___parser_nodes[260])
-#define INIT_TABLE_POS_parser___parser_nodes___TId (SFT_parser___parser_nodes[261] + 0)
-#define ID_parser___parser_nodes___TAttrid (SFT_parser___parser_nodes[262])
-#define COLOR_parser___parser_nodes___TAttrid (SFT_parser___parser_nodes[263])
-#define INIT_TABLE_POS_parser___parser_nodes___TAttrid (SFT_parser___parser_nodes[264] + 0)
-#define ID_parser___parser_nodes___TokenLiteral (SFT_parser___parser_nodes[265])
-#define COLOR_parser___parser_nodes___TokenLiteral (SFT_parser___parser_nodes[266])
-#define INIT_TABLE_POS_parser___parser_nodes___TokenLiteral (SFT_parser___parser_nodes[267] + 0)
-#define ID_parser___parser_nodes___TNumber (SFT_parser___parser_nodes[268])
-#define COLOR_parser___parser_nodes___TNumber (SFT_parser___parser_nodes[269])
-#define INIT_TABLE_POS_parser___parser_nodes___TNumber (SFT_parser___parser_nodes[270] + 0)
-#define ID_parser___parser_nodes___TFloat (SFT_parser___parser_nodes[271])
-#define COLOR_parser___parser_nodes___TFloat (SFT_parser___parser_nodes[272])
-#define INIT_TABLE_POS_parser___parser_nodes___TFloat (SFT_parser___parser_nodes[273] + 0)
-#define ID_parser___parser_nodes___TChar (SFT_parser___parser_nodes[274])
-#define COLOR_parser___parser_nodes___TChar (SFT_parser___parser_nodes[275])
-#define INIT_TABLE_POS_parser___parser_nodes___TChar (SFT_parser___parser_nodes[276] + 0)
-#define ID_parser___parser_nodes___TString (SFT_parser___parser_nodes[277])
-#define COLOR_parser___parser_nodes___TString (SFT_parser___parser_nodes[278])
-#define INIT_TABLE_POS_parser___parser_nodes___TString (SFT_parser___parser_nodes[279] + 0)
-#define ID_parser___parser_nodes___TStartString (SFT_parser___parser_nodes[280])
-#define COLOR_parser___parser_nodes___TStartString (SFT_parser___parser_nodes[281])
-#define INIT_TABLE_POS_parser___parser_nodes___TStartString (SFT_parser___parser_nodes[282] + 0)
-#define ID_parser___parser_nodes___TMidString (SFT_parser___parser_nodes[283])
-#define COLOR_parser___parser_nodes___TMidString (SFT_parser___parser_nodes[284])
-#define INIT_TABLE_POS_parser___parser_nodes___TMidString (SFT_parser___parser_nodes[285] + 0)
-#define ID_parser___parser_nodes___TEndString (SFT_parser___parser_nodes[286])
-#define COLOR_parser___parser_nodes___TEndString (SFT_parser___parser_nodes[287])
-#define INIT_TABLE_POS_parser___parser_nodes___TEndString (SFT_parser___parser_nodes[288] + 0)
-#define ID_parser___parser_nodes___TBadString (SFT_parser___parser_nodes[289])
-#define COLOR_parser___parser_nodes___TBadString (SFT_parser___parser_nodes[290])
-#define INIT_TABLE_POS_parser___parser_nodes___TBadString (SFT_parser___parser_nodes[291] + 0)
-#define ID_parser___parser_nodes___TBadChar (SFT_parser___parser_nodes[292])
-#define COLOR_parser___parser_nodes___TBadChar (SFT_parser___parser_nodes[293])
-#define INIT_TABLE_POS_parser___parser_nodes___TBadChar (SFT_parser___parser_nodes[294] + 0)
-#define ID_parser___parser_nodes___TExternCodeSegment (SFT_parser___parser_nodes[295])
-#define COLOR_parser___parser_nodes___TExternCodeSegment (SFT_parser___parser_nodes[296])
-#define INIT_TABLE_POS_parser___parser_nodes___TExternCodeSegment (SFT_parser___parser_nodes[297] + 0)
-#define ID_parser___parser_nodes___EOF (SFT_parser___parser_nodes[298])
-#define COLOR_parser___parser_nodes___EOF (SFT_parser___parser_nodes[299])
-#define INIT_TABLE_POS_parser___parser_nodes___EOF (SFT_parser___parser_nodes[300] + 0)
-#define CALL_parser___parser_nodes___EOF___noinit(recv) ((parser___parser_nodes___EOF___noinit_t)CALL((recv), (SFT_parser___parser_nodes[300] + 1)))
-#define ID_parser___parser_nodes___AError (SFT_parser___parser_nodes[301])
-#define COLOR_parser___parser_nodes___AError (SFT_parser___parser_nodes[302])
-#define INIT_TABLE_POS_parser___parser_nodes___AError (SFT_parser___parser_nodes[303] + 0)
-#define CALL_parser___parser_nodes___AError___noinit(recv) ((parser___parser_nodes___AError___noinit_t)CALL((recv), (SFT_parser___parser_nodes[303] + 1)))
-#define ID_parser___parser_nodes___AModule (SFT_parser___parser_nodes[304])
-#define COLOR_parser___parser_nodes___AModule (SFT_parser___parser_nodes[305])
-#define ATTR_parser___parser_nodes___AModule____n_moduledecl(recv) ATTR(recv, (SFT_parser___parser_nodes[306] + 0))
-#define ATTR_parser___parser_nodes___AModule____n_imports(recv) ATTR(recv, (SFT_parser___parser_nodes[306] + 1))
-#define ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(recv) ATTR(recv, (SFT_parser___parser_nodes[306] + 2))
-#define ATTR_parser___parser_nodes___AModule____n_classdefs(recv) ATTR(recv, (SFT_parser___parser_nodes[306] + 3))
-#define INIT_TABLE_POS_parser___parser_nodes___AModule (SFT_parser___parser_nodes[307] + 0)
-#define CALL_parser___parser_nodes___AModule___n_moduledecl(recv) ((parser___parser_nodes___AModule___n_moduledecl_t)CALL((recv), (SFT_parser___parser_nodes[307] + 1)))
-#define CALL_parser___parser_nodes___AModule___n_imports(recv) ((parser___parser_nodes___AModule___n_imports_t)CALL((recv), (SFT_parser___parser_nodes[307] + 2)))
-#define CALL_parser___parser_nodes___AModule___n_extern_code_blocks(recv) ((parser___parser_nodes___AModule___n_extern_code_blocks_t)CALL((recv), (SFT_parser___parser_nodes[307] + 3)))
-#define CALL_parser___parser_nodes___AModule___n_classdefs(recv) ((parser___parser_nodes___AModule___n_classdefs_t)CALL((recv), (SFT_parser___parser_nodes[307] + 4)))
-#define ID_parser___parser_nodes___AModuledecl (SFT_parser___parser_nodes[308])
-#define COLOR_parser___parser_nodes___AModuledecl (SFT_parser___parser_nodes[309])
-#define ATTR_parser___parser_nodes___AModuledecl____n_doc(recv) ATTR(recv, (SFT_parser___parser_nodes[310] + 0))
-#define ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(recv) ATTR(recv, (SFT_parser___parser_nodes[310] + 1))
-#define ATTR_parser___parser_nodes___AModuledecl____n_name(recv) ATTR(recv, (SFT_parser___parser_nodes[310] + 2))
-#define INIT_TABLE_POS_parser___parser_nodes___AModuledecl (SFT_parser___parser_nodes[311] + 0)
-#define CALL_parser___parser_nodes___AModuledecl___n_doc(recv) ((parser___parser_nodes___AModuledecl___n_doc_t)CALL((recv), (SFT_parser___parser_nodes[311] + 1)))
-#define CALL_parser___parser_nodes___AModuledecl___n_kwmodule(recv) ((parser___parser_nodes___AModuledecl___n_kwmodule_t)CALL((recv), (SFT_parser___parser_nodes[311] + 2)))
-#define CALL_parser___parser_nodes___AModuledecl___n_name(recv) ((parser___parser_nodes___AModuledecl___n_name_t)CALL((recv), (SFT_parser___parser_nodes[311] + 3)))
-#define ID_parser___parser_nodes___AImport (SFT_parser___parser_nodes[312])
-#define COLOR_parser___parser_nodes___AImport (SFT_parser___parser_nodes[313])
-#define INIT_TABLE_POS_parser___parser_nodes___AImport (SFT_parser___parser_nodes[314] + 0)
-#define ID_parser___parser_nodes___AStdImport (SFT_parser___parser_nodes[315])
-#define COLOR_parser___parser_nodes___AStdImport (SFT_parser___parser_nodes[316])
-#define ATTR_parser___parser_nodes___AStdImport____n_visibility(recv) ATTR(recv, (SFT_parser___parser_nodes[317] + 0))
-#define ATTR_parser___parser_nodes___AStdImport____n_kwimport(recv) ATTR(recv, (SFT_parser___parser_nodes[317] + 1))
-#define ATTR_parser___parser_nodes___AStdImport____n_name(recv) ATTR(recv, (SFT_parser___parser_nodes[317] + 2))
-#define INIT_TABLE_POS_parser___parser_nodes___AStdImport (SFT_parser___parser_nodes[318] + 0)
-#define CALL_parser___parser_nodes___AStdImport___n_visibility(recv) ((parser___parser_nodes___AStdImport___n_visibility_t)CALL((recv), (SFT_parser___parser_nodes[318] + 1)))
-#define CALL_parser___parser_nodes___AStdImport___n_kwimport(recv) ((parser___parser_nodes___AStdImport___n_kwimport_t)CALL((recv), (SFT_parser___parser_nodes[318] + 2)))
-#define CALL_parser___parser_nodes___AStdImport___n_name(recv) ((parser___parser_nodes___AStdImport___n_name_t)CALL((recv), (SFT_parser___parser_nodes[318] + 3)))
-#define ID_parser___parser_nodes___ANoImport (SFT_parser___parser_nodes[319])
-#define COLOR_parser___parser_nodes___ANoImport (SFT_parser___parser_nodes[320])
-#define ATTR_parser___parser_nodes___ANoImport____n_visibility(recv) ATTR(recv, (SFT_parser___parser_nodes[321] + 0))
-#define ATTR_parser___parser_nodes___ANoImport____n_kwimport(recv) ATTR(recv, (SFT_parser___parser_nodes[321] + 1))
-#define ATTR_parser___parser_nodes___ANoImport____n_kwend(recv) ATTR(recv, (SFT_parser___parser_nodes[321] + 2))
-#define INIT_TABLE_POS_parser___parser_nodes___ANoImport (SFT_parser___parser_nodes[322] + 0)
-#define CALL_parser___parser_nodes___ANoImport___n_visibility(recv) ((parser___parser_nodes___ANoImport___n_visibility_t)CALL((recv), (SFT_parser___parser_nodes[322] + 1)))
-#define CALL_parser___parser_nodes___ANoImport___n_kwimport(recv) ((parser___parser_nodes___ANoImport___n_kwimport_t)CALL((recv), (SFT_parser___parser_nodes[322] + 2)))
-#define CALL_parser___parser_nodes___ANoImport___n_kwend(recv) ((parser___parser_nodes___ANoImport___n_kwend_t)CALL((recv), (SFT_parser___parser_nodes[322] + 3)))
-#define ID_parser___parser_nodes___AVisibility (SFT_parser___parser_nodes[323])
-#define COLOR_parser___parser_nodes___AVisibility (SFT_parser___parser_nodes[324])
-#define INIT_TABLE_POS_parser___parser_nodes___AVisibility (SFT_parser___parser_nodes[325] + 0)
-#define ID_parser___parser_nodes___APublicVisibility (SFT_parser___parser_nodes[326])
-#define COLOR_parser___parser_nodes___APublicVisibility (SFT_parser___parser_nodes[327])
-#define INIT_TABLE_POS_parser___parser_nodes___APublicVisibility (SFT_parser___parser_nodes[328] + 0)
-#define ID_parser___parser_nodes___APrivateVisibility (SFT_parser___parser_nodes[329])
-#define COLOR_parser___parser_nodes___APrivateVisibility (SFT_parser___parser_nodes[330])
-#define ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(recv) ATTR(recv, (SFT_parser___parser_nodes[331] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___APrivateVisibility (SFT_parser___parser_nodes[332] + 0)
-#define CALL_parser___parser_nodes___APrivateVisibility___n_kwprivate(recv) ((parser___parser_nodes___APrivateVisibility___n_kwprivate_t)CALL((recv), (SFT_parser___parser_nodes[332] + 1)))
-#define ID_parser___parser_nodes___AProtectedVisibility (SFT_parser___parser_nodes[333])
-#define COLOR_parser___parser_nodes___AProtectedVisibility (SFT_parser___parser_nodes[334])
-#define ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(recv) ATTR(recv, (SFT_parser___parser_nodes[335] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AProtectedVisibility (SFT_parser___parser_nodes[336] + 0)
-#define CALL_parser___parser_nodes___AProtectedVisibility___n_kwprotected(recv) ((parser___parser_nodes___AProtectedVisibility___n_kwprotected_t)CALL((recv), (SFT_parser___parser_nodes[336] + 1)))
-#define ID_parser___parser_nodes___AIntrudeVisibility (SFT_parser___parser_nodes[337])
-#define COLOR_parser___parser_nodes___AIntrudeVisibility (SFT_parser___parser_nodes[338])
-#define ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(recv) ATTR(recv, (SFT_parser___parser_nodes[339] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AIntrudeVisibility (SFT_parser___parser_nodes[340] + 0)
-#define CALL_parser___parser_nodes___AIntrudeVisibility___n_kwintrude(recv) ((parser___parser_nodes___AIntrudeVisibility___n_kwintrude_t)CALL((recv), (SFT_parser___parser_nodes[340] + 1)))
-#define ID_parser___parser_nodes___AClassdef (SFT_parser___parser_nodes[341])
-#define COLOR_parser___parser_nodes___AClassdef (SFT_parser___parser_nodes[342])
-#define ATTR_parser___parser_nodes___AClassdef____n_propdefs(recv) ATTR(recv, (SFT_parser___parser_nodes[343] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AClassdef (SFT_parser___parser_nodes[344] + 0)
-#define CALL_parser___parser_nodes___AClassdef___n_propdefs(recv) ((parser___parser_nodes___AClassdef___n_propdefs_t)CALL((recv), (SFT_parser___parser_nodes[344] + 1)))
-#define ID_parser___parser_nodes___AStdClassdef (SFT_parser___parser_nodes[345])
-#define COLOR_parser___parser_nodes___AStdClassdef (SFT_parser___parser_nodes[346])
-#define ATTR_parser___parser_nodes___AStdClassdef____n_doc(recv) ATTR(recv, (SFT_parser___parser_nodes[347] + 0))
-#define ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(recv) ATTR(recv, (SFT_parser___parser_nodes[347] + 1))
-#define ATTR_parser___parser_nodes___AStdClassdef____n_visibility(recv) ATTR(recv, (SFT_parser___parser_nodes[347] + 2))
-#define ATTR_parser___parser_nodes___AStdClassdef____n_classkind(recv) ATTR(recv, (SFT_parser___parser_nodes[347] + 3))
-#define ATTR_parser___parser_nodes___AStdClassdef____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[347] + 4))
-#define ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(recv) ATTR(recv, (SFT_parser___parser_nodes[347] + 5))
-#define ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(recv) ATTR(recv, (SFT_parser___parser_nodes[347] + 6))
-#define ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(recv) ATTR(recv, (SFT_parser___parser_nodes[347] + 7))
-#define ATTR_parser___parser_nodes___AStdClassdef____n_kwend(recv) ATTR(recv, (SFT_parser___parser_nodes[347] + 8))
-#define INIT_TABLE_POS_parser___parser_nodes___AStdClassdef (SFT_parser___parser_nodes[348] + 0)
-#define CALL_parser___parser_nodes___AStdClassdef___n_doc(recv) ((parser___parser_nodes___AStdClassdef___n_doc_t)CALL((recv), (SFT_parser___parser_nodes[348] + 1)))
-#define CALL_parser___parser_nodes___AStdClassdef___n_kwredef(recv) ((parser___parser_nodes___AStdClassdef___n_kwredef_t)CALL((recv), (SFT_parser___parser_nodes[348] + 2)))
-#define CALL_parser___parser_nodes___AStdClassdef___n_visibility(recv) ((parser___parser_nodes___AStdClassdef___n_visibility_t)CALL((recv), (SFT_parser___parser_nodes[348] + 3)))
-#define CALL_parser___parser_nodes___AStdClassdef___n_classkind(recv) ((parser___parser_nodes___AStdClassdef___n_classkind_t)CALL((recv), (SFT_parser___parser_nodes[348] + 4)))
-#define CALL_parser___parser_nodes___AStdClassdef___n_id(recv) ((parser___parser_nodes___AStdClassdef___n_id_t)CALL((recv), (SFT_parser___parser_nodes[348] + 5)))
-#define CALL_parser___parser_nodes___AStdClassdef___n_formaldefs(recv) ((parser___parser_nodes___AStdClassdef___n_formaldefs_t)CALL((recv), (SFT_parser___parser_nodes[348] + 6)))
-#define CALL_parser___parser_nodes___AStdClassdef___n_extern_code_block(recv) ((parser___parser_nodes___AStdClassdef___n_extern_code_block_t)CALL((recv), (SFT_parser___parser_nodes[348] + 7)))
-#define CALL_parser___parser_nodes___AStdClassdef___n_superclasses(recv) ((parser___parser_nodes___AStdClassdef___n_superclasses_t)CALL((recv), (SFT_parser___parser_nodes[348] + 8)))
-#define CALL_parser___parser_nodes___AStdClassdef___n_kwend(recv) ((parser___parser_nodes___AStdClassdef___n_kwend_t)CALL((recv), (SFT_parser___parser_nodes[348] + 9)))
-#define ID_parser___parser_nodes___ATopClassdef (SFT_parser___parser_nodes[349])
-#define COLOR_parser___parser_nodes___ATopClassdef (SFT_parser___parser_nodes[350])
-#define INIT_TABLE_POS_parser___parser_nodes___ATopClassdef (SFT_parser___parser_nodes[351] + 0)
-#define ID_parser___parser_nodes___AMainClassdef (SFT_parser___parser_nodes[352])
-#define COLOR_parser___parser_nodes___AMainClassdef (SFT_parser___parser_nodes[353])
-#define INIT_TABLE_POS_parser___parser_nodes___AMainClassdef (SFT_parser___parser_nodes[354] + 0)
-#define ID_parser___parser_nodes___AClasskind (SFT_parser___parser_nodes[355])
-#define COLOR_parser___parser_nodes___AClasskind (SFT_parser___parser_nodes[356])
-#define INIT_TABLE_POS_parser___parser_nodes___AClasskind (SFT_parser___parser_nodes[357] + 0)
-#define ID_parser___parser_nodes___AConcreteClasskind (SFT_parser___parser_nodes[358])
-#define COLOR_parser___parser_nodes___AConcreteClasskind (SFT_parser___parser_nodes[359])
-#define ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(recv) ATTR(recv, (SFT_parser___parser_nodes[360] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AConcreteClasskind (SFT_parser___parser_nodes[361] + 0)
-#define CALL_parser___parser_nodes___AConcreteClasskind___n_kwclass(recv) ((parser___parser_nodes___AConcreteClasskind___n_kwclass_t)CALL((recv), (SFT_parser___parser_nodes[361] + 1)))
-#define ID_parser___parser_nodes___AAbstractClasskind (SFT_parser___parser_nodes[362])
-#define COLOR_parser___parser_nodes___AAbstractClasskind (SFT_parser___parser_nodes[363])
-#define ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(recv) ATTR(recv, (SFT_parser___parser_nodes[364] + 0))
-#define ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(recv) ATTR(recv, (SFT_parser___parser_nodes[364] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AAbstractClasskind (SFT_parser___parser_nodes[365] + 0)
-#define CALL_parser___parser_nodes___AAbstractClasskind___n_kwabstract(recv) ((parser___parser_nodes___AAbstractClasskind___n_kwabstract_t)CALL((recv), (SFT_parser___parser_nodes[365] + 1)))
-#define CALL_parser___parser_nodes___AAbstractClasskind___n_kwclass(recv) ((parser___parser_nodes___AAbstractClasskind___n_kwclass_t)CALL((recv), (SFT_parser___parser_nodes[365] + 2)))
-#define ID_parser___parser_nodes___AInterfaceClasskind (SFT_parser___parser_nodes[366])
-#define COLOR_parser___parser_nodes___AInterfaceClasskind (SFT_parser___parser_nodes[367])
-#define ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(recv) ATTR(recv, (SFT_parser___parser_nodes[368] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AInterfaceClasskind (SFT_parser___parser_nodes[369] + 0)
-#define CALL_parser___parser_nodes___AInterfaceClasskind___n_kwinterface(recv) ((parser___parser_nodes___AInterfaceClasskind___n_kwinterface_t)CALL((recv), (SFT_parser___parser_nodes[369] + 1)))
-#define ID_parser___parser_nodes___AEnumClasskind (SFT_parser___parser_nodes[370])
-#define COLOR_parser___parser_nodes___AEnumClasskind (SFT_parser___parser_nodes[371])
-#define ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(recv) ATTR(recv, (SFT_parser___parser_nodes[372] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AEnumClasskind (SFT_parser___parser_nodes[373] + 0)
-#define CALL_parser___parser_nodes___AEnumClasskind___n_kwenum(recv) ((parser___parser_nodes___AEnumClasskind___n_kwenum_t)CALL((recv), (SFT_parser___parser_nodes[373] + 1)))
-#define ID_parser___parser_nodes___AExternClasskind (SFT_parser___parser_nodes[374])
-#define COLOR_parser___parser_nodes___AExternClasskind (SFT_parser___parser_nodes[375])
-#define ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(recv) ATTR(recv, (SFT_parser___parser_nodes[376] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AExternClasskind (SFT_parser___parser_nodes[377] + 0)
-#define CALL_parser___parser_nodes___AExternClasskind___n_kwextern(recv) ((parser___parser_nodes___AExternClasskind___n_kwextern_t)CALL((recv), (SFT_parser___parser_nodes[377] + 1)))
-#define ID_parser___parser_nodes___AFormaldef (SFT_parser___parser_nodes[378])
-#define COLOR_parser___parser_nodes___AFormaldef (SFT_parser___parser_nodes[379])
-#define ATTR_parser___parser_nodes___AFormaldef____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[380] + 0))
-#define ATTR_parser___parser_nodes___AFormaldef____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[380] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AFormaldef (SFT_parser___parser_nodes[381] + 0)
-#define CALL_parser___parser_nodes___AFormaldef___n_id(recv) ((parser___parser_nodes___AFormaldef___n_id_t)CALL((recv), (SFT_parser___parser_nodes[381] + 1)))
-#define CALL_parser___parser_nodes___AFormaldef___n_type(recv) ((parser___parser_nodes___AFormaldef___n_type_t)CALL((recv), (SFT_parser___parser_nodes[381] + 2)))
-#define ID_parser___parser_nodes___ASuperclass (SFT_parser___parser_nodes[382])
-#define COLOR_parser___parser_nodes___ASuperclass (SFT_parser___parser_nodes[383])
-#define ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(recv) ATTR(recv, (SFT_parser___parser_nodes[384] + 0))
-#define ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(recv) ATTR(recv, (SFT_parser___parser_nodes[384] + 1))
-#define ATTR_parser___parser_nodes___ASuperclass____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[384] + 2))
-#define INIT_TABLE_POS_parser___parser_nodes___ASuperclass (SFT_parser___parser_nodes[385] + 0)
-#define CALL_parser___parser_nodes___ASuperclass___n_kwspecial(recv) ((parser___parser_nodes___ASuperclass___n_kwspecial_t)CALL((recv), (SFT_parser___parser_nodes[385] + 1)))
-#define CALL_parser___parser_nodes___ASuperclass___n_kwsuper(recv) ((parser___parser_nodes___ASuperclass___n_kwsuper_t)CALL((recv), (SFT_parser___parser_nodes[385] + 2)))
-#define CALL_parser___parser_nodes___ASuperclass___n_type(recv) ((parser___parser_nodes___ASuperclass___n_type_t)CALL((recv), (SFT_parser___parser_nodes[385] + 3)))
-#define ID_parser___parser_nodes___APropdef (SFT_parser___parser_nodes[386])
-#define COLOR_parser___parser_nodes___APropdef (SFT_parser___parser_nodes[387])
-#define ATTR_parser___parser_nodes___APropdef____n_doc(recv) ATTR(recv, (SFT_parser___parser_nodes[388] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___APropdef (SFT_parser___parser_nodes[389] + 0)
-#define CALL_parser___parser_nodes___APropdef___n_doc(recv) ((parser___parser_nodes___APropdef___n_doc_t)CALL((recv), (SFT_parser___parser_nodes[389] + 1)))
-#define ID_parser___parser_nodes___AAttrPropdef (SFT_parser___parser_nodes[390])
-#define COLOR_parser___parser_nodes___AAttrPropdef (SFT_parser___parser_nodes[391])
-#define ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(recv) ATTR(recv, (SFT_parser___parser_nodes[392] + 0))
-#define ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(recv) ATTR(recv, (SFT_parser___parser_nodes[392] + 1))
-#define ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(recv) ATTR(recv, (SFT_parser___parser_nodes[392] + 2))
-#define ATTR_parser___parser_nodes___AAttrPropdef____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[392] + 3))
-#define ATTR_parser___parser_nodes___AAttrPropdef____n_id2(recv) ATTR(recv, (SFT_parser___parser_nodes[392] + 4))
-#define ATTR_parser___parser_nodes___AAttrPropdef____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[392] + 5))
-#define ATTR_parser___parser_nodes___AAttrPropdef____n_readable(recv) ATTR(recv, (SFT_parser___parser_nodes[392] + 6))
-#define ATTR_parser___parser_nodes___AAttrPropdef____n_writable(recv) ATTR(recv, (SFT_parser___parser_nodes[392] + 7))
-#define ATTR_parser___parser_nodes___AAttrPropdef____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[392] + 8))
-#define INIT_TABLE_POS_parser___parser_nodes___AAttrPropdef (SFT_parser___parser_nodes[393] + 0)
-#define CALL_parser___parser_nodes___AAttrPropdef___n_kwredef(recv) ((parser___parser_nodes___AAttrPropdef___n_kwredef_t)CALL((recv), (SFT_parser___parser_nodes[393] + 1)))
-#define CALL_parser___parser_nodes___AAttrPropdef___n_visibility(recv) ((parser___parser_nodes___AAttrPropdef___n_visibility_t)CALL((recv), (SFT_parser___parser_nodes[393] + 2)))
-#define CALL_parser___parser_nodes___AAttrPropdef___n_kwvar(recv) ((parser___parser_nodes___AAttrPropdef___n_kwvar_t)CALL((recv), (SFT_parser___parser_nodes[393] + 3)))
-#define CALL_parser___parser_nodes___AAttrPropdef___n_id(recv) ((parser___parser_nodes___AAttrPropdef___n_id_t)CALL((recv), (SFT_parser___parser_nodes[393] + 4)))
-#define CALL_parser___parser_nodes___AAttrPropdef___n_id2(recv) ((parser___parser_nodes___AAttrPropdef___n_id2_t)CALL((recv), (SFT_parser___parser_nodes[393] + 5)))
-#define CALL_parser___parser_nodes___AAttrPropdef___n_type(recv) ((parser___parser_nodes___AAttrPropdef___n_type_t)CALL((recv), (SFT_parser___parser_nodes[393] + 6)))
-#define CALL_parser___parser_nodes___AAttrPropdef___n_readable(recv) ((parser___parser_nodes___AAttrPropdef___n_readable_t)CALL((recv), (SFT_parser___parser_nodes[393] + 7)))
-#define CALL_parser___parser_nodes___AAttrPropdef___n_writable(recv) ((parser___parser_nodes___AAttrPropdef___n_writable_t)CALL((recv), (SFT_parser___parser_nodes[393] + 8)))
-#define CALL_parser___parser_nodes___AAttrPropdef___n_expr(recv) ((parser___parser_nodes___AAttrPropdef___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[393] + 9)))
-#define ID_parser___parser_nodes___AMethPropdef (SFT_parser___parser_nodes[394])
-#define COLOR_parser___parser_nodes___AMethPropdef (SFT_parser___parser_nodes[395])
-#define ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(recv) ATTR(recv, (SFT_parser___parser_nodes[396] + 0))
-#define ATTR_parser___parser_nodes___AMethPropdef____n_visibility(recv) ATTR(recv, (SFT_parser___parser_nodes[396] + 1))
-#define ATTR_parser___parser_nodes___AMethPropdef____n_methid(recv) ATTR(recv, (SFT_parser___parser_nodes[396] + 2))
-#define ATTR_parser___parser_nodes___AMethPropdef____n_signature(recv) ATTR(recv, (SFT_parser___parser_nodes[396] + 3))
-#define INIT_TABLE_POS_parser___parser_nodes___AMethPropdef (SFT_parser___parser_nodes[397] + 0)
-#define CALL_parser___parser_nodes___AMethPropdef___n_kwredef(recv) ((parser___parser_nodes___AMethPropdef___n_kwredef_t)CALL((recv), (SFT_parser___parser_nodes[397] + 1)))
-#define CALL_parser___parser_nodes___AMethPropdef___n_visibility(recv) ((parser___parser_nodes___AMethPropdef___n_visibility_t)CALL((recv), (SFT_parser___parser_nodes[397] + 2)))
-#define CALL_parser___parser_nodes___AMethPropdef___n_methid(recv) ((parser___parser_nodes___AMethPropdef___n_methid_t)CALL((recv), (SFT_parser___parser_nodes[397] + 3)))
-#define CALL_parser___parser_nodes___AMethPropdef___n_signature(recv) ((parser___parser_nodes___AMethPropdef___n_signature_t)CALL((recv), (SFT_parser___parser_nodes[397] + 4)))
-#define ID_parser___parser_nodes___ADeferredMethPropdef (SFT_parser___parser_nodes[398])
-#define COLOR_parser___parser_nodes___ADeferredMethPropdef (SFT_parser___parser_nodes[399])
-#define ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(recv) ATTR(recv, (SFT_parser___parser_nodes[400] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ADeferredMethPropdef (SFT_parser___parser_nodes[401] + 0)
-#define CALL_parser___parser_nodes___ADeferredMethPropdef___n_kwmeth(recv) ((parser___parser_nodes___ADeferredMethPropdef___n_kwmeth_t)CALL((recv), (SFT_parser___parser_nodes[401] + 1)))
-#define ID_parser___parser_nodes___AInternMethPropdef (SFT_parser___parser_nodes[402])
-#define COLOR_parser___parser_nodes___AInternMethPropdef (SFT_parser___parser_nodes[403])
-#define ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(recv) ATTR(recv, (SFT_parser___parser_nodes[404] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AInternMethPropdef (SFT_parser___parser_nodes[405] + 0)
-#define CALL_parser___parser_nodes___AInternMethPropdef___n_kwmeth(recv) ((parser___parser_nodes___AInternMethPropdef___n_kwmeth_t)CALL((recv), (SFT_parser___parser_nodes[405] + 1)))
-#define ID_parser___parser_nodes___AExternPropdef (SFT_parser___parser_nodes[406])
-#define COLOR_parser___parser_nodes___AExternPropdef (SFT_parser___parser_nodes[407])
-#define ATTR_parser___parser_nodes___AExternPropdef____n_extern(recv) ATTR(recv, (SFT_parser___parser_nodes[408] + 0))
-#define ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(recv) ATTR(recv, (SFT_parser___parser_nodes[408] + 1))
-#define ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(recv) ATTR(recv, (SFT_parser___parser_nodes[408] + 2))
-#define INIT_TABLE_POS_parser___parser_nodes___AExternPropdef (SFT_parser___parser_nodes[409] + 0)
-#define CALL_parser___parser_nodes___AExternPropdef___n_extern(recv) ((parser___parser_nodes___AExternPropdef___n_extern_t)CALL((recv), (SFT_parser___parser_nodes[409] + 1)))
-#define CALL_parser___parser_nodes___AExternPropdef___n_extern_calls(recv) ((parser___parser_nodes___AExternPropdef___n_extern_calls_t)CALL((recv), (SFT_parser___parser_nodes[409] + 2)))
-#define CALL_parser___parser_nodes___AExternPropdef___n_extern_code_block(recv) ((parser___parser_nodes___AExternPropdef___n_extern_code_block_t)CALL((recv), (SFT_parser___parser_nodes[409] + 3)))
-#define ID_parser___parser_nodes___AExternMethPropdef (SFT_parser___parser_nodes[410])
-#define COLOR_parser___parser_nodes___AExternMethPropdef (SFT_parser___parser_nodes[411])
-#define ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(recv) ATTR(recv, (SFT_parser___parser_nodes[412] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AExternMethPropdef (SFT_parser___parser_nodes[413] + 0)
-#define CALL_parser___parser_nodes___AExternMethPropdef___n_kwmeth(recv) ((parser___parser_nodes___AExternMethPropdef___n_kwmeth_t)CALL((recv), (SFT_parser___parser_nodes[413] + 1)))
-#define ID_parser___parser_nodes___AConcreteMethPropdef (SFT_parser___parser_nodes[414])
-#define COLOR_parser___parser_nodes___AConcreteMethPropdef (SFT_parser___parser_nodes[415])
-#define ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(recv) ATTR(recv, (SFT_parser___parser_nodes[416] + 0))
-#define ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(recv) ATTR(recv, (SFT_parser___parser_nodes[416] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AConcreteMethPropdef (SFT_parser___parser_nodes[417] + 0)
-#define CALL_parser___parser_nodes___AConcreteMethPropdef___n_kwmeth(recv) ((parser___parser_nodes___AConcreteMethPropdef___n_kwmeth_t)CALL((recv), (SFT_parser___parser_nodes[417] + 1)))
-#define CALL_parser___parser_nodes___AConcreteMethPropdef___n_block(recv) ((parser___parser_nodes___AConcreteMethPropdef___n_block_t)CALL((recv), (SFT_parser___parser_nodes[417] + 2)))
-#define ID_parser___parser_nodes___AInitPropdef (SFT_parser___parser_nodes[418])
-#define COLOR_parser___parser_nodes___AInitPropdef (SFT_parser___parser_nodes[419])
-#define INIT_TABLE_POS_parser___parser_nodes___AInitPropdef (SFT_parser___parser_nodes[420] + 0)
-#define ID_parser___parser_nodes___AConcreteInitPropdef (SFT_parser___parser_nodes[421])
-#define COLOR_parser___parser_nodes___AConcreteInitPropdef (SFT_parser___parser_nodes[422])
-#define ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(recv) ATTR(recv, (SFT_parser___parser_nodes[423] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AConcreteInitPropdef (SFT_parser___parser_nodes[424] + 0)
-#define CALL_parser___parser_nodes___AConcreteInitPropdef___n_kwinit(recv) ((parser___parser_nodes___AConcreteInitPropdef___n_kwinit_t)CALL((recv), (SFT_parser___parser_nodes[424] + 1)))
-#define ID_parser___parser_nodes___AExternInitPropdef (SFT_parser___parser_nodes[425])
-#define COLOR_parser___parser_nodes___AExternInitPropdef (SFT_parser___parser_nodes[426])
-#define ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(recv) ATTR(recv, (SFT_parser___parser_nodes[427] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AExternInitPropdef (SFT_parser___parser_nodes[428] + 0)
-#define CALL_parser___parser_nodes___AExternInitPropdef___n_kwnew(recv) ((parser___parser_nodes___AExternInitPropdef___n_kwnew_t)CALL((recv), (SFT_parser___parser_nodes[428] + 1)))
-#define ID_parser___parser_nodes___AMainMethPropdef (SFT_parser___parser_nodes[429])
-#define COLOR_parser___parser_nodes___AMainMethPropdef (SFT_parser___parser_nodes[430])
-#define INIT_TABLE_POS_parser___parser_nodes___AMainMethPropdef (SFT_parser___parser_nodes[431] + 0)
-#define ID_parser___parser_nodes___AExternCalls (SFT_parser___parser_nodes[432])
-#define COLOR_parser___parser_nodes___AExternCalls (SFT_parser___parser_nodes[433])
-#define ATTR_parser___parser_nodes___AExternCalls____n_kwimport(recv) ATTR(recv, (SFT_parser___parser_nodes[434] + 0))
-#define ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(recv) ATTR(recv, (SFT_parser___parser_nodes[434] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AExternCalls (SFT_parser___parser_nodes[435] + 0)
-#define CALL_parser___parser_nodes___AExternCalls___n_kwimport(recv) ((parser___parser_nodes___AExternCalls___n_kwimport_t)CALL((recv), (SFT_parser___parser_nodes[435] + 1)))
-#define CALL_parser___parser_nodes___AExternCalls___n_extern_calls(recv) ((parser___parser_nodes___AExternCalls___n_extern_calls_t)CALL((recv), (SFT_parser___parser_nodes[435] + 2)))
-#define ID_parser___parser_nodes___AExternCall (SFT_parser___parser_nodes[436])
-#define COLOR_parser___parser_nodes___AExternCall (SFT_parser___parser_nodes[437])
-#define INIT_TABLE_POS_parser___parser_nodes___AExternCall (SFT_parser___parser_nodes[438] + 0)
-#define ID_parser___parser_nodes___APropExternCall (SFT_parser___parser_nodes[439])
-#define COLOR_parser___parser_nodes___APropExternCall (SFT_parser___parser_nodes[440])
-#define INIT_TABLE_POS_parser___parser_nodes___APropExternCall (SFT_parser___parser_nodes[441] + 0)
-#define ID_parser___parser_nodes___ALocalPropExternCall (SFT_parser___parser_nodes[442])
-#define COLOR_parser___parser_nodes___ALocalPropExternCall (SFT_parser___parser_nodes[443])
-#define ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(recv) ATTR(recv, (SFT_parser___parser_nodes[444] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ALocalPropExternCall (SFT_parser___parser_nodes[445] + 0)
-#define CALL_parser___parser_nodes___ALocalPropExternCall___n_methid(recv) ((parser___parser_nodes___ALocalPropExternCall___n_methid_t)CALL((recv), (SFT_parser___parser_nodes[445] + 1)))
-#define ID_parser___parser_nodes___AFullPropExternCall (SFT_parser___parser_nodes[446])
-#define COLOR_parser___parser_nodes___AFullPropExternCall (SFT_parser___parser_nodes[447])
-#define ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(recv) ATTR(recv, (SFT_parser___parser_nodes[448] + 0))
-#define ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(recv) ATTR(recv, (SFT_parser___parser_nodes[448] + 1))
-#define ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(recv) ATTR(recv, (SFT_parser___parser_nodes[448] + 2))
-#define INIT_TABLE_POS_parser___parser_nodes___AFullPropExternCall (SFT_parser___parser_nodes[449] + 0)
-#define CALL_parser___parser_nodes___AFullPropExternCall___n_classid(recv) ((parser___parser_nodes___AFullPropExternCall___n_classid_t)CALL((recv), (SFT_parser___parser_nodes[449] + 1)))
-#define CALL_parser___parser_nodes___AFullPropExternCall___n_quad(recv) ((parser___parser_nodes___AFullPropExternCall___n_quad_t)CALL((recv), (SFT_parser___parser_nodes[449] + 2)))
-#define CALL_parser___parser_nodes___AFullPropExternCall___n_methid(recv) ((parser___parser_nodes___AFullPropExternCall___n_methid_t)CALL((recv), (SFT_parser___parser_nodes[449] + 3)))
-#define ID_parser___parser_nodes___AInitPropExternCall (SFT_parser___parser_nodes[450])
-#define COLOR_parser___parser_nodes___AInitPropExternCall (SFT_parser___parser_nodes[451])
-#define ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(recv) ATTR(recv, (SFT_parser___parser_nodes[452] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AInitPropExternCall (SFT_parser___parser_nodes[453] + 0)
-#define CALL_parser___parser_nodes___AInitPropExternCall___n_classid(recv) ((parser___parser_nodes___AInitPropExternCall___n_classid_t)CALL((recv), (SFT_parser___parser_nodes[453] + 1)))
-#define ID_parser___parser_nodes___ASuperExternCall (SFT_parser___parser_nodes[454])
-#define COLOR_parser___parser_nodes___ASuperExternCall (SFT_parser___parser_nodes[455])
-#define ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(recv) ATTR(recv, (SFT_parser___parser_nodes[456] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ASuperExternCall (SFT_parser___parser_nodes[457] + 0)
-#define CALL_parser___parser_nodes___ASuperExternCall___n_kwsuper(recv) ((parser___parser_nodes___ASuperExternCall___n_kwsuper_t)CALL((recv), (SFT_parser___parser_nodes[457] + 1)))
-#define ID_parser___parser_nodes___ACastExternCall (SFT_parser___parser_nodes[458])
-#define COLOR_parser___parser_nodes___ACastExternCall (SFT_parser___parser_nodes[459])
-#define INIT_TABLE_POS_parser___parser_nodes___ACastExternCall (SFT_parser___parser_nodes[460] + 0)
-#define ID_parser___parser_nodes___ACastAsExternCall (SFT_parser___parser_nodes[461])
-#define COLOR_parser___parser_nodes___ACastAsExternCall (SFT_parser___parser_nodes[462])
-#define ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(recv) ATTR(recv, (SFT_parser___parser_nodes[463] + 0))
-#define ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(recv) ATTR(recv, (SFT_parser___parser_nodes[463] + 1))
-#define ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(recv) ATTR(recv, (SFT_parser___parser_nodes[463] + 2))
-#define INIT_TABLE_POS_parser___parser_nodes___ACastAsExternCall (SFT_parser___parser_nodes[464] + 0)
-#define CALL_parser___parser_nodes___ACastAsExternCall___n_from_type(recv) ((parser___parser_nodes___ACastAsExternCall___n_from_type_t)CALL((recv), (SFT_parser___parser_nodes[464] + 1)))
-#define CALL_parser___parser_nodes___ACastAsExternCall___n_kwas(recv) ((parser___parser_nodes___ACastAsExternCall___n_kwas_t)CALL((recv), (SFT_parser___parser_nodes[464] + 2)))
-#define CALL_parser___parser_nodes___ACastAsExternCall___n_to_type(recv) ((parser___parser_nodes___ACastAsExternCall___n_to_type_t)CALL((recv), (SFT_parser___parser_nodes[464] + 3)))
-#define ID_parser___parser_nodes___AAsNullableExternCall (SFT_parser___parser_nodes[465])
-#define COLOR_parser___parser_nodes___AAsNullableExternCall (SFT_parser___parser_nodes[466])
-#define ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[467] + 0))
-#define ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(recv) ATTR(recv, (SFT_parser___parser_nodes[467] + 1))
-#define ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(recv) ATTR(recv, (SFT_parser___parser_nodes[467] + 2))
-#define INIT_TABLE_POS_parser___parser_nodes___AAsNullableExternCall (SFT_parser___parser_nodes[468] + 0)
-#define CALL_parser___parser_nodes___AAsNullableExternCall___n_type(recv) ((parser___parser_nodes___AAsNullableExternCall___n_type_t)CALL((recv), (SFT_parser___parser_nodes[468] + 1)))
-#define CALL_parser___parser_nodes___AAsNullableExternCall___n_kwas(recv) ((parser___parser_nodes___AAsNullableExternCall___n_kwas_t)CALL((recv), (SFT_parser___parser_nodes[468] + 2)))
-#define CALL_parser___parser_nodes___AAsNullableExternCall___n_kwnullable(recv) ((parser___parser_nodes___AAsNullableExternCall___n_kwnullable_t)CALL((recv), (SFT_parser___parser_nodes[468] + 3)))
-#define ID_parser___parser_nodes___AAsNotNullableExternCall (SFT_parser___parser_nodes[469])
-#define COLOR_parser___parser_nodes___AAsNotNullableExternCall (SFT_parser___parser_nodes[470])
-#define ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[471] + 0))
-#define ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(recv) ATTR(recv, (SFT_parser___parser_nodes[471] + 1))
-#define ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(recv) ATTR(recv, (SFT_parser___parser_nodes[471] + 2))
-#define ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(recv) ATTR(recv, (SFT_parser___parser_nodes[471] + 3))
-#define INIT_TABLE_POS_parser___parser_nodes___AAsNotNullableExternCall (SFT_parser___parser_nodes[472] + 0)
-#define CALL_parser___parser_nodes___AAsNotNullableExternCall___n_type(recv) ((parser___parser_nodes___AAsNotNullableExternCall___n_type_t)CALL((recv), (SFT_parser___parser_nodes[472] + 1)))
-#define CALL_parser___parser_nodes___AAsNotNullableExternCall___n_kwas(recv) ((parser___parser_nodes___AAsNotNullableExternCall___n_kwas_t)CALL((recv), (SFT_parser___parser_nodes[472] + 2)))
-#define CALL_parser___parser_nodes___AAsNotNullableExternCall___n_kwnot(recv) ((parser___parser_nodes___AAsNotNullableExternCall___n_kwnot_t)CALL((recv), (SFT_parser___parser_nodes[472] + 3)))
-#define CALL_parser___parser_nodes___AAsNotNullableExternCall___n_kwnullable(recv) ((parser___parser_nodes___AAsNotNullableExternCall___n_kwnullable_t)CALL((recv), (SFT_parser___parser_nodes[472] + 4)))
-#define ID_parser___parser_nodes___ATypePropdef (SFT_parser___parser_nodes[473])
-#define COLOR_parser___parser_nodes___ATypePropdef (SFT_parser___parser_nodes[474])
-#define ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(recv) ATTR(recv, (SFT_parser___parser_nodes[475] + 0))
-#define ATTR_parser___parser_nodes___ATypePropdef____n_visibility(recv) ATTR(recv, (SFT_parser___parser_nodes[475] + 1))
-#define ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(recv) ATTR(recv, (SFT_parser___parser_nodes[475] + 2))
-#define ATTR_parser___parser_nodes___ATypePropdef____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[475] + 3))
-#define ATTR_parser___parser_nodes___ATypePropdef____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[475] + 4))
-#define INIT_TABLE_POS_parser___parser_nodes___ATypePropdef (SFT_parser___parser_nodes[476] + 0)
-#define CALL_parser___parser_nodes___ATypePropdef___n_kwredef(recv) ((parser___parser_nodes___ATypePropdef___n_kwredef_t)CALL((recv), (SFT_parser___parser_nodes[476] + 1)))
-#define CALL_parser___parser_nodes___ATypePropdef___n_visibility(recv) ((parser___parser_nodes___ATypePropdef___n_visibility_t)CALL((recv), (SFT_parser___parser_nodes[476] + 2)))
-#define CALL_parser___parser_nodes___ATypePropdef___n_kwtype(recv) ((parser___parser_nodes___ATypePropdef___n_kwtype_t)CALL((recv), (SFT_parser___parser_nodes[476] + 3)))
-#define CALL_parser___parser_nodes___ATypePropdef___n_id(recv) ((parser___parser_nodes___ATypePropdef___n_id_t)CALL((recv), (SFT_parser___parser_nodes[476] + 4)))
-#define CALL_parser___parser_nodes___ATypePropdef___n_type(recv) ((parser___parser_nodes___ATypePropdef___n_type_t)CALL((recv), (SFT_parser___parser_nodes[476] + 5)))
-#define ID_parser___parser_nodes___AAble (SFT_parser___parser_nodes[477])
-#define COLOR_parser___parser_nodes___AAble (SFT_parser___parser_nodes[478])
-#define ATTR_parser___parser_nodes___AAble____n_visibility(recv) ATTR(recv, (SFT_parser___parser_nodes[479] + 0))
-#define ATTR_parser___parser_nodes___AAble____n_kwredef(recv) ATTR(recv, (SFT_parser___parser_nodes[479] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AAble (SFT_parser___parser_nodes[480] + 0)
-#define CALL_parser___parser_nodes___AAble___n_visibility(recv) ((parser___parser_nodes___AAble___n_visibility_t)CALL((recv), (SFT_parser___parser_nodes[480] + 1)))
-#define CALL_parser___parser_nodes___AAble___n_kwredef(recv) ((parser___parser_nodes___AAble___n_kwredef_t)CALL((recv), (SFT_parser___parser_nodes[480] + 2)))
-#define ID_parser___parser_nodes___AReadAble (SFT_parser___parser_nodes[481])
-#define COLOR_parser___parser_nodes___AReadAble (SFT_parser___parser_nodes[482])
-#define ATTR_parser___parser_nodes___AReadAble____n_kwreadable(recv) ATTR(recv, (SFT_parser___parser_nodes[483] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AReadAble (SFT_parser___parser_nodes[484] + 0)
-#define CALL_parser___parser_nodes___AReadAble___n_kwreadable(recv) ((parser___parser_nodes___AReadAble___n_kwreadable_t)CALL((recv), (SFT_parser___parser_nodes[484] + 1)))
-#define ID_parser___parser_nodes___AWriteAble (SFT_parser___parser_nodes[485])
-#define COLOR_parser___parser_nodes___AWriteAble (SFT_parser___parser_nodes[486])
-#define ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(recv) ATTR(recv, (SFT_parser___parser_nodes[487] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AWriteAble (SFT_parser___parser_nodes[488] + 0)
-#define CALL_parser___parser_nodes___AWriteAble___n_kwwritable(recv) ((parser___parser_nodes___AWriteAble___n_kwwritable_t)CALL((recv), (SFT_parser___parser_nodes[488] + 1)))
-#define ID_parser___parser_nodes___AMethid (SFT_parser___parser_nodes[489])
-#define COLOR_parser___parser_nodes___AMethid (SFT_parser___parser_nodes[490])
-#define INIT_TABLE_POS_parser___parser_nodes___AMethid (SFT_parser___parser_nodes[491] + 0)
-#define ID_parser___parser_nodes___AIdMethid (SFT_parser___parser_nodes[492])
-#define COLOR_parser___parser_nodes___AIdMethid (SFT_parser___parser_nodes[493])
-#define ATTR_parser___parser_nodes___AIdMethid____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[494] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AIdMethid (SFT_parser___parser_nodes[495] + 0)
-#define CALL_parser___parser_nodes___AIdMethid___n_id(recv) ((parser___parser_nodes___AIdMethid___n_id_t)CALL((recv), (SFT_parser___parser_nodes[495] + 1)))
-#define ID_parser___parser_nodes___APlusMethid (SFT_parser___parser_nodes[496])
-#define COLOR_parser___parser_nodes___APlusMethid (SFT_parser___parser_nodes[497])
-#define ATTR_parser___parser_nodes___APlusMethid____n_plus(recv) ATTR(recv, (SFT_parser___parser_nodes[498] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___APlusMethid (SFT_parser___parser_nodes[499] + 0)
-#define CALL_parser___parser_nodes___APlusMethid___n_plus(recv) ((parser___parser_nodes___APlusMethid___n_plus_t)CALL((recv), (SFT_parser___parser_nodes[499] + 1)))
-#define ID_parser___parser_nodes___AMinusMethid (SFT_parser___parser_nodes[500])
-#define COLOR_parser___parser_nodes___AMinusMethid (SFT_parser___parser_nodes[501])
-#define ATTR_parser___parser_nodes___AMinusMethid____n_minus(recv) ATTR(recv, (SFT_parser___parser_nodes[502] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AMinusMethid (SFT_parser___parser_nodes[503] + 0)
-#define CALL_parser___parser_nodes___AMinusMethid___n_minus(recv) ((parser___parser_nodes___AMinusMethid___n_minus_t)CALL((recv), (SFT_parser___parser_nodes[503] + 1)))
-#define ID_parser___parser_nodes___AStarMethid (SFT_parser___parser_nodes[504])
-#define COLOR_parser___parser_nodes___AStarMethid (SFT_parser___parser_nodes[505])
-#define ATTR_parser___parser_nodes___AStarMethid____n_star(recv) ATTR(recv, (SFT_parser___parser_nodes[506] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AStarMethid (SFT_parser___parser_nodes[507] + 0)
-#define CALL_parser___parser_nodes___AStarMethid___n_star(recv) ((parser___parser_nodes___AStarMethid___n_star_t)CALL((recv), (SFT_parser___parser_nodes[507] + 1)))
-#define ID_parser___parser_nodes___ASlashMethid (SFT_parser___parser_nodes[508])
-#define COLOR_parser___parser_nodes___ASlashMethid (SFT_parser___parser_nodes[509])
-#define ATTR_parser___parser_nodes___ASlashMethid____n_slash(recv) ATTR(recv, (SFT_parser___parser_nodes[510] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ASlashMethid (SFT_parser___parser_nodes[511] + 0)
-#define CALL_parser___parser_nodes___ASlashMethid___n_slash(recv) ((parser___parser_nodes___ASlashMethid___n_slash_t)CALL((recv), (SFT_parser___parser_nodes[511] + 1)))
-#define ID_parser___parser_nodes___APercentMethid (SFT_parser___parser_nodes[512])
-#define COLOR_parser___parser_nodes___APercentMethid (SFT_parser___parser_nodes[513])
-#define ATTR_parser___parser_nodes___APercentMethid____n_percent(recv) ATTR(recv, (SFT_parser___parser_nodes[514] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___APercentMethid (SFT_parser___parser_nodes[515] + 0)
-#define CALL_parser___parser_nodes___APercentMethid___n_percent(recv) ((parser___parser_nodes___APercentMethid___n_percent_t)CALL((recv), (SFT_parser___parser_nodes[515] + 1)))
-#define ID_parser___parser_nodes___AEqMethid (SFT_parser___parser_nodes[516])
-#define COLOR_parser___parser_nodes___AEqMethid (SFT_parser___parser_nodes[517])
-#define ATTR_parser___parser_nodes___AEqMethid____n_eq(recv) ATTR(recv, (SFT_parser___parser_nodes[518] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AEqMethid (SFT_parser___parser_nodes[519] + 0)
-#define CALL_parser___parser_nodes___AEqMethid___n_eq(recv) ((parser___parser_nodes___AEqMethid___n_eq_t)CALL((recv), (SFT_parser___parser_nodes[519] + 1)))
-#define ID_parser___parser_nodes___ANeMethid (SFT_parser___parser_nodes[520])
-#define COLOR_parser___parser_nodes___ANeMethid (SFT_parser___parser_nodes[521])
-#define ATTR_parser___parser_nodes___ANeMethid____n_ne(recv) ATTR(recv, (SFT_parser___parser_nodes[522] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ANeMethid (SFT_parser___parser_nodes[523] + 0)
-#define CALL_parser___parser_nodes___ANeMethid___n_ne(recv) ((parser___parser_nodes___ANeMethid___n_ne_t)CALL((recv), (SFT_parser___parser_nodes[523] + 1)))
-#define ID_parser___parser_nodes___ALeMethid (SFT_parser___parser_nodes[524])
-#define COLOR_parser___parser_nodes___ALeMethid (SFT_parser___parser_nodes[525])
-#define ATTR_parser___parser_nodes___ALeMethid____n_le(recv) ATTR(recv, (SFT_parser___parser_nodes[526] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ALeMethid (SFT_parser___parser_nodes[527] + 0)
-#define CALL_parser___parser_nodes___ALeMethid___n_le(recv) ((parser___parser_nodes___ALeMethid___n_le_t)CALL((recv), (SFT_parser___parser_nodes[527] + 1)))
-#define ID_parser___parser_nodes___AGeMethid (SFT_parser___parser_nodes[528])
-#define COLOR_parser___parser_nodes___AGeMethid (SFT_parser___parser_nodes[529])
-#define ATTR_parser___parser_nodes___AGeMethid____n_ge(recv) ATTR(recv, (SFT_parser___parser_nodes[530] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AGeMethid (SFT_parser___parser_nodes[531] + 0)
-#define CALL_parser___parser_nodes___AGeMethid___n_ge(recv) ((parser___parser_nodes___AGeMethid___n_ge_t)CALL((recv), (SFT_parser___parser_nodes[531] + 1)))
-#define ID_parser___parser_nodes___ALtMethid (SFT_parser___parser_nodes[532])
-#define COLOR_parser___parser_nodes___ALtMethid (SFT_parser___parser_nodes[533])
-#define ATTR_parser___parser_nodes___ALtMethid____n_lt(recv) ATTR(recv, (SFT_parser___parser_nodes[534] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ALtMethid (SFT_parser___parser_nodes[535] + 0)
-#define CALL_parser___parser_nodes___ALtMethid___n_lt(recv) ((parser___parser_nodes___ALtMethid___n_lt_t)CALL((recv), (SFT_parser___parser_nodes[535] + 1)))
-#define ID_parser___parser_nodes___AGtMethid (SFT_parser___parser_nodes[536])
-#define COLOR_parser___parser_nodes___AGtMethid (SFT_parser___parser_nodes[537])
-#define ATTR_parser___parser_nodes___AGtMethid____n_gt(recv) ATTR(recv, (SFT_parser___parser_nodes[538] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AGtMethid (SFT_parser___parser_nodes[539] + 0)
-#define CALL_parser___parser_nodes___AGtMethid___n_gt(recv) ((parser___parser_nodes___AGtMethid___n_gt_t)CALL((recv), (SFT_parser___parser_nodes[539] + 1)))
-#define ID_parser___parser_nodes___ALlMethid (SFT_parser___parser_nodes[540])
-#define COLOR_parser___parser_nodes___ALlMethid (SFT_parser___parser_nodes[541])
-#define ATTR_parser___parser_nodes___ALlMethid____n_ll(recv) ATTR(recv, (SFT_parser___parser_nodes[542] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ALlMethid (SFT_parser___parser_nodes[543] + 0)
-#define CALL_parser___parser_nodes___ALlMethid___n_ll(recv) ((parser___parser_nodes___ALlMethid___n_ll_t)CALL((recv), (SFT_parser___parser_nodes[543] + 1)))
-#define CALL_parser___parser_nodes___ALlMethid___n_ll__eq(recv) ((parser___parser_nodes___ALlMethid___n_ll__eq_t)CALL((recv), (SFT_parser___parser_nodes[543] + 2)))
-#define ID_parser___parser_nodes___AGgMethid (SFT_parser___parser_nodes[544])
-#define COLOR_parser___parser_nodes___AGgMethid (SFT_parser___parser_nodes[545])
-#define ATTR_parser___parser_nodes___AGgMethid____n_gg(recv) ATTR(recv, (SFT_parser___parser_nodes[546] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AGgMethid (SFT_parser___parser_nodes[547] + 0)
-#define CALL_parser___parser_nodes___AGgMethid___n_gg(recv) ((parser___parser_nodes___AGgMethid___n_gg_t)CALL((recv), (SFT_parser___parser_nodes[547] + 1)))
-#define CALL_parser___parser_nodes___AGgMethid___n_gg__eq(recv) ((parser___parser_nodes___AGgMethid___n_gg__eq_t)CALL((recv), (SFT_parser___parser_nodes[547] + 2)))
-#define ID_parser___parser_nodes___ABraMethid (SFT_parser___parser_nodes[548])
-#define COLOR_parser___parser_nodes___ABraMethid (SFT_parser___parser_nodes[549])
-#define ATTR_parser___parser_nodes___ABraMethid____n_obra(recv) ATTR(recv, (SFT_parser___parser_nodes[550] + 0))
-#define ATTR_parser___parser_nodes___ABraMethid____n_cbra(recv) ATTR(recv, (SFT_parser___parser_nodes[550] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___ABraMethid (SFT_parser___parser_nodes[551] + 0)
-#define CALL_parser___parser_nodes___ABraMethid___n_obra(recv) ((parser___parser_nodes___ABraMethid___n_obra_t)CALL((recv), (SFT_parser___parser_nodes[551] + 1)))
-#define CALL_parser___parser_nodes___ABraMethid___n_cbra(recv) ((parser___parser_nodes___ABraMethid___n_cbra_t)CALL((recv), (SFT_parser___parser_nodes[551] + 2)))
-#define ID_parser___parser_nodes___AStarshipMethid (SFT_parser___parser_nodes[552])
-#define COLOR_parser___parser_nodes___AStarshipMethid (SFT_parser___parser_nodes[553])
-#define ATTR_parser___parser_nodes___AStarshipMethid____n_starship(recv) ATTR(recv, (SFT_parser___parser_nodes[554] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AStarshipMethid (SFT_parser___parser_nodes[555] + 0)
-#define CALL_parser___parser_nodes___AStarshipMethid___n_starship(recv) ((parser___parser_nodes___AStarshipMethid___n_starship_t)CALL((recv), (SFT_parser___parser_nodes[555] + 1)))
-#define ID_parser___parser_nodes___AAssignMethid (SFT_parser___parser_nodes[556])
-#define COLOR_parser___parser_nodes___AAssignMethid (SFT_parser___parser_nodes[557])
-#define ATTR_parser___parser_nodes___AAssignMethid____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[558] + 0))
-#define ATTR_parser___parser_nodes___AAssignMethid____n_assign(recv) ATTR(recv, (SFT_parser___parser_nodes[558] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AAssignMethid (SFT_parser___parser_nodes[559] + 0)
-#define CALL_parser___parser_nodes___AAssignMethid___n_id(recv) ((parser___parser_nodes___AAssignMethid___n_id_t)CALL((recv), (SFT_parser___parser_nodes[559] + 1)))
-#define CALL_parser___parser_nodes___AAssignMethid___n_assign(recv) ((parser___parser_nodes___AAssignMethid___n_assign_t)CALL((recv), (SFT_parser___parser_nodes[559] + 2)))
-#define ID_parser___parser_nodes___ABraassignMethid (SFT_parser___parser_nodes[560])
-#define COLOR_parser___parser_nodes___ABraassignMethid (SFT_parser___parser_nodes[561])
-#define ATTR_parser___parser_nodes___ABraassignMethid____n_obra(recv) ATTR(recv, (SFT_parser___parser_nodes[562] + 0))
-#define ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(recv) ATTR(recv, (SFT_parser___parser_nodes[562] + 1))
-#define ATTR_parser___parser_nodes___ABraassignMethid____n_assign(recv) ATTR(recv, (SFT_parser___parser_nodes[562] + 2))
-#define INIT_TABLE_POS_parser___parser_nodes___ABraassignMethid (SFT_parser___parser_nodes[563] + 0)
-#define CALL_parser___parser_nodes___ABraassignMethid___n_obra(recv) ((parser___parser_nodes___ABraassignMethid___n_obra_t)CALL((recv), (SFT_parser___parser_nodes[563] + 1)))
-#define CALL_parser___parser_nodes___ABraassignMethid___n_cbra(recv) ((parser___parser_nodes___ABraassignMethid___n_cbra_t)CALL((recv), (SFT_parser___parser_nodes[563] + 2)))
-#define CALL_parser___parser_nodes___ABraassignMethid___n_assign(recv) ((parser___parser_nodes___ABraassignMethid___n_assign_t)CALL((recv), (SFT_parser___parser_nodes[563] + 3)))
-#define ID_parser___parser_nodes___ASignature (SFT_parser___parser_nodes[564])
-#define COLOR_parser___parser_nodes___ASignature (SFT_parser___parser_nodes[565])
-#define ATTR_parser___parser_nodes___ASignature____n_opar(recv) ATTR(recv, (SFT_parser___parser_nodes[566] + 0))
-#define ATTR_parser___parser_nodes___ASignature____n_params(recv) ATTR(recv, (SFT_parser___parser_nodes[566] + 1))
-#define ATTR_parser___parser_nodes___ASignature____n_cpar(recv) ATTR(recv, (SFT_parser___parser_nodes[566] + 2))
-#define ATTR_parser___parser_nodes___ASignature____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[566] + 3))
-#define ATTR_parser___parser_nodes___ASignature____n_closure_decls(recv) ATTR(recv, (SFT_parser___parser_nodes[566] + 4))
-#define INIT_TABLE_POS_parser___parser_nodes___ASignature (SFT_parser___parser_nodes[567] + 0)
-#define CALL_parser___parser_nodes___ASignature___n_opar(recv) ((parser___parser_nodes___ASignature___n_opar_t)CALL((recv), (SFT_parser___parser_nodes[567] + 1)))
-#define CALL_parser___parser_nodes___ASignature___n_params(recv) ((parser___parser_nodes___ASignature___n_params_t)CALL((recv), (SFT_parser___parser_nodes[567] + 2)))
-#define CALL_parser___parser_nodes___ASignature___n_cpar(recv) ((parser___parser_nodes___ASignature___n_cpar_t)CALL((recv), (SFT_parser___parser_nodes[567] + 3)))
-#define CALL_parser___parser_nodes___ASignature___n_type(recv) ((parser___parser_nodes___ASignature___n_type_t)CALL((recv), (SFT_parser___parser_nodes[567] + 4)))
-#define CALL_parser___parser_nodes___ASignature___n_closure_decls(recv) ((parser___parser_nodes___ASignature___n_closure_decls_t)CALL((recv), (SFT_parser___parser_nodes[567] + 5)))
-#define ID_parser___parser_nodes___AParam (SFT_parser___parser_nodes[568])
-#define COLOR_parser___parser_nodes___AParam (SFT_parser___parser_nodes[569])
-#define ATTR_parser___parser_nodes___AParam____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[570] + 0))
-#define ATTR_parser___parser_nodes___AParam____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[570] + 1))
-#define ATTR_parser___parser_nodes___AParam____n_dotdotdot(recv) ATTR(recv, (SFT_parser___parser_nodes[570] + 2))
-#define INIT_TABLE_POS_parser___parser_nodes___AParam (SFT_parser___parser_nodes[571] + 0)
-#define CALL_parser___parser_nodes___AParam___n_id(recv) ((parser___parser_nodes___AParam___n_id_t)CALL((recv), (SFT_parser___parser_nodes[571] + 1)))
-#define CALL_parser___parser_nodes___AParam___n_type(recv) ((parser___parser_nodes___AParam___n_type_t)CALL((recv), (SFT_parser___parser_nodes[571] + 2)))
-#define CALL_parser___parser_nodes___AParam___n_dotdotdot(recv) ((parser___parser_nodes___AParam___n_dotdotdot_t)CALL((recv), (SFT_parser___parser_nodes[571] + 3)))
-#define ID_parser___parser_nodes___AClosureDecl (SFT_parser___parser_nodes[572])
-#define COLOR_parser___parser_nodes___AClosureDecl (SFT_parser___parser_nodes[573])
-#define ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(recv) ATTR(recv, (SFT_parser___parser_nodes[574] + 0))
-#define ATTR_parser___parser_nodes___AClosureDecl____n_bang(recv) ATTR(recv, (SFT_parser___parser_nodes[574] + 1))
-#define ATTR_parser___parser_nodes___AClosureDecl____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[574] + 2))
-#define ATTR_parser___parser_nodes___AClosureDecl____n_signature(recv) ATTR(recv, (SFT_parser___parser_nodes[574] + 3))
-#define ATTR_parser___parser_nodes___AClosureDecl____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[574] + 4))
-#define INIT_TABLE_POS_parser___parser_nodes___AClosureDecl (SFT_parser___parser_nodes[575] + 0)
-#define CALL_parser___parser_nodes___AClosureDecl___n_kwbreak(recv) ((parser___parser_nodes___AClosureDecl___n_kwbreak_t)CALL((recv), (SFT_parser___parser_nodes[575] + 1)))
-#define CALL_parser___parser_nodes___AClosureDecl___n_bang(recv) ((parser___parser_nodes___AClosureDecl___n_bang_t)CALL((recv), (SFT_parser___parser_nodes[575] + 2)))
-#define CALL_parser___parser_nodes___AClosureDecl___n_id(recv) ((parser___parser_nodes___AClosureDecl___n_id_t)CALL((recv), (SFT_parser___parser_nodes[575] + 3)))
-#define CALL_parser___parser_nodes___AClosureDecl___n_signature(recv) ((parser___parser_nodes___AClosureDecl___n_signature_t)CALL((recv), (SFT_parser___parser_nodes[575] + 4)))
-#define CALL_parser___parser_nodes___AClosureDecl___n_expr(recv) ((parser___parser_nodes___AClosureDecl___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[575] + 5)))
-#define ID_parser___parser_nodes___AType (SFT_parser___parser_nodes[576])
-#define COLOR_parser___parser_nodes___AType (SFT_parser___parser_nodes[577])
-#define ATTR_parser___parser_nodes___AType____n_kwnullable(recv) ATTR(recv, (SFT_parser___parser_nodes[578] + 0))
-#define ATTR_parser___parser_nodes___AType____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[578] + 1))
-#define ATTR_parser___parser_nodes___AType____n_types(recv) ATTR(recv, (SFT_parser___parser_nodes[578] + 2))
-#define INIT_TABLE_POS_parser___parser_nodes___AType (SFT_parser___parser_nodes[579] + 0)
-#define CALL_parser___parser_nodes___AType___n_kwnullable(recv) ((parser___parser_nodes___AType___n_kwnullable_t)CALL((recv), (SFT_parser___parser_nodes[579] + 1)))
-#define CALL_parser___parser_nodes___AType___n_id(recv) ((parser___parser_nodes___AType___n_id_t)CALL((recv), (SFT_parser___parser_nodes[579] + 2)))
-#define CALL_parser___parser_nodes___AType___n_types(recv) ((parser___parser_nodes___AType___n_types_t)CALL((recv), (SFT_parser___parser_nodes[579] + 3)))
-#define ID_parser___parser_nodes___ALabel (SFT_parser___parser_nodes[580])
-#define COLOR_parser___parser_nodes___ALabel (SFT_parser___parser_nodes[581])
-#define ATTR_parser___parser_nodes___ALabel____n_kwlabel(recv) ATTR(recv, (SFT_parser___parser_nodes[582] + 0))
-#define ATTR_parser___parser_nodes___ALabel____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[582] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___ALabel (SFT_parser___parser_nodes[583] + 0)
-#define CALL_parser___parser_nodes___ALabel___n_kwlabel(recv) ((parser___parser_nodes___ALabel___n_kwlabel_t)CALL((recv), (SFT_parser___parser_nodes[583] + 1)))
-#define CALL_parser___parser_nodes___ALabel___n_id(recv) ((parser___parser_nodes___ALabel___n_id_t)CALL((recv), (SFT_parser___parser_nodes[583] + 2)))
-#define ID_parser___parser_nodes___AExpr (SFT_parser___parser_nodes[584])
-#define COLOR_parser___parser_nodes___AExpr (SFT_parser___parser_nodes[585])
-#define INIT_TABLE_POS_parser___parser_nodes___AExpr (SFT_parser___parser_nodes[586] + 0)
-#define ID_parser___parser_nodes___ABlockExpr (SFT_parser___parser_nodes[587])
-#define COLOR_parser___parser_nodes___ABlockExpr (SFT_parser___parser_nodes[588])
-#define ATTR_parser___parser_nodes___ABlockExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[589] + 0))
-#define ATTR_parser___parser_nodes___ABlockExpr____n_kwend(recv) ATTR(recv, (SFT_parser___parser_nodes[589] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___ABlockExpr (SFT_parser___parser_nodes[590] + 0)
-#define CALL_parser___parser_nodes___ABlockExpr___n_expr(recv) ((parser___parser_nodes___ABlockExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[590] + 1)))
-#define CALL_parser___parser_nodes___ABlockExpr___n_kwend(recv) ((parser___parser_nodes___ABlockExpr___n_kwend_t)CALL((recv), (SFT_parser___parser_nodes[590] + 2)))
-#define ID_parser___parser_nodes___AVardeclExpr (SFT_parser___parser_nodes[591])
-#define COLOR_parser___parser_nodes___AVardeclExpr (SFT_parser___parser_nodes[592])
-#define ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(recv) ATTR(recv, (SFT_parser___parser_nodes[593] + 0))
-#define ATTR_parser___parser_nodes___AVardeclExpr____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[593] + 1))
-#define ATTR_parser___parser_nodes___AVardeclExpr____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[593] + 2))
-#define ATTR_parser___parser_nodes___AVardeclExpr____n_assign(recv) ATTR(recv, (SFT_parser___parser_nodes[593] + 3))
-#define ATTR_parser___parser_nodes___AVardeclExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[593] + 4))
-#define INIT_TABLE_POS_parser___parser_nodes___AVardeclExpr (SFT_parser___parser_nodes[594] + 0)
-#define CALL_parser___parser_nodes___AVardeclExpr___n_kwvar(recv) ((parser___parser_nodes___AVardeclExpr___n_kwvar_t)CALL((recv), (SFT_parser___parser_nodes[594] + 1)))
-#define CALL_parser___parser_nodes___AVardeclExpr___n_id(recv) ((parser___parser_nodes___AVardeclExpr___n_id_t)CALL((recv), (SFT_parser___parser_nodes[594] + 2)))
-#define CALL_parser___parser_nodes___AVardeclExpr___n_type(recv) ((parser___parser_nodes___AVardeclExpr___n_type_t)CALL((recv), (SFT_parser___parser_nodes[594] + 3)))
-#define CALL_parser___parser_nodes___AVardeclExpr___n_assign(recv) ((parser___parser_nodes___AVardeclExpr___n_assign_t)CALL((recv), (SFT_parser___parser_nodes[594] + 4)))
-#define CALL_parser___parser_nodes___AVardeclExpr___n_expr(recv) ((parser___parser_nodes___AVardeclExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[594] + 5)))
-#define ID_parser___parser_nodes___AReturnExpr (SFT_parser___parser_nodes[595])
-#define COLOR_parser___parser_nodes___AReturnExpr (SFT_parser___parser_nodes[596])
-#define ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(recv) ATTR(recv, (SFT_parser___parser_nodes[597] + 0))
-#define ATTR_parser___parser_nodes___AReturnExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[597] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AReturnExpr (SFT_parser___parser_nodes[598] + 0)
-#define CALL_parser___parser_nodes___AReturnExpr___n_kwreturn(recv) ((parser___parser_nodes___AReturnExpr___n_kwreturn_t)CALL((recv), (SFT_parser___parser_nodes[598] + 1)))
-#define CALL_parser___parser_nodes___AReturnExpr___n_expr(recv) ((parser___parser_nodes___AReturnExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[598] + 2)))
-#define ID_parser___parser_nodes___ALabelable (SFT_parser___parser_nodes[599])
-#define COLOR_parser___parser_nodes___ALabelable (SFT_parser___parser_nodes[600])
-#define ATTR_parser___parser_nodes___ALabelable____n_label(recv) ATTR(recv, (SFT_parser___parser_nodes[601] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ALabelable (SFT_parser___parser_nodes[602] + 0)
-#define CALL_parser___parser_nodes___ALabelable___n_label(recv) ((parser___parser_nodes___ALabelable___n_label_t)CALL((recv), (SFT_parser___parser_nodes[602] + 1)))
-#define ID_parser___parser_nodes___ABreakExpr (SFT_parser___parser_nodes[603])
-#define COLOR_parser___parser_nodes___ABreakExpr (SFT_parser___parser_nodes[604])
-#define ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(recv) ATTR(recv, (SFT_parser___parser_nodes[605] + 0))
-#define ATTR_parser___parser_nodes___ABreakExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[605] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___ABreakExpr (SFT_parser___parser_nodes[606] + 0)
-#define CALL_parser___parser_nodes___ABreakExpr___n_kwbreak(recv) ((parser___parser_nodes___ABreakExpr___n_kwbreak_t)CALL((recv), (SFT_parser___parser_nodes[606] + 1)))
-#define CALL_parser___parser_nodes___ABreakExpr___n_expr(recv) ((parser___parser_nodes___ABreakExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[606] + 2)))
-#define ID_parser___parser_nodes___AAbortExpr (SFT_parser___parser_nodes[607])
-#define COLOR_parser___parser_nodes___AAbortExpr (SFT_parser___parser_nodes[608])
-#define ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(recv) ATTR(recv, (SFT_parser___parser_nodes[609] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AAbortExpr (SFT_parser___parser_nodes[610] + 0)
-#define CALL_parser___parser_nodes___AAbortExpr___n_kwabort(recv) ((parser___parser_nodes___AAbortExpr___n_kwabort_t)CALL((recv), (SFT_parser___parser_nodes[610] + 1)))
-#define ID_parser___parser_nodes___AContinueExpr (SFT_parser___parser_nodes[611])
-#define COLOR_parser___parser_nodes___AContinueExpr (SFT_parser___parser_nodes[612])
-#define ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(recv) ATTR(recv, (SFT_parser___parser_nodes[613] + 0))
-#define ATTR_parser___parser_nodes___AContinueExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[613] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AContinueExpr (SFT_parser___parser_nodes[614] + 0)
-#define CALL_parser___parser_nodes___AContinueExpr___n_kwcontinue(recv) ((parser___parser_nodes___AContinueExpr___n_kwcontinue_t)CALL((recv), (SFT_parser___parser_nodes[614] + 1)))
-#define CALL_parser___parser_nodes___AContinueExpr___n_expr(recv) ((parser___parser_nodes___AContinueExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[614] + 2)))
-#define ID_parser___parser_nodes___ADoExpr (SFT_parser___parser_nodes[615])
-#define COLOR_parser___parser_nodes___ADoExpr (SFT_parser___parser_nodes[616])
-#define ATTR_parser___parser_nodes___ADoExpr____n_kwdo(recv) ATTR(recv, (SFT_parser___parser_nodes[617] + 0))
-#define ATTR_parser___parser_nodes___ADoExpr____n_block(recv) ATTR(recv, (SFT_parser___parser_nodes[617] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___ADoExpr (SFT_parser___parser_nodes[618] + 0)
-#define CALL_parser___parser_nodes___ADoExpr___n_kwdo(recv) ((parser___parser_nodes___ADoExpr___n_kwdo_t)CALL((recv), (SFT_parser___parser_nodes[618] + 1)))
-#define CALL_parser___parser_nodes___ADoExpr___n_block(recv) ((parser___parser_nodes___ADoExpr___n_block_t)CALL((recv), (SFT_parser___parser_nodes[618] + 2)))
-#define ID_parser___parser_nodes___AIfExpr (SFT_parser___parser_nodes[619])
-#define COLOR_parser___parser_nodes___AIfExpr (SFT_parser___parser_nodes[620])
-#define ATTR_parser___parser_nodes___AIfExpr____n_kwif(recv) ATTR(recv, (SFT_parser___parser_nodes[621] + 0))
-#define ATTR_parser___parser_nodes___AIfExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[621] + 1))
-#define ATTR_parser___parser_nodes___AIfExpr____n_then(recv) ATTR(recv, (SFT_parser___parser_nodes[621] + 2))
-#define ATTR_parser___parser_nodes___AIfExpr____n_else(recv) ATTR(recv, (SFT_parser___parser_nodes[621] + 3))
-#define INIT_TABLE_POS_parser___parser_nodes___AIfExpr (SFT_parser___parser_nodes[622] + 0)
-#define CALL_parser___parser_nodes___AIfExpr___n_kwif(recv) ((parser___parser_nodes___AIfExpr___n_kwif_t)CALL((recv), (SFT_parser___parser_nodes[622] + 1)))
-#define CALL_parser___parser_nodes___AIfExpr___n_expr(recv) ((parser___parser_nodes___AIfExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[622] + 2)))
-#define CALL_parser___parser_nodes___AIfExpr___n_then(recv) ((parser___parser_nodes___AIfExpr___n_then_t)CALL((recv), (SFT_parser___parser_nodes[622] + 3)))
-#define CALL_parser___parser_nodes___AIfExpr___n_else(recv) ((parser___parser_nodes___AIfExpr___n_else_t)CALL((recv), (SFT_parser___parser_nodes[622] + 4)))
-#define ID_parser___parser_nodes___AIfexprExpr (SFT_parser___parser_nodes[623])
-#define COLOR_parser___parser_nodes___AIfexprExpr (SFT_parser___parser_nodes[624])
-#define ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(recv) ATTR(recv, (SFT_parser___parser_nodes[625] + 0))
-#define ATTR_parser___parser_nodes___AIfexprExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[625] + 1))
-#define ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(recv) ATTR(recv, (SFT_parser___parser_nodes[625] + 2))
-#define ATTR_parser___parser_nodes___AIfexprExpr____n_then(recv) ATTR(recv, (SFT_parser___parser_nodes[625] + 3))
-#define ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(recv) ATTR(recv, (SFT_parser___parser_nodes[625] + 4))
-#define ATTR_parser___parser_nodes___AIfexprExpr____n_else(recv) ATTR(recv, (SFT_parser___parser_nodes[625] + 5))
-#define INIT_TABLE_POS_parser___parser_nodes___AIfexprExpr (SFT_parser___parser_nodes[626] + 0)
-#define CALL_parser___parser_nodes___AIfexprExpr___n_kwif(recv) ((parser___parser_nodes___AIfexprExpr___n_kwif_t)CALL((recv), (SFT_parser___parser_nodes[626] + 1)))
-#define CALL_parser___parser_nodes___AIfexprExpr___n_expr(recv) ((parser___parser_nodes___AIfexprExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[626] + 2)))
-#define CALL_parser___parser_nodes___AIfexprExpr___n_kwthen(recv) ((parser___parser_nodes___AIfexprExpr___n_kwthen_t)CALL((recv), (SFT_parser___parser_nodes[626] + 3)))
-#define CALL_parser___parser_nodes___AIfexprExpr___n_then(recv) ((parser___parser_nodes___AIfexprExpr___n_then_t)CALL((recv), (SFT_parser___parser_nodes[626] + 4)))
-#define CALL_parser___parser_nodes___AIfexprExpr___n_kwelse(recv) ((parser___parser_nodes___AIfexprExpr___n_kwelse_t)CALL((recv), (SFT_parser___parser_nodes[626] + 5)))
-#define CALL_parser___parser_nodes___AIfexprExpr___n_else(recv) ((parser___parser_nodes___AIfexprExpr___n_else_t)CALL((recv), (SFT_parser___parser_nodes[626] + 6)))
-#define ID_parser___parser_nodes___AWhileExpr (SFT_parser___parser_nodes[627])
-#define COLOR_parser___parser_nodes___AWhileExpr (SFT_parser___parser_nodes[628])
-#define ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(recv) ATTR(recv, (SFT_parser___parser_nodes[629] + 0))
-#define ATTR_parser___parser_nodes___AWhileExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[629] + 1))
-#define ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(recv) ATTR(recv, (SFT_parser___parser_nodes[629] + 2))
-#define ATTR_parser___parser_nodes___AWhileExpr____n_block(recv) ATTR(recv, (SFT_parser___parser_nodes[629] + 3))
-#define INIT_TABLE_POS_parser___parser_nodes___AWhileExpr (SFT_parser___parser_nodes[630] + 0)
-#define CALL_parser___parser_nodes___AWhileExpr___n_kwwhile(recv) ((parser___parser_nodes___AWhileExpr___n_kwwhile_t)CALL((recv), (SFT_parser___parser_nodes[630] + 1)))
-#define CALL_parser___parser_nodes___AWhileExpr___n_expr(recv) ((parser___parser_nodes___AWhileExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[630] + 2)))
-#define CALL_parser___parser_nodes___AWhileExpr___n_kwdo(recv) ((parser___parser_nodes___AWhileExpr___n_kwdo_t)CALL((recv), (SFT_parser___parser_nodes[630] + 3)))
-#define CALL_parser___parser_nodes___AWhileExpr___n_block(recv) ((parser___parser_nodes___AWhileExpr___n_block_t)CALL((recv), (SFT_parser___parser_nodes[630] + 4)))
-#define ID_parser___parser_nodes___ALoopExpr (SFT_parser___parser_nodes[631])
-#define COLOR_parser___parser_nodes___ALoopExpr (SFT_parser___parser_nodes[632])
-#define ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(recv) ATTR(recv, (SFT_parser___parser_nodes[633] + 0))
-#define ATTR_parser___parser_nodes___ALoopExpr____n_block(recv) ATTR(recv, (SFT_parser___parser_nodes[633] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___ALoopExpr (SFT_parser___parser_nodes[634] + 0)
-#define CALL_parser___parser_nodes___ALoopExpr___n_kwloop(recv) ((parser___parser_nodes___ALoopExpr___n_kwloop_t)CALL((recv), (SFT_parser___parser_nodes[634] + 1)))
-#define CALL_parser___parser_nodes___ALoopExpr___n_block(recv) ((parser___parser_nodes___ALoopExpr___n_block_t)CALL((recv), (SFT_parser___parser_nodes[634] + 2)))
-#define ID_parser___parser_nodes___AForExpr (SFT_parser___parser_nodes[635])
-#define COLOR_parser___parser_nodes___AForExpr (SFT_parser___parser_nodes[636])
-#define ATTR_parser___parser_nodes___AForExpr____n_kwfor(recv) ATTR(recv, (SFT_parser___parser_nodes[637] + 0))
-#define ATTR_parser___parser_nodes___AForExpr____n_ids(recv) ATTR(recv, (SFT_parser___parser_nodes[637] + 1))
-#define ATTR_parser___parser_nodes___AForExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[637] + 2))
-#define ATTR_parser___parser_nodes___AForExpr____n_kwdo(recv) ATTR(recv, (SFT_parser___parser_nodes[637] + 3))
-#define ATTR_parser___parser_nodes___AForExpr____n_block(recv) ATTR(recv, (SFT_parser___parser_nodes[637] + 4))
-#define INIT_TABLE_POS_parser___parser_nodes___AForExpr (SFT_parser___parser_nodes[638] + 0)
-#define CALL_parser___parser_nodes___AForExpr___n_kwfor(recv) ((parser___parser_nodes___AForExpr___n_kwfor_t)CALL((recv), (SFT_parser___parser_nodes[638] + 1)))
-#define CALL_parser___parser_nodes___AForExpr___n_ids(recv) ((parser___parser_nodes___AForExpr___n_ids_t)CALL((recv), (SFT_parser___parser_nodes[638] + 2)))
-#define CALL_parser___parser_nodes___AForExpr___n_expr(recv) ((parser___parser_nodes___AForExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[638] + 3)))
-#define CALL_parser___parser_nodes___AForExpr___n_kwdo(recv) ((parser___parser_nodes___AForExpr___n_kwdo_t)CALL((recv), (SFT_parser___parser_nodes[638] + 4)))
-#define CALL_parser___parser_nodes___AForExpr___n_block(recv) ((parser___parser_nodes___AForExpr___n_block_t)CALL((recv), (SFT_parser___parser_nodes[638] + 5)))
-#define ID_parser___parser_nodes___AAssertExpr (SFT_parser___parser_nodes[639])
-#define COLOR_parser___parser_nodes___AAssertExpr (SFT_parser___parser_nodes[640])
-#define ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(recv) ATTR(recv, (SFT_parser___parser_nodes[641] + 0))
-#define ATTR_parser___parser_nodes___AAssertExpr____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[641] + 1))
-#define ATTR_parser___parser_nodes___AAssertExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[641] + 2))
-#define ATTR_parser___parser_nodes___AAssertExpr____n_else(recv) ATTR(recv, (SFT_parser___parser_nodes[641] + 3))
-#define INIT_TABLE_POS_parser___parser_nodes___AAssertExpr (SFT_parser___parser_nodes[642] + 0)
-#define CALL_parser___parser_nodes___AAssertExpr___n_kwassert(recv) ((parser___parser_nodes___AAssertExpr___n_kwassert_t)CALL((recv), (SFT_parser___parser_nodes[642] + 1)))
-#define CALL_parser___parser_nodes___AAssertExpr___n_id(recv) ((parser___parser_nodes___AAssertExpr___n_id_t)CALL((recv), (SFT_parser___parser_nodes[642] + 2)))
-#define CALL_parser___parser_nodes___AAssertExpr___n_expr(recv) ((parser___parser_nodes___AAssertExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[642] + 3)))
-#define CALL_parser___parser_nodes___AAssertExpr___n_else(recv) ((parser___parser_nodes___AAssertExpr___n_else_t)CALL((recv), (SFT_parser___parser_nodes[642] + 4)))
-#define ID_parser___parser_nodes___AAssignFormExpr (SFT_parser___parser_nodes[643])
-#define COLOR_parser___parser_nodes___AAssignFormExpr (SFT_parser___parser_nodes[644])
-#define ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(recv) ATTR(recv, (SFT_parser___parser_nodes[645] + 0))
-#define ATTR_parser___parser_nodes___AAssignFormExpr____n_value(recv) ATTR(recv, (SFT_parser___parser_nodes[645] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AAssignFormExpr (SFT_parser___parser_nodes[646] + 0)
-#define CALL_parser___parser_nodes___AAssignFormExpr___n_assign(recv) ((parser___parser_nodes___AAssignFormExpr___n_assign_t)CALL((recv), (SFT_parser___parser_nodes[646] + 1)))
-#define CALL_parser___parser_nodes___AAssignFormExpr___n_value(recv) ((parser___parser_nodes___AAssignFormExpr___n_value_t)CALL((recv), (SFT_parser___parser_nodes[646] + 2)))
-#define ID_parser___parser_nodes___AReassignFormExpr (SFT_parser___parser_nodes[647])
-#define COLOR_parser___parser_nodes___AReassignFormExpr (SFT_parser___parser_nodes[648])
-#define ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(recv) ATTR(recv, (SFT_parser___parser_nodes[649] + 0))
-#define ATTR_parser___parser_nodes___AReassignFormExpr____n_value(recv) ATTR(recv, (SFT_parser___parser_nodes[649] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AReassignFormExpr (SFT_parser___parser_nodes[650] + 0)
-#define CALL_parser___parser_nodes___AReassignFormExpr___n_assign_op(recv) ((parser___parser_nodes___AReassignFormExpr___n_assign_op_t)CALL((recv), (SFT_parser___parser_nodes[650] + 1)))
-#define CALL_parser___parser_nodes___AReassignFormExpr___n_value(recv) ((parser___parser_nodes___AReassignFormExpr___n_value_t)CALL((recv), (SFT_parser___parser_nodes[650] + 2)))
-#define ID_parser___parser_nodes___AOnceExpr (SFT_parser___parser_nodes[651])
-#define COLOR_parser___parser_nodes___AOnceExpr (SFT_parser___parser_nodes[652])
-#define ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(recv) ATTR(recv, (SFT_parser___parser_nodes[653] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AOnceExpr (SFT_parser___parser_nodes[654] + 0)
-#define CALL_parser___parser_nodes___AOnceExpr___n_kwonce(recv) ((parser___parser_nodes___AOnceExpr___n_kwonce_t)CALL((recv), (SFT_parser___parser_nodes[654] + 1)))
-#define ID_parser___parser_nodes___ASendExpr (SFT_parser___parser_nodes[655])
-#define COLOR_parser___parser_nodes___ASendExpr (SFT_parser___parser_nodes[656])
-#define ATTR_parser___parser_nodes___ASendExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[657] + 0))
-#define ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(recv) ATTR(recv, (SFT_parser___parser_nodes[657] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___ASendExpr (SFT_parser___parser_nodes[658] + 0)
-#define CALL_parser___parser_nodes___ASendExpr___n_expr(recv) ((parser___parser_nodes___ASendExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[658] + 1)))
-#define CALL_parser___parser_nodes___ASendExpr___n_closure_defs(recv) ((parser___parser_nodes___ASendExpr___n_closure_defs_t)CALL((recv), (SFT_parser___parser_nodes[658] + 2)))
-#define ID_parser___parser_nodes___ABinopExpr (SFT_parser___parser_nodes[659])
-#define COLOR_parser___parser_nodes___ABinopExpr (SFT_parser___parser_nodes[660])
-#define ATTR_parser___parser_nodes___ABinopExpr____n_expr2(recv) ATTR(recv, (SFT_parser___parser_nodes[661] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ABinopExpr (SFT_parser___parser_nodes[662] + 0)
-#define CALL_parser___parser_nodes___ABinopExpr___n_expr2(recv) ((parser___parser_nodes___ABinopExpr___n_expr2_t)CALL((recv), (SFT_parser___parser_nodes[662] + 1)))
-#define ID_parser___parser_nodes___ABoolExpr (SFT_parser___parser_nodes[663])
-#define COLOR_parser___parser_nodes___ABoolExpr (SFT_parser___parser_nodes[664])
-#define INIT_TABLE_POS_parser___parser_nodes___ABoolExpr (SFT_parser___parser_nodes[665] + 0)
-#define ID_parser___parser_nodes___AOrExpr (SFT_parser___parser_nodes[666])
-#define COLOR_parser___parser_nodes___AOrExpr (SFT_parser___parser_nodes[667])
-#define ATTR_parser___parser_nodes___AOrExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[668] + 0))
-#define ATTR_parser___parser_nodes___AOrExpr____n_expr2(recv) ATTR(recv, (SFT_parser___parser_nodes[668] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AOrExpr (SFT_parser___parser_nodes[669] + 0)
-#define CALL_parser___parser_nodes___AOrExpr___n_expr(recv) ((parser___parser_nodes___AOrExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[669] + 1)))
-#define CALL_parser___parser_nodes___AOrExpr___n_expr2(recv) ((parser___parser_nodes___AOrExpr___n_expr2_t)CALL((recv), (SFT_parser___parser_nodes[669] + 2)))
-#define ID_parser___parser_nodes___AAndExpr (SFT_parser___parser_nodes[670])
-#define COLOR_parser___parser_nodes___AAndExpr (SFT_parser___parser_nodes[671])
-#define ATTR_parser___parser_nodes___AAndExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[672] + 0))
-#define ATTR_parser___parser_nodes___AAndExpr____n_expr2(recv) ATTR(recv, (SFT_parser___parser_nodes[672] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AAndExpr (SFT_parser___parser_nodes[673] + 0)
-#define CALL_parser___parser_nodes___AAndExpr___n_expr(recv) ((parser___parser_nodes___AAndExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[673] + 1)))
-#define CALL_parser___parser_nodes___AAndExpr___n_expr2(recv) ((parser___parser_nodes___AAndExpr___n_expr2_t)CALL((recv), (SFT_parser___parser_nodes[673] + 2)))
-#define ID_parser___parser_nodes___AOrElseExpr (SFT_parser___parser_nodes[674])
-#define COLOR_parser___parser_nodes___AOrElseExpr (SFT_parser___parser_nodes[675])
-#define ATTR_parser___parser_nodes___AOrElseExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[676] + 0))
-#define ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(recv) ATTR(recv, (SFT_parser___parser_nodes[676] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AOrElseExpr (SFT_parser___parser_nodes[677] + 0)
-#define CALL_parser___parser_nodes___AOrElseExpr___n_expr(recv) ((parser___parser_nodes___AOrElseExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[677] + 1)))
-#define CALL_parser___parser_nodes___AOrElseExpr___n_expr2(recv) ((parser___parser_nodes___AOrElseExpr___n_expr2_t)CALL((recv), (SFT_parser___parser_nodes[677] + 2)))
-#define ID_parser___parser_nodes___ANotExpr (SFT_parser___parser_nodes[678])
-#define COLOR_parser___parser_nodes___ANotExpr (SFT_parser___parser_nodes[679])
-#define ATTR_parser___parser_nodes___ANotExpr____n_kwnot(recv) ATTR(recv, (SFT_parser___parser_nodes[680] + 0))
-#define ATTR_parser___parser_nodes___ANotExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[680] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___ANotExpr (SFT_parser___parser_nodes[681] + 0)
-#define CALL_parser___parser_nodes___ANotExpr___n_kwnot(recv) ((parser___parser_nodes___ANotExpr___n_kwnot_t)CALL((recv), (SFT_parser___parser_nodes[681] + 1)))
-#define CALL_parser___parser_nodes___ANotExpr___n_expr(recv) ((parser___parser_nodes___ANotExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[681] + 2)))
-#define ID_parser___parser_nodes___AEqExpr (SFT_parser___parser_nodes[682])
-#define COLOR_parser___parser_nodes___AEqExpr (SFT_parser___parser_nodes[683])
-#define INIT_TABLE_POS_parser___parser_nodes___AEqExpr (SFT_parser___parser_nodes[684] + 0)
-#define ID_parser___parser_nodes___AEeExpr (SFT_parser___parser_nodes[685])
-#define COLOR_parser___parser_nodes___AEeExpr (SFT_parser___parser_nodes[686])
-#define ATTR_parser___parser_nodes___AEeExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[687] + 0))
-#define ATTR_parser___parser_nodes___AEeExpr____n_expr2(recv) ATTR(recv, (SFT_parser___parser_nodes[687] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AEeExpr (SFT_parser___parser_nodes[688] + 0)
-#define CALL_parser___parser_nodes___AEeExpr___n_expr(recv) ((parser___parser_nodes___AEeExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[688] + 1)))
-#define CALL_parser___parser_nodes___AEeExpr___n_expr2(recv) ((parser___parser_nodes___AEeExpr___n_expr2_t)CALL((recv), (SFT_parser___parser_nodes[688] + 2)))
-#define ID_parser___parser_nodes___ANeExpr (SFT_parser___parser_nodes[689])
-#define COLOR_parser___parser_nodes___ANeExpr (SFT_parser___parser_nodes[690])
-#define INIT_TABLE_POS_parser___parser_nodes___ANeExpr (SFT_parser___parser_nodes[691] + 0)
-#define ID_parser___parser_nodes___ALtExpr (SFT_parser___parser_nodes[692])
-#define COLOR_parser___parser_nodes___ALtExpr (SFT_parser___parser_nodes[693])
-#define INIT_TABLE_POS_parser___parser_nodes___ALtExpr (SFT_parser___parser_nodes[694] + 0)
-#define ID_parser___parser_nodes___ALeExpr (SFT_parser___parser_nodes[695])
-#define COLOR_parser___parser_nodes___ALeExpr (SFT_parser___parser_nodes[696])
-#define INIT_TABLE_POS_parser___parser_nodes___ALeExpr (SFT_parser___parser_nodes[697] + 0)
-#define ID_parser___parser_nodes___ALlExpr (SFT_parser___parser_nodes[698])
-#define COLOR_parser___parser_nodes___ALlExpr (SFT_parser___parser_nodes[699])
-#define INIT_TABLE_POS_parser___parser_nodes___ALlExpr (SFT_parser___parser_nodes[700] + 0)
-#define ID_parser___parser_nodes___AGtExpr (SFT_parser___parser_nodes[701])
-#define COLOR_parser___parser_nodes___AGtExpr (SFT_parser___parser_nodes[702])
-#define INIT_TABLE_POS_parser___parser_nodes___AGtExpr (SFT_parser___parser_nodes[703] + 0)
-#define ID_parser___parser_nodes___AGeExpr (SFT_parser___parser_nodes[704])
-#define COLOR_parser___parser_nodes___AGeExpr (SFT_parser___parser_nodes[705])
-#define INIT_TABLE_POS_parser___parser_nodes___AGeExpr (SFT_parser___parser_nodes[706] + 0)
-#define ID_parser___parser_nodes___AGgExpr (SFT_parser___parser_nodes[707])
-#define COLOR_parser___parser_nodes___AGgExpr (SFT_parser___parser_nodes[708])
-#define INIT_TABLE_POS_parser___parser_nodes___AGgExpr (SFT_parser___parser_nodes[709] + 0)
-#define ID_parser___parser_nodes___AIsaExpr (SFT_parser___parser_nodes[710])
-#define COLOR_parser___parser_nodes___AIsaExpr (SFT_parser___parser_nodes[711])
-#define ATTR_parser___parser_nodes___AIsaExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[712] + 0))
-#define ATTR_parser___parser_nodes___AIsaExpr____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[712] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AIsaExpr (SFT_parser___parser_nodes[713] + 0)
-#define CALL_parser___parser_nodes___AIsaExpr___n_expr(recv) ((parser___parser_nodes___AIsaExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[713] + 1)))
-#define CALL_parser___parser_nodes___AIsaExpr___n_type(recv) ((parser___parser_nodes___AIsaExpr___n_type_t)CALL((recv), (SFT_parser___parser_nodes[713] + 2)))
-#define ID_parser___parser_nodes___APlusExpr (SFT_parser___parser_nodes[714])
-#define COLOR_parser___parser_nodes___APlusExpr (SFT_parser___parser_nodes[715])
-#define INIT_TABLE_POS_parser___parser_nodes___APlusExpr (SFT_parser___parser_nodes[716] + 0)
-#define ID_parser___parser_nodes___AMinusExpr (SFT_parser___parser_nodes[717])
-#define COLOR_parser___parser_nodes___AMinusExpr (SFT_parser___parser_nodes[718])
-#define INIT_TABLE_POS_parser___parser_nodes___AMinusExpr (SFT_parser___parser_nodes[719] + 0)
-#define ID_parser___parser_nodes___AStarshipExpr (SFT_parser___parser_nodes[720])
-#define COLOR_parser___parser_nodes___AStarshipExpr (SFT_parser___parser_nodes[721])
-#define INIT_TABLE_POS_parser___parser_nodes___AStarshipExpr (SFT_parser___parser_nodes[722] + 0)
-#define ID_parser___parser_nodes___AStarExpr (SFT_parser___parser_nodes[723])
-#define COLOR_parser___parser_nodes___AStarExpr (SFT_parser___parser_nodes[724])
-#define INIT_TABLE_POS_parser___parser_nodes___AStarExpr (SFT_parser___parser_nodes[725] + 0)
-#define ID_parser___parser_nodes___ASlashExpr (SFT_parser___parser_nodes[726])
-#define COLOR_parser___parser_nodes___ASlashExpr (SFT_parser___parser_nodes[727])
-#define INIT_TABLE_POS_parser___parser_nodes___ASlashExpr (SFT_parser___parser_nodes[728] + 0)
-#define ID_parser___parser_nodes___APercentExpr (SFT_parser___parser_nodes[729])
-#define COLOR_parser___parser_nodes___APercentExpr (SFT_parser___parser_nodes[730])
-#define INIT_TABLE_POS_parser___parser_nodes___APercentExpr (SFT_parser___parser_nodes[731] + 0)
-#define ID_parser___parser_nodes___AUminusExpr (SFT_parser___parser_nodes[732])
-#define COLOR_parser___parser_nodes___AUminusExpr (SFT_parser___parser_nodes[733])
-#define ATTR_parser___parser_nodes___AUminusExpr____n_minus(recv) ATTR(recv, (SFT_parser___parser_nodes[734] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AUminusExpr (SFT_parser___parser_nodes[735] + 0)
-#define CALL_parser___parser_nodes___AUminusExpr___n_minus(recv) ((parser___parser_nodes___AUminusExpr___n_minus_t)CALL((recv), (SFT_parser___parser_nodes[735] + 1)))
-#define ID_parser___parser_nodes___ANewExpr (SFT_parser___parser_nodes[736])
-#define COLOR_parser___parser_nodes___ANewExpr (SFT_parser___parser_nodes[737])
-#define ATTR_parser___parser_nodes___ANewExpr____n_kwnew(recv) ATTR(recv, (SFT_parser___parser_nodes[738] + 0))
-#define ATTR_parser___parser_nodes___ANewExpr____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[738] + 1))
-#define ATTR_parser___parser_nodes___ANewExpr____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[738] + 2))
-#define ATTR_parser___parser_nodes___ANewExpr____n_args(recv) ATTR(recv, (SFT_parser___parser_nodes[738] + 3))
-#define INIT_TABLE_POS_parser___parser_nodes___ANewExpr (SFT_parser___parser_nodes[739] + 0)
-#define CALL_parser___parser_nodes___ANewExpr___n_kwnew(recv) ((parser___parser_nodes___ANewExpr___n_kwnew_t)CALL((recv), (SFT_parser___parser_nodes[739] + 1)))
-#define CALL_parser___parser_nodes___ANewExpr___n_type(recv) ((parser___parser_nodes___ANewExpr___n_type_t)CALL((recv), (SFT_parser___parser_nodes[739] + 2)))
-#define CALL_parser___parser_nodes___ANewExpr___n_id(recv) ((parser___parser_nodes___ANewExpr___n_id_t)CALL((recv), (SFT_parser___parser_nodes[739] + 3)))
-#define CALL_parser___parser_nodes___ANewExpr___n_args(recv) ((parser___parser_nodes___ANewExpr___n_args_t)CALL((recv), (SFT_parser___parser_nodes[739] + 4)))
-#define ID_parser___parser_nodes___AAttrFormExpr (SFT_parser___parser_nodes[740])
-#define COLOR_parser___parser_nodes___AAttrFormExpr (SFT_parser___parser_nodes[741])
-#define ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[742] + 0))
-#define ATTR_parser___parser_nodes___AAttrFormExpr____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[742] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AAttrFormExpr (SFT_parser___parser_nodes[743] + 0)
-#define CALL_parser___parser_nodes___AAttrFormExpr___n_expr(recv) ((parser___parser_nodes___AAttrFormExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[743] + 1)))
-#define CALL_parser___parser_nodes___AAttrFormExpr___n_id(recv) ((parser___parser_nodes___AAttrFormExpr___n_id_t)CALL((recv), (SFT_parser___parser_nodes[743] + 2)))
-#define ID_parser___parser_nodes___AAttrExpr (SFT_parser___parser_nodes[744])
-#define COLOR_parser___parser_nodes___AAttrExpr (SFT_parser___parser_nodes[745])
-#define INIT_TABLE_POS_parser___parser_nodes___AAttrExpr (SFT_parser___parser_nodes[746] + 0)
-#define ID_parser___parser_nodes___AAttrAssignExpr (SFT_parser___parser_nodes[747])
-#define COLOR_parser___parser_nodes___AAttrAssignExpr (SFT_parser___parser_nodes[748])
-#define INIT_TABLE_POS_parser___parser_nodes___AAttrAssignExpr (SFT_parser___parser_nodes[749] + 0)
-#define ID_parser___parser_nodes___ACallFormExpr (SFT_parser___parser_nodes[750])
-#define COLOR_parser___parser_nodes___ACallFormExpr (SFT_parser___parser_nodes[751])
-#define ATTR_parser___parser_nodes___ACallFormExpr____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[752] + 0))
-#define ATTR_parser___parser_nodes___ACallFormExpr____n_args(recv) ATTR(recv, (SFT_parser___parser_nodes[752] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___ACallFormExpr (SFT_parser___parser_nodes[753] + 0)
-#define CALL_parser___parser_nodes___ACallFormExpr___n_id(recv) ((parser___parser_nodes___ACallFormExpr___n_id_t)CALL((recv), (SFT_parser___parser_nodes[753] + 1)))
-#define CALL_parser___parser_nodes___ACallFormExpr___n_args(recv) ((parser___parser_nodes___ACallFormExpr___n_args_t)CALL((recv), (SFT_parser___parser_nodes[753] + 2)))
-#define ID_parser___parser_nodes___ASendReassignFormExpr (SFT_parser___parser_nodes[754])
-#define COLOR_parser___parser_nodes___ASendReassignFormExpr (SFT_parser___parser_nodes[755])
-#define INIT_TABLE_POS_parser___parser_nodes___ASendReassignFormExpr (SFT_parser___parser_nodes[756] + 0)
-#define ID_parser___parser_nodes___AAttrReassignExpr (SFT_parser___parser_nodes[757])
-#define COLOR_parser___parser_nodes___AAttrReassignExpr (SFT_parser___parser_nodes[758])
-#define INIT_TABLE_POS_parser___parser_nodes___AAttrReassignExpr (SFT_parser___parser_nodes[759] + 0)
-#define ID_parser___parser_nodes___ACallExpr (SFT_parser___parser_nodes[760])
-#define COLOR_parser___parser_nodes___ACallExpr (SFT_parser___parser_nodes[761])
-#define INIT_TABLE_POS_parser___parser_nodes___ACallExpr (SFT_parser___parser_nodes[762] + 0)
-#define ID_parser___parser_nodes___ACallAssignExpr (SFT_parser___parser_nodes[763])
-#define COLOR_parser___parser_nodes___ACallAssignExpr (SFT_parser___parser_nodes[764])
-#define INIT_TABLE_POS_parser___parser_nodes___ACallAssignExpr (SFT_parser___parser_nodes[765] + 0)
-#define ID_parser___parser_nodes___ACallReassignExpr (SFT_parser___parser_nodes[766])
-#define COLOR_parser___parser_nodes___ACallReassignExpr (SFT_parser___parser_nodes[767])
-#define INIT_TABLE_POS_parser___parser_nodes___ACallReassignExpr (SFT_parser___parser_nodes[768] + 0)
-#define ID_parser___parser_nodes___ASuperExpr (SFT_parser___parser_nodes[769])
-#define COLOR_parser___parser_nodes___ASuperExpr (SFT_parser___parser_nodes[770])
-#define ATTR_parser___parser_nodes___ASuperExpr____n_qualified(recv) ATTR(recv, (SFT_parser___parser_nodes[771] + 0))
-#define ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(recv) ATTR(recv, (SFT_parser___parser_nodes[771] + 1))
-#define ATTR_parser___parser_nodes___ASuperExpr____n_args(recv) ATTR(recv, (SFT_parser___parser_nodes[771] + 2))
-#define INIT_TABLE_POS_parser___parser_nodes___ASuperExpr (SFT_parser___parser_nodes[772] + 0)
-#define CALL_parser___parser_nodes___ASuperExpr___n_qualified(recv) ((parser___parser_nodes___ASuperExpr___n_qualified_t)CALL((recv), (SFT_parser___parser_nodes[772] + 1)))
-#define CALL_parser___parser_nodes___ASuperExpr___n_kwsuper(recv) ((parser___parser_nodes___ASuperExpr___n_kwsuper_t)CALL((recv), (SFT_parser___parser_nodes[772] + 2)))
-#define CALL_parser___parser_nodes___ASuperExpr___n_args(recv) ((parser___parser_nodes___ASuperExpr___n_args_t)CALL((recv), (SFT_parser___parser_nodes[772] + 3)))
-#define ID_parser___parser_nodes___AInitExpr (SFT_parser___parser_nodes[773])
-#define COLOR_parser___parser_nodes___AInitExpr (SFT_parser___parser_nodes[774])
-#define ATTR_parser___parser_nodes___AInitExpr____n_kwinit(recv) ATTR(recv, (SFT_parser___parser_nodes[775] + 0))
-#define ATTR_parser___parser_nodes___AInitExpr____n_args(recv) ATTR(recv, (SFT_parser___parser_nodes[775] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AInitExpr (SFT_parser___parser_nodes[776] + 0)
-#define CALL_parser___parser_nodes___AInitExpr___n_kwinit(recv) ((parser___parser_nodes___AInitExpr___n_kwinit_t)CALL((recv), (SFT_parser___parser_nodes[776] + 1)))
-#define CALL_parser___parser_nodes___AInitExpr___n_args(recv) ((parser___parser_nodes___AInitExpr___n_args_t)CALL((recv), (SFT_parser___parser_nodes[776] + 2)))
-#define ID_parser___parser_nodes___ABraFormExpr (SFT_parser___parser_nodes[777])
-#define COLOR_parser___parser_nodes___ABraFormExpr (SFT_parser___parser_nodes[778])
-#define ATTR_parser___parser_nodes___ABraFormExpr____n_args(recv) ATTR(recv, (SFT_parser___parser_nodes[779] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ABraFormExpr (SFT_parser___parser_nodes[780] + 0)
-#define CALL_parser___parser_nodes___ABraFormExpr___n_args(recv) ((parser___parser_nodes___ABraFormExpr___n_args_t)CALL((recv), (SFT_parser___parser_nodes[780] + 1)))
-#define ID_parser___parser_nodes___ABraExpr (SFT_parser___parser_nodes[781])
-#define COLOR_parser___parser_nodes___ABraExpr (SFT_parser___parser_nodes[782])
-#define INIT_TABLE_POS_parser___parser_nodes___ABraExpr (SFT_parser___parser_nodes[783] + 0)
-#define ID_parser___parser_nodes___ABraAssignExpr (SFT_parser___parser_nodes[784])
-#define COLOR_parser___parser_nodes___ABraAssignExpr (SFT_parser___parser_nodes[785])
-#define INIT_TABLE_POS_parser___parser_nodes___ABraAssignExpr (SFT_parser___parser_nodes[786] + 0)
-#define ID_parser___parser_nodes___AVarFormExpr (SFT_parser___parser_nodes[787])
-#define COLOR_parser___parser_nodes___AVarFormExpr (SFT_parser___parser_nodes[788])
-#define ATTR_parser___parser_nodes___AVarFormExpr____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[789] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AVarFormExpr (SFT_parser___parser_nodes[790] + 0)
-#define CALL_parser___parser_nodes___AVarFormExpr___n_id(recv) ((parser___parser_nodes___AVarFormExpr___n_id_t)CALL((recv), (SFT_parser___parser_nodes[790] + 1)))
-#define ID_parser___parser_nodes___ABraReassignExpr (SFT_parser___parser_nodes[791])
-#define COLOR_parser___parser_nodes___ABraReassignExpr (SFT_parser___parser_nodes[792])
-#define INIT_TABLE_POS_parser___parser_nodes___ABraReassignExpr (SFT_parser___parser_nodes[793] + 0)
-#define ID_parser___parser_nodes___AClosureCallExpr (SFT_parser___parser_nodes[794])
-#define COLOR_parser___parser_nodes___AClosureCallExpr (SFT_parser___parser_nodes[795])
-#define ATTR_parser___parser_nodes___AClosureCallExpr____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[796] + 0))
-#define ATTR_parser___parser_nodes___AClosureCallExpr____n_args(recv) ATTR(recv, (SFT_parser___parser_nodes[796] + 1))
-#define ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(recv) ATTR(recv, (SFT_parser___parser_nodes[796] + 2))
-#define INIT_TABLE_POS_parser___parser_nodes___AClosureCallExpr (SFT_parser___parser_nodes[797] + 0)
-#define CALL_parser___parser_nodes___AClosureCallExpr___n_id(recv) ((parser___parser_nodes___AClosureCallExpr___n_id_t)CALL((recv), (SFT_parser___parser_nodes[797] + 1)))
-#define CALL_parser___parser_nodes___AClosureCallExpr___n_args(recv) ((parser___parser_nodes___AClosureCallExpr___n_args_t)CALL((recv), (SFT_parser___parser_nodes[797] + 2)))
-#define CALL_parser___parser_nodes___AClosureCallExpr___n_closure_defs(recv) ((parser___parser_nodes___AClosureCallExpr___n_closure_defs_t)CALL((recv), (SFT_parser___parser_nodes[797] + 3)))
-#define ID_parser___parser_nodes___AVarExpr (SFT_parser___parser_nodes[798])
-#define COLOR_parser___parser_nodes___AVarExpr (SFT_parser___parser_nodes[799])
-#define INIT_TABLE_POS_parser___parser_nodes___AVarExpr (SFT_parser___parser_nodes[800] + 0)
-#define ID_parser___parser_nodes___AVarAssignExpr (SFT_parser___parser_nodes[801])
-#define COLOR_parser___parser_nodes___AVarAssignExpr (SFT_parser___parser_nodes[802])
-#define INIT_TABLE_POS_parser___parser_nodes___AVarAssignExpr (SFT_parser___parser_nodes[803] + 0)
-#define ID_parser___parser_nodes___AVarReassignExpr (SFT_parser___parser_nodes[804])
-#define COLOR_parser___parser_nodes___AVarReassignExpr (SFT_parser___parser_nodes[805])
-#define INIT_TABLE_POS_parser___parser_nodes___AVarReassignExpr (SFT_parser___parser_nodes[806] + 0)
-#define ID_parser___parser_nodes___ARangeExpr (SFT_parser___parser_nodes[807])
-#define COLOR_parser___parser_nodes___ARangeExpr (SFT_parser___parser_nodes[808])
-#define ATTR_parser___parser_nodes___ARangeExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[809] + 0))
-#define ATTR_parser___parser_nodes___ARangeExpr____n_expr2(recv) ATTR(recv, (SFT_parser___parser_nodes[809] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___ARangeExpr (SFT_parser___parser_nodes[810] + 0)
-#define CALL_parser___parser_nodes___ARangeExpr___n_expr(recv) ((parser___parser_nodes___ARangeExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[810] + 1)))
-#define CALL_parser___parser_nodes___ARangeExpr___n_expr2(recv) ((parser___parser_nodes___ARangeExpr___n_expr2_t)CALL((recv), (SFT_parser___parser_nodes[810] + 2)))
-#define ID_parser___parser_nodes___ACrangeExpr (SFT_parser___parser_nodes[811])
-#define COLOR_parser___parser_nodes___ACrangeExpr (SFT_parser___parser_nodes[812])
-#define ATTR_parser___parser_nodes___ACrangeExpr____n_obra(recv) ATTR(recv, (SFT_parser___parser_nodes[813] + 0))
-#define ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(recv) ATTR(recv, (SFT_parser___parser_nodes[813] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___ACrangeExpr (SFT_parser___parser_nodes[814] + 0)
-#define CALL_parser___parser_nodes___ACrangeExpr___n_obra(recv) ((parser___parser_nodes___ACrangeExpr___n_obra_t)CALL((recv), (SFT_parser___parser_nodes[814] + 1)))
-#define CALL_parser___parser_nodes___ACrangeExpr___n_cbra(recv) ((parser___parser_nodes___ACrangeExpr___n_cbra_t)CALL((recv), (SFT_parser___parser_nodes[814] + 2)))
-#define ID_parser___parser_nodes___AOrangeExpr (SFT_parser___parser_nodes[815])
-#define COLOR_parser___parser_nodes___AOrangeExpr (SFT_parser___parser_nodes[816])
-#define ATTR_parser___parser_nodes___AOrangeExpr____n_obra(recv) ATTR(recv, (SFT_parser___parser_nodes[817] + 0))
-#define ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(recv) ATTR(recv, (SFT_parser___parser_nodes[817] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AOrangeExpr (SFT_parser___parser_nodes[818] + 0)
-#define CALL_parser___parser_nodes___AOrangeExpr___n_obra(recv) ((parser___parser_nodes___AOrangeExpr___n_obra_t)CALL((recv), (SFT_parser___parser_nodes[818] + 1)))
-#define CALL_parser___parser_nodes___AOrangeExpr___n_cbra(recv) ((parser___parser_nodes___AOrangeExpr___n_cbra_t)CALL((recv), (SFT_parser___parser_nodes[818] + 2)))
-#define ID_parser___parser_nodes___AArrayExpr (SFT_parser___parser_nodes[819])
-#define COLOR_parser___parser_nodes___AArrayExpr (SFT_parser___parser_nodes[820])
-#define ATTR_parser___parser_nodes___AArrayExpr____n_exprs(recv) ATTR(recv, (SFT_parser___parser_nodes[821] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AArrayExpr (SFT_parser___parser_nodes[822] + 0)
-#define CALL_parser___parser_nodes___AArrayExpr___n_exprs(recv) ((parser___parser_nodes___AArrayExpr___n_exprs_t)CALL((recv), (SFT_parser___parser_nodes[822] + 1)))
-#define ID_parser___parser_nodes___ASelfExpr (SFT_parser___parser_nodes[823])
-#define COLOR_parser___parser_nodes___ASelfExpr (SFT_parser___parser_nodes[824])
-#define ATTR_parser___parser_nodes___ASelfExpr____n_kwself(recv) ATTR(recv, (SFT_parser___parser_nodes[825] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ASelfExpr (SFT_parser___parser_nodes[826] + 0)
-#define CALL_parser___parser_nodes___ASelfExpr___n_kwself(recv) ((parser___parser_nodes___ASelfExpr___n_kwself_t)CALL((recv), (SFT_parser___parser_nodes[826] + 1)))
-#define ID_parser___parser_nodes___AImplicitSelfExpr (SFT_parser___parser_nodes[827])
-#define COLOR_parser___parser_nodes___AImplicitSelfExpr (SFT_parser___parser_nodes[828])
-#define INIT_TABLE_POS_parser___parser_nodes___AImplicitSelfExpr (SFT_parser___parser_nodes[829] + 0)
-#define ID_parser___parser_nodes___ATrueExpr (SFT_parser___parser_nodes[830])
-#define COLOR_parser___parser_nodes___ATrueExpr (SFT_parser___parser_nodes[831])
-#define ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(recv) ATTR(recv, (SFT_parser___parser_nodes[832] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ATrueExpr (SFT_parser___parser_nodes[833] + 0)
-#define CALL_parser___parser_nodes___ATrueExpr___n_kwtrue(recv) ((parser___parser_nodes___ATrueExpr___n_kwtrue_t)CALL((recv), (SFT_parser___parser_nodes[833] + 1)))
-#define ID_parser___parser_nodes___AFalseExpr (SFT_parser___parser_nodes[834])
-#define COLOR_parser___parser_nodes___AFalseExpr (SFT_parser___parser_nodes[835])
-#define ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(recv) ATTR(recv, (SFT_parser___parser_nodes[836] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AFalseExpr (SFT_parser___parser_nodes[837] + 0)
-#define CALL_parser___parser_nodes___AFalseExpr___n_kwfalse(recv) ((parser___parser_nodes___AFalseExpr___n_kwfalse_t)CALL((recv), (SFT_parser___parser_nodes[837] + 1)))
-#define ID_parser___parser_nodes___ANullExpr (SFT_parser___parser_nodes[838])
-#define COLOR_parser___parser_nodes___ANullExpr (SFT_parser___parser_nodes[839])
-#define ATTR_parser___parser_nodes___ANullExpr____n_kwnull(recv) ATTR(recv, (SFT_parser___parser_nodes[840] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ANullExpr (SFT_parser___parser_nodes[841] + 0)
-#define CALL_parser___parser_nodes___ANullExpr___n_kwnull(recv) ((parser___parser_nodes___ANullExpr___n_kwnull_t)CALL((recv), (SFT_parser___parser_nodes[841] + 1)))
-#define ID_parser___parser_nodes___AIntExpr (SFT_parser___parser_nodes[842])
-#define COLOR_parser___parser_nodes___AIntExpr (SFT_parser___parser_nodes[843])
-#define ATTR_parser___parser_nodes___AIntExpr____n_number(recv) ATTR(recv, (SFT_parser___parser_nodes[844] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AIntExpr (SFT_parser___parser_nodes[845] + 0)
-#define CALL_parser___parser_nodes___AIntExpr___n_number(recv) ((parser___parser_nodes___AIntExpr___n_number_t)CALL((recv), (SFT_parser___parser_nodes[845] + 1)))
-#define ID_parser___parser_nodes___AFloatExpr (SFT_parser___parser_nodes[846])
-#define COLOR_parser___parser_nodes___AFloatExpr (SFT_parser___parser_nodes[847])
-#define ATTR_parser___parser_nodes___AFloatExpr____n_float(recv) ATTR(recv, (SFT_parser___parser_nodes[848] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AFloatExpr (SFT_parser___parser_nodes[849] + 0)
-#define CALL_parser___parser_nodes___AFloatExpr___n_float(recv) ((parser___parser_nodes___AFloatExpr___n_float_t)CALL((recv), (SFT_parser___parser_nodes[849] + 1)))
-#define ID_parser___parser_nodes___ACharExpr (SFT_parser___parser_nodes[850])
-#define COLOR_parser___parser_nodes___ACharExpr (SFT_parser___parser_nodes[851])
-#define ATTR_parser___parser_nodes___ACharExpr____n_char(recv) ATTR(recv, (SFT_parser___parser_nodes[852] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ACharExpr (SFT_parser___parser_nodes[853] + 0)
-#define CALL_parser___parser_nodes___ACharExpr___n_char(recv) ((parser___parser_nodes___ACharExpr___n_char_t)CALL((recv), (SFT_parser___parser_nodes[853] + 1)))
-#define ID_parser___parser_nodes___AStringFormExpr (SFT_parser___parser_nodes[854])
-#define COLOR_parser___parser_nodes___AStringFormExpr (SFT_parser___parser_nodes[855])
-#define INIT_TABLE_POS_parser___parser_nodes___AStringFormExpr (SFT_parser___parser_nodes[856] + 0)
-#define ID_parser___parser_nodes___AStringExpr (SFT_parser___parser_nodes[857])
-#define COLOR_parser___parser_nodes___AStringExpr (SFT_parser___parser_nodes[858])
-#define ATTR_parser___parser_nodes___AStringExpr____n_string(recv) ATTR(recv, (SFT_parser___parser_nodes[859] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AStringExpr (SFT_parser___parser_nodes[860] + 0)
-#define CALL_parser___parser_nodes___AStringExpr___n_string(recv) ((parser___parser_nodes___AStringExpr___n_string_t)CALL((recv), (SFT_parser___parser_nodes[860] + 1)))
-#define ID_parser___parser_nodes___AStartStringExpr (SFT_parser___parser_nodes[861])
-#define COLOR_parser___parser_nodes___AStartStringExpr (SFT_parser___parser_nodes[862])
-#define ATTR_parser___parser_nodes___AStartStringExpr____n_string(recv) ATTR(recv, (SFT_parser___parser_nodes[863] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AStartStringExpr (SFT_parser___parser_nodes[864] + 0)
-#define CALL_parser___parser_nodes___AStartStringExpr___n_string(recv) ((parser___parser_nodes___AStartStringExpr___n_string_t)CALL((recv), (SFT_parser___parser_nodes[864] + 1)))
-#define ID_parser___parser_nodes___AMidStringExpr (SFT_parser___parser_nodes[865])
-#define COLOR_parser___parser_nodes___AMidStringExpr (SFT_parser___parser_nodes[866])
-#define ATTR_parser___parser_nodes___AMidStringExpr____n_string(recv) ATTR(recv, (SFT_parser___parser_nodes[867] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AMidStringExpr (SFT_parser___parser_nodes[868] + 0)
-#define CALL_parser___parser_nodes___AMidStringExpr___n_string(recv) ((parser___parser_nodes___AMidStringExpr___n_string_t)CALL((recv), (SFT_parser___parser_nodes[868] + 1)))
-#define ID_parser___parser_nodes___AEndStringExpr (SFT_parser___parser_nodes[869])
-#define COLOR_parser___parser_nodes___AEndStringExpr (SFT_parser___parser_nodes[870])
-#define ATTR_parser___parser_nodes___AEndStringExpr____n_string(recv) ATTR(recv, (SFT_parser___parser_nodes[871] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AEndStringExpr (SFT_parser___parser_nodes[872] + 0)
-#define CALL_parser___parser_nodes___AEndStringExpr___n_string(recv) ((parser___parser_nodes___AEndStringExpr___n_string_t)CALL((recv), (SFT_parser___parser_nodes[872] + 1)))
-#define ID_parser___parser_nodes___ASuperstringExpr (SFT_parser___parser_nodes[873])
-#define COLOR_parser___parser_nodes___ASuperstringExpr (SFT_parser___parser_nodes[874])
-#define ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(recv) ATTR(recv, (SFT_parser___parser_nodes[875] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ASuperstringExpr (SFT_parser___parser_nodes[876] + 0)
-#define CALL_parser___parser_nodes___ASuperstringExpr___n_exprs(recv) ((parser___parser_nodes___ASuperstringExpr___n_exprs_t)CALL((recv), (SFT_parser___parser_nodes[876] + 1)))
-#define ID_parser___parser_nodes___AParExpr (SFT_parser___parser_nodes[877])
-#define COLOR_parser___parser_nodes___AParExpr (SFT_parser___parser_nodes[878])
-#define ATTR_parser___parser_nodes___AParExpr____n_opar(recv) ATTR(recv, (SFT_parser___parser_nodes[879] + 0))
-#define ATTR_parser___parser_nodes___AParExpr____n_cpar(recv) ATTR(recv, (SFT_parser___parser_nodes[879] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AParExpr (SFT_parser___parser_nodes[880] + 0)
-#define CALL_parser___parser_nodes___AParExpr___n_opar(recv) ((parser___parser_nodes___AParExpr___n_opar_t)CALL((recv), (SFT_parser___parser_nodes[880] + 1)))
-#define CALL_parser___parser_nodes___AParExpr___n_cpar(recv) ((parser___parser_nodes___AParExpr___n_cpar_t)CALL((recv), (SFT_parser___parser_nodes[880] + 2)))
-#define ID_parser___parser_nodes___AProxyExpr (SFT_parser___parser_nodes[881])
-#define COLOR_parser___parser_nodes___AProxyExpr (SFT_parser___parser_nodes[882])
-#define ATTR_parser___parser_nodes___AProxyExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[883] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AProxyExpr (SFT_parser___parser_nodes[884] + 0)
-#define CALL_parser___parser_nodes___AProxyExpr___n_expr(recv) ((parser___parser_nodes___AProxyExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[884] + 1)))
-#define ID_parser___parser_nodes___AAsCastExpr (SFT_parser___parser_nodes[885])
-#define COLOR_parser___parser_nodes___AAsCastExpr (SFT_parser___parser_nodes[886])
-#define ATTR_parser___parser_nodes___AAsCastExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[887] + 0))
-#define ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(recv) ATTR(recv, (SFT_parser___parser_nodes[887] + 1))
-#define ATTR_parser___parser_nodes___AAsCastExpr____n_opar(recv) ATTR(recv, (SFT_parser___parser_nodes[887] + 2))
-#define ATTR_parser___parser_nodes___AAsCastExpr____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[887] + 3))
-#define ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(recv) ATTR(recv, (SFT_parser___parser_nodes[887] + 4))
-#define INIT_TABLE_POS_parser___parser_nodes___AAsCastExpr (SFT_parser___parser_nodes[888] + 0)
-#define CALL_parser___parser_nodes___AAsCastExpr___n_expr(recv) ((parser___parser_nodes___AAsCastExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[888] + 1)))
-#define CALL_parser___parser_nodes___AAsCastExpr___n_kwas(recv) ((parser___parser_nodes___AAsCastExpr___n_kwas_t)CALL((recv), (SFT_parser___parser_nodes[888] + 2)))
-#define CALL_parser___parser_nodes___AAsCastExpr___n_opar(recv) ((parser___parser_nodes___AAsCastExpr___n_opar_t)CALL((recv), (SFT_parser___parser_nodes[888] + 3)))
-#define CALL_parser___parser_nodes___AAsCastExpr___n_type(recv) ((parser___parser_nodes___AAsCastExpr___n_type_t)CALL((recv), (SFT_parser___parser_nodes[888] + 4)))
-#define CALL_parser___parser_nodes___AAsCastExpr___n_cpar(recv) ((parser___parser_nodes___AAsCastExpr___n_cpar_t)CALL((recv), (SFT_parser___parser_nodes[888] + 5)))
-#define ID_parser___parser_nodes___AAsNotnullExpr (SFT_parser___parser_nodes[889])
-#define COLOR_parser___parser_nodes___AAsNotnullExpr (SFT_parser___parser_nodes[890])
-#define ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[891] + 0))
-#define ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(recv) ATTR(recv, (SFT_parser___parser_nodes[891] + 1))
-#define ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(recv) ATTR(recv, (SFT_parser___parser_nodes[891] + 2))
-#define ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(recv) ATTR(recv, (SFT_parser___parser_nodes[891] + 3))
-#define ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(recv) ATTR(recv, (SFT_parser___parser_nodes[891] + 4))
-#define ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(recv) ATTR(recv, (SFT_parser___parser_nodes[891] + 5))
-#define INIT_TABLE_POS_parser___parser_nodes___AAsNotnullExpr (SFT_parser___parser_nodes[892] + 0)
-#define CALL_parser___parser_nodes___AAsNotnullExpr___n_expr(recv) ((parser___parser_nodes___AAsNotnullExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[892] + 1)))
-#define CALL_parser___parser_nodes___AAsNotnullExpr___n_kwas(recv) ((parser___parser_nodes___AAsNotnullExpr___n_kwas_t)CALL((recv), (SFT_parser___parser_nodes[892] + 2)))
-#define CALL_parser___parser_nodes___AAsNotnullExpr___n_opar(recv) ((parser___parser_nodes___AAsNotnullExpr___n_opar_t)CALL((recv), (SFT_parser___parser_nodes[892] + 3)))
-#define CALL_parser___parser_nodes___AAsNotnullExpr___n_kwnot(recv) ((parser___parser_nodes___AAsNotnullExpr___n_kwnot_t)CALL((recv), (SFT_parser___parser_nodes[892] + 4)))
-#define CALL_parser___parser_nodes___AAsNotnullExpr___n_kwnull(recv) ((parser___parser_nodes___AAsNotnullExpr___n_kwnull_t)CALL((recv), (SFT_parser___parser_nodes[892] + 5)))
-#define CALL_parser___parser_nodes___AAsNotnullExpr___n_cpar(recv) ((parser___parser_nodes___AAsNotnullExpr___n_cpar_t)CALL((recv), (SFT_parser___parser_nodes[892] + 6)))
-#define ID_parser___parser_nodes___AIssetAttrExpr (SFT_parser___parser_nodes[893])
-#define COLOR_parser___parser_nodes___AIssetAttrExpr (SFT_parser___parser_nodes[894])
-#define ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(recv) ATTR(recv, (SFT_parser___parser_nodes[895] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AIssetAttrExpr (SFT_parser___parser_nodes[896] + 0)
-#define CALL_parser___parser_nodes___AIssetAttrExpr___n_kwisset(recv) ((parser___parser_nodes___AIssetAttrExpr___n_kwisset_t)CALL((recv), (SFT_parser___parser_nodes[896] + 1)))
-#define ID_parser___parser_nodes___AExprs (SFT_parser___parser_nodes[897])
-#define COLOR_parser___parser_nodes___AExprs (SFT_parser___parser_nodes[898])
-#define ATTR_parser___parser_nodes___AExprs____n_exprs(recv) ATTR(recv, (SFT_parser___parser_nodes[899] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AExprs (SFT_parser___parser_nodes[900] + 0)
-#define CALL_parser___parser_nodes___AExprs___n_exprs(recv) ((parser___parser_nodes___AExprs___n_exprs_t)CALL((recv), (SFT_parser___parser_nodes[900] + 1)))
-#define ID_parser___parser_nodes___ADebugTypeExpr (SFT_parser___parser_nodes[901])
-#define COLOR_parser___parser_nodes___ADebugTypeExpr (SFT_parser___parser_nodes[902])
-#define ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(recv) ATTR(recv, (SFT_parser___parser_nodes[903] + 0))
-#define ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(recv) ATTR(recv, (SFT_parser___parser_nodes[903] + 1))
-#define ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[903] + 2))
-#define ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[903] + 3))
-#define INIT_TABLE_POS_parser___parser_nodes___ADebugTypeExpr (SFT_parser___parser_nodes[904] + 0)
-#define CALL_parser___parser_nodes___ADebugTypeExpr___n_kwdebug(recv) ((parser___parser_nodes___ADebugTypeExpr___n_kwdebug_t)CALL((recv), (SFT_parser___parser_nodes[904] + 1)))
-#define CALL_parser___parser_nodes___ADebugTypeExpr___n_kwtype(recv) ((parser___parser_nodes___ADebugTypeExpr___n_kwtype_t)CALL((recv), (SFT_parser___parser_nodes[904] + 2)))
-#define CALL_parser___parser_nodes___ADebugTypeExpr___n_expr(recv) ((parser___parser_nodes___ADebugTypeExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[904] + 3)))
-#define CALL_parser___parser_nodes___ADebugTypeExpr___n_type(recv) ((parser___parser_nodes___ADebugTypeExpr___n_type_t)CALL((recv), (SFT_parser___parser_nodes[904] + 4)))
-#define ID_parser___parser_nodes___AListExprs (SFT_parser___parser_nodes[905])
-#define COLOR_parser___parser_nodes___AListExprs (SFT_parser___parser_nodes[906])
-#define INIT_TABLE_POS_parser___parser_nodes___AListExprs (SFT_parser___parser_nodes[907] + 0)
-#define ID_parser___parser_nodes___AParExprs (SFT_parser___parser_nodes[908])
-#define COLOR_parser___parser_nodes___AParExprs (SFT_parser___parser_nodes[909])
-#define ATTR_parser___parser_nodes___AParExprs____n_opar(recv) ATTR(recv, (SFT_parser___parser_nodes[910] + 0))
-#define ATTR_parser___parser_nodes___AParExprs____n_cpar(recv) ATTR(recv, (SFT_parser___parser_nodes[910] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AParExprs (SFT_parser___parser_nodes[911] + 0)
-#define CALL_parser___parser_nodes___AParExprs___n_opar(recv) ((parser___parser_nodes___AParExprs___n_opar_t)CALL((recv), (SFT_parser___parser_nodes[911] + 1)))
-#define CALL_parser___parser_nodes___AParExprs___n_cpar(recv) ((parser___parser_nodes___AParExprs___n_cpar_t)CALL((recv), (SFT_parser___parser_nodes[911] + 2)))
-#define ID_parser___parser_nodes___ABraExprs (SFT_parser___parser_nodes[912])
-#define COLOR_parser___parser_nodes___ABraExprs (SFT_parser___parser_nodes[913])
-#define ATTR_parser___parser_nodes___ABraExprs____n_obra(recv) ATTR(recv, (SFT_parser___parser_nodes[914] + 0))
-#define ATTR_parser___parser_nodes___ABraExprs____n_cbra(recv) ATTR(recv, (SFT_parser___parser_nodes[914] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___ABraExprs (SFT_parser___parser_nodes[915] + 0)
-#define CALL_parser___parser_nodes___ABraExprs___n_obra(recv) ((parser___parser_nodes___ABraExprs___n_obra_t)CALL((recv), (SFT_parser___parser_nodes[915] + 1)))
-#define CALL_parser___parser_nodes___ABraExprs___n_cbra(recv) ((parser___parser_nodes___ABraExprs___n_cbra_t)CALL((recv), (SFT_parser___parser_nodes[915] + 2)))
-#define ID_parser___parser_nodes___AAssignOp (SFT_parser___parser_nodes[916])
-#define COLOR_parser___parser_nodes___AAssignOp (SFT_parser___parser_nodes[917])
-#define INIT_TABLE_POS_parser___parser_nodes___AAssignOp (SFT_parser___parser_nodes[918] + 0)
-#define ID_parser___parser_nodes___APlusAssignOp (SFT_parser___parser_nodes[919])
-#define COLOR_parser___parser_nodes___APlusAssignOp (SFT_parser___parser_nodes[920])
-#define ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(recv) ATTR(recv, (SFT_parser___parser_nodes[921] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___APlusAssignOp (SFT_parser___parser_nodes[922] + 0)
-#define CALL_parser___parser_nodes___APlusAssignOp___n_pluseq(recv) ((parser___parser_nodes___APlusAssignOp___n_pluseq_t)CALL((recv), (SFT_parser___parser_nodes[922] + 1)))
-#define ID_parser___parser_nodes___AMinusAssignOp (SFT_parser___parser_nodes[923])
-#define COLOR_parser___parser_nodes___AMinusAssignOp (SFT_parser___parser_nodes[924])
-#define ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(recv) ATTR(recv, (SFT_parser___parser_nodes[925] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___AMinusAssignOp (SFT_parser___parser_nodes[926] + 0)
-#define CALL_parser___parser_nodes___AMinusAssignOp___n_minuseq(recv) ((parser___parser_nodes___AMinusAssignOp___n_minuseq_t)CALL((recv), (SFT_parser___parser_nodes[926] + 1)))
-#define ID_parser___parser_nodes___AClosureDef (SFT_parser___parser_nodes[927])
-#define COLOR_parser___parser_nodes___AClosureDef (SFT_parser___parser_nodes[928])
-#define ATTR_parser___parser_nodes___AClosureDef____n_bang(recv) ATTR(recv, (SFT_parser___parser_nodes[929] + 0))
-#define ATTR_parser___parser_nodes___AClosureDef____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[929] + 1))
-#define ATTR_parser___parser_nodes___AClosureDef____n_ids(recv) ATTR(recv, (SFT_parser___parser_nodes[929] + 2))
-#define ATTR_parser___parser_nodes___AClosureDef____n_kwdo(recv) ATTR(recv, (SFT_parser___parser_nodes[929] + 3))
-#define ATTR_parser___parser_nodes___AClosureDef____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[929] + 4))
-#define INIT_TABLE_POS_parser___parser_nodes___AClosureDef (SFT_parser___parser_nodes[930] + 0)
-#define CALL_parser___parser_nodes___AClosureDef___n_bang(recv) ((parser___parser_nodes___AClosureDef___n_bang_t)CALL((recv), (SFT_parser___parser_nodes[930] + 1)))
-#define CALL_parser___parser_nodes___AClosureDef___n_id(recv) ((parser___parser_nodes___AClosureDef___n_id_t)CALL((recv), (SFT_parser___parser_nodes[930] + 2)))
-#define CALL_parser___parser_nodes___AClosureDef___n_ids(recv) ((parser___parser_nodes___AClosureDef___n_ids_t)CALL((recv), (SFT_parser___parser_nodes[930] + 3)))
-#define CALL_parser___parser_nodes___AClosureDef___n_kwdo(recv) ((parser___parser_nodes___AClosureDef___n_kwdo_t)CALL((recv), (SFT_parser___parser_nodes[930] + 4)))
-#define CALL_parser___parser_nodes___AClosureDef___n_expr(recv) ((parser___parser_nodes___AClosureDef___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[930] + 5)))
-#define ID_parser___parser_nodes___AClosureId (SFT_parser___parser_nodes[931])
-#define COLOR_parser___parser_nodes___AClosureId (SFT_parser___parser_nodes[932])
-#define INIT_TABLE_POS_parser___parser_nodes___AClosureId (SFT_parser___parser_nodes[933] + 0)
-#define ID_parser___parser_nodes___ASimpleClosureId (SFT_parser___parser_nodes[934])
-#define COLOR_parser___parser_nodes___ASimpleClosureId (SFT_parser___parser_nodes[935])
-#define ATTR_parser___parser_nodes___ASimpleClosureId____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[936] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ASimpleClosureId (SFT_parser___parser_nodes[937] + 0)
-#define CALL_parser___parser_nodes___ASimpleClosureId___n_id(recv) ((parser___parser_nodes___ASimpleClosureId___n_id_t)CALL((recv), (SFT_parser___parser_nodes[937] + 1)))
-#define ID_parser___parser_nodes___ABreakClosureId (SFT_parser___parser_nodes[938])
-#define COLOR_parser___parser_nodes___ABreakClosureId (SFT_parser___parser_nodes[939])
-#define ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(recv) ATTR(recv, (SFT_parser___parser_nodes[940] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ABreakClosureId (SFT_parser___parser_nodes[941] + 0)
-#define CALL_parser___parser_nodes___ABreakClosureId___n_kwbreak(recv) ((parser___parser_nodes___ABreakClosureId___n_kwbreak_t)CALL((recv), (SFT_parser___parser_nodes[941] + 1)))
-#define ID_parser___parser_nodes___AModuleName (SFT_parser___parser_nodes[942])
-#define COLOR_parser___parser_nodes___AModuleName (SFT_parser___parser_nodes[943])
-#define ATTR_parser___parser_nodes___AModuleName____n_quad(recv) ATTR(recv, (SFT_parser___parser_nodes[944] + 0))
-#define ATTR_parser___parser_nodes___AModuleName____n_path(recv) ATTR(recv, (SFT_parser___parser_nodes[944] + 1))
-#define ATTR_parser___parser_nodes___AModuleName____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[944] + 2))
-#define INIT_TABLE_POS_parser___parser_nodes___AModuleName (SFT_parser___parser_nodes[945] + 0)
-#define CALL_parser___parser_nodes___AModuleName___n_quad(recv) ((parser___parser_nodes___AModuleName___n_quad_t)CALL((recv), (SFT_parser___parser_nodes[945] + 1)))
-#define CALL_parser___parser_nodes___AModuleName___n_path(recv) ((parser___parser_nodes___AModuleName___n_path_t)CALL((recv), (SFT_parser___parser_nodes[945] + 2)))
-#define CALL_parser___parser_nodes___AModuleName___n_id(recv) ((parser___parser_nodes___AModuleName___n_id_t)CALL((recv), (SFT_parser___parser_nodes[945] + 3)))
-#define ID_parser___parser_nodes___AInLanguage (SFT_parser___parser_nodes[946])
-#define COLOR_parser___parser_nodes___AInLanguage (SFT_parser___parser_nodes[947])
-#define ATTR_parser___parser_nodes___AInLanguage____n_kwin(recv) ATTR(recv, (SFT_parser___parser_nodes[948] + 0))
-#define ATTR_parser___parser_nodes___AInLanguage____n_string(recv) ATTR(recv, (SFT_parser___parser_nodes[948] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AInLanguage (SFT_parser___parser_nodes[949] + 0)
-#define CALL_parser___parser_nodes___AInLanguage___n_kwin(recv) ((parser___parser_nodes___AInLanguage___n_kwin_t)CALL((recv), (SFT_parser___parser_nodes[949] + 1)))
-#define CALL_parser___parser_nodes___AInLanguage___n_string(recv) ((parser___parser_nodes___AInLanguage___n_string_t)CALL((recv), (SFT_parser___parser_nodes[949] + 2)))
-#define ID_parser___parser_nodes___AExternCodeBlock (SFT_parser___parser_nodes[950])
-#define COLOR_parser___parser_nodes___AExternCodeBlock (SFT_parser___parser_nodes[951])
-#define ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(recv) ATTR(recv, (SFT_parser___parser_nodes[952] + 0))
-#define ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(recv) ATTR(recv, (SFT_parser___parser_nodes[952] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___AExternCodeBlock (SFT_parser___parser_nodes[953] + 0)
-#define CALL_parser___parser_nodes___AExternCodeBlock___n_in_language(recv) ((parser___parser_nodes___AExternCodeBlock___n_in_language_t)CALL((recv), (SFT_parser___parser_nodes[953] + 1)))
-#define CALL_parser___parser_nodes___AExternCodeBlock___n_extern_code_segment(recv) ((parser___parser_nodes___AExternCodeBlock___n_extern_code_segment_t)CALL((recv), (SFT_parser___parser_nodes[953] + 2)))
-#define ID_parser___parser_nodes___AQualified (SFT_parser___parser_nodes[954])
-#define COLOR_parser___parser_nodes___AQualified (SFT_parser___parser_nodes[955])
-#define ATTR_parser___parser_nodes___AQualified____n_quad(recv) ATTR(recv, (SFT_parser___parser_nodes[956] + 0))
-#define ATTR_parser___parser_nodes___AQualified____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[956] + 1))
-#define ATTR_parser___parser_nodes___AQualified____n_classid(recv) ATTR(recv, (SFT_parser___parser_nodes[956] + 2))
-#define INIT_TABLE_POS_parser___parser_nodes___AQualified (SFT_parser___parser_nodes[957] + 0)
-#define CALL_parser___parser_nodes___AQualified___n_quad(recv) ((parser___parser_nodes___AQualified___n_quad_t)CALL((recv), (SFT_parser___parser_nodes[957] + 1)))
-#define CALL_parser___parser_nodes___AQualified___n_id(recv) ((parser___parser_nodes___AQualified___n_id_t)CALL((recv), (SFT_parser___parser_nodes[957] + 2)))
-#define CALL_parser___parser_nodes___AQualified___n_classid(recv) ((parser___parser_nodes___AQualified___n_classid_t)CALL((recv), (SFT_parser___parser_nodes[957] + 3)))
-#define ID_parser___parser_nodes___ADoc (SFT_parser___parser_nodes[958])
-#define COLOR_parser___parser_nodes___ADoc (SFT_parser___parser_nodes[959])
-#define ATTR_parser___parser_nodes___ADoc____n_comment(recv) ATTR(recv, (SFT_parser___parser_nodes[960] + 0))
-#define INIT_TABLE_POS_parser___parser_nodes___ADoc (SFT_parser___parser_nodes[961] + 0)
-#define CALL_parser___parser_nodes___ADoc___n_comment(recv) ((parser___parser_nodes___ADoc___n_comment_t)CALL((recv), (SFT_parser___parser_nodes[961] + 1)))
-#define ID_parser___parser_nodes___Start (SFT_parser___parser_nodes[962])
-#define COLOR_parser___parser_nodes___Start (SFT_parser___parser_nodes[963])
-#define ATTR_parser___parser_nodes___Start____n_base(recv) ATTR(recv, (SFT_parser___parser_nodes[964] + 0))
-#define ATTR_parser___parser_nodes___Start____n_eof(recv) ATTR(recv, (SFT_parser___parser_nodes[964] + 1))
-#define INIT_TABLE_POS_parser___parser_nodes___Start (SFT_parser___parser_nodes[965] + 0)
-#define CALL_parser___parser_nodes___Start___n_base(recv) ((parser___parser_nodes___Start___n_base_t)CALL((recv), (SFT_parser___parser_nodes[965] + 1)))
-#define CALL_parser___parser_nodes___Start___n_eof(recv) ((parser___parser_nodes___Start___n_eof_t)CALL((recv), (SFT_parser___parser_nodes[965] + 2)))
-#define CALL_parser___parser_nodes___Start___init(recv) ((parser___parser_nodes___Start___init_t)CALL((recv), (SFT_parser___parser_nodes[965] + 3)))
+#define ATTR_parser___parser_nodes___Prod____n_annotations(recv) ATTR(recv, (SFT_parser___parser_nodes[9] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___Prod (SFT_parser___parser_nodes[10] + 0)
+#define CALL_parser___parser_nodes___Prod___location__eq(recv) ((parser___parser_nodes___Prod___location__eq_t)CALL((recv), (SFT_parser___parser_nodes[10] + 1)))
+#define CALL_parser___parser_nodes___Prod___n_annotations(recv) ((parser___parser_nodes___Prod___n_annotations_t)CALL((recv), (SFT_parser___parser_nodes[10] + 2)))
+#define ID_parser___parser_nodes___TEol (SFT_parser___parser_nodes[11])
+#define COLOR_parser___parser_nodes___TEol (SFT_parser___parser_nodes[12])
+#define INIT_TABLE_POS_parser___parser_nodes___TEol (SFT_parser___parser_nodes[13] + 0)
+#define ID_parser___parser_nodes___TComment (SFT_parser___parser_nodes[14])
+#define COLOR_parser___parser_nodes___TComment (SFT_parser___parser_nodes[15])
+#define INIT_TABLE_POS_parser___parser_nodes___TComment (SFT_parser___parser_nodes[16] + 0)
+#define ID_parser___parser_nodes___TokenKeyword (SFT_parser___parser_nodes[17])
+#define COLOR_parser___parser_nodes___TokenKeyword (SFT_parser___parser_nodes[18])
+#define INIT_TABLE_POS_parser___parser_nodes___TokenKeyword (SFT_parser___parser_nodes[19] + 0)
+#define ID_parser___parser_nodes___TKwmodule (SFT_parser___parser_nodes[20])
+#define COLOR_parser___parser_nodes___TKwmodule (SFT_parser___parser_nodes[21])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwmodule (SFT_parser___parser_nodes[22] + 0)
+#define ID_parser___parser_nodes___TKwimport (SFT_parser___parser_nodes[23])
+#define COLOR_parser___parser_nodes___TKwimport (SFT_parser___parser_nodes[24])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwimport (SFT_parser___parser_nodes[25] + 0)
+#define ID_parser___parser_nodes___TKwclass (SFT_parser___parser_nodes[26])
+#define COLOR_parser___parser_nodes___TKwclass (SFT_parser___parser_nodes[27])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwclass (SFT_parser___parser_nodes[28] + 0)
+#define ID_parser___parser_nodes___TKwabstract (SFT_parser___parser_nodes[29])
+#define COLOR_parser___parser_nodes___TKwabstract (SFT_parser___parser_nodes[30])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwabstract (SFT_parser___parser_nodes[31] + 0)
+#define ID_parser___parser_nodes___TKwinterface (SFT_parser___parser_nodes[32])
+#define COLOR_parser___parser_nodes___TKwinterface (SFT_parser___parser_nodes[33])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwinterface (SFT_parser___parser_nodes[34] + 0)
+#define ID_parser___parser_nodes___TKwenum (SFT_parser___parser_nodes[35])
+#define COLOR_parser___parser_nodes___TKwenum (SFT_parser___parser_nodes[36])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwenum (SFT_parser___parser_nodes[37] + 0)
+#define ID_parser___parser_nodes___TKwend (SFT_parser___parser_nodes[38])
+#define COLOR_parser___parser_nodes___TKwend (SFT_parser___parser_nodes[39])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwend (SFT_parser___parser_nodes[40] + 0)
+#define ID_parser___parser_nodes___TKwmeth (SFT_parser___parser_nodes[41])
+#define COLOR_parser___parser_nodes___TKwmeth (SFT_parser___parser_nodes[42])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwmeth (SFT_parser___parser_nodes[43] + 0)
+#define ID_parser___parser_nodes___TKwtype (SFT_parser___parser_nodes[44])
+#define COLOR_parser___parser_nodes___TKwtype (SFT_parser___parser_nodes[45])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwtype (SFT_parser___parser_nodes[46] + 0)
+#define ID_parser___parser_nodes___TKwinit (SFT_parser___parser_nodes[47])
+#define COLOR_parser___parser_nodes___TKwinit (SFT_parser___parser_nodes[48])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwinit (SFT_parser___parser_nodes[49] + 0)
+#define ID_parser___parser_nodes___TKwredef (SFT_parser___parser_nodes[50])
+#define COLOR_parser___parser_nodes___TKwredef (SFT_parser___parser_nodes[51])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwredef (SFT_parser___parser_nodes[52] + 0)
+#define ID_parser___parser_nodes___TKwis (SFT_parser___parser_nodes[53])
+#define COLOR_parser___parser_nodes___TKwis (SFT_parser___parser_nodes[54])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwis (SFT_parser___parser_nodes[55] + 0)
+#define ID_parser___parser_nodes___TKwdo (SFT_parser___parser_nodes[56])
+#define COLOR_parser___parser_nodes___TKwdo (SFT_parser___parser_nodes[57])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwdo (SFT_parser___parser_nodes[58] + 0)
+#define ID_parser___parser_nodes___TKwreadable (SFT_parser___parser_nodes[59])
+#define COLOR_parser___parser_nodes___TKwreadable (SFT_parser___parser_nodes[60])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwreadable (SFT_parser___parser_nodes[61] + 0)
+#define ID_parser___parser_nodes___TKwwritable (SFT_parser___parser_nodes[62])
+#define COLOR_parser___parser_nodes___TKwwritable (SFT_parser___parser_nodes[63])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwwritable (SFT_parser___parser_nodes[64] + 0)
+#define ID_parser___parser_nodes___TKwvar (SFT_parser___parser_nodes[65])
+#define COLOR_parser___parser_nodes___TKwvar (SFT_parser___parser_nodes[66])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwvar (SFT_parser___parser_nodes[67] + 0)
+#define ID_parser___parser_nodes___TKwintern (SFT_parser___parser_nodes[68])
+#define COLOR_parser___parser_nodes___TKwintern (SFT_parser___parser_nodes[69])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwintern (SFT_parser___parser_nodes[70] + 0)
+#define ID_parser___parser_nodes___TKwextern (SFT_parser___parser_nodes[71])
+#define COLOR_parser___parser_nodes___TKwextern (SFT_parser___parser_nodes[72])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwextern (SFT_parser___parser_nodes[73] + 0)
+#define ID_parser___parser_nodes___TKwprotected (SFT_parser___parser_nodes[74])
+#define COLOR_parser___parser_nodes___TKwprotected (SFT_parser___parser_nodes[75])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwprotected (SFT_parser___parser_nodes[76] + 0)
+#define ID_parser___parser_nodes___TKwprivate (SFT_parser___parser_nodes[77])
+#define COLOR_parser___parser_nodes___TKwprivate (SFT_parser___parser_nodes[78])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwprivate (SFT_parser___parser_nodes[79] + 0)
+#define ID_parser___parser_nodes___TKwintrude (SFT_parser___parser_nodes[80])
+#define COLOR_parser___parser_nodes___TKwintrude (SFT_parser___parser_nodes[81])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwintrude (SFT_parser___parser_nodes[82] + 0)
+#define ID_parser___parser_nodes___TKwif (SFT_parser___parser_nodes[83])
+#define COLOR_parser___parser_nodes___TKwif (SFT_parser___parser_nodes[84])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwif (SFT_parser___parser_nodes[85] + 0)
+#define ID_parser___parser_nodes___TKwthen (SFT_parser___parser_nodes[86])
+#define COLOR_parser___parser_nodes___TKwthen (SFT_parser___parser_nodes[87])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwthen (SFT_parser___parser_nodes[88] + 0)
+#define ID_parser___parser_nodes___TKwelse (SFT_parser___parser_nodes[89])
+#define COLOR_parser___parser_nodes___TKwelse (SFT_parser___parser_nodes[90])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwelse (SFT_parser___parser_nodes[91] + 0)
+#define ID_parser___parser_nodes___TKwwhile (SFT_parser___parser_nodes[92])
+#define COLOR_parser___parser_nodes___TKwwhile (SFT_parser___parser_nodes[93])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwwhile (SFT_parser___parser_nodes[94] + 0)
+#define ID_parser___parser_nodes___TKwloop (SFT_parser___parser_nodes[95])
+#define COLOR_parser___parser_nodes___TKwloop (SFT_parser___parser_nodes[96])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwloop (SFT_parser___parser_nodes[97] + 0)
+#define ID_parser___parser_nodes___TKwfor (SFT_parser___parser_nodes[98])
+#define COLOR_parser___parser_nodes___TKwfor (SFT_parser___parser_nodes[99])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwfor (SFT_parser___parser_nodes[100] + 0)
+#define ID_parser___parser_nodes___TKwin (SFT_parser___parser_nodes[101])
+#define COLOR_parser___parser_nodes___TKwin (SFT_parser___parser_nodes[102])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwin (SFT_parser___parser_nodes[103] + 0)
+#define ID_parser___parser_nodes___TKwand (SFT_parser___parser_nodes[104])
+#define COLOR_parser___parser_nodes___TKwand (SFT_parser___parser_nodes[105])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwand (SFT_parser___parser_nodes[106] + 0)
+#define ID_parser___parser_nodes___TKwor (SFT_parser___parser_nodes[107])
+#define COLOR_parser___parser_nodes___TKwor (SFT_parser___parser_nodes[108])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwor (SFT_parser___parser_nodes[109] + 0)
+#define ID_parser___parser_nodes___TKwnot (SFT_parser___parser_nodes[110])
+#define COLOR_parser___parser_nodes___TKwnot (SFT_parser___parser_nodes[111])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwnot (SFT_parser___parser_nodes[112] + 0)
+#define ID_parser___parser_nodes___TKwreturn (SFT_parser___parser_nodes[113])
+#define COLOR_parser___parser_nodes___TKwreturn (SFT_parser___parser_nodes[114])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwreturn (SFT_parser___parser_nodes[115] + 0)
+#define ID_parser___parser_nodes___TKwcontinue (SFT_parser___parser_nodes[116])
+#define COLOR_parser___parser_nodes___TKwcontinue (SFT_parser___parser_nodes[117])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwcontinue (SFT_parser___parser_nodes[118] + 0)
+#define ID_parser___parser_nodes___TKwbreak (SFT_parser___parser_nodes[119])
+#define COLOR_parser___parser_nodes___TKwbreak (SFT_parser___parser_nodes[120])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwbreak (SFT_parser___parser_nodes[121] + 0)
+#define ID_parser___parser_nodes___TKwabort (SFT_parser___parser_nodes[122])
+#define COLOR_parser___parser_nodes___TKwabort (SFT_parser___parser_nodes[123])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwabort (SFT_parser___parser_nodes[124] + 0)
+#define ID_parser___parser_nodes___TKwassert (SFT_parser___parser_nodes[125])
+#define COLOR_parser___parser_nodes___TKwassert (SFT_parser___parser_nodes[126])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwassert (SFT_parser___parser_nodes[127] + 0)
+#define ID_parser___parser_nodes___TKwnew (SFT_parser___parser_nodes[128])
+#define COLOR_parser___parser_nodes___TKwnew (SFT_parser___parser_nodes[129])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwnew (SFT_parser___parser_nodes[130] + 0)
+#define ID_parser___parser_nodes___TKwisa (SFT_parser___parser_nodes[131])
+#define COLOR_parser___parser_nodes___TKwisa (SFT_parser___parser_nodes[132])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwisa (SFT_parser___parser_nodes[133] + 0)
+#define ID_parser___parser_nodes___TKwonce (SFT_parser___parser_nodes[134])
+#define COLOR_parser___parser_nodes___TKwonce (SFT_parser___parser_nodes[135])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwonce (SFT_parser___parser_nodes[136] + 0)
+#define ID_parser___parser_nodes___TKwsuper (SFT_parser___parser_nodes[137])
+#define COLOR_parser___parser_nodes___TKwsuper (SFT_parser___parser_nodes[138])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwsuper (SFT_parser___parser_nodes[139] + 0)
+#define ID_parser___parser_nodes___TKwself (SFT_parser___parser_nodes[140])
+#define COLOR_parser___parser_nodes___TKwself (SFT_parser___parser_nodes[141])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwself (SFT_parser___parser_nodes[142] + 0)
+#define ID_parser___parser_nodes___TKwtrue (SFT_parser___parser_nodes[143])
+#define COLOR_parser___parser_nodes___TKwtrue (SFT_parser___parser_nodes[144])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwtrue (SFT_parser___parser_nodes[145] + 0)
+#define ID_parser___parser_nodes___TKwfalse (SFT_parser___parser_nodes[146])
+#define COLOR_parser___parser_nodes___TKwfalse (SFT_parser___parser_nodes[147])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwfalse (SFT_parser___parser_nodes[148] + 0)
+#define ID_parser___parser_nodes___TKwnull (SFT_parser___parser_nodes[149])
+#define COLOR_parser___parser_nodes___TKwnull (SFT_parser___parser_nodes[150])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwnull (SFT_parser___parser_nodes[151] + 0)
+#define ID_parser___parser_nodes___TKwas (SFT_parser___parser_nodes[152])
+#define COLOR_parser___parser_nodes___TKwas (SFT_parser___parser_nodes[153])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwas (SFT_parser___parser_nodes[154] + 0)
+#define ID_parser___parser_nodes___TKwnullable (SFT_parser___parser_nodes[155])
+#define COLOR_parser___parser_nodes___TKwnullable (SFT_parser___parser_nodes[156])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwnullable (SFT_parser___parser_nodes[157] + 0)
+#define ID_parser___parser_nodes___TKwisset (SFT_parser___parser_nodes[158])
+#define COLOR_parser___parser_nodes___TKwisset (SFT_parser___parser_nodes[159])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwisset (SFT_parser___parser_nodes[160] + 0)
+#define ID_parser___parser_nodes___TKwlabel (SFT_parser___parser_nodes[161])
+#define COLOR_parser___parser_nodes___TKwlabel (SFT_parser___parser_nodes[162])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwlabel (SFT_parser___parser_nodes[163] + 0)
+#define ID_parser___parser_nodes___TKwdebug (SFT_parser___parser_nodes[164])
+#define COLOR_parser___parser_nodes___TKwdebug (SFT_parser___parser_nodes[165])
+#define INIT_TABLE_POS_parser___parser_nodes___TKwdebug (SFT_parser___parser_nodes[166] + 0)
+#define ID_parser___parser_nodes___TOpar (SFT_parser___parser_nodes[167])
+#define COLOR_parser___parser_nodes___TOpar (SFT_parser___parser_nodes[168])
+#define INIT_TABLE_POS_parser___parser_nodes___TOpar (SFT_parser___parser_nodes[169] + 0)
+#define ID_parser___parser_nodes___TCpar (SFT_parser___parser_nodes[170])
+#define COLOR_parser___parser_nodes___TCpar (SFT_parser___parser_nodes[171])
+#define INIT_TABLE_POS_parser___parser_nodes___TCpar (SFT_parser___parser_nodes[172] + 0)
+#define ID_parser___parser_nodes___TObra (SFT_parser___parser_nodes[173])
+#define COLOR_parser___parser_nodes___TObra (SFT_parser___parser_nodes[174])
+#define INIT_TABLE_POS_parser___parser_nodes___TObra (SFT_parser___parser_nodes[175] + 0)
+#define ID_parser___parser_nodes___TCbra (SFT_parser___parser_nodes[176])
+#define COLOR_parser___parser_nodes___TCbra (SFT_parser___parser_nodes[177])
+#define INIT_TABLE_POS_parser___parser_nodes___TCbra (SFT_parser___parser_nodes[178] + 0)
+#define ID_parser___parser_nodes___TComma (SFT_parser___parser_nodes[179])
+#define COLOR_parser___parser_nodes___TComma (SFT_parser___parser_nodes[180])
+#define INIT_TABLE_POS_parser___parser_nodes___TComma (SFT_parser___parser_nodes[181] + 0)
+#define ID_parser___parser_nodes___TColumn (SFT_parser___parser_nodes[182])
+#define COLOR_parser___parser_nodes___TColumn (SFT_parser___parser_nodes[183])
+#define INIT_TABLE_POS_parser___parser_nodes___TColumn (SFT_parser___parser_nodes[184] + 0)
+#define ID_parser___parser_nodes___TQuad (SFT_parser___parser_nodes[185])
+#define COLOR_parser___parser_nodes___TQuad (SFT_parser___parser_nodes[186])
+#define INIT_TABLE_POS_parser___parser_nodes___TQuad (SFT_parser___parser_nodes[187] + 0)
+#define ID_parser___parser_nodes___TAssign (SFT_parser___parser_nodes[188])
+#define COLOR_parser___parser_nodes___TAssign (SFT_parser___parser_nodes[189])
+#define INIT_TABLE_POS_parser___parser_nodes___TAssign (SFT_parser___parser_nodes[190] + 0)
+#define ID_parser___parser_nodes___TokenOperator (SFT_parser___parser_nodes[191])
+#define COLOR_parser___parser_nodes___TokenOperator (SFT_parser___parser_nodes[192])
+#define INIT_TABLE_POS_parser___parser_nodes___TokenOperator (SFT_parser___parser_nodes[193] + 0)
+#define ID_parser___parser_nodes___TPluseq (SFT_parser___parser_nodes[194])
+#define COLOR_parser___parser_nodes___TPluseq (SFT_parser___parser_nodes[195])
+#define INIT_TABLE_POS_parser___parser_nodes___TPluseq (SFT_parser___parser_nodes[196] + 0)
+#define ID_parser___parser_nodes___TMinuseq (SFT_parser___parser_nodes[197])
+#define COLOR_parser___parser_nodes___TMinuseq (SFT_parser___parser_nodes[198])
+#define INIT_TABLE_POS_parser___parser_nodes___TMinuseq (SFT_parser___parser_nodes[199] + 0)
+#define ID_parser___parser_nodes___TDotdotdot (SFT_parser___parser_nodes[200])
+#define COLOR_parser___parser_nodes___TDotdotdot (SFT_parser___parser_nodes[201])
+#define INIT_TABLE_POS_parser___parser_nodes___TDotdotdot (SFT_parser___parser_nodes[202] + 0)
+#define ID_parser___parser_nodes___TDotdot (SFT_parser___parser_nodes[203])
+#define COLOR_parser___parser_nodes___TDotdot (SFT_parser___parser_nodes[204])
+#define INIT_TABLE_POS_parser___parser_nodes___TDotdot (SFT_parser___parser_nodes[205] + 0)
+#define ID_parser___parser_nodes___TDot (SFT_parser___parser_nodes[206])
+#define COLOR_parser___parser_nodes___TDot (SFT_parser___parser_nodes[207])
+#define INIT_TABLE_POS_parser___parser_nodes___TDot (SFT_parser___parser_nodes[208] + 0)
+#define ID_parser___parser_nodes___TPlus (SFT_parser___parser_nodes[209])
+#define COLOR_parser___parser_nodes___TPlus (SFT_parser___parser_nodes[210])
+#define INIT_TABLE_POS_parser___parser_nodes___TPlus (SFT_parser___parser_nodes[211] + 0)
+#define ID_parser___parser_nodes___TMinus (SFT_parser___parser_nodes[212])
+#define COLOR_parser___parser_nodes___TMinus (SFT_parser___parser_nodes[213])
+#define INIT_TABLE_POS_parser___parser_nodes___TMinus (SFT_parser___parser_nodes[214] + 0)
+#define ID_parser___parser_nodes___TStar (SFT_parser___parser_nodes[215])
+#define COLOR_parser___parser_nodes___TStar (SFT_parser___parser_nodes[216])
+#define INIT_TABLE_POS_parser___parser_nodes___TStar (SFT_parser___parser_nodes[217] + 0)
+#define ID_parser___parser_nodes___TSlash (SFT_parser___parser_nodes[218])
+#define COLOR_parser___parser_nodes___TSlash (SFT_parser___parser_nodes[219])
+#define INIT_TABLE_POS_parser___parser_nodes___TSlash (SFT_parser___parser_nodes[220] + 0)
+#define ID_parser___parser_nodes___TPercent (SFT_parser___parser_nodes[221])
+#define COLOR_parser___parser_nodes___TPercent (SFT_parser___parser_nodes[222])
+#define INIT_TABLE_POS_parser___parser_nodes___TPercent (SFT_parser___parser_nodes[223] + 0)
+#define ID_parser___parser_nodes___TEq (SFT_parser___parser_nodes[224])
+#define COLOR_parser___parser_nodes___TEq (SFT_parser___parser_nodes[225])
+#define INIT_TABLE_POS_parser___parser_nodes___TEq (SFT_parser___parser_nodes[226] + 0)
+#define ID_parser___parser_nodes___TNe (SFT_parser___parser_nodes[227])
+#define COLOR_parser___parser_nodes___TNe (SFT_parser___parser_nodes[228])
+#define INIT_TABLE_POS_parser___parser_nodes___TNe (SFT_parser___parser_nodes[229] + 0)
+#define ID_parser___parser_nodes___TLt (SFT_parser___parser_nodes[230])
+#define COLOR_parser___parser_nodes___TLt (SFT_parser___parser_nodes[231])
+#define INIT_TABLE_POS_parser___parser_nodes___TLt (SFT_parser___parser_nodes[232] + 0)
+#define ID_parser___parser_nodes___TLe (SFT_parser___parser_nodes[233])
+#define COLOR_parser___parser_nodes___TLe (SFT_parser___parser_nodes[234])
+#define INIT_TABLE_POS_parser___parser_nodes___TLe (SFT_parser___parser_nodes[235] + 0)
+#define ID_parser___parser_nodes___TLl (SFT_parser___parser_nodes[236])
+#define COLOR_parser___parser_nodes___TLl (SFT_parser___parser_nodes[237])
+#define INIT_TABLE_POS_parser___parser_nodes___TLl (SFT_parser___parser_nodes[238] + 0)
+#define ID_parser___parser_nodes___TGt (SFT_parser___parser_nodes[239])
+#define COLOR_parser___parser_nodes___TGt (SFT_parser___parser_nodes[240])
+#define INIT_TABLE_POS_parser___parser_nodes___TGt (SFT_parser___parser_nodes[241] + 0)
+#define ID_parser___parser_nodes___TGe (SFT_parser___parser_nodes[242])
+#define COLOR_parser___parser_nodes___TGe (SFT_parser___parser_nodes[243])
+#define INIT_TABLE_POS_parser___parser_nodes___TGe (SFT_parser___parser_nodes[244] + 0)
+#define ID_parser___parser_nodes___TGg (SFT_parser___parser_nodes[245])
+#define COLOR_parser___parser_nodes___TGg (SFT_parser___parser_nodes[246])
+#define INIT_TABLE_POS_parser___parser_nodes___TGg (SFT_parser___parser_nodes[247] + 0)
+#define ID_parser___parser_nodes___TStarship (SFT_parser___parser_nodes[248])
+#define COLOR_parser___parser_nodes___TStarship (SFT_parser___parser_nodes[249])
+#define INIT_TABLE_POS_parser___parser_nodes___TStarship (SFT_parser___parser_nodes[250] + 0)
+#define ID_parser___parser_nodes___TBang (SFT_parser___parser_nodes[251])
+#define COLOR_parser___parser_nodes___TBang (SFT_parser___parser_nodes[252])
+#define INIT_TABLE_POS_parser___parser_nodes___TBang (SFT_parser___parser_nodes[253] + 0)
+#define ID_parser___parser_nodes___TAt (SFT_parser___parser_nodes[254])
+#define COLOR_parser___parser_nodes___TAt (SFT_parser___parser_nodes[255])
+#define INIT_TABLE_POS_parser___parser_nodes___TAt (SFT_parser___parser_nodes[256] + 0)
+#define ID_parser___parser_nodes___TClassid (SFT_parser___parser_nodes[257])
+#define COLOR_parser___parser_nodes___TClassid (SFT_parser___parser_nodes[258])
+#define INIT_TABLE_POS_parser___parser_nodes___TClassid (SFT_parser___parser_nodes[259] + 0)
+#define ID_parser___parser_nodes___TId (SFT_parser___parser_nodes[260])
+#define COLOR_parser___parser_nodes___TId (SFT_parser___parser_nodes[261])
+#define INIT_TABLE_POS_parser___parser_nodes___TId (SFT_parser___parser_nodes[262] + 0)
+#define ID_parser___parser_nodes___TAttrid (SFT_parser___parser_nodes[263])
+#define COLOR_parser___parser_nodes___TAttrid (SFT_parser___parser_nodes[264])
+#define INIT_TABLE_POS_parser___parser_nodes___TAttrid (SFT_parser___parser_nodes[265] + 0)
+#define ID_parser___parser_nodes___TokenLiteral (SFT_parser___parser_nodes[266])
+#define COLOR_parser___parser_nodes___TokenLiteral (SFT_parser___parser_nodes[267])
+#define INIT_TABLE_POS_parser___parser_nodes___TokenLiteral (SFT_parser___parser_nodes[268] + 0)
+#define ID_parser___parser_nodes___TNumber (SFT_parser___parser_nodes[269])
+#define COLOR_parser___parser_nodes___TNumber (SFT_parser___parser_nodes[270])
+#define INIT_TABLE_POS_parser___parser_nodes___TNumber (SFT_parser___parser_nodes[271] + 0)
+#define ID_parser___parser_nodes___TFloat (SFT_parser___parser_nodes[272])
+#define COLOR_parser___parser_nodes___TFloat (SFT_parser___parser_nodes[273])
+#define INIT_TABLE_POS_parser___parser_nodes___TFloat (SFT_parser___parser_nodes[274] + 0)
+#define ID_parser___parser_nodes___TChar (SFT_parser___parser_nodes[275])
+#define COLOR_parser___parser_nodes___TChar (SFT_parser___parser_nodes[276])
+#define INIT_TABLE_POS_parser___parser_nodes___TChar (SFT_parser___parser_nodes[277] + 0)
+#define ID_parser___parser_nodes___TString (SFT_parser___parser_nodes[278])
+#define COLOR_parser___parser_nodes___TString (SFT_parser___parser_nodes[279])
+#define INIT_TABLE_POS_parser___parser_nodes___TString (SFT_parser___parser_nodes[280] + 0)
+#define ID_parser___parser_nodes___TStartString (SFT_parser___parser_nodes[281])
+#define COLOR_parser___parser_nodes___TStartString (SFT_parser___parser_nodes[282])
+#define INIT_TABLE_POS_parser___parser_nodes___TStartString (SFT_parser___parser_nodes[283] + 0)
+#define ID_parser___parser_nodes___TMidString (SFT_parser___parser_nodes[284])
+#define COLOR_parser___parser_nodes___TMidString (SFT_parser___parser_nodes[285])
+#define INIT_TABLE_POS_parser___parser_nodes___TMidString (SFT_parser___parser_nodes[286] + 0)
+#define ID_parser___parser_nodes___TEndString (SFT_parser___parser_nodes[287])
+#define COLOR_parser___parser_nodes___TEndString (SFT_parser___parser_nodes[288])
+#define INIT_TABLE_POS_parser___parser_nodes___TEndString (SFT_parser___parser_nodes[289] + 0)
+#define ID_parser___parser_nodes___TBadString (SFT_parser___parser_nodes[290])
+#define COLOR_parser___parser_nodes___TBadString (SFT_parser___parser_nodes[291])
+#define INIT_TABLE_POS_parser___parser_nodes___TBadString (SFT_parser___parser_nodes[292] + 0)
+#define ID_parser___parser_nodes___TBadChar (SFT_parser___parser_nodes[293])
+#define COLOR_parser___parser_nodes___TBadChar (SFT_parser___parser_nodes[294])
+#define INIT_TABLE_POS_parser___parser_nodes___TBadChar (SFT_parser___parser_nodes[295] + 0)
+#define ID_parser___parser_nodes___TExternCodeSegment (SFT_parser___parser_nodes[296])
+#define COLOR_parser___parser_nodes___TExternCodeSegment (SFT_parser___parser_nodes[297])
+#define INIT_TABLE_POS_parser___parser_nodes___TExternCodeSegment (SFT_parser___parser_nodes[298] + 0)
+#define ID_parser___parser_nodes___EOF (SFT_parser___parser_nodes[299])
+#define COLOR_parser___parser_nodes___EOF (SFT_parser___parser_nodes[300])
+#define INIT_TABLE_POS_parser___parser_nodes___EOF (SFT_parser___parser_nodes[301] + 0)
+#define ID_parser___parser_nodes___AError (SFT_parser___parser_nodes[302])
+#define COLOR_parser___parser_nodes___AError (SFT_parser___parser_nodes[303])
+#define INIT_TABLE_POS_parser___parser_nodes___AError (SFT_parser___parser_nodes[304] + 0)
+#define ID_parser___parser_nodes___ALexerError (SFT_parser___parser_nodes[305])
+#define COLOR_parser___parser_nodes___ALexerError (SFT_parser___parser_nodes[306])
+#define INIT_TABLE_POS_parser___parser_nodes___ALexerError (SFT_parser___parser_nodes[307] + 0)
+#define ID_parser___parser_nodes___AParserError (SFT_parser___parser_nodes[308])
+#define COLOR_parser___parser_nodes___AParserError (SFT_parser___parser_nodes[309])
+#define INIT_TABLE_POS_parser___parser_nodes___AParserError (SFT_parser___parser_nodes[310] + 0)
+#define ID_parser___parser_nodes___AModule (SFT_parser___parser_nodes[311])
+#define COLOR_parser___parser_nodes___AModule (SFT_parser___parser_nodes[312])
+#define ATTR_parser___parser_nodes___AModule____n_moduledecl(recv) ATTR(recv, (SFT_parser___parser_nodes[313] + 0))
+#define ATTR_parser___parser_nodes___AModule____n_imports(recv) ATTR(recv, (SFT_parser___parser_nodes[313] + 1))
+#define ATTR_parser___parser_nodes___AModule____n_extern_code_blocks(recv) ATTR(recv, (SFT_parser___parser_nodes[313] + 2))
+#define ATTR_parser___parser_nodes___AModule____n_classdefs(recv) ATTR(recv, (SFT_parser___parser_nodes[313] + 3))
+#define INIT_TABLE_POS_parser___parser_nodes___AModule (SFT_parser___parser_nodes[314] + 0)
+#define CALL_parser___parser_nodes___AModule___n_moduledecl(recv) ((parser___parser_nodes___AModule___n_moduledecl_t)CALL((recv), (SFT_parser___parser_nodes[314] + 1)))
+#define CALL_parser___parser_nodes___AModule___n_imports(recv) ((parser___parser_nodes___AModule___n_imports_t)CALL((recv), (SFT_parser___parser_nodes[314] + 2)))
+#define CALL_parser___parser_nodes___AModule___n_extern_code_blocks(recv) ((parser___parser_nodes___AModule___n_extern_code_blocks_t)CALL((recv), (SFT_parser___parser_nodes[314] + 3)))
+#define CALL_parser___parser_nodes___AModule___n_classdefs(recv) ((parser___parser_nodes___AModule___n_classdefs_t)CALL((recv), (SFT_parser___parser_nodes[314] + 4)))
+#define ID_parser___parser_nodes___AModuledecl (SFT_parser___parser_nodes[315])
+#define COLOR_parser___parser_nodes___AModuledecl (SFT_parser___parser_nodes[316])
+#define ATTR_parser___parser_nodes___AModuledecl____n_doc(recv) ATTR(recv, (SFT_parser___parser_nodes[317] + 0))
+#define ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(recv) ATTR(recv, (SFT_parser___parser_nodes[317] + 1))
+#define ATTR_parser___parser_nodes___AModuledecl____n_name(recv) ATTR(recv, (SFT_parser___parser_nodes[317] + 2))
+#define INIT_TABLE_POS_parser___parser_nodes___AModuledecl (SFT_parser___parser_nodes[318] + 0)
+#define CALL_parser___parser_nodes___AModuledecl___n_doc(recv) ((parser___parser_nodes___AModuledecl___n_doc_t)CALL((recv), (SFT_parser___parser_nodes[318] + 1)))
+#define CALL_parser___parser_nodes___AModuledecl___n_kwmodule(recv) ((parser___parser_nodes___AModuledecl___n_kwmodule_t)CALL((recv), (SFT_parser___parser_nodes[318] + 2)))
+#define CALL_parser___parser_nodes___AModuledecl___n_name(recv) ((parser___parser_nodes___AModuledecl___n_name_t)CALL((recv), (SFT_parser___parser_nodes[318] + 3)))
+#define ID_parser___parser_nodes___AImport (SFT_parser___parser_nodes[319])
+#define COLOR_parser___parser_nodes___AImport (SFT_parser___parser_nodes[320])
+#define INIT_TABLE_POS_parser___parser_nodes___AImport (SFT_parser___parser_nodes[321] + 0)
+#define ID_parser___parser_nodes___AStdImport (SFT_parser___parser_nodes[322])
+#define COLOR_parser___parser_nodes___AStdImport (SFT_parser___parser_nodes[323])
+#define ATTR_parser___parser_nodes___AStdImport____n_visibility(recv) ATTR(recv, (SFT_parser___parser_nodes[324] + 0))
+#define ATTR_parser___parser_nodes___AStdImport____n_kwimport(recv) ATTR(recv, (SFT_parser___parser_nodes[324] + 1))
+#define ATTR_parser___parser_nodes___AStdImport____n_name(recv) ATTR(recv, (SFT_parser___parser_nodes[324] + 2))
+#define INIT_TABLE_POS_parser___parser_nodes___AStdImport (SFT_parser___parser_nodes[325] + 0)
+#define CALL_parser___parser_nodes___AStdImport___n_visibility(recv) ((parser___parser_nodes___AStdImport___n_visibility_t)CALL((recv), (SFT_parser___parser_nodes[325] + 1)))
+#define CALL_parser___parser_nodes___AStdImport___n_kwimport(recv) ((parser___parser_nodes___AStdImport___n_kwimport_t)CALL((recv), (SFT_parser___parser_nodes[325] + 2)))
+#define CALL_parser___parser_nodes___AStdImport___n_name(recv) ((parser___parser_nodes___AStdImport___n_name_t)CALL((recv), (SFT_parser___parser_nodes[325] + 3)))
+#define ID_parser___parser_nodes___ANoImport (SFT_parser___parser_nodes[326])
+#define COLOR_parser___parser_nodes___ANoImport (SFT_parser___parser_nodes[327])
+#define ATTR_parser___parser_nodes___ANoImport____n_visibility(recv) ATTR(recv, (SFT_parser___parser_nodes[328] + 0))
+#define ATTR_parser___parser_nodes___ANoImport____n_kwimport(recv) ATTR(recv, (SFT_parser___parser_nodes[328] + 1))
+#define ATTR_parser___parser_nodes___ANoImport____n_kwend(recv) ATTR(recv, (SFT_parser___parser_nodes[328] + 2))
+#define INIT_TABLE_POS_parser___parser_nodes___ANoImport (SFT_parser___parser_nodes[329] + 0)
+#define CALL_parser___parser_nodes___ANoImport___n_visibility(recv) ((parser___parser_nodes___ANoImport___n_visibility_t)CALL((recv), (SFT_parser___parser_nodes[329] + 1)))
+#define CALL_parser___parser_nodes___ANoImport___n_kwimport(recv) ((parser___parser_nodes___ANoImport___n_kwimport_t)CALL((recv), (SFT_parser___parser_nodes[329] + 2)))
+#define CALL_parser___parser_nodes___ANoImport___n_kwend(recv) ((parser___parser_nodes___ANoImport___n_kwend_t)CALL((recv), (SFT_parser___parser_nodes[329] + 3)))
+#define ID_parser___parser_nodes___AVisibility (SFT_parser___parser_nodes[330])
+#define COLOR_parser___parser_nodes___AVisibility (SFT_parser___parser_nodes[331])
+#define INIT_TABLE_POS_parser___parser_nodes___AVisibility (SFT_parser___parser_nodes[332] + 0)
+#define ID_parser___parser_nodes___APublicVisibility (SFT_parser___parser_nodes[333])
+#define COLOR_parser___parser_nodes___APublicVisibility (SFT_parser___parser_nodes[334])
+#define INIT_TABLE_POS_parser___parser_nodes___APublicVisibility (SFT_parser___parser_nodes[335] + 0)
+#define ID_parser___parser_nodes___APrivateVisibility (SFT_parser___parser_nodes[336])
+#define COLOR_parser___parser_nodes___APrivateVisibility (SFT_parser___parser_nodes[337])
+#define ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(recv) ATTR(recv, (SFT_parser___parser_nodes[338] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___APrivateVisibility (SFT_parser___parser_nodes[339] + 0)
+#define CALL_parser___parser_nodes___APrivateVisibility___n_kwprivate(recv) ((parser___parser_nodes___APrivateVisibility___n_kwprivate_t)CALL((recv), (SFT_parser___parser_nodes[339] + 1)))
+#define ID_parser___parser_nodes___AProtectedVisibility (SFT_parser___parser_nodes[340])
+#define COLOR_parser___parser_nodes___AProtectedVisibility (SFT_parser___parser_nodes[341])
+#define ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(recv) ATTR(recv, (SFT_parser___parser_nodes[342] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AProtectedVisibility (SFT_parser___parser_nodes[343] + 0)
+#define CALL_parser___parser_nodes___AProtectedVisibility___n_kwprotected(recv) ((parser___parser_nodes___AProtectedVisibility___n_kwprotected_t)CALL((recv), (SFT_parser___parser_nodes[343] + 1)))
+#define ID_parser___parser_nodes___AIntrudeVisibility (SFT_parser___parser_nodes[344])
+#define COLOR_parser___parser_nodes___AIntrudeVisibility (SFT_parser___parser_nodes[345])
+#define ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(recv) ATTR(recv, (SFT_parser___parser_nodes[346] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AIntrudeVisibility (SFT_parser___parser_nodes[347] + 0)
+#define CALL_parser___parser_nodes___AIntrudeVisibility___n_kwintrude(recv) ((parser___parser_nodes___AIntrudeVisibility___n_kwintrude_t)CALL((recv), (SFT_parser___parser_nodes[347] + 1)))
+#define ID_parser___parser_nodes___AClassdef (SFT_parser___parser_nodes[348])
+#define COLOR_parser___parser_nodes___AClassdef (SFT_parser___parser_nodes[349])
+#define ATTR_parser___parser_nodes___AClassdef____n_propdefs(recv) ATTR(recv, (SFT_parser___parser_nodes[350] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AClassdef (SFT_parser___parser_nodes[351] + 0)
+#define CALL_parser___parser_nodes___AClassdef___n_propdefs(recv) ((parser___parser_nodes___AClassdef___n_propdefs_t)CALL((recv), (SFT_parser___parser_nodes[351] + 1)))
+#define ID_parser___parser_nodes___AStdClassdef (SFT_parser___parser_nodes[352])
+#define COLOR_parser___parser_nodes___AStdClassdef (SFT_parser___parser_nodes[353])
+#define ATTR_parser___parser_nodes___AStdClassdef____n_doc(recv) ATTR(recv, (SFT_parser___parser_nodes[354] + 0))
+#define ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(recv) ATTR(recv, (SFT_parser___parser_nodes[354] + 1))
+#define ATTR_parser___parser_nodes___AStdClassdef____n_visibility(recv) ATTR(recv, (SFT_parser___parser_nodes[354] + 2))
+#define ATTR_parser___parser_nodes___AStdClassdef____n_classkind(recv) ATTR(recv, (SFT_parser___parser_nodes[354] + 3))
+#define ATTR_parser___parser_nodes___AStdClassdef____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[354] + 4))
+#define ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(recv) ATTR(recv, (SFT_parser___parser_nodes[354] + 5))
+#define ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(recv) ATTR(recv, (SFT_parser___parser_nodes[354] + 6))
+#define ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(recv) ATTR(recv, (SFT_parser___parser_nodes[354] + 7))
+#define ATTR_parser___parser_nodes___AStdClassdef____n_kwend(recv) ATTR(recv, (SFT_parser___parser_nodes[354] + 8))
+#define INIT_TABLE_POS_parser___parser_nodes___AStdClassdef (SFT_parser___parser_nodes[355] + 0)
+#define CALL_parser___parser_nodes___AStdClassdef___n_doc(recv) ((parser___parser_nodes___AStdClassdef___n_doc_t)CALL((recv), (SFT_parser___parser_nodes[355] + 1)))
+#define CALL_parser___parser_nodes___AStdClassdef___n_kwredef(recv) ((parser___parser_nodes___AStdClassdef___n_kwredef_t)CALL((recv), (SFT_parser___parser_nodes[355] + 2)))
+#define CALL_parser___parser_nodes___AStdClassdef___n_visibility(recv) ((parser___parser_nodes___AStdClassdef___n_visibility_t)CALL((recv), (SFT_parser___parser_nodes[355] + 3)))
+#define CALL_parser___parser_nodes___AStdClassdef___n_classkind(recv) ((parser___parser_nodes___AStdClassdef___n_classkind_t)CALL((recv), (SFT_parser___parser_nodes[355] + 4)))
+#define CALL_parser___parser_nodes___AStdClassdef___n_id(recv) ((parser___parser_nodes___AStdClassdef___n_id_t)CALL((recv), (SFT_parser___parser_nodes[355] + 5)))
+#define CALL_parser___parser_nodes___AStdClassdef___n_formaldefs(recv) ((parser___parser_nodes___AStdClassdef___n_formaldefs_t)CALL((recv), (SFT_parser___parser_nodes[355] + 6)))
+#define CALL_parser___parser_nodes___AStdClassdef___n_extern_code_block(recv) ((parser___parser_nodes___AStdClassdef___n_extern_code_block_t)CALL((recv), (SFT_parser___parser_nodes[355] + 7)))
+#define CALL_parser___parser_nodes___AStdClassdef___n_superclasses(recv) ((parser___parser_nodes___AStdClassdef___n_superclasses_t)CALL((recv), (SFT_parser___parser_nodes[355] + 8)))
+#define CALL_parser___parser_nodes___AStdClassdef___n_kwend(recv) ((parser___parser_nodes___AStdClassdef___n_kwend_t)CALL((recv), (SFT_parser___parser_nodes[355] + 9)))
+#define ID_parser___parser_nodes___ATopClassdef (SFT_parser___parser_nodes[356])
+#define COLOR_parser___parser_nodes___ATopClassdef (SFT_parser___parser_nodes[357])
+#define INIT_TABLE_POS_parser___parser_nodes___ATopClassdef (SFT_parser___parser_nodes[358] + 0)
+#define ID_parser___parser_nodes___AMainClassdef (SFT_parser___parser_nodes[359])
+#define COLOR_parser___parser_nodes___AMainClassdef (SFT_parser___parser_nodes[360])
+#define INIT_TABLE_POS_parser___parser_nodes___AMainClassdef (SFT_parser___parser_nodes[361] + 0)
+#define ID_parser___parser_nodes___AClasskind (SFT_parser___parser_nodes[362])
+#define COLOR_parser___parser_nodes___AClasskind (SFT_parser___parser_nodes[363])
+#define INIT_TABLE_POS_parser___parser_nodes___AClasskind (SFT_parser___parser_nodes[364] + 0)
+#define ID_parser___parser_nodes___AConcreteClasskind (SFT_parser___parser_nodes[365])
+#define COLOR_parser___parser_nodes___AConcreteClasskind (SFT_parser___parser_nodes[366])
+#define ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(recv) ATTR(recv, (SFT_parser___parser_nodes[367] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AConcreteClasskind (SFT_parser___parser_nodes[368] + 0)
+#define CALL_parser___parser_nodes___AConcreteClasskind___n_kwclass(recv) ((parser___parser_nodes___AConcreteClasskind___n_kwclass_t)CALL((recv), (SFT_parser___parser_nodes[368] + 1)))
+#define ID_parser___parser_nodes___AAbstractClasskind (SFT_parser___parser_nodes[369])
+#define COLOR_parser___parser_nodes___AAbstractClasskind (SFT_parser___parser_nodes[370])
+#define ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(recv) ATTR(recv, (SFT_parser___parser_nodes[371] + 0))
+#define ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(recv) ATTR(recv, (SFT_parser___parser_nodes[371] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AAbstractClasskind (SFT_parser___parser_nodes[372] + 0)
+#define CALL_parser___parser_nodes___AAbstractClasskind___n_kwabstract(recv) ((parser___parser_nodes___AAbstractClasskind___n_kwabstract_t)CALL((recv), (SFT_parser___parser_nodes[372] + 1)))
+#define CALL_parser___parser_nodes___AAbstractClasskind___n_kwclass(recv) ((parser___parser_nodes___AAbstractClasskind___n_kwclass_t)CALL((recv), (SFT_parser___parser_nodes[372] + 2)))
+#define ID_parser___parser_nodes___AInterfaceClasskind (SFT_parser___parser_nodes[373])
+#define COLOR_parser___parser_nodes___AInterfaceClasskind (SFT_parser___parser_nodes[374])
+#define ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(recv) ATTR(recv, (SFT_parser___parser_nodes[375] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AInterfaceClasskind (SFT_parser___parser_nodes[376] + 0)
+#define CALL_parser___parser_nodes___AInterfaceClasskind___n_kwinterface(recv) ((parser___parser_nodes___AInterfaceClasskind___n_kwinterface_t)CALL((recv), (SFT_parser___parser_nodes[376] + 1)))
+#define ID_parser___parser_nodes___AEnumClasskind (SFT_parser___parser_nodes[377])
+#define COLOR_parser___parser_nodes___AEnumClasskind (SFT_parser___parser_nodes[378])
+#define ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(recv) ATTR(recv, (SFT_parser___parser_nodes[379] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AEnumClasskind (SFT_parser___parser_nodes[380] + 0)
+#define CALL_parser___parser_nodes___AEnumClasskind___n_kwenum(recv) ((parser___parser_nodes___AEnumClasskind___n_kwenum_t)CALL((recv), (SFT_parser___parser_nodes[380] + 1)))
+#define ID_parser___parser_nodes___AExternClasskind (SFT_parser___parser_nodes[381])
+#define COLOR_parser___parser_nodes___AExternClasskind (SFT_parser___parser_nodes[382])
+#define ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(recv) ATTR(recv, (SFT_parser___parser_nodes[383] + 0))
+#define ATTR_parser___parser_nodes___AExternClasskind____n_kwclass(recv) ATTR(recv, (SFT_parser___parser_nodes[383] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AExternClasskind (SFT_parser___parser_nodes[384] + 0)
+#define CALL_parser___parser_nodes___AExternClasskind___n_kwextern(recv) ((parser___parser_nodes___AExternClasskind___n_kwextern_t)CALL((recv), (SFT_parser___parser_nodes[384] + 1)))
+#define CALL_parser___parser_nodes___AExternClasskind___n_kwclass(recv) ((parser___parser_nodes___AExternClasskind___n_kwclass_t)CALL((recv), (SFT_parser___parser_nodes[384] + 2)))
+#define ID_parser___parser_nodes___AFormaldef (SFT_parser___parser_nodes[385])
+#define COLOR_parser___parser_nodes___AFormaldef (SFT_parser___parser_nodes[386])
+#define ATTR_parser___parser_nodes___AFormaldef____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[387] + 0))
+#define ATTR_parser___parser_nodes___AFormaldef____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[387] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AFormaldef (SFT_parser___parser_nodes[388] + 0)
+#define CALL_parser___parser_nodes___AFormaldef___n_id(recv) ((parser___parser_nodes___AFormaldef___n_id_t)CALL((recv), (SFT_parser___parser_nodes[388] + 1)))
+#define CALL_parser___parser_nodes___AFormaldef___n_type(recv) ((parser___parser_nodes___AFormaldef___n_type_t)CALL((recv), (SFT_parser___parser_nodes[388] + 2)))
+#define ID_parser___parser_nodes___ASuperclass (SFT_parser___parser_nodes[389])
+#define COLOR_parser___parser_nodes___ASuperclass (SFT_parser___parser_nodes[390])
+#define ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(recv) ATTR(recv, (SFT_parser___parser_nodes[391] + 0))
+#define ATTR_parser___parser_nodes___ASuperclass____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[391] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___ASuperclass (SFT_parser___parser_nodes[392] + 0)
+#define CALL_parser___parser_nodes___ASuperclass___n_kwsuper(recv) ((parser___parser_nodes___ASuperclass___n_kwsuper_t)CALL((recv), (SFT_parser___parser_nodes[392] + 1)))
+#define CALL_parser___parser_nodes___ASuperclass___n_type(recv) ((parser___parser_nodes___ASuperclass___n_type_t)CALL((recv), (SFT_parser___parser_nodes[392] + 2)))
+#define ID_parser___parser_nodes___APropdef (SFT_parser___parser_nodes[393])
+#define COLOR_parser___parser_nodes___APropdef (SFT_parser___parser_nodes[394])
+#define ATTR_parser___parser_nodes___APropdef____n_doc(recv) ATTR(recv, (SFT_parser___parser_nodes[395] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___APropdef (SFT_parser___parser_nodes[396] + 0)
+#define CALL_parser___parser_nodes___APropdef___n_doc(recv) ((parser___parser_nodes___APropdef___n_doc_t)CALL((recv), (SFT_parser___parser_nodes[396] + 1)))
+#define ID_parser___parser_nodes___AAttrPropdef (SFT_parser___parser_nodes[397])
+#define COLOR_parser___parser_nodes___AAttrPropdef (SFT_parser___parser_nodes[398])
+#define ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(recv) ATTR(recv, (SFT_parser___parser_nodes[399] + 0))
+#define ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(recv) ATTR(recv, (SFT_parser___parser_nodes[399] + 1))
+#define ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(recv) ATTR(recv, (SFT_parser___parser_nodes[399] + 2))
+#define ATTR_parser___parser_nodes___AAttrPropdef____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[399] + 3))
+#define ATTR_parser___parser_nodes___AAttrPropdef____n_id2(recv) ATTR(recv, (SFT_parser___parser_nodes[399] + 4))
+#define ATTR_parser___parser_nodes___AAttrPropdef____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[399] + 5))
+#define ATTR_parser___parser_nodes___AAttrPropdef____n_readable(recv) ATTR(recv, (SFT_parser___parser_nodes[399] + 6))
+#define ATTR_parser___parser_nodes___AAttrPropdef____n_writable(recv) ATTR(recv, (SFT_parser___parser_nodes[399] + 7))
+#define ATTR_parser___parser_nodes___AAttrPropdef____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[399] + 8))
+#define INIT_TABLE_POS_parser___parser_nodes___AAttrPropdef (SFT_parser___parser_nodes[400] + 0)
+#define CALL_parser___parser_nodes___AAttrPropdef___n_kwredef(recv) ((parser___parser_nodes___AAttrPropdef___n_kwredef_t)CALL((recv), (SFT_parser___parser_nodes[400] + 1)))
+#define CALL_parser___parser_nodes___AAttrPropdef___n_visibility(recv) ((parser___parser_nodes___AAttrPropdef___n_visibility_t)CALL((recv), (SFT_parser___parser_nodes[400] + 2)))
+#define CALL_parser___parser_nodes___AAttrPropdef___n_kwvar(recv) ((parser___parser_nodes___AAttrPropdef___n_kwvar_t)CALL((recv), (SFT_parser___parser_nodes[400] + 3)))
+#define CALL_parser___parser_nodes___AAttrPropdef___n_id(recv) ((parser___parser_nodes___AAttrPropdef___n_id_t)CALL((recv), (SFT_parser___parser_nodes[400] + 4)))
+#define CALL_parser___parser_nodes___AAttrPropdef___n_id2(recv) ((parser___parser_nodes___AAttrPropdef___n_id2_t)CALL((recv), (SFT_parser___parser_nodes[400] + 5)))
+#define CALL_parser___parser_nodes___AAttrPropdef___n_type(recv) ((parser___parser_nodes___AAttrPropdef___n_type_t)CALL((recv), (SFT_parser___parser_nodes[400] + 6)))
+#define CALL_parser___parser_nodes___AAttrPropdef___n_readable(recv) ((parser___parser_nodes___AAttrPropdef___n_readable_t)CALL((recv), (SFT_parser___parser_nodes[400] + 7)))
+#define CALL_parser___parser_nodes___AAttrPropdef___n_writable(recv) ((parser___parser_nodes___AAttrPropdef___n_writable_t)CALL((recv), (SFT_parser___parser_nodes[400] + 8)))
+#define CALL_parser___parser_nodes___AAttrPropdef___n_expr(recv) ((parser___parser_nodes___AAttrPropdef___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[400] + 9)))
+#define ID_parser___parser_nodes___AMethPropdef (SFT_parser___parser_nodes[401])
+#define COLOR_parser___parser_nodes___AMethPropdef (SFT_parser___parser_nodes[402])
+#define ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(recv) ATTR(recv, (SFT_parser___parser_nodes[403] + 0))
+#define ATTR_parser___parser_nodes___AMethPropdef____n_visibility(recv) ATTR(recv, (SFT_parser___parser_nodes[403] + 1))
+#define ATTR_parser___parser_nodes___AMethPropdef____n_methid(recv) ATTR(recv, (SFT_parser___parser_nodes[403] + 2))
+#define ATTR_parser___parser_nodes___AMethPropdef____n_signature(recv) ATTR(recv, (SFT_parser___parser_nodes[403] + 3))
+#define INIT_TABLE_POS_parser___parser_nodes___AMethPropdef (SFT_parser___parser_nodes[404] + 0)
+#define CALL_parser___parser_nodes___AMethPropdef___n_kwredef(recv) ((parser___parser_nodes___AMethPropdef___n_kwredef_t)CALL((recv), (SFT_parser___parser_nodes[404] + 1)))
+#define CALL_parser___parser_nodes___AMethPropdef___n_visibility(recv) ((parser___parser_nodes___AMethPropdef___n_visibility_t)CALL((recv), (SFT_parser___parser_nodes[404] + 2)))
+#define CALL_parser___parser_nodes___AMethPropdef___n_methid(recv) ((parser___parser_nodes___AMethPropdef___n_methid_t)CALL((recv), (SFT_parser___parser_nodes[404] + 3)))
+#define CALL_parser___parser_nodes___AMethPropdef___n_signature(recv) ((parser___parser_nodes___AMethPropdef___n_signature_t)CALL((recv), (SFT_parser___parser_nodes[404] + 4)))
+#define ID_parser___parser_nodes___ADeferredMethPropdef (SFT_parser___parser_nodes[405])
+#define COLOR_parser___parser_nodes___ADeferredMethPropdef (SFT_parser___parser_nodes[406])
+#define ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(recv) ATTR(recv, (SFT_parser___parser_nodes[407] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ADeferredMethPropdef (SFT_parser___parser_nodes[408] + 0)
+#define CALL_parser___parser_nodes___ADeferredMethPropdef___n_kwmeth(recv) ((parser___parser_nodes___ADeferredMethPropdef___n_kwmeth_t)CALL((recv), (SFT_parser___parser_nodes[408] + 1)))
+#define ID_parser___parser_nodes___AInternMethPropdef (SFT_parser___parser_nodes[409])
+#define COLOR_parser___parser_nodes___AInternMethPropdef (SFT_parser___parser_nodes[410])
+#define ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(recv) ATTR(recv, (SFT_parser___parser_nodes[411] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AInternMethPropdef (SFT_parser___parser_nodes[412] + 0)
+#define CALL_parser___parser_nodes___AInternMethPropdef___n_kwmeth(recv) ((parser___parser_nodes___AInternMethPropdef___n_kwmeth_t)CALL((recv), (SFT_parser___parser_nodes[412] + 1)))
+#define ID_parser___parser_nodes___AExternPropdef (SFT_parser___parser_nodes[413])
+#define COLOR_parser___parser_nodes___AExternPropdef (SFT_parser___parser_nodes[414])
+#define ATTR_parser___parser_nodes___AExternPropdef____n_extern(recv) ATTR(recv, (SFT_parser___parser_nodes[415] + 0))
+#define ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(recv) ATTR(recv, (SFT_parser___parser_nodes[415] + 1))
+#define ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(recv) ATTR(recv, (SFT_parser___parser_nodes[415] + 2))
+#define INIT_TABLE_POS_parser___parser_nodes___AExternPropdef (SFT_parser___parser_nodes[416] + 0)
+#define CALL_parser___parser_nodes___AExternPropdef___n_extern(recv) ((parser___parser_nodes___AExternPropdef___n_extern_t)CALL((recv), (SFT_parser___parser_nodes[416] + 1)))
+#define CALL_parser___parser_nodes___AExternPropdef___n_extern_calls(recv) ((parser___parser_nodes___AExternPropdef___n_extern_calls_t)CALL((recv), (SFT_parser___parser_nodes[416] + 2)))
+#define CALL_parser___parser_nodes___AExternPropdef___n_extern_code_block(recv) ((parser___parser_nodes___AExternPropdef___n_extern_code_block_t)CALL((recv), (SFT_parser___parser_nodes[416] + 3)))
+#define ID_parser___parser_nodes___AExternMethPropdef (SFT_parser___parser_nodes[417])
+#define COLOR_parser___parser_nodes___AExternMethPropdef (SFT_parser___parser_nodes[418])
+#define ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(recv) ATTR(recv, (SFT_parser___parser_nodes[419] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AExternMethPropdef (SFT_parser___parser_nodes[420] + 0)
+#define CALL_parser___parser_nodes___AExternMethPropdef___n_kwmeth(recv) ((parser___parser_nodes___AExternMethPropdef___n_kwmeth_t)CALL((recv), (SFT_parser___parser_nodes[420] + 1)))
+#define ID_parser___parser_nodes___AConcreteMethPropdef (SFT_parser___parser_nodes[421])
+#define COLOR_parser___parser_nodes___AConcreteMethPropdef (SFT_parser___parser_nodes[422])
+#define ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(recv) ATTR(recv, (SFT_parser___parser_nodes[423] + 0))
+#define ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(recv) ATTR(recv, (SFT_parser___parser_nodes[423] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AConcreteMethPropdef (SFT_parser___parser_nodes[424] + 0)
+#define CALL_parser___parser_nodes___AConcreteMethPropdef___n_kwmeth(recv) ((parser___parser_nodes___AConcreteMethPropdef___n_kwmeth_t)CALL((recv), (SFT_parser___parser_nodes[424] + 1)))
+#define CALL_parser___parser_nodes___AConcreteMethPropdef___n_block(recv) ((parser___parser_nodes___AConcreteMethPropdef___n_block_t)CALL((recv), (SFT_parser___parser_nodes[424] + 2)))
+#define ID_parser___parser_nodes___AInitPropdef (SFT_parser___parser_nodes[425])
+#define COLOR_parser___parser_nodes___AInitPropdef (SFT_parser___parser_nodes[426])
+#define INIT_TABLE_POS_parser___parser_nodes___AInitPropdef (SFT_parser___parser_nodes[427] + 0)
+#define ID_parser___parser_nodes___AConcreteInitPropdef (SFT_parser___parser_nodes[428])
+#define COLOR_parser___parser_nodes___AConcreteInitPropdef (SFT_parser___parser_nodes[429])
+#define ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(recv) ATTR(recv, (SFT_parser___parser_nodes[430] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AConcreteInitPropdef (SFT_parser___parser_nodes[431] + 0)
+#define CALL_parser___parser_nodes___AConcreteInitPropdef___n_kwinit(recv) ((parser___parser_nodes___AConcreteInitPropdef___n_kwinit_t)CALL((recv), (SFT_parser___parser_nodes[431] + 1)))
+#define ID_parser___parser_nodes___AExternInitPropdef (SFT_parser___parser_nodes[432])
+#define COLOR_parser___parser_nodes___AExternInitPropdef (SFT_parser___parser_nodes[433])
+#define ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(recv) ATTR(recv, (SFT_parser___parser_nodes[434] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AExternInitPropdef (SFT_parser___parser_nodes[435] + 0)
+#define CALL_parser___parser_nodes___AExternInitPropdef___n_kwnew(recv) ((parser___parser_nodes___AExternInitPropdef___n_kwnew_t)CALL((recv), (SFT_parser___parser_nodes[435] + 1)))
+#define ID_parser___parser_nodes___AMainMethPropdef (SFT_parser___parser_nodes[436])
+#define COLOR_parser___parser_nodes___AMainMethPropdef (SFT_parser___parser_nodes[437])
+#define INIT_TABLE_POS_parser___parser_nodes___AMainMethPropdef (SFT_parser___parser_nodes[438] + 0)
+#define ID_parser___parser_nodes___AExternCalls (SFT_parser___parser_nodes[439])
+#define COLOR_parser___parser_nodes___AExternCalls (SFT_parser___parser_nodes[440])
+#define ATTR_parser___parser_nodes___AExternCalls____n_kwimport(recv) ATTR(recv, (SFT_parser___parser_nodes[441] + 0))
+#define ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(recv) ATTR(recv, (SFT_parser___parser_nodes[441] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AExternCalls (SFT_parser___parser_nodes[442] + 0)
+#define CALL_parser___parser_nodes___AExternCalls___n_kwimport(recv) ((parser___parser_nodes___AExternCalls___n_kwimport_t)CALL((recv), (SFT_parser___parser_nodes[442] + 1)))
+#define CALL_parser___parser_nodes___AExternCalls___n_extern_calls(recv) ((parser___parser_nodes___AExternCalls___n_extern_calls_t)CALL((recv), (SFT_parser___parser_nodes[442] + 2)))
+#define ID_parser___parser_nodes___AExternCall (SFT_parser___parser_nodes[443])
+#define COLOR_parser___parser_nodes___AExternCall (SFT_parser___parser_nodes[444])
+#define INIT_TABLE_POS_parser___parser_nodes___AExternCall (SFT_parser___parser_nodes[445] + 0)
+#define ID_parser___parser_nodes___APropExternCall (SFT_parser___parser_nodes[446])
+#define COLOR_parser___parser_nodes___APropExternCall (SFT_parser___parser_nodes[447])
+#define INIT_TABLE_POS_parser___parser_nodes___APropExternCall (SFT_parser___parser_nodes[448] + 0)
+#define ID_parser___parser_nodes___ALocalPropExternCall (SFT_parser___parser_nodes[449])
+#define COLOR_parser___parser_nodes___ALocalPropExternCall (SFT_parser___parser_nodes[450])
+#define ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(recv) ATTR(recv, (SFT_parser___parser_nodes[451] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ALocalPropExternCall (SFT_parser___parser_nodes[452] + 0)
+#define CALL_parser___parser_nodes___ALocalPropExternCall___n_methid(recv) ((parser___parser_nodes___ALocalPropExternCall___n_methid_t)CALL((recv), (SFT_parser___parser_nodes[452] + 1)))
+#define ID_parser___parser_nodes___AFullPropExternCall (SFT_parser___parser_nodes[453])
+#define COLOR_parser___parser_nodes___AFullPropExternCall (SFT_parser___parser_nodes[454])
+#define ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(recv) ATTR(recv, (SFT_parser___parser_nodes[455] + 0))
+#define ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(recv) ATTR(recv, (SFT_parser___parser_nodes[455] + 1))
+#define ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(recv) ATTR(recv, (SFT_parser___parser_nodes[455] + 2))
+#define INIT_TABLE_POS_parser___parser_nodes___AFullPropExternCall (SFT_parser___parser_nodes[456] + 0)
+#define CALL_parser___parser_nodes___AFullPropExternCall___n_classid(recv) ((parser___parser_nodes___AFullPropExternCall___n_classid_t)CALL((recv), (SFT_parser___parser_nodes[456] + 1)))
+#define CALL_parser___parser_nodes___AFullPropExternCall___n_quad(recv) ((parser___parser_nodes___AFullPropExternCall___n_quad_t)CALL((recv), (SFT_parser___parser_nodes[456] + 2)))
+#define CALL_parser___parser_nodes___AFullPropExternCall___n_methid(recv) ((parser___parser_nodes___AFullPropExternCall___n_methid_t)CALL((recv), (SFT_parser___parser_nodes[456] + 3)))
+#define ID_parser___parser_nodes___AInitPropExternCall (SFT_parser___parser_nodes[457])
+#define COLOR_parser___parser_nodes___AInitPropExternCall (SFT_parser___parser_nodes[458])
+#define ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(recv) ATTR(recv, (SFT_parser___parser_nodes[459] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AInitPropExternCall (SFT_parser___parser_nodes[460] + 0)
+#define CALL_parser___parser_nodes___AInitPropExternCall___n_classid(recv) ((parser___parser_nodes___AInitPropExternCall___n_classid_t)CALL((recv), (SFT_parser___parser_nodes[460] + 1)))
+#define ID_parser___parser_nodes___ASuperExternCall (SFT_parser___parser_nodes[461])
+#define COLOR_parser___parser_nodes___ASuperExternCall (SFT_parser___parser_nodes[462])
+#define ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(recv) ATTR(recv, (SFT_parser___parser_nodes[463] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ASuperExternCall (SFT_parser___parser_nodes[464] + 0)
+#define CALL_parser___parser_nodes___ASuperExternCall___n_kwsuper(recv) ((parser___parser_nodes___ASuperExternCall___n_kwsuper_t)CALL((recv), (SFT_parser___parser_nodes[464] + 1)))
+#define ID_parser___parser_nodes___ACastExternCall (SFT_parser___parser_nodes[465])
+#define COLOR_parser___parser_nodes___ACastExternCall (SFT_parser___parser_nodes[466])
+#define INIT_TABLE_POS_parser___parser_nodes___ACastExternCall (SFT_parser___parser_nodes[467] + 0)
+#define ID_parser___parser_nodes___ACastAsExternCall (SFT_parser___parser_nodes[468])
+#define COLOR_parser___parser_nodes___ACastAsExternCall (SFT_parser___parser_nodes[469])
+#define ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(recv) ATTR(recv, (SFT_parser___parser_nodes[470] + 0))
+#define ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(recv) ATTR(recv, (SFT_parser___parser_nodes[470] + 1))
+#define ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(recv) ATTR(recv, (SFT_parser___parser_nodes[470] + 2))
+#define INIT_TABLE_POS_parser___parser_nodes___ACastAsExternCall (SFT_parser___parser_nodes[471] + 0)
+#define CALL_parser___parser_nodes___ACastAsExternCall___n_from_type(recv) ((parser___parser_nodes___ACastAsExternCall___n_from_type_t)CALL((recv), (SFT_parser___parser_nodes[471] + 1)))
+#define CALL_parser___parser_nodes___ACastAsExternCall___n_kwas(recv) ((parser___parser_nodes___ACastAsExternCall___n_kwas_t)CALL((recv), (SFT_parser___parser_nodes[471] + 2)))
+#define CALL_parser___parser_nodes___ACastAsExternCall___n_to_type(recv) ((parser___parser_nodes___ACastAsExternCall___n_to_type_t)CALL((recv), (SFT_parser___parser_nodes[471] + 3)))
+#define ID_parser___parser_nodes___AAsNullableExternCall (SFT_parser___parser_nodes[472])
+#define COLOR_parser___parser_nodes___AAsNullableExternCall (SFT_parser___parser_nodes[473])
+#define ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[474] + 0))
+#define ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(recv) ATTR(recv, (SFT_parser___parser_nodes[474] + 1))
+#define ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(recv) ATTR(recv, (SFT_parser___parser_nodes[474] + 2))
+#define INIT_TABLE_POS_parser___parser_nodes___AAsNullableExternCall (SFT_parser___parser_nodes[475] + 0)
+#define CALL_parser___parser_nodes___AAsNullableExternCall___n_type(recv) ((parser___parser_nodes___AAsNullableExternCall___n_type_t)CALL((recv), (SFT_parser___parser_nodes[475] + 1)))
+#define CALL_parser___parser_nodes___AAsNullableExternCall___n_kwas(recv) ((parser___parser_nodes___AAsNullableExternCall___n_kwas_t)CALL((recv), (SFT_parser___parser_nodes[475] + 2)))
+#define CALL_parser___parser_nodes___AAsNullableExternCall___n_kwnullable(recv) ((parser___parser_nodes___AAsNullableExternCall___n_kwnullable_t)CALL((recv), (SFT_parser___parser_nodes[475] + 3)))
+#define ID_parser___parser_nodes___AAsNotNullableExternCall (SFT_parser___parser_nodes[476])
+#define COLOR_parser___parser_nodes___AAsNotNullableExternCall (SFT_parser___parser_nodes[477])
+#define ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[478] + 0))
+#define ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(recv) ATTR(recv, (SFT_parser___parser_nodes[478] + 1))
+#define ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(recv) ATTR(recv, (SFT_parser___parser_nodes[478] + 2))
+#define ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(recv) ATTR(recv, (SFT_parser___parser_nodes[478] + 3))
+#define INIT_TABLE_POS_parser___parser_nodes___AAsNotNullableExternCall (SFT_parser___parser_nodes[479] + 0)
+#define CALL_parser___parser_nodes___AAsNotNullableExternCall___n_type(recv) ((parser___parser_nodes___AAsNotNullableExternCall___n_type_t)CALL((recv), (SFT_parser___parser_nodes[479] + 1)))
+#define CALL_parser___parser_nodes___AAsNotNullableExternCall___n_kwas(recv) ((parser___parser_nodes___AAsNotNullableExternCall___n_kwas_t)CALL((recv), (SFT_parser___parser_nodes[479] + 2)))
+#define CALL_parser___parser_nodes___AAsNotNullableExternCall___n_kwnot(recv) ((parser___parser_nodes___AAsNotNullableExternCall___n_kwnot_t)CALL((recv), (SFT_parser___parser_nodes[479] + 3)))
+#define CALL_parser___parser_nodes___AAsNotNullableExternCall___n_kwnullable(recv) ((parser___parser_nodes___AAsNotNullableExternCall___n_kwnullable_t)CALL((recv), (SFT_parser___parser_nodes[479] + 4)))
+#define ID_parser___parser_nodes___ATypePropdef (SFT_parser___parser_nodes[480])
+#define COLOR_parser___parser_nodes___ATypePropdef (SFT_parser___parser_nodes[481])
+#define ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(recv) ATTR(recv, (SFT_parser___parser_nodes[482] + 0))
+#define ATTR_parser___parser_nodes___ATypePropdef____n_visibility(recv) ATTR(recv, (SFT_parser___parser_nodes[482] + 1))
+#define ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(recv) ATTR(recv, (SFT_parser___parser_nodes[482] + 2))
+#define ATTR_parser___parser_nodes___ATypePropdef____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[482] + 3))
+#define ATTR_parser___parser_nodes___ATypePropdef____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[482] + 4))
+#define INIT_TABLE_POS_parser___parser_nodes___ATypePropdef (SFT_parser___parser_nodes[483] + 0)
+#define CALL_parser___parser_nodes___ATypePropdef___n_kwredef(recv) ((parser___parser_nodes___ATypePropdef___n_kwredef_t)CALL((recv), (SFT_parser___parser_nodes[483] + 1)))
+#define CALL_parser___parser_nodes___ATypePropdef___n_visibility(recv) ((parser___parser_nodes___ATypePropdef___n_visibility_t)CALL((recv), (SFT_parser___parser_nodes[483] + 2)))
+#define CALL_parser___parser_nodes___ATypePropdef___n_kwtype(recv) ((parser___parser_nodes___ATypePropdef___n_kwtype_t)CALL((recv), (SFT_parser___parser_nodes[483] + 3)))
+#define CALL_parser___parser_nodes___ATypePropdef___n_id(recv) ((parser___parser_nodes___ATypePropdef___n_id_t)CALL((recv), (SFT_parser___parser_nodes[483] + 4)))
+#define CALL_parser___parser_nodes___ATypePropdef___n_type(recv) ((parser___parser_nodes___ATypePropdef___n_type_t)CALL((recv), (SFT_parser___parser_nodes[483] + 5)))
+#define ID_parser___parser_nodes___AAble (SFT_parser___parser_nodes[484])
+#define COLOR_parser___parser_nodes___AAble (SFT_parser___parser_nodes[485])
+#define ATTR_parser___parser_nodes___AAble____n_visibility(recv) ATTR(recv, (SFT_parser___parser_nodes[486] + 0))
+#define ATTR_parser___parser_nodes___AAble____n_kwredef(recv) ATTR(recv, (SFT_parser___parser_nodes[486] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AAble (SFT_parser___parser_nodes[487] + 0)
+#define CALL_parser___parser_nodes___AAble___n_visibility(recv) ((parser___parser_nodes___AAble___n_visibility_t)CALL((recv), (SFT_parser___parser_nodes[487] + 1)))
+#define CALL_parser___parser_nodes___AAble___n_kwredef(recv) ((parser___parser_nodes___AAble___n_kwredef_t)CALL((recv), (SFT_parser___parser_nodes[487] + 2)))
+#define ID_parser___parser_nodes___AReadAble (SFT_parser___parser_nodes[488])
+#define COLOR_parser___parser_nodes___AReadAble (SFT_parser___parser_nodes[489])
+#define ATTR_parser___parser_nodes___AReadAble____n_kwreadable(recv) ATTR(recv, (SFT_parser___parser_nodes[490] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AReadAble (SFT_parser___parser_nodes[491] + 0)
+#define CALL_parser___parser_nodes___AReadAble___n_kwreadable(recv) ((parser___parser_nodes___AReadAble___n_kwreadable_t)CALL((recv), (SFT_parser___parser_nodes[491] + 1)))
+#define ID_parser___parser_nodes___AWriteAble (SFT_parser___parser_nodes[492])
+#define COLOR_parser___parser_nodes___AWriteAble (SFT_parser___parser_nodes[493])
+#define ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(recv) ATTR(recv, (SFT_parser___parser_nodes[494] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AWriteAble (SFT_parser___parser_nodes[495] + 0)
+#define CALL_parser___parser_nodes___AWriteAble___n_kwwritable(recv) ((parser___parser_nodes___AWriteAble___n_kwwritable_t)CALL((recv), (SFT_parser___parser_nodes[495] + 1)))
+#define ID_parser___parser_nodes___AMethid (SFT_parser___parser_nodes[496])
+#define COLOR_parser___parser_nodes___AMethid (SFT_parser___parser_nodes[497])
+#define INIT_TABLE_POS_parser___parser_nodes___AMethid (SFT_parser___parser_nodes[498] + 0)
+#define ID_parser___parser_nodes___AIdMethid (SFT_parser___parser_nodes[499])
+#define COLOR_parser___parser_nodes___AIdMethid (SFT_parser___parser_nodes[500])
+#define ATTR_parser___parser_nodes___AIdMethid____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[501] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AIdMethid (SFT_parser___parser_nodes[502] + 0)
+#define CALL_parser___parser_nodes___AIdMethid___n_id(recv) ((parser___parser_nodes___AIdMethid___n_id_t)CALL((recv), (SFT_parser___parser_nodes[502] + 1)))
+#define ID_parser___parser_nodes___APlusMethid (SFT_parser___parser_nodes[503])
+#define COLOR_parser___parser_nodes___APlusMethid (SFT_parser___parser_nodes[504])
+#define ATTR_parser___parser_nodes___APlusMethid____n_plus(recv) ATTR(recv, (SFT_parser___parser_nodes[505] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___APlusMethid (SFT_parser___parser_nodes[506] + 0)
+#define CALL_parser___parser_nodes___APlusMethid___n_plus(recv) ((parser___parser_nodes___APlusMethid___n_plus_t)CALL((recv), (SFT_parser___parser_nodes[506] + 1)))
+#define ID_parser___parser_nodes___AMinusMethid (SFT_parser___parser_nodes[507])
+#define COLOR_parser___parser_nodes___AMinusMethid (SFT_parser___parser_nodes[508])
+#define ATTR_parser___parser_nodes___AMinusMethid____n_minus(recv) ATTR(recv, (SFT_parser___parser_nodes[509] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AMinusMethid (SFT_parser___parser_nodes[510] + 0)
+#define CALL_parser___parser_nodes___AMinusMethid___n_minus(recv) ((parser___parser_nodes___AMinusMethid___n_minus_t)CALL((recv), (SFT_parser___parser_nodes[510] + 1)))
+#define ID_parser___parser_nodes___AStarMethid (SFT_parser___parser_nodes[511])
+#define COLOR_parser___parser_nodes___AStarMethid (SFT_parser___parser_nodes[512])
+#define ATTR_parser___parser_nodes___AStarMethid____n_star(recv) ATTR(recv, (SFT_parser___parser_nodes[513] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AStarMethid (SFT_parser___parser_nodes[514] + 0)
+#define CALL_parser___parser_nodes___AStarMethid___n_star(recv) ((parser___parser_nodes___AStarMethid___n_star_t)CALL((recv), (SFT_parser___parser_nodes[514] + 1)))
+#define ID_parser___parser_nodes___ASlashMethid (SFT_parser___parser_nodes[515])
+#define COLOR_parser___parser_nodes___ASlashMethid (SFT_parser___parser_nodes[516])
+#define ATTR_parser___parser_nodes___ASlashMethid____n_slash(recv) ATTR(recv, (SFT_parser___parser_nodes[517] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ASlashMethid (SFT_parser___parser_nodes[518] + 0)
+#define CALL_parser___parser_nodes___ASlashMethid___n_slash(recv) ((parser___parser_nodes___ASlashMethid___n_slash_t)CALL((recv), (SFT_parser___parser_nodes[518] + 1)))
+#define ID_parser___parser_nodes___APercentMethid (SFT_parser___parser_nodes[519])
+#define COLOR_parser___parser_nodes___APercentMethid (SFT_parser___parser_nodes[520])
+#define ATTR_parser___parser_nodes___APercentMethid____n_percent(recv) ATTR(recv, (SFT_parser___parser_nodes[521] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___APercentMethid (SFT_parser___parser_nodes[522] + 0)
+#define CALL_parser___parser_nodes___APercentMethid___n_percent(recv) ((parser___parser_nodes___APercentMethid___n_percent_t)CALL((recv), (SFT_parser___parser_nodes[522] + 1)))
+#define ID_parser___parser_nodes___AEqMethid (SFT_parser___parser_nodes[523])
+#define COLOR_parser___parser_nodes___AEqMethid (SFT_parser___parser_nodes[524])
+#define ATTR_parser___parser_nodes___AEqMethid____n_eq(recv) ATTR(recv, (SFT_parser___parser_nodes[525] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AEqMethid (SFT_parser___parser_nodes[526] + 0)
+#define CALL_parser___parser_nodes___AEqMethid___n_eq(recv) ((parser___parser_nodes___AEqMethid___n_eq_t)CALL((recv), (SFT_parser___parser_nodes[526] + 1)))
+#define ID_parser___parser_nodes___ANeMethid (SFT_parser___parser_nodes[527])
+#define COLOR_parser___parser_nodes___ANeMethid (SFT_parser___parser_nodes[528])
+#define ATTR_parser___parser_nodes___ANeMethid____n_ne(recv) ATTR(recv, (SFT_parser___parser_nodes[529] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ANeMethid (SFT_parser___parser_nodes[530] + 0)
+#define CALL_parser___parser_nodes___ANeMethid___n_ne(recv) ((parser___parser_nodes___ANeMethid___n_ne_t)CALL((recv), (SFT_parser___parser_nodes[530] + 1)))
+#define ID_parser___parser_nodes___ALeMethid (SFT_parser___parser_nodes[531])
+#define COLOR_parser___parser_nodes___ALeMethid (SFT_parser___parser_nodes[532])
+#define ATTR_parser___parser_nodes___ALeMethid____n_le(recv) ATTR(recv, (SFT_parser___parser_nodes[533] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ALeMethid (SFT_parser___parser_nodes[534] + 0)
+#define CALL_parser___parser_nodes___ALeMethid___n_le(recv) ((parser___parser_nodes___ALeMethid___n_le_t)CALL((recv), (SFT_parser___parser_nodes[534] + 1)))
+#define ID_parser___parser_nodes___AGeMethid (SFT_parser___parser_nodes[535])
+#define COLOR_parser___parser_nodes___AGeMethid (SFT_parser___parser_nodes[536])
+#define ATTR_parser___parser_nodes___AGeMethid____n_ge(recv) ATTR(recv, (SFT_parser___parser_nodes[537] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AGeMethid (SFT_parser___parser_nodes[538] + 0)
+#define CALL_parser___parser_nodes___AGeMethid___n_ge(recv) ((parser___parser_nodes___AGeMethid___n_ge_t)CALL((recv), (SFT_parser___parser_nodes[538] + 1)))
+#define ID_parser___parser_nodes___ALtMethid (SFT_parser___parser_nodes[539])
+#define COLOR_parser___parser_nodes___ALtMethid (SFT_parser___parser_nodes[540])
+#define ATTR_parser___parser_nodes___ALtMethid____n_lt(recv) ATTR(recv, (SFT_parser___parser_nodes[541] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ALtMethid (SFT_parser___parser_nodes[542] + 0)
+#define CALL_parser___parser_nodes___ALtMethid___n_lt(recv) ((parser___parser_nodes___ALtMethid___n_lt_t)CALL((recv), (SFT_parser___parser_nodes[542] + 1)))
+#define ID_parser___parser_nodes___AGtMethid (SFT_parser___parser_nodes[543])
+#define COLOR_parser___parser_nodes___AGtMethid (SFT_parser___parser_nodes[544])
+#define ATTR_parser___parser_nodes___AGtMethid____n_gt(recv) ATTR(recv, (SFT_parser___parser_nodes[545] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AGtMethid (SFT_parser___parser_nodes[546] + 0)
+#define CALL_parser___parser_nodes___AGtMethid___n_gt(recv) ((parser___parser_nodes___AGtMethid___n_gt_t)CALL((recv), (SFT_parser___parser_nodes[546] + 1)))
+#define ID_parser___parser_nodes___ALlMethid (SFT_parser___parser_nodes[547])
+#define COLOR_parser___parser_nodes___ALlMethid (SFT_parser___parser_nodes[548])
+#define ATTR_parser___parser_nodes___ALlMethid____n_ll(recv) ATTR(recv, (SFT_parser___parser_nodes[549] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ALlMethid (SFT_parser___parser_nodes[550] + 0)
+#define CALL_parser___parser_nodes___ALlMethid___n_ll(recv) ((parser___parser_nodes___ALlMethid___n_ll_t)CALL((recv), (SFT_parser___parser_nodes[550] + 1)))
+#define CALL_parser___parser_nodes___ALlMethid___n_ll__eq(recv) ((parser___parser_nodes___ALlMethid___n_ll__eq_t)CALL((recv), (SFT_parser___parser_nodes[550] + 2)))
+#define ID_parser___parser_nodes___AGgMethid (SFT_parser___parser_nodes[551])
+#define COLOR_parser___parser_nodes___AGgMethid (SFT_parser___parser_nodes[552])
+#define ATTR_parser___parser_nodes___AGgMethid____n_gg(recv) ATTR(recv, (SFT_parser___parser_nodes[553] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AGgMethid (SFT_parser___parser_nodes[554] + 0)
+#define CALL_parser___parser_nodes___AGgMethid___n_gg(recv) ((parser___parser_nodes___AGgMethid___n_gg_t)CALL((recv), (SFT_parser___parser_nodes[554] + 1)))
+#define CALL_parser___parser_nodes___AGgMethid___n_gg__eq(recv) ((parser___parser_nodes___AGgMethid___n_gg__eq_t)CALL((recv), (SFT_parser___parser_nodes[554] + 2)))
+#define ID_parser___parser_nodes___ABraMethid (SFT_parser___parser_nodes[555])
+#define COLOR_parser___parser_nodes___ABraMethid (SFT_parser___parser_nodes[556])
+#define ATTR_parser___parser_nodes___ABraMethid____n_obra(recv) ATTR(recv, (SFT_parser___parser_nodes[557] + 0))
+#define ATTR_parser___parser_nodes___ABraMethid____n_cbra(recv) ATTR(recv, (SFT_parser___parser_nodes[557] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___ABraMethid (SFT_parser___parser_nodes[558] + 0)
+#define CALL_parser___parser_nodes___ABraMethid___n_obra(recv) ((parser___parser_nodes___ABraMethid___n_obra_t)CALL((recv), (SFT_parser___parser_nodes[558] + 1)))
+#define CALL_parser___parser_nodes___ABraMethid___n_cbra(recv) ((parser___parser_nodes___ABraMethid___n_cbra_t)CALL((recv), (SFT_parser___parser_nodes[558] + 2)))
+#define ID_parser___parser_nodes___AStarshipMethid (SFT_parser___parser_nodes[559])
+#define COLOR_parser___parser_nodes___AStarshipMethid (SFT_parser___parser_nodes[560])
+#define ATTR_parser___parser_nodes___AStarshipMethid____n_starship(recv) ATTR(recv, (SFT_parser___parser_nodes[561] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AStarshipMethid (SFT_parser___parser_nodes[562] + 0)
+#define CALL_parser___parser_nodes___AStarshipMethid___n_starship(recv) ((parser___parser_nodes___AStarshipMethid___n_starship_t)CALL((recv), (SFT_parser___parser_nodes[562] + 1)))
+#define ID_parser___parser_nodes___AAssignMethid (SFT_parser___parser_nodes[563])
+#define COLOR_parser___parser_nodes___AAssignMethid (SFT_parser___parser_nodes[564])
+#define ATTR_parser___parser_nodes___AAssignMethid____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[565] + 0))
+#define ATTR_parser___parser_nodes___AAssignMethid____n_assign(recv) ATTR(recv, (SFT_parser___parser_nodes[565] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AAssignMethid (SFT_parser___parser_nodes[566] + 0)
+#define CALL_parser___parser_nodes___AAssignMethid___n_id(recv) ((parser___parser_nodes___AAssignMethid___n_id_t)CALL((recv), (SFT_parser___parser_nodes[566] + 1)))
+#define CALL_parser___parser_nodes___AAssignMethid___n_assign(recv) ((parser___parser_nodes___AAssignMethid___n_assign_t)CALL((recv), (SFT_parser___parser_nodes[566] + 2)))
+#define ID_parser___parser_nodes___ABraassignMethid (SFT_parser___parser_nodes[567])
+#define COLOR_parser___parser_nodes___ABraassignMethid (SFT_parser___parser_nodes[568])
+#define ATTR_parser___parser_nodes___ABraassignMethid____n_obra(recv) ATTR(recv, (SFT_parser___parser_nodes[569] + 0))
+#define ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(recv) ATTR(recv, (SFT_parser___parser_nodes[569] + 1))
+#define ATTR_parser___parser_nodes___ABraassignMethid____n_assign(recv) ATTR(recv, (SFT_parser___parser_nodes[569] + 2))
+#define INIT_TABLE_POS_parser___parser_nodes___ABraassignMethid (SFT_parser___parser_nodes[570] + 0)
+#define CALL_parser___parser_nodes___ABraassignMethid___n_obra(recv) ((parser___parser_nodes___ABraassignMethid___n_obra_t)CALL((recv), (SFT_parser___parser_nodes[570] + 1)))
+#define CALL_parser___parser_nodes___ABraassignMethid___n_cbra(recv) ((parser___parser_nodes___ABraassignMethid___n_cbra_t)CALL((recv), (SFT_parser___parser_nodes[570] + 2)))
+#define CALL_parser___parser_nodes___ABraassignMethid___n_assign(recv) ((parser___parser_nodes___ABraassignMethid___n_assign_t)CALL((recv), (SFT_parser___parser_nodes[570] + 3)))
+#define ID_parser___parser_nodes___ASignature (SFT_parser___parser_nodes[571])
+#define COLOR_parser___parser_nodes___ASignature (SFT_parser___parser_nodes[572])
+#define ATTR_parser___parser_nodes___ASignature____n_opar(recv) ATTR(recv, (SFT_parser___parser_nodes[573] + 0))
+#define ATTR_parser___parser_nodes___ASignature____n_params(recv) ATTR(recv, (SFT_parser___parser_nodes[573] + 1))
+#define ATTR_parser___parser_nodes___ASignature____n_cpar(recv) ATTR(recv, (SFT_parser___parser_nodes[573] + 2))
+#define ATTR_parser___parser_nodes___ASignature____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[573] + 3))
+#define ATTR_parser___parser_nodes___ASignature____n_closure_decls(recv) ATTR(recv, (SFT_parser___parser_nodes[573] + 4))
+#define INIT_TABLE_POS_parser___parser_nodes___ASignature (SFT_parser___parser_nodes[574] + 0)
+#define CALL_parser___parser_nodes___ASignature___n_opar(recv) ((parser___parser_nodes___ASignature___n_opar_t)CALL((recv), (SFT_parser___parser_nodes[574] + 1)))
+#define CALL_parser___parser_nodes___ASignature___n_params(recv) ((parser___parser_nodes___ASignature___n_params_t)CALL((recv), (SFT_parser___parser_nodes[574] + 2)))
+#define CALL_parser___parser_nodes___ASignature___n_cpar(recv) ((parser___parser_nodes___ASignature___n_cpar_t)CALL((recv), (SFT_parser___parser_nodes[574] + 3)))
+#define CALL_parser___parser_nodes___ASignature___n_type(recv) ((parser___parser_nodes___ASignature___n_type_t)CALL((recv), (SFT_parser___parser_nodes[574] + 4)))
+#define CALL_parser___parser_nodes___ASignature___n_closure_decls(recv) ((parser___parser_nodes___ASignature___n_closure_decls_t)CALL((recv), (SFT_parser___parser_nodes[574] + 5)))
+#define ID_parser___parser_nodes___AParam (SFT_parser___parser_nodes[575])
+#define COLOR_parser___parser_nodes___AParam (SFT_parser___parser_nodes[576])
+#define ATTR_parser___parser_nodes___AParam____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[577] + 0))
+#define ATTR_parser___parser_nodes___AParam____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[577] + 1))
+#define ATTR_parser___parser_nodes___AParam____n_dotdotdot(recv) ATTR(recv, (SFT_parser___parser_nodes[577] + 2))
+#define INIT_TABLE_POS_parser___parser_nodes___AParam (SFT_parser___parser_nodes[578] + 0)
+#define CALL_parser___parser_nodes___AParam___n_id(recv) ((parser___parser_nodes___AParam___n_id_t)CALL((recv), (SFT_parser___parser_nodes[578] + 1)))
+#define CALL_parser___parser_nodes___AParam___n_type(recv) ((parser___parser_nodes___AParam___n_type_t)CALL((recv), (SFT_parser___parser_nodes[578] + 2)))
+#define CALL_parser___parser_nodes___AParam___n_dotdotdot(recv) ((parser___parser_nodes___AParam___n_dotdotdot_t)CALL((recv), (SFT_parser___parser_nodes[578] + 3)))
+#define ID_parser___parser_nodes___AClosureDecl (SFT_parser___parser_nodes[579])
+#define COLOR_parser___parser_nodes___AClosureDecl (SFT_parser___parser_nodes[580])
+#define ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(recv) ATTR(recv, (SFT_parser___parser_nodes[581] + 0))
+#define ATTR_parser___parser_nodes___AClosureDecl____n_bang(recv) ATTR(recv, (SFT_parser___parser_nodes[581] + 1))
+#define ATTR_parser___parser_nodes___AClosureDecl____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[581] + 2))
+#define ATTR_parser___parser_nodes___AClosureDecl____n_signature(recv) ATTR(recv, (SFT_parser___parser_nodes[581] + 3))
+#define ATTR_parser___parser_nodes___AClosureDecl____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[581] + 4))
+#define INIT_TABLE_POS_parser___parser_nodes___AClosureDecl (SFT_parser___parser_nodes[582] + 0)
+#define CALL_parser___parser_nodes___AClosureDecl___n_kwbreak(recv) ((parser___parser_nodes___AClosureDecl___n_kwbreak_t)CALL((recv), (SFT_parser___parser_nodes[582] + 1)))
+#define CALL_parser___parser_nodes___AClosureDecl___n_bang(recv) ((parser___parser_nodes___AClosureDecl___n_bang_t)CALL((recv), (SFT_parser___parser_nodes[582] + 2)))
+#define CALL_parser___parser_nodes___AClosureDecl___n_id(recv) ((parser___parser_nodes___AClosureDecl___n_id_t)CALL((recv), (SFT_parser___parser_nodes[582] + 3)))
+#define CALL_parser___parser_nodes___AClosureDecl___n_signature(recv) ((parser___parser_nodes___AClosureDecl___n_signature_t)CALL((recv), (SFT_parser___parser_nodes[582] + 4)))
+#define CALL_parser___parser_nodes___AClosureDecl___n_expr(recv) ((parser___parser_nodes___AClosureDecl___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[582] + 5)))
+#define ID_parser___parser_nodes___AType (SFT_parser___parser_nodes[583])
+#define COLOR_parser___parser_nodes___AType (SFT_parser___parser_nodes[584])
+#define ATTR_parser___parser_nodes___AType____n_kwnullable(recv) ATTR(recv, (SFT_parser___parser_nodes[585] + 0))
+#define ATTR_parser___parser_nodes___AType____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[585] + 1))
+#define ATTR_parser___parser_nodes___AType____n_types(recv) ATTR(recv, (SFT_parser___parser_nodes[585] + 2))
+#define INIT_TABLE_POS_parser___parser_nodes___AType (SFT_parser___parser_nodes[586] + 0)
+#define CALL_parser___parser_nodes___AType___n_kwnullable(recv) ((parser___parser_nodes___AType___n_kwnullable_t)CALL((recv), (SFT_parser___parser_nodes[586] + 1)))
+#define CALL_parser___parser_nodes___AType___n_id(recv) ((parser___parser_nodes___AType___n_id_t)CALL((recv), (SFT_parser___parser_nodes[586] + 2)))
+#define CALL_parser___parser_nodes___AType___n_types(recv) ((parser___parser_nodes___AType___n_types_t)CALL((recv), (SFT_parser___parser_nodes[586] + 3)))
+#define ID_parser___parser_nodes___ALabel (SFT_parser___parser_nodes[587])
+#define COLOR_parser___parser_nodes___ALabel (SFT_parser___parser_nodes[588])
+#define ATTR_parser___parser_nodes___ALabel____n_kwlabel(recv) ATTR(recv, (SFT_parser___parser_nodes[589] + 0))
+#define ATTR_parser___parser_nodes___ALabel____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[589] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___ALabel (SFT_parser___parser_nodes[590] + 0)
+#define CALL_parser___parser_nodes___ALabel___n_kwlabel(recv) ((parser___parser_nodes___ALabel___n_kwlabel_t)CALL((recv), (SFT_parser___parser_nodes[590] + 1)))
+#define CALL_parser___parser_nodes___ALabel___n_id(recv) ((parser___parser_nodes___ALabel___n_id_t)CALL((recv), (SFT_parser___parser_nodes[590] + 2)))
+#define ID_parser___parser_nodes___AExpr (SFT_parser___parser_nodes[591])
+#define COLOR_parser___parser_nodes___AExpr (SFT_parser___parser_nodes[592])
+#define INIT_TABLE_POS_parser___parser_nodes___AExpr (SFT_parser___parser_nodes[593] + 0)
+#define ID_parser___parser_nodes___ABlockExpr (SFT_parser___parser_nodes[594])
+#define COLOR_parser___parser_nodes___ABlockExpr (SFT_parser___parser_nodes[595])
+#define ATTR_parser___parser_nodes___ABlockExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[596] + 0))
+#define ATTR_parser___parser_nodes___ABlockExpr____n_kwend(recv) ATTR(recv, (SFT_parser___parser_nodes[596] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___ABlockExpr (SFT_parser___parser_nodes[597] + 0)
+#define CALL_parser___parser_nodes___ABlockExpr___n_expr(recv) ((parser___parser_nodes___ABlockExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[597] + 1)))
+#define CALL_parser___parser_nodes___ABlockExpr___n_kwend(recv) ((parser___parser_nodes___ABlockExpr___n_kwend_t)CALL((recv), (SFT_parser___parser_nodes[597] + 2)))
+#define ID_parser___parser_nodes___AVardeclExpr (SFT_parser___parser_nodes[598])
+#define COLOR_parser___parser_nodes___AVardeclExpr (SFT_parser___parser_nodes[599])
+#define ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(recv) ATTR(recv, (SFT_parser___parser_nodes[600] + 0))
+#define ATTR_parser___parser_nodes___AVardeclExpr____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[600] + 1))
+#define ATTR_parser___parser_nodes___AVardeclExpr____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[600] + 2))
+#define ATTR_parser___parser_nodes___AVardeclExpr____n_assign(recv) ATTR(recv, (SFT_parser___parser_nodes[600] + 3))
+#define ATTR_parser___parser_nodes___AVardeclExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[600] + 4))
+#define INIT_TABLE_POS_parser___parser_nodes___AVardeclExpr (SFT_parser___parser_nodes[601] + 0)
+#define CALL_parser___parser_nodes___AVardeclExpr___n_kwvar(recv) ((parser___parser_nodes___AVardeclExpr___n_kwvar_t)CALL((recv), (SFT_parser___parser_nodes[601] + 1)))
+#define CALL_parser___parser_nodes___AVardeclExpr___n_id(recv) ((parser___parser_nodes___AVardeclExpr___n_id_t)CALL((recv), (SFT_parser___parser_nodes[601] + 2)))
+#define CALL_parser___parser_nodes___AVardeclExpr___n_type(recv) ((parser___parser_nodes___AVardeclExpr___n_type_t)CALL((recv), (SFT_parser___parser_nodes[601] + 3)))
+#define CALL_parser___parser_nodes___AVardeclExpr___n_assign(recv) ((parser___parser_nodes___AVardeclExpr___n_assign_t)CALL((recv), (SFT_parser___parser_nodes[601] + 4)))
+#define CALL_parser___parser_nodes___AVardeclExpr___n_expr(recv) ((parser___parser_nodes___AVardeclExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[601] + 5)))
+#define ID_parser___parser_nodes___AReturnExpr (SFT_parser___parser_nodes[602])
+#define COLOR_parser___parser_nodes___AReturnExpr (SFT_parser___parser_nodes[603])
+#define ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(recv) ATTR(recv, (SFT_parser___parser_nodes[604] + 0))
+#define ATTR_parser___parser_nodes___AReturnExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[604] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AReturnExpr (SFT_parser___parser_nodes[605] + 0)
+#define CALL_parser___parser_nodes___AReturnExpr___n_kwreturn(recv) ((parser___parser_nodes___AReturnExpr___n_kwreturn_t)CALL((recv), (SFT_parser___parser_nodes[605] + 1)))
+#define CALL_parser___parser_nodes___AReturnExpr___n_expr(recv) ((parser___parser_nodes___AReturnExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[605] + 2)))
+#define ID_parser___parser_nodes___ALabelable (SFT_parser___parser_nodes[606])
+#define COLOR_parser___parser_nodes___ALabelable (SFT_parser___parser_nodes[607])
+#define ATTR_parser___parser_nodes___ALabelable____n_label(recv) ATTR(recv, (SFT_parser___parser_nodes[608] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ALabelable (SFT_parser___parser_nodes[609] + 0)
+#define CALL_parser___parser_nodes___ALabelable___n_label(recv) ((parser___parser_nodes___ALabelable___n_label_t)CALL((recv), (SFT_parser___parser_nodes[609] + 1)))
+#define ID_parser___parser_nodes___ABreakExpr (SFT_parser___parser_nodes[610])
+#define COLOR_parser___parser_nodes___ABreakExpr (SFT_parser___parser_nodes[611])
+#define ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(recv) ATTR(recv, (SFT_parser___parser_nodes[612] + 0))
+#define ATTR_parser___parser_nodes___ABreakExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[612] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___ABreakExpr (SFT_parser___parser_nodes[613] + 0)
+#define CALL_parser___parser_nodes___ABreakExpr___n_kwbreak(recv) ((parser___parser_nodes___ABreakExpr___n_kwbreak_t)CALL((recv), (SFT_parser___parser_nodes[613] + 1)))
+#define CALL_parser___parser_nodes___ABreakExpr___n_expr(recv) ((parser___parser_nodes___ABreakExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[613] + 2)))
+#define ID_parser___parser_nodes___AAbortExpr (SFT_parser___parser_nodes[614])
+#define COLOR_parser___parser_nodes___AAbortExpr (SFT_parser___parser_nodes[615])
+#define ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(recv) ATTR(recv, (SFT_parser___parser_nodes[616] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AAbortExpr (SFT_parser___parser_nodes[617] + 0)
+#define CALL_parser___parser_nodes___AAbortExpr___n_kwabort(recv) ((parser___parser_nodes___AAbortExpr___n_kwabort_t)CALL((recv), (SFT_parser___parser_nodes[617] + 1)))
+#define ID_parser___parser_nodes___AContinueExpr (SFT_parser___parser_nodes[618])
+#define COLOR_parser___parser_nodes___AContinueExpr (SFT_parser___parser_nodes[619])
+#define ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(recv) ATTR(recv, (SFT_parser___parser_nodes[620] + 0))
+#define ATTR_parser___parser_nodes___AContinueExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[620] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AContinueExpr (SFT_parser___parser_nodes[621] + 0)
+#define CALL_parser___parser_nodes___AContinueExpr___n_kwcontinue(recv) ((parser___parser_nodes___AContinueExpr___n_kwcontinue_t)CALL((recv), (SFT_parser___parser_nodes[621] + 1)))
+#define CALL_parser___parser_nodes___AContinueExpr___n_expr(recv) ((parser___parser_nodes___AContinueExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[621] + 2)))
+#define ID_parser___parser_nodes___ADoExpr (SFT_parser___parser_nodes[622])
+#define COLOR_parser___parser_nodes___ADoExpr (SFT_parser___parser_nodes[623])
+#define ATTR_parser___parser_nodes___ADoExpr____n_kwdo(recv) ATTR(recv, (SFT_parser___parser_nodes[624] + 0))
+#define ATTR_parser___parser_nodes___ADoExpr____n_block(recv) ATTR(recv, (SFT_parser___parser_nodes[624] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___ADoExpr (SFT_parser___parser_nodes[625] + 0)
+#define CALL_parser___parser_nodes___ADoExpr___n_kwdo(recv) ((parser___parser_nodes___ADoExpr___n_kwdo_t)CALL((recv), (SFT_parser___parser_nodes[625] + 1)))
+#define CALL_parser___parser_nodes___ADoExpr___n_block(recv) ((parser___parser_nodes___ADoExpr___n_block_t)CALL((recv), (SFT_parser___parser_nodes[625] + 2)))
+#define ID_parser___parser_nodes___AIfExpr (SFT_parser___parser_nodes[626])
+#define COLOR_parser___parser_nodes___AIfExpr (SFT_parser___parser_nodes[627])
+#define ATTR_parser___parser_nodes___AIfExpr____n_kwif(recv) ATTR(recv, (SFT_parser___parser_nodes[628] + 0))
+#define ATTR_parser___parser_nodes___AIfExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[628] + 1))
+#define ATTR_parser___parser_nodes___AIfExpr____n_then(recv) ATTR(recv, (SFT_parser___parser_nodes[628] + 2))
+#define ATTR_parser___parser_nodes___AIfExpr____n_else(recv) ATTR(recv, (SFT_parser___parser_nodes[628] + 3))
+#define INIT_TABLE_POS_parser___parser_nodes___AIfExpr (SFT_parser___parser_nodes[629] + 0)
+#define CALL_parser___parser_nodes___AIfExpr___n_kwif(recv) ((parser___parser_nodes___AIfExpr___n_kwif_t)CALL((recv), (SFT_parser___parser_nodes[629] + 1)))
+#define CALL_parser___parser_nodes___AIfExpr___n_expr(recv) ((parser___parser_nodes___AIfExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[629] + 2)))
+#define CALL_parser___parser_nodes___AIfExpr___n_then(recv) ((parser___parser_nodes___AIfExpr___n_then_t)CALL((recv), (SFT_parser___parser_nodes[629] + 3)))
+#define CALL_parser___parser_nodes___AIfExpr___n_else(recv) ((parser___parser_nodes___AIfExpr___n_else_t)CALL((recv), (SFT_parser___parser_nodes[629] + 4)))
+#define ID_parser___parser_nodes___AIfexprExpr (SFT_parser___parser_nodes[630])
+#define COLOR_parser___parser_nodes___AIfexprExpr (SFT_parser___parser_nodes[631])
+#define ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(recv) ATTR(recv, (SFT_parser___parser_nodes[632] + 0))
+#define ATTR_parser___parser_nodes___AIfexprExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[632] + 1))
+#define ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(recv) ATTR(recv, (SFT_parser___parser_nodes[632] + 2))
+#define ATTR_parser___parser_nodes___AIfexprExpr____n_then(recv) ATTR(recv, (SFT_parser___parser_nodes[632] + 3))
+#define ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(recv) ATTR(recv, (SFT_parser___parser_nodes[632] + 4))
+#define ATTR_parser___parser_nodes___AIfexprExpr____n_else(recv) ATTR(recv, (SFT_parser___parser_nodes[632] + 5))
+#define INIT_TABLE_POS_parser___parser_nodes___AIfexprExpr (SFT_parser___parser_nodes[633] + 0)
+#define CALL_parser___parser_nodes___AIfexprExpr___n_kwif(recv) ((parser___parser_nodes___AIfexprExpr___n_kwif_t)CALL((recv), (SFT_parser___parser_nodes[633] + 1)))
+#define CALL_parser___parser_nodes___AIfexprExpr___n_expr(recv) ((parser___parser_nodes___AIfexprExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[633] + 2)))
+#define CALL_parser___parser_nodes___AIfexprExpr___n_kwthen(recv) ((parser___parser_nodes___AIfexprExpr___n_kwthen_t)CALL((recv), (SFT_parser___parser_nodes[633] + 3)))
+#define CALL_parser___parser_nodes___AIfexprExpr___n_then(recv) ((parser___parser_nodes___AIfexprExpr___n_then_t)CALL((recv), (SFT_parser___parser_nodes[633] + 4)))
+#define CALL_parser___parser_nodes___AIfexprExpr___n_kwelse(recv) ((parser___parser_nodes___AIfexprExpr___n_kwelse_t)CALL((recv), (SFT_parser___parser_nodes[633] + 5)))
+#define CALL_parser___parser_nodes___AIfexprExpr___n_else(recv) ((parser___parser_nodes___AIfexprExpr___n_else_t)CALL((recv), (SFT_parser___parser_nodes[633] + 6)))
+#define ID_parser___parser_nodes___AWhileExpr (SFT_parser___parser_nodes[634])
+#define COLOR_parser___parser_nodes___AWhileExpr (SFT_parser___parser_nodes[635])
+#define ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(recv) ATTR(recv, (SFT_parser___parser_nodes[636] + 0))
+#define ATTR_parser___parser_nodes___AWhileExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[636] + 1))
+#define ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(recv) ATTR(recv, (SFT_parser___parser_nodes[636] + 2))
+#define ATTR_parser___parser_nodes___AWhileExpr____n_block(recv) ATTR(recv, (SFT_parser___parser_nodes[636] + 3))
+#define INIT_TABLE_POS_parser___parser_nodes___AWhileExpr (SFT_parser___parser_nodes[637] + 0)
+#define CALL_parser___parser_nodes___AWhileExpr___n_kwwhile(recv) ((parser___parser_nodes___AWhileExpr___n_kwwhile_t)CALL((recv), (SFT_parser___parser_nodes[637] + 1)))
+#define CALL_parser___parser_nodes___AWhileExpr___n_expr(recv) ((parser___parser_nodes___AWhileExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[637] + 2)))
+#define CALL_parser___parser_nodes___AWhileExpr___n_kwdo(recv) ((parser___parser_nodes___AWhileExpr___n_kwdo_t)CALL((recv), (SFT_parser___parser_nodes[637] + 3)))
+#define CALL_parser___parser_nodes___AWhileExpr___n_block(recv) ((parser___parser_nodes___AWhileExpr___n_block_t)CALL((recv), (SFT_parser___parser_nodes[637] + 4)))
+#define ID_parser___parser_nodes___ALoopExpr (SFT_parser___parser_nodes[638])
+#define COLOR_parser___parser_nodes___ALoopExpr (SFT_parser___parser_nodes[639])
+#define ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(recv) ATTR(recv, (SFT_parser___parser_nodes[640] + 0))
+#define ATTR_parser___parser_nodes___ALoopExpr____n_block(recv) ATTR(recv, (SFT_parser___parser_nodes[640] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___ALoopExpr (SFT_parser___parser_nodes[641] + 0)
+#define CALL_parser___parser_nodes___ALoopExpr___n_kwloop(recv) ((parser___parser_nodes___ALoopExpr___n_kwloop_t)CALL((recv), (SFT_parser___parser_nodes[641] + 1)))
+#define CALL_parser___parser_nodes___ALoopExpr___n_block(recv) ((parser___parser_nodes___ALoopExpr___n_block_t)CALL((recv), (SFT_parser___parser_nodes[641] + 2)))
+#define ID_parser___parser_nodes___AForExpr (SFT_parser___parser_nodes[642])
+#define COLOR_parser___parser_nodes___AForExpr (SFT_parser___parser_nodes[643])
+#define ATTR_parser___parser_nodes___AForExpr____n_kwfor(recv) ATTR(recv, (SFT_parser___parser_nodes[644] + 0))
+#define ATTR_parser___parser_nodes___AForExpr____n_ids(recv) ATTR(recv, (SFT_parser___parser_nodes[644] + 1))
+#define ATTR_parser___parser_nodes___AForExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[644] + 2))
+#define ATTR_parser___parser_nodes___AForExpr____n_kwdo(recv) ATTR(recv, (SFT_parser___parser_nodes[644] + 3))
+#define ATTR_parser___parser_nodes___AForExpr____n_block(recv) ATTR(recv, (SFT_parser___parser_nodes[644] + 4))
+#define INIT_TABLE_POS_parser___parser_nodes___AForExpr (SFT_parser___parser_nodes[645] + 0)
+#define CALL_parser___parser_nodes___AForExpr___n_kwfor(recv) ((parser___parser_nodes___AForExpr___n_kwfor_t)CALL((recv), (SFT_parser___parser_nodes[645] + 1)))
+#define CALL_parser___parser_nodes___AForExpr___n_ids(recv) ((parser___parser_nodes___AForExpr___n_ids_t)CALL((recv), (SFT_parser___parser_nodes[645] + 2)))
+#define CALL_parser___parser_nodes___AForExpr___n_expr(recv) ((parser___parser_nodes___AForExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[645] + 3)))
+#define CALL_parser___parser_nodes___AForExpr___n_kwdo(recv) ((parser___parser_nodes___AForExpr___n_kwdo_t)CALL((recv), (SFT_parser___parser_nodes[645] + 4)))
+#define CALL_parser___parser_nodes___AForExpr___n_block(recv) ((parser___parser_nodes___AForExpr___n_block_t)CALL((recv), (SFT_parser___parser_nodes[645] + 5)))
+#define ID_parser___parser_nodes___AAssertExpr (SFT_parser___parser_nodes[646])
+#define COLOR_parser___parser_nodes___AAssertExpr (SFT_parser___parser_nodes[647])
+#define ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(recv) ATTR(recv, (SFT_parser___parser_nodes[648] + 0))
+#define ATTR_parser___parser_nodes___AAssertExpr____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[648] + 1))
+#define ATTR_parser___parser_nodes___AAssertExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[648] + 2))
+#define ATTR_parser___parser_nodes___AAssertExpr____n_else(recv) ATTR(recv, (SFT_parser___parser_nodes[648] + 3))
+#define INIT_TABLE_POS_parser___parser_nodes___AAssertExpr (SFT_parser___parser_nodes[649] + 0)
+#define CALL_parser___parser_nodes___AAssertExpr___n_kwassert(recv) ((parser___parser_nodes___AAssertExpr___n_kwassert_t)CALL((recv), (SFT_parser___parser_nodes[649] + 1)))
+#define CALL_parser___parser_nodes___AAssertExpr___n_id(recv) ((parser___parser_nodes___AAssertExpr___n_id_t)CALL((recv), (SFT_parser___parser_nodes[649] + 2)))
+#define CALL_parser___parser_nodes___AAssertExpr___n_expr(recv) ((parser___parser_nodes___AAssertExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[649] + 3)))
+#define CALL_parser___parser_nodes___AAssertExpr___n_else(recv) ((parser___parser_nodes___AAssertExpr___n_else_t)CALL((recv), (SFT_parser___parser_nodes[649] + 4)))
+#define ID_parser___parser_nodes___AAssignFormExpr (SFT_parser___parser_nodes[650])
+#define COLOR_parser___parser_nodes___AAssignFormExpr (SFT_parser___parser_nodes[651])
+#define ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(recv) ATTR(recv, (SFT_parser___parser_nodes[652] + 0))
+#define ATTR_parser___parser_nodes___AAssignFormExpr____n_value(recv) ATTR(recv, (SFT_parser___parser_nodes[652] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AAssignFormExpr (SFT_parser___parser_nodes[653] + 0)
+#define CALL_parser___parser_nodes___AAssignFormExpr___n_assign(recv) ((parser___parser_nodes___AAssignFormExpr___n_assign_t)CALL((recv), (SFT_parser___parser_nodes[653] + 1)))
+#define CALL_parser___parser_nodes___AAssignFormExpr___n_value(recv) ((parser___parser_nodes___AAssignFormExpr___n_value_t)CALL((recv), (SFT_parser___parser_nodes[653] + 2)))
+#define ID_parser___parser_nodes___AReassignFormExpr (SFT_parser___parser_nodes[654])
+#define COLOR_parser___parser_nodes___AReassignFormExpr (SFT_parser___parser_nodes[655])
+#define ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(recv) ATTR(recv, (SFT_parser___parser_nodes[656] + 0))
+#define ATTR_parser___parser_nodes___AReassignFormExpr____n_value(recv) ATTR(recv, (SFT_parser___parser_nodes[656] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AReassignFormExpr (SFT_parser___parser_nodes[657] + 0)
+#define CALL_parser___parser_nodes___AReassignFormExpr___n_assign_op(recv) ((parser___parser_nodes___AReassignFormExpr___n_assign_op_t)CALL((recv), (SFT_parser___parser_nodes[657] + 1)))
+#define CALL_parser___parser_nodes___AReassignFormExpr___n_value(recv) ((parser___parser_nodes___AReassignFormExpr___n_value_t)CALL((recv), (SFT_parser___parser_nodes[657] + 2)))
+#define ID_parser___parser_nodes___AOnceExpr (SFT_parser___parser_nodes[658])
+#define COLOR_parser___parser_nodes___AOnceExpr (SFT_parser___parser_nodes[659])
+#define ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(recv) ATTR(recv, (SFT_parser___parser_nodes[660] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AOnceExpr (SFT_parser___parser_nodes[661] + 0)
+#define CALL_parser___parser_nodes___AOnceExpr___n_kwonce(recv) ((parser___parser_nodes___AOnceExpr___n_kwonce_t)CALL((recv), (SFT_parser___parser_nodes[661] + 1)))
+#define ID_parser___parser_nodes___ASendExpr (SFT_parser___parser_nodes[662])
+#define COLOR_parser___parser_nodes___ASendExpr (SFT_parser___parser_nodes[663])
+#define ATTR_parser___parser_nodes___ASendExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[664] + 0))
+#define ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(recv) ATTR(recv, (SFT_parser___parser_nodes[664] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___ASendExpr (SFT_parser___parser_nodes[665] + 0)
+#define CALL_parser___parser_nodes___ASendExpr___n_expr(recv) ((parser___parser_nodes___ASendExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[665] + 1)))
+#define CALL_parser___parser_nodes___ASendExpr___n_closure_defs(recv) ((parser___parser_nodes___ASendExpr___n_closure_defs_t)CALL((recv), (SFT_parser___parser_nodes[665] + 2)))
+#define ID_parser___parser_nodes___ABinopExpr (SFT_parser___parser_nodes[666])
+#define COLOR_parser___parser_nodes___ABinopExpr (SFT_parser___parser_nodes[667])
+#define ATTR_parser___parser_nodes___ABinopExpr____n_expr2(recv) ATTR(recv, (SFT_parser___parser_nodes[668] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ABinopExpr (SFT_parser___parser_nodes[669] + 0)
+#define CALL_parser___parser_nodes___ABinopExpr___n_expr2(recv) ((parser___parser_nodes___ABinopExpr___n_expr2_t)CALL((recv), (SFT_parser___parser_nodes[669] + 1)))
+#define ID_parser___parser_nodes___ABoolExpr (SFT_parser___parser_nodes[670])
+#define COLOR_parser___parser_nodes___ABoolExpr (SFT_parser___parser_nodes[671])
+#define INIT_TABLE_POS_parser___parser_nodes___ABoolExpr (SFT_parser___parser_nodes[672] + 0)
+#define ID_parser___parser_nodes___AOrExpr (SFT_parser___parser_nodes[673])
+#define COLOR_parser___parser_nodes___AOrExpr (SFT_parser___parser_nodes[674])
+#define ATTR_parser___parser_nodes___AOrExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[675] + 0))
+#define ATTR_parser___parser_nodes___AOrExpr____n_expr2(recv) ATTR(recv, (SFT_parser___parser_nodes[675] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AOrExpr (SFT_parser___parser_nodes[676] + 0)
+#define CALL_parser___parser_nodes___AOrExpr___n_expr(recv) ((parser___parser_nodes___AOrExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[676] + 1)))
+#define CALL_parser___parser_nodes___AOrExpr___n_expr2(recv) ((parser___parser_nodes___AOrExpr___n_expr2_t)CALL((recv), (SFT_parser___parser_nodes[676] + 2)))
+#define ID_parser___parser_nodes___AAndExpr (SFT_parser___parser_nodes[677])
+#define COLOR_parser___parser_nodes___AAndExpr (SFT_parser___parser_nodes[678])
+#define ATTR_parser___parser_nodes___AAndExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[679] + 0))
+#define ATTR_parser___parser_nodes___AAndExpr____n_expr2(recv) ATTR(recv, (SFT_parser___parser_nodes[679] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AAndExpr (SFT_parser___parser_nodes[680] + 0)
+#define CALL_parser___parser_nodes___AAndExpr___n_expr(recv) ((parser___parser_nodes___AAndExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[680] + 1)))
+#define CALL_parser___parser_nodes___AAndExpr___n_expr2(recv) ((parser___parser_nodes___AAndExpr___n_expr2_t)CALL((recv), (SFT_parser___parser_nodes[680] + 2)))
+#define ID_parser___parser_nodes___AOrElseExpr (SFT_parser___parser_nodes[681])
+#define COLOR_parser___parser_nodes___AOrElseExpr (SFT_parser___parser_nodes[682])
+#define ATTR_parser___parser_nodes___AOrElseExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[683] + 0))
+#define ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(recv) ATTR(recv, (SFT_parser___parser_nodes[683] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AOrElseExpr (SFT_parser___parser_nodes[684] + 0)
+#define CALL_parser___parser_nodes___AOrElseExpr___n_expr(recv) ((parser___parser_nodes___AOrElseExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[684] + 1)))
+#define CALL_parser___parser_nodes___AOrElseExpr___n_expr2(recv) ((parser___parser_nodes___AOrElseExpr___n_expr2_t)CALL((recv), (SFT_parser___parser_nodes[684] + 2)))
+#define ID_parser___parser_nodes___ANotExpr (SFT_parser___parser_nodes[685])
+#define COLOR_parser___parser_nodes___ANotExpr (SFT_parser___parser_nodes[686])
+#define ATTR_parser___parser_nodes___ANotExpr____n_kwnot(recv) ATTR(recv, (SFT_parser___parser_nodes[687] + 0))
+#define ATTR_parser___parser_nodes___ANotExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[687] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___ANotExpr (SFT_parser___parser_nodes[688] + 0)
+#define CALL_parser___parser_nodes___ANotExpr___n_kwnot(recv) ((parser___parser_nodes___ANotExpr___n_kwnot_t)CALL((recv), (SFT_parser___parser_nodes[688] + 1)))
+#define CALL_parser___parser_nodes___ANotExpr___n_expr(recv) ((parser___parser_nodes___ANotExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[688] + 2)))
+#define ID_parser___parser_nodes___AEqExpr (SFT_parser___parser_nodes[689])
+#define COLOR_parser___parser_nodes___AEqExpr (SFT_parser___parser_nodes[690])
+#define INIT_TABLE_POS_parser___parser_nodes___AEqExpr (SFT_parser___parser_nodes[691] + 0)
+#define ID_parser___parser_nodes___AEeExpr (SFT_parser___parser_nodes[692])
+#define COLOR_parser___parser_nodes___AEeExpr (SFT_parser___parser_nodes[693])
+#define ATTR_parser___parser_nodes___AEeExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[694] + 0))
+#define ATTR_parser___parser_nodes___AEeExpr____n_expr2(recv) ATTR(recv, (SFT_parser___parser_nodes[694] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AEeExpr (SFT_parser___parser_nodes[695] + 0)
+#define CALL_parser___parser_nodes___AEeExpr___n_expr(recv) ((parser___parser_nodes___AEeExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[695] + 1)))
+#define CALL_parser___parser_nodes___AEeExpr___n_expr2(recv) ((parser___parser_nodes___AEeExpr___n_expr2_t)CALL((recv), (SFT_parser___parser_nodes[695] + 2)))
+#define ID_parser___parser_nodes___ANeExpr (SFT_parser___parser_nodes[696])
+#define COLOR_parser___parser_nodes___ANeExpr (SFT_parser___parser_nodes[697])
+#define INIT_TABLE_POS_parser___parser_nodes___ANeExpr (SFT_parser___parser_nodes[698] + 0)
+#define ID_parser___parser_nodes___ALtExpr (SFT_parser___parser_nodes[699])
+#define COLOR_parser___parser_nodes___ALtExpr (SFT_parser___parser_nodes[700])
+#define INIT_TABLE_POS_parser___parser_nodes___ALtExpr (SFT_parser___parser_nodes[701] + 0)
+#define ID_parser___parser_nodes___ALeExpr (SFT_parser___parser_nodes[702])
+#define COLOR_parser___parser_nodes___ALeExpr (SFT_parser___parser_nodes[703])
+#define INIT_TABLE_POS_parser___parser_nodes___ALeExpr (SFT_parser___parser_nodes[704] + 0)
+#define ID_parser___parser_nodes___ALlExpr (SFT_parser___parser_nodes[705])
+#define COLOR_parser___parser_nodes___ALlExpr (SFT_parser___parser_nodes[706])
+#define INIT_TABLE_POS_parser___parser_nodes___ALlExpr (SFT_parser___parser_nodes[707] + 0)
+#define ID_parser___parser_nodes___AGtExpr (SFT_parser___parser_nodes[708])
+#define COLOR_parser___parser_nodes___AGtExpr (SFT_parser___parser_nodes[709])
+#define INIT_TABLE_POS_parser___parser_nodes___AGtExpr (SFT_parser___parser_nodes[710] + 0)
+#define ID_parser___parser_nodes___AGeExpr (SFT_parser___parser_nodes[711])
+#define COLOR_parser___parser_nodes___AGeExpr (SFT_parser___parser_nodes[712])
+#define INIT_TABLE_POS_parser___parser_nodes___AGeExpr (SFT_parser___parser_nodes[713] + 0)
+#define ID_parser___parser_nodes___AGgExpr (SFT_parser___parser_nodes[714])
+#define COLOR_parser___parser_nodes___AGgExpr (SFT_parser___parser_nodes[715])
+#define INIT_TABLE_POS_parser___parser_nodes___AGgExpr (SFT_parser___parser_nodes[716] + 0)
+#define ID_parser___parser_nodes___AIsaExpr (SFT_parser___parser_nodes[717])
+#define COLOR_parser___parser_nodes___AIsaExpr (SFT_parser___parser_nodes[718])
+#define ATTR_parser___parser_nodes___AIsaExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[719] + 0))
+#define ATTR_parser___parser_nodes___AIsaExpr____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[719] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AIsaExpr (SFT_parser___parser_nodes[720] + 0)
+#define CALL_parser___parser_nodes___AIsaExpr___n_expr(recv) ((parser___parser_nodes___AIsaExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[720] + 1)))
+#define CALL_parser___parser_nodes___AIsaExpr___n_type(recv) ((parser___parser_nodes___AIsaExpr___n_type_t)CALL((recv), (SFT_parser___parser_nodes[720] + 2)))
+#define ID_parser___parser_nodes___APlusExpr (SFT_parser___parser_nodes[721])
+#define COLOR_parser___parser_nodes___APlusExpr (SFT_parser___parser_nodes[722])
+#define INIT_TABLE_POS_parser___parser_nodes___APlusExpr (SFT_parser___parser_nodes[723] + 0)
+#define ID_parser___parser_nodes___AMinusExpr (SFT_parser___parser_nodes[724])
+#define COLOR_parser___parser_nodes___AMinusExpr (SFT_parser___parser_nodes[725])
+#define INIT_TABLE_POS_parser___parser_nodes___AMinusExpr (SFT_parser___parser_nodes[726] + 0)
+#define ID_parser___parser_nodes___AStarshipExpr (SFT_parser___parser_nodes[727])
+#define COLOR_parser___parser_nodes___AStarshipExpr (SFT_parser___parser_nodes[728])
+#define INIT_TABLE_POS_parser___parser_nodes___AStarshipExpr (SFT_parser___parser_nodes[729] + 0)
+#define ID_parser___parser_nodes___AStarExpr (SFT_parser___parser_nodes[730])
+#define COLOR_parser___parser_nodes___AStarExpr (SFT_parser___parser_nodes[731])
+#define INIT_TABLE_POS_parser___parser_nodes___AStarExpr (SFT_parser___parser_nodes[732] + 0)
+#define ID_parser___parser_nodes___ASlashExpr (SFT_parser___parser_nodes[733])
+#define COLOR_parser___parser_nodes___ASlashExpr (SFT_parser___parser_nodes[734])
+#define INIT_TABLE_POS_parser___parser_nodes___ASlashExpr (SFT_parser___parser_nodes[735] + 0)
+#define ID_parser___parser_nodes___APercentExpr (SFT_parser___parser_nodes[736])
+#define COLOR_parser___parser_nodes___APercentExpr (SFT_parser___parser_nodes[737])
+#define INIT_TABLE_POS_parser___parser_nodes___APercentExpr (SFT_parser___parser_nodes[738] + 0)
+#define ID_parser___parser_nodes___AUminusExpr (SFT_parser___parser_nodes[739])
+#define COLOR_parser___parser_nodes___AUminusExpr (SFT_parser___parser_nodes[740])
+#define ATTR_parser___parser_nodes___AUminusExpr____n_minus(recv) ATTR(recv, (SFT_parser___parser_nodes[741] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AUminusExpr (SFT_parser___parser_nodes[742] + 0)
+#define CALL_parser___parser_nodes___AUminusExpr___n_minus(recv) ((parser___parser_nodes___AUminusExpr___n_minus_t)CALL((recv), (SFT_parser___parser_nodes[742] + 1)))
+#define ID_parser___parser_nodes___ANewExpr (SFT_parser___parser_nodes[743])
+#define COLOR_parser___parser_nodes___ANewExpr (SFT_parser___parser_nodes[744])
+#define ATTR_parser___parser_nodes___ANewExpr____n_kwnew(recv) ATTR(recv, (SFT_parser___parser_nodes[745] + 0))
+#define ATTR_parser___parser_nodes___ANewExpr____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[745] + 1))
+#define ATTR_parser___parser_nodes___ANewExpr____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[745] + 2))
+#define ATTR_parser___parser_nodes___ANewExpr____n_args(recv) ATTR(recv, (SFT_parser___parser_nodes[745] + 3))
+#define INIT_TABLE_POS_parser___parser_nodes___ANewExpr (SFT_parser___parser_nodes[746] + 0)
+#define CALL_parser___parser_nodes___ANewExpr___n_kwnew(recv) ((parser___parser_nodes___ANewExpr___n_kwnew_t)CALL((recv), (SFT_parser___parser_nodes[746] + 1)))
+#define CALL_parser___parser_nodes___ANewExpr___n_type(recv) ((parser___parser_nodes___ANewExpr___n_type_t)CALL((recv), (SFT_parser___parser_nodes[746] + 2)))
+#define CALL_parser___parser_nodes___ANewExpr___n_id(recv) ((parser___parser_nodes___ANewExpr___n_id_t)CALL((recv), (SFT_parser___parser_nodes[746] + 3)))
+#define CALL_parser___parser_nodes___ANewExpr___n_args(recv) ((parser___parser_nodes___ANewExpr___n_args_t)CALL((recv), (SFT_parser___parser_nodes[746] + 4)))
+#define ID_parser___parser_nodes___AAttrFormExpr (SFT_parser___parser_nodes[747])
+#define COLOR_parser___parser_nodes___AAttrFormExpr (SFT_parser___parser_nodes[748])
+#define ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[749] + 0))
+#define ATTR_parser___parser_nodes___AAttrFormExpr____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[749] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AAttrFormExpr (SFT_parser___parser_nodes[750] + 0)
+#define CALL_parser___parser_nodes___AAttrFormExpr___n_expr(recv) ((parser___parser_nodes___AAttrFormExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[750] + 1)))
+#define CALL_parser___parser_nodes___AAttrFormExpr___n_id(recv) ((parser___parser_nodes___AAttrFormExpr___n_id_t)CALL((recv), (SFT_parser___parser_nodes[750] + 2)))
+#define ID_parser___parser_nodes___AAttrExpr (SFT_parser___parser_nodes[751])
+#define COLOR_parser___parser_nodes___AAttrExpr (SFT_parser___parser_nodes[752])
+#define INIT_TABLE_POS_parser___parser_nodes___AAttrExpr (SFT_parser___parser_nodes[753] + 0)
+#define ID_parser___parser_nodes___AAttrAssignExpr (SFT_parser___parser_nodes[754])
+#define COLOR_parser___parser_nodes___AAttrAssignExpr (SFT_parser___parser_nodes[755])
+#define INIT_TABLE_POS_parser___parser_nodes___AAttrAssignExpr (SFT_parser___parser_nodes[756] + 0)
+#define ID_parser___parser_nodes___ACallFormExpr (SFT_parser___parser_nodes[757])
+#define COLOR_parser___parser_nodes___ACallFormExpr (SFT_parser___parser_nodes[758])
+#define ATTR_parser___parser_nodes___ACallFormExpr____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[759] + 0))
+#define ATTR_parser___parser_nodes___ACallFormExpr____n_args(recv) ATTR(recv, (SFT_parser___parser_nodes[759] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___ACallFormExpr (SFT_parser___parser_nodes[760] + 0)
+#define CALL_parser___parser_nodes___ACallFormExpr___n_id(recv) ((parser___parser_nodes___ACallFormExpr___n_id_t)CALL((recv), (SFT_parser___parser_nodes[760] + 1)))
+#define CALL_parser___parser_nodes___ACallFormExpr___n_args(recv) ((parser___parser_nodes___ACallFormExpr___n_args_t)CALL((recv), (SFT_parser___parser_nodes[760] + 2)))
+#define ID_parser___parser_nodes___ASendReassignFormExpr (SFT_parser___parser_nodes[761])
+#define COLOR_parser___parser_nodes___ASendReassignFormExpr (SFT_parser___parser_nodes[762])
+#define INIT_TABLE_POS_parser___parser_nodes___ASendReassignFormExpr (SFT_parser___parser_nodes[763] + 0)
+#define ID_parser___parser_nodes___AAttrReassignExpr (SFT_parser___parser_nodes[764])
+#define COLOR_parser___parser_nodes___AAttrReassignExpr (SFT_parser___parser_nodes[765])
+#define INIT_TABLE_POS_parser___parser_nodes___AAttrReassignExpr (SFT_parser___parser_nodes[766] + 0)
+#define ID_parser___parser_nodes___ACallExpr (SFT_parser___parser_nodes[767])
+#define COLOR_parser___parser_nodes___ACallExpr (SFT_parser___parser_nodes[768])
+#define INIT_TABLE_POS_parser___parser_nodes___ACallExpr (SFT_parser___parser_nodes[769] + 0)
+#define ID_parser___parser_nodes___ACallAssignExpr (SFT_parser___parser_nodes[770])
+#define COLOR_parser___parser_nodes___ACallAssignExpr (SFT_parser___parser_nodes[771])
+#define INIT_TABLE_POS_parser___parser_nodes___ACallAssignExpr (SFT_parser___parser_nodes[772] + 0)
+#define ID_parser___parser_nodes___ACallReassignExpr (SFT_parser___parser_nodes[773])
+#define COLOR_parser___parser_nodes___ACallReassignExpr (SFT_parser___parser_nodes[774])
+#define INIT_TABLE_POS_parser___parser_nodes___ACallReassignExpr (SFT_parser___parser_nodes[775] + 0)
+#define ID_parser___parser_nodes___ASuperExpr (SFT_parser___parser_nodes[776])
+#define COLOR_parser___parser_nodes___ASuperExpr (SFT_parser___parser_nodes[777])
+#define ATTR_parser___parser_nodes___ASuperExpr____n_qualified(recv) ATTR(recv, (SFT_parser___parser_nodes[778] + 0))
+#define ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(recv) ATTR(recv, (SFT_parser___parser_nodes[778] + 1))
+#define ATTR_parser___parser_nodes___ASuperExpr____n_args(recv) ATTR(recv, (SFT_parser___parser_nodes[778] + 2))
+#define INIT_TABLE_POS_parser___parser_nodes___ASuperExpr (SFT_parser___parser_nodes[779] + 0)
+#define CALL_parser___parser_nodes___ASuperExpr___n_qualified(recv) ((parser___parser_nodes___ASuperExpr___n_qualified_t)CALL((recv), (SFT_parser___parser_nodes[779] + 1)))
+#define CALL_parser___parser_nodes___ASuperExpr___n_kwsuper(recv) ((parser___parser_nodes___ASuperExpr___n_kwsuper_t)CALL((recv), (SFT_parser___parser_nodes[779] + 2)))
+#define CALL_parser___parser_nodes___ASuperExpr___n_args(recv) ((parser___parser_nodes___ASuperExpr___n_args_t)CALL((recv), (SFT_parser___parser_nodes[779] + 3)))
+#define ID_parser___parser_nodes___AInitExpr (SFT_parser___parser_nodes[780])
+#define COLOR_parser___parser_nodes___AInitExpr (SFT_parser___parser_nodes[781])
+#define ATTR_parser___parser_nodes___AInitExpr____n_kwinit(recv) ATTR(recv, (SFT_parser___parser_nodes[782] + 0))
+#define ATTR_parser___parser_nodes___AInitExpr____n_args(recv) ATTR(recv, (SFT_parser___parser_nodes[782] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AInitExpr (SFT_parser___parser_nodes[783] + 0)
+#define CALL_parser___parser_nodes___AInitExpr___n_kwinit(recv) ((parser___parser_nodes___AInitExpr___n_kwinit_t)CALL((recv), (SFT_parser___parser_nodes[783] + 1)))
+#define CALL_parser___parser_nodes___AInitExpr___n_args(recv) ((parser___parser_nodes___AInitExpr___n_args_t)CALL((recv), (SFT_parser___parser_nodes[783] + 2)))
+#define ID_parser___parser_nodes___ABraFormExpr (SFT_parser___parser_nodes[784])
+#define COLOR_parser___parser_nodes___ABraFormExpr (SFT_parser___parser_nodes[785])
+#define ATTR_parser___parser_nodes___ABraFormExpr____n_args(recv) ATTR(recv, (SFT_parser___parser_nodes[786] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ABraFormExpr (SFT_parser___parser_nodes[787] + 0)
+#define CALL_parser___parser_nodes___ABraFormExpr___n_args(recv) ((parser___parser_nodes___ABraFormExpr___n_args_t)CALL((recv), (SFT_parser___parser_nodes[787] + 1)))
+#define ID_parser___parser_nodes___ABraExpr (SFT_parser___parser_nodes[788])
+#define COLOR_parser___parser_nodes___ABraExpr (SFT_parser___parser_nodes[789])
+#define INIT_TABLE_POS_parser___parser_nodes___ABraExpr (SFT_parser___parser_nodes[790] + 0)
+#define ID_parser___parser_nodes___ABraAssignExpr (SFT_parser___parser_nodes[791])
+#define COLOR_parser___parser_nodes___ABraAssignExpr (SFT_parser___parser_nodes[792])
+#define INIT_TABLE_POS_parser___parser_nodes___ABraAssignExpr (SFT_parser___parser_nodes[793] + 0)
+#define ID_parser___parser_nodes___AVarFormExpr (SFT_parser___parser_nodes[794])
+#define COLOR_parser___parser_nodes___AVarFormExpr (SFT_parser___parser_nodes[795])
+#define ATTR_parser___parser_nodes___AVarFormExpr____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[796] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AVarFormExpr (SFT_parser___parser_nodes[797] + 0)
+#define CALL_parser___parser_nodes___AVarFormExpr___n_id(recv) ((parser___parser_nodes___AVarFormExpr___n_id_t)CALL((recv), (SFT_parser___parser_nodes[797] + 1)))
+#define ID_parser___parser_nodes___ABraReassignExpr (SFT_parser___parser_nodes[798])
+#define COLOR_parser___parser_nodes___ABraReassignExpr (SFT_parser___parser_nodes[799])
+#define INIT_TABLE_POS_parser___parser_nodes___ABraReassignExpr (SFT_parser___parser_nodes[800] + 0)
+#define ID_parser___parser_nodes___AClosureCallExpr (SFT_parser___parser_nodes[801])
+#define COLOR_parser___parser_nodes___AClosureCallExpr (SFT_parser___parser_nodes[802])
+#define ATTR_parser___parser_nodes___AClosureCallExpr____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[803] + 0))
+#define ATTR_parser___parser_nodes___AClosureCallExpr____n_args(recv) ATTR(recv, (SFT_parser___parser_nodes[803] + 1))
+#define ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(recv) ATTR(recv, (SFT_parser___parser_nodes[803] + 2))
+#define INIT_TABLE_POS_parser___parser_nodes___AClosureCallExpr (SFT_parser___parser_nodes[804] + 0)
+#define CALL_parser___parser_nodes___AClosureCallExpr___n_id(recv) ((parser___parser_nodes___AClosureCallExpr___n_id_t)CALL((recv), (SFT_parser___parser_nodes[804] + 1)))
+#define CALL_parser___parser_nodes___AClosureCallExpr___n_args(recv) ((parser___parser_nodes___AClosureCallExpr___n_args_t)CALL((recv), (SFT_parser___parser_nodes[804] + 2)))
+#define CALL_parser___parser_nodes___AClosureCallExpr___n_closure_defs(recv) ((parser___parser_nodes___AClosureCallExpr___n_closure_defs_t)CALL((recv), (SFT_parser___parser_nodes[804] + 3)))
+#define ID_parser___parser_nodes___AVarExpr (SFT_parser___parser_nodes[805])
+#define COLOR_parser___parser_nodes___AVarExpr (SFT_parser___parser_nodes[806])
+#define INIT_TABLE_POS_parser___parser_nodes___AVarExpr (SFT_parser___parser_nodes[807] + 0)
+#define ID_parser___parser_nodes___AVarAssignExpr (SFT_parser___parser_nodes[808])
+#define COLOR_parser___parser_nodes___AVarAssignExpr (SFT_parser___parser_nodes[809])
+#define INIT_TABLE_POS_parser___parser_nodes___AVarAssignExpr (SFT_parser___parser_nodes[810] + 0)
+#define ID_parser___parser_nodes___AVarReassignExpr (SFT_parser___parser_nodes[811])
+#define COLOR_parser___parser_nodes___AVarReassignExpr (SFT_parser___parser_nodes[812])
+#define INIT_TABLE_POS_parser___parser_nodes___AVarReassignExpr (SFT_parser___parser_nodes[813] + 0)
+#define ID_parser___parser_nodes___ARangeExpr (SFT_parser___parser_nodes[814])
+#define COLOR_parser___parser_nodes___ARangeExpr (SFT_parser___parser_nodes[815])
+#define ATTR_parser___parser_nodes___ARangeExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[816] + 0))
+#define ATTR_parser___parser_nodes___ARangeExpr____n_expr2(recv) ATTR(recv, (SFT_parser___parser_nodes[816] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___ARangeExpr (SFT_parser___parser_nodes[817] + 0)
+#define CALL_parser___parser_nodes___ARangeExpr___n_expr(recv) ((parser___parser_nodes___ARangeExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[817] + 1)))
+#define CALL_parser___parser_nodes___ARangeExpr___n_expr2(recv) ((parser___parser_nodes___ARangeExpr___n_expr2_t)CALL((recv), (SFT_parser___parser_nodes[817] + 2)))
+#define ID_parser___parser_nodes___ACrangeExpr (SFT_parser___parser_nodes[818])
+#define COLOR_parser___parser_nodes___ACrangeExpr (SFT_parser___parser_nodes[819])
+#define ATTR_parser___parser_nodes___ACrangeExpr____n_obra(recv) ATTR(recv, (SFT_parser___parser_nodes[820] + 0))
+#define ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(recv) ATTR(recv, (SFT_parser___parser_nodes[820] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___ACrangeExpr (SFT_parser___parser_nodes[821] + 0)
+#define CALL_parser___parser_nodes___ACrangeExpr___n_obra(recv) ((parser___parser_nodes___ACrangeExpr___n_obra_t)CALL((recv), (SFT_parser___parser_nodes[821] + 1)))
+#define CALL_parser___parser_nodes___ACrangeExpr___n_cbra(recv) ((parser___parser_nodes___ACrangeExpr___n_cbra_t)CALL((recv), (SFT_parser___parser_nodes[821] + 2)))
+#define ID_parser___parser_nodes___AOrangeExpr (SFT_parser___parser_nodes[822])
+#define COLOR_parser___parser_nodes___AOrangeExpr (SFT_parser___parser_nodes[823])
+#define ATTR_parser___parser_nodes___AOrangeExpr____n_obra(recv) ATTR(recv, (SFT_parser___parser_nodes[824] + 0))
+#define ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(recv) ATTR(recv, (SFT_parser___parser_nodes[824] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AOrangeExpr (SFT_parser___parser_nodes[825] + 0)
+#define CALL_parser___parser_nodes___AOrangeExpr___n_obra(recv) ((parser___parser_nodes___AOrangeExpr___n_obra_t)CALL((recv), (SFT_parser___parser_nodes[825] + 1)))
+#define CALL_parser___parser_nodes___AOrangeExpr___n_cbra(recv) ((parser___parser_nodes___AOrangeExpr___n_cbra_t)CALL((recv), (SFT_parser___parser_nodes[825] + 2)))
+#define ID_parser___parser_nodes___AArrayExpr (SFT_parser___parser_nodes[826])
+#define COLOR_parser___parser_nodes___AArrayExpr (SFT_parser___parser_nodes[827])
+#define ATTR_parser___parser_nodes___AArrayExpr____n_exprs(recv) ATTR(recv, (SFT_parser___parser_nodes[828] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AArrayExpr (SFT_parser___parser_nodes[829] + 0)
+#define CALL_parser___parser_nodes___AArrayExpr___n_exprs(recv) ((parser___parser_nodes___AArrayExpr___n_exprs_t)CALL((recv), (SFT_parser___parser_nodes[829] + 1)))
+#define ID_parser___parser_nodes___ASelfExpr (SFT_parser___parser_nodes[830])
+#define COLOR_parser___parser_nodes___ASelfExpr (SFT_parser___parser_nodes[831])
+#define ATTR_parser___parser_nodes___ASelfExpr____n_kwself(recv) ATTR(recv, (SFT_parser___parser_nodes[832] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ASelfExpr (SFT_parser___parser_nodes[833] + 0)
+#define CALL_parser___parser_nodes___ASelfExpr___n_kwself(recv) ((parser___parser_nodes___ASelfExpr___n_kwself_t)CALL((recv), (SFT_parser___parser_nodes[833] + 1)))
+#define ID_parser___parser_nodes___AImplicitSelfExpr (SFT_parser___parser_nodes[834])
+#define COLOR_parser___parser_nodes___AImplicitSelfExpr (SFT_parser___parser_nodes[835])
+#define INIT_TABLE_POS_parser___parser_nodes___AImplicitSelfExpr (SFT_parser___parser_nodes[836] + 0)
+#define ID_parser___parser_nodes___ATrueExpr (SFT_parser___parser_nodes[837])
+#define COLOR_parser___parser_nodes___ATrueExpr (SFT_parser___parser_nodes[838])
+#define ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(recv) ATTR(recv, (SFT_parser___parser_nodes[839] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ATrueExpr (SFT_parser___parser_nodes[840] + 0)
+#define CALL_parser___parser_nodes___ATrueExpr___n_kwtrue(recv) ((parser___parser_nodes___ATrueExpr___n_kwtrue_t)CALL((recv), (SFT_parser___parser_nodes[840] + 1)))
+#define ID_parser___parser_nodes___AFalseExpr (SFT_parser___parser_nodes[841])
+#define COLOR_parser___parser_nodes___AFalseExpr (SFT_parser___parser_nodes[842])
+#define ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(recv) ATTR(recv, (SFT_parser___parser_nodes[843] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AFalseExpr (SFT_parser___parser_nodes[844] + 0)
+#define CALL_parser___parser_nodes___AFalseExpr___n_kwfalse(recv) ((parser___parser_nodes___AFalseExpr___n_kwfalse_t)CALL((recv), (SFT_parser___parser_nodes[844] + 1)))
+#define ID_parser___parser_nodes___ANullExpr (SFT_parser___parser_nodes[845])
+#define COLOR_parser___parser_nodes___ANullExpr (SFT_parser___parser_nodes[846])
+#define ATTR_parser___parser_nodes___ANullExpr____n_kwnull(recv) ATTR(recv, (SFT_parser___parser_nodes[847] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ANullExpr (SFT_parser___parser_nodes[848] + 0)
+#define CALL_parser___parser_nodes___ANullExpr___n_kwnull(recv) ((parser___parser_nodes___ANullExpr___n_kwnull_t)CALL((recv), (SFT_parser___parser_nodes[848] + 1)))
+#define ID_parser___parser_nodes___AIntExpr (SFT_parser___parser_nodes[849])
+#define COLOR_parser___parser_nodes___AIntExpr (SFT_parser___parser_nodes[850])
+#define ATTR_parser___parser_nodes___AIntExpr____n_number(recv) ATTR(recv, (SFT_parser___parser_nodes[851] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AIntExpr (SFT_parser___parser_nodes[852] + 0)
+#define CALL_parser___parser_nodes___AIntExpr___n_number(recv) ((parser___parser_nodes___AIntExpr___n_number_t)CALL((recv), (SFT_parser___parser_nodes[852] + 1)))
+#define ID_parser___parser_nodes___AFloatExpr (SFT_parser___parser_nodes[853])
+#define COLOR_parser___parser_nodes___AFloatExpr (SFT_parser___parser_nodes[854])
+#define ATTR_parser___parser_nodes___AFloatExpr____n_float(recv) ATTR(recv, (SFT_parser___parser_nodes[855] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AFloatExpr (SFT_parser___parser_nodes[856] + 0)
+#define CALL_parser___parser_nodes___AFloatExpr___n_float(recv) ((parser___parser_nodes___AFloatExpr___n_float_t)CALL((recv), (SFT_parser___parser_nodes[856] + 1)))
+#define ID_parser___parser_nodes___ACharExpr (SFT_parser___parser_nodes[857])
+#define COLOR_parser___parser_nodes___ACharExpr (SFT_parser___parser_nodes[858])
+#define ATTR_parser___parser_nodes___ACharExpr____n_char(recv) ATTR(recv, (SFT_parser___parser_nodes[859] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ACharExpr (SFT_parser___parser_nodes[860] + 0)
+#define CALL_parser___parser_nodes___ACharExpr___n_char(recv) ((parser___parser_nodes___ACharExpr___n_char_t)CALL((recv), (SFT_parser___parser_nodes[860] + 1)))
+#define ID_parser___parser_nodes___AStringFormExpr (SFT_parser___parser_nodes[861])
+#define COLOR_parser___parser_nodes___AStringFormExpr (SFT_parser___parser_nodes[862])
+#define ATTR_parser___parser_nodes___AStringFormExpr____n_string(recv) ATTR(recv, (SFT_parser___parser_nodes[863] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AStringFormExpr (SFT_parser___parser_nodes[864] + 0)
+#define CALL_parser___parser_nodes___AStringFormExpr___n_string(recv) ((parser___parser_nodes___AStringFormExpr___n_string_t)CALL((recv), (SFT_parser___parser_nodes[864] + 1)))
+#define ID_parser___parser_nodes___AStringExpr (SFT_parser___parser_nodes[865])
+#define COLOR_parser___parser_nodes___AStringExpr (SFT_parser___parser_nodes[866])
+#define INIT_TABLE_POS_parser___parser_nodes___AStringExpr (SFT_parser___parser_nodes[867] + 0)
+#define ID_parser___parser_nodes___AStartStringExpr (SFT_parser___parser_nodes[868])
+#define COLOR_parser___parser_nodes___AStartStringExpr (SFT_parser___parser_nodes[869])
+#define INIT_TABLE_POS_parser___parser_nodes___AStartStringExpr (SFT_parser___parser_nodes[870] + 0)
+#define ID_parser___parser_nodes___AMidStringExpr (SFT_parser___parser_nodes[871])
+#define COLOR_parser___parser_nodes___AMidStringExpr (SFT_parser___parser_nodes[872])
+#define INIT_TABLE_POS_parser___parser_nodes___AMidStringExpr (SFT_parser___parser_nodes[873] + 0)
+#define ID_parser___parser_nodes___AEndStringExpr (SFT_parser___parser_nodes[874])
+#define COLOR_parser___parser_nodes___AEndStringExpr (SFT_parser___parser_nodes[875])
+#define INIT_TABLE_POS_parser___parser_nodes___AEndStringExpr (SFT_parser___parser_nodes[876] + 0)
+#define ID_parser___parser_nodes___ASuperstringExpr (SFT_parser___parser_nodes[877])
+#define COLOR_parser___parser_nodes___ASuperstringExpr (SFT_parser___parser_nodes[878])
+#define ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(recv) ATTR(recv, (SFT_parser___parser_nodes[879] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ASuperstringExpr (SFT_parser___parser_nodes[880] + 0)
+#define CALL_parser___parser_nodes___ASuperstringExpr___n_exprs(recv) ((parser___parser_nodes___ASuperstringExpr___n_exprs_t)CALL((recv), (SFT_parser___parser_nodes[880] + 1)))
+#define ID_parser___parser_nodes___AParExpr (SFT_parser___parser_nodes[881])
+#define COLOR_parser___parser_nodes___AParExpr (SFT_parser___parser_nodes[882])
+#define ATTR_parser___parser_nodes___AParExpr____n_opar(recv) ATTR(recv, (SFT_parser___parser_nodes[883] + 0))
+#define ATTR_parser___parser_nodes___AParExpr____n_cpar(recv) ATTR(recv, (SFT_parser___parser_nodes[883] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AParExpr (SFT_parser___parser_nodes[884] + 0)
+#define CALL_parser___parser_nodes___AParExpr___n_opar(recv) ((parser___parser_nodes___AParExpr___n_opar_t)CALL((recv), (SFT_parser___parser_nodes[884] + 1)))
+#define CALL_parser___parser_nodes___AParExpr___n_cpar(recv) ((parser___parser_nodes___AParExpr___n_cpar_t)CALL((recv), (SFT_parser___parser_nodes[884] + 2)))
+#define ID_parser___parser_nodes___AProxyExpr (SFT_parser___parser_nodes[885])
+#define COLOR_parser___parser_nodes___AProxyExpr (SFT_parser___parser_nodes[886])
+#define ATTR_parser___parser_nodes___AProxyExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[887] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AProxyExpr (SFT_parser___parser_nodes[888] + 0)
+#define CALL_parser___parser_nodes___AProxyExpr___n_expr(recv) ((parser___parser_nodes___AProxyExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[888] + 1)))
+#define ID_parser___parser_nodes___AAsCastExpr (SFT_parser___parser_nodes[889])
+#define COLOR_parser___parser_nodes___AAsCastExpr (SFT_parser___parser_nodes[890])
+#define ATTR_parser___parser_nodes___AAsCastExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[891] + 0))
+#define ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(recv) ATTR(recv, (SFT_parser___parser_nodes[891] + 1))
+#define ATTR_parser___parser_nodes___AAsCastExpr____n_opar(recv) ATTR(recv, (SFT_parser___parser_nodes[891] + 2))
+#define ATTR_parser___parser_nodes___AAsCastExpr____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[891] + 3))
+#define ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(recv) ATTR(recv, (SFT_parser___parser_nodes[891] + 4))
+#define INIT_TABLE_POS_parser___parser_nodes___AAsCastExpr (SFT_parser___parser_nodes[892] + 0)
+#define CALL_parser___parser_nodes___AAsCastExpr___n_expr(recv) ((parser___parser_nodes___AAsCastExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[892] + 1)))
+#define CALL_parser___parser_nodes___AAsCastExpr___n_kwas(recv) ((parser___parser_nodes___AAsCastExpr___n_kwas_t)CALL((recv), (SFT_parser___parser_nodes[892] + 2)))
+#define CALL_parser___parser_nodes___AAsCastExpr___n_opar(recv) ((parser___parser_nodes___AAsCastExpr___n_opar_t)CALL((recv), (SFT_parser___parser_nodes[892] + 3)))
+#define CALL_parser___parser_nodes___AAsCastExpr___n_type(recv) ((parser___parser_nodes___AAsCastExpr___n_type_t)CALL((recv), (SFT_parser___parser_nodes[892] + 4)))
+#define CALL_parser___parser_nodes___AAsCastExpr___n_cpar(recv) ((parser___parser_nodes___AAsCastExpr___n_cpar_t)CALL((recv), (SFT_parser___parser_nodes[892] + 5)))
+#define ID_parser___parser_nodes___AAsNotnullExpr (SFT_parser___parser_nodes[893])
+#define COLOR_parser___parser_nodes___AAsNotnullExpr (SFT_parser___parser_nodes[894])
+#define ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[895] + 0))
+#define ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(recv) ATTR(recv, (SFT_parser___parser_nodes[895] + 1))
+#define ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(recv) ATTR(recv, (SFT_parser___parser_nodes[895] + 2))
+#define ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(recv) ATTR(recv, (SFT_parser___parser_nodes[895] + 3))
+#define ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(recv) ATTR(recv, (SFT_parser___parser_nodes[895] + 4))
+#define ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(recv) ATTR(recv, (SFT_parser___parser_nodes[895] + 5))
+#define INIT_TABLE_POS_parser___parser_nodes___AAsNotnullExpr (SFT_parser___parser_nodes[896] + 0)
+#define CALL_parser___parser_nodes___AAsNotnullExpr___n_expr(recv) ((parser___parser_nodes___AAsNotnullExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[896] + 1)))
+#define CALL_parser___parser_nodes___AAsNotnullExpr___n_kwas(recv) ((parser___parser_nodes___AAsNotnullExpr___n_kwas_t)CALL((recv), (SFT_parser___parser_nodes[896] + 2)))
+#define CALL_parser___parser_nodes___AAsNotnullExpr___n_opar(recv) ((parser___parser_nodes___AAsNotnullExpr___n_opar_t)CALL((recv), (SFT_parser___parser_nodes[896] + 3)))
+#define CALL_parser___parser_nodes___AAsNotnullExpr___n_kwnot(recv) ((parser___parser_nodes___AAsNotnullExpr___n_kwnot_t)CALL((recv), (SFT_parser___parser_nodes[896] + 4)))
+#define CALL_parser___parser_nodes___AAsNotnullExpr___n_kwnull(recv) ((parser___parser_nodes___AAsNotnullExpr___n_kwnull_t)CALL((recv), (SFT_parser___parser_nodes[896] + 5)))
+#define CALL_parser___parser_nodes___AAsNotnullExpr___n_cpar(recv) ((parser___parser_nodes___AAsNotnullExpr___n_cpar_t)CALL((recv), (SFT_parser___parser_nodes[896] + 6)))
+#define ID_parser___parser_nodes___AIssetAttrExpr (SFT_parser___parser_nodes[897])
+#define COLOR_parser___parser_nodes___AIssetAttrExpr (SFT_parser___parser_nodes[898])
+#define ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(recv) ATTR(recv, (SFT_parser___parser_nodes[899] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AIssetAttrExpr (SFT_parser___parser_nodes[900] + 0)
+#define CALL_parser___parser_nodes___AIssetAttrExpr___n_kwisset(recv) ((parser___parser_nodes___AIssetAttrExpr___n_kwisset_t)CALL((recv), (SFT_parser___parser_nodes[900] + 1)))
+#define ID_parser___parser_nodes___AExprs (SFT_parser___parser_nodes[901])
+#define COLOR_parser___parser_nodes___AExprs (SFT_parser___parser_nodes[902])
+#define ATTR_parser___parser_nodes___AExprs____n_exprs(recv) ATTR(recv, (SFT_parser___parser_nodes[903] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AExprs (SFT_parser___parser_nodes[904] + 0)
+#define CALL_parser___parser_nodes___AExprs___n_exprs(recv) ((parser___parser_nodes___AExprs___n_exprs_t)CALL((recv), (SFT_parser___parser_nodes[904] + 1)))
+#define ID_parser___parser_nodes___ADebugTypeExpr (SFT_parser___parser_nodes[905])
+#define COLOR_parser___parser_nodes___ADebugTypeExpr (SFT_parser___parser_nodes[906])
+#define ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(recv) ATTR(recv, (SFT_parser___parser_nodes[907] + 0))
+#define ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(recv) ATTR(recv, (SFT_parser___parser_nodes[907] + 1))
+#define ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[907] + 2))
+#define ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[907] + 3))
+#define INIT_TABLE_POS_parser___parser_nodes___ADebugTypeExpr (SFT_parser___parser_nodes[908] + 0)
+#define CALL_parser___parser_nodes___ADebugTypeExpr___n_kwdebug(recv) ((parser___parser_nodes___ADebugTypeExpr___n_kwdebug_t)CALL((recv), (SFT_parser___parser_nodes[908] + 1)))
+#define CALL_parser___parser_nodes___ADebugTypeExpr___n_kwtype(recv) ((parser___parser_nodes___ADebugTypeExpr___n_kwtype_t)CALL((recv), (SFT_parser___parser_nodes[908] + 2)))
+#define CALL_parser___parser_nodes___ADebugTypeExpr___n_expr(recv) ((parser___parser_nodes___ADebugTypeExpr___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[908] + 3)))
+#define CALL_parser___parser_nodes___ADebugTypeExpr___n_type(recv) ((parser___parser_nodes___ADebugTypeExpr___n_type_t)CALL((recv), (SFT_parser___parser_nodes[908] + 4)))
+#define ID_parser___parser_nodes___AListExprs (SFT_parser___parser_nodes[909])
+#define COLOR_parser___parser_nodes___AListExprs (SFT_parser___parser_nodes[910])
+#define INIT_TABLE_POS_parser___parser_nodes___AListExprs (SFT_parser___parser_nodes[911] + 0)
+#define ID_parser___parser_nodes___AParExprs (SFT_parser___parser_nodes[912])
+#define COLOR_parser___parser_nodes___AParExprs (SFT_parser___parser_nodes[913])
+#define ATTR_parser___parser_nodes___AParExprs____n_opar(recv) ATTR(recv, (SFT_parser___parser_nodes[914] + 0))
+#define ATTR_parser___parser_nodes___AParExprs____n_cpar(recv) ATTR(recv, (SFT_parser___parser_nodes[914] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AParExprs (SFT_parser___parser_nodes[915] + 0)
+#define CALL_parser___parser_nodes___AParExprs___n_opar(recv) ((parser___parser_nodes___AParExprs___n_opar_t)CALL((recv), (SFT_parser___parser_nodes[915] + 1)))
+#define CALL_parser___parser_nodes___AParExprs___n_cpar(recv) ((parser___parser_nodes___AParExprs___n_cpar_t)CALL((recv), (SFT_parser___parser_nodes[915] + 2)))
+#define ID_parser___parser_nodes___ABraExprs (SFT_parser___parser_nodes[916])
+#define COLOR_parser___parser_nodes___ABraExprs (SFT_parser___parser_nodes[917])
+#define ATTR_parser___parser_nodes___ABraExprs____n_obra(recv) ATTR(recv, (SFT_parser___parser_nodes[918] + 0))
+#define ATTR_parser___parser_nodes___ABraExprs____n_cbra(recv) ATTR(recv, (SFT_parser___parser_nodes[918] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___ABraExprs (SFT_parser___parser_nodes[919] + 0)
+#define CALL_parser___parser_nodes___ABraExprs___n_obra(recv) ((parser___parser_nodes___ABraExprs___n_obra_t)CALL((recv), (SFT_parser___parser_nodes[919] + 1)))
+#define CALL_parser___parser_nodes___ABraExprs___n_cbra(recv) ((parser___parser_nodes___ABraExprs___n_cbra_t)CALL((recv), (SFT_parser___parser_nodes[919] + 2)))
+#define ID_parser___parser_nodes___AAssignOp (SFT_parser___parser_nodes[920])
+#define COLOR_parser___parser_nodes___AAssignOp (SFT_parser___parser_nodes[921])
+#define INIT_TABLE_POS_parser___parser_nodes___AAssignOp (SFT_parser___parser_nodes[922] + 0)
+#define ID_parser___parser_nodes___APlusAssignOp (SFT_parser___parser_nodes[923])
+#define COLOR_parser___parser_nodes___APlusAssignOp (SFT_parser___parser_nodes[924])
+#define ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(recv) ATTR(recv, (SFT_parser___parser_nodes[925] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___APlusAssignOp (SFT_parser___parser_nodes[926] + 0)
+#define CALL_parser___parser_nodes___APlusAssignOp___n_pluseq(recv) ((parser___parser_nodes___APlusAssignOp___n_pluseq_t)CALL((recv), (SFT_parser___parser_nodes[926] + 1)))
+#define ID_parser___parser_nodes___AMinusAssignOp (SFT_parser___parser_nodes[927])
+#define COLOR_parser___parser_nodes___AMinusAssignOp (SFT_parser___parser_nodes[928])
+#define ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(recv) ATTR(recv, (SFT_parser___parser_nodes[929] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AMinusAssignOp (SFT_parser___parser_nodes[930] + 0)
+#define CALL_parser___parser_nodes___AMinusAssignOp___n_minuseq(recv) ((parser___parser_nodes___AMinusAssignOp___n_minuseq_t)CALL((recv), (SFT_parser___parser_nodes[930] + 1)))
+#define ID_parser___parser_nodes___AClosureDef (SFT_parser___parser_nodes[931])
+#define COLOR_parser___parser_nodes___AClosureDef (SFT_parser___parser_nodes[932])
+#define ATTR_parser___parser_nodes___AClosureDef____n_bang(recv) ATTR(recv, (SFT_parser___parser_nodes[933] + 0))
+#define ATTR_parser___parser_nodes___AClosureDef____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[933] + 1))
+#define ATTR_parser___parser_nodes___AClosureDef____n_ids(recv) ATTR(recv, (SFT_parser___parser_nodes[933] + 2))
+#define ATTR_parser___parser_nodes___AClosureDef____n_kwdo(recv) ATTR(recv, (SFT_parser___parser_nodes[933] + 3))
+#define ATTR_parser___parser_nodes___AClosureDef____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[933] + 4))
+#define INIT_TABLE_POS_parser___parser_nodes___AClosureDef (SFT_parser___parser_nodes[934] + 0)
+#define CALL_parser___parser_nodes___AClosureDef___n_bang(recv) ((parser___parser_nodes___AClosureDef___n_bang_t)CALL((recv), (SFT_parser___parser_nodes[934] + 1)))
+#define CALL_parser___parser_nodes___AClosureDef___n_id(recv) ((parser___parser_nodes___AClosureDef___n_id_t)CALL((recv), (SFT_parser___parser_nodes[934] + 2)))
+#define CALL_parser___parser_nodes___AClosureDef___n_ids(recv) ((parser___parser_nodes___AClosureDef___n_ids_t)CALL((recv), (SFT_parser___parser_nodes[934] + 3)))
+#define CALL_parser___parser_nodes___AClosureDef___n_kwdo(recv) ((parser___parser_nodes___AClosureDef___n_kwdo_t)CALL((recv), (SFT_parser___parser_nodes[934] + 4)))
+#define CALL_parser___parser_nodes___AClosureDef___n_expr(recv) ((parser___parser_nodes___AClosureDef___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[934] + 5)))
+#define ID_parser___parser_nodes___AClosureId (SFT_parser___parser_nodes[935])
+#define COLOR_parser___parser_nodes___AClosureId (SFT_parser___parser_nodes[936])
+#define INIT_TABLE_POS_parser___parser_nodes___AClosureId (SFT_parser___parser_nodes[937] + 0)
+#define ID_parser___parser_nodes___ASimpleClosureId (SFT_parser___parser_nodes[938])
+#define COLOR_parser___parser_nodes___ASimpleClosureId (SFT_parser___parser_nodes[939])
+#define ATTR_parser___parser_nodes___ASimpleClosureId____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[940] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ASimpleClosureId (SFT_parser___parser_nodes[941] + 0)
+#define CALL_parser___parser_nodes___ASimpleClosureId___n_id(recv) ((parser___parser_nodes___ASimpleClosureId___n_id_t)CALL((recv), (SFT_parser___parser_nodes[941] + 1)))
+#define ID_parser___parser_nodes___ABreakClosureId (SFT_parser___parser_nodes[942])
+#define COLOR_parser___parser_nodes___ABreakClosureId (SFT_parser___parser_nodes[943])
+#define ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(recv) ATTR(recv, (SFT_parser___parser_nodes[944] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ABreakClosureId (SFT_parser___parser_nodes[945] + 0)
+#define CALL_parser___parser_nodes___ABreakClosureId___n_kwbreak(recv) ((parser___parser_nodes___ABreakClosureId___n_kwbreak_t)CALL((recv), (SFT_parser___parser_nodes[945] + 1)))
+#define ID_parser___parser_nodes___AModuleName (SFT_parser___parser_nodes[946])
+#define COLOR_parser___parser_nodes___AModuleName (SFT_parser___parser_nodes[947])
+#define ATTR_parser___parser_nodes___AModuleName____n_quad(recv) ATTR(recv, (SFT_parser___parser_nodes[948] + 0))
+#define ATTR_parser___parser_nodes___AModuleName____n_path(recv) ATTR(recv, (SFT_parser___parser_nodes[948] + 1))
+#define ATTR_parser___parser_nodes___AModuleName____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[948] + 2))
+#define INIT_TABLE_POS_parser___parser_nodes___AModuleName (SFT_parser___parser_nodes[949] + 0)
+#define CALL_parser___parser_nodes___AModuleName___n_quad(recv) ((parser___parser_nodes___AModuleName___n_quad_t)CALL((recv), (SFT_parser___parser_nodes[949] + 1)))
+#define CALL_parser___parser_nodes___AModuleName___n_path(recv) ((parser___parser_nodes___AModuleName___n_path_t)CALL((recv), (SFT_parser___parser_nodes[949] + 2)))
+#define CALL_parser___parser_nodes___AModuleName___n_id(recv) ((parser___parser_nodes___AModuleName___n_id_t)CALL((recv), (SFT_parser___parser_nodes[949] + 3)))
+#define ID_parser___parser_nodes___AInLanguage (SFT_parser___parser_nodes[950])
+#define COLOR_parser___parser_nodes___AInLanguage (SFT_parser___parser_nodes[951])
+#define ATTR_parser___parser_nodes___AInLanguage____n_kwin(recv) ATTR(recv, (SFT_parser___parser_nodes[952] + 0))
+#define ATTR_parser___parser_nodes___AInLanguage____n_string(recv) ATTR(recv, (SFT_parser___parser_nodes[952] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AInLanguage (SFT_parser___parser_nodes[953] + 0)
+#define CALL_parser___parser_nodes___AInLanguage___n_kwin(recv) ((parser___parser_nodes___AInLanguage___n_kwin_t)CALL((recv), (SFT_parser___parser_nodes[953] + 1)))
+#define CALL_parser___parser_nodes___AInLanguage___n_string(recv) ((parser___parser_nodes___AInLanguage___n_string_t)CALL((recv), (SFT_parser___parser_nodes[953] + 2)))
+#define ID_parser___parser_nodes___AExternCodeBlock (SFT_parser___parser_nodes[954])
+#define COLOR_parser___parser_nodes___AExternCodeBlock (SFT_parser___parser_nodes[955])
+#define ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(recv) ATTR(recv, (SFT_parser___parser_nodes[956] + 0))
+#define ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(recv) ATTR(recv, (SFT_parser___parser_nodes[956] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___AExternCodeBlock (SFT_parser___parser_nodes[957] + 0)
+#define CALL_parser___parser_nodes___AExternCodeBlock___n_in_language(recv) ((parser___parser_nodes___AExternCodeBlock___n_in_language_t)CALL((recv), (SFT_parser___parser_nodes[957] + 1)))
+#define CALL_parser___parser_nodes___AExternCodeBlock___n_extern_code_segment(recv) ((parser___parser_nodes___AExternCodeBlock___n_extern_code_segment_t)CALL((recv), (SFT_parser___parser_nodes[957] + 2)))
+#define ID_parser___parser_nodes___AQualified (SFT_parser___parser_nodes[958])
+#define COLOR_parser___parser_nodes___AQualified (SFT_parser___parser_nodes[959])
+#define ATTR_parser___parser_nodes___AQualified____n_quad(recv) ATTR(recv, (SFT_parser___parser_nodes[960] + 0))
+#define ATTR_parser___parser_nodes___AQualified____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[960] + 1))
+#define ATTR_parser___parser_nodes___AQualified____n_classid(recv) ATTR(recv, (SFT_parser___parser_nodes[960] + 2))
+#define INIT_TABLE_POS_parser___parser_nodes___AQualified (SFT_parser___parser_nodes[961] + 0)
+#define CALL_parser___parser_nodes___AQualified___n_quad(recv) ((parser___parser_nodes___AQualified___n_quad_t)CALL((recv), (SFT_parser___parser_nodes[961] + 1)))
+#define CALL_parser___parser_nodes___AQualified___n_id(recv) ((parser___parser_nodes___AQualified___n_id_t)CALL((recv), (SFT_parser___parser_nodes[961] + 2)))
+#define CALL_parser___parser_nodes___AQualified___n_classid(recv) ((parser___parser_nodes___AQualified___n_classid_t)CALL((recv), (SFT_parser___parser_nodes[961] + 3)))
+#define ID_parser___parser_nodes___ADoc (SFT_parser___parser_nodes[962])
+#define COLOR_parser___parser_nodes___ADoc (SFT_parser___parser_nodes[963])
+#define ATTR_parser___parser_nodes___ADoc____n_comment(recv) ATTR(recv, (SFT_parser___parser_nodes[964] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ADoc (SFT_parser___parser_nodes[965] + 0)
+#define CALL_parser___parser_nodes___ADoc___n_comment(recv) ((parser___parser_nodes___ADoc___n_comment_t)CALL((recv), (SFT_parser___parser_nodes[965] + 1)))
+#define ID_parser___parser_nodes___AAnnotations (SFT_parser___parser_nodes[966])
+#define COLOR_parser___parser_nodes___AAnnotations (SFT_parser___parser_nodes[967])
+#define ATTR_parser___parser_nodes___AAnnotations____n_at(recv) ATTR(recv, (SFT_parser___parser_nodes[968] + 0))
+#define ATTR_parser___parser_nodes___AAnnotations____n_opar(recv) ATTR(recv, (SFT_parser___parser_nodes[968] + 1))
+#define ATTR_parser___parser_nodes___AAnnotations____n_items(recv) ATTR(recv, (SFT_parser___parser_nodes[968] + 2))
+#define ATTR_parser___parser_nodes___AAnnotations____n_cpar(recv) ATTR(recv, (SFT_parser___parser_nodes[968] + 3))
+#define INIT_TABLE_POS_parser___parser_nodes___AAnnotations (SFT_parser___parser_nodes[969] + 0)
+#define CALL_parser___parser_nodes___AAnnotations___n_at(recv) ((parser___parser_nodes___AAnnotations___n_at_t)CALL((recv), (SFT_parser___parser_nodes[969] + 1)))
+#define CALL_parser___parser_nodes___AAnnotations___n_opar(recv) ((parser___parser_nodes___AAnnotations___n_opar_t)CALL((recv), (SFT_parser___parser_nodes[969] + 2)))
+#define CALL_parser___parser_nodes___AAnnotations___n_items(recv) ((parser___parser_nodes___AAnnotations___n_items_t)CALL((recv), (SFT_parser___parser_nodes[969] + 3)))
+#define CALL_parser___parser_nodes___AAnnotations___n_cpar(recv) ((parser___parser_nodes___AAnnotations___n_cpar_t)CALL((recv), (SFT_parser___parser_nodes[969] + 4)))
+#define ID_parser___parser_nodes___AAnnotation (SFT_parser___parser_nodes[970])
+#define COLOR_parser___parser_nodes___AAnnotation (SFT_parser___parser_nodes[971])
+#define ATTR_parser___parser_nodes___AAnnotation____n_atid(recv) ATTR(recv, (SFT_parser___parser_nodes[972] + 0))
+#define ATTR_parser___parser_nodes___AAnnotation____n_opar(recv) ATTR(recv, (SFT_parser___parser_nodes[972] + 1))
+#define ATTR_parser___parser_nodes___AAnnotation____n_args(recv) ATTR(recv, (SFT_parser___parser_nodes[972] + 2))
+#define ATTR_parser___parser_nodes___AAnnotation____n_cpar(recv) ATTR(recv, (SFT_parser___parser_nodes[972] + 3))
+#define INIT_TABLE_POS_parser___parser_nodes___AAnnotation (SFT_parser___parser_nodes[973] + 0)
+#define CALL_parser___parser_nodes___AAnnotation___n_atid(recv) ((parser___parser_nodes___AAnnotation___n_atid_t)CALL((recv), (SFT_parser___parser_nodes[973] + 1)))
+#define CALL_parser___parser_nodes___AAnnotation___n_opar(recv) ((parser___parser_nodes___AAnnotation___n_opar_t)CALL((recv), (SFT_parser___parser_nodes[973] + 2)))
+#define CALL_parser___parser_nodes___AAnnotation___n_args(recv) ((parser___parser_nodes___AAnnotation___n_args_t)CALL((recv), (SFT_parser___parser_nodes[973] + 3)))
+#define CALL_parser___parser_nodes___AAnnotation___n_cpar(recv) ((parser___parser_nodes___AAnnotation___n_cpar_t)CALL((recv), (SFT_parser___parser_nodes[973] + 4)))
+#define ID_parser___parser_nodes___AAtArg (SFT_parser___parser_nodes[974])
+#define COLOR_parser___parser_nodes___AAtArg (SFT_parser___parser_nodes[975])
+#define INIT_TABLE_POS_parser___parser_nodes___AAtArg (SFT_parser___parser_nodes[976] + 0)
+#define ID_parser___parser_nodes___ATypeAtArg (SFT_parser___parser_nodes[977])
+#define COLOR_parser___parser_nodes___ATypeAtArg (SFT_parser___parser_nodes[978])
+#define ATTR_parser___parser_nodes___ATypeAtArg____n_type(recv) ATTR(recv, (SFT_parser___parser_nodes[979] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___ATypeAtArg (SFT_parser___parser_nodes[980] + 0)
+#define CALL_parser___parser_nodes___ATypeAtArg___n_type(recv) ((parser___parser_nodes___ATypeAtArg___n_type_t)CALL((recv), (SFT_parser___parser_nodes[980] + 1)))
+#define ID_parser___parser_nodes___AExprAtArg (SFT_parser___parser_nodes[981])
+#define COLOR_parser___parser_nodes___AExprAtArg (SFT_parser___parser_nodes[982])
+#define ATTR_parser___parser_nodes___AExprAtArg____n_expr(recv) ATTR(recv, (SFT_parser___parser_nodes[983] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AExprAtArg (SFT_parser___parser_nodes[984] + 0)
+#define CALL_parser___parser_nodes___AExprAtArg___n_expr(recv) ((parser___parser_nodes___AExprAtArg___n_expr_t)CALL((recv), (SFT_parser___parser_nodes[984] + 1)))
+#define ID_parser___parser_nodes___AAtAtArg (SFT_parser___parser_nodes[985])
+#define COLOR_parser___parser_nodes___AAtAtArg (SFT_parser___parser_nodes[986])
+#define INIT_TABLE_POS_parser___parser_nodes___AAtAtArg (SFT_parser___parser_nodes[987] + 0)
+#define ID_parser___parser_nodes___AAtid (SFT_parser___parser_nodes[988])
+#define COLOR_parser___parser_nodes___AAtid (SFT_parser___parser_nodes[989])
+#define ATTR_parser___parser_nodes___AAtid____n_id(recv) ATTR(recv, (SFT_parser___parser_nodes[990] + 0))
+#define INIT_TABLE_POS_parser___parser_nodes___AAtid (SFT_parser___parser_nodes[991] + 0)
+#define CALL_parser___parser_nodes___AAtid___n_id(recv) ((parser___parser_nodes___AAtid___n_id_t)CALL((recv), (SFT_parser___parser_nodes[991] + 1)))
+#define ID_parser___parser_nodes___AIdAtid (SFT_parser___parser_nodes[992])
+#define COLOR_parser___parser_nodes___AIdAtid (SFT_parser___parser_nodes[993])
+#define INIT_TABLE_POS_parser___parser_nodes___AIdAtid (SFT_parser___parser_nodes[994] + 0)
+#define ID_parser___parser_nodes___AKwexternAtid (SFT_parser___parser_nodes[995])
+#define COLOR_parser___parser_nodes___AKwexternAtid (SFT_parser___parser_nodes[996])
+#define INIT_TABLE_POS_parser___parser_nodes___AKwexternAtid (SFT_parser___parser_nodes[997] + 0)
+#define ID_parser___parser_nodes___AKwinternAtid (SFT_parser___parser_nodes[998])
+#define COLOR_parser___parser_nodes___AKwinternAtid (SFT_parser___parser_nodes[999])
+#define INIT_TABLE_POS_parser___parser_nodes___AKwinternAtid (SFT_parser___parser_nodes[1000] + 0)
+#define ID_parser___parser_nodes___AKwreadableAtid (SFT_parser___parser_nodes[1001])
+#define COLOR_parser___parser_nodes___AKwreadableAtid (SFT_parser___parser_nodes[1002])
+#define INIT_TABLE_POS_parser___parser_nodes___AKwreadableAtid (SFT_parser___parser_nodes[1003] + 0)
+#define ID_parser___parser_nodes___AKwwritableAtid (SFT_parser___parser_nodes[1004])
+#define COLOR_parser___parser_nodes___AKwwritableAtid (SFT_parser___parser_nodes[1005])
+#define INIT_TABLE_POS_parser___parser_nodes___AKwwritableAtid (SFT_parser___parser_nodes[1006] + 0)
+#define ID_parser___parser_nodes___AKwimportAtid (SFT_parser___parser_nodes[1007])
+#define COLOR_parser___parser_nodes___AKwimportAtid (SFT_parser___parser_nodes[1008])
+#define INIT_TABLE_POS_parser___parser_nodes___AKwimportAtid (SFT_parser___parser_nodes[1009] + 0)
+#define ID_parser___parser_nodes___Start (SFT_parser___parser_nodes[1010])
+#define COLOR_parser___parser_nodes___Start (SFT_parser___parser_nodes[1011])
+#define ATTR_parser___parser_nodes___Start____n_base(recv) ATTR(recv, (SFT_parser___parser_nodes[1012] + 0))
+#define ATTR_parser___parser_nodes___Start____n_eof(recv) ATTR(recv, (SFT_parser___parser_nodes[1012] + 1))
+#define INIT_TABLE_POS_parser___parser_nodes___Start (SFT_parser___parser_nodes[1013] + 0)
+#define CALL_parser___parser_nodes___Start___n_base(recv) ((parser___parser_nodes___Start___n_base_t)CALL((recv), (SFT_parser___parser_nodes[1013] + 1)))
+#define CALL_parser___parser_nodes___Start___n_eof(recv) ((parser___parser_nodes___Start___n_eof_t)CALL((recv), (SFT_parser___parser_nodes[1013] + 2)))
+#define CALL_parser___parser_nodes___Start___init(recv) ((parser___parser_nodes___Start___init_t)CALL((recv), (SFT_parser___parser_nodes[1013] + 3)))
 val_t parser___parser_nodes___ANode___location(val_t p0);
 typedef val_t (*parser___parser_nodes___ANode___location_t)(val_t p0);
 val_t parser___parser_nodes___ANode___hot_location(val_t p0);
@@ -1966,11 +2058,15 @@ void parser___parser_nodes___ANode___debug(val_t p0, val_t p1);
 typedef void (*parser___parser_nodes___ANode___debug_t)(val_t p0, val_t p1);
 val_t parser___parser_nodes___Token___text(val_t p0);
 typedef val_t (*parser___parser_nodes___Token___text_t)(val_t p0);
+void parser___parser_nodes___Token___text__eq(val_t p0, val_t p1);
+typedef void (*parser___parser_nodes___Token___text__eq_t)(val_t p0, val_t p1);
 val_t parser___parser_nodes___Token___to_s(val_t p0);
 typedef val_t (*parser___parser_nodes___Token___to_s_t)(val_t p0);
 val_t NEW_Token_parser___parser_nodes___ANode___init();
 void parser___parser_nodes___Prod___location__eq(val_t p0, val_t p1);
 typedef void (*parser___parser_nodes___Prod___location__eq_t)(val_t p0, val_t p1);
+val_t parser___parser_nodes___Prod___n_annotations(val_t p0);
+typedef val_t (*parser___parser_nodes___Prod___n_annotations_t)(val_t p0);
 val_t NEW_Prod_parser___parser_nodes___ANode___init();
 val_t parser___parser_nodes___TEol___to_s(val_t p0);
 typedef val_t (*parser___parser_nodes___TEol___to_s_t)(val_t p0);
@@ -1985,7 +2081,6 @@ val_t NEW_TKwclass_parser___parser_nodes___ANode___init();
 val_t NEW_TKwabstract_parser___parser_nodes___ANode___init();
 val_t NEW_TKwinterface_parser___parser_nodes___ANode___init();
 val_t NEW_TKwenum_parser___parser_nodes___ANode___init();
-val_t NEW_TKwspecial_parser___parser_nodes___ANode___init();
 val_t NEW_TKwend_parser___parser_nodes___ANode___init();
 val_t NEW_TKwmeth_parser___parser_nodes___ANode___init();
 val_t NEW_TKwtype_parser___parser_nodes___ANode___init();
@@ -2060,6 +2155,7 @@ val_t NEW_TGe_parser___parser_nodes___ANode___init();
 val_t NEW_TGg_parser___parser_nodes___ANode___init();
 val_t NEW_TStarship_parser___parser_nodes___ANode___init();
 val_t NEW_TBang_parser___parser_nodes___ANode___init();
+val_t NEW_TAt_parser___parser_nodes___ANode___init();
 val_t parser___parser_nodes___TClassid___to_s(val_t p0);
 typedef val_t (*parser___parser_nodes___TClassid___to_s_t)(val_t p0);
 val_t NEW_TClassid_parser___parser_nodes___ANode___init();
@@ -2086,14 +2182,12 @@ val_t parser___parser_nodes___TBadChar___to_s(val_t p0);
 typedef val_t (*parser___parser_nodes___TBadChar___to_s_t)(val_t p0);
 val_t NEW_TBadChar_parser___parser_nodes___ANode___init();
 val_t NEW_TExternCodeSegment_parser___parser_nodes___ANode___init();
-void parser___parser_nodes___EOF___noinit(val_t p0, int* init_table);
-typedef void (*parser___parser_nodes___EOF___noinit_t)(val_t p0, int* init_table);
-val_t NEW_EOF_parser___parser_nodes___EOF___noinit();
 val_t parser___parser_nodes___EOF___to_s(val_t p0);
 typedef val_t (*parser___parser_nodes___EOF___to_s_t)(val_t p0);
-void parser___parser_nodes___AError___noinit(val_t p0, int* init_table);
-typedef void (*parser___parser_nodes___AError___noinit_t)(val_t p0, int* init_table);
-val_t NEW_AError_parser___parser_nodes___AError___noinit();
+val_t NEW_EOF_parser___parser_nodes___ANode___init();
+val_t NEW_AError_parser___parser_nodes___ANode___init();
+val_t NEW_ALexerError_parser___parser_nodes___ANode___init();
+val_t NEW_AParserError_parser___parser_nodes___ANode___init();
 val_t parser___parser_nodes___AModule___n_moduledecl(val_t p0);
 typedef val_t (*parser___parser_nodes___AModule___n_moduledecl_t)(val_t p0);
 val_t parser___parser_nodes___AModule___n_imports(val_t p0);
@@ -2179,14 +2273,14 @@ typedef val_t (*parser___parser_nodes___AEnumClasskind___n_kwenum_t)(val_t p0);
 val_t NEW_AEnumClasskind_parser___parser_nodes___ANode___init();
 val_t parser___parser_nodes___AExternClasskind___n_kwextern(val_t p0);
 typedef val_t (*parser___parser_nodes___AExternClasskind___n_kwextern_t)(val_t p0);
+val_t parser___parser_nodes___AExternClasskind___n_kwclass(val_t p0);
+typedef val_t (*parser___parser_nodes___AExternClasskind___n_kwclass_t)(val_t p0);
 val_t NEW_AExternClasskind_parser___parser_nodes___ANode___init();
 val_t parser___parser_nodes___AFormaldef___n_id(val_t p0);
 typedef val_t (*parser___parser_nodes___AFormaldef___n_id_t)(val_t p0);
 val_t parser___parser_nodes___AFormaldef___n_type(val_t p0);
 typedef val_t (*parser___parser_nodes___AFormaldef___n_type_t)(val_t p0);
 val_t NEW_AFormaldef_parser___parser_nodes___ANode___init();
-val_t parser___parser_nodes___ASuperclass___n_kwspecial(val_t p0);
-typedef val_t (*parser___parser_nodes___ASuperclass___n_kwspecial_t)(val_t p0);
 val_t parser___parser_nodes___ASuperclass___n_kwsuper(val_t p0);
 typedef val_t (*parser___parser_nodes___ASuperclass___n_kwsuper_t)(val_t p0);
 val_t parser___parser_nodes___ASuperclass___n_type(val_t p0);
@@ -2700,18 +2794,12 @@ val_t NEW_AFloatExpr_parser___parser_nodes___ANode___init();
 val_t parser___parser_nodes___ACharExpr___n_char(val_t p0);
 typedef val_t (*parser___parser_nodes___ACharExpr___n_char_t)(val_t p0);
 val_t NEW_ACharExpr_parser___parser_nodes___ANode___init();
+val_t parser___parser_nodes___AStringFormExpr___n_string(val_t p0);
+typedef val_t (*parser___parser_nodes___AStringFormExpr___n_string_t)(val_t p0);
 val_t NEW_AStringFormExpr_parser___parser_nodes___ANode___init();
-val_t parser___parser_nodes___AStringExpr___n_string(val_t p0);
-typedef val_t (*parser___parser_nodes___AStringExpr___n_string_t)(val_t p0);
 val_t NEW_AStringExpr_parser___parser_nodes___ANode___init();
-val_t parser___parser_nodes___AStartStringExpr___n_string(val_t p0);
-typedef val_t (*parser___parser_nodes___AStartStringExpr___n_string_t)(val_t p0);
 val_t NEW_AStartStringExpr_parser___parser_nodes___ANode___init();
-val_t parser___parser_nodes___AMidStringExpr___n_string(val_t p0);
-typedef val_t (*parser___parser_nodes___AMidStringExpr___n_string_t)(val_t p0);
 val_t NEW_AMidStringExpr_parser___parser_nodes___ANode___init();
-val_t parser___parser_nodes___AEndStringExpr___n_string(val_t p0);
-typedef val_t (*parser___parser_nodes___AEndStringExpr___n_string_t)(val_t p0);
 val_t NEW_AEndStringExpr_parser___parser_nodes___ANode___init();
 val_t parser___parser_nodes___ASuperstringExpr___n_exprs(val_t p0);
 typedef val_t (*parser___parser_nodes___ASuperstringExpr___n_exprs_t)(val_t p0);
@@ -2828,6 +2916,41 @@ val_t NEW_AQualified_parser___parser_nodes___ANode___init();
 val_t parser___parser_nodes___ADoc___n_comment(val_t p0);
 typedef val_t (*parser___parser_nodes___ADoc___n_comment_t)(val_t p0);
 val_t NEW_ADoc_parser___parser_nodes___ANode___init();
+val_t parser___parser_nodes___AAnnotations___n_at(val_t p0);
+typedef val_t (*parser___parser_nodes___AAnnotations___n_at_t)(val_t p0);
+val_t parser___parser_nodes___AAnnotations___n_opar(val_t p0);
+typedef val_t (*parser___parser_nodes___AAnnotations___n_opar_t)(val_t p0);
+val_t parser___parser_nodes___AAnnotations___n_items(val_t p0);
+typedef val_t (*parser___parser_nodes___AAnnotations___n_items_t)(val_t p0);
+val_t parser___parser_nodes___AAnnotations___n_cpar(val_t p0);
+typedef val_t (*parser___parser_nodes___AAnnotations___n_cpar_t)(val_t p0);
+val_t NEW_AAnnotations_parser___parser_nodes___ANode___init();
+val_t parser___parser_nodes___AAnnotation___n_atid(val_t p0);
+typedef val_t (*parser___parser_nodes___AAnnotation___n_atid_t)(val_t p0);
+val_t parser___parser_nodes___AAnnotation___n_opar(val_t p0);
+typedef val_t (*parser___parser_nodes___AAnnotation___n_opar_t)(val_t p0);
+val_t parser___parser_nodes___AAnnotation___n_args(val_t p0);
+typedef val_t (*parser___parser_nodes___AAnnotation___n_args_t)(val_t p0);
+val_t parser___parser_nodes___AAnnotation___n_cpar(val_t p0);
+typedef val_t (*parser___parser_nodes___AAnnotation___n_cpar_t)(val_t p0);
+val_t NEW_AAnnotation_parser___parser_nodes___ANode___init();
+val_t NEW_AAtArg_parser___parser_nodes___ANode___init();
+val_t parser___parser_nodes___ATypeAtArg___n_type(val_t p0);
+typedef val_t (*parser___parser_nodes___ATypeAtArg___n_type_t)(val_t p0);
+val_t NEW_ATypeAtArg_parser___parser_nodes___ANode___init();
+val_t parser___parser_nodes___AExprAtArg___n_expr(val_t p0);
+typedef val_t (*parser___parser_nodes___AExprAtArg___n_expr_t)(val_t p0);
+val_t NEW_AExprAtArg_parser___parser_nodes___ANode___init();
+val_t NEW_AAtAtArg_parser___parser_nodes___ANode___init();
+val_t parser___parser_nodes___AAtid___n_id(val_t p0);
+typedef val_t (*parser___parser_nodes___AAtid___n_id_t)(val_t p0);
+val_t NEW_AAtid_parser___parser_nodes___ANode___init();
+val_t NEW_AIdAtid_parser___parser_nodes___ANode___init();
+val_t NEW_AKwexternAtid_parser___parser_nodes___ANode___init();
+val_t NEW_AKwinternAtid_parser___parser_nodes___ANode___init();
+val_t NEW_AKwreadableAtid_parser___parser_nodes___ANode___init();
+val_t NEW_AKwwritableAtid_parser___parser_nodes___ANode___init();
+val_t NEW_AKwimportAtid_parser___parser_nodes___ANode___init();
 val_t parser___parser_nodes___Start___n_base(val_t p0);
 typedef val_t (*parser___parser_nodes___Start___n_base_t)(val_t p0);
 val_t parser___parser_nodes___Start___n_eof(val_t p0);
index 7ed2314..bc6df2d 100644 (file)
@@ -1020,9 +1020,9 @@ void parser___parser_prod___AModuledecl___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___AModuledecl___init_amoduledecl[] = "parser_prod::AModuledecl::init_amoduledecl";
-void parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+void parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
   int itpos4 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AModuledecl].i;
-  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;
@@ -1032,24 +1032,26 @@ void parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, v
   fra.me.line = 171;
   fra.me.meth = LOCATE_parser___parser_prod___AModuledecl___init_amoduledecl;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
   /* parser/parser_prod.nit:171 */
-  fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:177 */
-  CALL_parser___parser_prod___AModuledecl___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  fra.me.REG[5] = fra.me.REG[0];
   /* parser/parser_prod.nit:178 */
-  ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[4]) = fra.me.REG[1];
+  CALL_parser___parser_prod___AModuledecl___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
   /* parser/parser_prod.nit:179 */
+  ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:180 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -1064,39 +1066,63 @@ void parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:180 */
+    /* parser/parser_prod.nit:181 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 180);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 181);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
   }
-  /* parser/parser_prod.nit:182 */
+  /* parser/parser_prod.nit:183 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 182);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 183);
   }
-  ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:183 */
+  ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:184 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 183);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 184);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:184 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:185 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 184);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 185);
   }
-  ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:185 */
+  ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[5]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:186 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 185);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 186);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:187 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[5]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:188 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:189 */
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 189);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
   init_table[itpos4] = 1;
   return;
@@ -1109,7 +1135,7 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 188;
+  fra.me.line = 193;
   fra.me.meth = LOCATE_parser___parser_prod___AModuledecl___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1121,7 +1147,7 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:190 */
+  /* parser/parser_prod.nit:195 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -1136,7 +1162,7 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:191 */
+    /* parser/parser_prod.nit:196 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1151,32 +1177,32 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:192 */
+      /* parser/parser_prod.nit:197 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 192);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 197);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:193 */
+      /* parser/parser_prod.nit:198 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 193);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 198);
       }
-      /* parser/parser_prod.nit:194 */
+      /* parser/parser_prod.nit:199 */
       ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:196 */
+      /* parser/parser_prod.nit:201 */
       ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:198 */
+    /* parser/parser_prod.nit:203 */
     goto label1;
   }
-  /* parser/parser_prod.nit:200 */
+  /* parser/parser_prod.nit:205 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmodule", LOCATE_parser___parser_prod, 200);
+    nit_abort("Uninitialized attribute %s", "_n_kwmodule", LOCATE_parser___parser_prod, 205);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1186,7 +1212,7 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:201 */
+    /* parser/parser_prod.nit:206 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1201,32 +1227,32 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:202 */
+      /* parser/parser_prod.nit:207 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 202);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 207);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:203 */
+      /* parser/parser_prod.nit:208 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwmodule, ID_parser___parser_nodes___TKwmodule)) /*cast TKwmodule*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 203);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 208);
       }
-      /* parser/parser_prod.nit:204 */
+      /* parser/parser_prod.nit:209 */
       ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:206 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 206);
+      /* parser/parser_prod.nit:211 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 211);
     }
-    /* parser/parser_prod.nit:208 */
+    /* parser/parser_prod.nit:213 */
     goto label1;
   }
-  /* parser/parser_prod.nit:210 */
+  /* parser/parser_prod.nit:215 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 210);
+    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 215);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1236,7 +1262,7 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:211 */
+    /* parser/parser_prod.nit:216 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1251,25 +1277,76 @@ void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:212 */
+      /* parser/parser_prod.nit:217 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 212);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 217);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:213 */
+      /* parser/parser_prod.nit:218 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AModuleName, ID_parser___parser_nodes___AModuleName)) /*cast AModuleName*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 213);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 218);
       }
-      /* parser/parser_prod.nit:214 */
+      /* parser/parser_prod.nit:219 */
       ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:216 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 216);
+      /* parser/parser_prod.nit:221 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 221);
     }
-    /* parser/parser_prod.nit:218 */
+    /* parser/parser_prod.nit:223 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:225 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:226 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:227 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 227);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:228 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 228);
+      }
+      /* parser/parser_prod.nit:229 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:231 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:233 */
     goto label1;
   }
   label1: while(0);
@@ -1284,7 +1361,7 @@ void parser___parser_prod___AModuledecl___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 222;
+  fra.me.line = 237;
   fra.me.meth = LOCATE_parser___parser_prod___AModuledecl___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1295,9 +1372,9 @@ void parser___parser_prod___AModuledecl___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:222 */
+  /* parser/parser_prod.nit:237 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:224 */
+  /* parser/parser_prod.nit:239 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -1313,31 +1390,56 @@ void parser___parser_prod___AModuledecl___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:225 */
+    /* parser/parser_prod.nit:240 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AModuledecl____n_doc(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 225);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 240);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:227 */
+  /* parser/parser_prod.nit:242 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmodule", LOCATE_parser___parser_prod, 227);
+    nit_abort("Uninitialized attribute %s", "_n_kwmodule", LOCATE_parser___parser_prod, 242);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:228 */
+  /* parser/parser_prod.nit:243 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 228);
+    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 243);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:244 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:245 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 245);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AModuledecl____n_name(fra.me.REG[2]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -1349,7 +1451,7 @@ void parser___parser_prod___AStdImport___empty_init(val_t p0, int* init_table){
   if (init_table[itpos5]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 232;
+  fra.me.line = 250;
   fra.me.meth = LOCATE_parser___parser_prod___AStdImport___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -1361,71 +1463,98 @@ void parser___parser_prod___AStdImport___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___AStdImport___init_astdimport[] = "parser_prod::AStdImport::init_astdimport";
-void parser___parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+void parser___parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
   int itpos6 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStdImport].i;
-  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;
   if (init_table[itpos6]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 234;
+  fra.me.line = 252;
   fra.me.meth = LOCATE_parser___parser_prod___AStdImport___init_astdimport;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:234 */
-  fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:240 */
-  CALL_parser___parser_prod___AStdImport___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:241 */
+  fra.me.REG[4] = p4;
+  /* parser/parser_prod.nit:252 */
+  fra.me.REG[5] = fra.me.REG[0];
+  /* parser/parser_prod.nit:259 */
+  CALL_parser___parser_prod___AStdImport___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
+  /* parser/parser_prod.nit:260 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 241);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 260);
   }
-  ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:242 */
+  ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:261 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 242);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 261);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:243 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:262 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 243);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 262);
   }
-  ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:244 */
+  ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:263 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 244);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 263);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:245 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:264 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 245);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 264);
   }
-  ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:246 */
+  ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[5]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:265 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 246);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 265);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:266 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[5]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:267 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:268 */
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 268);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
   init_table[itpos6] = 1;
   return;
@@ -1438,7 +1567,7 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 249;
+  fra.me.line = 272;
   fra.me.meth = LOCATE_parser___parser_prod___AStdImport___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1450,11 +1579,11 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:251 */
+  /* parser/parser_prod.nit:274 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 251);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 274);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1464,7 +1593,7 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:252 */
+    /* parser/parser_prod.nit:275 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1479,32 +1608,32 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:253 */
+      /* parser/parser_prod.nit:276 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 253);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 276);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:254 */
+      /* parser/parser_prod.nit:277 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 254);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 277);
       }
-      /* parser/parser_prod.nit:255 */
+      /* parser/parser_prod.nit:278 */
       ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:257 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 257);
+      /* parser/parser_prod.nit:280 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 280);
     }
-    /* parser/parser_prod.nit:259 */
+    /* parser/parser_prod.nit:282 */
     goto label1;
   }
-  /* parser/parser_prod.nit:261 */
+  /* parser/parser_prod.nit:284 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 261);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 284);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1514,7 +1643,7 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:262 */
+    /* parser/parser_prod.nit:285 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1529,32 +1658,32 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:263 */
+      /* parser/parser_prod.nit:286 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 263);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 286);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:264 */
+      /* parser/parser_prod.nit:287 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast TKwimport*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 264);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 287);
       }
-      /* parser/parser_prod.nit:265 */
+      /* parser/parser_prod.nit:288 */
       ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:267 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 267);
+      /* parser/parser_prod.nit:290 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 290);
     }
-    /* parser/parser_prod.nit:269 */
+    /* parser/parser_prod.nit:292 */
     goto label1;
   }
-  /* parser/parser_prod.nit:271 */
+  /* parser/parser_prod.nit:294 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 271);
+    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 294);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1564,7 +1693,7 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:272 */
+    /* parser/parser_prod.nit:295 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1579,25 +1708,76 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:273 */
+      /* parser/parser_prod.nit:296 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 273);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 296);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:274 */
+      /* parser/parser_prod.nit:297 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AModuleName, ID_parser___parser_nodes___AModuleName)) /*cast AModuleName*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 274);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 297);
       }
-      /* parser/parser_prod.nit:275 */
+      /* parser/parser_prod.nit:298 */
       ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:277 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 277);
+      /* parser/parser_prod.nit:300 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 300);
+    }
+    /* parser/parser_prod.nit:302 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:304 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:305 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:306 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 306);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:307 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 307);
+      }
+      /* parser/parser_prod.nit:308 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:310 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:279 */
+    /* parser/parser_prod.nit:312 */
     goto label1;
   }
   label1: while(0);
@@ -1606,45 +1786,74 @@ void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t
 }
 static const char LOCATE_parser___parser_prod___AStdImport___visit_all[] = "parser_prod::AStdImport::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AStdImport___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} 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___parser_prod;
-  fra.me.line = 283;
+  fra.me.line = 316;
   fra.me.meth = LOCATE_parser___parser_prod___AStdImport___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:285 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:316 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:318 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 285);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 318);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:286 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStdImport____n_visibility(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:319 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 286);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 319);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:287 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStdImport____n_kwimport(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:320 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 287);
+    nit_abort("Uninitialized attribute %s", "_n_name", LOCATE_parser___parser_prod, 320);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:321 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:322 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 322);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AStdImport____n_name(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -1656,7 +1865,7 @@ void parser___parser_prod___ANoImport___empty_init(val_t p0, int* init_table){
   if (init_table[itpos7]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 291;
+  fra.me.line = 327;
   fra.me.meth = LOCATE_parser___parser_prod___ANoImport___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -1676,7 +1885,7 @@ void parser___parser_prod___ANoImport___init_anoimport(val_t p0, val_t p1, val_t
   if (init_table[itpos8]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 293;
+  fra.me.line = 329;
   fra.me.meth = LOCATE_parser___parser_prod___ANoImport___init_anoimport;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -1690,47 +1899,47 @@ void parser___parser_prod___ANoImport___init_anoimport(val_t p0, val_t p1, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:293 */
+  /* parser/parser_prod.nit:329 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:299 */
+  /* parser/parser_prod.nit:335 */
   CALL_parser___parser_prod___ANoImport___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:300 */
+  /* parser/parser_prod.nit:336 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 300);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 336);
   }
   ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:301 */
+  /* parser/parser_prod.nit:337 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 301);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 337);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:302 */
+  /* parser/parser_prod.nit:338 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 302);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 338);
   }
   ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:303 */
+  /* parser/parser_prod.nit:339 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 303);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 339);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:304 */
+  /* parser/parser_prod.nit:340 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 304);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 340);
   }
   ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:305 */
+  /* parser/parser_prod.nit:341 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 305);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 341);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
@@ -1745,7 +1954,7 @@ void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 308;
+  fra.me.line = 344;
   fra.me.meth = LOCATE_parser___parser_prod___ANoImport___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1757,11 +1966,11 @@ void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:310 */
+  /* parser/parser_prod.nit:346 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 310);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 346);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1771,7 +1980,7 @@ void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:311 */
+    /* parser/parser_prod.nit:347 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1786,32 +1995,32 @@ void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:312 */
+      /* parser/parser_prod.nit:348 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 312);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 348);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:313 */
+      /* parser/parser_prod.nit:349 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 313);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 349);
       }
-      /* parser/parser_prod.nit:314 */
+      /* parser/parser_prod.nit:350 */
       ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:316 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 316);
+      /* parser/parser_prod.nit:352 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 352);
     }
-    /* parser/parser_prod.nit:318 */
+    /* parser/parser_prod.nit:354 */
     goto label1;
   }
-  /* parser/parser_prod.nit:320 */
+  /* parser/parser_prod.nit:356 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 320);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 356);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1821,7 +2030,7 @@ void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:321 */
+    /* parser/parser_prod.nit:357 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1836,32 +2045,32 @@ void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:322 */
+      /* parser/parser_prod.nit:358 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 322);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 358);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:323 */
+      /* parser/parser_prod.nit:359 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast TKwimport*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 323);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 359);
       }
-      /* parser/parser_prod.nit:324 */
+      /* parser/parser_prod.nit:360 */
       ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:326 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 326);
+      /* parser/parser_prod.nit:362 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 362);
     }
-    /* parser/parser_prod.nit:328 */
+    /* parser/parser_prod.nit:364 */
     goto label1;
   }
-  /* parser/parser_prod.nit:330 */
+  /* parser/parser_prod.nit:366 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 330);
+    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 366);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1871,7 +2080,7 @@ void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:331 */
+    /* parser/parser_prod.nit:367 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -1886,25 +2095,25 @@ void parser___parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:332 */
+      /* parser/parser_prod.nit:368 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 332);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 368);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:333 */
+      /* parser/parser_prod.nit:369 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast TKwend*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 333);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 369);
       }
-      /* parser/parser_prod.nit:334 */
+      /* parser/parser_prod.nit:370 */
       ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:336 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 336);
+      /* parser/parser_prod.nit:372 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 372);
     }
-    /* parser/parser_prod.nit:338 */
+    /* parser/parser_prod.nit:374 */
     goto label1;
   }
   label1: while(0);
@@ -1918,7 +2127,7 @@ void parser___parser_prod___ANoImport___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 342;
+  fra.me.line = 378;
   fra.me.meth = LOCATE_parser___parser_prod___ANoImport___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -1928,27 +2137,27 @@ void parser___parser_prod___ANoImport___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:344 */
+  /* parser/parser_prod.nit:380 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 344);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 380);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ANoImport____n_visibility(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:345 */
+  /* parser/parser_prod.nit:381 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 345);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 381);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:346 */
+  /* parser/parser_prod.nit:382 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 346);
+    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 382);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANoImport____n_kwend(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -1963,7 +2172,7 @@ void parser___parser_prod___APublicVisibility___empty_init(val_t p0, int* init_t
   if (init_table[itpos9]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 350;
+  fra.me.line = 386;
   fra.me.meth = LOCATE_parser___parser_prod___APublicVisibility___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -1982,14 +2191,14 @@ void parser___parser_prod___APublicVisibility___init_apublicvisibility(val_t p0,
   if (init_table[itpos10]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 352;
+  fra.me.line = 388;
   fra.me.meth = LOCATE_parser___parser_prod___APublicVisibility___init_apublicvisibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:354 */
+  /* parser/parser_prod.nit:390 */
   CALL_parser___parser_prod___APublicVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
   init_table[itpos10] = 1;
@@ -2001,7 +2210,7 @@ void parser___parser_prod___APublicVisibility___replace_child(val_t p0, val_t p1
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 357;
+  fra.me.line = 393;
   fra.me.meth = LOCATE_parser___parser_prod___APublicVisibility___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -2021,7 +2230,7 @@ void parser___parser_prod___APublicVisibility___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 361;
+  fra.me.line = 397;
   fra.me.meth = LOCATE_parser___parser_prod___APublicVisibility___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2041,7 +2250,7 @@ void parser___parser_prod___APrivateVisibility___empty_init(val_t p0, int* init_
   if (init_table[itpos11]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 366;
+  fra.me.line = 402;
   fra.me.meth = LOCATE_parser___parser_prod___APrivateVisibility___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -2061,7 +2270,7 @@ void parser___parser_prod___APrivateVisibility___init_aprivatevisibility(val_t p
   if (init_table[itpos12]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 368;
+  fra.me.line = 404;
   fra.me.meth = LOCATE_parser___parser_prod___APrivateVisibility___init_aprivatevisibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -2071,21 +2280,21 @@ void parser___parser_prod___APrivateVisibility___init_aprivatevisibility(val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:368 */
+  /* parser/parser_prod.nit:404 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:372 */
+  /* parser/parser_prod.nit:408 */
   CALL_parser___parser_prod___APrivateVisibility___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:373 */
+  /* parser/parser_prod.nit:409 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 373);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 409);
   }
   ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:374 */
+  /* parser/parser_prod.nit:410 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 374);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 410);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -2100,7 +2309,7 @@ void parser___parser_prod___APrivateVisibility___replace_child(val_t p0, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 377;
+  fra.me.line = 413;
   fra.me.meth = LOCATE_parser___parser_prod___APrivateVisibility___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -2112,11 +2321,11 @@ void parser___parser_prod___APrivateVisibility___replace_child(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:379 */
+  /* parser/parser_prod.nit:415 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwprivate", LOCATE_parser___parser_prod, 379);
+    nit_abort("Uninitialized attribute %s", "_n_kwprivate", LOCATE_parser___parser_prod, 415);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -2126,7 +2335,7 @@ void parser___parser_prod___APrivateVisibility___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:380 */
+    /* parser/parser_prod.nit:416 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -2141,25 +2350,25 @@ void parser___parser_prod___APrivateVisibility___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:381 */
+      /* parser/parser_prod.nit:417 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 381);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 417);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:382 */
+      /* parser/parser_prod.nit:418 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwprivate, ID_parser___parser_nodes___TKwprivate)) /*cast TKwprivate*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 382);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 418);
       }
-      /* parser/parser_prod.nit:383 */
+      /* parser/parser_prod.nit:419 */
       ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:385 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 385);
+      /* parser/parser_prod.nit:421 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 421);
     }
-    /* parser/parser_prod.nit:387 */
+    /* parser/parser_prod.nit:423 */
     goto label1;
   }
   label1: while(0);
@@ -2173,7 +2382,7 @@ void parser___parser_prod___APrivateVisibility___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 391;
+  fra.me.line = 427;
   fra.me.meth = LOCATE_parser___parser_prod___APrivateVisibility___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2182,11 +2391,11 @@ void parser___parser_prod___APrivateVisibility___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:393 */
+  /* parser/parser_prod.nit:429 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwprivate", LOCATE_parser___parser_prod, 393);
+    nit_abort("Uninitialized attribute %s", "_n_kwprivate", LOCATE_parser___parser_prod, 429);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -2201,7 +2410,7 @@ void parser___parser_prod___AProtectedVisibility___empty_init(val_t p0, int* ini
   if (init_table[itpos13]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 397;
+  fra.me.line = 433;
   fra.me.meth = LOCATE_parser___parser_prod___AProtectedVisibility___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -2221,7 +2430,7 @@ void parser___parser_prod___AProtectedVisibility___init_aprotectedvisibility(val
   if (init_table[itpos14]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 399;
+  fra.me.line = 435;
   fra.me.meth = LOCATE_parser___parser_prod___AProtectedVisibility___init_aprotectedvisibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -2231,21 +2440,21 @@ void parser___parser_prod___AProtectedVisibility___init_aprotectedvisibility(val
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:399 */
+  /* parser/parser_prod.nit:435 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:403 */
+  /* parser/parser_prod.nit:439 */
   CALL_parser___parser_prod___AProtectedVisibility___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:404 */
+  /* parser/parser_prod.nit:440 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 404);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 440);
   }
   ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:405 */
+  /* parser/parser_prod.nit:441 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 405);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 441);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -2260,7 +2469,7 @@ void parser___parser_prod___AProtectedVisibility___replace_child(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 408;
+  fra.me.line = 444;
   fra.me.meth = LOCATE_parser___parser_prod___AProtectedVisibility___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -2272,11 +2481,11 @@ void parser___parser_prod___AProtectedVisibility___replace_child(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:410 */
+  /* parser/parser_prod.nit:446 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwprotected", LOCATE_parser___parser_prod, 410);
+    nit_abort("Uninitialized attribute %s", "_n_kwprotected", LOCATE_parser___parser_prod, 446);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -2286,7 +2495,7 @@ void parser___parser_prod___AProtectedVisibility___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:411 */
+    /* parser/parser_prod.nit:447 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -2301,25 +2510,25 @@ void parser___parser_prod___AProtectedVisibility___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:412 */
+      /* parser/parser_prod.nit:448 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 412);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 448);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:413 */
+      /* parser/parser_prod.nit:449 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwprotected, ID_parser___parser_nodes___TKwprotected)) /*cast TKwprotected*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 413);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 449);
       }
-      /* parser/parser_prod.nit:414 */
+      /* parser/parser_prod.nit:450 */
       ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:416 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 416);
+      /* parser/parser_prod.nit:452 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 452);
     }
-    /* parser/parser_prod.nit:418 */
+    /* parser/parser_prod.nit:454 */
     goto label1;
   }
   label1: while(0);
@@ -2333,7 +2542,7 @@ void parser___parser_prod___AProtectedVisibility___visit_all(val_t p0, val_t p1)
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 422;
+  fra.me.line = 458;
   fra.me.meth = LOCATE_parser___parser_prod___AProtectedVisibility___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2342,11 +2551,11 @@ void parser___parser_prod___AProtectedVisibility___visit_all(val_t p0, val_t p1)
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:424 */
+  /* parser/parser_prod.nit:460 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwprotected", LOCATE_parser___parser_prod, 424);
+    nit_abort("Uninitialized attribute %s", "_n_kwprotected", LOCATE_parser___parser_prod, 460);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -2361,7 +2570,7 @@ void parser___parser_prod___AIntrudeVisibility___empty_init(val_t p0, int* init_
   if (init_table[itpos15]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 428;
+  fra.me.line = 464;
   fra.me.meth = LOCATE_parser___parser_prod___AIntrudeVisibility___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -2381,7 +2590,7 @@ void parser___parser_prod___AIntrudeVisibility___init_aintrudevisibility(val_t p
   if (init_table[itpos16]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 430;
+  fra.me.line = 466;
   fra.me.meth = LOCATE_parser___parser_prod___AIntrudeVisibility___init_aintrudevisibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -2391,21 +2600,21 @@ void parser___parser_prod___AIntrudeVisibility___init_aintrudevisibility(val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:430 */
+  /* parser/parser_prod.nit:466 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:434 */
+  /* parser/parser_prod.nit:470 */
   CALL_parser___parser_prod___AIntrudeVisibility___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:435 */
+  /* parser/parser_prod.nit:471 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 435);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 471);
   }
   ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:436 */
+  /* parser/parser_prod.nit:472 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 436);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 472);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -2420,7 +2629,7 @@ void parser___parser_prod___AIntrudeVisibility___replace_child(val_t p0, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 439;
+  fra.me.line = 475;
   fra.me.meth = LOCATE_parser___parser_prod___AIntrudeVisibility___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -2432,11 +2641,11 @@ void parser___parser_prod___AIntrudeVisibility___replace_child(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:441 */
+  /* parser/parser_prod.nit:477 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwintrude", LOCATE_parser___parser_prod, 441);
+    nit_abort("Uninitialized attribute %s", "_n_kwintrude", LOCATE_parser___parser_prod, 477);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -2446,7 +2655,7 @@ void parser___parser_prod___AIntrudeVisibility___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:442 */
+    /* parser/parser_prod.nit:478 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -2461,25 +2670,25 @@ void parser___parser_prod___AIntrudeVisibility___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:443 */
+      /* parser/parser_prod.nit:479 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 443);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 479);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:444 */
+      /* parser/parser_prod.nit:480 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwintrude, ID_parser___parser_nodes___TKwintrude)) /*cast TKwintrude*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 444);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 480);
       }
-      /* parser/parser_prod.nit:445 */
+      /* parser/parser_prod.nit:481 */
       ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:447 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 447);
+      /* parser/parser_prod.nit:483 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 483);
     }
-    /* parser/parser_prod.nit:449 */
+    /* parser/parser_prod.nit:485 */
     goto label1;
   }
   label1: while(0);
@@ -2493,7 +2702,7 @@ void parser___parser_prod___AIntrudeVisibility___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 453;
+  fra.me.line = 489;
   fra.me.meth = LOCATE_parser___parser_prod___AIntrudeVisibility___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2502,11 +2711,11 @@ void parser___parser_prod___AIntrudeVisibility___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:455 */
+  /* parser/parser_prod.nit:491 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwintrude", LOCATE_parser___parser_prod, 455);
+    nit_abort("Uninitialized attribute %s", "_n_kwintrude", LOCATE_parser___parser_prod, 491);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -2521,7 +2730,7 @@ void parser___parser_prod___AStdClassdef___empty_init(val_t p0, int* init_table)
   if (init_table[itpos17]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 459;
+  fra.me.line = 495;
   fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -2533,19 +2742,19 @@ void parser___parser_prod___AStdClassdef___empty_init(val_t p0, int* init_table)
   return;
 }
 static const char LOCATE_parser___parser_prod___AStdClassdef___init_astdclassdef[] = "parser_prod::AStdClassdef::init_astdclassdef";
-void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10, int* init_table){
+void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10, val_t p11, int* init_table){
   int itpos18 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStdClassdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos18]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 461;
+  fra.me.line = 497;
   fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___init_astdclassdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 13;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -2559,6 +2768,7 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -2570,13 +2780,14 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
   fra.me.REG[8] = p8;
   fra.me.REG[9] = p9;
   fra.me.REG[10] = p10;
-  /* parser/parser_prod.nit:461 */
-  fra.me.REG[11] = fra.me.REG[0];
-  /* parser/parser_prod.nit:474 */
-  CALL_parser___parser_prod___AStdClassdef___empty_init(fra.me.REG[11])(fra.me.REG[11], init_table);
-  /* parser/parser_prod.nit:475 */
-  ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[11]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:476 */
+  fra.me.REG[11] = p11;
+  /* parser/parser_prod.nit:497 */
+  fra.me.REG[12] = fra.me.REG[0];
+  /* parser/parser_prod.nit:511 */
+  CALL_parser___parser_prod___AStdClassdef___empty_init(fra.me.REG[12])(fra.me.REG[12], init_table);
+  /* parser/parser_prod.nit:512 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[12]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:513 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -2591,16 +2802,16 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:477 */
+    /* parser/parser_prod.nit:514 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 477);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 514);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[11]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:479 */
-  ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[11]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:480 */
+  /* parser/parser_prod.nit:516 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[12]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:517 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -2615,42 +2826,42 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:481 */
+    /* parser/parser_prod.nit:518 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 481);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 518);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[11]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:483 */
+  /* parser/parser_prod.nit:520 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 483);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 520);
   }
-  ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[11]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:484 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[12]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:521 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 484);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 521);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[11]);
-  /* parser/parser_prod.nit:485 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[12]);
+  /* parser/parser_prod.nit:522 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 485);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 522);
   }
-  ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[11]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:486 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[12]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:523 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 486);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 523);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[11]);
-  /* parser/parser_prod.nit:487 */
-  ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[11]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:488 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[12]);
+  /* parser/parser_prod.nit:524 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[12]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:525 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -2665,17 +2876,17 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:489 */
+    /* parser/parser_prod.nit:526 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 489);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 526);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[11]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[12]);
   }
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[6])(fra.me.REG[6], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___init_astdclassdef_1));
-  /* parser/parser_prod.nit:496 */
-  ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[11]) = fra.me.REG[7];
-  /* parser/parser_prod.nit:497 */
+  /* parser/parser_prod.nit:533 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[12]) = fra.me.REG[7];
+  /* parser/parser_prod.nit:534 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -2690,28 +2901,52 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:498 */
+    /* parser/parser_prod.nit:535 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 498);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 535);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[12]);
+  }
+  /* parser/parser_prod.nit:537 */
+  ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[12]) = fra.me.REG[8];
+  /* parser/parser_prod.nit:538 */
+  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:539 */
+    REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 539);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[11]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[12]);
   }
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[8])(fra.me.REG[8], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___init_astdclassdef_2));
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[9])(fra.me.REG[9], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___init_astdclassdef_3));
-  /* parser/parser_prod.nit:510 */
-  REGB0 = TAG_Bool(fra.me.REG[10]!=NIT_NULL);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[9])(fra.me.REG[9], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___init_astdclassdef_2));
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[10])(fra.me.REG[10], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___init_astdclassdef_3));
+  /* parser/parser_prod.nit:551 */
+  REGB0 = TAG_Bool(fra.me.REG[11]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 510);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 551);
   }
-  ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[11]) = fra.me.REG[10];
-  /* parser/parser_prod.nit:511 */
-  REGB0 = TAG_Bool(fra.me.REG[10]==NIT_NULL);
+  ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[12]) = fra.me.REG[11];
+  /* parser/parser_prod.nit:552 */
+  REGB0 = TAG_Bool(fra.me.REG[11]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 511);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 552);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[11]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[12]);
   stack_frame_head = fra.me.prev;
   init_table[itpos18] = 1;
   return;
@@ -2721,7 +2956,7 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:491 */
+    /* parser/parser_prod.nit:528 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -2735,22 +2970,22 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:492 */
+    /* parser/parser_prod.nit:529 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AFormaldef, ID_parser___parser_nodes___AFormaldef)) /*cast AFormaldef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 492);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 529);
     }
-    /* parser/parser_prod.nit:493 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(closctx->REG[11])!=NIT_NULL);
+    /* parser/parser_prod.nit:530 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(closctx->REG[12])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 493);
+      nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 530);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(closctx->REG[11]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(closctx->REG[12]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:494 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[11]);
+    /* parser/parser_prod.nit:531 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[12]);
     stack_frame_head = fra.me.prev;
     return;
   }
@@ -2759,7 +2994,7 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:500 */
+    /* parser/parser_prod.nit:541 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -2773,22 +3008,22 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:501 */
+    /* parser/parser_prod.nit:542 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___ASuperclass, ID_parser___parser_nodes___ASuperclass)) /*cast ASuperclass*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 501);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 542);
     }
-    /* parser/parser_prod.nit:502 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(closctx->REG[11])!=NIT_NULL);
+    /* parser/parser_prod.nit:543 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(closctx->REG[12])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 502);
+      nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 543);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(closctx->REG[11]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(closctx->REG[12]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:503 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[11]);
+    /* parser/parser_prod.nit:544 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[12]);
     stack_frame_head = fra.me.prev;
     return;
   }
@@ -2797,7 +3032,7 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:505 */
+    /* parser/parser_prod.nit:546 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -2811,22 +3046,22 @@ void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:506 */
+    /* parser/parser_prod.nit:547 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___APropdef, ID_parser___parser_nodes___APropdef)) /*cast APropdef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 506);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 547);
     }
-    /* parser/parser_prod.nit:507 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(closctx->REG[11])!=NIT_NULL);
+    /* parser/parser_prod.nit:548 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(closctx->REG[12])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 507);
+      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 548);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(closctx->REG[11]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(closctx->REG[12]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:508 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[11]);
+    /* parser/parser_prod.nit:549 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[12]);
     stack_frame_head = fra.me.prev;
     return;
   }
@@ -2841,7 +3076,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 514;
+  fra.me.line = 555;
   fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -2853,7 +3088,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:516 */
+  /* parser/parser_prod.nit:557 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -2868,7 +3103,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:517 */
+    /* parser/parser_prod.nit:558 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -2883,28 +3118,28 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:518 */
+      /* parser/parser_prod.nit:559 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 518);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 559);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:519 */
+      /* parser/parser_prod.nit:560 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 519);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 560);
       }
-      /* parser/parser_prod.nit:520 */
+      /* parser/parser_prod.nit:561 */
       ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:522 */
+      /* parser/parser_prod.nit:563 */
       ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:524 */
+    /* parser/parser_prod.nit:565 */
     goto label1;
   }
-  /* parser/parser_prod.nit:526 */
+  /* parser/parser_prod.nit:567 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -2919,7 +3154,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:527 */
+    /* parser/parser_prod.nit:568 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -2934,32 +3169,32 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:528 */
+      /* parser/parser_prod.nit:569 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 528);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 569);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:529 */
+      /* parser/parser_prod.nit:570 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 529);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 570);
       }
-      /* parser/parser_prod.nit:530 */
+      /* parser/parser_prod.nit:571 */
       ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:532 */
+      /* parser/parser_prod.nit:573 */
       ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:534 */
+    /* parser/parser_prod.nit:575 */
     goto label1;
   }
-  /* parser/parser_prod.nit:536 */
+  /* parser/parser_prod.nit:577 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 536);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 577);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -2969,7 +3204,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:537 */
+    /* parser/parser_prod.nit:578 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -2984,32 +3219,32 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:538 */
+      /* parser/parser_prod.nit:579 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 538);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 579);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:539 */
+      /* parser/parser_prod.nit:580 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 539);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 580);
       }
-      /* parser/parser_prod.nit:540 */
+      /* parser/parser_prod.nit:581 */
       ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:542 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 542);
+      /* parser/parser_prod.nit:583 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 583);
     }
-    /* parser/parser_prod.nit:544 */
+    /* parser/parser_prod.nit:585 */
     goto label1;
   }
-  /* parser/parser_prod.nit:546 */
+  /* parser/parser_prod.nit:587 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classkind", LOCATE_parser___parser_prod, 546);
+    nit_abort("Uninitialized attribute %s", "_n_classkind", LOCATE_parser___parser_prod, 587);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -3019,7 +3254,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:547 */
+    /* parser/parser_prod.nit:588 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -3034,28 +3269,28 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:548 */
+      /* parser/parser_prod.nit:589 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 548);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 589);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:549 */
+      /* parser/parser_prod.nit:590 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast AClasskind*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 549);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 590);
       }
-      /* parser/parser_prod.nit:550 */
+      /* parser/parser_prod.nit:591 */
       ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:552 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 552);
+      /* parser/parser_prod.nit:593 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 593);
     }
-    /* parser/parser_prod.nit:554 */
+    /* parser/parser_prod.nit:595 */
     goto label1;
   }
-  /* parser/parser_prod.nit:556 */
+  /* parser/parser_prod.nit:597 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -3070,7 +3305,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:557 */
+    /* parser/parser_prod.nit:598 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -3085,33 +3320,33 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:558 */
+      /* parser/parser_prod.nit:599 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 558);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 599);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:559 */
+      /* parser/parser_prod.nit:600 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 559);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 600);
       }
-      /* parser/parser_prod.nit:560 */
+      /* parser/parser_prod.nit:601 */
       ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:562 */
+      /* parser/parser_prod.nit:603 */
       ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:564 */
+    /* parser/parser_prod.nit:605 */
     goto label1;
   }
-  /* parser/parser_prod.nit:566 */
+  /* parser/parser_prod.nit:607 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 566);
+    nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 607);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -3126,13 +3361,13 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:566 */
+      /* parser/parser_prod.nit:607 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:567 */
+      /* parser/parser_prod.nit:608 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 567);
+        nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 608);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -3149,7 +3384,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:568 */
+        /* parser/parser_prod.nit:609 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -3164,37 +3399,37 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:569 */
+          /* parser/parser_prod.nit:610 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AFormaldef, ID_parser___parser_nodes___AFormaldef)) /*cast AFormaldef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 569);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 610);
           }
-          /* parser/parser_prod.nit:570 */
+          /* parser/parser_prod.nit:611 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 570);
+            nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 611);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:571 */
+          /* parser/parser_prod.nit:612 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 571);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 612);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:573 */
+          /* parser/parser_prod.nit:614 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 573);
+            nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 614);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:575 */
+        /* parser/parser_prod.nit:616 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -3209,7 +3444,58 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:578 */
+  /* parser/parser_prod.nit:619 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:620 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:621 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 621);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:622 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 622);
+      }
+      /* parser/parser_prod.nit:623 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:625 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:627 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:629 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -3224,7 +3510,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:579 */
+    /* parser/parser_prod.nit:630 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -3239,33 +3525,33 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:580 */
+      /* parser/parser_prod.nit:631 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 580);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 631);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:581 */
+      /* parser/parser_prod.nit:632 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast AExternCodeBlock*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 581);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 632);
       }
-      /* parser/parser_prod.nit:582 */
+      /* parser/parser_prod.nit:633 */
       ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:584 */
+      /* parser/parser_prod.nit:635 */
       ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:586 */
+    /* parser/parser_prod.nit:637 */
     goto label1;
   }
-  /* parser/parser_prod.nit:588 */
+  /* parser/parser_prod.nit:639 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 588);
+    nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 639);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -3280,13 +3566,13 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:588 */
+      /* parser/parser_prod.nit:639 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:589 */
+      /* parser/parser_prod.nit:640 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 589);
+        nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 640);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -3303,7 +3589,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:590 */
+        /* parser/parser_prod.nit:641 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -3318,37 +3604,37 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:591 */
+          /* parser/parser_prod.nit:642 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASuperclass, ID_parser___parser_nodes___ASuperclass)) /*cast ASuperclass*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 591);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 642);
           }
-          /* parser/parser_prod.nit:592 */
+          /* parser/parser_prod.nit:643 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 592);
+            nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 643);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:593 */
+          /* parser/parser_prod.nit:644 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 593);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 644);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:595 */
+          /* parser/parser_prod.nit:646 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 595);
+            nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 646);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:597 */
+        /* parser/parser_prod.nit:648 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -3363,12 +3649,12 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
   }
   label3: while(0);
-  /* parser/parser_prod.nit:600 */
+  /* parser/parser_prod.nit:651 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 600);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 651);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -3383,13 +3669,13 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:600 */
+      /* parser/parser_prod.nit:651 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:601 */
+      /* parser/parser_prod.nit:652 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 601);
+        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 652);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -3406,7 +3692,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:602 */
+        /* parser/parser_prod.nit:653 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -3421,37 +3707,37 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:603 */
+          /* parser/parser_prod.nit:654 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___APropdef, ID_parser___parser_nodes___APropdef)) /*cast APropdef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 603);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 654);
           }
-          /* parser/parser_prod.nit:604 */
+          /* parser/parser_prod.nit:655 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 604);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 655);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:605 */
+          /* parser/parser_prod.nit:656 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 605);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 656);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:607 */
+          /* parser/parser_prod.nit:658 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 607);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 658);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:609 */
+        /* parser/parser_prod.nit:660 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -3466,11 +3752,11 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
   }
   label4: while(0);
-  /* parser/parser_prod.nit:612 */
+  /* parser/parser_prod.nit:663 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 612);
+    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 663);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -3480,7 +3766,7 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:613 */
+    /* parser/parser_prod.nit:664 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -3495,25 +3781,25 @@ void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:614 */
+      /* parser/parser_prod.nit:665 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 614);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 665);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:615 */
+      /* parser/parser_prod.nit:666 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast TKwend*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 615);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 666);
       }
-      /* parser/parser_prod.nit:616 */
+      /* parser/parser_prod.nit:667 */
       ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:618 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 618);
+      /* parser/parser_prod.nit:669 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 669);
     }
-    /* parser/parser_prod.nit:620 */
+    /* parser/parser_prod.nit:671 */
     goto label1;
   }
   label1: while(0);
@@ -3528,7 +3814,7 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 624;
+  fra.me.line = 675;
   fra.me.meth = LOCATE_parser___parser_prod___AStdClassdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -3539,9 +3825,9 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:624 */
+  /* parser/parser_prod.nit:675 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:626 */
+  /* parser/parser_prod.nit:677 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -3557,16 +3843,16 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:627 */
+    /* parser/parser_prod.nit:678 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_doc(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 627);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 678);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:629 */
+  /* parser/parser_prod.nit:680 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -3582,32 +3868,32 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:630 */
+    /* parser/parser_prod.nit:681 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 630);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 681);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:632 */
+  /* parser/parser_prod.nit:683 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 632);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 683);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_visibility(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:633 */
+  /* parser/parser_prod.nit:684 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classkind", LOCATE_parser___parser_prod, 633);
+    nit_abort("Uninitialized attribute %s", "_n_classkind", LOCATE_parser___parser_prod, 684);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_classkind(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:634 */
+  /* parser/parser_prod.nit:685 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -3623,24 +3909,49 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:635 */
+    /* parser/parser_prod.nit:686 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_id(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 635);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 686);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:637 */
+  /* parser/parser_prod.nit:688 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 637);
+    nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser___parser_prod, 688);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[2]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___visit_all_1));
-  /* parser/parser_prod.nit:640 */
+  /* parser/parser_prod.nit:691 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:692 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 692);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:694 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -3656,36 +3967,36 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:641 */
+    /* parser/parser_prod.nit:695 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_extern_code_block(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast AExternCodeBlock*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 641);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 695);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:643 */
+  /* parser/parser_prod.nit:697 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 643);
+    nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser___parser_prod, 697);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[2]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___visit_all_2));
-  /* parser/parser_prod.nit:646 */
+  /* parser/parser_prod.nit:700 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 646);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 700);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[2]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AStdClassdef___visit_all_3));
-  /* parser/parser_prod.nit:649 */
+  /* parser/parser_prod.nit:703 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 649);
+    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser___parser_prod, 703);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AStdClassdef____n_kwend(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -3708,7 +4019,7 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:638 */
+    /* parser/parser_prod.nit:689 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -3729,7 +4040,7 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:644 */
+    /* parser/parser_prod.nit:698 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -3750,7 +4061,7 @@ void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:647 */
+    /* parser/parser_prod.nit:701 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -3763,7 +4074,7 @@ void parser___parser_prod___ATopClassdef___empty_init(val_t p0, int* init_table)
   if (init_table[itpos19]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 653;
+  fra.me.line = 707;
   fra.me.meth = LOCATE_parser___parser_prod___ATopClassdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -3782,7 +4093,7 @@ void parser___parser_prod___ATopClassdef___init_atopclassdef(val_t p0, val_t p1,
   if (init_table[itpos20]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 655;
+  fra.me.line = 709;
   fra.me.meth = LOCATE_parser___parser_prod___ATopClassdef___init_atopclassdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3791,7 +4102,7 @@ void parser___parser_prod___ATopClassdef___init_atopclassdef(val_t p0, val_t p1,
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:659 */
+  /* parser/parser_prod.nit:713 */
   CALL_parser___parser_prod___ATopClassdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ATopClassdef___init_atopclassdef_1));
   stack_frame_head = fra.me.prev;
@@ -3803,7 +4114,7 @@ void parser___parser_prod___ATopClassdef___init_atopclassdef(val_t p0, val_t p1,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:660 */
+    /* parser/parser_prod.nit:714 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -3817,21 +4128,21 @@ void parser___parser_prod___ATopClassdef___init_atopclassdef(val_t p0, val_t p1,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:661 */
+    /* parser/parser_prod.nit:715 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___APropdef, ID_parser___parser_nodes___APropdef)) /*cast APropdef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 661);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 715);
     }
-    /* parser/parser_prod.nit:662 */
+    /* parser/parser_prod.nit:716 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 662);
+      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 716);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:663 */
+    /* parser/parser_prod.nit:717 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -3847,7 +4158,7 @@ void parser___parser_prod___ATopClassdef___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 667;
+  fra.me.line = 721;
   fra.me.meth = LOCATE_parser___parser_prod___ATopClassdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -3859,12 +4170,12 @@ void parser___parser_prod___ATopClassdef___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:669 */
+  /* parser/parser_prod.nit:723 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 669);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 723);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -3879,13 +4190,13 @@ void parser___parser_prod___ATopClassdef___replace_child(val_t p0, val_t p1, val
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:669 */
+      /* parser/parser_prod.nit:723 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:670 */
+      /* parser/parser_prod.nit:724 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 670);
+        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 724);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -3902,7 +4213,7 @@ void parser___parser_prod___ATopClassdef___replace_child(val_t p0, val_t p1, val
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:671 */
+        /* parser/parser_prod.nit:725 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -3917,37 +4228,37 @@ void parser___parser_prod___ATopClassdef___replace_child(val_t p0, val_t p1, val
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:672 */
+          /* parser/parser_prod.nit:726 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___APropdef, ID_parser___parser_nodes___APropdef)) /*cast APropdef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 672);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 726);
           }
-          /* parser/parser_prod.nit:673 */
+          /* parser/parser_prod.nit:727 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 673);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 727);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:674 */
+          /* parser/parser_prod.nit:728 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 674);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 728);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:676 */
+          /* parser/parser_prod.nit:730 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 676);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 730);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:678 */
+        /* parser/parser_prod.nit:732 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -3973,7 +4284,7 @@ void parser___parser_prod___ATopClassdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 683;
+  fra.me.line = 737;
   fra.me.meth = LOCATE_parser___parser_prod___ATopClassdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3982,11 +4293,11 @@ void parser___parser_prod___ATopClassdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:685 */
+  /* parser/parser_prod.nit:739 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 685);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 739);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ATopClassdef___visit_all_1));
@@ -4009,7 +4320,7 @@ void parser___parser_prod___ATopClassdef___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:686 */
+    /* parser/parser_prod.nit:740 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -4022,7 +4333,7 @@ void parser___parser_prod___AMainClassdef___empty_init(val_t p0, int* init_table
   if (init_table[itpos21]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 691;
+  fra.me.line = 745;
   fra.me.meth = LOCATE_parser___parser_prod___AMainClassdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -4041,7 +4352,7 @@ void parser___parser_prod___AMainClassdef___init_amainclassdef(val_t p0, val_t p
   if (init_table[itpos22]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 693;
+  fra.me.line = 747;
   fra.me.meth = LOCATE_parser___parser_prod___AMainClassdef___init_amainclassdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4050,7 +4361,7 @@ void parser___parser_prod___AMainClassdef___init_amainclassdef(val_t p0, val_t p
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:697 */
+  /* parser/parser_prod.nit:751 */
   CALL_parser___parser_prod___AMainClassdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AMainClassdef___init_amainclassdef_1));
   stack_frame_head = fra.me.prev;
@@ -4062,7 +4373,7 @@ void parser___parser_prod___AMainClassdef___init_amainclassdef(val_t p0, val_t p
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:698 */
+    /* parser/parser_prod.nit:752 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -4076,21 +4387,21 @@ void parser___parser_prod___AMainClassdef___init_amainclassdef(val_t p0, val_t p
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:699 */
+    /* parser/parser_prod.nit:753 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___APropdef, ID_parser___parser_nodes___APropdef)) /*cast APropdef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 699);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 753);
     }
-    /* parser/parser_prod.nit:700 */
+    /* parser/parser_prod.nit:754 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 700);
+      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 754);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:701 */
+    /* parser/parser_prod.nit:755 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -4106,7 +4417,7 @@ void parser___parser_prod___AMainClassdef___replace_child(val_t p0, val_t p1, va
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 705;
+  fra.me.line = 759;
   fra.me.meth = LOCATE_parser___parser_prod___AMainClassdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4118,12 +4429,12 @@ void parser___parser_prod___AMainClassdef___replace_child(val_t p0, val_t p1, va
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:707 */
+  /* parser/parser_prod.nit:761 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 707);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 761);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -4138,13 +4449,13 @@ void parser___parser_prod___AMainClassdef___replace_child(val_t p0, val_t p1, va
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:707 */
+      /* parser/parser_prod.nit:761 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:708 */
+      /* parser/parser_prod.nit:762 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 708);
+        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 762);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -4161,7 +4472,7 @@ void parser___parser_prod___AMainClassdef___replace_child(val_t p0, val_t p1, va
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:709 */
+        /* parser/parser_prod.nit:763 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -4176,37 +4487,37 @@ void parser___parser_prod___AMainClassdef___replace_child(val_t p0, val_t p1, va
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:710 */
+          /* parser/parser_prod.nit:764 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___APropdef, ID_parser___parser_nodes___APropdef)) /*cast APropdef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 710);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 764);
           }
-          /* parser/parser_prod.nit:711 */
+          /* parser/parser_prod.nit:765 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 711);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 765);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:712 */
+          /* parser/parser_prod.nit:766 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 712);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 766);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:714 */
+          /* parser/parser_prod.nit:768 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 714);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 768);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:716 */
+        /* parser/parser_prod.nit:770 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -4232,7 +4543,7 @@ void parser___parser_prod___AMainClassdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 721;
+  fra.me.line = 775;
   fra.me.meth = LOCATE_parser___parser_prod___AMainClassdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4241,11 +4552,11 @@ void parser___parser_prod___AMainClassdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:723 */
+  /* parser/parser_prod.nit:777 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 723);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser___parser_prod, 777);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClassdef____n_propdefs(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AMainClassdef___visit_all_1));
@@ -4268,7 +4579,7 @@ void parser___parser_prod___AMainClassdef___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:724 */
+    /* parser/parser_prod.nit:778 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -4281,7 +4592,7 @@ void parser___parser_prod___AConcreteClasskind___empty_init(val_t p0, int* init_
   if (init_table[itpos23]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 729;
+  fra.me.line = 783;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -4301,7 +4612,7 @@ void parser___parser_prod___AConcreteClasskind___init_aconcreteclasskind(val_t p
   if (init_table[itpos24]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 731;
+  fra.me.line = 785;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteClasskind___init_aconcreteclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -4311,21 +4622,21 @@ void parser___parser_prod___AConcreteClasskind___init_aconcreteclasskind(val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:731 */
+  /* parser/parser_prod.nit:785 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:735 */
+  /* parser/parser_prod.nit:789 */
   CALL_parser___parser_prod___AConcreteClasskind___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:736 */
+  /* parser/parser_prod.nit:790 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 736);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 790);
   }
   ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:737 */
+  /* parser/parser_prod.nit:791 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 737);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 791);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -4340,7 +4651,7 @@ void parser___parser_prod___AConcreteClasskind___replace_child(val_t p0, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 740;
+  fra.me.line = 794;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4352,11 +4663,11 @@ void parser___parser_prod___AConcreteClasskind___replace_child(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:742 */
+  /* parser/parser_prod.nit:796 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 742);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 796);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -4366,7 +4677,7 @@ void parser___parser_prod___AConcreteClasskind___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:743 */
+    /* parser/parser_prod.nit:797 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -4381,25 +4692,25 @@ void parser___parser_prod___AConcreteClasskind___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:744 */
+      /* parser/parser_prod.nit:798 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 744);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 798);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:745 */
+      /* parser/parser_prod.nit:799 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwclass, ID_parser___parser_nodes___TKwclass)) /*cast TKwclass*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 745);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 799);
       }
-      /* parser/parser_prod.nit:746 */
+      /* parser/parser_prod.nit:800 */
       ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:748 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 748);
+      /* parser/parser_prod.nit:802 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 802);
     }
-    /* parser/parser_prod.nit:750 */
+    /* parser/parser_prod.nit:804 */
     goto label1;
   }
   label1: while(0);
@@ -4413,7 +4724,7 @@ void parser___parser_prod___AConcreteClasskind___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 754;
+  fra.me.line = 808;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4422,11 +4733,11 @@ void parser___parser_prod___AConcreteClasskind___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:756 */
+  /* parser/parser_prod.nit:810 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 756);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 810);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -4441,7 +4752,7 @@ void parser___parser_prod___AAbstractClasskind___empty_init(val_t p0, int* init_
   if (init_table[itpos25]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 760;
+  fra.me.line = 814;
   fra.me.meth = LOCATE_parser___parser_prod___AAbstractClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -4461,7 +4772,7 @@ void parser___parser_prod___AAbstractClasskind___init_aabstractclasskind(val_t p
   if (init_table[itpos26]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 762;
+  fra.me.line = 816;
   fra.me.meth = LOCATE_parser___parser_prod___AAbstractClasskind___init_aabstractclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4473,34 +4784,34 @@ void parser___parser_prod___AAbstractClasskind___init_aabstractclasskind(val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:762 */
+  /* parser/parser_prod.nit:816 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:767 */
+  /* parser/parser_prod.nit:821 */
   CALL_parser___parser_prod___AAbstractClasskind___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:768 */
+  /* parser/parser_prod.nit:822 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 768);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 822);
   }
   ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:769 */
+  /* parser/parser_prod.nit:823 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 769);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 823);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:770 */
+  /* parser/parser_prod.nit:824 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 770);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 824);
   }
   ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:771 */
+  /* parser/parser_prod.nit:825 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 771);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 825);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -4515,7 +4826,7 @@ void parser___parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 774;
+  fra.me.line = 828;
   fra.me.meth = LOCATE_parser___parser_prod___AAbstractClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4527,11 +4838,11 @@ void parser___parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:776 */
+  /* parser/parser_prod.nit:830 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwabstract", LOCATE_parser___parser_prod, 776);
+    nit_abort("Uninitialized attribute %s", "_n_kwabstract", LOCATE_parser___parser_prod, 830);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -4541,7 +4852,7 @@ void parser___parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:777 */
+    /* parser/parser_prod.nit:831 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -4556,32 +4867,32 @@ void parser___parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:778 */
+      /* parser/parser_prod.nit:832 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 778);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 832);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:779 */
+      /* parser/parser_prod.nit:833 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwabstract, ID_parser___parser_nodes___TKwabstract)) /*cast TKwabstract*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 779);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 833);
       }
-      /* parser/parser_prod.nit:780 */
+      /* parser/parser_prod.nit:834 */
       ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:782 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 782);
+      /* parser/parser_prod.nit:836 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 836);
     }
-    /* parser/parser_prod.nit:784 */
+    /* parser/parser_prod.nit:838 */
     goto label1;
   }
-  /* parser/parser_prod.nit:786 */
+  /* parser/parser_prod.nit:840 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 786);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 840);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -4591,7 +4902,7 @@ void parser___parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:787 */
+    /* parser/parser_prod.nit:841 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -4606,25 +4917,25 @@ void parser___parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:788 */
+      /* parser/parser_prod.nit:842 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 788);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 842);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:789 */
+      /* parser/parser_prod.nit:843 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwclass, ID_parser___parser_nodes___TKwclass)) /*cast TKwclass*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 789);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 843);
       }
-      /* parser/parser_prod.nit:790 */
+      /* parser/parser_prod.nit:844 */
       ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:792 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 792);
+      /* parser/parser_prod.nit:846 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 846);
     }
-    /* parser/parser_prod.nit:794 */
+    /* parser/parser_prod.nit:848 */
     goto label1;
   }
   label1: while(0);
@@ -4638,7 +4949,7 @@ void parser___parser_prod___AAbstractClasskind___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 798;
+  fra.me.line = 852;
   fra.me.meth = LOCATE_parser___parser_prod___AAbstractClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -4648,19 +4959,19 @@ void parser___parser_prod___AAbstractClasskind___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:800 */
+  /* parser/parser_prod.nit:854 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwabstract", LOCATE_parser___parser_prod, 800);
+    nit_abort("Uninitialized attribute %s", "_n_kwabstract", LOCATE_parser___parser_prod, 854);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:801 */
+  /* parser/parser_prod.nit:855 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 801);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser___parser_prod, 855);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -4675,7 +4986,7 @@ void parser___parser_prod___AInterfaceClasskind___empty_init(val_t p0, int* init
   if (init_table[itpos27]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 805;
+  fra.me.line = 859;
   fra.me.meth = LOCATE_parser___parser_prod___AInterfaceClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -4695,7 +5006,7 @@ void parser___parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(val_t
   if (init_table[itpos28]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 807;
+  fra.me.line = 861;
   fra.me.meth = LOCATE_parser___parser_prod___AInterfaceClasskind___init_ainterfaceclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -4705,21 +5016,21 @@ void parser___parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:807 */
+  /* parser/parser_prod.nit:861 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:811 */
+  /* parser/parser_prod.nit:865 */
   CALL_parser___parser_prod___AInterfaceClasskind___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:812 */
+  /* parser/parser_prod.nit:866 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 812);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 866);
   }
   ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:813 */
+  /* parser/parser_prod.nit:867 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 813);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 867);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -4734,7 +5045,7 @@ void parser___parser_prod___AInterfaceClasskind___replace_child(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 816;
+  fra.me.line = 870;
   fra.me.meth = LOCATE_parser___parser_prod___AInterfaceClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4746,11 +5057,11 @@ void parser___parser_prod___AInterfaceClasskind___replace_child(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:818 */
+  /* parser/parser_prod.nit:872 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinterface", LOCATE_parser___parser_prod, 818);
+    nit_abort("Uninitialized attribute %s", "_n_kwinterface", LOCATE_parser___parser_prod, 872);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -4760,7 +5071,7 @@ void parser___parser_prod___AInterfaceClasskind___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:819 */
+    /* parser/parser_prod.nit:873 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -4775,25 +5086,25 @@ void parser___parser_prod___AInterfaceClasskind___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:820 */
+      /* parser/parser_prod.nit:874 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 820);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 874);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:821 */
+      /* parser/parser_prod.nit:875 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwinterface, ID_parser___parser_nodes___TKwinterface)) /*cast TKwinterface*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 821);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 875);
       }
-      /* parser/parser_prod.nit:822 */
+      /* parser/parser_prod.nit:876 */
       ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:824 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 824);
+      /* parser/parser_prod.nit:878 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 878);
     }
-    /* parser/parser_prod.nit:826 */
+    /* parser/parser_prod.nit:880 */
     goto label1;
   }
   label1: while(0);
@@ -4807,7 +5118,7 @@ void parser___parser_prod___AInterfaceClasskind___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 830;
+  fra.me.line = 884;
   fra.me.meth = LOCATE_parser___parser_prod___AInterfaceClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4816,11 +5127,11 @@ void parser___parser_prod___AInterfaceClasskind___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:832 */
+  /* parser/parser_prod.nit:886 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinterface", LOCATE_parser___parser_prod, 832);
+    nit_abort("Uninitialized attribute %s", "_n_kwinterface", LOCATE_parser___parser_prod, 886);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -4835,7 +5146,7 @@ void parser___parser_prod___AEnumClasskind___empty_init(val_t p0, int* init_tabl
   if (init_table[itpos29]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 836;
+  fra.me.line = 890;
   fra.me.meth = LOCATE_parser___parser_prod___AEnumClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -4855,7 +5166,7 @@ void parser___parser_prod___AEnumClasskind___init_aenumclasskind(val_t p0, val_t
   if (init_table[itpos30]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 838;
+  fra.me.line = 892;
   fra.me.meth = LOCATE_parser___parser_prod___AEnumClasskind___init_aenumclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -4865,21 +5176,21 @@ void parser___parser_prod___AEnumClasskind___init_aenumclasskind(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:838 */
+  /* parser/parser_prod.nit:892 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:842 */
+  /* parser/parser_prod.nit:896 */
   CALL_parser___parser_prod___AEnumClasskind___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:843 */
+  /* parser/parser_prod.nit:897 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 843);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 897);
   }
   ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:844 */
+  /* parser/parser_prod.nit:898 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 844);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 898);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -4894,7 +5205,7 @@ void parser___parser_prod___AEnumClasskind___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 847;
+  fra.me.line = 901;
   fra.me.meth = LOCATE_parser___parser_prod___AEnumClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4906,11 +5217,11 @@ void parser___parser_prod___AEnumClasskind___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:849 */
+  /* parser/parser_prod.nit:903 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwenum", LOCATE_parser___parser_prod, 849);
+    nit_abort("Uninitialized attribute %s", "_n_kwenum", LOCATE_parser___parser_prod, 903);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -4920,7 +5231,7 @@ void parser___parser_prod___AEnumClasskind___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:850 */
+    /* parser/parser_prod.nit:904 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -4935,25 +5246,25 @@ void parser___parser_prod___AEnumClasskind___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:851 */
+      /* parser/parser_prod.nit:905 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 851);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 905);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:852 */
+      /* parser/parser_prod.nit:906 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwenum, ID_parser___parser_nodes___TKwenum)) /*cast TKwenum*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 852);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 906);
       }
-      /* parser/parser_prod.nit:853 */
+      /* parser/parser_prod.nit:907 */
       ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:855 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 855);
+      /* parser/parser_prod.nit:909 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 909);
     }
-    /* parser/parser_prod.nit:857 */
+    /* parser/parser_prod.nit:911 */
     goto label1;
   }
   label1: while(0);
@@ -4967,7 +5278,7 @@ void parser___parser_prod___AEnumClasskind___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 861;
+  fra.me.line = 915;
   fra.me.meth = LOCATE_parser___parser_prod___AEnumClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4976,11 +5287,11 @@ void parser___parser_prod___AEnumClasskind___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:863 */
+  /* parser/parser_prod.nit:917 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwenum", LOCATE_parser___parser_prod, 863);
+    nit_abort("Uninitialized attribute %s", "_n_kwenum", LOCATE_parser___parser_prod, 917);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -4995,7 +5306,7 @@ void parser___parser_prod___AExternClasskind___empty_init(val_t p0, int* init_ta
   if (init_table[itpos31]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 867;
+  fra.me.line = 921;
   fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -5007,177 +5318,17 @@ void parser___parser_prod___AExternClasskind___empty_init(val_t p0, int* init_ta
   return;
 }
 static const char LOCATE_parser___parser_prod___AExternClasskind___init_aexternclasskind[] = "parser_prod::AExternClasskind::init_aexternclasskind";
-void parser___parser_prod___AExternClasskind___init_aexternclasskind(val_t p0, val_t p1, int* init_table){
+void parser___parser_prod___AExternClasskind___init_aexternclasskind(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos32 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExternClasskind].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos32]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 869;
-  fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___init_aexternclasskind;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:869 */
-  fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:873 */
-  CALL_parser___parser_prod___AExternClasskind___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:874 */
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 874);
-  }
-  ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:875 */
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 875);
-  }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos32] = 1;
-  return;
-}
-static const char LOCATE_parser___parser_prod___AExternClasskind___replace_child[] = "parser_prod::AExternClasskind::(parser_prod::ANode::replace_child)";
-void parser___parser_prod___AExternClasskind___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
+  if (init_table[itpos32]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 878;
-  fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___replace_child;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:880 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwextern", LOCATE_parser___parser_prod, 880);
-  }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0]);
-  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB0 = REGB1;
-  }
-  if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:881 */
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(0);
-        REGB0 = REGB1;
-      } else {
-        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB0 = REGB1;
-      }
-    }
-    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-    if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:882 */
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 882);
-      }
-      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:883 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwextern, ID_parser___parser_nodes___TKwextern)) /*cast TKwextern*/;
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 883);
-      }
-      /* parser/parser_prod.nit:884 */
-      ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* parser/parser_prod.nit:886 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 886);
-    }
-    /* parser/parser_prod.nit:888 */
-    goto label1;
-  }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___parser_prod___AExternClasskind___visit_all[] = "parser_prod::AExternClasskind::(parser_prod::ANode::visit_all)";
-void parser___parser_prod___AExternClasskind___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 892;
-  fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___visit_all;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:894 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwextern", LOCATE_parser___parser_prod, 894);
-  }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-static const char LOCATE_parser___parser_prod___AFormaldef___empty_init[] = "parser_prod::AFormaldef::empty_init";
-void parser___parser_prod___AFormaldef___empty_init(val_t p0, int* init_table){
-  int itpos33 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFormaldef].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos33]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 898;
-  fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___empty_init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos33] = 1;
-  return;
-}
-static const char LOCATE_parser___parser_prod___AFormaldef___init_aformaldef[] = "parser_prod::AFormaldef::init_aformaldef";
-void parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos34 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFormaldef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  if (init_table[itpos34]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 900;
-  fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___init_aformaldef;
+  fra.me.line = 923;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___init_aexternclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -5188,26 +5339,26 @@ void parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:900 */
+  /* parser/parser_prod.nit:923 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:905 */
-  CALL_parser___parser_prod___AFormaldef___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:906 */
+  /* parser/parser_prod.nit:928 */
+  CALL_parser___parser_prod___AExternClasskind___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:929 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 906);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 929);
   }
-  ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:907 */
+  ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:930 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 907);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 930);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:908 */
-  ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:909 */
+  /* parser/parser_prod.nit:931 */
+  ATTR_parser___parser_nodes___AExternClasskind____n_kwclass(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:932 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5222,27 +5373,27 @@ void parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:910 */
+    /* parser/parser_prod.nit:933 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 910);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 933);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos34] = 1;
+  init_table[itpos32] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___AFormaldef___replace_child[] = "parser_prod::AFormaldef::(parser_prod::ANode::replace_child)";
-void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t p2){
+static const char LOCATE_parser___parser_prod___AExternClasskind___replace_child[] = "parser_prod::AExternClasskind::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AExternClasskind___replace_child(val_t p0, val_t p1, val_t p2){
   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___parser_prod;
-  fra.me.line = 914;
-  fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___replace_child;
+  fra.me.line = 937;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -5253,13 +5404,13 @@ void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:916 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:939 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 916);
+    nit_abort("Uninitialized attribute %s", "_n_kwextern", LOCATE_parser___parser_prod, 939);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5267,7 +5418,7 @@ void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:917 */
+    /* parser/parser_prod.nit:940 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -5282,29 +5433,29 @@ void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:918 */
+      /* parser/parser_prod.nit:941 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 918);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 941);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:919 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
+      /* parser/parser_prod.nit:942 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwextern, ID_parser___parser_nodes___TKwextern)) /*cast TKwextern*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 919);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 942);
       }
-      /* parser/parser_prod.nit:920 */
-      ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:943 */
+      ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:922 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 922);
+      /* parser/parser_prod.nit:945 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 945);
     }
-    /* parser/parser_prod.nit:924 */
+    /* parser/parser_prod.nit:947 */
     goto label1;
   }
-  /* parser/parser_prod.nit:926 */
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]);
+  /* parser/parser_prod.nit:949 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternClasskind____n_kwclass(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5318,7 +5469,7 @@ void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:927 */
+    /* parser/parser_prod.nit:950 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -5333,41 +5484,41 @@ void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:928 */
+      /* parser/parser_prod.nit:951 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 928);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 951);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:929 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
+      /* parser/parser_prod.nit:952 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwclass, ID_parser___parser_nodes___TKwclass)) /*cast TKwclass*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 929);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 952);
       }
-      /* parser/parser_prod.nit:930 */
-      ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:953 */
+      ATTR_parser___parser_nodes___AExternClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:932 */
-      ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = NIT_NULL;
+      /* parser/parser_prod.nit:955 */
+      ATTR_parser___parser_nodes___AExternClasskind____n_kwclass(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:934 */
+    /* parser/parser_prod.nit:957 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___AFormaldef___visit_all[] = "parser_prod::AFormaldef::(parser_prod::ANode::visit_all)";
-void parser___parser_prod___AFormaldef___visit_all(val_t p0, val_t p1){
+static const char LOCATE_parser___parser_prod___AExternClasskind___visit_all[] = "parser_prod::AExternClasskind::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AExternClasskind___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 938;
-  fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___visit_all;
+  fra.me.line = 961;
+  fra.me.meth = LOCATE_parser___parser_prod___AExternClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -5377,18 +5528,18 @@ void parser___parser_prod___AFormaldef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:938 */
+  /* parser/parser_prod.nit:961 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:940 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[2])!=NIT_NULL);
+  /* parser/parser_prod.nit:963 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 940);
+    nit_abort("Uninitialized attribute %s", "_n_kwextern", LOCATE_parser___parser_prod, 963);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[2]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:941 */
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[2]);
+  /* parser/parser_prod.nit:964 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExternClasskind____n_kwclass(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5403,49 +5554,49 @@ void parser___parser_prod___AFormaldef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:942 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[2]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
+    /* parser/parser_prod.nit:965 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AExternClasskind____n_kwclass(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwclass, ID_parser___parser_nodes___TKwclass)) /*cast TKwclass*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 942);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 965);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_parser___parser_prod___ASuperclass___empty_init[] = "parser_prod::ASuperclass::empty_init";
-void parser___parser_prod___ASuperclass___empty_init(val_t p0, int* init_table){
-  int itpos35 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperclass].i;
+static const char LOCATE_parser___parser_prod___AFormaldef___empty_init[] = "parser_prod::AFormaldef::empty_init";
+void parser___parser_prod___AFormaldef___empty_init(val_t p0, int* init_table){
+  int itpos33 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFormaldef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos35]) return;
+  if (init_table[itpos33]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 947;
-  fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___empty_init;
+  fra.me.line = 970;
+  fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos35] = 1;
+  init_table[itpos33] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ASuperclass___init_asuperclass[] = "parser_prod::ASuperclass::init_asuperclass";
-void parser___parser_prod___ASuperclass___init_asuperclass(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos36 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperclass].i;
+static const char LOCATE_parser___parser_prod___AFormaldef___init_aformaldef[] = "parser_prod::AFormaldef::init_aformaldef";
+void parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos34 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFormaldef].i;
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos36]) return;
+  if (init_table[itpos34]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 949;
-  fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___init_asuperclass;
+  fra.me.line = 972;
+  fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___init_aformaldef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
@@ -5458,37 +5609,26 @@ void parser___parser_prod___ASuperclass___init_asuperclass(val_t p0, val_t p1, v
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:949 */
+  /* parser/parser_prod.nit:972 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:955 */
-  CALL_parser___parser_prod___ASuperclass___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:956 */
-  ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:957 */
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* parser/parser_prod.nit:978 */
+  CALL_parser___parser_prod___AFormaldef___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:979 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 979);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:980 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:958 */
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 958);
-    }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 980);
   }
-  /* parser/parser_prod.nit:960 */
-  ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:961 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:981 */
+  ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:982 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5503,40 +5643,51 @@ void parser___parser_prod___ASuperclass___init_asuperclass(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:962 */
+    /* parser/parser_prod.nit:983 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 962);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 983);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* parser/parser_prod.nit:964 */
-  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* parser/parser_prod.nit:985 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:986 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 964);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:965 */
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 965);
+    /* parser/parser_prod.nit:987 */
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 987);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos36] = 1;
+  init_table[itpos34] = 1;
   return;
 }
-static const char LOCATE_parser___parser_prod___ASuperclass___replace_child[] = "parser_prod::ASuperclass::(parser_prod::ANode::replace_child)";
-void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_t p2){
+static const char LOCATE_parser___parser_prod___AFormaldef___replace_child[] = "parser_prod::AFormaldef::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t p2){
   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___parser_prod;
-  fra.me.line = 968;
-  fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___replace_child;
+  fra.me.line = 991;
+  fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -5547,8 +5698,58 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:970 */
-  fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]);
+  /* parser/parser_prod.nit:993 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 993);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:994 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:995 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 995);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:996 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 996);
+      }
+      /* parser/parser_prod.nit:997 */
+      ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:999 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 999);
+    }
+    /* parser/parser_prod.nit:1001 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:1003 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5562,7 +5763,7 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:971 */
+    /* parser/parser_prod.nit:1004 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -5577,29 +5778,29 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:972 */
+      /* parser/parser_prod.nit:1005 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 972);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1005);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:973 */
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwspecial, ID_parser___parser_nodes___TKwspecial)) /*cast TKwspecial*/;
+      /* parser/parser_prod.nit:1006 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 973);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1006);
       }
-      /* parser/parser_prod.nit:974 */
-      ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:1007 */
+      ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:976 */
-      ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]) = NIT_NULL;
+      /* parser/parser_prod.nit:1009 */
+      ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:978 */
+    /* parser/parser_prod.nit:1011 */
     goto label1;
   }
-  /* parser/parser_prod.nit:980 */
-  fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]);
+  /* parser/parser_prod.nit:1013 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5613,7 +5814,7 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:981 */
+    /* parser/parser_prod.nit:1014 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -5628,32 +5829,289 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:982 */
+      /* parser/parser_prod.nit:1015 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 982);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1015);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:983 */
+      /* parser/parser_prod.nit:1016 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1016);
+      }
+      /* parser/parser_prod.nit:1017 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:1019 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:1021 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AFormaldef___visit_all[] = "parser_prod::AFormaldef::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AFormaldef___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 1025;
+  fra.me.meth = LOCATE_parser___parser_prod___AFormaldef___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:1025 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1027 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[2])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 1027);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AFormaldef____n_id(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1028 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1029 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AFormaldef____n_type(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1029);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:1031 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1032 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1032);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ASuperclass___empty_init[] = "parser_prod::ASuperclass::empty_init";
+void parser___parser_prod___ASuperclass___empty_init(val_t p0, int* init_table){
+  int itpos35 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperclass].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos35]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 1037;
+  fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos35] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ASuperclass___init_asuperclass[] = "parser_prod::ASuperclass::init_asuperclass";
+void parser___parser_prod___ASuperclass___init_asuperclass(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos36 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperclass].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos36]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 1039;
+  fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___init_asuperclass;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* parser/parser_prod.nit:1039 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1045 */
+  CALL_parser___parser_prod___ASuperclass___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:1046 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1046);
+  }
+  ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1047 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1047);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:1048 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1048);
+  }
+  ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:1049 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1049);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:1050 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:1051 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1052 */
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1052);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos36] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ASuperclass___replace_child[] = "parser_prod::ASuperclass::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_t p2){
+  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___parser_prod;
+  fra.me.line = 1056;
+  fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:1058 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 1058);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1059 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:1060 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1060);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1061 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast TKwsuper*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 983);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1061);
       }
-      /* parser/parser_prod.nit:984 */
+      /* parser/parser_prod.nit:1062 */
       ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:986 */
-      ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]) = NIT_NULL;
+      /* parser/parser_prod.nit:1064 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1064);
     }
-    /* parser/parser_prod.nit:988 */
+    /* parser/parser_prod.nit:1066 */
     goto label1;
   }
-  /* parser/parser_prod.nit:990 */
+  /* parser/parser_prod.nit:1068 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 990);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 1068);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -5663,7 +6121,7 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:991 */
+    /* parser/parser_prod.nit:1069 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -5678,25 +6136,76 @@ void parser___parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:992 */
+      /* parser/parser_prod.nit:1070 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 992);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1070);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:993 */
+      /* parser/parser_prod.nit:1071 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 993);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1071);
       }
-      /* parser/parser_prod.nit:994 */
+      /* parser/parser_prod.nit:1072 */
       ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:996 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 996);
+      /* parser/parser_prod.nit:1074 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1074);
     }
-    /* parser/parser_prod.nit:998 */
+    /* parser/parser_prod.nit:1076 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:1078 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1079 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:1080 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1080);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1081 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1081);
+      }
+      /* parser/parser_prod.nit:1082 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:1084 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:1086 */
     goto label1;
   }
   label1: while(0);
@@ -5711,7 +6220,7 @@ void parser___parser_prod___ASuperclass___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1002;
+  fra.me.line = 1090;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperclass___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5722,35 +6231,26 @@ void parser___parser_prod___ASuperclass___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:1002 */
+  /* parser/parser_prod.nit:1090 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1004 */
-  fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[2]);
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* parser/parser_prod.nit:1092 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(0);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 1092);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1093 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1005 */
-    fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[2]);
-    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwspecial, ID_parser___parser_nodes___TKwspecial)) /*cast TKwspecial*/;
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1005);
-    }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 1093);
   }
-  /* parser/parser_prod.nit:1007 */
-  fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[2]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1094 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5765,23 +6265,15 @@ void parser___parser_prod___ASuperclass___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1008 */
-    fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[2]);
-    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast TKwsuper*/;
+    /* parser/parser_prod.nit:1095 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1008);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1095);
     }
-    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  }
-  /* parser/parser_prod.nit:1010 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[2])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 1010);
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ASuperclass____n_type(fra.me.REG[2]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -5793,7 +6285,7 @@ void parser___parser_prod___AAttrPropdef___empty_init(val_t p0, int* init_table)
   if (init_table[itpos37]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1014;
+  fra.me.line = 1100;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -5805,19 +6297,19 @@ void parser___parser_prod___AAttrPropdef___empty_init(val_t p0, int* init_table)
   return;
 }
 static const char LOCATE_parser___parser_prod___AAttrPropdef___init_aattrpropdef[] = "parser_prod::AAttrPropdef::init_aattrpropdef";
-void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10, int* init_table){
+void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10, val_t p11, int* init_table){
   int itpos38 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAttrPropdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos38]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1016;
+  fra.me.line = 1102;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___init_aattrpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 13;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -5831,6 +6323,7 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -5842,13 +6335,14 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   fra.me.REG[8] = p8;
   fra.me.REG[9] = p9;
   fra.me.REG[10] = p10;
-  /* parser/parser_prod.nit:1016 */
-  fra.me.REG[11] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1029 */
-  CALL_parser___parser_prod___AAttrPropdef___empty_init(fra.me.REG[11])(fra.me.REG[11], init_table);
-  /* parser/parser_prod.nit:1030 */
-  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[11]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:1031 */
+  fra.me.REG[11] = p11;
+  /* parser/parser_prod.nit:1102 */
+  fra.me.REG[12] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1116 */
+  CALL_parser___parser_prod___AAttrPropdef___empty_init(fra.me.REG[12])(fra.me.REG[12], init_table);
+  /* parser/parser_prod.nit:1117 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[12]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1118 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5863,16 +6357,16 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1032 */
+    /* parser/parser_prod.nit:1119 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1032);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1119);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[11]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:1034 */
-  ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[11]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:1035 */
+  /* parser/parser_prod.nit:1121 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[12]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:1122 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5887,16 +6381,16 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1036 */
+    /* parser/parser_prod.nit:1123 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1036);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1123);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[11]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:1038 */
-  ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[11]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:1039 */
+  /* parser/parser_prod.nit:1125 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[12]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:1126 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5911,16 +6405,16 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1040 */
+    /* parser/parser_prod.nit:1127 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1040);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1127);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[11]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:1042 */
-  ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[11]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:1043 */
+  /* parser/parser_prod.nit:1129 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[12]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:1130 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5935,42 +6429,42 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1044 */
+    /* parser/parser_prod.nit:1131 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1044);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1131);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[11]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:1046 */
+  /* parser/parser_prod.nit:1133 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1046);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1133);
   }
-  ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[11]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:1047 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[12]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:1134 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1047);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1134);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[11]);
-  /* parser/parser_prod.nit:1048 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[12]);
+  /* parser/parser_prod.nit:1135 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1048);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1135);
   }
-  ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[11]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:1049 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[12]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:1136 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1049);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1136);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[11]);
-  /* parser/parser_prod.nit:1050 */
-  ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[11]) = fra.me.REG[7];
-  /* parser/parser_prod.nit:1051 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[12]);
+  /* parser/parser_prod.nit:1137 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[12]) = fra.me.REG[7];
+  /* parser/parser_prod.nit:1138 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5985,16 +6479,16 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1052 */
+    /* parser/parser_prod.nit:1139 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1052);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1139);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[11]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:1054 */
-  ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[11]) = fra.me.REG[8];
-  /* parser/parser_prod.nit:1055 */
+  /* parser/parser_prod.nit:1141 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[12]) = fra.me.REG[8];
+  /* parser/parser_prod.nit:1142 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6009,16 +6503,16 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1056 */
+    /* parser/parser_prod.nit:1143 */
     REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1056);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1143);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[11]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:1058 */
-  ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[11]) = fra.me.REG[9];
-  /* parser/parser_prod.nit:1059 */
+  /* parser/parser_prod.nit:1145 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[12]) = fra.me.REG[9];
+  /* parser/parser_prod.nit:1146 */
   REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6033,16 +6527,16 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1060 */
+    /* parser/parser_prod.nit:1147 */
     REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1060);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1147);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[11]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[12]);
   }
-  /* parser/parser_prod.nit:1062 */
-  ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[11]) = fra.me.REG[10];
-  /* parser/parser_prod.nit:1063 */
+  /* parser/parser_prod.nit:1149 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[12]) = fra.me.REG[10];
+  /* parser/parser_prod.nit:1150 */
   REGB0 = TAG_Bool(fra.me.REG[10]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6057,12 +6551,36 @@ void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1064 */
+    /* parser/parser_prod.nit:1151 */
     REGB0 = TAG_Bool(fra.me.REG[10]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1064);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1151);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[11]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[12]);
+  }
+  /* parser/parser_prod.nit:1153 */
+  ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[12]) = fra.me.REG[11];
+  /* parser/parser_prod.nit:1154 */
+  REGB0 = TAG_Bool(fra.me.REG[11]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[11]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[11])(fra.me.REG[11], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1155 */
+    REGB0 = TAG_Bool(fra.me.REG[11]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1155);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[11])(fra.me.REG[11], fra.me.REG[12]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos38] = 1;
@@ -6076,7 +6594,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1068;
+  fra.me.line = 1159;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -6088,7 +6606,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:1070 */
+  /* parser/parser_prod.nit:1161 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -6103,7 +6621,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1071 */
+    /* parser/parser_prod.nit:1162 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6118,28 +6636,28 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1072 */
+      /* parser/parser_prod.nit:1163 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1072);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1163);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1073 */
+      /* parser/parser_prod.nit:1164 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1073);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1164);
       }
-      /* parser/parser_prod.nit:1074 */
+      /* parser/parser_prod.nit:1165 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1076 */
+      /* parser/parser_prod.nit:1167 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1078 */
+    /* parser/parser_prod.nit:1169 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1080 */
+  /* parser/parser_prod.nit:1171 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -6154,7 +6672,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1081 */
+    /* parser/parser_prod.nit:1172 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6169,28 +6687,28 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1082 */
+      /* parser/parser_prod.nit:1173 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1082);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1173);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1083 */
+      /* parser/parser_prod.nit:1174 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast AAble*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1083);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1174);
       }
-      /* parser/parser_prod.nit:1084 */
+      /* parser/parser_prod.nit:1175 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1086 */
+      /* parser/parser_prod.nit:1177 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1088 */
+    /* parser/parser_prod.nit:1179 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1090 */
+  /* parser/parser_prod.nit:1181 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -6205,7 +6723,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1091 */
+    /* parser/parser_prod.nit:1182 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6220,28 +6738,28 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1092 */
+      /* parser/parser_prod.nit:1183 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1092);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1183);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1093 */
+      /* parser/parser_prod.nit:1184 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast AAble*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1093);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1184);
       }
-      /* parser/parser_prod.nit:1094 */
+      /* parser/parser_prod.nit:1185 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1096 */
+      /* parser/parser_prod.nit:1187 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1098 */
+    /* parser/parser_prod.nit:1189 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1100 */
+  /* parser/parser_prod.nit:1191 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -6256,7 +6774,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1101 */
+    /* parser/parser_prod.nit:1192 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6271,32 +6789,32 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1102 */
+      /* parser/parser_prod.nit:1193 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1102);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1193);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1103 */
+      /* parser/parser_prod.nit:1194 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1103);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1194);
       }
-      /* parser/parser_prod.nit:1104 */
+      /* parser/parser_prod.nit:1195 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1106 */
+      /* parser/parser_prod.nit:1197 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1108 */
+    /* parser/parser_prod.nit:1199 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1110 */
+  /* parser/parser_prod.nit:1201 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 1110);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 1201);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -6306,7 +6824,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1111 */
+    /* parser/parser_prod.nit:1202 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6321,32 +6839,32 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1112 */
+      /* parser/parser_prod.nit:1203 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1112);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1203);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1113 */
+      /* parser/parser_prod.nit:1204 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1113);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1204);
       }
-      /* parser/parser_prod.nit:1114 */
+      /* parser/parser_prod.nit:1205 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1116 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1116);
+      /* parser/parser_prod.nit:1207 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1207);
     }
-    /* parser/parser_prod.nit:1118 */
+    /* parser/parser_prod.nit:1209 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1120 */
+  /* parser/parser_prod.nit:1211 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 1120);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 1211);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -6356,7 +6874,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1121 */
+    /* parser/parser_prod.nit:1212 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6371,28 +6889,28 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1122 */
+      /* parser/parser_prod.nit:1213 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1122);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1213);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1123 */
+      /* parser/parser_prod.nit:1214 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast TKwvar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1123);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1214);
       }
-      /* parser/parser_prod.nit:1124 */
+      /* parser/parser_prod.nit:1215 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1126 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1126);
+      /* parser/parser_prod.nit:1217 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1217);
     }
-    /* parser/parser_prod.nit:1128 */
+    /* parser/parser_prod.nit:1219 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1130 */
+  /* parser/parser_prod.nit:1221 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -6407,7 +6925,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1131 */
+    /* parser/parser_prod.nit:1222 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6422,28 +6940,28 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1132 */
+      /* parser/parser_prod.nit:1223 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1132);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1223);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1133 */
+      /* parser/parser_prod.nit:1224 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast TAttrid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1133);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1224);
       }
-      /* parser/parser_prod.nit:1134 */
+      /* parser/parser_prod.nit:1225 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1136 */
+      /* parser/parser_prod.nit:1227 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1138 */
+    /* parser/parser_prod.nit:1229 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1140 */
+  /* parser/parser_prod.nit:1231 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -6458,7 +6976,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1141 */
+    /* parser/parser_prod.nit:1232 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6473,28 +6991,28 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1142 */
+      /* parser/parser_prod.nit:1233 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1142);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1233);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1143 */
+      /* parser/parser_prod.nit:1234 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1143);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1234);
       }
-      /* parser/parser_prod.nit:1144 */
+      /* parser/parser_prod.nit:1235 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1146 */
+      /* parser/parser_prod.nit:1237 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1148 */
+    /* parser/parser_prod.nit:1239 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1150 */
+  /* parser/parser_prod.nit:1241 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -6509,7 +7027,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1151 */
+    /* parser/parser_prod.nit:1242 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6524,28 +7042,79 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1152 */
+      /* parser/parser_prod.nit:1243 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1152);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1243);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1153 */
+      /* parser/parser_prod.nit:1244 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1153);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1244);
       }
-      /* parser/parser_prod.nit:1154 */
+      /* parser/parser_prod.nit:1245 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1156 */
+      /* parser/parser_prod.nit:1247 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1158 */
+    /* parser/parser_prod.nit:1249 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:1251 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1252 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:1253 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1253);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1254 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1254);
+      }
+      /* parser/parser_prod.nit:1255 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:1257 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:1259 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1160 */
+  /* parser/parser_prod.nit:1261 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -6560,7 +7129,7 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1161 */
+    /* parser/parser_prod.nit:1262 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6575,25 +7144,25 @@ void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1162 */
+      /* parser/parser_prod.nit:1263 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1162);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1263);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1163 */
+      /* parser/parser_prod.nit:1264 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1163);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1264);
       }
-      /* parser/parser_prod.nit:1164 */
+      /* parser/parser_prod.nit:1265 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1166 */
+      /* parser/parser_prod.nit:1267 */
       ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1168 */
+    /* parser/parser_prod.nit:1269 */
     goto label1;
   }
   label1: while(0);
@@ -6608,7 +7177,7 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1172;
+  fra.me.line = 1273;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -6619,9 +7188,9 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:1172 */
+  /* parser/parser_prod.nit:1273 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1174 */
+  /* parser/parser_prod.nit:1275 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -6637,16 +7206,16 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1175 */
+    /* parser/parser_prod.nit:1276 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1175);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1276);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1177 */
+  /* parser/parser_prod.nit:1278 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -6662,16 +7231,16 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1178 */
+    /* parser/parser_prod.nit:1279 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_readable(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast AAble*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1178);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1279);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1180 */
+  /* parser/parser_prod.nit:1281 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -6687,16 +7256,16 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1181 */
+    /* parser/parser_prod.nit:1282 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_writable(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast AAble*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1181);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1282);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1183 */
+  /* parser/parser_prod.nit:1284 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -6712,32 +7281,32 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1184 */
+    /* parser/parser_prod.nit:1285 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1184);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1285);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1186 */
+  /* parser/parser_prod.nit:1287 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 1186);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 1287);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1187 */
+  /* parser/parser_prod.nit:1288 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 1187);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 1288);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1188 */
+  /* parser/parser_prod.nit:1289 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -6753,16 +7322,16 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1189 */
+    /* parser/parser_prod.nit:1290 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_id(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast TAttrid*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1189);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1290);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1191 */
+  /* parser/parser_prod.nit:1292 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -6778,16 +7347,16 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1192 */
+    /* parser/parser_prod.nit:1293 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_id2(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1192);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1293);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1194 */
+  /* parser/parser_prod.nit:1295 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -6803,16 +7372,41 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1195 */
+    /* parser/parser_prod.nit:1296 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_type(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1195);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1296);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1197 */
+  /* parser/parser_prod.nit:1298 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1299 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1299);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:1301 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -6828,12 +7422,12 @@ void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1198 */
+    /* parser/parser_prod.nit:1302 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrPropdef____n_expr(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1198);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1302);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -6848,7 +7442,7 @@ void parser___parser_prod___AMethPropdef___empty_init(val_t p0, int* init_table)
   if (init_table[itpos39]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1203;
+  fra.me.line = 1307;
   fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -6869,7 +7463,7 @@ void parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1,
   if (init_table[itpos40]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1205;
+  fra.me.line = 1309;
   fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___init_amethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -6887,13 +7481,13 @@ void parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1,
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:1205 */
+  /* parser/parser_prod.nit:1309 */
   fra.me.REG[6] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1213 */
+  /* parser/parser_prod.nit:1317 */
   CALL_parser___parser_prod___AMethPropdef___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
-  /* parser/parser_prod.nit:1214 */
+  /* parser/parser_prod.nit:1318 */
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[6]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:1215 */
+  /* parser/parser_prod.nit:1319 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6908,16 +7502,16 @@ void parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1216 */
+    /* parser/parser_prod.nit:1320 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1216);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1320);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
   }
-  /* parser/parser_prod.nit:1218 */
+  /* parser/parser_prod.nit:1322 */
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[6]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:1219 */
+  /* parser/parser_prod.nit:1323 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6932,50 +7526,50 @@ void parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1220 */
+    /* parser/parser_prod.nit:1324 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1220);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1324);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
   }
-  /* parser/parser_prod.nit:1222 */
+  /* parser/parser_prod.nit:1326 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1222);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1326);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[6]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:1223 */
+  /* parser/parser_prod.nit:1327 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1223);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1327);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
-  /* parser/parser_prod.nit:1224 */
+  /* parser/parser_prod.nit:1328 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1224);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1328);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[6]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:1225 */
+  /* parser/parser_prod.nit:1329 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1225);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1329);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-  /* parser/parser_prod.nit:1226 */
+  /* parser/parser_prod.nit:1330 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1226);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1330);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[6]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:1227 */
+  /* parser/parser_prod.nit:1331 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1227);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1331);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   stack_frame_head = fra.me.prev;
@@ -6990,7 +7584,7 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1230;
+  fra.me.line = 1334;
   fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -7002,7 +7596,7 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:1232 */
+  /* parser/parser_prod.nit:1336 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -7017,7 +7611,7 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1233 */
+    /* parser/parser_prod.nit:1337 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7032,28 +7626,28 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1234 */
+      /* parser/parser_prod.nit:1338 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1234);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1338);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1235 */
+      /* parser/parser_prod.nit:1339 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1235);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1339);
       }
-      /* parser/parser_prod.nit:1236 */
+      /* parser/parser_prod.nit:1340 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1238 */
+      /* parser/parser_prod.nit:1342 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1240 */
+    /* parser/parser_prod.nit:1344 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1242 */
+  /* parser/parser_prod.nit:1346 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -7068,7 +7662,7 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1243 */
+    /* parser/parser_prod.nit:1347 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7083,28 +7677,28 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1244 */
+      /* parser/parser_prod.nit:1348 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1244);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1348);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1245 */
+      /* parser/parser_prod.nit:1349 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1245);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1349);
       }
-      /* parser/parser_prod.nit:1246 */
+      /* parser/parser_prod.nit:1350 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1248 */
+      /* parser/parser_prod.nit:1352 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1250 */
+    /* parser/parser_prod.nit:1354 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1252 */
+  /* parser/parser_prod.nit:1356 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -7119,7 +7713,7 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1253 */
+    /* parser/parser_prod.nit:1357 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7134,28 +7728,28 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1254 */
+      /* parser/parser_prod.nit:1358 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1254);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1358);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1255 */
+      /* parser/parser_prod.nit:1359 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1255);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1359);
       }
-      /* parser/parser_prod.nit:1256 */
+      /* parser/parser_prod.nit:1360 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1258 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1258);
+      /* parser/parser_prod.nit:1362 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1362);
     }
-    /* parser/parser_prod.nit:1260 */
+    /* parser/parser_prod.nit:1364 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1262 */
+  /* parser/parser_prod.nit:1366 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -7170,7 +7764,7 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1263 */
+    /* parser/parser_prod.nit:1367 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7185,28 +7779,28 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1264 */
+      /* parser/parser_prod.nit:1368 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1264);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1368);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1265 */
+      /* parser/parser_prod.nit:1369 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1265);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1369);
       }
-      /* parser/parser_prod.nit:1266 */
+      /* parser/parser_prod.nit:1370 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1268 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1268);
+      /* parser/parser_prod.nit:1372 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1372);
     }
-    /* parser/parser_prod.nit:1270 */
+    /* parser/parser_prod.nit:1374 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1272 */
+  /* parser/parser_prod.nit:1376 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -7221,7 +7815,7 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1273 */
+    /* parser/parser_prod.nit:1377 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7236,25 +7830,25 @@ void parser___parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1274 */
+      /* parser/parser_prod.nit:1378 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1274);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1378);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1275 */
+      /* parser/parser_prod.nit:1379 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1275);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1379);
       }
-      /* parser/parser_prod.nit:1276 */
+      /* parser/parser_prod.nit:1380 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1278 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1278);
+      /* parser/parser_prod.nit:1382 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1382);
     }
-    /* parser/parser_prod.nit:1280 */
+    /* parser/parser_prod.nit:1384 */
     goto label1;
   }
   label1: while(0);
@@ -7269,7 +7863,7 @@ void parser___parser_prod___AMethPropdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1284;
+  fra.me.line = 1388;
   fra.me.meth = LOCATE_parser___parser_prod___AMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -7280,9 +7874,9 @@ void parser___parser_prod___AMethPropdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:1284 */
+  /* parser/parser_prod.nit:1388 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1286 */
+  /* parser/parser_prod.nit:1390 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -7298,16 +7892,16 @@ void parser___parser_prod___AMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1287 */
+    /* parser/parser_prod.nit:1391 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1287);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1391);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1289 */
+  /* parser/parser_prod.nit:1393 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -7323,22 +7917,22 @@ void parser___parser_prod___AMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1290 */
+    /* parser/parser_prod.nit:1394 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1290);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1394);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1292 */
+  /* parser/parser_prod.nit:1396 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1293 */
+  /* parser/parser_prod.nit:1397 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1294 */
+  /* parser/parser_prod.nit:1398 */
   fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -7352,7 +7946,7 @@ void parser___parser_prod___ADeferredMethPropdef___empty_init(val_t p0, int* ini
   if (init_table[itpos41]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1298;
+  fra.me.line = 1402;
   fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -7364,19 +7958,19 @@ void parser___parser_prod___ADeferredMethPropdef___empty_init(val_t p0, int* ini
   return;
 }
 static const char LOCATE_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef[] = "parser_prod::ADeferredMethPropdef::init_adeferredmethpropdef";
-void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
+void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table){
   int itpos42 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ADeferredMethPropdef].i;
-  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 REGB1;
   val_t tmp;
   if (init_table[itpos42]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1300;
+  fra.me.line = 1404;
   fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -7386,6 +7980,7 @@ void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -7393,13 +7988,14 @@ void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* parser/parser_prod.nit:1300 */
-  fra.me.REG[7] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1309 */
-  CALL_parser___parser_prod___ADeferredMethPropdef___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
-  /* parser/parser_prod.nit:1310 */
-  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[7]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:1311 */
+  fra.me.REG[7] = p7;
+  /* parser/parser_prod.nit:1404 */
+  fra.me.REG[8] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1414 */
+  CALL_parser___parser_prod___ADeferredMethPropdef___empty_init(fra.me.REG[8])(fra.me.REG[8], init_table);
+  /* parser/parser_prod.nit:1415 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[8]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1416 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7414,16 +8010,16 @@ void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1312 */
+    /* parser/parser_prod.nit:1417 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1312);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1417);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[8]);
   }
-  /* parser/parser_prod.nit:1314 */
-  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[7]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:1315 */
+  /* parser/parser_prod.nit:1419 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[8]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:1420 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7438,65 +8034,89 @@ void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1316 */
+    /* parser/parser_prod.nit:1421 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1316);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1421);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[8]);
   }
-  /* parser/parser_prod.nit:1318 */
+  /* parser/parser_prod.nit:1423 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1318);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1423);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[7]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:1319 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[8]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:1424 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1319);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1424);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
-  /* parser/parser_prod.nit:1320 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[8]);
+  /* parser/parser_prod.nit:1425 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1320);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1425);
   }
-  ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[7]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:1321 */
+  ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[8]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:1426 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1321);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1426);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
-  /* parser/parser_prod.nit:1322 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[8]);
+  /* parser/parser_prod.nit:1427 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1322);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1427);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[7]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:1323 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[8]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:1428 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1323);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1428);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
-  /* parser/parser_prod.nit:1324 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[8]);
+  /* parser/parser_prod.nit:1429 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1324);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1429);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[7]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:1325 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[8]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:1430 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1325);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1430);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[8]);
+  /* parser/parser_prod.nit:1431 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[8]) = fra.me.REG[7];
+  /* parser/parser_prod.nit:1432 */
+  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1433 */
+    REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1433);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   stack_frame_head = fra.me.prev;
   init_table[itpos42] = 1;
   return;
@@ -7509,7 +8129,7 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1328;
+  fra.me.line = 1437;
   fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -7521,7 +8141,7 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:1330 */
+  /* parser/parser_prod.nit:1439 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -7536,7 +8156,7 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1331 */
+    /* parser/parser_prod.nit:1440 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7551,28 +8171,28 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1332 */
+      /* parser/parser_prod.nit:1441 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1332);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1441);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1333 */
+      /* parser/parser_prod.nit:1442 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1333);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1442);
       }
-      /* parser/parser_prod.nit:1334 */
+      /* parser/parser_prod.nit:1443 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1336 */
+      /* parser/parser_prod.nit:1445 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1338 */
+    /* parser/parser_prod.nit:1447 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1340 */
+  /* parser/parser_prod.nit:1449 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -7587,7 +8207,7 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1341 */
+    /* parser/parser_prod.nit:1450 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7602,28 +8222,28 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1342 */
+      /* parser/parser_prod.nit:1451 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1342);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1451);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1343 */
+      /* parser/parser_prod.nit:1452 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1343);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1452);
       }
-      /* parser/parser_prod.nit:1344 */
+      /* parser/parser_prod.nit:1453 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1346 */
+      /* parser/parser_prod.nit:1455 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1348 */
+    /* parser/parser_prod.nit:1457 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1350 */
+  /* parser/parser_prod.nit:1459 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -7638,7 +8258,7 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1351 */
+    /* parser/parser_prod.nit:1460 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7653,32 +8273,32 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1352 */
+      /* parser/parser_prod.nit:1461 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1352);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1461);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1353 */
+      /* parser/parser_prod.nit:1462 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1353);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1462);
       }
-      /* parser/parser_prod.nit:1354 */
+      /* parser/parser_prod.nit:1463 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1356 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1356);
+      /* parser/parser_prod.nit:1465 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1465);
     }
-    /* parser/parser_prod.nit:1358 */
+    /* parser/parser_prod.nit:1467 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1360 */
+  /* parser/parser_prod.nit:1469 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1360);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1469);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -7688,7 +8308,7 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1361 */
+    /* parser/parser_prod.nit:1470 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7703,28 +8323,28 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1362 */
+      /* parser/parser_prod.nit:1471 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1362);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1471);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1363 */
+      /* parser/parser_prod.nit:1472 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast TKwmeth*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1363);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1472);
       }
-      /* parser/parser_prod.nit:1364 */
+      /* parser/parser_prod.nit:1473 */
       ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1366 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1366);
+      /* parser/parser_prod.nit:1475 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1475);
     }
-    /* parser/parser_prod.nit:1368 */
+    /* parser/parser_prod.nit:1477 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1370 */
+  /* parser/parser_prod.nit:1479 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -7739,7 +8359,7 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1371 */
+    /* parser/parser_prod.nit:1480 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7754,28 +8374,28 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1372 */
+      /* parser/parser_prod.nit:1481 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1372);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1481);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1373 */
+      /* parser/parser_prod.nit:1482 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1373);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1482);
       }
-      /* parser/parser_prod.nit:1374 */
+      /* parser/parser_prod.nit:1483 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1376 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1376);
+      /* parser/parser_prod.nit:1485 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1485);
     }
-    /* parser/parser_prod.nit:1378 */
+    /* parser/parser_prod.nit:1487 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1380 */
+  /* parser/parser_prod.nit:1489 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -7790,7 +8410,7 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1381 */
+    /* parser/parser_prod.nit:1490 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -7805,25 +8425,76 @@ void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1382 */
+      /* parser/parser_prod.nit:1491 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1382);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1491);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1383 */
+      /* parser/parser_prod.nit:1492 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1383);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1492);
       }
-      /* parser/parser_prod.nit:1384 */
+      /* parser/parser_prod.nit:1493 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1386 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1386);
+      /* parser/parser_prod.nit:1495 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1495);
     }
-    /* parser/parser_prod.nit:1388 */
+    /* parser/parser_prod.nit:1497 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:1499 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1500 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:1501 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1501);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1502 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1502);
+      }
+      /* parser/parser_prod.nit:1503 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:1505 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:1507 */
     goto label1;
   }
   label1: while(0);
@@ -7838,7 +8509,7 @@ void parser___parser_prod___ADeferredMethPropdef___visit_all(val_t p0, val_t p1)
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1392;
+  fra.me.line = 1511;
   fra.me.meth = LOCATE_parser___parser_prod___ADeferredMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -7849,9 +8520,9 @@ void parser___parser_prod___ADeferredMethPropdef___visit_all(val_t p0, val_t p1)
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:1392 */
+  /* parser/parser_prod.nit:1511 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1394 */
+  /* parser/parser_prod.nit:1513 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -7867,16 +8538,16 @@ void parser___parser_prod___ADeferredMethPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1395 */
+    /* parser/parser_prod.nit:1514 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1395);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1514);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1397 */
+  /* parser/parser_prod.nit:1516 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -7892,32 +8563,57 @@ void parser___parser_prod___ADeferredMethPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1398 */
+    /* parser/parser_prod.nit:1517 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1398);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1517);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1400 */
+  /* parser/parser_prod.nit:1519 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1401 */
+  /* parser/parser_prod.nit:1520 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1401);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1520);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1402 */
+  /* parser/parser_prod.nit:1521 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1403 */
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[2]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser_prod.nit:1522 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:1523 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1524 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1524);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -7929,7 +8625,7 @@ void parser___parser_prod___AInternMethPropdef___empty_init(val_t p0, int* init_
   if (init_table[itpos43]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1407;
+  fra.me.line = 1529;
   fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -7950,7 +8646,7 @@ void parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p
   if (init_table[itpos44]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1409;
+  fra.me.line = 1531;
   fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -7970,13 +8666,13 @@ void parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* parser/parser_prod.nit:1409 */
+  /* parser/parser_prod.nit:1531 */
   fra.me.REG[7] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1418 */
+  /* parser/parser_prod.nit:1540 */
   CALL_parser___parser_prod___AInternMethPropdef___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
-  /* parser/parser_prod.nit:1419 */
+  /* parser/parser_prod.nit:1541 */
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[7]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:1420 */
+  /* parser/parser_prod.nit:1542 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7991,16 +8687,16 @@ void parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1421 */
+    /* parser/parser_prod.nit:1543 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1421);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1543);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
   }
-  /* parser/parser_prod.nit:1423 */
+  /* parser/parser_prod.nit:1545 */
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[7]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:1424 */
+  /* parser/parser_prod.nit:1546 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8015,63 +8711,63 @@ void parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1425 */
+    /* parser/parser_prod.nit:1547 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1425);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1547);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
   }
-  /* parser/parser_prod.nit:1427 */
+  /* parser/parser_prod.nit:1549 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1427);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1549);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[7]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:1428 */
+  /* parser/parser_prod.nit:1550 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1428);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1550);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
-  /* parser/parser_prod.nit:1429 */
+  /* parser/parser_prod.nit:1551 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1429);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1551);
   }
   ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[7]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:1430 */
+  /* parser/parser_prod.nit:1552 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1430);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1552);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
-  /* parser/parser_prod.nit:1431 */
+  /* parser/parser_prod.nit:1553 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1431);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1553);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[7]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:1432 */
+  /* parser/parser_prod.nit:1554 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1432);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1554);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
-  /* parser/parser_prod.nit:1433 */
+  /* parser/parser_prod.nit:1555 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1433);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1555);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[7]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:1434 */
+  /* parser/parser_prod.nit:1556 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1434);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1556);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   stack_frame_head = fra.me.prev;
@@ -8086,7 +8782,7 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1437;
+  fra.me.line = 1559;
   fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -8098,7 +8794,7 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:1439 */
+  /* parser/parser_prod.nit:1561 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -8113,7 +8809,7 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1440 */
+    /* parser/parser_prod.nit:1562 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8128,28 +8824,28 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1441 */
+      /* parser/parser_prod.nit:1563 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1441);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1563);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1442 */
+      /* parser/parser_prod.nit:1564 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1442);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1564);
       }
-      /* parser/parser_prod.nit:1443 */
+      /* parser/parser_prod.nit:1565 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1445 */
+      /* parser/parser_prod.nit:1567 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1447 */
+    /* parser/parser_prod.nit:1569 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1449 */
+  /* parser/parser_prod.nit:1571 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -8164,7 +8860,7 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1450 */
+    /* parser/parser_prod.nit:1572 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8179,28 +8875,28 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1451 */
+      /* parser/parser_prod.nit:1573 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1451);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1573);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1452 */
+      /* parser/parser_prod.nit:1574 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1452);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1574);
       }
-      /* parser/parser_prod.nit:1453 */
+      /* parser/parser_prod.nit:1575 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1455 */
+      /* parser/parser_prod.nit:1577 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1457 */
+    /* parser/parser_prod.nit:1579 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1459 */
+  /* parser/parser_prod.nit:1581 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -8215,7 +8911,7 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1460 */
+    /* parser/parser_prod.nit:1582 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8230,32 +8926,32 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1461 */
+      /* parser/parser_prod.nit:1583 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1461);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1583);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1462 */
+      /* parser/parser_prod.nit:1584 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1462);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1584);
       }
-      /* parser/parser_prod.nit:1463 */
+      /* parser/parser_prod.nit:1585 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1465 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1465);
+      /* parser/parser_prod.nit:1587 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1587);
     }
-    /* parser/parser_prod.nit:1467 */
+    /* parser/parser_prod.nit:1589 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1469 */
+  /* parser/parser_prod.nit:1591 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1469);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1591);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -8265,7 +8961,7 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1470 */
+    /* parser/parser_prod.nit:1592 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8280,28 +8976,28 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1471 */
+      /* parser/parser_prod.nit:1593 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1471);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1593);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1472 */
+      /* parser/parser_prod.nit:1594 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast TKwmeth*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1472);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1594);
       }
-      /* parser/parser_prod.nit:1473 */
+      /* parser/parser_prod.nit:1595 */
       ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1475 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1475);
+      /* parser/parser_prod.nit:1597 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1597);
     }
-    /* parser/parser_prod.nit:1477 */
+    /* parser/parser_prod.nit:1599 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1479 */
+  /* parser/parser_prod.nit:1601 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -8316,7 +9012,7 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1480 */
+    /* parser/parser_prod.nit:1602 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8331,28 +9027,28 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1481 */
+      /* parser/parser_prod.nit:1603 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1481);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1603);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1482 */
+      /* parser/parser_prod.nit:1604 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1482);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1604);
       }
-      /* parser/parser_prod.nit:1483 */
+      /* parser/parser_prod.nit:1605 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1485 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1485);
+      /* parser/parser_prod.nit:1607 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1607);
     }
-    /* parser/parser_prod.nit:1487 */
+    /* parser/parser_prod.nit:1609 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1489 */
+  /* parser/parser_prod.nit:1611 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -8367,7 +9063,7 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1490 */
+    /* parser/parser_prod.nit:1612 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8382,25 +9078,25 @@ void parser___parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1491 */
+      /* parser/parser_prod.nit:1613 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1491);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1613);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1492 */
+      /* parser/parser_prod.nit:1614 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1492);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1614);
       }
-      /* parser/parser_prod.nit:1493 */
+      /* parser/parser_prod.nit:1615 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1495 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1495);
+      /* parser/parser_prod.nit:1617 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1617);
     }
-    /* parser/parser_prod.nit:1497 */
+    /* parser/parser_prod.nit:1619 */
     goto label1;
   }
   label1: while(0);
@@ -8415,7 +9111,7 @@ void parser___parser_prod___AInternMethPropdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1501;
+  fra.me.line = 1623;
   fra.me.meth = LOCATE_parser___parser_prod___AInternMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -8426,9 +9122,9 @@ void parser___parser_prod___AInternMethPropdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:1501 */
+  /* parser/parser_prod.nit:1623 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1503 */
+  /* parser/parser_prod.nit:1625 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -8444,16 +9140,16 @@ void parser___parser_prod___AInternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1504 */
+    /* parser/parser_prod.nit:1626 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1504);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1626);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1506 */
+  /* parser/parser_prod.nit:1628 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -8469,30 +9165,30 @@ void parser___parser_prod___AInternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1507 */
+    /* parser/parser_prod.nit:1629 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1507);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1629);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1509 */
+  /* parser/parser_prod.nit:1631 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1510 */
+  /* parser/parser_prod.nit:1632 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1510);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1632);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1511 */
+  /* parser/parser_prod.nit:1633 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1512 */
+  /* parser/parser_prod.nit:1634 */
   fra.me.REG[2] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -8506,7 +9202,7 @@ void parser___parser_prod___AExternMethPropdef___empty_init(val_t p0, int* init_
   if (init_table[itpos45]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1516;
+  fra.me.line = 1638;
   fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -8527,7 +9223,7 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   if (init_table[itpos46]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1518;
+  fra.me.line = 1640;
   fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -8553,13 +9249,13 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   fra.me.REG[7] = p7;
   fra.me.REG[8] = p8;
   fra.me.REG[9] = p9;
-  /* parser/parser_prod.nit:1518 */
+  /* parser/parser_prod.nit:1640 */
   fra.me.REG[10] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1530 */
+  /* parser/parser_prod.nit:1652 */
   CALL_parser___parser_prod___AExternMethPropdef___empty_init(fra.me.REG[10])(fra.me.REG[10], init_table);
-  /* parser/parser_prod.nit:1531 */
+  /* parser/parser_prod.nit:1653 */
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[10]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:1532 */
+  /* parser/parser_prod.nit:1654 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8574,16 +9270,16 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1533 */
+    /* parser/parser_prod.nit:1655 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1533);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1655);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:1535 */
+  /* parser/parser_prod.nit:1657 */
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[10]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:1536 */
+  /* parser/parser_prod.nit:1658 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8598,68 +9294,68 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1537 */
+    /* parser/parser_prod.nit:1659 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1537);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1659);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:1539 */
+  /* parser/parser_prod.nit:1661 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1539);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1661);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[10]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:1540 */
+  /* parser/parser_prod.nit:1662 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1540);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1662);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[10]);
-  /* parser/parser_prod.nit:1541 */
+  /* parser/parser_prod.nit:1663 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1541);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1663);
   }
   ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[10]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:1542 */
+  /* parser/parser_prod.nit:1664 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1542);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1664);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[10]);
-  /* parser/parser_prod.nit:1543 */
+  /* parser/parser_prod.nit:1665 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1543);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1665);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[10]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:1544 */
+  /* parser/parser_prod.nit:1666 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1544);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1666);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[10]);
-  /* parser/parser_prod.nit:1545 */
+  /* parser/parser_prod.nit:1667 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1545);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1667);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[10]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:1546 */
+  /* parser/parser_prod.nit:1668 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1546);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1668);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[10]);
-  /* parser/parser_prod.nit:1547 */
+  /* parser/parser_prod.nit:1669 */
   ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[10]) = fra.me.REG[7];
-  /* parser/parser_prod.nit:1548 */
+  /* parser/parser_prod.nit:1670 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8674,16 +9370,16 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1549 */
+    /* parser/parser_prod.nit:1671 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1549);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1671);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:1551 */
+  /* parser/parser_prod.nit:1673 */
   ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[10]) = fra.me.REG[8];
-  /* parser/parser_prod.nit:1552 */
+  /* parser/parser_prod.nit:1674 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8698,16 +9394,16 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1553 */
+    /* parser/parser_prod.nit:1675 */
     REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1553);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1675);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:1555 */
+  /* parser/parser_prod.nit:1677 */
   ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[10]) = fra.me.REG[9];
-  /* parser/parser_prod.nit:1556 */
+  /* parser/parser_prod.nit:1678 */
   REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8722,10 +9418,10 @@ void parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1557 */
+    /* parser/parser_prod.nit:1679 */
     REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1557);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1679);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[10]);
   }
@@ -8741,7 +9437,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1561;
+  fra.me.line = 1683;
   fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -8753,7 +9449,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:1563 */
+  /* parser/parser_prod.nit:1685 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -8768,7 +9464,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1564 */
+    /* parser/parser_prod.nit:1686 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8783,28 +9479,28 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1565 */
+      /* parser/parser_prod.nit:1687 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1565);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1687);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1566 */
+      /* parser/parser_prod.nit:1688 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1566);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1688);
       }
-      /* parser/parser_prod.nit:1567 */
+      /* parser/parser_prod.nit:1689 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1569 */
+      /* parser/parser_prod.nit:1691 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1571 */
+    /* parser/parser_prod.nit:1693 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1573 */
+  /* parser/parser_prod.nit:1695 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -8819,7 +9515,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1574 */
+    /* parser/parser_prod.nit:1696 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8834,28 +9530,28 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1575 */
+      /* parser/parser_prod.nit:1697 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1575);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1697);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1576 */
+      /* parser/parser_prod.nit:1698 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1576);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1698);
       }
-      /* parser/parser_prod.nit:1577 */
+      /* parser/parser_prod.nit:1699 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1579 */
+      /* parser/parser_prod.nit:1701 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1581 */
+    /* parser/parser_prod.nit:1703 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1583 */
+  /* parser/parser_prod.nit:1705 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -8870,7 +9566,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1584 */
+    /* parser/parser_prod.nit:1706 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8885,32 +9581,32 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1585 */
+      /* parser/parser_prod.nit:1707 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1585);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1707);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1586 */
+      /* parser/parser_prod.nit:1708 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1586);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1708);
       }
-      /* parser/parser_prod.nit:1587 */
+      /* parser/parser_prod.nit:1709 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1589 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1589);
+      /* parser/parser_prod.nit:1711 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1711);
     }
-    /* parser/parser_prod.nit:1591 */
+    /* parser/parser_prod.nit:1713 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1593 */
+  /* parser/parser_prod.nit:1715 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1593);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1715);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -8920,7 +9616,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1594 */
+    /* parser/parser_prod.nit:1716 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8935,28 +9631,28 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1595 */
+      /* parser/parser_prod.nit:1717 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1595);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1717);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1596 */
+      /* parser/parser_prod.nit:1718 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast TKwmeth*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1596);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1718);
       }
-      /* parser/parser_prod.nit:1597 */
+      /* parser/parser_prod.nit:1719 */
       ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1599 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1599);
+      /* parser/parser_prod.nit:1721 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1721);
     }
-    /* parser/parser_prod.nit:1601 */
+    /* parser/parser_prod.nit:1723 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1603 */
+  /* parser/parser_prod.nit:1725 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -8971,7 +9667,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1604 */
+    /* parser/parser_prod.nit:1726 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8986,28 +9682,28 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1605 */
+      /* parser/parser_prod.nit:1727 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1605);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1727);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1606 */
+      /* parser/parser_prod.nit:1728 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1606);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1728);
       }
-      /* parser/parser_prod.nit:1607 */
+      /* parser/parser_prod.nit:1729 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1609 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1609);
+      /* parser/parser_prod.nit:1731 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1731);
     }
-    /* parser/parser_prod.nit:1611 */
+    /* parser/parser_prod.nit:1733 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1613 */
+  /* parser/parser_prod.nit:1735 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -9022,7 +9718,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1614 */
+    /* parser/parser_prod.nit:1736 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9037,28 +9733,28 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1615 */
+      /* parser/parser_prod.nit:1737 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1615);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1737);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1616 */
+      /* parser/parser_prod.nit:1738 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1616);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1738);
       }
-      /* parser/parser_prod.nit:1617 */
+      /* parser/parser_prod.nit:1739 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1619 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1619);
+      /* parser/parser_prod.nit:1741 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1741);
     }
-    /* parser/parser_prod.nit:1621 */
+    /* parser/parser_prod.nit:1743 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1623 */
+  /* parser/parser_prod.nit:1745 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -9073,7 +9769,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1624 */
+    /* parser/parser_prod.nit:1746 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9088,28 +9784,28 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1625 */
+      /* parser/parser_prod.nit:1747 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1625);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1747);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1626 */
+      /* parser/parser_prod.nit:1748 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast TString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1626);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1748);
       }
-      /* parser/parser_prod.nit:1627 */
+      /* parser/parser_prod.nit:1749 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1629 */
+      /* parser/parser_prod.nit:1751 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1631 */
+    /* parser/parser_prod.nit:1753 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1633 */
+  /* parser/parser_prod.nit:1755 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -9124,7 +9820,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1634 */
+    /* parser/parser_prod.nit:1756 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9139,28 +9835,28 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1635 */
+      /* parser/parser_prod.nit:1757 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1635);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1757);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1636 */
+      /* parser/parser_prod.nit:1758 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast AExternCalls*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1636);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1758);
       }
-      /* parser/parser_prod.nit:1637 */
+      /* parser/parser_prod.nit:1759 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1639 */
+      /* parser/parser_prod.nit:1761 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1641 */
+    /* parser/parser_prod.nit:1763 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1643 */
+  /* parser/parser_prod.nit:1765 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -9175,7 +9871,7 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1644 */
+    /* parser/parser_prod.nit:1766 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9190,25 +9886,25 @@ void parser___parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1645 */
+      /* parser/parser_prod.nit:1767 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1645);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1767);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1646 */
+      /* parser/parser_prod.nit:1768 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast AExternCodeBlock*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1646);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1768);
       }
-      /* parser/parser_prod.nit:1647 */
+      /* parser/parser_prod.nit:1769 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1649 */
+      /* parser/parser_prod.nit:1771 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1651 */
+    /* parser/parser_prod.nit:1773 */
     goto label1;
   }
   label1: while(0);
@@ -9223,7 +9919,7 @@ void parser___parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1655;
+  fra.me.line = 1777;
   fra.me.meth = LOCATE_parser___parser_prod___AExternMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -9234,9 +9930,9 @@ void parser___parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:1655 */
+  /* parser/parser_prod.nit:1777 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1657 */
+  /* parser/parser_prod.nit:1779 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -9252,16 +9948,16 @@ void parser___parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1658 */
+    /* parser/parser_prod.nit:1780 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1658);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1780);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1660 */
+  /* parser/parser_prod.nit:1782 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -9277,33 +9973,33 @@ void parser___parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1661 */
+    /* parser/parser_prod.nit:1783 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1661);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1783);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1663 */
+  /* parser/parser_prod.nit:1785 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1664 */
+  /* parser/parser_prod.nit:1786 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1664);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser___parser_prod, 1786);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1665 */
+  /* parser/parser_prod.nit:1787 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1666 */
+  /* parser/parser_prod.nit:1788 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1667 */
+  /* parser/parser_prod.nit:1789 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -9319,16 +10015,16 @@ void parser___parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1668 */
+    /* parser/parser_prod.nit:1790 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast TString*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1668);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1790);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1670 */
+  /* parser/parser_prod.nit:1792 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -9344,16 +10040,16 @@ void parser___parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1671 */
+    /* parser/parser_prod.nit:1793 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast AExternCalls*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1671);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1793);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1673 */
+  /* parser/parser_prod.nit:1795 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -9369,12 +10065,12 @@ void parser___parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1674 */
+    /* parser/parser_prod.nit:1796 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast AExternCodeBlock*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1674);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1796);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -9389,7 +10085,7 @@ void parser___parser_prod___AConcreteMethPropdef___empty_init(val_t p0, int* ini
   if (init_table[itpos47]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1679;
+  fra.me.line = 1801;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -9401,19 +10097,19 @@ void parser___parser_prod___AConcreteMethPropdef___empty_init(val_t p0, int* ini
   return;
 }
 static const char LOCATE_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef[] = "parser_prod::AConcreteMethPropdef::init_aconcretemethpropdef";
-void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table){
+void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, int* init_table){
   int itpos48 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AConcreteMethPropdef].i;
-  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 REGB1;
   val_t tmp;
   if (init_table[itpos48]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1681;
+  fra.me.line = 1803;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -9424,6 +10120,7 @@ void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -9432,13 +10129,14 @@ void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
   fra.me.REG[7] = p7;
-  /* parser/parser_prod.nit:1681 */
-  fra.me.REG[8] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1691 */
-  CALL_parser___parser_prod___AConcreteMethPropdef___empty_init(fra.me.REG[8])(fra.me.REG[8], init_table);
-  /* parser/parser_prod.nit:1692 */
-  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[8]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:1693 */
+  fra.me.REG[8] = p8;
+  /* parser/parser_prod.nit:1803 */
+  fra.me.REG[9] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1814 */
+  CALL_parser___parser_prod___AConcreteMethPropdef___empty_init(fra.me.REG[9])(fra.me.REG[9], init_table);
+  /* parser/parser_prod.nit:1815 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[9]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1816 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -9453,16 +10151,16 @@ void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1694 */
+    /* parser/parser_prod.nit:1817 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1694);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1817);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[8]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[9]);
   }
-  /* parser/parser_prod.nit:1696 */
-  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[8]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:1697 */
+  /* parser/parser_prod.nit:1819 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[9]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:1820 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -9477,68 +10175,68 @@ void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1698 */
+    /* parser/parser_prod.nit:1821 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1698);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1821);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[8]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[9]);
   }
-  /* parser/parser_prod.nit:1700 */
+  /* parser/parser_prod.nit:1823 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1700);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1823);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[8]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:1701 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[9]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:1824 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1701);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1824);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[8]);
-  /* parser/parser_prod.nit:1702 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[9]);
+  /* parser/parser_prod.nit:1825 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1702);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1825);
   }
-  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[8]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:1703 */
+  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[9]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:1826 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1703);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1826);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[8]);
-  /* parser/parser_prod.nit:1704 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[9]);
+  /* parser/parser_prod.nit:1827 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1704);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1827);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[8]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:1705 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[9]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:1828 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1705);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1828);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[8]);
-  /* parser/parser_prod.nit:1706 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[9]);
+  /* parser/parser_prod.nit:1829 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1706);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1829);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[8]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:1707 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[9]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:1830 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1707);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1830);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[8]);
-  /* parser/parser_prod.nit:1708 */
-  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[8]) = fra.me.REG[7];
-  /* parser/parser_prod.nit:1709 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[9]);
+  /* parser/parser_prod.nit:1831 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[9]) = fra.me.REG[7];
+  /* parser/parser_prod.nit:1832 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -9553,12 +10251,36 @@ void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1710 */
+    /* parser/parser_prod.nit:1833 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1710);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1833);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[9]);
+  }
+  /* parser/parser_prod.nit:1835 */
+  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[9]) = fra.me.REG[8];
+  /* parser/parser_prod.nit:1836 */
+  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1837 */
+    REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1837);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos48] = 1;
@@ -9572,7 +10294,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1714;
+  fra.me.line = 1841;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -9584,7 +10306,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:1716 */
+  /* parser/parser_prod.nit:1843 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -9599,7 +10321,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1717 */
+    /* parser/parser_prod.nit:1844 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9614,28 +10336,28 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1718 */
+      /* parser/parser_prod.nit:1845 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1718);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1845);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1719 */
+      /* parser/parser_prod.nit:1846 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1719);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1846);
       }
-      /* parser/parser_prod.nit:1720 */
+      /* parser/parser_prod.nit:1847 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1722 */
+      /* parser/parser_prod.nit:1849 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1724 */
+    /* parser/parser_prod.nit:1851 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1726 */
+  /* parser/parser_prod.nit:1853 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -9650,7 +10372,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1727 */
+    /* parser/parser_prod.nit:1854 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9665,28 +10387,28 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1728 */
+      /* parser/parser_prod.nit:1855 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1728);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1855);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1729 */
+      /* parser/parser_prod.nit:1856 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1729);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1856);
       }
-      /* parser/parser_prod.nit:1730 */
+      /* parser/parser_prod.nit:1857 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1732 */
+      /* parser/parser_prod.nit:1859 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1734 */
+    /* parser/parser_prod.nit:1861 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1736 */
+  /* parser/parser_prod.nit:1863 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -9701,7 +10423,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1737 */
+    /* parser/parser_prod.nit:1864 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9716,28 +10438,28 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1738 */
+      /* parser/parser_prod.nit:1865 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1738);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1865);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1739 */
+      /* parser/parser_prod.nit:1866 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1739);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1866);
       }
-      /* parser/parser_prod.nit:1740 */
+      /* parser/parser_prod.nit:1867 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1742 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1742);
+      /* parser/parser_prod.nit:1869 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1869);
     }
-    /* parser/parser_prod.nit:1744 */
+    /* parser/parser_prod.nit:1871 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1746 */
+  /* parser/parser_prod.nit:1873 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -9752,7 +10474,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1747 */
+    /* parser/parser_prod.nit:1874 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9767,28 +10489,28 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1748 */
+      /* parser/parser_prod.nit:1875 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1748);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1875);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1749 */
+      /* parser/parser_prod.nit:1876 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast TKwmeth*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1749);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1876);
       }
-      /* parser/parser_prod.nit:1750 */
+      /* parser/parser_prod.nit:1877 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1752 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1752);
+      /* parser/parser_prod.nit:1879 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1879);
     }
-    /* parser/parser_prod.nit:1754 */
+    /* parser/parser_prod.nit:1881 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1756 */
+  /* parser/parser_prod.nit:1883 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -9803,7 +10525,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1757 */
+    /* parser/parser_prod.nit:1884 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9818,28 +10540,28 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1758 */
+      /* parser/parser_prod.nit:1885 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1758);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1885);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1759 */
+      /* parser/parser_prod.nit:1886 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1759);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1886);
       }
-      /* parser/parser_prod.nit:1760 */
+      /* parser/parser_prod.nit:1887 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1762 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1762);
+      /* parser/parser_prod.nit:1889 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1889);
     }
-    /* parser/parser_prod.nit:1764 */
+    /* parser/parser_prod.nit:1891 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1766 */
+  /* parser/parser_prod.nit:1893 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -9854,7 +10576,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1767 */
+    /* parser/parser_prod.nit:1894 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9869,28 +10591,79 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1768 */
+      /* parser/parser_prod.nit:1895 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1768);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1895);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1769 */
+      /* parser/parser_prod.nit:1896 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1769);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1896);
       }
-      /* parser/parser_prod.nit:1770 */
+      /* parser/parser_prod.nit:1897 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1772 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1772);
+      /* parser/parser_prod.nit:1899 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1899);
     }
-    /* parser/parser_prod.nit:1774 */
+    /* parser/parser_prod.nit:1901 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1776 */
+  /* parser/parser_prod.nit:1903 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1904 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:1905 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1905);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:1906 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1906);
+      }
+      /* parser/parser_prod.nit:1907 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:1909 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:1911 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:1913 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -9905,7 +10678,7 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1777 */
+    /* parser/parser_prod.nit:1914 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -9920,25 +10693,25 @@ void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1778 */
+      /* parser/parser_prod.nit:1915 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1778);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1915);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1779 */
+      /* parser/parser_prod.nit:1916 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1779);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1916);
       }
-      /* parser/parser_prod.nit:1780 */
+      /* parser/parser_prod.nit:1917 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1782 */
+      /* parser/parser_prod.nit:1919 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1784 */
+    /* parser/parser_prod.nit:1921 */
     goto label1;
   }
   label1: while(0);
@@ -9953,7 +10726,7 @@ void parser___parser_prod___AConcreteMethPropdef___visit_all(val_t p0, val_t p1)
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1788;
+  fra.me.line = 1925;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -9964,9 +10737,9 @@ void parser___parser_prod___AConcreteMethPropdef___visit_all(val_t p0, val_t p1)
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:1788 */
+  /* parser/parser_prod.nit:1925 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1790 */
+  /* parser/parser_prod.nit:1927 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -9982,16 +10755,16 @@ void parser___parser_prod___AConcreteMethPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1791 */
+    /* parser/parser_prod.nit:1928 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1791);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1928);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1793 */
+  /* parser/parser_prod.nit:1930 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -10007,28 +10780,53 @@ void parser___parser_prod___AConcreteMethPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1794 */
+    /* parser/parser_prod.nit:1931 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1794);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1931);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1796 */
+  /* parser/parser_prod.nit:1933 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1797 */
+  /* parser/parser_prod.nit:1934 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1798 */
+  /* parser/parser_prod.nit:1935 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1799 */
+  /* parser/parser_prod.nit:1936 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1800 */
+  /* parser/parser_prod.nit:1937 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1938 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1938);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:1940 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -10044,12 +10842,12 @@ void parser___parser_prod___AConcreteMethPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1801 */
+    /* parser/parser_prod.nit:1941 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1801);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1941);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -10064,7 +10862,7 @@ void parser___parser_prod___AConcreteInitPropdef___empty_init(val_t p0, int* ini
   if (init_table[itpos49]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1806;
+  fra.me.line = 1946;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -10076,19 +10874,19 @@ void parser___parser_prod___AConcreteInitPropdef___empty_init(val_t p0, int* ini
   return;
 }
 static const char LOCATE_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef[] = "parser_prod::AConcreteInitPropdef::init_aconcreteinitpropdef";
-void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table){
+void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, int* init_table){
   int itpos50 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AConcreteInitPropdef].i;
-  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 REGB1;
   val_t tmp;
   if (init_table[itpos50]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1808;
+  fra.me.line = 1948;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -10099,6 +10897,7 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -10107,13 +10906,14 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
   fra.me.REG[7] = p7;
-  /* parser/parser_prod.nit:1808 */
-  fra.me.REG[8] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1818 */
-  CALL_parser___parser_prod___AConcreteInitPropdef___empty_init(fra.me.REG[8])(fra.me.REG[8], init_table);
-  /* parser/parser_prod.nit:1819 */
-  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[8]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:1820 */
+  fra.me.REG[8] = p8;
+  /* parser/parser_prod.nit:1948 */
+  fra.me.REG[9] = fra.me.REG[0];
+  /* parser/parser_prod.nit:1959 */
+  CALL_parser___parser_prod___AConcreteInitPropdef___empty_init(fra.me.REG[9])(fra.me.REG[9], init_table);
+  /* parser/parser_prod.nit:1960 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[9]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:1961 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10128,16 +10928,16 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1821 */
+    /* parser/parser_prod.nit:1962 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1821);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1962);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[8]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[9]);
   }
-  /* parser/parser_prod.nit:1823 */
-  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[8]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:1824 */
+  /* parser/parser_prod.nit:1964 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[9]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:1965 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10152,42 +10952,42 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1825 */
+    /* parser/parser_prod.nit:1966 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1825);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1966);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[8]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[9]);
   }
-  /* parser/parser_prod.nit:1827 */
+  /* parser/parser_prod.nit:1968 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1827);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1968);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[8]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:1828 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[9]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:1969 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1828);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1969);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[8]);
-  /* parser/parser_prod.nit:1829 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[9]);
+  /* parser/parser_prod.nit:1970 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1829);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1970);
   }
-  ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[8]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:1830 */
+  ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[9]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:1971 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1830);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1971);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[8]);
-  /* parser/parser_prod.nit:1831 */
-  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[8]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:1832 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[9]);
+  /* parser/parser_prod.nit:1972 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[9]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:1973 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10202,29 +11002,29 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1833 */
+    /* parser/parser_prod.nit:1974 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1833);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1974);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[8]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[9]);
   }
-  /* parser/parser_prod.nit:1835 */
+  /* parser/parser_prod.nit:1976 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1835);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1976);
   }
-  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[8]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:1836 */
+  ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[9]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:1977 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1836);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1977);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[8]);
-  /* parser/parser_prod.nit:1837 */
-  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[8]) = fra.me.REG[7];
-  /* parser/parser_prod.nit:1838 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[9]);
+  /* parser/parser_prod.nit:1978 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[9]) = fra.me.REG[7];
+  /* parser/parser_prod.nit:1979 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10239,12 +11039,36 @@ void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1839 */
+    /* parser/parser_prod.nit:1980 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1839);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1980);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[9]);
+  }
+  /* parser/parser_prod.nit:1982 */
+  ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[9]) = fra.me.REG[8];
+  /* parser/parser_prod.nit:1983 */
+  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:1984 */
+    REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1984);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos50] = 1;
@@ -10258,7 +11082,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1843;
+  fra.me.line = 1988;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -10270,7 +11094,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:1845 */
+  /* parser/parser_prod.nit:1990 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -10285,7 +11109,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1846 */
+    /* parser/parser_prod.nit:1991 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10300,28 +11124,28 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1847 */
+      /* parser/parser_prod.nit:1992 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1847);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1992);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1848 */
+      /* parser/parser_prod.nit:1993 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1848);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1993);
       }
-      /* parser/parser_prod.nit:1849 */
+      /* parser/parser_prod.nit:1994 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1851 */
+      /* parser/parser_prod.nit:1996 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1853 */
+    /* parser/parser_prod.nit:1998 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1855 */
+  /* parser/parser_prod.nit:2000 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -10336,7 +11160,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1856 */
+    /* parser/parser_prod.nit:2001 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10351,28 +11175,28 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1857 */
+      /* parser/parser_prod.nit:2002 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1857);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2002);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1858 */
+      /* parser/parser_prod.nit:2003 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1858);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2003);
       }
-      /* parser/parser_prod.nit:1859 */
+      /* parser/parser_prod.nit:2004 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1861 */
+      /* parser/parser_prod.nit:2006 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1863 */
+    /* parser/parser_prod.nit:2008 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1865 */
+  /* parser/parser_prod.nit:2010 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -10387,7 +11211,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1866 */
+    /* parser/parser_prod.nit:2011 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10402,32 +11226,32 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1867 */
+      /* parser/parser_prod.nit:2012 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1867);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2012);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1868 */
+      /* parser/parser_prod.nit:2013 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1868);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2013);
       }
-      /* parser/parser_prod.nit:1869 */
+      /* parser/parser_prod.nit:2014 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1871 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1871);
+      /* parser/parser_prod.nit:2016 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2016);
     }
-    /* parser/parser_prod.nit:1873 */
+    /* parser/parser_prod.nit:2018 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1875 */
+  /* parser/parser_prod.nit:2020 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 1875);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 2020);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -10437,7 +11261,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1876 */
+    /* parser/parser_prod.nit:2021 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10452,28 +11276,28 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1877 */
+      /* parser/parser_prod.nit:2022 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1877);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2022);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1878 */
+      /* parser/parser_prod.nit:2023 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast TKwinit*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1878);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2023);
       }
-      /* parser/parser_prod.nit:1879 */
+      /* parser/parser_prod.nit:2024 */
       ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1881 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1881);
+      /* parser/parser_prod.nit:2026 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2026);
     }
-    /* parser/parser_prod.nit:1883 */
+    /* parser/parser_prod.nit:2028 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1885 */
+  /* parser/parser_prod.nit:2030 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -10488,7 +11312,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1886 */
+    /* parser/parser_prod.nit:2031 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10503,28 +11327,28 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1887 */
+      /* parser/parser_prod.nit:2032 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1887);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2032);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1888 */
+      /* parser/parser_prod.nit:2033 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1888);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2033);
       }
-      /* parser/parser_prod.nit:1889 */
+      /* parser/parser_prod.nit:2034 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1891 */
+      /* parser/parser_prod.nit:2036 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1893 */
+    /* parser/parser_prod.nit:2038 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1895 */
+  /* parser/parser_prod.nit:2040 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -10539,7 +11363,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1896 */
+    /* parser/parser_prod.nit:2041 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10554,28 +11378,79 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1897 */
+      /* parser/parser_prod.nit:2042 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1897);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2042);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1898 */
+      /* parser/parser_prod.nit:2043 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1898);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2043);
       }
-      /* parser/parser_prod.nit:1899 */
+      /* parser/parser_prod.nit:2044 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1901 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 1901);
+      /* parser/parser_prod.nit:2046 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2046);
+    }
+    /* parser/parser_prod.nit:2048 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:2050 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:2051 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:2052 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2052);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2053 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2053);
+      }
+      /* parser/parser_prod.nit:2054 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:2056 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1903 */
+    /* parser/parser_prod.nit:2058 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1905 */
+  /* parser/parser_prod.nit:2060 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -10590,7 +11465,7 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1906 */
+    /* parser/parser_prod.nit:2061 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10605,25 +11480,25 @@ void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1907 */
+      /* parser/parser_prod.nit:2062 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1907);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2062);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1908 */
+      /* parser/parser_prod.nit:2063 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1908);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2063);
       }
-      /* parser/parser_prod.nit:1909 */
+      /* parser/parser_prod.nit:2064 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1911 */
+      /* parser/parser_prod.nit:2066 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1913 */
+    /* parser/parser_prod.nit:2068 */
     goto label1;
   }
   label1: while(0);
@@ -10638,7 +11513,7 @@ void parser___parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1)
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1917;
+  fra.me.line = 2072;
   fra.me.meth = LOCATE_parser___parser_prod___AConcreteInitPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -10649,9 +11524,9 @@ void parser___parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1)
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:1917 */
+  /* parser/parser_prod.nit:2072 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1919 */
+  /* parser/parser_prod.nit:2074 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -10667,16 +11542,16 @@ void parser___parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1920 */
+    /* parser/parser_prod.nit:2075 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1920);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2075);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1922 */
+  /* parser/parser_prod.nit:2077 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -10692,27 +11567,27 @@ void parser___parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1923 */
+    /* parser/parser_prod.nit:2078 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1923);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2078);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1925 */
+  /* parser/parser_prod.nit:2080 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1926 */
+  /* parser/parser_prod.nit:2081 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 1926);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 2081);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1927 */
+  /* parser/parser_prod.nit:2082 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -10728,19 +11603,44 @@ void parser___parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1928 */
+    /* parser/parser_prod.nit:2083 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1928);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2083);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:1930 */
+  /* parser/parser_prod.nit:2085 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:1931 */
+  /* parser/parser_prod.nit:2086 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:2087 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2087);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:2089 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -10756,12 +11656,12 @@ void parser___parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1)
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1932 */
+    /* parser/parser_prod.nit:2090 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1932);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2090);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -10776,7 +11676,7 @@ void parser___parser_prod___AExternInitPropdef___empty_init(val_t p0, int* init_
   if (init_table[itpos51]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1937;
+  fra.me.line = 2095;
   fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -10797,7 +11697,7 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   if (init_table[itpos52]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1939;
+  fra.me.line = 2097;
   fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
@@ -10823,13 +11723,13 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   fra.me.REG[7] = p7;
   fra.me.REG[8] = p8;
   fra.me.REG[9] = p9;
-  /* parser/parser_prod.nit:1939 */
+  /* parser/parser_prod.nit:2097 */
   fra.me.REG[10] = fra.me.REG[0];
-  /* parser/parser_prod.nit:1951 */
+  /* parser/parser_prod.nit:2109 */
   CALL_parser___parser_prod___AExternInitPropdef___empty_init(fra.me.REG[10])(fra.me.REG[10], init_table);
-  /* parser/parser_prod.nit:1952 */
+  /* parser/parser_prod.nit:2110 */
   ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[10]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:1953 */
+  /* parser/parser_prod.nit:2111 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10844,16 +11744,16 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1954 */
+    /* parser/parser_prod.nit:2112 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1954);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2112);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:1956 */
+  /* parser/parser_prod.nit:2114 */
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[10]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:1957 */
+  /* parser/parser_prod.nit:2115 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10868,42 +11768,42 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1958 */
+    /* parser/parser_prod.nit:2116 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1958);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2116);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:1960 */
+  /* parser/parser_prod.nit:2118 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1960);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2118);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[10]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:1961 */
+  /* parser/parser_prod.nit:2119 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1961);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2119);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[10]);
-  /* parser/parser_prod.nit:1962 */
+  /* parser/parser_prod.nit:2120 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1962);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2120);
   }
   ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[10]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:1963 */
+  /* parser/parser_prod.nit:2121 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1963);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2121);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[10]);
-  /* parser/parser_prod.nit:1964 */
+  /* parser/parser_prod.nit:2122 */
   ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[10]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:1965 */
+  /* parser/parser_prod.nit:2123 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10918,29 +11818,29 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1966 */
+    /* parser/parser_prod.nit:2124 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1966);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2124);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:1968 */
+  /* parser/parser_prod.nit:2126 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 1968);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2126);
   }
   ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[10]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:1969 */
+  /* parser/parser_prod.nit:2127 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1969);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2127);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[10]);
-  /* parser/parser_prod.nit:1970 */
+  /* parser/parser_prod.nit:2128 */
   ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[10]) = fra.me.REG[7];
-  /* parser/parser_prod.nit:1971 */
+  /* parser/parser_prod.nit:2129 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10955,16 +11855,16 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1972 */
+    /* parser/parser_prod.nit:2130 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1972);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2130);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:1974 */
+  /* parser/parser_prod.nit:2132 */
   ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[10]) = fra.me.REG[8];
-  /* parser/parser_prod.nit:1975 */
+  /* parser/parser_prod.nit:2133 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10979,16 +11879,16 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1976 */
+    /* parser/parser_prod.nit:2134 */
     REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1976);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2134);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[10]);
   }
-  /* parser/parser_prod.nit:1978 */
+  /* parser/parser_prod.nit:2136 */
   ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[10]) = fra.me.REG[9];
-  /* parser/parser_prod.nit:1979 */
+  /* parser/parser_prod.nit:2137 */
   REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11003,10 +11903,10 @@ void parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1980 */
+    /* parser/parser_prod.nit:2138 */
     REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1980);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2138);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[10]);
   }
@@ -11022,7 +11922,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 1984;
+  fra.me.line = 2142;
   fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11034,7 +11934,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:1986 */
+  /* parser/parser_prod.nit:2144 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -11049,7 +11949,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1987 */
+    /* parser/parser_prod.nit:2145 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11064,28 +11964,28 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1988 */
+      /* parser/parser_prod.nit:2146 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1988);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2146);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1989 */
+      /* parser/parser_prod.nit:2147 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1989);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2147);
       }
-      /* parser/parser_prod.nit:1990 */
+      /* parser/parser_prod.nit:2148 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:1992 */
+      /* parser/parser_prod.nit:2150 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:1994 */
+    /* parser/parser_prod.nit:2152 */
     goto label1;
   }
-  /* parser/parser_prod.nit:1996 */
+  /* parser/parser_prod.nit:2154 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -11100,7 +12000,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:1997 */
+    /* parser/parser_prod.nit:2155 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11115,28 +12015,28 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:1998 */
+      /* parser/parser_prod.nit:2156 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 1998);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2156);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:1999 */
+      /* parser/parser_prod.nit:2157 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 1999);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2157);
       }
-      /* parser/parser_prod.nit:2000 */
+      /* parser/parser_prod.nit:2158 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2002 */
+      /* parser/parser_prod.nit:2160 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2004 */
+    /* parser/parser_prod.nit:2162 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2006 */
+  /* parser/parser_prod.nit:2164 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -11151,7 +12051,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2007 */
+    /* parser/parser_prod.nit:2165 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11166,32 +12066,32 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2008 */
+      /* parser/parser_prod.nit:2166 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2008);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2166);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2009 */
+      /* parser/parser_prod.nit:2167 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2009);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2167);
       }
-      /* parser/parser_prod.nit:2010 */
+      /* parser/parser_prod.nit:2168 */
       ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2012 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2012);
+      /* parser/parser_prod.nit:2170 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2170);
     }
-    /* parser/parser_prod.nit:2014 */
+    /* parser/parser_prod.nit:2172 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2016 */
+  /* parser/parser_prod.nit:2174 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 2016);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 2174);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -11201,7 +12101,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2017 */
+    /* parser/parser_prod.nit:2175 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11216,28 +12116,28 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2018 */
+      /* parser/parser_prod.nit:2176 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2018);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2176);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2019 */
+      /* parser/parser_prod.nit:2177 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast TKwnew*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2019);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2177);
       }
-      /* parser/parser_prod.nit:2020 */
+      /* parser/parser_prod.nit:2178 */
       ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2022 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2022);
+      /* parser/parser_prod.nit:2180 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2180);
     }
-    /* parser/parser_prod.nit:2024 */
+    /* parser/parser_prod.nit:2182 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2026 */
+  /* parser/parser_prod.nit:2184 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -11252,7 +12152,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2027 */
+    /* parser/parser_prod.nit:2185 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11267,28 +12167,28 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2028 */
+      /* parser/parser_prod.nit:2186 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2028);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2186);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2029 */
+      /* parser/parser_prod.nit:2187 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2029);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2187);
       }
-      /* parser/parser_prod.nit:2030 */
+      /* parser/parser_prod.nit:2188 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2032 */
+      /* parser/parser_prod.nit:2190 */
       ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2034 */
+    /* parser/parser_prod.nit:2192 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2036 */
+  /* parser/parser_prod.nit:2194 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -11303,7 +12203,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2037 */
+    /* parser/parser_prod.nit:2195 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11318,28 +12218,28 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2038 */
+      /* parser/parser_prod.nit:2196 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2038);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2196);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2039 */
+      /* parser/parser_prod.nit:2197 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2039);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2197);
       }
-      /* parser/parser_prod.nit:2040 */
+      /* parser/parser_prod.nit:2198 */
       ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2042 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2042);
+      /* parser/parser_prod.nit:2200 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2200);
     }
-    /* parser/parser_prod.nit:2044 */
+    /* parser/parser_prod.nit:2202 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2046 */
+  /* parser/parser_prod.nit:2204 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -11354,7 +12254,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2047 */
+    /* parser/parser_prod.nit:2205 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11369,28 +12269,28 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2048 */
+      /* parser/parser_prod.nit:2206 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2048);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2206);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2049 */
+      /* parser/parser_prod.nit:2207 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast TString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2049);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2207);
       }
-      /* parser/parser_prod.nit:2050 */
+      /* parser/parser_prod.nit:2208 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2052 */
+      /* parser/parser_prod.nit:2210 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2054 */
+    /* parser/parser_prod.nit:2212 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2056 */
+  /* parser/parser_prod.nit:2214 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -11405,7 +12305,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2057 */
+    /* parser/parser_prod.nit:2215 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11420,28 +12320,28 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2058 */
+      /* parser/parser_prod.nit:2216 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2058);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2216);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2059 */
+      /* parser/parser_prod.nit:2217 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast AExternCalls*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2059);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2217);
       }
-      /* parser/parser_prod.nit:2060 */
+      /* parser/parser_prod.nit:2218 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2062 */
+      /* parser/parser_prod.nit:2220 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2064 */
+    /* parser/parser_prod.nit:2222 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2066 */
+  /* parser/parser_prod.nit:2224 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -11456,7 +12356,7 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2067 */
+    /* parser/parser_prod.nit:2225 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11471,25 +12371,25 @@ void parser___parser_prod___AExternInitPropdef___replace_child(val_t p0, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2068 */
+      /* parser/parser_prod.nit:2226 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2068);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2226);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2069 */
+      /* parser/parser_prod.nit:2227 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast AExternCodeBlock*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2069);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2227);
       }
-      /* parser/parser_prod.nit:2070 */
+      /* parser/parser_prod.nit:2228 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2072 */
+      /* parser/parser_prod.nit:2230 */
       ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2074 */
+    /* parser/parser_prod.nit:2232 */
     goto label1;
   }
   label1: while(0);
@@ -11504,7 +12404,7 @@ void parser___parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2078;
+  fra.me.line = 2236;
   fra.me.meth = LOCATE_parser___parser_prod___AExternInitPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11515,9 +12415,9 @@ void parser___parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2078 */
+  /* parser/parser_prod.nit:2236 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2080 */
+  /* parser/parser_prod.nit:2238 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -11533,16 +12433,16 @@ void parser___parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2081 */
+    /* parser/parser_prod.nit:2239 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2081);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2239);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2083 */
+  /* parser/parser_prod.nit:2241 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -11558,27 +12458,27 @@ void parser___parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2084 */
+    /* parser/parser_prod.nit:2242 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2084);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2242);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2086 */
+  /* parser/parser_prod.nit:2244 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_visibility(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:2087 */
+  /* parser/parser_prod.nit:2245 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 2087);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 2245);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:2088 */
+  /* parser/parser_prod.nit:2246 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -11594,19 +12494,19 @@ void parser___parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2089 */
+    /* parser/parser_prod.nit:2247 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_methid(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2089);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2247);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2091 */
+  /* parser/parser_prod.nit:2249 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_signature(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:2092 */
+  /* parser/parser_prod.nit:2250 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -11622,16 +12522,16 @@ void parser___parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2093 */
+    /* parser/parser_prod.nit:2251 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast TString*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2093);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2251);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2095 */
+  /* parser/parser_prod.nit:2253 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -11647,16 +12547,16 @@ void parser___parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2096 */
+    /* parser/parser_prod.nit:2254 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast AExternCalls*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2096);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2254);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2098 */
+  /* parser/parser_prod.nit:2256 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -11672,12 +12572,12 @@ void parser___parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2099 */
+    /* parser/parser_prod.nit:2257 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___AExternPropdef____n_extern_code_block(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCodeBlock, ID_parser___parser_nodes___AExternCodeBlock)) /*cast AExternCodeBlock*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2099);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2257);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -11692,7 +12592,7 @@ void parser___parser_prod___AMainMethPropdef___empty_init(val_t p0, int* init_ta
   if (init_table[itpos53]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2104;
+  fra.me.line = 2262;
   fra.me.meth = LOCATE_parser___parser_prod___AMainMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -11713,7 +12613,7 @@ void parser___parser_prod___AMainMethPropdef___init_amainmethpropdef(val_t p0, v
   if (init_table[itpos54]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2106;
+  fra.me.line = 2264;
   fra.me.meth = LOCATE_parser___parser_prod___AMainMethPropdef___init_amainmethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -11724,11 +12624,11 @@ void parser___parser_prod___AMainMethPropdef___init_amainmethpropdef(val_t p0, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2111 */
+  /* parser/parser_prod.nit:2269 */
   CALL_parser___parser_prod___AMainMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* parser/parser_prod.nit:2112 */
+  /* parser/parser_prod.nit:2270 */
   ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2113 */
+  /* parser/parser_prod.nit:2271 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11743,16 +12643,16 @@ void parser___parser_prod___AMainMethPropdef___init_amainmethpropdef(val_t p0, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2114 */
+    /* parser/parser_prod.nit:2272 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2114);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2272);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* parser/parser_prod.nit:2116 */
+  /* parser/parser_prod.nit:2274 */
   ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:2117 */
+  /* parser/parser_prod.nit:2275 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11767,10 +12667,10 @@ void parser___parser_prod___AMainMethPropdef___init_amainmethpropdef(val_t p0, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2118 */
+    /* parser/parser_prod.nit:2276 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2118);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2276);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
@@ -11786,7 +12686,7 @@ void parser___parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2122;
+  fra.me.line = 2280;
   fra.me.meth = LOCATE_parser___parser_prod___AMainMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11798,7 +12698,7 @@ void parser___parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2124 */
+  /* parser/parser_prod.nit:2282 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -11813,7 +12713,7 @@ void parser___parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1,
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2125 */
+    /* parser/parser_prod.nit:2283 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11828,28 +12728,28 @@ void parser___parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2126 */
+      /* parser/parser_prod.nit:2284 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2126);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2284);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2127 */
+      /* parser/parser_prod.nit:2285 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2127);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2285);
       }
-      /* parser/parser_prod.nit:2128 */
+      /* parser/parser_prod.nit:2286 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2130 */
+      /* parser/parser_prod.nit:2288 */
       ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2132 */
+    /* parser/parser_prod.nit:2290 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2134 */
+  /* parser/parser_prod.nit:2292 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -11864,7 +12764,7 @@ void parser___parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1,
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2135 */
+    /* parser/parser_prod.nit:2293 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11879,25 +12779,25 @@ void parser___parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2136 */
+      /* parser/parser_prod.nit:2294 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2136);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2294);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2137 */
+      /* parser/parser_prod.nit:2295 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2137);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2295);
       }
-      /* parser/parser_prod.nit:2138 */
+      /* parser/parser_prod.nit:2296 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2140 */
+      /* parser/parser_prod.nit:2298 */
       ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2142 */
+    /* parser/parser_prod.nit:2300 */
     goto label1;
   }
   label1: while(0);
@@ -11912,7 +12812,7 @@ void parser___parser_prod___AMainMethPropdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2146;
+  fra.me.line = 2304;
   fra.me.meth = LOCATE_parser___parser_prod___AMainMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11923,9 +12823,9 @@ void parser___parser_prod___AMainMethPropdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2146 */
+  /* parser/parser_prod.nit:2304 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2148 */
+  /* parser/parser_prod.nit:2306 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -11941,16 +12841,16 @@ void parser___parser_prod___AMainMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2149 */
+    /* parser/parser_prod.nit:2307 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2149);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2307);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2151 */
+  /* parser/parser_prod.nit:2309 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -11966,12 +12866,12 @@ void parser___parser_prod___AMainMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2152 */
+    /* parser/parser_prod.nit:2310 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2152);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2310);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -11986,7 +12886,7 @@ void parser___parser_prod___ATypePropdef___empty_init(val_t p0, int* init_table)
   if (init_table[itpos55]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2157;
+  fra.me.line = 2315;
   fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -11998,19 +12898,19 @@ void parser___parser_prod___ATypePropdef___empty_init(val_t p0, int* init_table)
   return;
 }
 static const char LOCATE_parser___parser_prod___ATypePropdef___init_atypepropdef[] = "parser_prod::ATypePropdef::init_atypepropdef";
-void parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
+void parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table){
   int itpos56 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATypePropdef].i;
-  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 REGB1;
   val_t tmp;
   if (init_table[itpos56]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2159;
+  fra.me.line = 2317;
   fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___init_atypepropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -12020,6 +12920,7 @@ void parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1,
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
@@ -12027,13 +12928,14 @@ void parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1,
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* parser/parser_prod.nit:2159 */
-  fra.me.REG[7] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2168 */
-  CALL_parser___parser_prod___ATypePropdef___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
-  /* parser/parser_prod.nit:2169 */
-  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[7]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2170 */
+  fra.me.REG[7] = p7;
+  /* parser/parser_prod.nit:2317 */
+  fra.me.REG[8] = fra.me.REG[0];
+  /* parser/parser_prod.nit:2327 */
+  CALL_parser___parser_prod___ATypePropdef___empty_init(fra.me.REG[8])(fra.me.REG[8], init_table);
+  /* parser/parser_prod.nit:2328 */
+  ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[8]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:2329 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -12048,16 +12950,16 @@ void parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2171 */
+    /* parser/parser_prod.nit:2330 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2171);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2330);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[8]);
   }
-  /* parser/parser_prod.nit:2173 */
-  ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[7]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:2174 */
+  /* parser/parser_prod.nit:2332 */
+  ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[8]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:2333 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -12072,65 +12974,89 @@ void parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2175 */
+    /* parser/parser_prod.nit:2334 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2175);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2334);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[8]);
   }
-  /* parser/parser_prod.nit:2177 */
+  /* parser/parser_prod.nit:2336 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2177);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2336);
   }
-  ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[7]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:2178 */
+  ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[8]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:2337 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2178);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2337);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
-  /* parser/parser_prod.nit:2179 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[8]);
+  /* parser/parser_prod.nit:2338 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2179);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2338);
   }
-  ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[7]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:2180 */
+  ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[8]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:2339 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2180);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2339);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
-  /* parser/parser_prod.nit:2181 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[8]);
+  /* parser/parser_prod.nit:2340 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2181);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2340);
   }
-  ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[7]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:2182 */
+  ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[8]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:2341 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2182);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2341);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
-  /* parser/parser_prod.nit:2183 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[8]);
+  /* parser/parser_prod.nit:2342 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2183);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2342);
   }
-  ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[7]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:2184 */
+  ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[8]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:2343 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2184);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2343);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[8]);
+  /* parser/parser_prod.nit:2344 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[8]) = fra.me.REG[7];
+  /* parser/parser_prod.nit:2345 */
+  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:2346 */
+    REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2346);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   stack_frame_head = fra.me.prev;
   init_table[itpos56] = 1;
   return;
@@ -12143,7 +13069,7 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2187;
+  fra.me.line = 2350;
   fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -12155,7 +13081,7 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2189 */
+  /* parser/parser_prod.nit:2352 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -12170,7 +13096,7 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2190 */
+    /* parser/parser_prod.nit:2353 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12185,28 +13111,28 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2191 */
+      /* parser/parser_prod.nit:2354 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2191);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2354);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2192 */
+      /* parser/parser_prod.nit:2355 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2192);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2355);
       }
-      /* parser/parser_prod.nit:2193 */
+      /* parser/parser_prod.nit:2356 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2195 */
+      /* parser/parser_prod.nit:2358 */
       ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2197 */
+    /* parser/parser_prod.nit:2360 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2199 */
+  /* parser/parser_prod.nit:2362 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -12221,7 +13147,7 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2200 */
+    /* parser/parser_prod.nit:2363 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12236,32 +13162,32 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2201 */
+      /* parser/parser_prod.nit:2364 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2201);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2364);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2202 */
+      /* parser/parser_prod.nit:2365 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2202);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2365);
       }
-      /* parser/parser_prod.nit:2203 */
+      /* parser/parser_prod.nit:2366 */
       ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2205 */
+      /* parser/parser_prod.nit:2368 */
       ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2207 */
+    /* parser/parser_prod.nit:2370 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2209 */
+  /* parser/parser_prod.nit:2372 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 2209);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 2372);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12271,7 +13197,7 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2210 */
+    /* parser/parser_prod.nit:2373 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12286,32 +13212,32 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2211 */
+      /* parser/parser_prod.nit:2374 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2211);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2374);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2212 */
+      /* parser/parser_prod.nit:2375 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2212);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2375);
       }
-      /* parser/parser_prod.nit:2213 */
+      /* parser/parser_prod.nit:2376 */
       ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2215 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2215);
+      /* parser/parser_prod.nit:2378 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2378);
     }
-    /* parser/parser_prod.nit:2217 */
+    /* parser/parser_prod.nit:2380 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2219 */
+  /* parser/parser_prod.nit:2382 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 2219);
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 2382);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12321,7 +13247,7 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2220 */
+    /* parser/parser_prod.nit:2383 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12336,32 +13262,32 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2221 */
+      /* parser/parser_prod.nit:2384 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2221);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2384);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2222 */
+      /* parser/parser_prod.nit:2385 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast TKwtype*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2222);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2385);
       }
-      /* parser/parser_prod.nit:2223 */
+      /* parser/parser_prod.nit:2386 */
       ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2225 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2225);
+      /* parser/parser_prod.nit:2388 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2388);
     }
-    /* parser/parser_prod.nit:2227 */
+    /* parser/parser_prod.nit:2390 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2229 */
+  /* parser/parser_prod.nit:2392 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2229);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2392);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12371,7 +13297,7 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2230 */
+    /* parser/parser_prod.nit:2393 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12386,32 +13312,32 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2231 */
+      /* parser/parser_prod.nit:2394 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2231);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2394);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2232 */
+      /* parser/parser_prod.nit:2395 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2232);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2395);
       }
-      /* parser/parser_prod.nit:2233 */
+      /* parser/parser_prod.nit:2396 */
       ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2235 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2235);
+      /* parser/parser_prod.nit:2398 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2398);
     }
-    /* parser/parser_prod.nit:2237 */
+    /* parser/parser_prod.nit:2400 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2239 */
+  /* parser/parser_prod.nit:2402 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 2239);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 2402);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12421,7 +13347,7 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2240 */
+    /* parser/parser_prod.nit:2403 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12436,25 +13362,76 @@ void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2241 */
+      /* parser/parser_prod.nit:2404 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2241);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2404);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2242 */
+      /* parser/parser_prod.nit:2405 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2242);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2405);
       }
-      /* parser/parser_prod.nit:2243 */
+      /* parser/parser_prod.nit:2406 */
       ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2245 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2245);
+      /* parser/parser_prod.nit:2408 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2408);
     }
-    /* parser/parser_prod.nit:2247 */
+    /* parser/parser_prod.nit:2410 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:2412 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:2413 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:2414 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2414);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:2415 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2415);
+      }
+      /* parser/parser_prod.nit:2416 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:2418 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:2420 */
     goto label1;
   }
   label1: while(0);
@@ -12469,7 +13446,7 @@ void parser___parser_prod___ATypePropdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2251;
+  fra.me.line = 2424;
   fra.me.meth = LOCATE_parser___parser_prod___ATypePropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -12480,9 +13457,9 @@ void parser___parser_prod___ATypePropdef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2251 */
+  /* parser/parser_prod.nit:2424 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2253 */
+  /* parser/parser_prod.nit:2426 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -12498,16 +13475,16 @@ void parser___parser_prod___ATypePropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2254 */
+    /* parser/parser_prod.nit:2427 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___APropdef____n_doc(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2254);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2427);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2256 */
+  /* parser/parser_prod.nit:2429 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -12523,47 +13500,72 @@ void parser___parser_prod___ATypePropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2257 */
+    /* parser/parser_prod.nit:2430 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2257);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2430);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2259 */
+  /* parser/parser_prod.nit:2432 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 2259);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser___parser_prod, 2432);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_visibility(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:2260 */
+  /* parser/parser_prod.nit:2433 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 2260);
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 2433);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:2261 */
+  /* parser/parser_prod.nit:2434 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2261);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2434);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_id(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:2262 */
+  /* parser/parser_prod.nit:2435 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 2262);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 2435);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:2436 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:2437 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2437);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ATypePropdef____n_type(fra.me.REG[2]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -12575,7 +13577,7 @@ void parser___parser_prod___AReadAble___empty_init(val_t p0, int* init_table){
   if (init_table[itpos57]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2266;
+  fra.me.line = 2442;
   fra.me.meth = LOCATE_parser___parser_prod___AReadAble___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -12596,7 +13598,7 @@ void parser___parser_prod___AReadAble___init_areadable(val_t p0, val_t p1, val_t
   if (init_table[itpos58]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2268;
+  fra.me.line = 2444;
   fra.me.meth = LOCATE_parser___parser_prod___AReadAble___init_areadable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -12608,13 +13610,13 @@ void parser___parser_prod___AReadAble___init_areadable(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2268 */
+  /* parser/parser_prod.nit:2444 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2273 */
+  /* parser/parser_prod.nit:2449 */
   CALL_parser___parser_prod___AReadAble___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:2274 */
+  /* parser/parser_prod.nit:2450 */
   ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2275 */
+  /* parser/parser_prod.nit:2451 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -12629,24 +13631,24 @@ void parser___parser_prod___AReadAble___init_areadable(val_t p0, val_t p1, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2276 */
+    /* parser/parser_prod.nit:2452 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2276);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2452);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2278 */
+  /* parser/parser_prod.nit:2454 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2278);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2454);
   }
   ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:2279 */
+  /* parser/parser_prod.nit:2455 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2279);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2455);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -12661,7 +13663,7 @@ void parser___parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2282;
+  fra.me.line = 2458;
   fra.me.meth = LOCATE_parser___parser_prod___AReadAble___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -12673,7 +13675,7 @@ void parser___parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2284 */
+  /* parser/parser_prod.nit:2460 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -12688,7 +13690,7 @@ void parser___parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2285 */
+    /* parser/parser_prod.nit:2461 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12703,32 +13705,32 @@ void parser___parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2286 */
+      /* parser/parser_prod.nit:2462 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2286);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2462);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2287 */
+      /* parser/parser_prod.nit:2463 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2287);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2463);
       }
-      /* parser/parser_prod.nit:2288 */
+      /* parser/parser_prod.nit:2464 */
       ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2290 */
+      /* parser/parser_prod.nit:2466 */
       ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2292 */
+    /* parser/parser_prod.nit:2468 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2294 */
+  /* parser/parser_prod.nit:2470 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwreadable", LOCATE_parser___parser_prod, 2294);
+    nit_abort("Uninitialized attribute %s", "_n_kwreadable", LOCATE_parser___parser_prod, 2470);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12738,7 +13740,7 @@ void parser___parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2295 */
+    /* parser/parser_prod.nit:2471 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12753,25 +13755,25 @@ void parser___parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2296 */
+      /* parser/parser_prod.nit:2472 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2296);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2472);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2297 */
+      /* parser/parser_prod.nit:2473 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwreadable, ID_parser___parser_nodes___TKwreadable)) /*cast TKwreadable*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2297);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2473);
       }
-      /* parser/parser_prod.nit:2298 */
+      /* parser/parser_prod.nit:2474 */
       ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2300 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2300);
+      /* parser/parser_prod.nit:2476 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2476);
     }
-    /* parser/parser_prod.nit:2302 */
+    /* parser/parser_prod.nit:2478 */
     goto label1;
   }
   label1: while(0);
@@ -12786,7 +13788,7 @@ void parser___parser_prod___AReadAble___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2306;
+  fra.me.line = 2482;
   fra.me.meth = LOCATE_parser___parser_prod___AReadAble___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -12797,9 +13799,9 @@ void parser___parser_prod___AReadAble___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2306 */
+  /* parser/parser_prod.nit:2482 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2308 */
+  /* parser/parser_prod.nit:2484 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -12815,20 +13817,20 @@ void parser___parser_prod___AReadAble___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2309 */
+    /* parser/parser_prod.nit:2485 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2309);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2485);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2311 */
+  /* parser/parser_prod.nit:2487 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwreadable", LOCATE_parser___parser_prod, 2311);
+    nit_abort("Uninitialized attribute %s", "_n_kwreadable", LOCATE_parser___parser_prod, 2487);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AReadAble____n_kwreadable(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -12843,7 +13845,7 @@ void parser___parser_prod___AWriteAble___empty_init(val_t p0, int* init_table){
   if (init_table[itpos59]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2315;
+  fra.me.line = 2491;
   fra.me.meth = LOCATE_parser___parser_prod___AWriteAble___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -12864,7 +13866,7 @@ void parser___parser_prod___AWriteAble___init_awriteable(val_t p0, val_t p1, val
   if (init_table[itpos60]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2317;
+  fra.me.line = 2493;
   fra.me.meth = LOCATE_parser___parser_prod___AWriteAble___init_awriteable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -12878,13 +13880,13 @@ void parser___parser_prod___AWriteAble___init_awriteable(val_t p0, val_t p1, val
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:2317 */
+  /* parser/parser_prod.nit:2493 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2323 */
+  /* parser/parser_prod.nit:2499 */
   CALL_parser___parser_prod___AWriteAble___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:2324 */
+  /* parser/parser_prod.nit:2500 */
   ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2325 */
+  /* parser/parser_prod.nit:2501 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -12899,16 +13901,16 @@ void parser___parser_prod___AWriteAble___init_awriteable(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2326 */
+    /* parser/parser_prod.nit:2502 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2326);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2502);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   }
-  /* parser/parser_prod.nit:2328 */
+  /* parser/parser_prod.nit:2504 */
   ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:2329 */
+  /* parser/parser_prod.nit:2505 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -12923,24 +13925,24 @@ void parser___parser_prod___AWriteAble___init_awriteable(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2330 */
+    /* parser/parser_prod.nit:2506 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2330);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2506);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* parser/parser_prod.nit:2332 */
+  /* parser/parser_prod.nit:2508 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2332);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2508);
   }
   ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:2333 */
+  /* parser/parser_prod.nit:2509 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2333);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2509);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
@@ -12955,7 +13957,7 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2336;
+  fra.me.line = 2512;
   fra.me.meth = LOCATE_parser___parser_prod___AWriteAble___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -12967,7 +13969,7 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2338 */
+  /* parser/parser_prod.nit:2514 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -12982,7 +13984,7 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2339 */
+    /* parser/parser_prod.nit:2515 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12997,28 +13999,28 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2340 */
+      /* parser/parser_prod.nit:2516 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2340);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2516);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2341 */
+      /* parser/parser_prod.nit:2517 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2341);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2517);
       }
-      /* parser/parser_prod.nit:2342 */
+      /* parser/parser_prod.nit:2518 */
       ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2344 */
+      /* parser/parser_prod.nit:2520 */
       ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2346 */
+    /* parser/parser_prod.nit:2522 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2348 */
+  /* parser/parser_prod.nit:2524 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -13033,7 +14035,7 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2349 */
+    /* parser/parser_prod.nit:2525 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13048,32 +14050,32 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2350 */
+      /* parser/parser_prod.nit:2526 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2350);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2526);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2351 */
+      /* parser/parser_prod.nit:2527 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2351);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2527);
       }
-      /* parser/parser_prod.nit:2352 */
+      /* parser/parser_prod.nit:2528 */
       ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2354 */
+      /* parser/parser_prod.nit:2530 */
       ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:2356 */
+    /* parser/parser_prod.nit:2532 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2358 */
+  /* parser/parser_prod.nit:2534 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwwritable", LOCATE_parser___parser_prod, 2358);
+    nit_abort("Uninitialized attribute %s", "_n_kwwritable", LOCATE_parser___parser_prod, 2534);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13083,7 +14085,7 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2359 */
+    /* parser/parser_prod.nit:2535 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13098,25 +14100,25 @@ void parser___parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2360 */
+      /* parser/parser_prod.nit:2536 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2360);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2536);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2361 */
+      /* parser/parser_prod.nit:2537 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast TKwwritable*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2361);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2537);
       }
-      /* parser/parser_prod.nit:2362 */
+      /* parser/parser_prod.nit:2538 */
       ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2364 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2364);
+      /* parser/parser_prod.nit:2540 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2540);
     }
-    /* parser/parser_prod.nit:2366 */
+    /* parser/parser_prod.nit:2542 */
     goto label1;
   }
   label1: while(0);
@@ -13131,7 +14133,7 @@ void parser___parser_prod___AWriteAble___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2370;
+  fra.me.line = 2546;
   fra.me.meth = LOCATE_parser___parser_prod___AWriteAble___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13142,9 +14144,9 @@ void parser___parser_prod___AWriteAble___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2370 */
+  /* parser/parser_prod.nit:2546 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2372 */
+  /* parser/parser_prod.nit:2548 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -13160,16 +14162,16 @@ void parser___parser_prod___AWriteAble___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2373 */
+    /* parser/parser_prod.nit:2549 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_kwredef(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2373);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2549);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2375 */
+  /* parser/parser_prod.nit:2551 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -13185,20 +14187,20 @@ void parser___parser_prod___AWriteAble___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2376 */
+    /* parser/parser_prod.nit:2552 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AAble____n_visibility(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast AVisibility*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2376);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2552);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:2378 */
+  /* parser/parser_prod.nit:2554 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwwritable", LOCATE_parser___parser_prod, 2378);
+    nit_abort("Uninitialized attribute %s", "_n_kwwritable", LOCATE_parser___parser_prod, 2554);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -13213,7 +14215,7 @@ void parser___parser_prod___AIdMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos61]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2382;
+  fra.me.line = 2558;
   fra.me.meth = LOCATE_parser___parser_prod___AIdMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -13233,7 +14235,7 @@ void parser___parser_prod___AIdMethid___init_aidmethid(val_t p0, val_t p1, int*
   if (init_table[itpos62]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2384;
+  fra.me.line = 2560;
   fra.me.meth = LOCATE_parser___parser_prod___AIdMethid___init_aidmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -13243,21 +14245,21 @@ void parser___parser_prod___AIdMethid___init_aidmethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2384 */
+  /* parser/parser_prod.nit:2560 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2388 */
+  /* parser/parser_prod.nit:2564 */
   CALL_parser___parser_prod___AIdMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2389 */
+  /* parser/parser_prod.nit:2565 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2389);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2565);
   }
   ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2390 */
+  /* parser/parser_prod.nit:2566 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2390);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2566);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -13272,7 +14274,7 @@ void parser___parser_prod___AIdMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2393;
+  fra.me.line = 2569;
   fra.me.meth = LOCATE_parser___parser_prod___AIdMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13284,11 +14286,11 @@ void parser___parser_prod___AIdMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2395 */
+  /* parser/parser_prod.nit:2571 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2395);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2571);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13298,7 +14300,7 @@ void parser___parser_prod___AIdMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2396 */
+    /* parser/parser_prod.nit:2572 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13313,25 +14315,25 @@ void parser___parser_prod___AIdMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2397 */
+      /* parser/parser_prod.nit:2573 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2397);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2573);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2398 */
+      /* parser/parser_prod.nit:2574 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2398);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2574);
       }
-      /* parser/parser_prod.nit:2399 */
+      /* parser/parser_prod.nit:2575 */
       ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2401 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2401);
+      /* parser/parser_prod.nit:2577 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2577);
     }
-    /* parser/parser_prod.nit:2403 */
+    /* parser/parser_prod.nit:2579 */
     goto label1;
   }
   label1: while(0);
@@ -13345,7 +14347,7 @@ void parser___parser_prod___AIdMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2407;
+  fra.me.line = 2583;
   fra.me.meth = LOCATE_parser___parser_prod___AIdMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13354,11 +14356,11 @@ void parser___parser_prod___AIdMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2409 */
+  /* parser/parser_prod.nit:2585 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2409);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2585);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIdMethid____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -13373,7 +14375,7 @@ void parser___parser_prod___APlusMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos63]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2413;
+  fra.me.line = 2589;
   fra.me.meth = LOCATE_parser___parser_prod___APlusMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -13393,7 +14395,7 @@ void parser___parser_prod___APlusMethid___init_aplusmethid(val_t p0, val_t p1, i
   if (init_table[itpos64]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2415;
+  fra.me.line = 2591;
   fra.me.meth = LOCATE_parser___parser_prod___APlusMethid___init_aplusmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -13403,21 +14405,21 @@ void parser___parser_prod___APlusMethid___init_aplusmethid(val_t p0, val_t p1, i
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2415 */
+  /* parser/parser_prod.nit:2591 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2419 */
+  /* parser/parser_prod.nit:2595 */
   CALL_parser___parser_prod___APlusMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2420 */
+  /* parser/parser_prod.nit:2596 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2420);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2596);
   }
   ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2421 */
+  /* parser/parser_prod.nit:2597 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2421);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2597);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -13432,7 +14434,7 @@ void parser___parser_prod___APlusMethid___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2424;
+  fra.me.line = 2600;
   fra.me.meth = LOCATE_parser___parser_prod___APlusMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13444,11 +14446,11 @@ void parser___parser_prod___APlusMethid___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2426 */
+  /* parser/parser_prod.nit:2602 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_plus", LOCATE_parser___parser_prod, 2426);
+    nit_abort("Uninitialized attribute %s", "_n_plus", LOCATE_parser___parser_prod, 2602);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13458,7 +14460,7 @@ void parser___parser_prod___APlusMethid___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2427 */
+    /* parser/parser_prod.nit:2603 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13473,25 +14475,25 @@ void parser___parser_prod___APlusMethid___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2428 */
+      /* parser/parser_prod.nit:2604 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2428);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2604);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2429 */
+      /* parser/parser_prod.nit:2605 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TPlus, ID_parser___parser_nodes___TPlus)) /*cast TPlus*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2429);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2605);
       }
-      /* parser/parser_prod.nit:2430 */
+      /* parser/parser_prod.nit:2606 */
       ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2432 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2432);
+      /* parser/parser_prod.nit:2608 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2608);
     }
-    /* parser/parser_prod.nit:2434 */
+    /* parser/parser_prod.nit:2610 */
     goto label1;
   }
   label1: while(0);
@@ -13505,7 +14507,7 @@ void parser___parser_prod___APlusMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2438;
+  fra.me.line = 2614;
   fra.me.meth = LOCATE_parser___parser_prod___APlusMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13514,11 +14516,11 @@ void parser___parser_prod___APlusMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2440 */
+  /* parser/parser_prod.nit:2616 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_plus", LOCATE_parser___parser_prod, 2440);
+    nit_abort("Uninitialized attribute %s", "_n_plus", LOCATE_parser___parser_prod, 2616);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___APlusMethid____n_plus(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -13533,7 +14535,7 @@ void parser___parser_prod___AMinusMethid___empty_init(val_t p0, int* init_table)
   if (init_table[itpos65]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2444;
+  fra.me.line = 2620;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -13553,7 +14555,7 @@ void parser___parser_prod___AMinusMethid___init_aminusmethid(val_t p0, val_t p1,
   if (init_table[itpos66]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2446;
+  fra.me.line = 2622;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusMethid___init_aminusmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -13563,21 +14565,21 @@ void parser___parser_prod___AMinusMethid___init_aminusmethid(val_t p0, val_t p1,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2446 */
+  /* parser/parser_prod.nit:2622 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2450 */
+  /* parser/parser_prod.nit:2626 */
   CALL_parser___parser_prod___AMinusMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2451 */
+  /* parser/parser_prod.nit:2627 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2451);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2627);
   }
   ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2452 */
+  /* parser/parser_prod.nit:2628 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2452);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2628);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -13592,7 +14594,7 @@ void parser___parser_prod___AMinusMethid___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2455;
+  fra.me.line = 2631;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13604,11 +14606,11 @@ void parser___parser_prod___AMinusMethid___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2457 */
+  /* parser/parser_prod.nit:2633 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 2457);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 2633);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13618,7 +14620,7 @@ void parser___parser_prod___AMinusMethid___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2458 */
+    /* parser/parser_prod.nit:2634 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13633,25 +14635,25 @@ void parser___parser_prod___AMinusMethid___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2459 */
+      /* parser/parser_prod.nit:2635 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2459);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2635);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2460 */
+      /* parser/parser_prod.nit:2636 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TMinus, ID_parser___parser_nodes___TMinus)) /*cast TMinus*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2460);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2636);
       }
-      /* parser/parser_prod.nit:2461 */
+      /* parser/parser_prod.nit:2637 */
       ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2463 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2463);
+      /* parser/parser_prod.nit:2639 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2639);
     }
-    /* parser/parser_prod.nit:2465 */
+    /* parser/parser_prod.nit:2641 */
     goto label1;
   }
   label1: while(0);
@@ -13665,7 +14667,7 @@ void parser___parser_prod___AMinusMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2469;
+  fra.me.line = 2645;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13674,11 +14676,11 @@ void parser___parser_prod___AMinusMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2471 */
+  /* parser/parser_prod.nit:2647 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 2471);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 2647);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -13693,7 +14695,7 @@ void parser___parser_prod___AStarMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos67]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2475;
+  fra.me.line = 2651;
   fra.me.meth = LOCATE_parser___parser_prod___AStarMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -13713,7 +14715,7 @@ void parser___parser_prod___AStarMethid___init_astarmethid(val_t p0, val_t p1, i
   if (init_table[itpos68]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2477;
+  fra.me.line = 2653;
   fra.me.meth = LOCATE_parser___parser_prod___AStarMethid___init_astarmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -13723,21 +14725,21 @@ void parser___parser_prod___AStarMethid___init_astarmethid(val_t p0, val_t p1, i
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2477 */
+  /* parser/parser_prod.nit:2653 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2481 */
+  /* parser/parser_prod.nit:2657 */
   CALL_parser___parser_prod___AStarMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2482 */
+  /* parser/parser_prod.nit:2658 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2482);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2658);
   }
   ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2483 */
+  /* parser/parser_prod.nit:2659 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2483);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2659);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -13752,7 +14754,7 @@ void parser___parser_prod___AStarMethid___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2486;
+  fra.me.line = 2662;
   fra.me.meth = LOCATE_parser___parser_prod___AStarMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13764,11 +14766,11 @@ void parser___parser_prod___AStarMethid___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2488 */
+  /* parser/parser_prod.nit:2664 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_star", LOCATE_parser___parser_prod, 2488);
+    nit_abort("Uninitialized attribute %s", "_n_star", LOCATE_parser___parser_prod, 2664);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13778,7 +14780,7 @@ void parser___parser_prod___AStarMethid___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2489 */
+    /* parser/parser_prod.nit:2665 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13793,25 +14795,25 @@ void parser___parser_prod___AStarMethid___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2490 */
+      /* parser/parser_prod.nit:2666 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2490);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2666);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2491 */
+      /* parser/parser_prod.nit:2667 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TStar, ID_parser___parser_nodes___TStar)) /*cast TStar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2491);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2667);
       }
-      /* parser/parser_prod.nit:2492 */
+      /* parser/parser_prod.nit:2668 */
       ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2494 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2494);
+      /* parser/parser_prod.nit:2670 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2670);
     }
-    /* parser/parser_prod.nit:2496 */
+    /* parser/parser_prod.nit:2672 */
     goto label1;
   }
   label1: while(0);
@@ -13825,7 +14827,7 @@ void parser___parser_prod___AStarMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2500;
+  fra.me.line = 2676;
   fra.me.meth = LOCATE_parser___parser_prod___AStarMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13834,11 +14836,11 @@ void parser___parser_prod___AStarMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2502 */
+  /* parser/parser_prod.nit:2678 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_star", LOCATE_parser___parser_prod, 2502);
+    nit_abort("Uninitialized attribute %s", "_n_star", LOCATE_parser___parser_prod, 2678);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStarMethid____n_star(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -13853,7 +14855,7 @@ void parser___parser_prod___ASlashMethid___empty_init(val_t p0, int* init_table)
   if (init_table[itpos69]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2506;
+  fra.me.line = 2682;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -13873,7 +14875,7 @@ void parser___parser_prod___ASlashMethid___init_aslashmethid(val_t p0, val_t p1,
   if (init_table[itpos70]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2508;
+  fra.me.line = 2684;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashMethid___init_aslashmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -13883,21 +14885,21 @@ void parser___parser_prod___ASlashMethid___init_aslashmethid(val_t p0, val_t p1,
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2508 */
+  /* parser/parser_prod.nit:2684 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2512 */
+  /* parser/parser_prod.nit:2688 */
   CALL_parser___parser_prod___ASlashMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2513 */
+  /* parser/parser_prod.nit:2689 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2513);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2689);
   }
   ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2514 */
+  /* parser/parser_prod.nit:2690 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2514);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2690);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -13912,7 +14914,7 @@ void parser___parser_prod___ASlashMethid___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2517;
+  fra.me.line = 2693;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13924,11 +14926,11 @@ void parser___parser_prod___ASlashMethid___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2519 */
+  /* parser/parser_prod.nit:2695 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_slash", LOCATE_parser___parser_prod, 2519);
+    nit_abort("Uninitialized attribute %s", "_n_slash", LOCATE_parser___parser_prod, 2695);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13938,7 +14940,7 @@ void parser___parser_prod___ASlashMethid___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2520 */
+    /* parser/parser_prod.nit:2696 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13953,25 +14955,25 @@ void parser___parser_prod___ASlashMethid___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2521 */
+      /* parser/parser_prod.nit:2697 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2521);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2697);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2522 */
+      /* parser/parser_prod.nit:2698 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TSlash, ID_parser___parser_nodes___TSlash)) /*cast TSlash*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2522);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2698);
       }
-      /* parser/parser_prod.nit:2523 */
+      /* parser/parser_prod.nit:2699 */
       ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2525 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2525);
+      /* parser/parser_prod.nit:2701 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2701);
     }
-    /* parser/parser_prod.nit:2527 */
+    /* parser/parser_prod.nit:2703 */
     goto label1;
   }
   label1: while(0);
@@ -13985,7 +14987,7 @@ void parser___parser_prod___ASlashMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2531;
+  fra.me.line = 2707;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13994,11 +14996,11 @@ void parser___parser_prod___ASlashMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2533 */
+  /* parser/parser_prod.nit:2709 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_slash", LOCATE_parser___parser_prod, 2533);
+    nit_abort("Uninitialized attribute %s", "_n_slash", LOCATE_parser___parser_prod, 2709);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -14013,7 +15015,7 @@ void parser___parser_prod___APercentMethid___empty_init(val_t p0, int* init_tabl
   if (init_table[itpos71]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2537;
+  fra.me.line = 2713;
   fra.me.meth = LOCATE_parser___parser_prod___APercentMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -14033,7 +15035,7 @@ void parser___parser_prod___APercentMethid___init_apercentmethid(val_t p0, val_t
   if (init_table[itpos72]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2539;
+  fra.me.line = 2715;
   fra.me.meth = LOCATE_parser___parser_prod___APercentMethid___init_apercentmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -14043,21 +15045,21 @@ void parser___parser_prod___APercentMethid___init_apercentmethid(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2539 */
+  /* parser/parser_prod.nit:2715 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2543 */
+  /* parser/parser_prod.nit:2719 */
   CALL_parser___parser_prod___APercentMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2544 */
+  /* parser/parser_prod.nit:2720 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2544);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2720);
   }
   ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2545 */
+  /* parser/parser_prod.nit:2721 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2545);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2721);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -14072,7 +15074,7 @@ void parser___parser_prod___APercentMethid___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2548;
+  fra.me.line = 2724;
   fra.me.meth = LOCATE_parser___parser_prod___APercentMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14084,11 +15086,11 @@ void parser___parser_prod___APercentMethid___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2550 */
+  /* parser/parser_prod.nit:2726 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_percent", LOCATE_parser___parser_prod, 2550);
+    nit_abort("Uninitialized attribute %s", "_n_percent", LOCATE_parser___parser_prod, 2726);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14098,7 +15100,7 @@ void parser___parser_prod___APercentMethid___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2551 */
+    /* parser/parser_prod.nit:2727 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14113,25 +15115,25 @@ void parser___parser_prod___APercentMethid___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2552 */
+      /* parser/parser_prod.nit:2728 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2552);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2728);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2553 */
+      /* parser/parser_prod.nit:2729 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TPercent, ID_parser___parser_nodes___TPercent)) /*cast TPercent*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2553);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2729);
       }
-      /* parser/parser_prod.nit:2554 */
+      /* parser/parser_prod.nit:2730 */
       ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2556 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2556);
+      /* parser/parser_prod.nit:2732 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2732);
     }
-    /* parser/parser_prod.nit:2558 */
+    /* parser/parser_prod.nit:2734 */
     goto label1;
   }
   label1: while(0);
@@ -14145,7 +15147,7 @@ void parser___parser_prod___APercentMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2562;
+  fra.me.line = 2738;
   fra.me.meth = LOCATE_parser___parser_prod___APercentMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14154,11 +15156,11 @@ void parser___parser_prod___APercentMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2564 */
+  /* parser/parser_prod.nit:2740 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_percent", LOCATE_parser___parser_prod, 2564);
+    nit_abort("Uninitialized attribute %s", "_n_percent", LOCATE_parser___parser_prod, 2740);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___APercentMethid____n_percent(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -14173,7 +15175,7 @@ void parser___parser_prod___AEqMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos73]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2568;
+  fra.me.line = 2744;
   fra.me.meth = LOCATE_parser___parser_prod___AEqMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -14193,7 +15195,7 @@ void parser___parser_prod___AEqMethid___init_aeqmethid(val_t p0, val_t p1, int*
   if (init_table[itpos74]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2570;
+  fra.me.line = 2746;
   fra.me.meth = LOCATE_parser___parser_prod___AEqMethid___init_aeqmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -14203,21 +15205,21 @@ void parser___parser_prod___AEqMethid___init_aeqmethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2570 */
+  /* parser/parser_prod.nit:2746 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2574 */
+  /* parser/parser_prod.nit:2750 */
   CALL_parser___parser_prod___AEqMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2575 */
+  /* parser/parser_prod.nit:2751 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2575);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2751);
   }
   ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2576 */
+  /* parser/parser_prod.nit:2752 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2576);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2752);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -14232,7 +15234,7 @@ void parser___parser_prod___AEqMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2579;
+  fra.me.line = 2755;
   fra.me.meth = LOCATE_parser___parser_prod___AEqMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14244,11 +15246,11 @@ void parser___parser_prod___AEqMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2581 */
+  /* parser/parser_prod.nit:2757 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_eq", LOCATE_parser___parser_prod, 2581);
+    nit_abort("Uninitialized attribute %s", "_n_eq", LOCATE_parser___parser_prod, 2757);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14258,7 +15260,7 @@ void parser___parser_prod___AEqMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2582 */
+    /* parser/parser_prod.nit:2758 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14273,25 +15275,25 @@ void parser___parser_prod___AEqMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2583 */
+      /* parser/parser_prod.nit:2759 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2583);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2759);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2584 */
+      /* parser/parser_prod.nit:2760 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TEq, ID_parser___parser_nodes___TEq)) /*cast TEq*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2584);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2760);
       }
-      /* parser/parser_prod.nit:2585 */
+      /* parser/parser_prod.nit:2761 */
       ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2587 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2587);
+      /* parser/parser_prod.nit:2763 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2763);
     }
-    /* parser/parser_prod.nit:2589 */
+    /* parser/parser_prod.nit:2765 */
     goto label1;
   }
   label1: while(0);
@@ -14305,7 +15307,7 @@ void parser___parser_prod___AEqMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2593;
+  fra.me.line = 2769;
   fra.me.meth = LOCATE_parser___parser_prod___AEqMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14314,11 +15316,11 @@ void parser___parser_prod___AEqMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2595 */
+  /* parser/parser_prod.nit:2771 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_eq", LOCATE_parser___parser_prod, 2595);
+    nit_abort("Uninitialized attribute %s", "_n_eq", LOCATE_parser___parser_prod, 2771);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AEqMethid____n_eq(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -14333,7 +15335,7 @@ void parser___parser_prod___ANeMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos75]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2599;
+  fra.me.line = 2775;
   fra.me.meth = LOCATE_parser___parser_prod___ANeMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -14353,7 +15355,7 @@ void parser___parser_prod___ANeMethid___init_anemethid(val_t p0, val_t p1, int*
   if (init_table[itpos76]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2601;
+  fra.me.line = 2777;
   fra.me.meth = LOCATE_parser___parser_prod___ANeMethid___init_anemethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -14363,21 +15365,21 @@ void parser___parser_prod___ANeMethid___init_anemethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2601 */
+  /* parser/parser_prod.nit:2777 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2605 */
+  /* parser/parser_prod.nit:2781 */
   CALL_parser___parser_prod___ANeMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2606 */
+  /* parser/parser_prod.nit:2782 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2606);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2782);
   }
   ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2607 */
+  /* parser/parser_prod.nit:2783 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2607);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2783);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -14392,7 +15394,7 @@ void parser___parser_prod___ANeMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2610;
+  fra.me.line = 2786;
   fra.me.meth = LOCATE_parser___parser_prod___ANeMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14404,11 +15406,11 @@ void parser___parser_prod___ANeMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2612 */
+  /* parser/parser_prod.nit:2788 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ne", LOCATE_parser___parser_prod, 2612);
+    nit_abort("Uninitialized attribute %s", "_n_ne", LOCATE_parser___parser_prod, 2788);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14418,7 +15420,7 @@ void parser___parser_prod___ANeMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2613 */
+    /* parser/parser_prod.nit:2789 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14433,25 +15435,25 @@ void parser___parser_prod___ANeMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2614 */
+      /* parser/parser_prod.nit:2790 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2614);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2790);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2615 */
+      /* parser/parser_prod.nit:2791 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TNe, ID_parser___parser_nodes___TNe)) /*cast TNe*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2615);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2791);
       }
-      /* parser/parser_prod.nit:2616 */
+      /* parser/parser_prod.nit:2792 */
       ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2618 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2618);
+      /* parser/parser_prod.nit:2794 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2794);
     }
-    /* parser/parser_prod.nit:2620 */
+    /* parser/parser_prod.nit:2796 */
     goto label1;
   }
   label1: while(0);
@@ -14465,7 +15467,7 @@ void parser___parser_prod___ANeMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2624;
+  fra.me.line = 2800;
   fra.me.meth = LOCATE_parser___parser_prod___ANeMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14474,11 +15476,11 @@ void parser___parser_prod___ANeMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2626 */
+  /* parser/parser_prod.nit:2802 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ne", LOCATE_parser___parser_prod, 2626);
+    nit_abort("Uninitialized attribute %s", "_n_ne", LOCATE_parser___parser_prod, 2802);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANeMethid____n_ne(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -14493,7 +15495,7 @@ void parser___parser_prod___ALeMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos77]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2630;
+  fra.me.line = 2806;
   fra.me.meth = LOCATE_parser___parser_prod___ALeMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -14513,7 +15515,7 @@ void parser___parser_prod___ALeMethid___init_alemethid(val_t p0, val_t p1, int*
   if (init_table[itpos78]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2632;
+  fra.me.line = 2808;
   fra.me.meth = LOCATE_parser___parser_prod___ALeMethid___init_alemethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -14523,21 +15525,21 @@ void parser___parser_prod___ALeMethid___init_alemethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2632 */
+  /* parser/parser_prod.nit:2808 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2636 */
+  /* parser/parser_prod.nit:2812 */
   CALL_parser___parser_prod___ALeMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2637 */
+  /* parser/parser_prod.nit:2813 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2637);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2813);
   }
   ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2638 */
+  /* parser/parser_prod.nit:2814 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2638);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2814);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -14552,7 +15554,7 @@ void parser___parser_prod___ALeMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2641;
+  fra.me.line = 2817;
   fra.me.meth = LOCATE_parser___parser_prod___ALeMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14564,11 +15566,11 @@ void parser___parser_prod___ALeMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2643 */
+  /* parser/parser_prod.nit:2819 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_le", LOCATE_parser___parser_prod, 2643);
+    nit_abort("Uninitialized attribute %s", "_n_le", LOCATE_parser___parser_prod, 2819);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14578,7 +15580,7 @@ void parser___parser_prod___ALeMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2644 */
+    /* parser/parser_prod.nit:2820 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14593,25 +15595,25 @@ void parser___parser_prod___ALeMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2645 */
+      /* parser/parser_prod.nit:2821 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2645);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2821);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2646 */
+      /* parser/parser_prod.nit:2822 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TLe, ID_parser___parser_nodes___TLe)) /*cast TLe*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2646);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2822);
       }
-      /* parser/parser_prod.nit:2647 */
+      /* parser/parser_prod.nit:2823 */
       ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2649 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2649);
+      /* parser/parser_prod.nit:2825 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2825);
     }
-    /* parser/parser_prod.nit:2651 */
+    /* parser/parser_prod.nit:2827 */
     goto label1;
   }
   label1: while(0);
@@ -14625,7 +15627,7 @@ void parser___parser_prod___ALeMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2655;
+  fra.me.line = 2831;
   fra.me.meth = LOCATE_parser___parser_prod___ALeMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14634,11 +15636,11 @@ void parser___parser_prod___ALeMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2657 */
+  /* parser/parser_prod.nit:2833 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_le", LOCATE_parser___parser_prod, 2657);
+    nit_abort("Uninitialized attribute %s", "_n_le", LOCATE_parser___parser_prod, 2833);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALeMethid____n_le(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -14653,7 +15655,7 @@ void parser___parser_prod___AGeMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos79]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2661;
+  fra.me.line = 2837;
   fra.me.meth = LOCATE_parser___parser_prod___AGeMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -14673,7 +15675,7 @@ void parser___parser_prod___AGeMethid___init_agemethid(val_t p0, val_t p1, int*
   if (init_table[itpos80]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2663;
+  fra.me.line = 2839;
   fra.me.meth = LOCATE_parser___parser_prod___AGeMethid___init_agemethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -14683,21 +15685,21 @@ void parser___parser_prod___AGeMethid___init_agemethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2663 */
+  /* parser/parser_prod.nit:2839 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2667 */
+  /* parser/parser_prod.nit:2843 */
   CALL_parser___parser_prod___AGeMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2668 */
+  /* parser/parser_prod.nit:2844 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2668);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2844);
   }
   ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2669 */
+  /* parser/parser_prod.nit:2845 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2669);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2845);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -14712,7 +15714,7 @@ void parser___parser_prod___AGeMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2672;
+  fra.me.line = 2848;
   fra.me.meth = LOCATE_parser___parser_prod___AGeMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14724,11 +15726,11 @@ void parser___parser_prod___AGeMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2674 */
+  /* parser/parser_prod.nit:2850 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ge", LOCATE_parser___parser_prod, 2674);
+    nit_abort("Uninitialized attribute %s", "_n_ge", LOCATE_parser___parser_prod, 2850);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14738,7 +15740,7 @@ void parser___parser_prod___AGeMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2675 */
+    /* parser/parser_prod.nit:2851 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14753,25 +15755,25 @@ void parser___parser_prod___AGeMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2676 */
+      /* parser/parser_prod.nit:2852 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2676);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2852);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2677 */
+      /* parser/parser_prod.nit:2853 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TGe, ID_parser___parser_nodes___TGe)) /*cast TGe*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2677);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2853);
       }
-      /* parser/parser_prod.nit:2678 */
+      /* parser/parser_prod.nit:2854 */
       ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2680 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2680);
+      /* parser/parser_prod.nit:2856 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2856);
     }
-    /* parser/parser_prod.nit:2682 */
+    /* parser/parser_prod.nit:2858 */
     goto label1;
   }
   label1: while(0);
@@ -14785,7 +15787,7 @@ void parser___parser_prod___AGeMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2686;
+  fra.me.line = 2862;
   fra.me.meth = LOCATE_parser___parser_prod___AGeMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14794,11 +15796,11 @@ void parser___parser_prod___AGeMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2688 */
+  /* parser/parser_prod.nit:2864 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ge", LOCATE_parser___parser_prod, 2688);
+    nit_abort("Uninitialized attribute %s", "_n_ge", LOCATE_parser___parser_prod, 2864);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AGeMethid____n_ge(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -14813,7 +15815,7 @@ void parser___parser_prod___ALtMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos81]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2692;
+  fra.me.line = 2868;
   fra.me.meth = LOCATE_parser___parser_prod___ALtMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -14833,7 +15835,7 @@ void parser___parser_prod___ALtMethid___init_altmethid(val_t p0, val_t p1, int*
   if (init_table[itpos82]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2694;
+  fra.me.line = 2870;
   fra.me.meth = LOCATE_parser___parser_prod___ALtMethid___init_altmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -14843,21 +15845,21 @@ void parser___parser_prod___ALtMethid___init_altmethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2694 */
+  /* parser/parser_prod.nit:2870 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2698 */
+  /* parser/parser_prod.nit:2874 */
   CALL_parser___parser_prod___ALtMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2699 */
+  /* parser/parser_prod.nit:2875 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2699);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2875);
   }
   ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2700 */
+  /* parser/parser_prod.nit:2876 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2700);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2876);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -14872,7 +15874,7 @@ void parser___parser_prod___ALtMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2703;
+  fra.me.line = 2879;
   fra.me.meth = LOCATE_parser___parser_prod___ALtMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14884,11 +15886,11 @@ void parser___parser_prod___ALtMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2705 */
+  /* parser/parser_prod.nit:2881 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_lt", LOCATE_parser___parser_prod, 2705);
+    nit_abort("Uninitialized attribute %s", "_n_lt", LOCATE_parser___parser_prod, 2881);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14898,7 +15900,7 @@ void parser___parser_prod___ALtMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2706 */
+    /* parser/parser_prod.nit:2882 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14913,25 +15915,25 @@ void parser___parser_prod___ALtMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2707 */
+      /* parser/parser_prod.nit:2883 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2707);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2883);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2708 */
+      /* parser/parser_prod.nit:2884 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TLt, ID_parser___parser_nodes___TLt)) /*cast TLt*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2708);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2884);
       }
-      /* parser/parser_prod.nit:2709 */
+      /* parser/parser_prod.nit:2885 */
       ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2711 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2711);
+      /* parser/parser_prod.nit:2887 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2887);
     }
-    /* parser/parser_prod.nit:2713 */
+    /* parser/parser_prod.nit:2889 */
     goto label1;
   }
   label1: while(0);
@@ -14945,7 +15947,7 @@ void parser___parser_prod___ALtMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2717;
+  fra.me.line = 2893;
   fra.me.meth = LOCATE_parser___parser_prod___ALtMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -14954,11 +15956,11 @@ void parser___parser_prod___ALtMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2719 */
+  /* parser/parser_prod.nit:2895 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_lt", LOCATE_parser___parser_prod, 2719);
+    nit_abort("Uninitialized attribute %s", "_n_lt", LOCATE_parser___parser_prod, 2895);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALtMethid____n_lt(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -14973,7 +15975,7 @@ void parser___parser_prod___AGtMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos83]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2723;
+  fra.me.line = 2899;
   fra.me.meth = LOCATE_parser___parser_prod___AGtMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -14993,7 +15995,7 @@ void parser___parser_prod___AGtMethid___init_agtmethid(val_t p0, val_t p1, int*
   if (init_table[itpos84]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2725;
+  fra.me.line = 2901;
   fra.me.meth = LOCATE_parser___parser_prod___AGtMethid___init_agtmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15003,21 +16005,21 @@ void parser___parser_prod___AGtMethid___init_agtmethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2725 */
+  /* parser/parser_prod.nit:2901 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2729 */
+  /* parser/parser_prod.nit:2905 */
   CALL_parser___parser_prod___AGtMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2730 */
+  /* parser/parser_prod.nit:2906 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2730);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2906);
   }
   ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2731 */
+  /* parser/parser_prod.nit:2907 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2731);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2907);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -15032,7 +16034,7 @@ void parser___parser_prod___AGtMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2734;
+  fra.me.line = 2910;
   fra.me.meth = LOCATE_parser___parser_prod___AGtMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15044,11 +16046,11 @@ void parser___parser_prod___AGtMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2736 */
+  /* parser/parser_prod.nit:2912 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_gt", LOCATE_parser___parser_prod, 2736);
+    nit_abort("Uninitialized attribute %s", "_n_gt", LOCATE_parser___parser_prod, 2912);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15058,7 +16060,7 @@ void parser___parser_prod___AGtMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2737 */
+    /* parser/parser_prod.nit:2913 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15073,25 +16075,25 @@ void parser___parser_prod___AGtMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2738 */
+      /* parser/parser_prod.nit:2914 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2738);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2914);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2739 */
+      /* parser/parser_prod.nit:2915 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TGt, ID_parser___parser_nodes___TGt)) /*cast TGt*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2739);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2915);
       }
-      /* parser/parser_prod.nit:2740 */
+      /* parser/parser_prod.nit:2916 */
       ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2742 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2742);
+      /* parser/parser_prod.nit:2918 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2918);
     }
-    /* parser/parser_prod.nit:2744 */
+    /* parser/parser_prod.nit:2920 */
     goto label1;
   }
   label1: while(0);
@@ -15105,7 +16107,7 @@ void parser___parser_prod___AGtMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2748;
+  fra.me.line = 2924;
   fra.me.meth = LOCATE_parser___parser_prod___AGtMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15114,11 +16116,11 @@ void parser___parser_prod___AGtMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2750 */
+  /* parser/parser_prod.nit:2926 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_gt", LOCATE_parser___parser_prod, 2750);
+    nit_abort("Uninitialized attribute %s", "_n_gt", LOCATE_parser___parser_prod, 2926);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AGtMethid____n_gt(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -15133,7 +16135,7 @@ void parser___parser_prod___ALlMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos85]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2754;
+  fra.me.line = 2930;
   fra.me.meth = LOCATE_parser___parser_prod___ALlMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -15153,7 +16155,7 @@ void parser___parser_prod___ALlMethid___init_allmethid(val_t p0, val_t p1, int*
   if (init_table[itpos86]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2756;
+  fra.me.line = 2932;
   fra.me.meth = LOCATE_parser___parser_prod___ALlMethid___init_allmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15163,21 +16165,21 @@ void parser___parser_prod___ALlMethid___init_allmethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2756 */
+  /* parser/parser_prod.nit:2932 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2760 */
+  /* parser/parser_prod.nit:2936 */
   CALL_parser___parser_prod___ALlMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2761 */
+  /* parser/parser_prod.nit:2937 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2761);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2937);
   }
   ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2762 */
+  /* parser/parser_prod.nit:2938 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2762);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2938);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -15192,7 +16194,7 @@ void parser___parser_prod___ALlMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2765;
+  fra.me.line = 2941;
   fra.me.meth = LOCATE_parser___parser_prod___ALlMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15204,11 +16206,11 @@ void parser___parser_prod___ALlMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2767 */
+  /* parser/parser_prod.nit:2943 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ll", LOCATE_parser___parser_prod, 2767);
+    nit_abort("Uninitialized attribute %s", "_n_ll", LOCATE_parser___parser_prod, 2943);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15218,7 +16220,7 @@ void parser___parser_prod___ALlMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2768 */
+    /* parser/parser_prod.nit:2944 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15233,25 +16235,25 @@ void parser___parser_prod___ALlMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2769 */
+      /* parser/parser_prod.nit:2945 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2769);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2945);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2770 */
+      /* parser/parser_prod.nit:2946 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TLl, ID_parser___parser_nodes___TLl)) /*cast TLl*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2770);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2946);
       }
-      /* parser/parser_prod.nit:2771 */
+      /* parser/parser_prod.nit:2947 */
       ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2773 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2773);
+      /* parser/parser_prod.nit:2949 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2949);
     }
-    /* parser/parser_prod.nit:2775 */
+    /* parser/parser_prod.nit:2951 */
     goto label1;
   }
   label1: while(0);
@@ -15265,7 +16267,7 @@ void parser___parser_prod___ALlMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2779;
+  fra.me.line = 2955;
   fra.me.meth = LOCATE_parser___parser_prod___ALlMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15274,11 +16276,11 @@ void parser___parser_prod___ALlMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2781 */
+  /* parser/parser_prod.nit:2957 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ll", LOCATE_parser___parser_prod, 2781);
+    nit_abort("Uninitialized attribute %s", "_n_ll", LOCATE_parser___parser_prod, 2957);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALlMethid____n_ll(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -15293,7 +16295,7 @@ void parser___parser_prod___AGgMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos87]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2785;
+  fra.me.line = 2961;
   fra.me.meth = LOCATE_parser___parser_prod___AGgMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -15313,7 +16315,7 @@ void parser___parser_prod___AGgMethid___init_aggmethid(val_t p0, val_t p1, int*
   if (init_table[itpos88]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2787;
+  fra.me.line = 2963;
   fra.me.meth = LOCATE_parser___parser_prod___AGgMethid___init_aggmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15323,21 +16325,21 @@ void parser___parser_prod___AGgMethid___init_aggmethid(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2787 */
+  /* parser/parser_prod.nit:2963 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2791 */
+  /* parser/parser_prod.nit:2967 */
   CALL_parser___parser_prod___AGgMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2792 */
+  /* parser/parser_prod.nit:2968 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2792);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2968);
   }
   ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2793 */
+  /* parser/parser_prod.nit:2969 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2793);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2969);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -15352,7 +16354,7 @@ void parser___parser_prod___AGgMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2796;
+  fra.me.line = 2972;
   fra.me.meth = LOCATE_parser___parser_prod___AGgMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15364,11 +16366,11 @@ void parser___parser_prod___AGgMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2798 */
+  /* parser/parser_prod.nit:2974 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_gg", LOCATE_parser___parser_prod, 2798);
+    nit_abort("Uninitialized attribute %s", "_n_gg", LOCATE_parser___parser_prod, 2974);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15378,7 +16380,7 @@ void parser___parser_prod___AGgMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2799 */
+    /* parser/parser_prod.nit:2975 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15393,25 +16395,25 @@ void parser___parser_prod___AGgMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2800 */
+      /* parser/parser_prod.nit:2976 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2800);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2976);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2801 */
+      /* parser/parser_prod.nit:2977 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TGg, ID_parser___parser_nodes___TGg)) /*cast TGg*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2801);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2977);
       }
-      /* parser/parser_prod.nit:2802 */
+      /* parser/parser_prod.nit:2978 */
       ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2804 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2804);
+      /* parser/parser_prod.nit:2980 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2980);
     }
-    /* parser/parser_prod.nit:2806 */
+    /* parser/parser_prod.nit:2982 */
     goto label1;
   }
   label1: while(0);
@@ -15425,7 +16427,7 @@ void parser___parser_prod___AGgMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2810;
+  fra.me.line = 2986;
   fra.me.meth = LOCATE_parser___parser_prod___AGgMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15434,11 +16436,11 @@ void parser___parser_prod___AGgMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2812 */
+  /* parser/parser_prod.nit:2988 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_gg", LOCATE_parser___parser_prod, 2812);
+    nit_abort("Uninitialized attribute %s", "_n_gg", LOCATE_parser___parser_prod, 2988);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AGgMethid____n_gg(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -15453,7 +16455,7 @@ void parser___parser_prod___ABraMethid___empty_init(val_t p0, int* init_table){
   if (init_table[itpos89]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2816;
+  fra.me.line = 2992;
   fra.me.meth = LOCATE_parser___parser_prod___ABraMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -15473,7 +16475,7 @@ void parser___parser_prod___ABraMethid___init_abramethid(val_t p0, val_t p1, val
   if (init_table[itpos90]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2818;
+  fra.me.line = 2994;
   fra.me.meth = LOCATE_parser___parser_prod___ABraMethid___init_abramethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15485,34 +16487,34 @@ void parser___parser_prod___ABraMethid___init_abramethid(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2818 */
+  /* parser/parser_prod.nit:2994 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2823 */
+  /* parser/parser_prod.nit:2999 */
   CALL_parser___parser_prod___ABraMethid___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:2824 */
+  /* parser/parser_prod.nit:3000 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2824);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3000);
   }
   ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2825 */
+  /* parser/parser_prod.nit:3001 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2825);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3001);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:2826 */
+  /* parser/parser_prod.nit:3002 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2826);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3002);
   }
   ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:2827 */
+  /* parser/parser_prod.nit:3003 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2827);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3003);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -15527,7 +16529,7 @@ void parser___parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2830;
+  fra.me.line = 3006;
   fra.me.meth = LOCATE_parser___parser_prod___ABraMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15539,11 +16541,11 @@ void parser___parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2832 */
+  /* parser/parser_prod.nit:3008 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 2832);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 3008);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15553,7 +16555,7 @@ void parser___parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2833 */
+    /* parser/parser_prod.nit:3009 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15568,32 +16570,32 @@ void parser___parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2834 */
+      /* parser/parser_prod.nit:3010 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2834);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3010);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2835 */
+      /* parser/parser_prod.nit:3011 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast TObra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2835);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3011);
       }
-      /* parser/parser_prod.nit:2836 */
+      /* parser/parser_prod.nit:3012 */
       ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2838 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2838);
+      /* parser/parser_prod.nit:3014 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3014);
     }
-    /* parser/parser_prod.nit:2840 */
+    /* parser/parser_prod.nit:3016 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2842 */
+  /* parser/parser_prod.nit:3018 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 2842);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 3018);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15603,7 +16605,7 @@ void parser___parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2843 */
+    /* parser/parser_prod.nit:3019 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15618,25 +16620,25 @@ void parser___parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2844 */
+      /* parser/parser_prod.nit:3020 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2844);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3020);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2845 */
+      /* parser/parser_prod.nit:3021 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast TCbra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2845);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3021);
       }
-      /* parser/parser_prod.nit:2846 */
+      /* parser/parser_prod.nit:3022 */
       ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2848 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2848);
+      /* parser/parser_prod.nit:3024 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3024);
     }
-    /* parser/parser_prod.nit:2850 */
+    /* parser/parser_prod.nit:3026 */
     goto label1;
   }
   label1: while(0);
@@ -15650,7 +16652,7 @@ void parser___parser_prod___ABraMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2854;
+  fra.me.line = 3030;
   fra.me.meth = LOCATE_parser___parser_prod___ABraMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15660,19 +16662,19 @@ void parser___parser_prod___ABraMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2856 */
+  /* parser/parser_prod.nit:3032 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 2856);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 3032);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ABraMethid____n_obra(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:2857 */
+  /* parser/parser_prod.nit:3033 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 2857);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 3033);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -15687,7 +16689,7 @@ void parser___parser_prod___AStarshipMethid___empty_init(val_t p0, int* init_tab
   if (init_table[itpos91]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2861;
+  fra.me.line = 3037;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -15707,7 +16709,7 @@ void parser___parser_prod___AStarshipMethid___init_astarshipmethid(val_t p0, val
   if (init_table[itpos92]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2863;
+  fra.me.line = 3039;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipMethid___init_astarshipmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15717,21 +16719,21 @@ void parser___parser_prod___AStarshipMethid___init_astarshipmethid(val_t p0, val
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2863 */
+  /* parser/parser_prod.nit:3039 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2867 */
+  /* parser/parser_prod.nit:3043 */
   CALL_parser___parser_prod___AStarshipMethid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:2868 */
+  /* parser/parser_prod.nit:3044 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2868);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3044);
   }
   ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2869 */
+  /* parser/parser_prod.nit:3045 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2869);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3045);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -15746,7 +16748,7 @@ void parser___parser_prod___AStarshipMethid___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2872;
+  fra.me.line = 3048;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15758,11 +16760,11 @@ void parser___parser_prod___AStarshipMethid___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2874 */
+  /* parser/parser_prod.nit:3050 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_starship", LOCATE_parser___parser_prod, 2874);
+    nit_abort("Uninitialized attribute %s", "_n_starship", LOCATE_parser___parser_prod, 3050);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15772,7 +16774,7 @@ void parser___parser_prod___AStarshipMethid___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2875 */
+    /* parser/parser_prod.nit:3051 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15787,25 +16789,25 @@ void parser___parser_prod___AStarshipMethid___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2876 */
+      /* parser/parser_prod.nit:3052 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2876);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3052);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2877 */
+      /* parser/parser_prod.nit:3053 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TStarship, ID_parser___parser_nodes___TStarship)) /*cast TStarship*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2877);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3053);
       }
-      /* parser/parser_prod.nit:2878 */
+      /* parser/parser_prod.nit:3054 */
       ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2880 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2880);
+      /* parser/parser_prod.nit:3056 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3056);
     }
-    /* parser/parser_prod.nit:2882 */
+    /* parser/parser_prod.nit:3058 */
     goto label1;
   }
   label1: while(0);
@@ -15819,7 +16821,7 @@ void parser___parser_prod___AStarshipMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2886;
+  fra.me.line = 3062;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -15828,11 +16830,11 @@ void parser___parser_prod___AStarshipMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2888 */
+  /* parser/parser_prod.nit:3064 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_starship", LOCATE_parser___parser_prod, 2888);
+    nit_abort("Uninitialized attribute %s", "_n_starship", LOCATE_parser___parser_prod, 3064);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -15847,7 +16849,7 @@ void parser___parser_prod___AAssignMethid___empty_init(val_t p0, int* init_table
   if (init_table[itpos93]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2892;
+  fra.me.line = 3068;
   fra.me.meth = LOCATE_parser___parser_prod___AAssignMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -15867,7 +16869,7 @@ void parser___parser_prod___AAssignMethid___init_aassignmethid(val_t p0, val_t p
   if (init_table[itpos94]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2894;
+  fra.me.line = 3070;
   fra.me.meth = LOCATE_parser___parser_prod___AAssignMethid___init_aassignmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15879,34 +16881,34 @@ void parser___parser_prod___AAssignMethid___init_aassignmethid(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2894 */
+  /* parser/parser_prod.nit:3070 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2899 */
+  /* parser/parser_prod.nit:3075 */
   CALL_parser___parser_prod___AAssignMethid___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:2900 */
+  /* parser/parser_prod.nit:3076 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2900);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3076);
   }
   ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2901 */
+  /* parser/parser_prod.nit:3077 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2901);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3077);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:2902 */
+  /* parser/parser_prod.nit:3078 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2902);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3078);
   }
   ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:2903 */
+  /* parser/parser_prod.nit:3079 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2903);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3079);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -15921,7 +16923,7 @@ void parser___parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, va
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2906;
+  fra.me.line = 3082;
   fra.me.meth = LOCATE_parser___parser_prod___AAssignMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15933,11 +16935,11 @@ void parser___parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, va
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2908 */
+  /* parser/parser_prod.nit:3084 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2908);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3084);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15947,7 +16949,7 @@ void parser___parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2909 */
+    /* parser/parser_prod.nit:3085 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15962,32 +16964,32 @@ void parser___parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2910 */
+      /* parser/parser_prod.nit:3086 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2910);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3086);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2911 */
+      /* parser/parser_prod.nit:3087 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2911);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3087);
       }
-      /* parser/parser_prod.nit:2912 */
+      /* parser/parser_prod.nit:3088 */
       ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2914 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2914);
+      /* parser/parser_prod.nit:3090 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3090);
     }
-    /* parser/parser_prod.nit:2916 */
+    /* parser/parser_prod.nit:3092 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2918 */
+  /* parser/parser_prod.nit:3094 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 2918);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 3094);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15997,7 +16999,7 @@ void parser___parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2919 */
+    /* parser/parser_prod.nit:3095 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16012,25 +17014,25 @@ void parser___parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2920 */
+      /* parser/parser_prod.nit:3096 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2920);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3096);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2921 */
+      /* parser/parser_prod.nit:3097 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2921);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3097);
       }
-      /* parser/parser_prod.nit:2922 */
+      /* parser/parser_prod.nit:3098 */
       ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2924 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2924);
+      /* parser/parser_prod.nit:3100 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3100);
     }
-    /* parser/parser_prod.nit:2926 */
+    /* parser/parser_prod.nit:3102 */
     goto label1;
   }
   label1: while(0);
@@ -16044,7 +17046,7 @@ void parser___parser_prod___AAssignMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2930;
+  fra.me.line = 3106;
   fra.me.meth = LOCATE_parser___parser_prod___AAssignMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -16054,19 +17056,19 @@ void parser___parser_prod___AAssignMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2932 */
+  /* parser/parser_prod.nit:3108 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 2932);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3108);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAssignMethid____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:2933 */
+  /* parser/parser_prod.nit:3109 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 2933);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 3109);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -16081,7 +17083,7 @@ void parser___parser_prod___ABraassignMethid___empty_init(val_t p0, int* init_ta
   if (init_table[itpos95]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2937;
+  fra.me.line = 3113;
   fra.me.meth = LOCATE_parser___parser_prod___ABraassignMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -16101,7 +17103,7 @@ void parser___parser_prod___ABraassignMethid___init_abraassignmethid(val_t p0, v
   if (init_table[itpos96]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2939;
+  fra.me.line = 3115;
   fra.me.meth = LOCATE_parser___parser_prod___ABraassignMethid___init_abraassignmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -16115,47 +17117,47 @@ void parser___parser_prod___ABraassignMethid___init_abraassignmethid(val_t p0, v
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:2939 */
+  /* parser/parser_prod.nit:3115 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:2945 */
+  /* parser/parser_prod.nit:3121 */
   CALL_parser___parser_prod___ABraassignMethid___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:2946 */
+  /* parser/parser_prod.nit:3122 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2946);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3122);
   }
   ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:2947 */
+  /* parser/parser_prod.nit:3123 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2947);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3123);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:2948 */
+  /* parser/parser_prod.nit:3124 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2948);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3124);
   }
   ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:2949 */
+  /* parser/parser_prod.nit:3125 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2949);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3125);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:2950 */
+  /* parser/parser_prod.nit:3126 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 2950);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3126);
   }
   ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:2951 */
+  /* parser/parser_prod.nit:3127 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2951);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3127);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
@@ -16170,7 +17172,7 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2954;
+  fra.me.line = 3130;
   fra.me.meth = LOCATE_parser___parser_prod___ABraassignMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16182,11 +17184,11 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:2956 */
+  /* parser/parser_prod.nit:3132 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 2956);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 3132);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -16196,7 +17198,7 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2957 */
+    /* parser/parser_prod.nit:3133 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16211,32 +17213,32 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2958 */
+      /* parser/parser_prod.nit:3134 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2958);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3134);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2959 */
+      /* parser/parser_prod.nit:3135 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast TObra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2959);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3135);
       }
-      /* parser/parser_prod.nit:2960 */
+      /* parser/parser_prod.nit:3136 */
       ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2962 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2962);
+      /* parser/parser_prod.nit:3138 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3138);
     }
-    /* parser/parser_prod.nit:2964 */
+    /* parser/parser_prod.nit:3140 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2966 */
+  /* parser/parser_prod.nit:3142 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 2966);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 3142);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -16246,7 +17248,7 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2967 */
+    /* parser/parser_prod.nit:3143 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16261,32 +17263,32 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2968 */
+      /* parser/parser_prod.nit:3144 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2968);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3144);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2969 */
+      /* parser/parser_prod.nit:3145 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast TCbra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2969);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3145);
       }
-      /* parser/parser_prod.nit:2970 */
+      /* parser/parser_prod.nit:3146 */
       ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2972 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2972);
+      /* parser/parser_prod.nit:3148 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3148);
     }
-    /* parser/parser_prod.nit:2974 */
+    /* parser/parser_prod.nit:3150 */
     goto label1;
   }
-  /* parser/parser_prod.nit:2976 */
+  /* parser/parser_prod.nit:3152 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 2976);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 3152);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -16296,7 +17298,7 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:2977 */
+    /* parser/parser_prod.nit:3153 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16311,25 +17313,25 @@ void parser___parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:2978 */
+      /* parser/parser_prod.nit:3154 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 2978);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3154);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:2979 */
+      /* parser/parser_prod.nit:3155 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 2979);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3155);
       }
-      /* parser/parser_prod.nit:2980 */
+      /* parser/parser_prod.nit:3156 */
       ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:2982 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 2982);
+      /* parser/parser_prod.nit:3158 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3158);
     }
-    /* parser/parser_prod.nit:2984 */
+    /* parser/parser_prod.nit:3160 */
     goto label1;
   }
   label1: while(0);
@@ -16343,7 +17345,7 @@ void parser___parser_prod___ABraassignMethid___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2988;
+  fra.me.line = 3164;
   fra.me.meth = LOCATE_parser___parser_prod___ABraassignMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -16353,27 +17355,27 @@ void parser___parser_prod___ABraassignMethid___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:2990 */
+  /* parser/parser_prod.nit:3166 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 2990);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 3166);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:2991 */
+  /* parser/parser_prod.nit:3167 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 2991);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 3167);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:2992 */
+  /* parser/parser_prod.nit:3168 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 2992);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 3168);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -16388,7 +17390,7 @@ void parser___parser_prod___ASignature___empty_init(val_t p0, int* init_table){
   if (init_table[itpos97]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2996;
+  fra.me.line = 3172;
   fra.me.meth = LOCATE_parser___parser_prod___ASignature___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -16409,7 +17411,7 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
   if (init_table[itpos98]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 2998;
+  fra.me.line = 3174;
   fra.me.meth = LOCATE_parser___parser_prod___ASignature___init_asignature;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -16426,11 +17428,11 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:3006 */
+  /* parser/parser_prod.nit:3182 */
   CALL_parser___parser_prod___ASignature___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* parser/parser_prod.nit:3007 */
+  /* parser/parser_prod.nit:3183 */
   ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3008 */
+  /* parser/parser_prod.nit:3184 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -16445,17 +17447,17 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3009 */
+    /* parser/parser_prod.nit:3185 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3009);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3185);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASignature___init_asignature_1));
-  /* parser/parser_prod.nit:3016 */
+  /* parser/parser_prod.nit:3192 */
   ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[0]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:3017 */
+  /* parser/parser_prod.nit:3193 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -16470,16 +17472,16 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3018 */
+    /* parser/parser_prod.nit:3194 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3018);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3194);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   }
-  /* parser/parser_prod.nit:3020 */
+  /* parser/parser_prod.nit:3196 */
   ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:3021 */
+  /* parser/parser_prod.nit:3197 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -16494,10 +17496,10 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3022 */
+    /* parser/parser_prod.nit:3198 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3022);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3198);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   }
@@ -16511,7 +17513,7 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:3011 */
+    /* parser/parser_prod.nit:3187 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -16525,21 +17527,21 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:3012 */
+    /* parser/parser_prod.nit:3188 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AParam, ID_parser___parser_nodes___AParam)) /*cast AParam*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3012);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3188);
     }
-    /* parser/parser_prod.nit:3013 */
+    /* parser/parser_prod.nit:3189 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_params(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3013);
+      nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3189);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___ASignature____n_params(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:3014 */
+    /* parser/parser_prod.nit:3190 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -16549,7 +17551,7 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:3024 */
+    /* parser/parser_prod.nit:3200 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -16563,21 +17565,21 @@ void parser___parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:3025 */
+    /* parser/parser_prod.nit:3201 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AClosureDecl, ID_parser___parser_nodes___AClosureDecl)) /*cast AClosureDecl*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3025);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3201);
     }
-    /* parser/parser_prod.nit:3026 */
+    /* parser/parser_prod.nit:3202 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_closure_decls(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3026);
+      nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3202);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___ASignature____n_closure_decls(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:3027 */
+    /* parser/parser_prod.nit:3203 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -16593,7 +17595,7 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3031;
+  fra.me.line = 3207;
   fra.me.meth = LOCATE_parser___parser_prod___ASignature___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16605,7 +17607,7 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3033 */
+  /* parser/parser_prod.nit:3209 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -16620,7 +17622,7 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3034 */
+    /* parser/parser_prod.nit:3210 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16635,33 +17637,33 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3035 */
+      /* parser/parser_prod.nit:3211 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3035);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3211);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3036 */
+      /* parser/parser_prod.nit:3212 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast TOpar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3036);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3212);
       }
-      /* parser/parser_prod.nit:3037 */
+      /* parser/parser_prod.nit:3213 */
       ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3039 */
+      /* parser/parser_prod.nit:3215 */
       ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3041 */
+    /* parser/parser_prod.nit:3217 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3043 */
+  /* parser/parser_prod.nit:3219 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3043);
+    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3219);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -16676,13 +17678,13 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:3043 */
+      /* parser/parser_prod.nit:3219 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:3044 */
+      /* parser/parser_prod.nit:3220 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3044);
+        nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3220);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -16699,7 +17701,7 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:3045 */
+        /* parser/parser_prod.nit:3221 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -16714,37 +17716,37 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:3046 */
+          /* parser/parser_prod.nit:3222 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AParam, ID_parser___parser_nodes___AParam)) /*cast AParam*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3046);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3222);
           }
-          /* parser/parser_prod.nit:3047 */
+          /* parser/parser_prod.nit:3223 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3047);
+            nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3223);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:3048 */
+          /* parser/parser_prod.nit:3224 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3048);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3224);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:3050 */
+          /* parser/parser_prod.nit:3226 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3050);
+            nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3226);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:3052 */
+        /* parser/parser_prod.nit:3228 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -16759,7 +17761,7 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:3055 */
+  /* parser/parser_prod.nit:3231 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -16774,7 +17776,7 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3056 */
+    /* parser/parser_prod.nit:3232 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16789,28 +17791,28 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3057 */
+      /* parser/parser_prod.nit:3233 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3057);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3233);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3058 */
+      /* parser/parser_prod.nit:3234 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast TCpar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3058);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3234);
       }
-      /* parser/parser_prod.nit:3059 */
+      /* parser/parser_prod.nit:3235 */
       ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3061 */
+      /* parser/parser_prod.nit:3237 */
       ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3063 */
+    /* parser/parser_prod.nit:3239 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3065 */
+  /* parser/parser_prod.nit:3241 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -16825,7 +17827,7 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3066 */
+    /* parser/parser_prod.nit:3242 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16840,33 +17842,33 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3067 */
+      /* parser/parser_prod.nit:3243 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3067);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3243);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3068 */
+      /* parser/parser_prod.nit:3244 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3068);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3244);
       }
-      /* parser/parser_prod.nit:3069 */
+      /* parser/parser_prod.nit:3245 */
       ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3071 */
+      /* parser/parser_prod.nit:3247 */
       ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3073 */
+    /* parser/parser_prod.nit:3249 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3075 */
+  /* parser/parser_prod.nit:3251 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3075);
+    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3251);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -16881,13 +17883,13 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:3075 */
+      /* parser/parser_prod.nit:3251 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:3076 */
+      /* parser/parser_prod.nit:3252 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3076);
+        nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3252);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -16904,7 +17906,7 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:3077 */
+        /* parser/parser_prod.nit:3253 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -16919,37 +17921,37 @@ void parser___parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:3078 */
+          /* parser/parser_prod.nit:3254 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AClosureDecl, ID_parser___parser_nodes___AClosureDecl)) /*cast AClosureDecl*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3078);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3254);
           }
-          /* parser/parser_prod.nit:3079 */
+          /* parser/parser_prod.nit:3255 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3079);
+            nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3255);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:3080 */
+          /* parser/parser_prod.nit:3256 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3080);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3256);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:3082 */
+          /* parser/parser_prod.nit:3258 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3082);
+            nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3258);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:3084 */
+        /* parser/parser_prod.nit:3260 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -16976,7 +17978,7 @@ void parser___parser_prod___ASignature___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3089;
+  fra.me.line = 3265;
   fra.me.meth = LOCATE_parser___parser_prod___ASignature___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16987,9 +17989,9 @@ void parser___parser_prod___ASignature___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3089 */
+  /* parser/parser_prod.nit:3265 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3091 */
+  /* parser/parser_prod.nit:3267 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -17005,24 +18007,24 @@ void parser___parser_prod___ASignature___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3092 */
+    /* parser/parser_prod.nit:3268 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_opar(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast TOpar*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3092);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3268);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3094 */
+  /* parser/parser_prod.nit:3270 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3094);
+    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser___parser_prod, 3270);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_params(fra.me.REG[2]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASignature___visit_all_1));
-  /* parser/parser_prod.nit:3097 */
+  /* parser/parser_prod.nit:3273 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -17038,16 +18040,16 @@ void parser___parser_prod___ASignature___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3098 */
+    /* parser/parser_prod.nit:3274 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_cpar(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast TCpar*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3098);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3274);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3100 */
+  /* parser/parser_prod.nit:3276 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -17063,20 +18065,20 @@ void parser___parser_prod___ASignature___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3101 */
+    /* parser/parser_prod.nit:3277 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___ASignature____n_type(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3101);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3277);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3103 */
+  /* parser/parser_prod.nit:3279 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3103);
+    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser___parser_prod, 3279);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASignature____n_closure_decls(fra.me.REG[2]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASignature___visit_all_2));
@@ -17099,7 +18101,7 @@ void parser___parser_prod___ASignature___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:3095 */
+    /* parser/parser_prod.nit:3271 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -17120,7 +18122,7 @@ void parser___parser_prod___ASignature___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:3104 */
+    /* parser/parser_prod.nit:3280 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -17133,7 +18135,7 @@ void parser___parser_prod___AParam___empty_init(val_t p0, int* init_table){
   if (init_table[itpos99]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3109;
+  fra.me.line = 3285;
   fra.me.meth = LOCATE_parser___parser_prod___AParam___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -17145,49 +18147,51 @@ void parser___parser_prod___AParam___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___AParam___init_aparam[] = "parser_prod::AParam::init_aparam";
-void parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+void parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
   int itpos100 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AParam].i;
-  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;
   if (init_table[itpos100]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3111;
+  fra.me.line = 3287;
   fra.me.meth = LOCATE_parser___parser_prod___AParam___init_aparam;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:3111 */
-  fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3117 */
-  CALL_parser___parser_prod___AParam___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:3118 */
+  fra.me.REG[4] = p4;
+  /* parser/parser_prod.nit:3287 */
+  fra.me.REG[5] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3294 */
+  CALL_parser___parser_prod___AParam___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
+  /* parser/parser_prod.nit:3295 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3118);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3295);
   }
-  ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3119 */
+  ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3296 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3119);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3296);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:3120 */
-  ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3121 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:3297 */
+  ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:3298 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -17202,16 +18206,16 @@ void parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3122 */
+    /* parser/parser_prod.nit:3299 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3122);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3299);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
   }
-  /* parser/parser_prod.nit:3124 */
-  ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:3125 */
+  /* parser/parser_prod.nit:3301 */
+  ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[5]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:3302 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -17226,12 +18230,36 @@ void parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3126 */
+    /* parser/parser_prod.nit:3303 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3126);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3303);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  }
+  /* parser/parser_prod.nit:3305 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[5]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:3306 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3307 */
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3307);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos100] = 1;
@@ -17245,7 +18273,7 @@ void parser___parser_prod___AParam___replace_child(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___parser_prod;
-  fra.me.line = 3130;
+  fra.me.line = 3311;
   fra.me.meth = LOCATE_parser___parser_prod___AParam___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -17257,11 +18285,11 @@ void parser___parser_prod___AParam___replace_child(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_prod.nit:3132 */
+  /* parser/parser_prod.nit:3313 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3132);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3313);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -17271,7 +18299,7 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3133 */
+    /* parser/parser_prod.nit:3314 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17286,28 +18314,28 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3134 */
+      /* parser/parser_prod.nit:3315 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3134);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3315);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3135 */
+      /* parser/parser_prod.nit:3316 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3135);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3316);
       }
-      /* parser/parser_prod.nit:3136 */
+      /* parser/parser_prod.nit:3317 */
       ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3138 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3138);
+      /* parser/parser_prod.nit:3319 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3319);
     }
-    /* parser/parser_prod.nit:3140 */
+    /* parser/parser_prod.nit:3321 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3142 */
+  /* parser/parser_prod.nit:3323 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -17322,7 +18350,7 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3143 */
+    /* parser/parser_prod.nit:3324 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17337,28 +18365,28 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3144 */
+      /* parser/parser_prod.nit:3325 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3144);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3325);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3145 */
+      /* parser/parser_prod.nit:3326 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3145);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3326);
       }
-      /* parser/parser_prod.nit:3146 */
+      /* parser/parser_prod.nit:3327 */
       ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3148 */
+      /* parser/parser_prod.nit:3329 */
       ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3150 */
+    /* parser/parser_prod.nit:3331 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3152 */
+  /* parser/parser_prod.nit:3333 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -17373,7 +18401,7 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3153 */
+    /* parser/parser_prod.nit:3334 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17388,25 +18416,76 @@ void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2)
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3154 */
+      /* parser/parser_prod.nit:3335 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3154);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3335);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3155 */
+      /* parser/parser_prod.nit:3336 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TDotdotdot, ID_parser___parser_nodes___TDotdotdot)) /*cast TDotdotdot*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3155);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3336);
       }
-      /* parser/parser_prod.nit:3156 */
+      /* parser/parser_prod.nit:3337 */
       ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3158 */
+      /* parser/parser_prod.nit:3339 */
       ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3160 */
+    /* parser/parser_prod.nit:3341 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:3343 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3344 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:3345 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3345);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3346 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3346);
+      }
+      /* parser/parser_prod.nit:3347 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:3349 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:3351 */
     goto label1;
   }
   label1: while(0);
@@ -17421,7 +18500,7 @@ void parser___parser_prod___AParam___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3164;
+  fra.me.line = 3355;
   fra.me.meth = LOCATE_parser___parser_prod___AParam___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -17432,17 +18511,17 @@ void parser___parser_prod___AParam___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3164 */
+  /* parser/parser_prod.nit:3355 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3166 */
+  /* parser/parser_prod.nit:3357 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3166);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3357);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AParam____n_id(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:3167 */
+  /* parser/parser_prod.nit:3358 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -17458,16 +18537,16 @@ void parser___parser_prod___AParam___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3168 */
+    /* parser/parser_prod.nit:3359 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AParam____n_type(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3168);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3359);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3170 */
+  /* parser/parser_prod.nit:3361 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -17483,12 +18562,37 @@ void parser___parser_prod___AParam___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3171 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[2]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TDotdotdot, ID_parser___parser_nodes___TDotdotdot)) /*cast TDotdotdot*/;
+    /* parser/parser_prod.nit:3362 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AParam____n_dotdotdot(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TDotdotdot, ID_parser___parser_nodes___TDotdotdot)) /*cast TDotdotdot*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3362);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:3364 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3365 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3171);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3365);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -17503,7 +18607,7 @@ void parser___parser_prod___AClosureDecl___empty_init(val_t p0, int* init_table)
   if (init_table[itpos101]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3176;
+  fra.me.line = 3370;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -17524,7 +18628,7 @@ void parser___parser_prod___AClosureDecl___init_aclosuredecl(val_t p0, val_t p1,
   if (init_table[itpos102]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3178;
+  fra.me.line = 3372;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___init_aclosuredecl;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -17542,13 +18646,13 @@ void parser___parser_prod___AClosureDecl___init_aclosuredecl(val_t p0, val_t p1,
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:3178 */
+  /* parser/parser_prod.nit:3372 */
   fra.me.REG[6] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3186 */
+  /* parser/parser_prod.nit:3380 */
   CALL_parser___parser_prod___AClosureDecl___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
-  /* parser/parser_prod.nit:3187 */
+  /* parser/parser_prod.nit:3381 */
   ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[6]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3188 */
+  /* parser/parser_prod.nit:3382 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -17563,55 +18667,55 @@ void parser___parser_prod___AClosureDecl___init_aclosuredecl(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3189 */
+    /* parser/parser_prod.nit:3383 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3189);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3383);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
   }
-  /* parser/parser_prod.nit:3191 */
+  /* parser/parser_prod.nit:3385 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3191);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3385);
   }
   ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[6]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3192 */
+  /* parser/parser_prod.nit:3386 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3192);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3386);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
-  /* parser/parser_prod.nit:3193 */
+  /* parser/parser_prod.nit:3387 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3193);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3387);
   }
   ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[6]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:3194 */
+  /* parser/parser_prod.nit:3388 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3194);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3388);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
-  /* parser/parser_prod.nit:3195 */
+  /* parser/parser_prod.nit:3389 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3195);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3389);
   }
   ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[6]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:3196 */
+  /* parser/parser_prod.nit:3390 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3196);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3390);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-  /* parser/parser_prod.nit:3197 */
+  /* parser/parser_prod.nit:3391 */
   ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[6]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:3198 */
+  /* parser/parser_prod.nit:3392 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -17626,10 +18730,10 @@ void parser___parser_prod___AClosureDecl___init_aclosuredecl(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3199 */
+    /* parser/parser_prod.nit:3393 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3199);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3393);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   }
@@ -17645,7 +18749,7 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3203;
+  fra.me.line = 3397;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -17657,7 +18761,7 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3205 */
+  /* parser/parser_prod.nit:3399 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -17672,7 +18776,7 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3206 */
+    /* parser/parser_prod.nit:3400 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17687,32 +18791,32 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3207 */
+      /* parser/parser_prod.nit:3401 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3207);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3401);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3208 */
+      /* parser/parser_prod.nit:3402 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast TKwbreak*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3208);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3402);
       }
-      /* parser/parser_prod.nit:3209 */
+      /* parser/parser_prod.nit:3403 */
       ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3211 */
+      /* parser/parser_prod.nit:3405 */
       ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3213 */
+    /* parser/parser_prod.nit:3407 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3215 */
+  /* parser/parser_prod.nit:3409 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 3215);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 3409);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -17722,7 +18826,7 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3216 */
+    /* parser/parser_prod.nit:3410 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17737,32 +18841,32 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3217 */
+      /* parser/parser_prod.nit:3411 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3217);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3411);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3218 */
+      /* parser/parser_prod.nit:3412 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast TBang*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3218);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3412);
       }
-      /* parser/parser_prod.nit:3219 */
+      /* parser/parser_prod.nit:3413 */
       ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3221 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3221);
+      /* parser/parser_prod.nit:3415 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3415);
     }
-    /* parser/parser_prod.nit:3223 */
+    /* parser/parser_prod.nit:3417 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3225 */
+  /* parser/parser_prod.nit:3419 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3225);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3419);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -17772,7 +18876,7 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3226 */
+    /* parser/parser_prod.nit:3420 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17787,32 +18891,32 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3227 */
+      /* parser/parser_prod.nit:3421 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3227);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3421);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3228 */
+      /* parser/parser_prod.nit:3422 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3228);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3422);
       }
-      /* parser/parser_prod.nit:3229 */
+      /* parser/parser_prod.nit:3423 */
       ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3231 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3231);
+      /* parser/parser_prod.nit:3425 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3425);
     }
-    /* parser/parser_prod.nit:3233 */
+    /* parser/parser_prod.nit:3427 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3235 */
+  /* parser/parser_prod.nit:3429 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_parser___parser_prod, 3235);
+    nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_parser___parser_prod, 3429);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -17822,7 +18926,7 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3236 */
+    /* parser/parser_prod.nit:3430 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17837,28 +18941,28 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3237 */
+      /* parser/parser_prod.nit:3431 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3237);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3431);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3238 */
+      /* parser/parser_prod.nit:3432 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3238);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3432);
       }
-      /* parser/parser_prod.nit:3239 */
+      /* parser/parser_prod.nit:3433 */
       ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3241 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3241);
+      /* parser/parser_prod.nit:3435 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3435);
     }
-    /* parser/parser_prod.nit:3243 */
+    /* parser/parser_prod.nit:3437 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3245 */
+  /* parser/parser_prod.nit:3439 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -17873,7 +18977,7 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3246 */
+    /* parser/parser_prod.nit:3440 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17888,25 +18992,25 @@ void parser___parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3247 */
+      /* parser/parser_prod.nit:3441 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3247);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3441);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3248 */
+      /* parser/parser_prod.nit:3442 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3248);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3442);
       }
-      /* parser/parser_prod.nit:3249 */
+      /* parser/parser_prod.nit:3443 */
       ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3251 */
+      /* parser/parser_prod.nit:3445 */
       ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3253 */
+    /* parser/parser_prod.nit:3447 */
     goto label1;
   }
   label1: while(0);
@@ -17921,7 +19025,7 @@ void parser___parser_prod___AClosureDecl___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3257;
+  fra.me.line = 3451;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDecl___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -17932,9 +19036,9 @@ void parser___parser_prod___AClosureDecl___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3257 */
+  /* parser/parser_prod.nit:3451 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3259 */
+  /* parser/parser_prod.nit:3453 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -17950,40 +19054,40 @@ void parser___parser_prod___AClosureDecl___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3260 */
+    /* parser/parser_prod.nit:3454 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast TKwbreak*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3260);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3454);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3262 */
+  /* parser/parser_prod.nit:3456 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 3262);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 3456);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_bang(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:3263 */
+  /* parser/parser_prod.nit:3457 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3263);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3457);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_id(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:3264 */
+  /* parser/parser_prod.nit:3458 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_parser___parser_prod, 3264);
+    nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_parser___parser_prod, 3458);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_signature(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:3265 */
+  /* parser/parser_prod.nit:3459 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -17999,12 +19103,12 @@ void parser___parser_prod___AClosureDecl___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3266 */
+    /* parser/parser_prod.nit:3460 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureDecl____n_expr(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3266);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3460);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -18019,7 +19123,7 @@ void parser___parser_prod___AType___empty_init(val_t p0, int* init_table){
   if (init_table[itpos103]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3271;
+  fra.me.line = 3465;
   fra.me.meth = LOCATE_parser___parser_prod___AType___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -18031,36 +19135,38 @@ void parser___parser_prod___AType___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___AType___init_atype[] = "parser_prod::AType::init_atype";
-void parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+void parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
   int itpos104 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AType].i;
-  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;
   if (init_table[itpos104]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3273;
+  fra.me.line = 3467;
   fra.me.meth = LOCATE_parser___parser_prod___AType___init_atype;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:3273 */
-  fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3279 */
-  CALL_parser___parser_prod___AType___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:3280 */
-  ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3281 */
+  fra.me.REG[4] = p4;
+  /* parser/parser_prod.nit:3467 */
+  fra.me.REG[5] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3474 */
+  CALL_parser___parser_prod___AType___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
+  /* parser/parser_prod.nit:3475 */
+  ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3476 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -18075,27 +19181,51 @@ void parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3282 */
+    /* parser/parser_prod.nit:3477 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3282);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3477);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
   }
-  /* parser/parser_prod.nit:3284 */
+  /* parser/parser_prod.nit:3479 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3284);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3479);
   }
-  ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3285 */
+  ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:3480 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3285);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3480);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AType___init_atype_1));
+  /* parser/parser_prod.nit:3486 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[5]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:3487 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3488 */
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3488);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+  }
   stack_frame_head = fra.me.prev;
   init_table[itpos104] = 1;
   return;
@@ -18105,7 +19235,7 @@ void parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:3286 */
+    /* parser/parser_prod.nit:3481 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -18119,22 +19249,22 @@ void parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:3287 */
+    /* parser/parser_prod.nit:3482 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3287);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3482);
     }
-    /* parser/parser_prod.nit:3288 */
-    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(closctx->REG[4])!=NIT_NULL);
+    /* parser/parser_prod.nit:3483 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(closctx->REG[5])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3288);
+      nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3483);
     }
-    fra.me.REG[1] = ATTR_parser___parser_nodes___AType____n_types(closctx->REG[4]);
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AType____n_types(closctx->REG[5]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:3289 */
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
+    /* parser/parser_prod.nit:3484 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[5]);
     stack_frame_head = fra.me.prev;
     return;
   }
@@ -18149,7 +19279,7 @@ void parser___parser_prod___AType___replace_child(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___parser_prod;
-  fra.me.line = 3293;
+  fra.me.line = 3492;
   fra.me.meth = LOCATE_parser___parser_prod___AType___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18161,7 +19291,7 @@ void parser___parser_prod___AType___replace_child(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_prod.nit:3295 */
+  /* parser/parser_prod.nit:3494 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -18176,7 +19306,7 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3296 */
+    /* parser/parser_prod.nit:3495 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18191,32 +19321,32 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3297 */
+      /* parser/parser_prod.nit:3496 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3297);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3496);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3298 */
+      /* parser/parser_prod.nit:3497 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast TKwnullable*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3298);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3497);
       }
-      /* parser/parser_prod.nit:3299 */
+      /* parser/parser_prod.nit:3498 */
       ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3301 */
+      /* parser/parser_prod.nit:3500 */
       ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3303 */
+    /* parser/parser_prod.nit:3502 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3305 */
+  /* parser/parser_prod.nit:3504 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3305);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3504);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -18226,7 +19356,7 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3306 */
+    /* parser/parser_prod.nit:3505 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18241,33 +19371,33 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3307 */
+      /* parser/parser_prod.nit:3506 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3307);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3506);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3308 */
+      /* parser/parser_prod.nit:3507 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3308);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3507);
       }
-      /* parser/parser_prod.nit:3309 */
+      /* parser/parser_prod.nit:3508 */
       ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3311 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3311);
+      /* parser/parser_prod.nit:3510 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3510);
     }
-    /* parser/parser_prod.nit:3313 */
+    /* parser/parser_prod.nit:3512 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3315 */
+  /* parser/parser_prod.nit:3514 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3315);
+    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3514);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -18282,13 +19412,13 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:3315 */
+      /* parser/parser_prod.nit:3514 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:3316 */
+      /* parser/parser_prod.nit:3515 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3316);
+        nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3515);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -18305,7 +19435,7 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:3317 */
+        /* parser/parser_prod.nit:3516 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -18320,37 +19450,37 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:3318 */
+          /* parser/parser_prod.nit:3517 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3318);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3517);
           }
-          /* parser/parser_prod.nit:3319 */
+          /* parser/parser_prod.nit:3518 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3319);
+            nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3518);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:3320 */
+          /* parser/parser_prod.nit:3519 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3320);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3519);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:3322 */
+          /* parser/parser_prod.nit:3521 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3322);
+            nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3521);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:3324 */
+        /* parser/parser_prod.nit:3523 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -18365,6 +19495,57 @@ void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   label2: while(0);
+  /* parser/parser_prod.nit:3526 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3527 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:3528 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3528);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3529 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3529);
+      }
+      /* parser/parser_prod.nit:3530 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:3532 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:3534 */
+    goto label1;
+  }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
@@ -18377,7 +19558,7 @@ void parser___parser_prod___AType___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3329;
+  fra.me.line = 3538;
   fra.me.meth = LOCATE_parser___parser_prod___AType___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18388,9 +19569,9 @@ void parser___parser_prod___AType___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3329 */
+  /* parser/parser_prod.nit:3538 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3331 */
+  /* parser/parser_prod.nit:3540 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -18406,31 +19587,56 @@ void parser___parser_prod___AType___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3332 */
+    /* parser/parser_prod.nit:3541 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_kwnullable(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast TKwnullable*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3332);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3541);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3334 */
+  /* parser/parser_prod.nit:3543 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3334);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3543);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_id(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:3335 */
+  /* parser/parser_prod.nit:3544 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3335);
+    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser___parser_prod, 3544);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AType___visit_all_1));
+  /* parser/parser_prod.nit:3547 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3548 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3548);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AType____n_types(fra.me.REG[2]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AType___visit_all_1));
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -18450,7 +19656,7 @@ void parser___parser_prod___AType___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:3336 */
+    /* parser/parser_prod.nit:3545 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -18463,7 +19669,7 @@ void parser___parser_prod___ALabel___empty_init(val_t p0, int* init_table){
   if (init_table[itpos105]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3341;
+  fra.me.line = 3553;
   fra.me.meth = LOCATE_parser___parser_prod___ALabel___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -18483,7 +19689,7 @@ void parser___parser_prod___ALabel___init_alabel(val_t p0, val_t p1, val_t p2, i
   if (init_table[itpos106]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3343;
+  fra.me.line = 3555;
   fra.me.meth = LOCATE_parser___parser_prod___ALabel___init_alabel;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18495,34 +19701,34 @@ void parser___parser_prod___ALabel___init_alabel(val_t p0, val_t p1, val_t p2, i
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3343 */
+  /* parser/parser_prod.nit:3555 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3348 */
+  /* parser/parser_prod.nit:3560 */
   CALL_parser___parser_prod___ALabel___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:3349 */
+  /* parser/parser_prod.nit:3561 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3349);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3561);
   }
   ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3350 */
+  /* parser/parser_prod.nit:3562 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3350);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3562);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:3351 */
+  /* parser/parser_prod.nit:3563 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3351);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3563);
   }
   ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3352 */
+  /* parser/parser_prod.nit:3564 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3352);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3564);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -18537,7 +19743,7 @@ void parser___parser_prod___ALabel___replace_child(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___parser_prod;
-  fra.me.line = 3355;
+  fra.me.line = 3567;
   fra.me.meth = LOCATE_parser___parser_prod___ALabel___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18549,11 +19755,11 @@ void parser___parser_prod___ALabel___replace_child(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_prod.nit:3357 */
+  /* parser/parser_prod.nit:3569 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwlabel", LOCATE_parser___parser_prod, 3357);
+    nit_abort("Uninitialized attribute %s", "_n_kwlabel", LOCATE_parser___parser_prod, 3569);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -18563,7 +19769,7 @@ void parser___parser_prod___ALabel___replace_child(val_t p0, val_t p1, val_t p2)
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3358 */
+    /* parser/parser_prod.nit:3570 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18578,32 +19784,32 @@ void parser___parser_prod___ALabel___replace_child(val_t p0, val_t p1, val_t p2)
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3359 */
+      /* parser/parser_prod.nit:3571 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3359);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3571);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3360 */
+      /* parser/parser_prod.nit:3572 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwlabel, ID_parser___parser_nodes___TKwlabel)) /*cast TKwlabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3360);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3572);
       }
-      /* parser/parser_prod.nit:3361 */
+      /* parser/parser_prod.nit:3573 */
       ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3363 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3363);
+      /* parser/parser_prod.nit:3575 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3575);
     }
-    /* parser/parser_prod.nit:3365 */
+    /* parser/parser_prod.nit:3577 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3367 */
+  /* parser/parser_prod.nit:3579 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3367);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3579);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -18613,7 +19819,7 @@ void parser___parser_prod___ALabel___replace_child(val_t p0, val_t p1, val_t p2)
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3368 */
+    /* parser/parser_prod.nit:3580 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18628,25 +19834,25 @@ void parser___parser_prod___ALabel___replace_child(val_t p0, val_t p1, val_t p2)
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3369 */
+      /* parser/parser_prod.nit:3581 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3369);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3581);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3370 */
+      /* parser/parser_prod.nit:3582 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3370);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3582);
       }
-      /* parser/parser_prod.nit:3371 */
+      /* parser/parser_prod.nit:3583 */
       ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3373 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3373);
+      /* parser/parser_prod.nit:3585 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3585);
     }
-    /* parser/parser_prod.nit:3375 */
+    /* parser/parser_prod.nit:3587 */
     goto label1;
   }
   label1: while(0);
@@ -18660,7 +19866,7 @@ void parser___parser_prod___ALabel___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3379;
+  fra.me.line = 3591;
   fra.me.meth = LOCATE_parser___parser_prod___ALabel___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -18670,19 +19876,19 @@ void parser___parser_prod___ALabel___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3381 */
+  /* parser/parser_prod.nit:3593 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwlabel", LOCATE_parser___parser_prod, 3381);
+    nit_abort("Uninitialized attribute %s", "_n_kwlabel", LOCATE_parser___parser_prod, 3593);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:3382 */
+  /* parser/parser_prod.nit:3594 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3382);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3594);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALabel____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -18697,7 +19903,7 @@ void parser___parser_prod___ABlockExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos107]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3386;
+  fra.me.line = 3598;
   fra.me.meth = LOCATE_parser___parser_prod___ABlockExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -18718,7 +19924,7 @@ void parser___parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, val
   if (init_table[itpos108]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3388;
+  fra.me.line = 3600;
   fra.me.meth = LOCATE_parser___parser_prod___ABlockExpr___init_ablockexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -18729,12 +19935,12 @@ void parser___parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3393 */
+  /* parser/parser_prod.nit:3605 */
   CALL_parser___parser_prod___ABlockExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABlockExpr___init_ablockexpr_1));
-  /* parser/parser_prod.nit:3399 */
+  /* parser/parser_prod.nit:3611 */
   ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[0]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3400 */
+  /* parser/parser_prod.nit:3612 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -18749,10 +19955,10 @@ void parser___parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3401 */
+    /* parser/parser_prod.nit:3613 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3401);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3613);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
@@ -18765,7 +19971,7 @@ void parser___parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, val
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:3394 */
+    /* parser/parser_prod.nit:3606 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -18779,21 +19985,21 @@ void parser___parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, val
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:3395 */
+    /* parser/parser_prod.nit:3607 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3395);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3607);
     }
-    /* parser/parser_prod.nit:3396 */
+    /* parser/parser_prod.nit:3608 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABlockExpr____n_expr(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3396);
+      nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3608);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:3397 */
+    /* parser/parser_prod.nit:3609 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -18809,7 +20015,7 @@ void parser___parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3405;
+  fra.me.line = 3617;
   fra.me.meth = LOCATE_parser___parser_prod___ABlockExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18821,12 +20027,12 @@ void parser___parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3407 */
+  /* parser/parser_prod.nit:3619 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3407);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3619);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -18841,13 +20047,13 @@ void parser___parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:3407 */
+      /* parser/parser_prod.nit:3619 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:3408 */
+      /* parser/parser_prod.nit:3620 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3408);
+        nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3620);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -18864,7 +20070,7 @@ void parser___parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:3409 */
+        /* parser/parser_prod.nit:3621 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -18879,37 +20085,37 @@ void parser___parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:3410 */
+          /* parser/parser_prod.nit:3622 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3410);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3622);
           }
-          /* parser/parser_prod.nit:3411 */
+          /* parser/parser_prod.nit:3623 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3411);
+            nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3623);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:3412 */
+          /* parser/parser_prod.nit:3624 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3412);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3624);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:3414 */
+          /* parser/parser_prod.nit:3626 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3414);
+            nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3626);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:3416 */
+        /* parser/parser_prod.nit:3628 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -18924,7 +20130,7 @@ void parser___parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:3419 */
+  /* parser/parser_prod.nit:3631 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -18939,7 +20145,7 @@ void parser___parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3420 */
+    /* parser/parser_prod.nit:3632 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18954,25 +20160,25 @@ void parser___parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3421 */
+      /* parser/parser_prod.nit:3633 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3421);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3633);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3422 */
+      /* parser/parser_prod.nit:3634 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast TKwend*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3422);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3634);
       }
-      /* parser/parser_prod.nit:3423 */
+      /* parser/parser_prod.nit:3635 */
       ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3425 */
+      /* parser/parser_prod.nit:3637 */
       ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3427 */
+    /* parser/parser_prod.nit:3639 */
     goto label1;
   }
   label1: while(0);
@@ -18987,7 +20193,7 @@ void parser___parser_prod___ABlockExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3431;
+  fra.me.line = 3643;
   fra.me.meth = LOCATE_parser___parser_prod___ABlockExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18998,17 +20204,17 @@ void parser___parser_prod___ABlockExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3431 */
+  /* parser/parser_prod.nit:3643 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3433 */
+  /* parser/parser_prod.nit:3645 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3433);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3645);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_expr(fra.me.REG[2]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABlockExpr___visit_all_1));
-  /* parser/parser_prod.nit:3436 */
+  /* parser/parser_prod.nit:3648 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -19024,12 +20230,12 @@ void parser___parser_prod___ABlockExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3437 */
+    /* parser/parser_prod.nit:3649 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___ABlockExpr____n_kwend(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast TKwend*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3437);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3649);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -19052,7 +20258,7 @@ void parser___parser_prod___ABlockExpr___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:3434 */
+    /* parser/parser_prod.nit:3646 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -19065,7 +20271,7 @@ void parser___parser_prod___AVardeclExpr___empty_init(val_t p0, int* init_table)
   if (init_table[itpos109]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3442;
+  fra.me.line = 3654;
   fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -19077,19 +20283,19 @@ void parser___parser_prod___AVardeclExpr___empty_init(val_t p0, int* init_table)
   return;
 }
 static const char LOCATE_parser___parser_prod___AVardeclExpr___init_avardeclexpr[] = "parser_prod::AVardeclExpr::init_avardeclexpr";
-void parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
+void parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
   int itpos110 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AVardeclExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   if (init_table[itpos110]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3444;
+  fra.me.line = 3656;
   fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___init_avardeclexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -19098,45 +20304,47 @@ void parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1,
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:3444 */
-  fra.me.REG[6] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3452 */
-  CALL_parser___parser_prod___AVardeclExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
-  /* parser/parser_prod.nit:3453 */
+  fra.me.REG[6] = p6;
+  /* parser/parser_prod.nit:3656 */
+  fra.me.REG[7] = fra.me.REG[0];
+  /* parser/parser_prod.nit:3665 */
+  CALL_parser___parser_prod___AVardeclExpr___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
+  /* parser/parser_prod.nit:3666 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3453);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3666);
   }
-  ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[6]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3454 */
+  ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[7]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:3667 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3454);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3667);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-  /* parser/parser_prod.nit:3455 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
+  /* parser/parser_prod.nit:3668 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3455);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3668);
   }
-  ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[6]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3456 */
+  ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[7]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:3669 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3456);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3669);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
-  /* parser/parser_prod.nit:3457 */
-  ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[6]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:3458 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
+  /* parser/parser_prod.nit:3670 */
+  ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[7]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:3671 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -19151,16 +20359,16 @@ void parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3459 */
+    /* parser/parser_prod.nit:3672 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3459);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3672);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
   }
-  /* parser/parser_prod.nit:3461 */
-  ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[6]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:3462 */
+  /* parser/parser_prod.nit:3674 */
+  ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[7]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:3675 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -19175,16 +20383,16 @@ void parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3463 */
+    /* parser/parser_prod.nit:3676 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3463);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3676);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
   }
-  /* parser/parser_prod.nit:3465 */
-  ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[6]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:3466 */
+  /* parser/parser_prod.nit:3678 */
+  ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[7]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:3679 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -19199,12 +20407,36 @@ void parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3467 */
+    /* parser/parser_prod.nit:3680 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3467);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3680);
     }
-    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
+  }
+  /* parser/parser_prod.nit:3682 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[7]) = fra.me.REG[6];
+  /* parser/parser_prod.nit:3683 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3684 */
+    REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3684);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
   stack_frame_head = fra.me.prev;
   init_table[itpos110] = 1;
@@ -19218,7 +20450,7 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3471;
+  fra.me.line = 3688;
   fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -19230,11 +20462,11 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3473 */
+  /* parser/parser_prod.nit:3690 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 3473);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 3690);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -19244,7 +20476,7 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3474 */
+    /* parser/parser_prod.nit:3691 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19259,32 +20491,32 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3475 */
+      /* parser/parser_prod.nit:3692 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3475);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3692);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3476 */
+      /* parser/parser_prod.nit:3693 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast TKwvar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3476);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3693);
       }
-      /* parser/parser_prod.nit:3477 */
+      /* parser/parser_prod.nit:3694 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3479 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3479);
+      /* parser/parser_prod.nit:3696 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3696);
     }
-    /* parser/parser_prod.nit:3481 */
+    /* parser/parser_prod.nit:3698 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3483 */
+  /* parser/parser_prod.nit:3700 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3483);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3700);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -19294,7 +20526,7 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3484 */
+    /* parser/parser_prod.nit:3701 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19309,28 +20541,28 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3485 */
+      /* parser/parser_prod.nit:3702 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3485);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3702);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3486 */
+      /* parser/parser_prod.nit:3703 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3486);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3703);
       }
-      /* parser/parser_prod.nit:3487 */
+      /* parser/parser_prod.nit:3704 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3489 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3489);
+      /* parser/parser_prod.nit:3706 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3706);
     }
-    /* parser/parser_prod.nit:3491 */
+    /* parser/parser_prod.nit:3708 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3493 */
+  /* parser/parser_prod.nit:3710 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -19345,7 +20577,7 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3494 */
+    /* parser/parser_prod.nit:3711 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19360,28 +20592,28 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3495 */
+      /* parser/parser_prod.nit:3712 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3495);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3712);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3496 */
+      /* parser/parser_prod.nit:3713 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3496);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3713);
       }
-      /* parser/parser_prod.nit:3497 */
+      /* parser/parser_prod.nit:3714 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3499 */
+      /* parser/parser_prod.nit:3716 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3501 */
+    /* parser/parser_prod.nit:3718 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3503 */
+  /* parser/parser_prod.nit:3720 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -19396,7 +20628,7 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3504 */
+    /* parser/parser_prod.nit:3721 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19411,28 +20643,28 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3505 */
+      /* parser/parser_prod.nit:3722 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3505);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3722);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3506 */
+      /* parser/parser_prod.nit:3723 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3506);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3723);
       }
-      /* parser/parser_prod.nit:3507 */
+      /* parser/parser_prod.nit:3724 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3509 */
+      /* parser/parser_prod.nit:3726 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3511 */
+    /* parser/parser_prod.nit:3728 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3513 */
+  /* parser/parser_prod.nit:3730 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -19447,7 +20679,7 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3514 */
+    /* parser/parser_prod.nit:3731 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19462,25 +20694,76 @@ void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3515 */
+      /* parser/parser_prod.nit:3732 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3515);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3732);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3516 */
+      /* parser/parser_prod.nit:3733 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3516);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3733);
       }
-      /* parser/parser_prod.nit:3517 */
+      /* parser/parser_prod.nit:3734 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3519 */
+      /* parser/parser_prod.nit:3736 */
       ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3521 */
+    /* parser/parser_prod.nit:3738 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:3740 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3741 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:3742 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3742);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:3743 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3743);
+      }
+      /* parser/parser_prod.nit:3744 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:3746 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:3748 */
     goto label1;
   }
   label1: while(0);
@@ -19495,7 +20778,7 @@ void parser___parser_prod___AVardeclExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3525;
+  fra.me.line = 3752;
   fra.me.meth = LOCATE_parser___parser_prod___AVardeclExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -19506,25 +20789,25 @@ void parser___parser_prod___AVardeclExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3525 */
+  /* parser/parser_prod.nit:3752 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3527 */
+  /* parser/parser_prod.nit:3754 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 3527);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser___parser_prod, 3754);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:3528 */
+  /* parser/parser_prod.nit:3755 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3528);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 3755);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_id(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:3529 */
+  /* parser/parser_prod.nit:3756 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -19540,16 +20823,16 @@ void parser___parser_prod___AVardeclExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3530 */
+    /* parser/parser_prod.nit:3757 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_type(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3530);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3757);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3532 */
+  /* parser/parser_prod.nit:3759 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -19565,16 +20848,16 @@ void parser___parser_prod___AVardeclExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3533 */
+    /* parser/parser_prod.nit:3760 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_assign(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3533);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3760);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3535 */
+  /* parser/parser_prod.nit:3762 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -19590,12 +20873,37 @@ void parser___parser_prod___AVardeclExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3536 */
-    fra.me.REG[2] = ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[2]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    /* parser/parser_prod.nit:3763 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AVardeclExpr____n_expr(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3763);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:3765 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:3766 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3536);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3766);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -19610,7 +20918,7 @@ void parser___parser_prod___AReturnExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos111]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3541;
+  fra.me.line = 3771;
   fra.me.meth = LOCATE_parser___parser_prod___AReturnExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -19631,7 +20939,7 @@ void parser___parser_prod___AReturnExpr___init_areturnexpr(val_t p0, val_t p1, v
   if (init_table[itpos112]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3543;
+  fra.me.line = 3773;
   fra.me.meth = LOCATE_parser___parser_prod___AReturnExpr___init_areturnexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -19642,11 +20950,11 @@ void parser___parser_prod___AReturnExpr___init_areturnexpr(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3548 */
+  /* parser/parser_prod.nit:3778 */
   CALL_parser___parser_prod___AReturnExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* parser/parser_prod.nit:3549 */
+  /* parser/parser_prod.nit:3779 */
   ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3550 */
+  /* parser/parser_prod.nit:3780 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -19661,16 +20969,16 @@ void parser___parser_prod___AReturnExpr___init_areturnexpr(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3551 */
+    /* parser/parser_prod.nit:3781 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3551);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3781);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* parser/parser_prod.nit:3553 */
+  /* parser/parser_prod.nit:3783 */
   ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3554 */
+  /* parser/parser_prod.nit:3784 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -19685,10 +20993,10 @@ void parser___parser_prod___AReturnExpr___init_areturnexpr(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3555 */
+    /* parser/parser_prod.nit:3785 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3555);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3785);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
@@ -19704,7 +21012,7 @@ void parser___parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3559;
+  fra.me.line = 3789;
   fra.me.meth = LOCATE_parser___parser_prod___AReturnExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -19716,7 +21024,7 @@ void parser___parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3561 */
+  /* parser/parser_prod.nit:3791 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -19731,7 +21039,7 @@ void parser___parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3562 */
+    /* parser/parser_prod.nit:3792 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19746,28 +21054,28 @@ void parser___parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3563 */
+      /* parser/parser_prod.nit:3793 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3563);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3793);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3564 */
+      /* parser/parser_prod.nit:3794 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwreturn, ID_parser___parser_nodes___TKwreturn)) /*cast TKwreturn*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3564);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3794);
       }
-      /* parser/parser_prod.nit:3565 */
+      /* parser/parser_prod.nit:3795 */
       ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3567 */
+      /* parser/parser_prod.nit:3797 */
       ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3569 */
+    /* parser/parser_prod.nit:3799 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3571 */
+  /* parser/parser_prod.nit:3801 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -19782,7 +21090,7 @@ void parser___parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3572 */
+    /* parser/parser_prod.nit:3802 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19797,25 +21105,25 @@ void parser___parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3573 */
+      /* parser/parser_prod.nit:3803 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3573);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3803);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3574 */
+      /* parser/parser_prod.nit:3804 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3574);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3804);
       }
-      /* parser/parser_prod.nit:3575 */
+      /* parser/parser_prod.nit:3805 */
       ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3577 */
+      /* parser/parser_prod.nit:3807 */
       ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3579 */
+    /* parser/parser_prod.nit:3809 */
     goto label1;
   }
   label1: while(0);
@@ -19830,7 +21138,7 @@ void parser___parser_prod___AReturnExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3583;
+  fra.me.line = 3813;
   fra.me.meth = LOCATE_parser___parser_prod___AReturnExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -19841,9 +21149,9 @@ void parser___parser_prod___AReturnExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3583 */
+  /* parser/parser_prod.nit:3813 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3585 */
+  /* parser/parser_prod.nit:3815 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -19859,16 +21167,16 @@ void parser___parser_prod___AReturnExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3586 */
+    /* parser/parser_prod.nit:3816 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreturn, ID_parser___parser_nodes___TKwreturn)) /*cast TKwreturn*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3586);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3816);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3588 */
+  /* parser/parser_prod.nit:3818 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -19884,12 +21192,12 @@ void parser___parser_prod___AReturnExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3589 */
+    /* parser/parser_prod.nit:3819 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___AReturnExpr____n_expr(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3589);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3819);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -19904,7 +21212,7 @@ void parser___parser_prod___ABreakExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos113]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3594;
+  fra.me.line = 3824;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -19925,7 +21233,7 @@ void parser___parser_prod___ABreakExpr___init_abreakexpr(val_t p0, val_t p1, val
   if (init_table[itpos114]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3596;
+  fra.me.line = 3826;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakExpr___init_abreakexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -19939,26 +21247,26 @@ void parser___parser_prod___ABreakExpr___init_abreakexpr(val_t p0, val_t p1, val
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:3596 */
+  /* parser/parser_prod.nit:3826 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3602 */
+  /* parser/parser_prod.nit:3832 */
   CALL_parser___parser_prod___ABreakExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:3603 */
+  /* parser/parser_prod.nit:3833 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3603);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3833);
   }
   ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3604 */
+  /* parser/parser_prod.nit:3834 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3604);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3834);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:3605 */
+  /* parser/parser_prod.nit:3835 */
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3606 */
+  /* parser/parser_prod.nit:3836 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -19973,16 +21281,16 @@ void parser___parser_prod___ABreakExpr___init_abreakexpr(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3607 */
+    /* parser/parser_prod.nit:3837 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3607);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3837);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* parser/parser_prod.nit:3609 */
+  /* parser/parser_prod.nit:3839 */
   ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:3610 */
+  /* parser/parser_prod.nit:3840 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -19997,10 +21305,10 @@ void parser___parser_prod___ABreakExpr___init_abreakexpr(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3611 */
+    /* parser/parser_prod.nit:3841 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3611);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3841);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   }
@@ -20016,7 +21324,7 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3615;
+  fra.me.line = 3845;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -20028,11 +21336,11 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3617 */
+  /* parser/parser_prod.nit:3847 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 3617);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 3847);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20042,7 +21350,7 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3618 */
+    /* parser/parser_prod.nit:3848 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20057,28 +21365,28 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3619 */
+      /* parser/parser_prod.nit:3849 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3619);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3849);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3620 */
+      /* parser/parser_prod.nit:3850 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast TKwbreak*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3620);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3850);
       }
-      /* parser/parser_prod.nit:3621 */
+      /* parser/parser_prod.nit:3851 */
       ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3623 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3623);
+      /* parser/parser_prod.nit:3853 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3853);
     }
-    /* parser/parser_prod.nit:3625 */
+    /* parser/parser_prod.nit:3855 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3627 */
+  /* parser/parser_prod.nit:3857 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -20093,7 +21401,7 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3628 */
+    /* parser/parser_prod.nit:3858 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20108,28 +21416,28 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3629 */
+      /* parser/parser_prod.nit:3859 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3629);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3859);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3630 */
+      /* parser/parser_prod.nit:3860 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3630);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3860);
       }
-      /* parser/parser_prod.nit:3631 */
+      /* parser/parser_prod.nit:3861 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3633 */
+      /* parser/parser_prod.nit:3863 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3635 */
+    /* parser/parser_prod.nit:3865 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3637 */
+  /* parser/parser_prod.nit:3867 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -20144,7 +21452,7 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3638 */
+    /* parser/parser_prod.nit:3868 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20159,25 +21467,25 @@ void parser___parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3639 */
+      /* parser/parser_prod.nit:3869 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3639);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3869);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3640 */
+      /* parser/parser_prod.nit:3870 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3640);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3870);
       }
-      /* parser/parser_prod.nit:3641 */
+      /* parser/parser_prod.nit:3871 */
       ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3643 */
+      /* parser/parser_prod.nit:3873 */
       ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3645 */
+    /* parser/parser_prod.nit:3875 */
     goto label1;
   }
   label1: while(0);
@@ -20192,7 +21500,7 @@ void parser___parser_prod___ABreakExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3649;
+  fra.me.line = 3879;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -20203,17 +21511,17 @@ void parser___parser_prod___ABreakExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3649 */
+  /* parser/parser_prod.nit:3879 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3651 */
+  /* parser/parser_prod.nit:3881 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 3651);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 3881);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:3652 */
+  /* parser/parser_prod.nit:3882 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -20229,16 +21537,16 @@ void parser___parser_prod___ABreakExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3653 */
+    /* parser/parser_prod.nit:3883 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3653);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3883);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3655 */
+  /* parser/parser_prod.nit:3885 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -20254,12 +21562,12 @@ void parser___parser_prod___ABreakExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3656 */
+    /* parser/parser_prod.nit:3886 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___ABreakExpr____n_expr(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3656);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3886);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -20274,7 +21582,7 @@ void parser___parser_prod___AAbortExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos115]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3661;
+  fra.me.line = 3891;
   fra.me.meth = LOCATE_parser___parser_prod___AAbortExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -20294,7 +21602,7 @@ void parser___parser_prod___AAbortExpr___init_aabortexpr(val_t p0, val_t p1, int
   if (init_table[itpos116]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3663;
+  fra.me.line = 3893;
   fra.me.meth = LOCATE_parser___parser_prod___AAbortExpr___init_aabortexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -20304,21 +21612,21 @@ void parser___parser_prod___AAbortExpr___init_aabortexpr(val_t p0, val_t p1, int
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3663 */
+  /* parser/parser_prod.nit:3893 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3667 */
+  /* parser/parser_prod.nit:3897 */
   CALL_parser___parser_prod___AAbortExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:3668 */
+  /* parser/parser_prod.nit:3898 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3668);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3898);
   }
   ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3669 */
+  /* parser/parser_prod.nit:3899 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3669);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3899);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -20333,7 +21641,7 @@ void parser___parser_prod___AAbortExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3672;
+  fra.me.line = 3902;
   fra.me.meth = LOCATE_parser___parser_prod___AAbortExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -20345,11 +21653,11 @@ void parser___parser_prod___AAbortExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3674 */
+  /* parser/parser_prod.nit:3904 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwabort", LOCATE_parser___parser_prod, 3674);
+    nit_abort("Uninitialized attribute %s", "_n_kwabort", LOCATE_parser___parser_prod, 3904);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20359,7 +21667,7 @@ void parser___parser_prod___AAbortExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3675 */
+    /* parser/parser_prod.nit:3905 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20374,25 +21682,25 @@ void parser___parser_prod___AAbortExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3676 */
+      /* parser/parser_prod.nit:3906 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3676);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3906);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3677 */
+      /* parser/parser_prod.nit:3907 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwabort, ID_parser___parser_nodes___TKwabort)) /*cast TKwabort*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3677);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3907);
       }
-      /* parser/parser_prod.nit:3678 */
+      /* parser/parser_prod.nit:3908 */
       ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3680 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3680);
+      /* parser/parser_prod.nit:3910 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3910);
     }
-    /* parser/parser_prod.nit:3682 */
+    /* parser/parser_prod.nit:3912 */
     goto label1;
   }
   label1: while(0);
@@ -20406,7 +21714,7 @@ void parser___parser_prod___AAbortExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3686;
+  fra.me.line = 3916;
   fra.me.meth = LOCATE_parser___parser_prod___AAbortExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -20415,11 +21723,11 @@ void parser___parser_prod___AAbortExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3688 */
+  /* parser/parser_prod.nit:3918 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwabort", LOCATE_parser___parser_prod, 3688);
+    nit_abort("Uninitialized attribute %s", "_n_kwabort", LOCATE_parser___parser_prod, 3918);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -20434,7 +21742,7 @@ void parser___parser_prod___AContinueExpr___empty_init(val_t p0, int* init_table
   if (init_table[itpos117]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3692;
+  fra.me.line = 3922;
   fra.me.meth = LOCATE_parser___parser_prod___AContinueExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -20455,7 +21763,7 @@ void parser___parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p
   if (init_table[itpos118]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3694;
+  fra.me.line = 3924;
   fra.me.meth = LOCATE_parser___parser_prod___AContinueExpr___init_acontinueexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -20468,11 +21776,11 @@ void parser___parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:3700 */
+  /* parser/parser_prod.nit:3930 */
   CALL_parser___parser_prod___AContinueExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* parser/parser_prod.nit:3701 */
+  /* parser/parser_prod.nit:3931 */
   ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3702 */
+  /* parser/parser_prod.nit:3932 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20487,16 +21795,16 @@ void parser___parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3703 */
+    /* parser/parser_prod.nit:3933 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3703);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3933);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* parser/parser_prod.nit:3705 */
+  /* parser/parser_prod.nit:3935 */
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3706 */
+  /* parser/parser_prod.nit:3936 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20511,16 +21819,16 @@ void parser___parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3707 */
+    /* parser/parser_prod.nit:3937 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3707);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3937);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  /* parser/parser_prod.nit:3709 */
+  /* parser/parser_prod.nit:3939 */
   ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:3710 */
+  /* parser/parser_prod.nit:3940 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20535,10 +21843,10 @@ void parser___parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3711 */
+    /* parser/parser_prod.nit:3941 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3711);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3941);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   }
@@ -20554,7 +21862,7 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3715;
+  fra.me.line = 3945;
   fra.me.meth = LOCATE_parser___parser_prod___AContinueExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -20566,7 +21874,7 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3717 */
+  /* parser/parser_prod.nit:3947 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -20581,7 +21889,7 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3718 */
+    /* parser/parser_prod.nit:3948 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20596,28 +21904,28 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3719 */
+      /* parser/parser_prod.nit:3949 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3719);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3949);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3720 */
+      /* parser/parser_prod.nit:3950 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast TKwcontinue*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3720);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3950);
       }
-      /* parser/parser_prod.nit:3721 */
+      /* parser/parser_prod.nit:3951 */
       ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3723 */
+      /* parser/parser_prod.nit:3953 */
       ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3725 */
+    /* parser/parser_prod.nit:3955 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3727 */
+  /* parser/parser_prod.nit:3957 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -20632,7 +21940,7 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3728 */
+    /* parser/parser_prod.nit:3958 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20647,28 +21955,28 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3729 */
+      /* parser/parser_prod.nit:3959 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3729);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3959);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3730 */
+      /* parser/parser_prod.nit:3960 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3730);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3960);
       }
-      /* parser/parser_prod.nit:3731 */
+      /* parser/parser_prod.nit:3961 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3733 */
+      /* parser/parser_prod.nit:3963 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3735 */
+    /* parser/parser_prod.nit:3965 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3737 */
+  /* parser/parser_prod.nit:3967 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -20683,7 +21991,7 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3738 */
+    /* parser/parser_prod.nit:3968 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20698,25 +22006,25 @@ void parser___parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3739 */
+      /* parser/parser_prod.nit:3969 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3739);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3969);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3740 */
+      /* parser/parser_prod.nit:3970 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3740);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3970);
       }
-      /* parser/parser_prod.nit:3741 */
+      /* parser/parser_prod.nit:3971 */
       ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3743 */
+      /* parser/parser_prod.nit:3973 */
       ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3745 */
+    /* parser/parser_prod.nit:3975 */
     goto label1;
   }
   label1: while(0);
@@ -20731,7 +22039,7 @@ void parser___parser_prod___AContinueExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3749;
+  fra.me.line = 3979;
   fra.me.meth = LOCATE_parser___parser_prod___AContinueExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -20742,9 +22050,9 @@ void parser___parser_prod___AContinueExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3749 */
+  /* parser/parser_prod.nit:3979 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3751 */
+  /* parser/parser_prod.nit:3981 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -20760,16 +22068,16 @@ void parser___parser_prod___AContinueExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3752 */
+    /* parser/parser_prod.nit:3982 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast TKwcontinue*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3752);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3982);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3754 */
+  /* parser/parser_prod.nit:3984 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -20785,16 +22093,16 @@ void parser___parser_prod___AContinueExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3755 */
+    /* parser/parser_prod.nit:3985 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3755);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3985);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3757 */
+  /* parser/parser_prod.nit:3987 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -20810,12 +22118,12 @@ void parser___parser_prod___AContinueExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3758 */
+    /* parser/parser_prod.nit:3988 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___AContinueExpr____n_expr(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3758);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3988);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -20830,7 +22138,7 @@ void parser___parser_prod___ADoExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos119]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3763;
+  fra.me.line = 3993;
   fra.me.meth = LOCATE_parser___parser_prod___ADoExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -20851,7 +22159,7 @@ void parser___parser_prod___ADoExpr___init_adoexpr(val_t p0, val_t p1, val_t p2,
   if (init_table[itpos120]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3765;
+  fra.me.line = 3995;
   fra.me.meth = LOCATE_parser___parser_prod___ADoExpr___init_adoexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -20865,26 +22173,26 @@ void parser___parser_prod___ADoExpr___init_adoexpr(val_t p0, val_t p1, val_t p2,
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:3765 */
+  /* parser/parser_prod.nit:3995 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3771 */
+  /* parser/parser_prod.nit:4001 */
   CALL_parser___parser_prod___ADoExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:3772 */
+  /* parser/parser_prod.nit:4002 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3772);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4002);
   }
   ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3773 */
+  /* parser/parser_prod.nit:4003 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3773);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4003);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:3774 */
+  /* parser/parser_prod.nit:4004 */
   ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3775 */
+  /* parser/parser_prod.nit:4005 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20899,16 +22207,16 @@ void parser___parser_prod___ADoExpr___init_adoexpr(val_t p0, val_t p1, val_t p2,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3776 */
+    /* parser/parser_prod.nit:4006 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3776);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4006);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* parser/parser_prod.nit:3778 */
+  /* parser/parser_prod.nit:4008 */
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:3779 */
+  /* parser/parser_prod.nit:4009 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20923,10 +22231,10 @@ void parser___parser_prod___ADoExpr___init_adoexpr(val_t p0, val_t p1, val_t p2,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3780 */
+    /* parser/parser_prod.nit:4010 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3780);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4010);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   }
@@ -20942,7 +22250,7 @@ void parser___parser_prod___ADoExpr___replace_child(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___parser_prod;
-  fra.me.line = 3784;
+  fra.me.line = 4014;
   fra.me.meth = LOCATE_parser___parser_prod___ADoExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -20954,11 +22262,11 @@ void parser___parser_prod___ADoExpr___replace_child(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_prod.nit:3786 */
+  /* parser/parser_prod.nit:4016 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 3786);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 4016);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20968,7 +22276,7 @@ void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3787 */
+    /* parser/parser_prod.nit:4017 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20983,28 +22291,28 @@ void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3788 */
+      /* parser/parser_prod.nit:4018 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3788);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4018);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3789 */
+      /* parser/parser_prod.nit:4019 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast TKwdo*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3789);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4019);
       }
-      /* parser/parser_prod.nit:3790 */
+      /* parser/parser_prod.nit:4020 */
       ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3792 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3792);
+      /* parser/parser_prod.nit:4022 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4022);
     }
-    /* parser/parser_prod.nit:3794 */
+    /* parser/parser_prod.nit:4024 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3796 */
+  /* parser/parser_prod.nit:4026 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -21019,7 +22327,7 @@ void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3797 */
+    /* parser/parser_prod.nit:4027 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21034,28 +22342,28 @@ void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3798 */
+      /* parser/parser_prod.nit:4028 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3798);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4028);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3799 */
+      /* parser/parser_prod.nit:4029 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3799);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4029);
       }
-      /* parser/parser_prod.nit:3800 */
+      /* parser/parser_prod.nit:4030 */
       ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3802 */
+      /* parser/parser_prod.nit:4032 */
       ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3804 */
+    /* parser/parser_prod.nit:4034 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3806 */
+  /* parser/parser_prod.nit:4036 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -21070,7 +22378,7 @@ void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3807 */
+    /* parser/parser_prod.nit:4037 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21085,25 +22393,25 @@ void parser___parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3808 */
+      /* parser/parser_prod.nit:4038 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3808);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4038);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3809 */
+      /* parser/parser_prod.nit:4039 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3809);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4039);
       }
-      /* parser/parser_prod.nit:3810 */
+      /* parser/parser_prod.nit:4040 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3812 */
+      /* parser/parser_prod.nit:4042 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3814 */
+    /* parser/parser_prod.nit:4044 */
     goto label1;
   }
   label1: while(0);
@@ -21118,7 +22426,7 @@ void parser___parser_prod___ADoExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3818;
+  fra.me.line = 4048;
   fra.me.meth = LOCATE_parser___parser_prod___ADoExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21129,17 +22437,17 @@ void parser___parser_prod___ADoExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3818 */
+  /* parser/parser_prod.nit:4048 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3820 */
+  /* parser/parser_prod.nit:4050 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 3820);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 4050);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ADoExpr____n_kwdo(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:3821 */
+  /* parser/parser_prod.nit:4051 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -21155,16 +22463,16 @@ void parser___parser_prod___ADoExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3822 */
+    /* parser/parser_prod.nit:4052 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___ADoExpr____n_block(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3822);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4052);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3824 */
+  /* parser/parser_prod.nit:4054 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -21180,12 +22488,12 @@ void parser___parser_prod___ADoExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3825 */
+    /* parser/parser_prod.nit:4055 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3825);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4055);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -21200,7 +22508,7 @@ void parser___parser_prod___AIfExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos121]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3830;
+  fra.me.line = 4060;
   fra.me.meth = LOCATE_parser___parser_prod___AIfExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -21221,7 +22529,7 @@ void parser___parser_prod___AIfExpr___init_aifexpr(val_t p0, val_t p1, val_t p2,
   if (init_table[itpos122]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3832;
+  fra.me.line = 4062;
   fra.me.meth = LOCATE_parser___parser_prod___AIfExpr___init_aifexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -21237,39 +22545,39 @@ void parser___parser_prod___AIfExpr___init_aifexpr(val_t p0, val_t p1, val_t p2,
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:3832 */
+  /* parser/parser_prod.nit:4062 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3839 */
+  /* parser/parser_prod.nit:4069 */
   CALL_parser___parser_prod___AIfExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:3840 */
+  /* parser/parser_prod.nit:4070 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3840);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4070);
   }
   ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3841 */
+  /* parser/parser_prod.nit:4071 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3841);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4071);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:3842 */
+  /* parser/parser_prod.nit:4072 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3842);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4072);
   }
   ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3843 */
+  /* parser/parser_prod.nit:4073 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3843);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4073);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:3844 */
+  /* parser/parser_prod.nit:4074 */
   ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:3845 */
+  /* parser/parser_prod.nit:4075 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -21284,16 +22592,16 @@ void parser___parser_prod___AIfExpr___init_aifexpr(val_t p0, val_t p1, val_t p2,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3846 */
+    /* parser/parser_prod.nit:4076 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3846);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4076);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
   }
-  /* parser/parser_prod.nit:3848 */
+  /* parser/parser_prod.nit:4078 */
   ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:3849 */
+  /* parser/parser_prod.nit:4079 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -21308,10 +22616,10 @@ void parser___parser_prod___AIfExpr___init_aifexpr(val_t p0, val_t p1, val_t p2,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3850 */
+    /* parser/parser_prod.nit:4080 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3850);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4080);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   }
@@ -21327,7 +22635,7 @@ void parser___parser_prod___AIfExpr___replace_child(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___parser_prod;
-  fra.me.line = 3854;
+  fra.me.line = 4084;
   fra.me.meth = LOCATE_parser___parser_prod___AIfExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21339,11 +22647,11 @@ void parser___parser_prod___AIfExpr___replace_child(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_prod.nit:3856 */
+  /* parser/parser_prod.nit:4086 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 3856);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 4086);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -21353,7 +22661,7 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3857 */
+    /* parser/parser_prod.nit:4087 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21368,32 +22676,32 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3858 */
+      /* parser/parser_prod.nit:4088 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3858);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4088);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3859 */
+      /* parser/parser_prod.nit:4089 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast TKwif*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3859);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4089);
       }
-      /* parser/parser_prod.nit:3860 */
+      /* parser/parser_prod.nit:4090 */
       ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3862 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3862);
+      /* parser/parser_prod.nit:4092 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4092);
     }
-    /* parser/parser_prod.nit:3864 */
+    /* parser/parser_prod.nit:4094 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3866 */
+  /* parser/parser_prod.nit:4096 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3866);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4096);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -21403,7 +22711,7 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3867 */
+    /* parser/parser_prod.nit:4097 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21418,28 +22726,28 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3868 */
+      /* parser/parser_prod.nit:4098 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3868);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4098);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3869 */
+      /* parser/parser_prod.nit:4099 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3869);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4099);
       }
-      /* parser/parser_prod.nit:3870 */
+      /* parser/parser_prod.nit:4100 */
       ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3872 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3872);
+      /* parser/parser_prod.nit:4102 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4102);
     }
-    /* parser/parser_prod.nit:3874 */
+    /* parser/parser_prod.nit:4104 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3876 */
+  /* parser/parser_prod.nit:4106 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -21454,7 +22762,7 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3877 */
+    /* parser/parser_prod.nit:4107 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21469,28 +22777,28 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3878 */
+      /* parser/parser_prod.nit:4108 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3878);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4108);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3879 */
+      /* parser/parser_prod.nit:4109 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3879);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4109);
       }
-      /* parser/parser_prod.nit:3880 */
+      /* parser/parser_prod.nit:4110 */
       ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3882 */
+      /* parser/parser_prod.nit:4112 */
       ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3884 */
+    /* parser/parser_prod.nit:4114 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3886 */
+  /* parser/parser_prod.nit:4116 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -21505,7 +22813,7 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3887 */
+    /* parser/parser_prod.nit:4117 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21520,25 +22828,25 @@ void parser___parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3888 */
+      /* parser/parser_prod.nit:4118 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3888);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4118);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3889 */
+      /* parser/parser_prod.nit:4119 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3889);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4119);
       }
-      /* parser/parser_prod.nit:3890 */
+      /* parser/parser_prod.nit:4120 */
       ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3892 */
+      /* parser/parser_prod.nit:4122 */
       ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:3894 */
+    /* parser/parser_prod.nit:4124 */
     goto label1;
   }
   label1: while(0);
@@ -21553,7 +22861,7 @@ void parser___parser_prod___AIfExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3898;
+  fra.me.line = 4128;
   fra.me.meth = LOCATE_parser___parser_prod___AIfExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21564,25 +22872,25 @@ void parser___parser_prod___AIfExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:3898 */
+  /* parser/parser_prod.nit:4128 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3900 */
+  /* parser/parser_prod.nit:4130 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 3900);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 4130);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_kwif(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:3901 */
+  /* parser/parser_prod.nit:4131 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3901);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4131);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_expr(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:3902 */
+  /* parser/parser_prod.nit:4132 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -21598,16 +22906,16 @@ void parser___parser_prod___AIfExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3903 */
+    /* parser/parser_prod.nit:4133 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_then(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3903);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4133);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:3905 */
+  /* parser/parser_prod.nit:4135 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -21623,12 +22931,12 @@ void parser___parser_prod___AIfExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3906 */
+    /* parser/parser_prod.nit:4136 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___AIfExpr____n_else(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3906);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4136);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -21643,7 +22951,7 @@ void parser___parser_prod___AIfexprExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos123]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3911;
+  fra.me.line = 4141;
   fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -21663,7 +22971,7 @@ void parser___parser_prod___AIfexprExpr___init_aifexprexpr(val_t p0, val_t p1, v
   if (init_table[itpos124]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3913;
+  fra.me.line = 4143;
   fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___init_aifexprexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -21683,86 +22991,86 @@ void parser___parser_prod___AIfexprExpr___init_aifexprexpr(val_t p0, val_t p1, v
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* parser/parser_prod.nit:3913 */
+  /* parser/parser_prod.nit:4143 */
   fra.me.REG[7] = fra.me.REG[0];
-  /* parser/parser_prod.nit:3922 */
+  /* parser/parser_prod.nit:4152 */
   CALL_parser___parser_prod___AIfexprExpr___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
-  /* parser/parser_prod.nit:3923 */
+  /* parser/parser_prod.nit:4153 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3923);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4153);
   }
   ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[7]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:3924 */
+  /* parser/parser_prod.nit:4154 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3924);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4154);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-  /* parser/parser_prod.nit:3925 */
+  /* parser/parser_prod.nit:4155 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3925);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4155);
   }
   ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[7]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:3926 */
+  /* parser/parser_prod.nit:4156 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3926);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4156);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
-  /* parser/parser_prod.nit:3927 */
+  /* parser/parser_prod.nit:4157 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3927);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4157);
   }
   ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[7]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:3928 */
+  /* parser/parser_prod.nit:4158 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3928);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4158);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
-  /* parser/parser_prod.nit:3929 */
+  /* parser/parser_prod.nit:4159 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3929);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4159);
   }
   ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[7]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:3930 */
+  /* parser/parser_prod.nit:4160 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3930);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4160);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
-  /* parser/parser_prod.nit:3931 */
+  /* parser/parser_prod.nit:4161 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3931);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4161);
   }
   ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[7]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:3932 */
+  /* parser/parser_prod.nit:4162 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3932);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4162);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
-  /* parser/parser_prod.nit:3933 */
+  /* parser/parser_prod.nit:4163 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 3933);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4163);
   }
   ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[7]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:3934 */
+  /* parser/parser_prod.nit:4164 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3934);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4164);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   stack_frame_head = fra.me.prev;
@@ -21777,7 +23085,7 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 3937;
+  fra.me.line = 4167;
   fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21789,11 +23097,11 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:3939 */
+  /* parser/parser_prod.nit:4169 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 3939);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 4169);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -21803,7 +23111,7 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3940 */
+    /* parser/parser_prod.nit:4170 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21818,32 +23126,32 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3941 */
+      /* parser/parser_prod.nit:4171 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3941);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4171);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3942 */
+      /* parser/parser_prod.nit:4172 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast TKwif*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3942);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4172);
       }
-      /* parser/parser_prod.nit:3943 */
+      /* parser/parser_prod.nit:4173 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3945 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3945);
+      /* parser/parser_prod.nit:4175 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4175);
     }
-    /* parser/parser_prod.nit:3947 */
+    /* parser/parser_prod.nit:4177 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3949 */
+  /* parser/parser_prod.nit:4179 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 3949);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4179);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -21853,7 +23161,7 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3950 */
+    /* parser/parser_prod.nit:4180 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21868,32 +23176,32 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3951 */
+      /* parser/parser_prod.nit:4181 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3951);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4181);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3952 */
+      /* parser/parser_prod.nit:4182 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3952);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4182);
       }
-      /* parser/parser_prod.nit:3953 */
+      /* parser/parser_prod.nit:4183 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3955 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3955);
+      /* parser/parser_prod.nit:4185 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4185);
     }
-    /* parser/parser_prod.nit:3957 */
+    /* parser/parser_prod.nit:4187 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3959 */
+  /* parser/parser_prod.nit:4189 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwthen", LOCATE_parser___parser_prod, 3959);
+    nit_abort("Uninitialized attribute %s", "_n_kwthen", LOCATE_parser___parser_prod, 4189);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -21903,7 +23211,7 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3960 */
+    /* parser/parser_prod.nit:4190 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21918,32 +23226,32 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3961 */
+      /* parser/parser_prod.nit:4191 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3961);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4191);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3962 */
+      /* parser/parser_prod.nit:4192 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwthen, ID_parser___parser_nodes___TKwthen)) /*cast TKwthen*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3962);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4192);
       }
-      /* parser/parser_prod.nit:3963 */
+      /* parser/parser_prod.nit:4193 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3965 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3965);
+      /* parser/parser_prod.nit:4195 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4195);
     }
-    /* parser/parser_prod.nit:3967 */
+    /* parser/parser_prod.nit:4197 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3969 */
+  /* parser/parser_prod.nit:4199 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_then", LOCATE_parser___parser_prod, 3969);
+    nit_abort("Uninitialized attribute %s", "_n_then", LOCATE_parser___parser_prod, 4199);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -21953,7 +23261,7 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3970 */
+    /* parser/parser_prod.nit:4200 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21968,32 +23276,32 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3971 */
+      /* parser/parser_prod.nit:4201 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3971);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4201);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3972 */
+      /* parser/parser_prod.nit:4202 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3972);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4202);
       }
-      /* parser/parser_prod.nit:3973 */
+      /* parser/parser_prod.nit:4203 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3975 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3975);
+      /* parser/parser_prod.nit:4205 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4205);
     }
-    /* parser/parser_prod.nit:3977 */
+    /* parser/parser_prod.nit:4207 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3979 */
+  /* parser/parser_prod.nit:4209 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwelse", LOCATE_parser___parser_prod, 3979);
+    nit_abort("Uninitialized attribute %s", "_n_kwelse", LOCATE_parser___parser_prod, 4209);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22003,7 +23311,7 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3980 */
+    /* parser/parser_prod.nit:4210 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22018,32 +23326,32 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3981 */
+      /* parser/parser_prod.nit:4211 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3981);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4211);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3982 */
+      /* parser/parser_prod.nit:4212 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwelse, ID_parser___parser_nodes___TKwelse)) /*cast TKwelse*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3982);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4212);
       }
-      /* parser/parser_prod.nit:3983 */
+      /* parser/parser_prod.nit:4213 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3985 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3985);
+      /* parser/parser_prod.nit:4215 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4215);
     }
-    /* parser/parser_prod.nit:3987 */
+    /* parser/parser_prod.nit:4217 */
     goto label1;
   }
-  /* parser/parser_prod.nit:3989 */
+  /* parser/parser_prod.nit:4219 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_else", LOCATE_parser___parser_prod, 3989);
+    nit_abort("Uninitialized attribute %s", "_n_else", LOCATE_parser___parser_prod, 4219);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22053,7 +23361,7 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:3990 */
+    /* parser/parser_prod.nit:4220 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22068,25 +23376,25 @@ void parser___parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:3991 */
+      /* parser/parser_prod.nit:4221 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 3991);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4221);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:3992 */
+      /* parser/parser_prod.nit:4222 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 3992);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4222);
       }
-      /* parser/parser_prod.nit:3993 */
+      /* parser/parser_prod.nit:4223 */
       ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:3995 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 3995);
+      /* parser/parser_prod.nit:4225 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4225);
     }
-    /* parser/parser_prod.nit:3997 */
+    /* parser/parser_prod.nit:4227 */
     goto label1;
   }
   label1: while(0);
@@ -22100,7 +23408,7 @@ void parser___parser_prod___AIfexprExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4001;
+  fra.me.line = 4231;
   fra.me.meth = LOCATE_parser___parser_prod___AIfexprExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -22110,51 +23418,51 @@ void parser___parser_prod___AIfexprExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4003 */
+  /* parser/parser_prod.nit:4233 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 4003);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser___parser_prod, 4233);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4004 */
+  /* parser/parser_prod.nit:4234 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4004);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4234);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4005 */
+  /* parser/parser_prod.nit:4235 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwthen", LOCATE_parser___parser_prod, 4005);
+    nit_abort("Uninitialized attribute %s", "_n_kwthen", LOCATE_parser___parser_prod, 4235);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4006 */
+  /* parser/parser_prod.nit:4236 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_then", LOCATE_parser___parser_prod, 4006);
+    nit_abort("Uninitialized attribute %s", "_n_then", LOCATE_parser___parser_prod, 4236);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4007 */
+  /* parser/parser_prod.nit:4237 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwelse", LOCATE_parser___parser_prod, 4007);
+    nit_abort("Uninitialized attribute %s", "_n_kwelse", LOCATE_parser___parser_prod, 4237);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4008 */
+  /* parser/parser_prod.nit:4238 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_else", LOCATE_parser___parser_prod, 4008);
+    nit_abort("Uninitialized attribute %s", "_n_else", LOCATE_parser___parser_prod, 4238);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -22169,7 +23477,7 @@ void parser___parser_prod___AWhileExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos125]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4012;
+  fra.me.line = 4242;
   fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -22190,7 +23498,7 @@ void parser___parser_prod___AWhileExpr___init_awhileexpr(val_t p0, val_t p1, val
   if (init_table[itpos126]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4014;
+  fra.me.line = 4244;
   fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___init_awhileexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -22208,52 +23516,52 @@ void parser___parser_prod___AWhileExpr___init_awhileexpr(val_t p0, val_t p1, val
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:4014 */
+  /* parser/parser_prod.nit:4244 */
   fra.me.REG[6] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4022 */
+  /* parser/parser_prod.nit:4252 */
   CALL_parser___parser_prod___AWhileExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
-  /* parser/parser_prod.nit:4023 */
+  /* parser/parser_prod.nit:4253 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4023);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4253);
   }
   ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[6]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4024 */
+  /* parser/parser_prod.nit:4254 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4024);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4254);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-  /* parser/parser_prod.nit:4025 */
+  /* parser/parser_prod.nit:4255 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4025);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4255);
   }
   ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[6]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4026 */
+  /* parser/parser_prod.nit:4256 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4026);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4256);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
-  /* parser/parser_prod.nit:4027 */
+  /* parser/parser_prod.nit:4257 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4027);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4257);
   }
   ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[6]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:4028 */
+  /* parser/parser_prod.nit:4258 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4028);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4258);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
-  /* parser/parser_prod.nit:4029 */
+  /* parser/parser_prod.nit:4259 */
   ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[6]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:4030 */
+  /* parser/parser_prod.nit:4260 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -22268,16 +23576,16 @@ void parser___parser_prod___AWhileExpr___init_awhileexpr(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4031 */
+    /* parser/parser_prod.nit:4261 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4031);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4261);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
   }
-  /* parser/parser_prod.nit:4033 */
+  /* parser/parser_prod.nit:4263 */
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[6]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:4034 */
+  /* parser/parser_prod.nit:4264 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -22292,10 +23600,10 @@ void parser___parser_prod___AWhileExpr___init_awhileexpr(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4035 */
+    /* parser/parser_prod.nit:4265 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4035);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4265);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   }
@@ -22311,7 +23619,7 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4039;
+  fra.me.line = 4269;
   fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22323,11 +23631,11 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:4041 */
+  /* parser/parser_prod.nit:4271 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwwhile", LOCATE_parser___parser_prod, 4041);
+    nit_abort("Uninitialized attribute %s", "_n_kwwhile", LOCATE_parser___parser_prod, 4271);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22337,7 +23645,7 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4042 */
+    /* parser/parser_prod.nit:4272 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22352,32 +23660,32 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4043 */
+      /* parser/parser_prod.nit:4273 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4043);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4273);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4044 */
+      /* parser/parser_prod.nit:4274 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwwhile, ID_parser___parser_nodes___TKwwhile)) /*cast TKwwhile*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4044);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4274);
       }
-      /* parser/parser_prod.nit:4045 */
+      /* parser/parser_prod.nit:4275 */
       ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4047 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4047);
+      /* parser/parser_prod.nit:4277 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4277);
     }
-    /* parser/parser_prod.nit:4049 */
+    /* parser/parser_prod.nit:4279 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4051 */
+  /* parser/parser_prod.nit:4281 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4051);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4281);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22387,7 +23695,7 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4052 */
+    /* parser/parser_prod.nit:4282 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22402,32 +23710,32 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4053 */
+      /* parser/parser_prod.nit:4283 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4053);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4283);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4054 */
+      /* parser/parser_prod.nit:4284 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4054);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4284);
       }
-      /* parser/parser_prod.nit:4055 */
+      /* parser/parser_prod.nit:4285 */
       ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4057 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4057);
+      /* parser/parser_prod.nit:4287 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4287);
     }
-    /* parser/parser_prod.nit:4059 */
+    /* parser/parser_prod.nit:4289 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4061 */
+  /* parser/parser_prod.nit:4291 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 4061);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 4291);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22437,7 +23745,7 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4062 */
+    /* parser/parser_prod.nit:4292 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22452,28 +23760,28 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4063 */
+      /* parser/parser_prod.nit:4293 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4063);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4293);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4064 */
+      /* parser/parser_prod.nit:4294 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast TKwdo*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4064);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4294);
       }
-      /* parser/parser_prod.nit:4065 */
+      /* parser/parser_prod.nit:4295 */
       ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4067 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4067);
+      /* parser/parser_prod.nit:4297 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4297);
     }
-    /* parser/parser_prod.nit:4069 */
+    /* parser/parser_prod.nit:4299 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4071 */
+  /* parser/parser_prod.nit:4301 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -22488,7 +23796,7 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4072 */
+    /* parser/parser_prod.nit:4302 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22503,28 +23811,28 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4073 */
+      /* parser/parser_prod.nit:4303 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4073);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4303);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4074 */
+      /* parser/parser_prod.nit:4304 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4074);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4304);
       }
-      /* parser/parser_prod.nit:4075 */
+      /* parser/parser_prod.nit:4305 */
       ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4077 */
+      /* parser/parser_prod.nit:4307 */
       ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4079 */
+    /* parser/parser_prod.nit:4309 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4081 */
+  /* parser/parser_prod.nit:4311 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -22539,7 +23847,7 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4082 */
+    /* parser/parser_prod.nit:4312 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22554,25 +23862,25 @@ void parser___parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4083 */
+      /* parser/parser_prod.nit:4313 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4083);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4313);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4084 */
+      /* parser/parser_prod.nit:4314 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4084);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4314);
       }
-      /* parser/parser_prod.nit:4085 */
+      /* parser/parser_prod.nit:4315 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4087 */
+      /* parser/parser_prod.nit:4317 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4089 */
+    /* parser/parser_prod.nit:4319 */
     goto label1;
   }
   label1: while(0);
@@ -22587,7 +23895,7 @@ void parser___parser_prod___AWhileExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4093;
+  fra.me.line = 4323;
   fra.me.meth = LOCATE_parser___parser_prod___AWhileExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22598,33 +23906,33 @@ void parser___parser_prod___AWhileExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4093 */
+  /* parser/parser_prod.nit:4323 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4095 */
+  /* parser/parser_prod.nit:4325 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwwhile", LOCATE_parser___parser_prod, 4095);
+    nit_abort("Uninitialized attribute %s", "_n_kwwhile", LOCATE_parser___parser_prod, 4325);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4096 */
+  /* parser/parser_prod.nit:4326 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4096);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4326);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_expr(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4097 */
+  /* parser/parser_prod.nit:4327 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 4097);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 4327);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4098 */
+  /* parser/parser_prod.nit:4328 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -22640,16 +23948,16 @@ void parser___parser_prod___AWhileExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4099 */
+    /* parser/parser_prod.nit:4329 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AWhileExpr____n_block(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4099);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4329);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:4101 */
+  /* parser/parser_prod.nit:4331 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -22665,12 +23973,12 @@ void parser___parser_prod___AWhileExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4102 */
+    /* parser/parser_prod.nit:4332 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4102);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4332);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -22685,7 +23993,7 @@ void parser___parser_prod___ALoopExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos127]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4107;
+  fra.me.line = 4337;
   fra.me.meth = LOCATE_parser___parser_prod___ALoopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -22706,7 +24014,7 @@ void parser___parser_prod___ALoopExpr___init_aloopexpr(val_t p0, val_t p1, val_t
   if (init_table[itpos128]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4109;
+  fra.me.line = 4339;
   fra.me.meth = LOCATE_parser___parser_prod___ALoopExpr___init_aloopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -22720,26 +24028,26 @@ void parser___parser_prod___ALoopExpr___init_aloopexpr(val_t p0, val_t p1, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:4109 */
+  /* parser/parser_prod.nit:4339 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4115 */
+  /* parser/parser_prod.nit:4345 */
   CALL_parser___parser_prod___ALoopExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:4116 */
+  /* parser/parser_prod.nit:4346 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4116);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4346);
   }
   ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4117 */
+  /* parser/parser_prod.nit:4347 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4117);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4347);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:4118 */
+  /* parser/parser_prod.nit:4348 */
   ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4119 */
+  /* parser/parser_prod.nit:4349 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -22754,16 +24062,16 @@ void parser___parser_prod___ALoopExpr___init_aloopexpr(val_t p0, val_t p1, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4120 */
+    /* parser/parser_prod.nit:4350 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4120);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4350);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* parser/parser_prod.nit:4122 */
+  /* parser/parser_prod.nit:4352 */
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:4123 */
+  /* parser/parser_prod.nit:4353 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -22778,10 +24086,10 @@ void parser___parser_prod___ALoopExpr___init_aloopexpr(val_t p0, val_t p1, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4124 */
+    /* parser/parser_prod.nit:4354 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4124);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4354);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   }
@@ -22797,7 +24105,7 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4128;
+  fra.me.line = 4358;
   fra.me.meth = LOCATE_parser___parser_prod___ALoopExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22809,11 +24117,11 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:4130 */
+  /* parser/parser_prod.nit:4360 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_parser___parser_prod, 4130);
+    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_parser___parser_prod, 4360);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22823,7 +24131,7 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4131 */
+    /* parser/parser_prod.nit:4361 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22838,28 +24146,28 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4132 */
+      /* parser/parser_prod.nit:4362 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4132);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4362);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4133 */
+      /* parser/parser_prod.nit:4363 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwloop, ID_parser___parser_nodes___TKwloop)) /*cast TKwloop*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4133);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4363);
       }
-      /* parser/parser_prod.nit:4134 */
+      /* parser/parser_prod.nit:4364 */
       ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4136 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4136);
+      /* parser/parser_prod.nit:4366 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4366);
     }
-    /* parser/parser_prod.nit:4138 */
+    /* parser/parser_prod.nit:4368 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4140 */
+  /* parser/parser_prod.nit:4370 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -22874,7 +24182,7 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4141 */
+    /* parser/parser_prod.nit:4371 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22889,28 +24197,28 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4142 */
+      /* parser/parser_prod.nit:4372 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4142);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4372);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4143 */
+      /* parser/parser_prod.nit:4373 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4143);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4373);
       }
-      /* parser/parser_prod.nit:4144 */
+      /* parser/parser_prod.nit:4374 */
       ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4146 */
+      /* parser/parser_prod.nit:4376 */
       ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4148 */
+    /* parser/parser_prod.nit:4378 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4150 */
+  /* parser/parser_prod.nit:4380 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -22925,7 +24233,7 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4151 */
+    /* parser/parser_prod.nit:4381 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22940,25 +24248,25 @@ void parser___parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4152 */
+      /* parser/parser_prod.nit:4382 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4152);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4382);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4153 */
+      /* parser/parser_prod.nit:4383 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4153);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4383);
       }
-      /* parser/parser_prod.nit:4154 */
+      /* parser/parser_prod.nit:4384 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4156 */
+      /* parser/parser_prod.nit:4386 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4158 */
+    /* parser/parser_prod.nit:4388 */
     goto label1;
   }
   label1: while(0);
@@ -22973,7 +24281,7 @@ void parser___parser_prod___ALoopExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4162;
+  fra.me.line = 4392;
   fra.me.meth = LOCATE_parser___parser_prod___ALoopExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22984,17 +24292,17 @@ void parser___parser_prod___ALoopExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4162 */
+  /* parser/parser_prod.nit:4392 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4164 */
+  /* parser/parser_prod.nit:4394 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_parser___parser_prod, 4164);
+    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_parser___parser_prod, 4394);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4165 */
+  /* parser/parser_prod.nit:4395 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -23010,16 +24318,16 @@ void parser___parser_prod___ALoopExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4166 */
+    /* parser/parser_prod.nit:4396 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___ALoopExpr____n_block(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4166);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4396);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:4168 */
+  /* parser/parser_prod.nit:4398 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -23035,12 +24343,12 @@ void parser___parser_prod___ALoopExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4169 */
+    /* parser/parser_prod.nit:4399 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4169);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4399);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -23055,7 +24363,7 @@ void parser___parser_prod___AForExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos129]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4174;
+  fra.me.line = 4404;
   fra.me.meth = LOCATE_parser___parser_prod___AForExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -23076,7 +24384,7 @@ void parser___parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p
   if (init_table[itpos130]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4176;
+  fra.me.line = 4406;
   fra.me.meth = LOCATE_parser___parser_prod___AForExpr___init_aforexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -23096,53 +24404,53 @@ void parser___parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* parser/parser_prod.nit:4176 */
+  /* parser/parser_prod.nit:4406 */
   fra.me.REG[7] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4185 */
+  /* parser/parser_prod.nit:4415 */
   CALL_parser___parser_prod___AForExpr___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
-  /* parser/parser_prod.nit:4186 */
+  /* parser/parser_prod.nit:4416 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4186);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4416);
   }
   ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[7]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4187 */
+  /* parser/parser_prod.nit:4417 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4187);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4417);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AForExpr___init_aforexpr_1));
-  /* parser/parser_prod.nit:4193 */
+  /* parser/parser_prod.nit:4423 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4193);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4423);
   }
   ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[7]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:4194 */
+  /* parser/parser_prod.nit:4424 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4194);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4424);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
-  /* parser/parser_prod.nit:4195 */
+  /* parser/parser_prod.nit:4425 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4195);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4425);
   }
   ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[7]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:4196 */
+  /* parser/parser_prod.nit:4426 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4196);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4426);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
-  /* parser/parser_prod.nit:4197 */
+  /* parser/parser_prod.nit:4427 */
   ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[7]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:4198 */
+  /* parser/parser_prod.nit:4428 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -23157,16 +24465,16 @@ void parser___parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4199 */
+    /* parser/parser_prod.nit:4429 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4199);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4429);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
   }
-  /* parser/parser_prod.nit:4201 */
+  /* parser/parser_prod.nit:4431 */
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[7]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:4202 */
+  /* parser/parser_prod.nit:4432 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -23181,10 +24489,10 @@ void parser___parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4203 */
+    /* parser/parser_prod.nit:4433 */
     REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4203);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4433);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
@@ -23197,7 +24505,7 @@ void parser___parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:4188 */
+    /* parser/parser_prod.nit:4418 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -23211,21 +24519,21 @@ void parser___parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:4189 */
+    /* parser/parser_prod.nit:4419 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4189);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4419);
     }
-    /* parser/parser_prod.nit:4190 */
+    /* parser/parser_prod.nit:4420 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_ids(closctx->REG[7])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4190);
+      nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4420);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AForExpr____n_ids(closctx->REG[7]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:4191 */
+    /* parser/parser_prod.nit:4421 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[7]);
     stack_frame_head = fra.me.prev;
     return;
@@ -23241,7 +24549,7 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4207;
+  fra.me.line = 4437;
   fra.me.meth = LOCATE_parser___parser_prod___AForExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -23253,11 +24561,11 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:4209 */
+  /* parser/parser_prod.nit:4439 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwfor", LOCATE_parser___parser_prod, 4209);
+    nit_abort("Uninitialized attribute %s", "_n_kwfor", LOCATE_parser___parser_prod, 4439);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23267,7 +24575,7 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4210 */
+    /* parser/parser_prod.nit:4440 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23282,33 +24590,33 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4211 */
+      /* parser/parser_prod.nit:4441 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4211);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4441);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4212 */
+      /* parser/parser_prod.nit:4442 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast TKwfor*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4212);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4442);
       }
-      /* parser/parser_prod.nit:4213 */
+      /* parser/parser_prod.nit:4443 */
       ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4215 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4215);
+      /* parser/parser_prod.nit:4445 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4445);
     }
-    /* parser/parser_prod.nit:4217 */
+    /* parser/parser_prod.nit:4447 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4219 */
+  /* parser/parser_prod.nit:4449 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4219);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4449);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -23323,13 +24631,13 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:4219 */
+      /* parser/parser_prod.nit:4449 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:4220 */
+      /* parser/parser_prod.nit:4450 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4220);
+        nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4450);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -23346,7 +24654,7 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:4221 */
+        /* parser/parser_prod.nit:4451 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -23361,37 +24669,37 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:4222 */
+          /* parser/parser_prod.nit:4452 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4222);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4452);
           }
-          /* parser/parser_prod.nit:4223 */
+          /* parser/parser_prod.nit:4453 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4223);
+            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4453);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:4224 */
+          /* parser/parser_prod.nit:4454 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4224);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4454);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:4226 */
+          /* parser/parser_prod.nit:4456 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4226);
+            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4456);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:4228 */
+        /* parser/parser_prod.nit:4458 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -23406,11 +24714,11 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:4231 */
+  /* parser/parser_prod.nit:4461 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4231);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4461);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23420,7 +24728,7 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4232 */
+    /* parser/parser_prod.nit:4462 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23435,32 +24743,32 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4233 */
+      /* parser/parser_prod.nit:4463 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4233);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4463);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4234 */
+      /* parser/parser_prod.nit:4464 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4234);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4464);
       }
-      /* parser/parser_prod.nit:4235 */
+      /* parser/parser_prod.nit:4465 */
       ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4237 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4237);
+      /* parser/parser_prod.nit:4467 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4467);
     }
-    /* parser/parser_prod.nit:4239 */
+    /* parser/parser_prod.nit:4469 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4241 */
+  /* parser/parser_prod.nit:4471 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 4241);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 4471);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23470,7 +24778,7 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4242 */
+    /* parser/parser_prod.nit:4472 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23485,28 +24793,28 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4243 */
+      /* parser/parser_prod.nit:4473 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4243);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4473);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4244 */
+      /* parser/parser_prod.nit:4474 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast TKwdo*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4244);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4474);
       }
-      /* parser/parser_prod.nit:4245 */
+      /* parser/parser_prod.nit:4475 */
       ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4247 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4247);
+      /* parser/parser_prod.nit:4477 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4477);
     }
-    /* parser/parser_prod.nit:4249 */
+    /* parser/parser_prod.nit:4479 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4251 */
+  /* parser/parser_prod.nit:4481 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -23521,7 +24829,7 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4252 */
+    /* parser/parser_prod.nit:4482 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23536,28 +24844,28 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4253 */
+      /* parser/parser_prod.nit:4483 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4253);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4483);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4254 */
+      /* parser/parser_prod.nit:4484 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4254);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4484);
       }
-      /* parser/parser_prod.nit:4255 */
+      /* parser/parser_prod.nit:4485 */
       ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4257 */
+      /* parser/parser_prod.nit:4487 */
       ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4259 */
+    /* parser/parser_prod.nit:4489 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4261 */
+  /* parser/parser_prod.nit:4491 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -23572,7 +24880,7 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4262 */
+    /* parser/parser_prod.nit:4492 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23587,25 +24895,25 @@ void parser___parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4263 */
+      /* parser/parser_prod.nit:4493 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4263);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4493);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4264 */
+      /* parser/parser_prod.nit:4494 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4264);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4494);
       }
-      /* parser/parser_prod.nit:4265 */
+      /* parser/parser_prod.nit:4495 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4267 */
+      /* parser/parser_prod.nit:4497 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4269 */
+    /* parser/parser_prod.nit:4499 */
     goto label1;
   }
   label1: while(0);
@@ -23620,7 +24928,7 @@ void parser___parser_prod___AForExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4273;
+  fra.me.line = 4503;
   fra.me.meth = LOCATE_parser___parser_prod___AForExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -23631,41 +24939,41 @@ void parser___parser_prod___AForExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4273 */
+  /* parser/parser_prod.nit:4503 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4275 */
+  /* parser/parser_prod.nit:4505 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwfor", LOCATE_parser___parser_prod, 4275);
+    nit_abort("Uninitialized attribute %s", "_n_kwfor", LOCATE_parser___parser_prod, 4505);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_kwfor(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4276 */
+  /* parser/parser_prod.nit:4506 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4276);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 4506);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_ids(fra.me.REG[2]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AForExpr___visit_all_1));
-  /* parser/parser_prod.nit:4279 */
+  /* parser/parser_prod.nit:4509 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4279);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4509);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_expr(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4280 */
+  /* parser/parser_prod.nit:4510 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 4280);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser___parser_prod, 4510);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_kwdo(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4281 */
+  /* parser/parser_prod.nit:4511 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -23681,16 +24989,16 @@ void parser___parser_prod___AForExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4282 */
+    /* parser/parser_prod.nit:4512 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AForExpr____n_block(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4282);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4512);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:4284 */
+  /* parser/parser_prod.nit:4514 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -23706,12 +25014,12 @@ void parser___parser_prod___AForExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4285 */
+    /* parser/parser_prod.nit:4515 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4285);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4515);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -23734,7 +25042,7 @@ void parser___parser_prod___AForExpr___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:4277 */
+    /* parser/parser_prod.nit:4507 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -23747,7 +25055,7 @@ void parser___parser_prod___AAssertExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos131]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4290;
+  fra.me.line = 4520;
   fra.me.meth = LOCATE_parser___parser_prod___AAssertExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -23768,7 +25076,7 @@ void parser___parser_prod___AAssertExpr___init_aassertexpr(val_t p0, val_t p1, v
   if (init_table[itpos132]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4292;
+  fra.me.line = 4522;
   fra.me.meth = LOCATE_parser___parser_prod___AAssertExpr___init_aassertexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -23784,26 +25092,26 @@ void parser___parser_prod___AAssertExpr___init_aassertexpr(val_t p0, val_t p1, v
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:4292 */
+  /* parser/parser_prod.nit:4522 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4299 */
+  /* parser/parser_prod.nit:4529 */
   CALL_parser___parser_prod___AAssertExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:4300 */
+  /* parser/parser_prod.nit:4530 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4300);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4530);
   }
   ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4301 */
+  /* parser/parser_prod.nit:4531 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4301);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4531);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:4302 */
+  /* parser/parser_prod.nit:4532 */
   ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4303 */
+  /* parser/parser_prod.nit:4533 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -23818,29 +25126,29 @@ void parser___parser_prod___AAssertExpr___init_aassertexpr(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4304 */
+    /* parser/parser_prod.nit:4534 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4304);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4534);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
   }
-  /* parser/parser_prod.nit:4306 */
+  /* parser/parser_prod.nit:4536 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4306);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4536);
   }
   ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:4307 */
+  /* parser/parser_prod.nit:4537 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4307);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4537);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:4308 */
+  /* parser/parser_prod.nit:4538 */
   ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:4309 */
+  /* parser/parser_prod.nit:4539 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -23855,10 +25163,10 @@ void parser___parser_prod___AAssertExpr___init_aassertexpr(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4310 */
+    /* parser/parser_prod.nit:4540 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4310);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4540);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   }
@@ -23874,7 +25182,7 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4314;
+  fra.me.line = 4544;
   fra.me.meth = LOCATE_parser___parser_prod___AAssertExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -23886,11 +25194,11 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:4316 */
+  /* parser/parser_prod.nit:4546 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwassert", LOCATE_parser___parser_prod, 4316);
+    nit_abort("Uninitialized attribute %s", "_n_kwassert", LOCATE_parser___parser_prod, 4546);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23900,7 +25208,7 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4317 */
+    /* parser/parser_prod.nit:4547 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23915,28 +25223,28 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4318 */
+      /* parser/parser_prod.nit:4548 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4318);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4548);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4319 */
+      /* parser/parser_prod.nit:4549 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast TKwassert*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4319);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4549);
       }
-      /* parser/parser_prod.nit:4320 */
+      /* parser/parser_prod.nit:4550 */
       ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4322 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4322);
+      /* parser/parser_prod.nit:4552 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4552);
     }
-    /* parser/parser_prod.nit:4324 */
+    /* parser/parser_prod.nit:4554 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4326 */
+  /* parser/parser_prod.nit:4556 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -23951,7 +25259,7 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4327 */
+    /* parser/parser_prod.nit:4557 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23966,32 +25274,32 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4328 */
+      /* parser/parser_prod.nit:4558 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4328);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4558);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4329 */
+      /* parser/parser_prod.nit:4559 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4329);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4559);
       }
-      /* parser/parser_prod.nit:4330 */
+      /* parser/parser_prod.nit:4560 */
       ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4332 */
+      /* parser/parser_prod.nit:4562 */
       ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4334 */
+    /* parser/parser_prod.nit:4564 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4336 */
+  /* parser/parser_prod.nit:4566 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4336);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4566);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24001,7 +25309,7 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4337 */
+    /* parser/parser_prod.nit:4567 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24016,28 +25324,28 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4338 */
+      /* parser/parser_prod.nit:4568 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4338);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4568);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4339 */
+      /* parser/parser_prod.nit:4569 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4339);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4569);
       }
-      /* parser/parser_prod.nit:4340 */
+      /* parser/parser_prod.nit:4570 */
       ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4342 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4342);
+      /* parser/parser_prod.nit:4572 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4572);
     }
-    /* parser/parser_prod.nit:4344 */
+    /* parser/parser_prod.nit:4574 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4346 */
+  /* parser/parser_prod.nit:4576 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -24052,7 +25360,7 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4347 */
+    /* parser/parser_prod.nit:4577 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24067,25 +25375,25 @@ void parser___parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4348 */
+      /* parser/parser_prod.nit:4578 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4348);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4578);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4349 */
+      /* parser/parser_prod.nit:4579 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4349);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4579);
       }
-      /* parser/parser_prod.nit:4350 */
+      /* parser/parser_prod.nit:4580 */
       ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4352 */
+      /* parser/parser_prod.nit:4582 */
       ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:4354 */
+    /* parser/parser_prod.nit:4584 */
     goto label1;
   }
   label1: while(0);
@@ -24100,7 +25408,7 @@ void parser___parser_prod___AAssertExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4358;
+  fra.me.line = 4588;
   fra.me.meth = LOCATE_parser___parser_prod___AAssertExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24111,17 +25419,17 @@ void parser___parser_prod___AAssertExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4358 */
+  /* parser/parser_prod.nit:4588 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4360 */
+  /* parser/parser_prod.nit:4590 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwassert", LOCATE_parser___parser_prod, 4360);
+    nit_abort("Uninitialized attribute %s", "_n_kwassert", LOCATE_parser___parser_prod, 4590);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4361 */
+  /* parser/parser_prod.nit:4591 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -24137,24 +25445,24 @@ void parser___parser_prod___AAssertExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4362 */
+    /* parser/parser_prod.nit:4592 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_id(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4362);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4592);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:4364 */
+  /* parser/parser_prod.nit:4594 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4364);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4594);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_expr(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4365 */
+  /* parser/parser_prod.nit:4595 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -24170,12 +25478,12 @@ void parser___parser_prod___AAssertExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4366 */
+    /* parser/parser_prod.nit:4596 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___AAssertExpr____n_else(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4366);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4596);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -24190,7 +25498,7 @@ void parser___parser_prod___AOnceExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos133]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4371;
+  fra.me.line = 4601;
   fra.me.meth = LOCATE_parser___parser_prod___AOnceExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -24210,7 +25518,7 @@ void parser___parser_prod___AOnceExpr___init_aonceexpr(val_t p0, val_t p1, val_t
   if (init_table[itpos134]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4373;
+  fra.me.line = 4603;
   fra.me.meth = LOCATE_parser___parser_prod___AOnceExpr___init_aonceexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24222,34 +25530,34 @@ void parser___parser_prod___AOnceExpr___init_aonceexpr(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:4373 */
+  /* parser/parser_prod.nit:4603 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4378 */
+  /* parser/parser_prod.nit:4608 */
   CALL_parser___parser_prod___AOnceExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4379 */
+  /* parser/parser_prod.nit:4609 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4379);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4609);
   }
   ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4380 */
+  /* parser/parser_prod.nit:4610 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4380);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4610);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4381 */
+  /* parser/parser_prod.nit:4611 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4381);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4611);
   }
   ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4382 */
+  /* parser/parser_prod.nit:4612 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4382);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4612);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -24264,7 +25572,7 @@ void parser___parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4385;
+  fra.me.line = 4615;
   fra.me.meth = LOCATE_parser___parser_prod___AOnceExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24276,11 +25584,11 @@ void parser___parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:4387 */
+  /* parser/parser_prod.nit:4617 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_parser___parser_prod, 4387);
+    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_parser___parser_prod, 4617);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24290,7 +25598,7 @@ void parser___parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4388 */
+    /* parser/parser_prod.nit:4618 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24305,32 +25613,32 @@ void parser___parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4389 */
+      /* parser/parser_prod.nit:4619 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4389);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4619);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4390 */
+      /* parser/parser_prod.nit:4620 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwonce, ID_parser___parser_nodes___TKwonce)) /*cast TKwonce*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4390);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4620);
       }
-      /* parser/parser_prod.nit:4391 */
+      /* parser/parser_prod.nit:4621 */
       ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4393 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4393);
+      /* parser/parser_prod.nit:4623 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4623);
     }
-    /* parser/parser_prod.nit:4395 */
+    /* parser/parser_prod.nit:4625 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4397 */
+  /* parser/parser_prod.nit:4627 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4397);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4627);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24340,7 +25648,7 @@ void parser___parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4398 */
+    /* parser/parser_prod.nit:4628 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24355,25 +25663,25 @@ void parser___parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4399 */
+      /* parser/parser_prod.nit:4629 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4399);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4629);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4400 */
+      /* parser/parser_prod.nit:4630 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4400);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4630);
       }
-      /* parser/parser_prod.nit:4401 */
+      /* parser/parser_prod.nit:4631 */
       ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4403 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4403);
+      /* parser/parser_prod.nit:4633 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4633);
     }
-    /* parser/parser_prod.nit:4405 */
+    /* parser/parser_prod.nit:4635 */
     goto label1;
   }
   label1: while(0);
@@ -24387,7 +25695,7 @@ void parser___parser_prod___AOnceExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4409;
+  fra.me.line = 4639;
   fra.me.meth = LOCATE_parser___parser_prod___AOnceExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -24397,19 +25705,19 @@ void parser___parser_prod___AOnceExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4411 */
+  /* parser/parser_prod.nit:4641 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_parser___parser_prod, 4411);
+    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_parser___parser_prod, 4641);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4412 */
+  /* parser/parser_prod.nit:4642 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4412);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4642);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -24424,7 +25732,7 @@ void parser___parser_prod___ASendExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos135]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4416;
+  fra.me.line = 4646;
   fra.me.meth = LOCATE_parser___parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -24444,7 +25752,7 @@ void parser___parser_prod___ASendExpr___init_asendexpr(val_t p0, val_t p1, int*
   if (init_table[itpos136]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4418;
+  fra.me.line = 4648;
   fra.me.meth = LOCATE_parser___parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -24454,21 +25762,21 @@ void parser___parser_prod___ASendExpr___init_asendexpr(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4418 */
+  /* parser/parser_prod.nit:4648 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4422 */
+  /* parser/parser_prod.nit:4652 */
   CALL_parser___parser_prod___ASendExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:4423 */
+  /* parser/parser_prod.nit:4653 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4423);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4653);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4424 */
+  /* parser/parser_prod.nit:4654 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4424);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4654);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -24483,7 +25791,7 @@ void parser___parser_prod___ASendExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4427;
+  fra.me.line = 4657;
   fra.me.meth = LOCATE_parser___parser_prod___ASendExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24495,11 +25803,11 @@ void parser___parser_prod___ASendExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:4429 */
+  /* parser/parser_prod.nit:4659 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4429);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4659);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24509,7 +25817,7 @@ void parser___parser_prod___ASendExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4430 */
+    /* parser/parser_prod.nit:4660 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24524,25 +25832,25 @@ void parser___parser_prod___ASendExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4431 */
+      /* parser/parser_prod.nit:4661 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4431);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4661);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4432 */
+      /* parser/parser_prod.nit:4662 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4432);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4662);
       }
-      /* parser/parser_prod.nit:4433 */
+      /* parser/parser_prod.nit:4663 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4435 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4435);
+      /* parser/parser_prod.nit:4665 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4665);
     }
-    /* parser/parser_prod.nit:4437 */
+    /* parser/parser_prod.nit:4667 */
     goto label1;
   }
   label1: while(0);
@@ -24556,7 +25864,7 @@ void parser___parser_prod___ASendExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4441;
+  fra.me.line = 4671;
   fra.me.meth = LOCATE_parser___parser_prod___ASendExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -24565,11 +25873,11 @@ void parser___parser_prod___ASendExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4443 */
+  /* parser/parser_prod.nit:4673 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4443);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4673);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -24584,7 +25892,7 @@ void parser___parser_prod___ABinopExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos137]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4447;
+  fra.me.line = 4677;
   fra.me.meth = LOCATE_parser___parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -24604,7 +25912,7 @@ void parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0, val_t p1, val
   if (init_table[itpos138]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4449;
+  fra.me.line = 4679;
   fra.me.meth = LOCATE_parser___parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24616,34 +25924,34 @@ void parser___parser_prod___ABinopExpr___init_abinopexpr(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:4449 */
+  /* parser/parser_prod.nit:4679 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4454 */
+  /* parser/parser_prod.nit:4684 */
   CALL_parser___parser_prod___ABinopExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4455 */
+  /* parser/parser_prod.nit:4685 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4455);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4685);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4456 */
+  /* parser/parser_prod.nit:4686 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4456);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4686);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4457 */
+  /* parser/parser_prod.nit:4687 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4457);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4687);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4458 */
+  /* parser/parser_prod.nit:4688 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4458);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4688);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -24658,7 +25966,7 @@ void parser___parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4461;
+  fra.me.line = 4691;
   fra.me.meth = LOCATE_parser___parser_prod___ABinopExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24670,11 +25978,11 @@ void parser___parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:4463 */
+  /* parser/parser_prod.nit:4693 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4463);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4693);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24684,7 +25992,7 @@ void parser___parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4464 */
+    /* parser/parser_prod.nit:4694 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24699,32 +26007,32 @@ void parser___parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4465 */
+      /* parser/parser_prod.nit:4695 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4465);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4695);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4466 */
+      /* parser/parser_prod.nit:4696 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4466);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4696);
       }
-      /* parser/parser_prod.nit:4467 */
+      /* parser/parser_prod.nit:4697 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4469 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4469);
+      /* parser/parser_prod.nit:4699 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4699);
     }
-    /* parser/parser_prod.nit:4471 */
+    /* parser/parser_prod.nit:4701 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4473 */
+  /* parser/parser_prod.nit:4703 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4473);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4703);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24734,7 +26042,7 @@ void parser___parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4474 */
+    /* parser/parser_prod.nit:4704 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24749,25 +26057,25 @@ void parser___parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4475 */
+      /* parser/parser_prod.nit:4705 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4475);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4705);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4476 */
+      /* parser/parser_prod.nit:4706 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4476);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4706);
       }
-      /* parser/parser_prod.nit:4477 */
+      /* parser/parser_prod.nit:4707 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4479 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4479);
+      /* parser/parser_prod.nit:4709 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4709);
     }
-    /* parser/parser_prod.nit:4481 */
+    /* parser/parser_prod.nit:4711 */
     goto label1;
   }
   label1: while(0);
@@ -24781,7 +26089,7 @@ void parser___parser_prod___ABinopExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4485;
+  fra.me.line = 4715;
   fra.me.meth = LOCATE_parser___parser_prod___ABinopExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -24791,19 +26099,19 @@ void parser___parser_prod___ABinopExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4487 */
+  /* parser/parser_prod.nit:4717 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4487);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4717);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4488 */
+  /* parser/parser_prod.nit:4718 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4488);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4718);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -24818,7 +26126,7 @@ void parser___parser_prod___AOrExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos139]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4492;
+  fra.me.line = 4722;
   fra.me.meth = LOCATE_parser___parser_prod___AOrExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -24838,7 +26146,7 @@ void parser___parser_prod___AOrExpr___init_aorexpr(val_t p0, val_t p1, val_t p2,
   if (init_table[itpos140]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4494;
+  fra.me.line = 4724;
   fra.me.meth = LOCATE_parser___parser_prod___AOrExpr___init_aorexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24850,34 +26158,34 @@ void parser___parser_prod___AOrExpr___init_aorexpr(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_prod.nit:4494 */
+  /* parser/parser_prod.nit:4724 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4499 */
+  /* parser/parser_prod.nit:4729 */
   CALL_parser___parser_prod___AOrExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4500 */
+  /* parser/parser_prod.nit:4730 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4500);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4730);
   }
   ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4501 */
+  /* parser/parser_prod.nit:4731 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4501);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4731);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4502 */
+  /* parser/parser_prod.nit:4732 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4502);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4732);
   }
   ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4503 */
+  /* parser/parser_prod.nit:4733 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4503);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4733);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -24892,7 +26200,7 @@ void parser___parser_prod___AOrExpr___replace_child(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___parser_prod;
-  fra.me.line = 4506;
+  fra.me.line = 4736;
   fra.me.meth = LOCATE_parser___parser_prod___AOrExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24904,11 +26212,11 @@ void parser___parser_prod___AOrExpr___replace_child(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_prod.nit:4508 */
+  /* parser/parser_prod.nit:4738 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4508);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4738);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24918,7 +26226,7 @@ void parser___parser_prod___AOrExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4509 */
+    /* parser/parser_prod.nit:4739 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24933,32 +26241,32 @@ void parser___parser_prod___AOrExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4510 */
+      /* parser/parser_prod.nit:4740 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4510);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4740);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4511 */
+      /* parser/parser_prod.nit:4741 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4511);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4741);
       }
-      /* parser/parser_prod.nit:4512 */
+      /* parser/parser_prod.nit:4742 */
       ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4514 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4514);
+      /* parser/parser_prod.nit:4744 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4744);
     }
-    /* parser/parser_prod.nit:4516 */
+    /* parser/parser_prod.nit:4746 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4518 */
+  /* parser/parser_prod.nit:4748 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4518);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4748);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24968,7 +26276,7 @@ void parser___parser_prod___AOrExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4519 */
+    /* parser/parser_prod.nit:4749 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24983,25 +26291,25 @@ void parser___parser_prod___AOrExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4520 */
+      /* parser/parser_prod.nit:4750 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4520);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4750);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4521 */
+      /* parser/parser_prod.nit:4751 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4521);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4751);
       }
-      /* parser/parser_prod.nit:4522 */
+      /* parser/parser_prod.nit:4752 */
       ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4524 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4524);
+      /* parser/parser_prod.nit:4754 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4754);
     }
-    /* parser/parser_prod.nit:4526 */
+    /* parser/parser_prod.nit:4756 */
     goto label1;
   }
   label1: while(0);
@@ -25015,7 +26323,7 @@ void parser___parser_prod___AOrExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4530;
+  fra.me.line = 4760;
   fra.me.meth = LOCATE_parser___parser_prod___AOrExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25025,19 +26333,19 @@ void parser___parser_prod___AOrExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4532 */
+  /* parser/parser_prod.nit:4762 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4532);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4762);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AOrExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4533 */
+  /* parser/parser_prod.nit:4763 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4533);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4763);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -25052,7 +26360,7 @@ void parser___parser_prod___AAndExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos141]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4537;
+  fra.me.line = 4767;
   fra.me.meth = LOCATE_parser___parser_prod___AAndExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -25072,7 +26380,7 @@ void parser___parser_prod___AAndExpr___init_aandexpr(val_t p0, val_t p1, val_t p
   if (init_table[itpos142]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4539;
+  fra.me.line = 4769;
   fra.me.meth = LOCATE_parser___parser_prod___AAndExpr___init_aandexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25084,34 +26392,34 @@ void parser___parser_prod___AAndExpr___init_aandexpr(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:4539 */
+  /* parser/parser_prod.nit:4769 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4544 */
+  /* parser/parser_prod.nit:4774 */
   CALL_parser___parser_prod___AAndExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4545 */
+  /* parser/parser_prod.nit:4775 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4545);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4775);
   }
   ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4546 */
+  /* parser/parser_prod.nit:4776 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4546);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4776);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4547 */
+  /* parser/parser_prod.nit:4777 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4547);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4777);
   }
   ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4548 */
+  /* parser/parser_prod.nit:4778 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4548);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4778);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -25126,7 +26434,7 @@ void parser___parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4551;
+  fra.me.line = 4781;
   fra.me.meth = LOCATE_parser___parser_prod___AAndExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25138,11 +26446,11 @@ void parser___parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:4553 */
+  /* parser/parser_prod.nit:4783 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4553);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4783);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25152,7 +26460,7 @@ void parser___parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4554 */
+    /* parser/parser_prod.nit:4784 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25167,32 +26475,32 @@ void parser___parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4555 */
+      /* parser/parser_prod.nit:4785 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4555);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4785);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4556 */
+      /* parser/parser_prod.nit:4786 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4556);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4786);
       }
-      /* parser/parser_prod.nit:4557 */
+      /* parser/parser_prod.nit:4787 */
       ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4559 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4559);
+      /* parser/parser_prod.nit:4789 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4789);
     }
-    /* parser/parser_prod.nit:4561 */
+    /* parser/parser_prod.nit:4791 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4563 */
+  /* parser/parser_prod.nit:4793 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4563);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4793);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25202,7 +26510,7 @@ void parser___parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4564 */
+    /* parser/parser_prod.nit:4794 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25217,25 +26525,25 @@ void parser___parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4565 */
+      /* parser/parser_prod.nit:4795 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4565);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4795);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4566 */
+      /* parser/parser_prod.nit:4796 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4566);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4796);
       }
-      /* parser/parser_prod.nit:4567 */
+      /* parser/parser_prod.nit:4797 */
       ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4569 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4569);
+      /* parser/parser_prod.nit:4799 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4799);
     }
-    /* parser/parser_prod.nit:4571 */
+    /* parser/parser_prod.nit:4801 */
     goto label1;
   }
   label1: while(0);
@@ -25249,7 +26557,7 @@ void parser___parser_prod___AAndExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4575;
+  fra.me.line = 4805;
   fra.me.meth = LOCATE_parser___parser_prod___AAndExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25259,19 +26567,19 @@ void parser___parser_prod___AAndExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4577 */
+  /* parser/parser_prod.nit:4807 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4577);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4807);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAndExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4578 */
+  /* parser/parser_prod.nit:4808 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4578);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4808);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -25286,7 +26594,7 @@ void parser___parser_prod___AOrElseExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos143]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4582;
+  fra.me.line = 4812;
   fra.me.meth = LOCATE_parser___parser_prod___AOrElseExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -25306,7 +26614,7 @@ void parser___parser_prod___AOrElseExpr___init_aorelseexpr(val_t p0, val_t p1, v
   if (init_table[itpos144]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4584;
+  fra.me.line = 4814;
   fra.me.meth = LOCATE_parser___parser_prod___AOrElseExpr___init_aorelseexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25318,34 +26626,34 @@ void parser___parser_prod___AOrElseExpr___init_aorelseexpr(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:4584 */
+  /* parser/parser_prod.nit:4814 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4589 */
+  /* parser/parser_prod.nit:4819 */
   CALL_parser___parser_prod___AOrElseExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4590 */
+  /* parser/parser_prod.nit:4820 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4590);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4820);
   }
   ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4591 */
+  /* parser/parser_prod.nit:4821 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4591);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4821);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4592 */
+  /* parser/parser_prod.nit:4822 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4592);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4822);
   }
   ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4593 */
+  /* parser/parser_prod.nit:4823 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4593);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4823);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -25360,7 +26668,7 @@ void parser___parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4596;
+  fra.me.line = 4826;
   fra.me.meth = LOCATE_parser___parser_prod___AOrElseExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25372,11 +26680,11 @@ void parser___parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:4598 */
+  /* parser/parser_prod.nit:4828 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4598);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4828);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25386,7 +26694,7 @@ void parser___parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4599 */
+    /* parser/parser_prod.nit:4829 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25401,32 +26709,32 @@ void parser___parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4600 */
+      /* parser/parser_prod.nit:4830 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4600);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4830);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4601 */
+      /* parser/parser_prod.nit:4831 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4601);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4831);
       }
-      /* parser/parser_prod.nit:4602 */
+      /* parser/parser_prod.nit:4832 */
       ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4604 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4604);
+      /* parser/parser_prod.nit:4834 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4834);
     }
-    /* parser/parser_prod.nit:4606 */
+    /* parser/parser_prod.nit:4836 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4608 */
+  /* parser/parser_prod.nit:4838 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4608);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4838);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25436,7 +26744,7 @@ void parser___parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4609 */
+    /* parser/parser_prod.nit:4839 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25451,25 +26759,25 @@ void parser___parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4610 */
+      /* parser/parser_prod.nit:4840 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4610);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4840);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4611 */
+      /* parser/parser_prod.nit:4841 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4611);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4841);
       }
-      /* parser/parser_prod.nit:4612 */
+      /* parser/parser_prod.nit:4842 */
       ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4614 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4614);
+      /* parser/parser_prod.nit:4844 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4844);
     }
-    /* parser/parser_prod.nit:4616 */
+    /* parser/parser_prod.nit:4846 */
     goto label1;
   }
   label1: while(0);
@@ -25483,7 +26791,7 @@ void parser___parser_prod___AOrElseExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4620;
+  fra.me.line = 4850;
   fra.me.meth = LOCATE_parser___parser_prod___AOrElseExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25493,19 +26801,19 @@ void parser___parser_prod___AOrElseExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4622 */
+  /* parser/parser_prod.nit:4852 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4622);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4852);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4623 */
+  /* parser/parser_prod.nit:4853 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4623);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4853);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -25520,7 +26828,7 @@ void parser___parser_prod___ANotExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos145]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4627;
+  fra.me.line = 4857;
   fra.me.meth = LOCATE_parser___parser_prod___ANotExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -25540,7 +26848,7 @@ void parser___parser_prod___ANotExpr___init_anotexpr(val_t p0, val_t p1, val_t p
   if (init_table[itpos146]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4629;
+  fra.me.line = 4859;
   fra.me.meth = LOCATE_parser___parser_prod___ANotExpr___init_anotexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25552,34 +26860,34 @@ void parser___parser_prod___ANotExpr___init_anotexpr(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:4629 */
+  /* parser/parser_prod.nit:4859 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4634 */
+  /* parser/parser_prod.nit:4864 */
   CALL_parser___parser_prod___ANotExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4635 */
+  /* parser/parser_prod.nit:4865 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4635);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4865);
   }
   ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4636 */
+  /* parser/parser_prod.nit:4866 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4636);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4866);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4637 */
+  /* parser/parser_prod.nit:4867 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4637);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4867);
   }
   ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4638 */
+  /* parser/parser_prod.nit:4868 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4638);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4868);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -25594,7 +26902,7 @@ void parser___parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4641;
+  fra.me.line = 4871;
   fra.me.meth = LOCATE_parser___parser_prod___ANotExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25606,11 +26914,11 @@ void parser___parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:4643 */
+  /* parser/parser_prod.nit:4873 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 4643);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 4873);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25620,7 +26928,7 @@ void parser___parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4644 */
+    /* parser/parser_prod.nit:4874 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25635,32 +26943,32 @@ void parser___parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4645 */
+      /* parser/parser_prod.nit:4875 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4645);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4875);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4646 */
+      /* parser/parser_prod.nit:4876 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast TKwnot*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4646);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4876);
       }
-      /* parser/parser_prod.nit:4647 */
+      /* parser/parser_prod.nit:4877 */
       ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4649 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4649);
+      /* parser/parser_prod.nit:4879 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4879);
     }
-    /* parser/parser_prod.nit:4651 */
+    /* parser/parser_prod.nit:4881 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4653 */
+  /* parser/parser_prod.nit:4883 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4653);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4883);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25670,7 +26978,7 @@ void parser___parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4654 */
+    /* parser/parser_prod.nit:4884 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25685,25 +26993,25 @@ void parser___parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4655 */
+      /* parser/parser_prod.nit:4885 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4655);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4885);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4656 */
+      /* parser/parser_prod.nit:4886 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4656);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4886);
       }
-      /* parser/parser_prod.nit:4657 */
+      /* parser/parser_prod.nit:4887 */
       ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4659 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4659);
+      /* parser/parser_prod.nit:4889 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4889);
     }
-    /* parser/parser_prod.nit:4661 */
+    /* parser/parser_prod.nit:4891 */
     goto label1;
   }
   label1: while(0);
@@ -25717,7 +27025,7 @@ void parser___parser_prod___ANotExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4665;
+  fra.me.line = 4895;
   fra.me.meth = LOCATE_parser___parser_prod___ANotExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25727,19 +27035,19 @@ void parser___parser_prod___ANotExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4667 */
+  /* parser/parser_prod.nit:4897 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 4667);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 4897);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4668 */
+  /* parser/parser_prod.nit:4898 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4668);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4898);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ANotExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -25754,7 +27062,7 @@ void parser___parser_prod___AEqExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos147]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4672;
+  fra.me.line = 4902;
   fra.me.meth = LOCATE_parser___parser_prod___AEqExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -25774,7 +27082,7 @@ void parser___parser_prod___AEqExpr___init_aeqexpr(val_t p0, val_t p1, val_t p2,
   if (init_table[itpos148]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4674;
+  fra.me.line = 4904;
   fra.me.meth = LOCATE_parser___parser_prod___AEqExpr___init_aeqexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25786,34 +27094,34 @@ void parser___parser_prod___AEqExpr___init_aeqexpr(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_prod.nit:4674 */
+  /* parser/parser_prod.nit:4904 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4679 */
+  /* parser/parser_prod.nit:4909 */
   CALL_parser___parser_prod___AEqExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4680 */
+  /* parser/parser_prod.nit:4910 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4680);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4910);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4681 */
+  /* parser/parser_prod.nit:4911 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4681);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4911);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4682 */
+  /* parser/parser_prod.nit:4912 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4682);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4912);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4683 */
+  /* parser/parser_prod.nit:4913 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4683);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4913);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -25828,7 +27136,7 @@ void parser___parser_prod___AEqExpr___replace_child(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___parser_prod;
-  fra.me.line = 4686;
+  fra.me.line = 4916;
   fra.me.meth = LOCATE_parser___parser_prod___AEqExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25840,11 +27148,11 @@ void parser___parser_prod___AEqExpr___replace_child(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_prod.nit:4688 */
+  /* parser/parser_prod.nit:4918 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4688);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4918);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25854,7 +27162,7 @@ void parser___parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4689 */
+    /* parser/parser_prod.nit:4919 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25869,32 +27177,32 @@ void parser___parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4690 */
+      /* parser/parser_prod.nit:4920 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4690);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4920);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4691 */
+      /* parser/parser_prod.nit:4921 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4691);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4921);
       }
-      /* parser/parser_prod.nit:4692 */
+      /* parser/parser_prod.nit:4922 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4694 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4694);
+      /* parser/parser_prod.nit:4924 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4924);
     }
-    /* parser/parser_prod.nit:4696 */
+    /* parser/parser_prod.nit:4926 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4698 */
+  /* parser/parser_prod.nit:4928 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4698);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4928);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25904,7 +27212,7 @@ void parser___parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4699 */
+    /* parser/parser_prod.nit:4929 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25919,25 +27227,25 @@ void parser___parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4700 */
+      /* parser/parser_prod.nit:4930 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4700);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4930);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4701 */
+      /* parser/parser_prod.nit:4931 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4701);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4931);
       }
-      /* parser/parser_prod.nit:4702 */
+      /* parser/parser_prod.nit:4932 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4704 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4704);
+      /* parser/parser_prod.nit:4934 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4934);
     }
-    /* parser/parser_prod.nit:4706 */
+    /* parser/parser_prod.nit:4936 */
     goto label1;
   }
   label1: while(0);
@@ -25951,7 +27259,7 @@ void parser___parser_prod___AEqExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4710;
+  fra.me.line = 4940;
   fra.me.meth = LOCATE_parser___parser_prod___AEqExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25961,19 +27269,19 @@ void parser___parser_prod___AEqExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4712 */
+  /* parser/parser_prod.nit:4942 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4712);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4942);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4713 */
+  /* parser/parser_prod.nit:4943 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4713);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4943);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -25988,7 +27296,7 @@ void parser___parser_prod___AEeExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos149]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4717;
+  fra.me.line = 4947;
   fra.me.meth = LOCATE_parser___parser_prod___AEeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -26008,7 +27316,7 @@ void parser___parser_prod___AEeExpr___init_aeeexpr(val_t p0, val_t p1, val_t p2,
   if (init_table[itpos150]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4719;
+  fra.me.line = 4949;
   fra.me.meth = LOCATE_parser___parser_prod___AEeExpr___init_aeeexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26020,34 +27328,34 @@ void parser___parser_prod___AEeExpr___init_aeeexpr(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_prod.nit:4719 */
+  /* parser/parser_prod.nit:4949 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4724 */
+  /* parser/parser_prod.nit:4954 */
   CALL_parser___parser_prod___AEeExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4725 */
+  /* parser/parser_prod.nit:4955 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4725);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4955);
   }
   ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4726 */
+  /* parser/parser_prod.nit:4956 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4726);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4956);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4727 */
+  /* parser/parser_prod.nit:4957 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4727);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4957);
   }
   ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4728 */
+  /* parser/parser_prod.nit:4958 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4728);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4958);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -26062,7 +27370,7 @@ void parser___parser_prod___AEeExpr___replace_child(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___parser_prod;
-  fra.me.line = 4731;
+  fra.me.line = 4961;
   fra.me.meth = LOCATE_parser___parser_prod___AEeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26074,11 +27382,11 @@ void parser___parser_prod___AEeExpr___replace_child(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_prod.nit:4733 */
+  /* parser/parser_prod.nit:4963 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4733);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4963);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26088,7 +27396,7 @@ void parser___parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4734 */
+    /* parser/parser_prod.nit:4964 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26103,32 +27411,32 @@ void parser___parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4735 */
+      /* parser/parser_prod.nit:4965 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4735);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4965);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4736 */
+      /* parser/parser_prod.nit:4966 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4736);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4966);
       }
-      /* parser/parser_prod.nit:4737 */
+      /* parser/parser_prod.nit:4967 */
       ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4739 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4739);
+      /* parser/parser_prod.nit:4969 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4969);
     }
-    /* parser/parser_prod.nit:4741 */
+    /* parser/parser_prod.nit:4971 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4743 */
+  /* parser/parser_prod.nit:4973 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4743);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4973);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26138,7 +27446,7 @@ void parser___parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4744 */
+    /* parser/parser_prod.nit:4974 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26153,25 +27461,25 @@ void parser___parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4745 */
+      /* parser/parser_prod.nit:4975 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4745);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4975);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4746 */
+      /* parser/parser_prod.nit:4976 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4746);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4976);
       }
-      /* parser/parser_prod.nit:4747 */
+      /* parser/parser_prod.nit:4977 */
       ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4749 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4749);
+      /* parser/parser_prod.nit:4979 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4979);
     }
-    /* parser/parser_prod.nit:4751 */
+    /* parser/parser_prod.nit:4981 */
     goto label1;
   }
   label1: while(0);
@@ -26185,7 +27493,7 @@ void parser___parser_prod___AEeExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4755;
+  fra.me.line = 4985;
   fra.me.meth = LOCATE_parser___parser_prod___AEeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26195,19 +27503,19 @@ void parser___parser_prod___AEeExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4757 */
+  /* parser/parser_prod.nit:4987 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4757);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4987);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AEeExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4758 */
+  /* parser/parser_prod.nit:4988 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4758);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4988);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -26222,7 +27530,7 @@ void parser___parser_prod___ANeExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos151]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4762;
+  fra.me.line = 4992;
   fra.me.meth = LOCATE_parser___parser_prod___ANeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -26242,7 +27550,7 @@ void parser___parser_prod___ANeExpr___init_aneexpr(val_t p0, val_t p1, val_t p2,
   if (init_table[itpos152]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4764;
+  fra.me.line = 4994;
   fra.me.meth = LOCATE_parser___parser_prod___ANeExpr___init_aneexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26254,34 +27562,34 @@ void parser___parser_prod___ANeExpr___init_aneexpr(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_prod.nit:4764 */
+  /* parser/parser_prod.nit:4994 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4769 */
+  /* parser/parser_prod.nit:4999 */
   CALL_parser___parser_prod___ANeExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4770 */
+  /* parser/parser_prod.nit:5000 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4770);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5000);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4771 */
+  /* parser/parser_prod.nit:5001 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4771);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5001);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4772 */
+  /* parser/parser_prod.nit:5002 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4772);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5002);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4773 */
+  /* parser/parser_prod.nit:5003 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4773);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5003);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -26296,7 +27604,7 @@ void parser___parser_prod___ANeExpr___replace_child(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___parser_prod;
-  fra.me.line = 4776;
+  fra.me.line = 5006;
   fra.me.meth = LOCATE_parser___parser_prod___ANeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26308,11 +27616,11 @@ void parser___parser_prod___ANeExpr___replace_child(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_prod.nit:4778 */
+  /* parser/parser_prod.nit:5008 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4778);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5008);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26322,7 +27630,7 @@ void parser___parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4779 */
+    /* parser/parser_prod.nit:5009 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26337,32 +27645,32 @@ void parser___parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4780 */
+      /* parser/parser_prod.nit:5010 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4780);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5010);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4781 */
+      /* parser/parser_prod.nit:5011 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4781);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5011);
       }
-      /* parser/parser_prod.nit:4782 */
+      /* parser/parser_prod.nit:5012 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4784 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4784);
+      /* parser/parser_prod.nit:5014 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5014);
     }
-    /* parser/parser_prod.nit:4786 */
+    /* parser/parser_prod.nit:5016 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4788 */
+  /* parser/parser_prod.nit:5018 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4788);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5018);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26372,7 +27680,7 @@ void parser___parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4789 */
+    /* parser/parser_prod.nit:5019 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26387,25 +27695,25 @@ void parser___parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4790 */
+      /* parser/parser_prod.nit:5020 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4790);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5020);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4791 */
+      /* parser/parser_prod.nit:5021 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4791);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5021);
       }
-      /* parser/parser_prod.nit:4792 */
+      /* parser/parser_prod.nit:5022 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4794 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4794);
+      /* parser/parser_prod.nit:5024 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5024);
     }
-    /* parser/parser_prod.nit:4796 */
+    /* parser/parser_prod.nit:5026 */
     goto label1;
   }
   label1: while(0);
@@ -26419,7 +27727,7 @@ void parser___parser_prod___ANeExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4800;
+  fra.me.line = 5030;
   fra.me.meth = LOCATE_parser___parser_prod___ANeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26429,19 +27737,19 @@ void parser___parser_prod___ANeExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4802 */
+  /* parser/parser_prod.nit:5032 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4802);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5032);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4803 */
+  /* parser/parser_prod.nit:5033 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4803);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5033);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -26456,7 +27764,7 @@ void parser___parser_prod___ALtExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos153]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4807;
+  fra.me.line = 5037;
   fra.me.meth = LOCATE_parser___parser_prod___ALtExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -26476,7 +27784,7 @@ void parser___parser_prod___ALtExpr___init_altexpr(val_t p0, val_t p1, val_t p2,
   if (init_table[itpos154]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4809;
+  fra.me.line = 5039;
   fra.me.meth = LOCATE_parser___parser_prod___ALtExpr___init_altexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26488,34 +27796,34 @@ void parser___parser_prod___ALtExpr___init_altexpr(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_prod.nit:4809 */
+  /* parser/parser_prod.nit:5039 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4814 */
+  /* parser/parser_prod.nit:5044 */
   CALL_parser___parser_prod___ALtExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4815 */
+  /* parser/parser_prod.nit:5045 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4815);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5045);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4816 */
+  /* parser/parser_prod.nit:5046 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4816);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5046);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4817 */
+  /* parser/parser_prod.nit:5047 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4817);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5047);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4818 */
+  /* parser/parser_prod.nit:5048 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4818);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5048);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -26530,7 +27838,7 @@ void parser___parser_prod___ALtExpr___replace_child(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___parser_prod;
-  fra.me.line = 4821;
+  fra.me.line = 5051;
   fra.me.meth = LOCATE_parser___parser_prod___ALtExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26542,11 +27850,11 @@ void parser___parser_prod___ALtExpr___replace_child(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_prod.nit:4823 */
+  /* parser/parser_prod.nit:5053 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4823);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5053);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26556,7 +27864,7 @@ void parser___parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4824 */
+    /* parser/parser_prod.nit:5054 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26571,32 +27879,32 @@ void parser___parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4825 */
+      /* parser/parser_prod.nit:5055 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4825);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5055);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4826 */
+      /* parser/parser_prod.nit:5056 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4826);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5056);
       }
-      /* parser/parser_prod.nit:4827 */
+      /* parser/parser_prod.nit:5057 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4829 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4829);
+      /* parser/parser_prod.nit:5059 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5059);
     }
-    /* parser/parser_prod.nit:4831 */
+    /* parser/parser_prod.nit:5061 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4833 */
+  /* parser/parser_prod.nit:5063 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4833);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5063);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26606,7 +27914,7 @@ void parser___parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4834 */
+    /* parser/parser_prod.nit:5064 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26621,25 +27929,25 @@ void parser___parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4835 */
+      /* parser/parser_prod.nit:5065 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4835);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5065);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4836 */
+      /* parser/parser_prod.nit:5066 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4836);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5066);
       }
-      /* parser/parser_prod.nit:4837 */
+      /* parser/parser_prod.nit:5067 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4839 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4839);
+      /* parser/parser_prod.nit:5069 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5069);
     }
-    /* parser/parser_prod.nit:4841 */
+    /* parser/parser_prod.nit:5071 */
     goto label1;
   }
   label1: while(0);
@@ -26653,7 +27961,7 @@ void parser___parser_prod___ALtExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4845;
+  fra.me.line = 5075;
   fra.me.meth = LOCATE_parser___parser_prod___ALtExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26663,19 +27971,19 @@ void parser___parser_prod___ALtExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4847 */
+  /* parser/parser_prod.nit:5077 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4847);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5077);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4848 */
+  /* parser/parser_prod.nit:5078 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4848);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5078);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -26690,7 +27998,7 @@ void parser___parser_prod___ALeExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos155]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4852;
+  fra.me.line = 5082;
   fra.me.meth = LOCATE_parser___parser_prod___ALeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -26710,7 +28018,7 @@ void parser___parser_prod___ALeExpr___init_aleexpr(val_t p0, val_t p1, val_t p2,
   if (init_table[itpos156]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4854;
+  fra.me.line = 5084;
   fra.me.meth = LOCATE_parser___parser_prod___ALeExpr___init_aleexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26722,34 +28030,34 @@ void parser___parser_prod___ALeExpr___init_aleexpr(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_prod.nit:4854 */
+  /* parser/parser_prod.nit:5084 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4859 */
+  /* parser/parser_prod.nit:5089 */
   CALL_parser___parser_prod___ALeExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4860 */
+  /* parser/parser_prod.nit:5090 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4860);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5090);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4861 */
+  /* parser/parser_prod.nit:5091 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4861);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5091);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4862 */
+  /* parser/parser_prod.nit:5092 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4862);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5092);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4863 */
+  /* parser/parser_prod.nit:5093 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4863);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5093);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -26764,7 +28072,7 @@ void parser___parser_prod___ALeExpr___replace_child(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___parser_prod;
-  fra.me.line = 4866;
+  fra.me.line = 5096;
   fra.me.meth = LOCATE_parser___parser_prod___ALeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26776,11 +28084,11 @@ void parser___parser_prod___ALeExpr___replace_child(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_prod.nit:4868 */
+  /* parser/parser_prod.nit:5098 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4868);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5098);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26790,7 +28098,7 @@ void parser___parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4869 */
+    /* parser/parser_prod.nit:5099 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26805,32 +28113,32 @@ void parser___parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4870 */
+      /* parser/parser_prod.nit:5100 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4870);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5100);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4871 */
+      /* parser/parser_prod.nit:5101 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4871);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5101);
       }
-      /* parser/parser_prod.nit:4872 */
+      /* parser/parser_prod.nit:5102 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4874 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4874);
+      /* parser/parser_prod.nit:5104 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5104);
     }
-    /* parser/parser_prod.nit:4876 */
+    /* parser/parser_prod.nit:5106 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4878 */
+  /* parser/parser_prod.nit:5108 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4878);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5108);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26840,7 +28148,7 @@ void parser___parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4879 */
+    /* parser/parser_prod.nit:5109 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26855,25 +28163,25 @@ void parser___parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4880 */
+      /* parser/parser_prod.nit:5110 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4880);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5110);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4881 */
+      /* parser/parser_prod.nit:5111 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4881);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5111);
       }
-      /* parser/parser_prod.nit:4882 */
+      /* parser/parser_prod.nit:5112 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4884 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4884);
+      /* parser/parser_prod.nit:5114 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5114);
     }
-    /* parser/parser_prod.nit:4886 */
+    /* parser/parser_prod.nit:5116 */
     goto label1;
   }
   label1: while(0);
@@ -26887,7 +28195,7 @@ void parser___parser_prod___ALeExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4890;
+  fra.me.line = 5120;
   fra.me.meth = LOCATE_parser___parser_prod___ALeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26897,19 +28205,19 @@ void parser___parser_prod___ALeExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4892 */
+  /* parser/parser_prod.nit:5122 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4892);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5122);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4893 */
+  /* parser/parser_prod.nit:5123 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4893);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5123);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -26924,7 +28232,7 @@ void parser___parser_prod___ALlExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos157]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4897;
+  fra.me.line = 5127;
   fra.me.meth = LOCATE_parser___parser_prod___ALlExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -26944,7 +28252,7 @@ void parser___parser_prod___ALlExpr___init_allexpr(val_t p0, val_t p1, val_t p2,
   if (init_table[itpos158]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4899;
+  fra.me.line = 5129;
   fra.me.meth = LOCATE_parser___parser_prod___ALlExpr___init_allexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26956,34 +28264,34 @@ void parser___parser_prod___ALlExpr___init_allexpr(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_prod.nit:4899 */
+  /* parser/parser_prod.nit:5129 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4904 */
+  /* parser/parser_prod.nit:5134 */
   CALL_parser___parser_prod___ALlExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4905 */
+  /* parser/parser_prod.nit:5135 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4905);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5135);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4906 */
+  /* parser/parser_prod.nit:5136 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4906);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5136);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4907 */
+  /* parser/parser_prod.nit:5137 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4907);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5137);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4908 */
+  /* parser/parser_prod.nit:5138 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4908);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5138);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -26998,7 +28306,7 @@ void parser___parser_prod___ALlExpr___replace_child(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___parser_prod;
-  fra.me.line = 4911;
+  fra.me.line = 5141;
   fra.me.meth = LOCATE_parser___parser_prod___ALlExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27010,11 +28318,11 @@ void parser___parser_prod___ALlExpr___replace_child(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_prod.nit:4913 */
+  /* parser/parser_prod.nit:5143 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4913);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5143);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27024,7 +28332,7 @@ void parser___parser_prod___ALlExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4914 */
+    /* parser/parser_prod.nit:5144 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27039,32 +28347,32 @@ void parser___parser_prod___ALlExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4915 */
+      /* parser/parser_prod.nit:5145 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4915);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5145);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4916 */
+      /* parser/parser_prod.nit:5146 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4916);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5146);
       }
-      /* parser/parser_prod.nit:4917 */
+      /* parser/parser_prod.nit:5147 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4919 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4919);
+      /* parser/parser_prod.nit:5149 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5149);
     }
-    /* parser/parser_prod.nit:4921 */
+    /* parser/parser_prod.nit:5151 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4923 */
+  /* parser/parser_prod.nit:5153 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4923);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5153);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27074,7 +28382,7 @@ void parser___parser_prod___ALlExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4924 */
+    /* parser/parser_prod.nit:5154 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27089,25 +28397,25 @@ void parser___parser_prod___ALlExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4925 */
+      /* parser/parser_prod.nit:5155 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4925);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5155);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4926 */
+      /* parser/parser_prod.nit:5156 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4926);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5156);
       }
-      /* parser/parser_prod.nit:4927 */
+      /* parser/parser_prod.nit:5157 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4929 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4929);
+      /* parser/parser_prod.nit:5159 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5159);
     }
-    /* parser/parser_prod.nit:4931 */
+    /* parser/parser_prod.nit:5161 */
     goto label1;
   }
   label1: while(0);
@@ -27121,7 +28429,7 @@ void parser___parser_prod___ALlExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4935;
+  fra.me.line = 5165;
   fra.me.meth = LOCATE_parser___parser_prod___ALlExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -27131,19 +28439,19 @@ void parser___parser_prod___ALlExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4937 */
+  /* parser/parser_prod.nit:5167 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4937);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5167);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4938 */
+  /* parser/parser_prod.nit:5168 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4938);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5168);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -27158,7 +28466,7 @@ void parser___parser_prod___AGtExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos159]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4942;
+  fra.me.line = 5172;
   fra.me.meth = LOCATE_parser___parser_prod___AGtExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -27178,7 +28486,7 @@ void parser___parser_prod___AGtExpr___init_agtexpr(val_t p0, val_t p1, val_t p2,
   if (init_table[itpos160]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4944;
+  fra.me.line = 5174;
   fra.me.meth = LOCATE_parser___parser_prod___AGtExpr___init_agtexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27190,34 +28498,34 @@ void parser___parser_prod___AGtExpr___init_agtexpr(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_prod.nit:4944 */
+  /* parser/parser_prod.nit:5174 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4949 */
+  /* parser/parser_prod.nit:5179 */
   CALL_parser___parser_prod___AGtExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4950 */
+  /* parser/parser_prod.nit:5180 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4950);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5180);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4951 */
+  /* parser/parser_prod.nit:5181 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4951);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5181);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4952 */
+  /* parser/parser_prod.nit:5182 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4952);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5182);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4953 */
+  /* parser/parser_prod.nit:5183 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4953);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5183);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -27232,7 +28540,7 @@ void parser___parser_prod___AGtExpr___replace_child(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___parser_prod;
-  fra.me.line = 4956;
+  fra.me.line = 5186;
   fra.me.meth = LOCATE_parser___parser_prod___AGtExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27244,11 +28552,11 @@ void parser___parser_prod___AGtExpr___replace_child(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_prod.nit:4958 */
+  /* parser/parser_prod.nit:5188 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4958);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5188);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27258,7 +28566,7 @@ void parser___parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4959 */
+    /* parser/parser_prod.nit:5189 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27273,32 +28581,32 @@ void parser___parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4960 */
+      /* parser/parser_prod.nit:5190 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4960);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5190);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4961 */
+      /* parser/parser_prod.nit:5191 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4961);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5191);
       }
-      /* parser/parser_prod.nit:4962 */
+      /* parser/parser_prod.nit:5192 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4964 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4964);
+      /* parser/parser_prod.nit:5194 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5194);
     }
-    /* parser/parser_prod.nit:4966 */
+    /* parser/parser_prod.nit:5196 */
     goto label1;
   }
-  /* parser/parser_prod.nit:4968 */
+  /* parser/parser_prod.nit:5198 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4968);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5198);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27308,7 +28616,7 @@ void parser___parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:4969 */
+    /* parser/parser_prod.nit:5199 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27323,25 +28631,25 @@ void parser___parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:4970 */
+      /* parser/parser_prod.nit:5200 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4970);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5200);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:4971 */
+      /* parser/parser_prod.nit:5201 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 4971);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5201);
       }
-      /* parser/parser_prod.nit:4972 */
+      /* parser/parser_prod.nit:5202 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:4974 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 4974);
+      /* parser/parser_prod.nit:5204 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5204);
     }
-    /* parser/parser_prod.nit:4976 */
+    /* parser/parser_prod.nit:5206 */
     goto label1;
   }
   label1: while(0);
@@ -27355,7 +28663,7 @@ void parser___parser_prod___AGtExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4980;
+  fra.me.line = 5210;
   fra.me.meth = LOCATE_parser___parser_prod___AGtExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -27365,19 +28673,19 @@ void parser___parser_prod___AGtExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:4982 */
+  /* parser/parser_prod.nit:5212 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 4982);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5212);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:4983 */
+  /* parser/parser_prod.nit:5213 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 4983);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5213);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -27392,7 +28700,7 @@ void parser___parser_prod___AGeExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos161]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4987;
+  fra.me.line = 5217;
   fra.me.meth = LOCATE_parser___parser_prod___AGeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -27412,7 +28720,7 @@ void parser___parser_prod___AGeExpr___init_ageexpr(val_t p0, val_t p1, val_t p2,
   if (init_table[itpos162]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 4989;
+  fra.me.line = 5219;
   fra.me.meth = LOCATE_parser___parser_prod___AGeExpr___init_ageexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27424,34 +28732,34 @@ void parser___parser_prod___AGeExpr___init_ageexpr(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_prod.nit:4989 */
+  /* parser/parser_prod.nit:5219 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:4994 */
+  /* parser/parser_prod.nit:5224 */
   CALL_parser___parser_prod___AGeExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:4995 */
+  /* parser/parser_prod.nit:5225 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4995);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5225);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:4996 */
+  /* parser/parser_prod.nit:5226 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4996);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5226);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:4997 */
+  /* parser/parser_prod.nit:5227 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 4997);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5227);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:4998 */
+  /* parser/parser_prod.nit:5228 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 4998);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5228);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -27466,7 +28774,7 @@ void parser___parser_prod___AGeExpr___replace_child(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___parser_prod;
-  fra.me.line = 5001;
+  fra.me.line = 5231;
   fra.me.meth = LOCATE_parser___parser_prod___AGeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27478,11 +28786,11 @@ void parser___parser_prod___AGeExpr___replace_child(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_prod.nit:5003 */
+  /* parser/parser_prod.nit:5233 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5003);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5233);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27492,7 +28800,7 @@ void parser___parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5004 */
+    /* parser/parser_prod.nit:5234 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27507,32 +28815,32 @@ void parser___parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5005 */
+      /* parser/parser_prod.nit:5235 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5005);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5235);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5006 */
+      /* parser/parser_prod.nit:5236 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5006);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5236);
       }
-      /* parser/parser_prod.nit:5007 */
+      /* parser/parser_prod.nit:5237 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5009 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5009);
+      /* parser/parser_prod.nit:5239 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5239);
     }
-    /* parser/parser_prod.nit:5011 */
+    /* parser/parser_prod.nit:5241 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5013 */
+  /* parser/parser_prod.nit:5243 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5013);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5243);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27542,7 +28850,7 @@ void parser___parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5014 */
+    /* parser/parser_prod.nit:5244 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27557,25 +28865,25 @@ void parser___parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5015 */
+      /* parser/parser_prod.nit:5245 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5015);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5245);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5016 */
+      /* parser/parser_prod.nit:5246 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5016);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5246);
       }
-      /* parser/parser_prod.nit:5017 */
+      /* parser/parser_prod.nit:5247 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5019 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5019);
+      /* parser/parser_prod.nit:5249 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5249);
     }
-    /* parser/parser_prod.nit:5021 */
+    /* parser/parser_prod.nit:5251 */
     goto label1;
   }
   label1: while(0);
@@ -27589,7 +28897,7 @@ void parser___parser_prod___AGeExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5025;
+  fra.me.line = 5255;
   fra.me.meth = LOCATE_parser___parser_prod___AGeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -27599,19 +28907,19 @@ void parser___parser_prod___AGeExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5027 */
+  /* parser/parser_prod.nit:5257 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5027);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5257);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5028 */
+  /* parser/parser_prod.nit:5258 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5028);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5258);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -27626,7 +28934,7 @@ void parser___parser_prod___AGgExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos163]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5032;
+  fra.me.line = 5262;
   fra.me.meth = LOCATE_parser___parser_prod___AGgExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -27646,7 +28954,7 @@ void parser___parser_prod___AGgExpr___init_aggexpr(val_t p0, val_t p1, val_t p2,
   if (init_table[itpos164]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5034;
+  fra.me.line = 5264;
   fra.me.meth = LOCATE_parser___parser_prod___AGgExpr___init_aggexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27658,34 +28966,34 @@ void parser___parser_prod___AGgExpr___init_aggexpr(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_prod.nit:5034 */
+  /* parser/parser_prod.nit:5264 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5039 */
+  /* parser/parser_prod.nit:5269 */
   CALL_parser___parser_prod___AGgExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5040 */
+  /* parser/parser_prod.nit:5270 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5040);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5270);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5041 */
+  /* parser/parser_prod.nit:5271 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5041);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5271);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5042 */
+  /* parser/parser_prod.nit:5272 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5042);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5272);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5043 */
+  /* parser/parser_prod.nit:5273 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5043);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5273);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -27700,7 +29008,7 @@ void parser___parser_prod___AGgExpr___replace_child(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___parser_prod;
-  fra.me.line = 5046;
+  fra.me.line = 5276;
   fra.me.meth = LOCATE_parser___parser_prod___AGgExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27712,11 +29020,11 @@ void parser___parser_prod___AGgExpr___replace_child(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_prod.nit:5048 */
+  /* parser/parser_prod.nit:5278 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5048);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5278);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27726,7 +29034,7 @@ void parser___parser_prod___AGgExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5049 */
+    /* parser/parser_prod.nit:5279 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27741,32 +29049,32 @@ void parser___parser_prod___AGgExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5050 */
+      /* parser/parser_prod.nit:5280 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5050);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5280);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5051 */
+      /* parser/parser_prod.nit:5281 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5051);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5281);
       }
-      /* parser/parser_prod.nit:5052 */
+      /* parser/parser_prod.nit:5282 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5054 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5054);
+      /* parser/parser_prod.nit:5284 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5284);
     }
-    /* parser/parser_prod.nit:5056 */
+    /* parser/parser_prod.nit:5286 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5058 */
+  /* parser/parser_prod.nit:5288 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5058);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5288);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27776,7 +29084,7 @@ void parser___parser_prod___AGgExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5059 */
+    /* parser/parser_prod.nit:5289 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27791,25 +29099,25 @@ void parser___parser_prod___AGgExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5060 */
+      /* parser/parser_prod.nit:5290 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5060);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5290);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5061 */
+      /* parser/parser_prod.nit:5291 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5061);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5291);
       }
-      /* parser/parser_prod.nit:5062 */
+      /* parser/parser_prod.nit:5292 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5064 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5064);
+      /* parser/parser_prod.nit:5294 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5294);
     }
-    /* parser/parser_prod.nit:5066 */
+    /* parser/parser_prod.nit:5296 */
     goto label1;
   }
   label1: while(0);
@@ -27823,7 +29131,7 @@ void parser___parser_prod___AGgExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5070;
+  fra.me.line = 5300;
   fra.me.meth = LOCATE_parser___parser_prod___AGgExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -27833,19 +29141,19 @@ void parser___parser_prod___AGgExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5072 */
+  /* parser/parser_prod.nit:5302 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5072);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5302);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5073 */
+  /* parser/parser_prod.nit:5303 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5073);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5303);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -27860,7 +29168,7 @@ void parser___parser_prod___AIsaExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos165]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5077;
+  fra.me.line = 5307;
   fra.me.meth = LOCATE_parser___parser_prod___AIsaExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -27880,7 +29188,7 @@ void parser___parser_prod___AIsaExpr___init_aisaexpr(val_t p0, val_t p1, val_t p
   if (init_table[itpos166]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5079;
+  fra.me.line = 5309;
   fra.me.meth = LOCATE_parser___parser_prod___AIsaExpr___init_aisaexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27892,34 +29200,34 @@ void parser___parser_prod___AIsaExpr___init_aisaexpr(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5079 */
+  /* parser/parser_prod.nit:5309 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5084 */
+  /* parser/parser_prod.nit:5314 */
   CALL_parser___parser_prod___AIsaExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5085 */
+  /* parser/parser_prod.nit:5315 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5085);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5315);
   }
   ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5086 */
+  /* parser/parser_prod.nit:5316 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5086);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5316);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5087 */
+  /* parser/parser_prod.nit:5317 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5087);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5317);
   }
   ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5088 */
+  /* parser/parser_prod.nit:5318 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5088);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5318);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -27934,7 +29242,7 @@ void parser___parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5091;
+  fra.me.line = 5321;
   fra.me.meth = LOCATE_parser___parser_prod___AIsaExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27946,11 +29254,11 @@ void parser___parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5093 */
+  /* parser/parser_prod.nit:5323 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5093);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5323);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27960,7 +29268,7 @@ void parser___parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5094 */
+    /* parser/parser_prod.nit:5324 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27975,32 +29283,32 @@ void parser___parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5095 */
+      /* parser/parser_prod.nit:5325 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5095);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5325);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5096 */
+      /* parser/parser_prod.nit:5326 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5096);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5326);
       }
-      /* parser/parser_prod.nit:5097 */
+      /* parser/parser_prod.nit:5327 */
       ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5099 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5099);
+      /* parser/parser_prod.nit:5329 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5329);
     }
-    /* parser/parser_prod.nit:5101 */
+    /* parser/parser_prod.nit:5331 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5103 */
+  /* parser/parser_prod.nit:5333 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 5103);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 5333);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28010,7 +29318,7 @@ void parser___parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5104 */
+    /* parser/parser_prod.nit:5334 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28025,25 +29333,25 @@ void parser___parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5105 */
+      /* parser/parser_prod.nit:5335 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5105);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5335);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5106 */
+      /* parser/parser_prod.nit:5336 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5106);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5336);
       }
-      /* parser/parser_prod.nit:5107 */
+      /* parser/parser_prod.nit:5337 */
       ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5109 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5109);
+      /* parser/parser_prod.nit:5339 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5339);
     }
-    /* parser/parser_prod.nit:5111 */
+    /* parser/parser_prod.nit:5341 */
     goto label1;
   }
   label1: while(0);
@@ -28057,7 +29365,7 @@ void parser___parser_prod___AIsaExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5115;
+  fra.me.line = 5345;
   fra.me.meth = LOCATE_parser___parser_prod___AIsaExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -28067,19 +29375,19 @@ void parser___parser_prod___AIsaExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5117 */
+  /* parser/parser_prod.nit:5347 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5117);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5347);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5118 */
+  /* parser/parser_prod.nit:5348 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 5118);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 5348);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AIsaExpr____n_type(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -28094,7 +29402,7 @@ void parser___parser_prod___APlusExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos167]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5122;
+  fra.me.line = 5352;
   fra.me.meth = LOCATE_parser___parser_prod___APlusExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -28114,7 +29422,7 @@ void parser___parser_prod___APlusExpr___init_aplusexpr(val_t p0, val_t p1, val_t
   if (init_table[itpos168]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5124;
+  fra.me.line = 5354;
   fra.me.meth = LOCATE_parser___parser_prod___APlusExpr___init_aplusexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28126,34 +29434,34 @@ void parser___parser_prod___APlusExpr___init_aplusexpr(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5124 */
+  /* parser/parser_prod.nit:5354 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5129 */
+  /* parser/parser_prod.nit:5359 */
   CALL_parser___parser_prod___APlusExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5130 */
+  /* parser/parser_prod.nit:5360 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5130);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5360);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5131 */
+  /* parser/parser_prod.nit:5361 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5131);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5361);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5132 */
+  /* parser/parser_prod.nit:5362 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5132);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5362);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5133 */
+  /* parser/parser_prod.nit:5363 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5133);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5363);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -28168,7 +29476,7 @@ void parser___parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5136;
+  fra.me.line = 5366;
   fra.me.meth = LOCATE_parser___parser_prod___APlusExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28180,11 +29488,11 @@ void parser___parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5138 */
+  /* parser/parser_prod.nit:5368 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5138);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5368);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28194,7 +29502,7 @@ void parser___parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5139 */
+    /* parser/parser_prod.nit:5369 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28209,32 +29517,32 @@ void parser___parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5140 */
+      /* parser/parser_prod.nit:5370 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5140);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5370);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5141 */
+      /* parser/parser_prod.nit:5371 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5141);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5371);
       }
-      /* parser/parser_prod.nit:5142 */
+      /* parser/parser_prod.nit:5372 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5144 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5144);
+      /* parser/parser_prod.nit:5374 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5374);
     }
-    /* parser/parser_prod.nit:5146 */
+    /* parser/parser_prod.nit:5376 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5148 */
+  /* parser/parser_prod.nit:5378 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5148);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5378);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28244,7 +29552,7 @@ void parser___parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5149 */
+    /* parser/parser_prod.nit:5379 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28259,25 +29567,25 @@ void parser___parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5150 */
+      /* parser/parser_prod.nit:5380 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5150);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5380);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5151 */
+      /* parser/parser_prod.nit:5381 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5151);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5381);
       }
-      /* parser/parser_prod.nit:5152 */
+      /* parser/parser_prod.nit:5382 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5154 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5154);
+      /* parser/parser_prod.nit:5384 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5384);
     }
-    /* parser/parser_prod.nit:5156 */
+    /* parser/parser_prod.nit:5386 */
     goto label1;
   }
   label1: while(0);
@@ -28291,7 +29599,7 @@ void parser___parser_prod___APlusExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5160;
+  fra.me.line = 5390;
   fra.me.meth = LOCATE_parser___parser_prod___APlusExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -28301,19 +29609,19 @@ void parser___parser_prod___APlusExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5162 */
+  /* parser/parser_prod.nit:5392 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5162);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5392);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5163 */
+  /* parser/parser_prod.nit:5393 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5163);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5393);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -28328,7 +29636,7 @@ void parser___parser_prod___AMinusExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos169]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5167;
+  fra.me.line = 5397;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -28348,7 +29656,7 @@ void parser___parser_prod___AMinusExpr___init_aminusexpr(val_t p0, val_t p1, val
   if (init_table[itpos170]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5169;
+  fra.me.line = 5399;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusExpr___init_aminusexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28360,34 +29668,34 @@ void parser___parser_prod___AMinusExpr___init_aminusexpr(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5169 */
+  /* parser/parser_prod.nit:5399 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5174 */
+  /* parser/parser_prod.nit:5404 */
   CALL_parser___parser_prod___AMinusExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5175 */
+  /* parser/parser_prod.nit:5405 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5175);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5405);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5176 */
+  /* parser/parser_prod.nit:5406 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5176);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5406);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5177 */
+  /* parser/parser_prod.nit:5407 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5177);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5407);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5178 */
+  /* parser/parser_prod.nit:5408 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5178);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5408);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -28402,7 +29710,7 @@ void parser___parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5181;
+  fra.me.line = 5411;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28414,11 +29722,11 @@ void parser___parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5183 */
+  /* parser/parser_prod.nit:5413 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5183);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5413);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28428,7 +29736,7 @@ void parser___parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5184 */
+    /* parser/parser_prod.nit:5414 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28443,32 +29751,32 @@ void parser___parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5185 */
+      /* parser/parser_prod.nit:5415 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5185);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5415);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5186 */
+      /* parser/parser_prod.nit:5416 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5186);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5416);
       }
-      /* parser/parser_prod.nit:5187 */
+      /* parser/parser_prod.nit:5417 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5189 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5189);
+      /* parser/parser_prod.nit:5419 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5419);
     }
-    /* parser/parser_prod.nit:5191 */
+    /* parser/parser_prod.nit:5421 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5193 */
+  /* parser/parser_prod.nit:5423 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5193);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5423);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28478,7 +29786,7 @@ void parser___parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5194 */
+    /* parser/parser_prod.nit:5424 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28493,25 +29801,25 @@ void parser___parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5195 */
+      /* parser/parser_prod.nit:5425 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5195);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5425);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5196 */
+      /* parser/parser_prod.nit:5426 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5196);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5426);
       }
-      /* parser/parser_prod.nit:5197 */
+      /* parser/parser_prod.nit:5427 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5199 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5199);
+      /* parser/parser_prod.nit:5429 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5429);
     }
-    /* parser/parser_prod.nit:5201 */
+    /* parser/parser_prod.nit:5431 */
     goto label1;
   }
   label1: while(0);
@@ -28525,7 +29833,7 @@ void parser___parser_prod___AMinusExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5205;
+  fra.me.line = 5435;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -28535,19 +29843,19 @@ void parser___parser_prod___AMinusExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5207 */
+  /* parser/parser_prod.nit:5437 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5207);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5437);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5208 */
+  /* parser/parser_prod.nit:5438 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5208);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5438);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -28562,7 +29870,7 @@ void parser___parser_prod___AStarshipExpr___empty_init(val_t p0, int* init_table
   if (init_table[itpos171]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5212;
+  fra.me.line = 5442;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -28582,7 +29890,7 @@ void parser___parser_prod___AStarshipExpr___init_astarshipexpr(val_t p0, val_t p
   if (init_table[itpos172]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5214;
+  fra.me.line = 5444;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipExpr___init_astarshipexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28594,34 +29902,34 @@ void parser___parser_prod___AStarshipExpr___init_astarshipexpr(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5214 */
+  /* parser/parser_prod.nit:5444 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5219 */
+  /* parser/parser_prod.nit:5449 */
   CALL_parser___parser_prod___AStarshipExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5220 */
+  /* parser/parser_prod.nit:5450 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5220);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5450);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5221 */
+  /* parser/parser_prod.nit:5451 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5221);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5451);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5222 */
+  /* parser/parser_prod.nit:5452 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5222);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5452);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5223 */
+  /* parser/parser_prod.nit:5453 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5223);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5453);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -28636,7 +29944,7 @@ void parser___parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, va
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5226;
+  fra.me.line = 5456;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28648,11 +29956,11 @@ void parser___parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, va
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5228 */
+  /* parser/parser_prod.nit:5458 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5228);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5458);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28662,7 +29970,7 @@ void parser___parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5229 */
+    /* parser/parser_prod.nit:5459 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28677,32 +29985,32 @@ void parser___parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5230 */
+      /* parser/parser_prod.nit:5460 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5230);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5460);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5231 */
+      /* parser/parser_prod.nit:5461 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5231);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5461);
       }
-      /* parser/parser_prod.nit:5232 */
+      /* parser/parser_prod.nit:5462 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5234 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5234);
+      /* parser/parser_prod.nit:5464 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5464);
     }
-    /* parser/parser_prod.nit:5236 */
+    /* parser/parser_prod.nit:5466 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5238 */
+  /* parser/parser_prod.nit:5468 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5238);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5468);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28712,7 +30020,7 @@ void parser___parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5239 */
+    /* parser/parser_prod.nit:5469 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28727,25 +30035,25 @@ void parser___parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5240 */
+      /* parser/parser_prod.nit:5470 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5240);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5470);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5241 */
+      /* parser/parser_prod.nit:5471 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5241);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5471);
       }
-      /* parser/parser_prod.nit:5242 */
+      /* parser/parser_prod.nit:5472 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5244 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5244);
+      /* parser/parser_prod.nit:5474 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5474);
     }
-    /* parser/parser_prod.nit:5246 */
+    /* parser/parser_prod.nit:5476 */
     goto label1;
   }
   label1: while(0);
@@ -28759,7 +30067,7 @@ void parser___parser_prod___AStarshipExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5250;
+  fra.me.line = 5480;
   fra.me.meth = LOCATE_parser___parser_prod___AStarshipExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -28769,19 +30077,19 @@ void parser___parser_prod___AStarshipExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5252 */
+  /* parser/parser_prod.nit:5482 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5252);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5482);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5253 */
+  /* parser/parser_prod.nit:5483 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5253);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5483);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -28796,7 +30104,7 @@ void parser___parser_prod___AStarExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos173]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5257;
+  fra.me.line = 5487;
   fra.me.meth = LOCATE_parser___parser_prod___AStarExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -28816,7 +30124,7 @@ void parser___parser_prod___AStarExpr___init_astarexpr(val_t p0, val_t p1, val_t
   if (init_table[itpos174]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5259;
+  fra.me.line = 5489;
   fra.me.meth = LOCATE_parser___parser_prod___AStarExpr___init_astarexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28828,34 +30136,34 @@ void parser___parser_prod___AStarExpr___init_astarexpr(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5259 */
+  /* parser/parser_prod.nit:5489 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5264 */
+  /* parser/parser_prod.nit:5494 */
   CALL_parser___parser_prod___AStarExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5265 */
+  /* parser/parser_prod.nit:5495 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5265);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5495);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5266 */
+  /* parser/parser_prod.nit:5496 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5266);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5496);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5267 */
+  /* parser/parser_prod.nit:5497 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5267);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5497);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5268 */
+  /* parser/parser_prod.nit:5498 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5268);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5498);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -28870,7 +30178,7 @@ void parser___parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5271;
+  fra.me.line = 5501;
   fra.me.meth = LOCATE_parser___parser_prod___AStarExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28882,11 +30190,11 @@ void parser___parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5273 */
+  /* parser/parser_prod.nit:5503 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5273);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5503);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28896,7 +30204,7 @@ void parser___parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5274 */
+    /* parser/parser_prod.nit:5504 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28911,32 +30219,32 @@ void parser___parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5275 */
+      /* parser/parser_prod.nit:5505 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5275);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5505);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5276 */
+      /* parser/parser_prod.nit:5506 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5276);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5506);
       }
-      /* parser/parser_prod.nit:5277 */
+      /* parser/parser_prod.nit:5507 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5279 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5279);
+      /* parser/parser_prod.nit:5509 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5509);
     }
-    /* parser/parser_prod.nit:5281 */
+    /* parser/parser_prod.nit:5511 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5283 */
+  /* parser/parser_prod.nit:5513 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5283);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5513);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28946,7 +30254,7 @@ void parser___parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5284 */
+    /* parser/parser_prod.nit:5514 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28961,25 +30269,25 @@ void parser___parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5285 */
+      /* parser/parser_prod.nit:5515 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5285);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5515);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5286 */
+      /* parser/parser_prod.nit:5516 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5286);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5516);
       }
-      /* parser/parser_prod.nit:5287 */
+      /* parser/parser_prod.nit:5517 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5289 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5289);
+      /* parser/parser_prod.nit:5519 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5519);
     }
-    /* parser/parser_prod.nit:5291 */
+    /* parser/parser_prod.nit:5521 */
     goto label1;
   }
   label1: while(0);
@@ -28993,7 +30301,7 @@ void parser___parser_prod___AStarExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5295;
+  fra.me.line = 5525;
   fra.me.meth = LOCATE_parser___parser_prod___AStarExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -29003,19 +30311,19 @@ void parser___parser_prod___AStarExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5297 */
+  /* parser/parser_prod.nit:5527 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5297);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5527);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5298 */
+  /* parser/parser_prod.nit:5528 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5298);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5528);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -29030,7 +30338,7 @@ void parser___parser_prod___ASlashExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos175]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5302;
+  fra.me.line = 5532;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -29050,7 +30358,7 @@ void parser___parser_prod___ASlashExpr___init_aslashexpr(val_t p0, val_t p1, val
   if (init_table[itpos176]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5304;
+  fra.me.line = 5534;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashExpr___init_aslashexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29062,34 +30370,34 @@ void parser___parser_prod___ASlashExpr___init_aslashexpr(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5304 */
+  /* parser/parser_prod.nit:5534 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5309 */
+  /* parser/parser_prod.nit:5539 */
   CALL_parser___parser_prod___ASlashExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5310 */
+  /* parser/parser_prod.nit:5540 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5310);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5540);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5311 */
+  /* parser/parser_prod.nit:5541 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5311);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5541);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5312 */
+  /* parser/parser_prod.nit:5542 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5312);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5542);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5313 */
+  /* parser/parser_prod.nit:5543 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5313);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5543);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -29104,7 +30412,7 @@ void parser___parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5316;
+  fra.me.line = 5546;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29116,11 +30424,11 @@ void parser___parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5318 */
+  /* parser/parser_prod.nit:5548 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5318);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5548);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29130,7 +30438,7 @@ void parser___parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5319 */
+    /* parser/parser_prod.nit:5549 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29145,32 +30453,32 @@ void parser___parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5320 */
+      /* parser/parser_prod.nit:5550 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5320);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5550);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5321 */
+      /* parser/parser_prod.nit:5551 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5321);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5551);
       }
-      /* parser/parser_prod.nit:5322 */
+      /* parser/parser_prod.nit:5552 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5324 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5324);
+      /* parser/parser_prod.nit:5554 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5554);
     }
-    /* parser/parser_prod.nit:5326 */
+    /* parser/parser_prod.nit:5556 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5328 */
+  /* parser/parser_prod.nit:5558 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5328);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5558);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29180,7 +30488,7 @@ void parser___parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5329 */
+    /* parser/parser_prod.nit:5559 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29195,25 +30503,25 @@ void parser___parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5330 */
+      /* parser/parser_prod.nit:5560 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5330);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5560);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5331 */
+      /* parser/parser_prod.nit:5561 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5331);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5561);
       }
-      /* parser/parser_prod.nit:5332 */
+      /* parser/parser_prod.nit:5562 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5334 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5334);
+      /* parser/parser_prod.nit:5564 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5564);
     }
-    /* parser/parser_prod.nit:5336 */
+    /* parser/parser_prod.nit:5566 */
     goto label1;
   }
   label1: while(0);
@@ -29227,7 +30535,7 @@ void parser___parser_prod___ASlashExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5340;
+  fra.me.line = 5570;
   fra.me.meth = LOCATE_parser___parser_prod___ASlashExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -29237,19 +30545,19 @@ void parser___parser_prod___ASlashExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5342 */
+  /* parser/parser_prod.nit:5572 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5342);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5572);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5343 */
+  /* parser/parser_prod.nit:5573 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5343);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5573);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -29264,7 +30572,7 @@ void parser___parser_prod___APercentExpr___empty_init(val_t p0, int* init_table)
   if (init_table[itpos177]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5347;
+  fra.me.line = 5577;
   fra.me.meth = LOCATE_parser___parser_prod___APercentExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -29284,7 +30592,7 @@ void parser___parser_prod___APercentExpr___init_apercentexpr(val_t p0, val_t p1,
   if (init_table[itpos178]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5349;
+  fra.me.line = 5579;
   fra.me.meth = LOCATE_parser___parser_prod___APercentExpr___init_apercentexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29296,34 +30604,34 @@ void parser___parser_prod___APercentExpr___init_apercentexpr(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5349 */
+  /* parser/parser_prod.nit:5579 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5354 */
+  /* parser/parser_prod.nit:5584 */
   CALL_parser___parser_prod___APercentExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5355 */
+  /* parser/parser_prod.nit:5585 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5355);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5585);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5356 */
+  /* parser/parser_prod.nit:5586 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5356);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5586);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5357 */
+  /* parser/parser_prod.nit:5587 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5357);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5587);
   }
   ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5358 */
+  /* parser/parser_prod.nit:5588 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5358);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5588);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -29338,7 +30646,7 @@ void parser___parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5361;
+  fra.me.line = 5591;
   fra.me.meth = LOCATE_parser___parser_prod___APercentExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29350,11 +30658,11 @@ void parser___parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5363 */
+  /* parser/parser_prod.nit:5593 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5363);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5593);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29364,7 +30672,7 @@ void parser___parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5364 */
+    /* parser/parser_prod.nit:5594 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29379,32 +30687,32 @@ void parser___parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5365 */
+      /* parser/parser_prod.nit:5595 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5365);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5595);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5366 */
+      /* parser/parser_prod.nit:5596 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5366);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5596);
       }
-      /* parser/parser_prod.nit:5367 */
+      /* parser/parser_prod.nit:5597 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5369 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5369);
+      /* parser/parser_prod.nit:5599 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5599);
     }
-    /* parser/parser_prod.nit:5371 */
+    /* parser/parser_prod.nit:5601 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5373 */
+  /* parser/parser_prod.nit:5603 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5373);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5603);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29414,7 +30722,7 @@ void parser___parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5374 */
+    /* parser/parser_prod.nit:5604 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29429,25 +30737,25 @@ void parser___parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5375 */
+      /* parser/parser_prod.nit:5605 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5375);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5605);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5376 */
+      /* parser/parser_prod.nit:5606 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5376);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5606);
       }
-      /* parser/parser_prod.nit:5377 */
+      /* parser/parser_prod.nit:5607 */
       ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5379 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5379);
+      /* parser/parser_prod.nit:5609 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5609);
     }
-    /* parser/parser_prod.nit:5381 */
+    /* parser/parser_prod.nit:5611 */
     goto label1;
   }
   label1: while(0);
@@ -29461,7 +30769,7 @@ void parser___parser_prod___APercentExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5385;
+  fra.me.line = 5615;
   fra.me.meth = LOCATE_parser___parser_prod___APercentExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -29471,19 +30779,19 @@ void parser___parser_prod___APercentExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5387 */
+  /* parser/parser_prod.nit:5617 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5387);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5617);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5388 */
+  /* parser/parser_prod.nit:5618 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5388);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 5618);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -29498,7 +30806,7 @@ void parser___parser_prod___AUminusExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos179]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5392;
+  fra.me.line = 5622;
   fra.me.meth = LOCATE_parser___parser_prod___AUminusExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -29518,7 +30826,7 @@ void parser___parser_prod___AUminusExpr___init_auminusexpr(val_t p0, val_t p1, v
   if (init_table[itpos180]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5394;
+  fra.me.line = 5624;
   fra.me.meth = LOCATE_parser___parser_prod___AUminusExpr___init_auminusexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29530,34 +30838,34 @@ void parser___parser_prod___AUminusExpr___init_auminusexpr(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5394 */
+  /* parser/parser_prod.nit:5624 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5399 */
+  /* parser/parser_prod.nit:5629 */
   CALL_parser___parser_prod___AUminusExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5400 */
+  /* parser/parser_prod.nit:5630 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5400);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5630);
   }
   ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5401 */
+  /* parser/parser_prod.nit:5631 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5401);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5631);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5402 */
+  /* parser/parser_prod.nit:5632 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5402);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5632);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5403 */
+  /* parser/parser_prod.nit:5633 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5403);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5633);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -29572,7 +30880,7 @@ void parser___parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5406;
+  fra.me.line = 5636;
   fra.me.meth = LOCATE_parser___parser_prod___AUminusExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29584,11 +30892,11 @@ void parser___parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5408 */
+  /* parser/parser_prod.nit:5638 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 5408);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 5638);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29598,7 +30906,7 @@ void parser___parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5409 */
+    /* parser/parser_prod.nit:5639 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29613,32 +30921,32 @@ void parser___parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5410 */
+      /* parser/parser_prod.nit:5640 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5410);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5640);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5411 */
+      /* parser/parser_prod.nit:5641 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TMinus, ID_parser___parser_nodes___TMinus)) /*cast TMinus*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5411);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5641);
       }
-      /* parser/parser_prod.nit:5412 */
+      /* parser/parser_prod.nit:5642 */
       ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5414 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5414);
+      /* parser/parser_prod.nit:5644 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5644);
     }
-    /* parser/parser_prod.nit:5416 */
+    /* parser/parser_prod.nit:5646 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5418 */
+  /* parser/parser_prod.nit:5648 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5418);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5648);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29648,7 +30956,7 @@ void parser___parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5419 */
+    /* parser/parser_prod.nit:5649 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29663,25 +30971,25 @@ void parser___parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5420 */
+      /* parser/parser_prod.nit:5650 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5420);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5650);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5421 */
+      /* parser/parser_prod.nit:5651 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5421);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5651);
       }
-      /* parser/parser_prod.nit:5422 */
+      /* parser/parser_prod.nit:5652 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5424 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5424);
+      /* parser/parser_prod.nit:5654 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5654);
     }
-    /* parser/parser_prod.nit:5426 */
+    /* parser/parser_prod.nit:5656 */
     goto label1;
   }
   label1: while(0);
@@ -29695,7 +31003,7 @@ void parser___parser_prod___AUminusExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5430;
+  fra.me.line = 5660;
   fra.me.meth = LOCATE_parser___parser_prod___AUminusExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -29705,19 +31013,19 @@ void parser___parser_prod___AUminusExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5432 */
+  /* parser/parser_prod.nit:5662 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 5432);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser___parser_prod, 5662);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5433 */
+  /* parser/parser_prod.nit:5663 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5433);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5663);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -29732,7 +31040,7 @@ void parser___parser_prod___ANewExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos181]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5437;
+  fra.me.line = 5667;
   fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -29753,7 +31061,7 @@ void parser___parser_prod___ANewExpr___init_anewexpr(val_t p0, val_t p1, val_t p
   if (init_table[itpos182]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5439;
+  fra.me.line = 5669;
   fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___init_anewexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -29769,39 +31077,39 @@ void parser___parser_prod___ANewExpr___init_anewexpr(val_t p0, val_t p1, val_t p
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:5439 */
+  /* parser/parser_prod.nit:5669 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5446 */
+  /* parser/parser_prod.nit:5676 */
   CALL_parser___parser_prod___ANewExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:5447 */
+  /* parser/parser_prod.nit:5677 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5447);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5677);
   }
   ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5448 */
+  /* parser/parser_prod.nit:5678 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5448);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5678);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5449 */
+  /* parser/parser_prod.nit:5679 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5449);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5679);
   }
   ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5450 */
+  /* parser/parser_prod.nit:5680 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5450);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5680);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5451 */
+  /* parser/parser_prod.nit:5681 */
   ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:5452 */
+  /* parser/parser_prod.nit:5682 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -29816,24 +31124,24 @@ void parser___parser_prod___ANewExpr___init_anewexpr(val_t p0, val_t p1, val_t p
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5453 */
+    /* parser/parser_prod.nit:5683 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5453);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5683);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
   }
-  /* parser/parser_prod.nit:5455 */
+  /* parser/parser_prod.nit:5685 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5455);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5685);
   }
   ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:5456 */
+  /* parser/parser_prod.nit:5686 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5456);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5686);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
@@ -29848,7 +31156,7 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5459;
+  fra.me.line = 5689;
   fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29860,11 +31168,11 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5461 */
+  /* parser/parser_prod.nit:5691 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 5461);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 5691);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29874,7 +31182,7 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5462 */
+    /* parser/parser_prod.nit:5692 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29889,32 +31197,32 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5463 */
+      /* parser/parser_prod.nit:5693 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5463);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5693);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5464 */
+      /* parser/parser_prod.nit:5694 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast TKwnew*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5464);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5694);
       }
-      /* parser/parser_prod.nit:5465 */
+      /* parser/parser_prod.nit:5695 */
       ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5467 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5467);
+      /* parser/parser_prod.nit:5697 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5697);
     }
-    /* parser/parser_prod.nit:5469 */
+    /* parser/parser_prod.nit:5699 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5471 */
+  /* parser/parser_prod.nit:5701 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 5471);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 5701);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29924,7 +31232,7 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5472 */
+    /* parser/parser_prod.nit:5702 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29939,28 +31247,28 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5473 */
+      /* parser/parser_prod.nit:5703 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5473);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5703);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5474 */
+      /* parser/parser_prod.nit:5704 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5474);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5704);
       }
-      /* parser/parser_prod.nit:5475 */
+      /* parser/parser_prod.nit:5705 */
       ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5477 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5477);
+      /* parser/parser_prod.nit:5707 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5707);
     }
-    /* parser/parser_prod.nit:5479 */
+    /* parser/parser_prod.nit:5709 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5481 */
+  /* parser/parser_prod.nit:5711 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -29975,7 +31283,7 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5482 */
+    /* parser/parser_prod.nit:5712 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29990,32 +31298,32 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5483 */
+      /* parser/parser_prod.nit:5713 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5483);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5713);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5484 */
+      /* parser/parser_prod.nit:5714 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5484);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5714);
       }
-      /* parser/parser_prod.nit:5485 */
+      /* parser/parser_prod.nit:5715 */
       ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5487 */
+      /* parser/parser_prod.nit:5717 */
       ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:5489 */
+    /* parser/parser_prod.nit:5719 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5491 */
+  /* parser/parser_prod.nit:5721 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5491);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5721);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30025,7 +31333,7 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5492 */
+    /* parser/parser_prod.nit:5722 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30040,25 +31348,25 @@ void parser___parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5493 */
+      /* parser/parser_prod.nit:5723 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5493);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5723);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5494 */
+      /* parser/parser_prod.nit:5724 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5494);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5724);
       }
-      /* parser/parser_prod.nit:5495 */
+      /* parser/parser_prod.nit:5725 */
       ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5497 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5497);
+      /* parser/parser_prod.nit:5727 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5727);
     }
-    /* parser/parser_prod.nit:5499 */
+    /* parser/parser_prod.nit:5729 */
     goto label1;
   }
   label1: while(0);
@@ -30073,7 +31381,7 @@ void parser___parser_prod___ANewExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5503;
+  fra.me.line = 5733;
   fra.me.meth = LOCATE_parser___parser_prod___ANewExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30084,25 +31392,25 @@ void parser___parser_prod___ANewExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5503 */
+  /* parser/parser_prod.nit:5733 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5505 */
+  /* parser/parser_prod.nit:5735 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 5505);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser___parser_prod, 5735);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_kwnew(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5506 */
+  /* parser/parser_prod.nit:5736 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 5506);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 5736);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_type(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5507 */
+  /* parser/parser_prod.nit:5737 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -30118,20 +31426,20 @@ void parser___parser_prod___ANewExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5508 */
+    /* parser/parser_prod.nit:5738 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___ANewExpr____n_id(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5508);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5738);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:5510 */
+  /* parser/parser_prod.nit:5740 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5510);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5740);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ANewExpr____n_args(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -30146,7 +31454,7 @@ void parser___parser_prod___AAttrExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos183]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5514;
+  fra.me.line = 5744;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -30166,7 +31474,7 @@ void parser___parser_prod___AAttrExpr___init_aattrexpr(val_t p0, val_t p1, val_t
   if (init_table[itpos184]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5516;
+  fra.me.line = 5746;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrExpr___init_aattrexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30178,34 +31486,34 @@ void parser___parser_prod___AAttrExpr___init_aattrexpr(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5516 */
+  /* parser/parser_prod.nit:5746 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5521 */
+  /* parser/parser_prod.nit:5751 */
   CALL_parser___parser_prod___AAttrExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:5522 */
+  /* parser/parser_prod.nit:5752 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5522);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5752);
   }
   ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5523 */
+  /* parser/parser_prod.nit:5753 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5523);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5753);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:5524 */
+  /* parser/parser_prod.nit:5754 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5524);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5754);
   }
   ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5525 */
+  /* parser/parser_prod.nit:5755 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5525);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5755);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -30220,7 +31528,7 @@ void parser___parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5528;
+  fra.me.line = 5758;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30232,11 +31540,11 @@ void parser___parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5530 */
+  /* parser/parser_prod.nit:5760 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5530);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5760);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30246,7 +31554,7 @@ void parser___parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5531 */
+    /* parser/parser_prod.nit:5761 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30261,32 +31569,32 @@ void parser___parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5532 */
+      /* parser/parser_prod.nit:5762 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5532);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5762);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5533 */
+      /* parser/parser_prod.nit:5763 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5533);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5763);
       }
-      /* parser/parser_prod.nit:5534 */
+      /* parser/parser_prod.nit:5764 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5536 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5536);
+      /* parser/parser_prod.nit:5766 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5766);
     }
-    /* parser/parser_prod.nit:5538 */
+    /* parser/parser_prod.nit:5768 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5540 */
+  /* parser/parser_prod.nit:5770 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5540);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5770);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30296,7 +31604,7 @@ void parser___parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5541 */
+    /* parser/parser_prod.nit:5771 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30311,25 +31619,25 @@ void parser___parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5542 */
+      /* parser/parser_prod.nit:5772 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5542);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5772);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5543 */
+      /* parser/parser_prod.nit:5773 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast TAttrid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5543);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5773);
       }
-      /* parser/parser_prod.nit:5544 */
+      /* parser/parser_prod.nit:5774 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5546 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5546);
+      /* parser/parser_prod.nit:5776 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5776);
     }
-    /* parser/parser_prod.nit:5548 */
+    /* parser/parser_prod.nit:5778 */
     goto label1;
   }
   label1: while(0);
@@ -30343,7 +31651,7 @@ void parser___parser_prod___AAttrExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5552;
+  fra.me.line = 5782;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -30353,19 +31661,19 @@ void parser___parser_prod___AAttrExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5554 */
+  /* parser/parser_prod.nit:5784 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5554);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5784);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5555 */
+  /* parser/parser_prod.nit:5785 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5555);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5785);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -30380,7 +31688,7 @@ void parser___parser_prod___AAttrAssignExpr___empty_init(val_t p0, int* init_tab
   if (init_table[itpos185]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5559;
+  fra.me.line = 5789;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -30400,7 +31708,7 @@ void parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr(val_t p0, val
   if (init_table[itpos186]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5561;
+  fra.me.line = 5791;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -30416,60 +31724,60 @@ void parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr(val_t p0, val
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:5561 */
+  /* parser/parser_prod.nit:5791 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5568 */
+  /* parser/parser_prod.nit:5798 */
   CALL_parser___parser_prod___AAttrAssignExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:5569 */
+  /* parser/parser_prod.nit:5799 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5569);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5799);
   }
   ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5570 */
+  /* parser/parser_prod.nit:5800 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5570);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5800);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5571 */
+  /* parser/parser_prod.nit:5801 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5571);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5801);
   }
   ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5572 */
+  /* parser/parser_prod.nit:5802 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5572);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5802);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5573 */
+  /* parser/parser_prod.nit:5803 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5573);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5803);
   }
   ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:5574 */
+  /* parser/parser_prod.nit:5804 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5574);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5804);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5575 */
+  /* parser/parser_prod.nit:5805 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5575);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5805);
   }
   ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:5576 */
+  /* parser/parser_prod.nit:5806 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5576);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5806);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
@@ -30484,7 +31792,7 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5579;
+  fra.me.line = 5809;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30496,11 +31804,11 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5581 */
+  /* parser/parser_prod.nit:5811 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5581);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5811);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30510,7 +31818,7 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5582 */
+    /* parser/parser_prod.nit:5812 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30525,32 +31833,32 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5583 */
+      /* parser/parser_prod.nit:5813 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5583);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5813);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5584 */
+      /* parser/parser_prod.nit:5814 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5584);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5814);
       }
-      /* parser/parser_prod.nit:5585 */
+      /* parser/parser_prod.nit:5815 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5587 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5587);
+      /* parser/parser_prod.nit:5817 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5817);
     }
-    /* parser/parser_prod.nit:5589 */
+    /* parser/parser_prod.nit:5819 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5591 */
+  /* parser/parser_prod.nit:5821 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5591);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5821);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30560,7 +31868,7 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5592 */
+    /* parser/parser_prod.nit:5822 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30575,32 +31883,32 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5593 */
+      /* parser/parser_prod.nit:5823 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5593);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5823);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5594 */
+      /* parser/parser_prod.nit:5824 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast TAttrid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5594);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5824);
       }
-      /* parser/parser_prod.nit:5595 */
+      /* parser/parser_prod.nit:5825 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5597 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5597);
+      /* parser/parser_prod.nit:5827 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5827);
     }
-    /* parser/parser_prod.nit:5599 */
+    /* parser/parser_prod.nit:5829 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5601 */
+  /* parser/parser_prod.nit:5831 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 5601);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 5831);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30610,7 +31918,7 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5602 */
+    /* parser/parser_prod.nit:5832 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30625,32 +31933,32 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5603 */
+      /* parser/parser_prod.nit:5833 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5603);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5833);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5604 */
+      /* parser/parser_prod.nit:5834 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5604);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5834);
       }
-      /* parser/parser_prod.nit:5605 */
+      /* parser/parser_prod.nit:5835 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5607 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5607);
+      /* parser/parser_prod.nit:5837 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5837);
     }
-    /* parser/parser_prod.nit:5609 */
+    /* parser/parser_prod.nit:5839 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5611 */
+  /* parser/parser_prod.nit:5841 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5611);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5841);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30660,7 +31968,7 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5612 */
+    /* parser/parser_prod.nit:5842 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30675,25 +31983,25 @@ void parser___parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5613 */
+      /* parser/parser_prod.nit:5843 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5613);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5843);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5614 */
+      /* parser/parser_prod.nit:5844 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5614);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5844);
       }
-      /* parser/parser_prod.nit:5615 */
+      /* parser/parser_prod.nit:5845 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5617 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5617);
+      /* parser/parser_prod.nit:5847 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5847);
     }
-    /* parser/parser_prod.nit:5619 */
+    /* parser/parser_prod.nit:5849 */
     goto label1;
   }
   label1: while(0);
@@ -30707,7 +32015,7 @@ void parser___parser_prod___AAttrAssignExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5623;
+  fra.me.line = 5853;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -30717,35 +32025,35 @@ void parser___parser_prod___AAttrAssignExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5625 */
+  /* parser/parser_prod.nit:5855 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5625);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5855);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5626 */
+  /* parser/parser_prod.nit:5856 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5626);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5856);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5627 */
+  /* parser/parser_prod.nit:5857 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 5627);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 5857);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5628 */
+  /* parser/parser_prod.nit:5858 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5628);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5858);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -30760,7 +32068,7 @@ void parser___parser_prod___AAttrReassignExpr___empty_init(val_t p0, int* init_t
   if (init_table[itpos187]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5632;
+  fra.me.line = 5862;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -30780,7 +32088,7 @@ void parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr(val_t p0,
   if (init_table[itpos188]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5634;
+  fra.me.line = 5864;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -30796,60 +32104,60 @@ void parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr(val_t p0,
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:5634 */
+  /* parser/parser_prod.nit:5864 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5641 */
+  /* parser/parser_prod.nit:5871 */
   CALL_parser___parser_prod___AAttrReassignExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:5642 */
+  /* parser/parser_prod.nit:5872 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5642);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5872);
   }
   ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5643 */
+  /* parser/parser_prod.nit:5873 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5643);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5873);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5644 */
+  /* parser/parser_prod.nit:5874 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5644);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5874);
   }
   ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5645 */
+  /* parser/parser_prod.nit:5875 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5645);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5875);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5646 */
+  /* parser/parser_prod.nit:5876 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5646);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5876);
   }
   ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:5647 */
+  /* parser/parser_prod.nit:5877 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5647);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5877);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5648 */
+  /* parser/parser_prod.nit:5878 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5648);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5878);
   }
   ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:5649 */
+  /* parser/parser_prod.nit:5879 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5649);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5879);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
@@ -30864,7 +32172,7 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5652;
+  fra.me.line = 5882;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30876,11 +32184,11 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5654 */
+  /* parser/parser_prod.nit:5884 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5654);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5884);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30890,7 +32198,7 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5655 */
+    /* parser/parser_prod.nit:5885 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30905,32 +32213,32 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5656 */
+      /* parser/parser_prod.nit:5886 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5656);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5886);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5657 */
+      /* parser/parser_prod.nit:5887 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5657);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5887);
       }
-      /* parser/parser_prod.nit:5658 */
+      /* parser/parser_prod.nit:5888 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5660 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5660);
+      /* parser/parser_prod.nit:5890 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5890);
     }
-    /* parser/parser_prod.nit:5662 */
+    /* parser/parser_prod.nit:5892 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5664 */
+  /* parser/parser_prod.nit:5894 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5664);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5894);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30940,7 +32248,7 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5665 */
+    /* parser/parser_prod.nit:5895 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30955,32 +32263,32 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5666 */
+      /* parser/parser_prod.nit:5896 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5666);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5896);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5667 */
+      /* parser/parser_prod.nit:5897 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast TAttrid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5667);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5897);
       }
-      /* parser/parser_prod.nit:5668 */
+      /* parser/parser_prod.nit:5898 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5670 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5670);
+      /* parser/parser_prod.nit:5900 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5900);
     }
-    /* parser/parser_prod.nit:5672 */
+    /* parser/parser_prod.nit:5902 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5674 */
+  /* parser/parser_prod.nit:5904 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 5674);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 5904);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30990,7 +32298,7 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5675 */
+    /* parser/parser_prod.nit:5905 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31005,32 +32313,32 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5676 */
+      /* parser/parser_prod.nit:5906 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5676);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5906);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5677 */
+      /* parser/parser_prod.nit:5907 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast AAssignOp*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5677);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5907);
       }
-      /* parser/parser_prod.nit:5678 */
+      /* parser/parser_prod.nit:5908 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5680 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5680);
+      /* parser/parser_prod.nit:5910 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5910);
     }
-    /* parser/parser_prod.nit:5682 */
+    /* parser/parser_prod.nit:5912 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5684 */
+  /* parser/parser_prod.nit:5914 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5684);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5914);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31040,7 +32348,7 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5685 */
+    /* parser/parser_prod.nit:5915 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31055,25 +32363,25 @@ void parser___parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5686 */
+      /* parser/parser_prod.nit:5916 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5686);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5916);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5687 */
+      /* parser/parser_prod.nit:5917 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5687);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5917);
       }
-      /* parser/parser_prod.nit:5688 */
+      /* parser/parser_prod.nit:5918 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5690 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5690);
+      /* parser/parser_prod.nit:5920 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5920);
     }
-    /* parser/parser_prod.nit:5692 */
+    /* parser/parser_prod.nit:5922 */
     goto label1;
   }
   label1: while(0);
@@ -31087,7 +32395,7 @@ void parser___parser_prod___AAttrReassignExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5696;
+  fra.me.line = 5926;
   fra.me.meth = LOCATE_parser___parser_prod___AAttrReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -31097,35 +32405,35 @@ void parser___parser_prod___AAttrReassignExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5698 */
+  /* parser/parser_prod.nit:5928 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5698);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5928);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5699 */
+  /* parser/parser_prod.nit:5929 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5699);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5929);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5700 */
+  /* parser/parser_prod.nit:5930 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 5700);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 5930);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5701 */
+  /* parser/parser_prod.nit:5931 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5701);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5931);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -31140,7 +32448,7 @@ void parser___parser_prod___ACallExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos189]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5705;
+  fra.me.line = 5935;
   fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -31160,7 +32468,7 @@ void parser___parser_prod___ACallExpr___init_acallexpr(val_t p0, val_t p1, val_t
   if (init_table[itpos190]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5707;
+  fra.me.line = 5937;
   fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___init_acallexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -31176,47 +32484,47 @@ void parser___parser_prod___ACallExpr___init_acallexpr(val_t p0, val_t p1, val_t
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:5707 */
+  /* parser/parser_prod.nit:5937 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5714 */
+  /* parser/parser_prod.nit:5944 */
   CALL_parser___parser_prod___ACallExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:5715 */
+  /* parser/parser_prod.nit:5945 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5715);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5945);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5716 */
+  /* parser/parser_prod.nit:5946 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5716);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5946);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5717 */
+  /* parser/parser_prod.nit:5947 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5717);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5947);
   }
   ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5718 */
+  /* parser/parser_prod.nit:5948 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5718);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5948);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:5719 */
+  /* parser/parser_prod.nit:5949 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5719);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5949);
   }
   ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:5720 */
+  /* parser/parser_prod.nit:5950 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5720);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5950);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[4])(fra.me.REG[4], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ACallExpr___init_acallexpr_1));
@@ -31229,7 +32537,7 @@ void parser___parser_prod___ACallExpr___init_acallexpr(val_t p0, val_t p1, val_t
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:5721 */
+    /* parser/parser_prod.nit:5951 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -31243,21 +32551,21 @@ void parser___parser_prod___ACallExpr___init_acallexpr(val_t p0, val_t p1, val_t
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:5722 */
+    /* parser/parser_prod.nit:5952 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AClosureDef, ID_parser___parser_nodes___AClosureDef)) /*cast AClosureDef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5722);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5952);
     }
-    /* parser/parser_prod.nit:5723 */
+    /* parser/parser_prod.nit:5953 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(closctx->REG[5])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5723);
+      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5953);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(closctx->REG[5]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:5724 */
+    /* parser/parser_prod.nit:5954 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[5]);
     stack_frame_head = fra.me.prev;
     return;
@@ -31273,7 +32581,7 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5728;
+  fra.me.line = 5958;
   fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -31285,11 +32593,11 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5730 */
+  /* parser/parser_prod.nit:5960 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5730);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5960);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31299,7 +32607,7 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5731 */
+    /* parser/parser_prod.nit:5961 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31314,32 +32622,32 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5732 */
+      /* parser/parser_prod.nit:5962 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5732);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5962);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5733 */
+      /* parser/parser_prod.nit:5963 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5733);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5963);
       }
-      /* parser/parser_prod.nit:5734 */
+      /* parser/parser_prod.nit:5964 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5736 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5736);
+      /* parser/parser_prod.nit:5966 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5966);
     }
-    /* parser/parser_prod.nit:5738 */
+    /* parser/parser_prod.nit:5968 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5740 */
+  /* parser/parser_prod.nit:5970 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5740);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5970);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31349,7 +32657,7 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5741 */
+    /* parser/parser_prod.nit:5971 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31364,32 +32672,32 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5742 */
+      /* parser/parser_prod.nit:5972 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5742);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5972);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5743 */
+      /* parser/parser_prod.nit:5973 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5743);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5973);
       }
-      /* parser/parser_prod.nit:5744 */
+      /* parser/parser_prod.nit:5974 */
       ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5746 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5746);
+      /* parser/parser_prod.nit:5976 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5976);
     }
-    /* parser/parser_prod.nit:5748 */
+    /* parser/parser_prod.nit:5978 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5750 */
+  /* parser/parser_prod.nit:5980 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5750);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5980);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31399,7 +32707,7 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5751 */
+    /* parser/parser_prod.nit:5981 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31414,33 +32722,33 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5752 */
+      /* parser/parser_prod.nit:5982 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5752);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5982);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5753 */
+      /* parser/parser_prod.nit:5983 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5753);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5983);
       }
-      /* parser/parser_prod.nit:5754 */
+      /* parser/parser_prod.nit:5984 */
       ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5756 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5756);
+      /* parser/parser_prod.nit:5986 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5986);
     }
-    /* parser/parser_prod.nit:5758 */
+    /* parser/parser_prod.nit:5988 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5760 */
+  /* parser/parser_prod.nit:5990 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5760);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5990);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -31455,13 +32763,13 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:5760 */
+      /* parser/parser_prod.nit:5990 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:5761 */
+      /* parser/parser_prod.nit:5991 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5761);
+        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5991);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -31478,7 +32786,7 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:5762 */
+        /* parser/parser_prod.nit:5992 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -31493,37 +32801,37 @@ void parser___parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:5763 */
+          /* parser/parser_prod.nit:5993 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AClosureDef, ID_parser___parser_nodes___AClosureDef)) /*cast AClosureDef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5763);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5993);
           }
-          /* parser/parser_prod.nit:5764 */
+          /* parser/parser_prod.nit:5994 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5764);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5994);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:5765 */
+          /* parser/parser_prod.nit:5995 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5765);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5995);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:5767 */
+          /* parser/parser_prod.nit:5997 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5767);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5997);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:5769 */
+        /* parser/parser_prod.nit:5999 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -31549,7 +32857,7 @@ void parser___parser_prod___ACallExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5774;
+  fra.me.line = 6004;
   fra.me.meth = LOCATE_parser___parser_prod___ACallExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -31559,35 +32867,35 @@ void parser___parser_prod___ACallExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5776 */
+  /* parser/parser_prod.nit:6006 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5776);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6006);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5777 */
+  /* parser/parser_prod.nit:6007 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5777);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6007);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5778 */
+  /* parser/parser_prod.nit:6008 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5778);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6008);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5779 */
+  /* parser/parser_prod.nit:6009 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 5779);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6009);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ACallExpr___visit_all_1));
@@ -31610,7 +32918,7 @@ void parser___parser_prod___ACallExpr___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:5780 */
+    /* parser/parser_prod.nit:6010 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -31623,7 +32931,7 @@ void parser___parser_prod___ACallAssignExpr___empty_init(val_t p0, int* init_tab
   if (init_table[itpos191]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5785;
+  fra.me.line = 6015;
   fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -31643,7 +32951,7 @@ void parser___parser_prod___ACallAssignExpr___init_acallassignexpr(val_t p0, val
   if (init_table[itpos192]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5787;
+  fra.me.line = 6017;
   fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___init_acallassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -31661,73 +32969,73 @@ void parser___parser_prod___ACallAssignExpr___init_acallassignexpr(val_t p0, val
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:5787 */
+  /* parser/parser_prod.nit:6017 */
   fra.me.REG[6] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5795 */
+  /* parser/parser_prod.nit:6025 */
   CALL_parser___parser_prod___ACallAssignExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
-  /* parser/parser_prod.nit:5796 */
+  /* parser/parser_prod.nit:6026 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5796);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6026);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[6]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5797 */
+  /* parser/parser_prod.nit:6027 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5797);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6027);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-  /* parser/parser_prod.nit:5798 */
+  /* parser/parser_prod.nit:6028 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5798);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6028);
   }
   ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[6]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5799 */
+  /* parser/parser_prod.nit:6029 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5799);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6029);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
-  /* parser/parser_prod.nit:5800 */
+  /* parser/parser_prod.nit:6030 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5800);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6030);
   }
   ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[6]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:5801 */
+  /* parser/parser_prod.nit:6031 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5801);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6031);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
-  /* parser/parser_prod.nit:5802 */
+  /* parser/parser_prod.nit:6032 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5802);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6032);
   }
   ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[6]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:5803 */
+  /* parser/parser_prod.nit:6033 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5803);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6033);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-  /* parser/parser_prod.nit:5804 */
+  /* parser/parser_prod.nit:6034 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5804);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6034);
   }
   ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[6]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:5805 */
+  /* parser/parser_prod.nit:6035 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5805);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6035);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   stack_frame_head = fra.me.prev;
@@ -31742,7 +33050,7 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5808;
+  fra.me.line = 6038;
   fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -31754,11 +33062,11 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5810 */
+  /* parser/parser_prod.nit:6040 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5810);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6040);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31768,7 +33076,7 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5811 */
+    /* parser/parser_prod.nit:6041 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31783,32 +33091,32 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5812 */
+      /* parser/parser_prod.nit:6042 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5812);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6042);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5813 */
+      /* parser/parser_prod.nit:6043 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5813);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6043);
       }
-      /* parser/parser_prod.nit:5814 */
+      /* parser/parser_prod.nit:6044 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5816 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5816);
+      /* parser/parser_prod.nit:6046 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6046);
     }
-    /* parser/parser_prod.nit:5818 */
+    /* parser/parser_prod.nit:6048 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5820 */
+  /* parser/parser_prod.nit:6050 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5820);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6050);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31818,7 +33126,7 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5821 */
+    /* parser/parser_prod.nit:6051 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31833,32 +33141,32 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5822 */
+      /* parser/parser_prod.nit:6052 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5822);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6052);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5823 */
+      /* parser/parser_prod.nit:6053 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5823);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6053);
       }
-      /* parser/parser_prod.nit:5824 */
+      /* parser/parser_prod.nit:6054 */
       ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5826 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5826);
+      /* parser/parser_prod.nit:6056 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6056);
     }
-    /* parser/parser_prod.nit:5828 */
+    /* parser/parser_prod.nit:6058 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5830 */
+  /* parser/parser_prod.nit:6060 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5830);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6060);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31868,7 +33176,7 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5831 */
+    /* parser/parser_prod.nit:6061 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31883,32 +33191,32 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5832 */
+      /* parser/parser_prod.nit:6062 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5832);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6062);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5833 */
+      /* parser/parser_prod.nit:6063 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5833);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6063);
       }
-      /* parser/parser_prod.nit:5834 */
+      /* parser/parser_prod.nit:6064 */
       ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5836 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5836);
+      /* parser/parser_prod.nit:6066 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6066);
     }
-    /* parser/parser_prod.nit:5838 */
+    /* parser/parser_prod.nit:6068 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5840 */
+  /* parser/parser_prod.nit:6070 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 5840);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6070);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31918,7 +33226,7 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5841 */
+    /* parser/parser_prod.nit:6071 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31933,32 +33241,32 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5842 */
+      /* parser/parser_prod.nit:6072 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5842);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6072);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5843 */
+      /* parser/parser_prod.nit:6073 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5843);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6073);
       }
-      /* parser/parser_prod.nit:5844 */
+      /* parser/parser_prod.nit:6074 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5846 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5846);
+      /* parser/parser_prod.nit:6076 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6076);
     }
-    /* parser/parser_prod.nit:5848 */
+    /* parser/parser_prod.nit:6078 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5850 */
+  /* parser/parser_prod.nit:6080 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5850);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6080);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31968,7 +33276,7 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5851 */
+    /* parser/parser_prod.nit:6081 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31983,25 +33291,25 @@ void parser___parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5852 */
+      /* parser/parser_prod.nit:6082 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5852);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6082);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5853 */
+      /* parser/parser_prod.nit:6083 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5853);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6083);
       }
-      /* parser/parser_prod.nit:5854 */
+      /* parser/parser_prod.nit:6084 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5856 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5856);
+      /* parser/parser_prod.nit:6086 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6086);
     }
-    /* parser/parser_prod.nit:5858 */
+    /* parser/parser_prod.nit:6088 */
     goto label1;
   }
   label1: while(0);
@@ -32015,7 +33323,7 @@ void parser___parser_prod___ACallAssignExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5862;
+  fra.me.line = 6092;
   fra.me.meth = LOCATE_parser___parser_prod___ACallAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -32025,43 +33333,43 @@ void parser___parser_prod___ACallAssignExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5864 */
+  /* parser/parser_prod.nit:6094 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5864);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6094);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5865 */
+  /* parser/parser_prod.nit:6095 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5865);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6095);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5866 */
+  /* parser/parser_prod.nit:6096 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5866);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6096);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5867 */
+  /* parser/parser_prod.nit:6097 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 5867);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6097);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5868 */
+  /* parser/parser_prod.nit:6098 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5868);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6098);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -32076,7 +33384,7 @@ void parser___parser_prod___ACallReassignExpr___empty_init(val_t p0, int* init_t
   if (init_table[itpos193]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5872;
+  fra.me.line = 6102;
   fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -32096,7 +33404,7 @@ void parser___parser_prod___ACallReassignExpr___init_acallreassignexpr(val_t p0,
   if (init_table[itpos194]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5874;
+  fra.me.line = 6104;
   fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___init_acallreassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -32114,73 +33422,73 @@ void parser___parser_prod___ACallReassignExpr___init_acallreassignexpr(val_t p0,
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:5874 */
+  /* parser/parser_prod.nit:6104 */
   fra.me.REG[6] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5882 */
+  /* parser/parser_prod.nit:6112 */
   CALL_parser___parser_prod___ACallReassignExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
-  /* parser/parser_prod.nit:5883 */
+  /* parser/parser_prod.nit:6113 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5883);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6113);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[6]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5884 */
+  /* parser/parser_prod.nit:6114 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5884);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6114);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-  /* parser/parser_prod.nit:5885 */
+  /* parser/parser_prod.nit:6115 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5885);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6115);
   }
   ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[6]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5886 */
+  /* parser/parser_prod.nit:6116 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5886);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6116);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
-  /* parser/parser_prod.nit:5887 */
+  /* parser/parser_prod.nit:6117 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5887);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6117);
   }
   ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[6]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:5888 */
+  /* parser/parser_prod.nit:6118 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5888);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6118);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
-  /* parser/parser_prod.nit:5889 */
+  /* parser/parser_prod.nit:6119 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5889);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6119);
   }
   ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[6]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:5890 */
+  /* parser/parser_prod.nit:6120 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5890);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6120);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-  /* parser/parser_prod.nit:5891 */
+  /* parser/parser_prod.nit:6121 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5891);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6121);
   }
   ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[6]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:5892 */
+  /* parser/parser_prod.nit:6122 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5892);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6122);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   stack_frame_head = fra.me.prev;
@@ -32195,7 +33503,7 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5895;
+  fra.me.line = 6125;
   fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -32207,11 +33515,11 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5897 */
+  /* parser/parser_prod.nit:6127 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5897);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6127);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32221,7 +33529,7 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5898 */
+    /* parser/parser_prod.nit:6128 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32236,32 +33544,32 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5899 */
+      /* parser/parser_prod.nit:6129 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5899);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6129);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5900 */
+      /* parser/parser_prod.nit:6130 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5900);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6130);
       }
-      /* parser/parser_prod.nit:5901 */
+      /* parser/parser_prod.nit:6131 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5903 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5903);
+      /* parser/parser_prod.nit:6133 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6133);
     }
-    /* parser/parser_prod.nit:5905 */
+    /* parser/parser_prod.nit:6135 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5907 */
+  /* parser/parser_prod.nit:6137 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5907);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6137);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32271,7 +33579,7 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5908 */
+    /* parser/parser_prod.nit:6138 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32286,32 +33594,32 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5909 */
+      /* parser/parser_prod.nit:6139 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5909);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6139);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5910 */
+      /* parser/parser_prod.nit:6140 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5910);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6140);
       }
-      /* parser/parser_prod.nit:5911 */
+      /* parser/parser_prod.nit:6141 */
       ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5913 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5913);
+      /* parser/parser_prod.nit:6143 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6143);
     }
-    /* parser/parser_prod.nit:5915 */
+    /* parser/parser_prod.nit:6145 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5917 */
+  /* parser/parser_prod.nit:6147 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5917);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6147);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32321,7 +33629,7 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5918 */
+    /* parser/parser_prod.nit:6148 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32336,32 +33644,32 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5919 */
+      /* parser/parser_prod.nit:6149 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5919);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6149);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5920 */
+      /* parser/parser_prod.nit:6150 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5920);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6150);
       }
-      /* parser/parser_prod.nit:5921 */
+      /* parser/parser_prod.nit:6151 */
       ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5923 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5923);
+      /* parser/parser_prod.nit:6153 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6153);
     }
-    /* parser/parser_prod.nit:5925 */
+    /* parser/parser_prod.nit:6155 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5927 */
+  /* parser/parser_prod.nit:6157 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 5927);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6157);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32371,7 +33679,7 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5928 */
+    /* parser/parser_prod.nit:6158 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32386,32 +33694,32 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5929 */
+      /* parser/parser_prod.nit:6159 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5929);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6159);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5930 */
+      /* parser/parser_prod.nit:6160 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast AAssignOp*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5930);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6160);
       }
-      /* parser/parser_prod.nit:5931 */
+      /* parser/parser_prod.nit:6161 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5933 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5933);
+      /* parser/parser_prod.nit:6163 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6163);
     }
-    /* parser/parser_prod.nit:5935 */
+    /* parser/parser_prod.nit:6165 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5937 */
+  /* parser/parser_prod.nit:6167 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5937);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6167);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32421,7 +33729,7 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5938 */
+    /* parser/parser_prod.nit:6168 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32436,25 +33744,25 @@ void parser___parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5939 */
+      /* parser/parser_prod.nit:6169 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5939);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6169);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5940 */
+      /* parser/parser_prod.nit:6170 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5940);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6170);
       }
-      /* parser/parser_prod.nit:5941 */
+      /* parser/parser_prod.nit:6171 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5943 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5943);
+      /* parser/parser_prod.nit:6173 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6173);
     }
-    /* parser/parser_prod.nit:5945 */
+    /* parser/parser_prod.nit:6175 */
     goto label1;
   }
   label1: while(0);
@@ -32468,7 +33776,7 @@ void parser___parser_prod___ACallReassignExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5949;
+  fra.me.line = 6179;
   fra.me.meth = LOCATE_parser___parser_prod___ACallReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -32478,43 +33786,43 @@ void parser___parser_prod___ACallReassignExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:5951 */
+  /* parser/parser_prod.nit:6181 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 5951);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6181);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5952 */
+  /* parser/parser_prod.nit:6182 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 5952);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6182);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5953 */
+  /* parser/parser_prod.nit:6183 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 5953);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6183);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5954 */
+  /* parser/parser_prod.nit:6184 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 5954);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6184);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:5955 */
+  /* parser/parser_prod.nit:6185 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 5955);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6185);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -32529,7 +33837,7 @@ void parser___parser_prod___ASuperExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos195]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5959;
+  fra.me.line = 6189;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -32550,7 +33858,7 @@ void parser___parser_prod___ASuperExpr___init_asuperexpr(val_t p0, val_t p1, val
   if (init_table[itpos196]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5961;
+  fra.me.line = 6191;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___init_asuperexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -32564,13 +33872,13 @@ void parser___parser_prod___ASuperExpr___init_asuperexpr(val_t p0, val_t p1, val
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:5961 */
+  /* parser/parser_prod.nit:6191 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:5967 */
+  /* parser/parser_prod.nit:6197 */
   CALL_parser___parser_prod___ASuperExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:5968 */
+  /* parser/parser_prod.nit:6198 */
   ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:5969 */
+  /* parser/parser_prod.nit:6199 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -32585,37 +33893,37 @@ void parser___parser_prod___ASuperExpr___init_asuperexpr(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5970 */
+    /* parser/parser_prod.nit:6200 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5970);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6200);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   }
-  /* parser/parser_prod.nit:5972 */
+  /* parser/parser_prod.nit:6202 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5972);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6202);
   }
   ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:5973 */
+  /* parser/parser_prod.nit:6203 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5973);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6203);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:5974 */
+  /* parser/parser_prod.nit:6204 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 5974);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6204);
   }
   ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:5975 */
+  /* parser/parser_prod.nit:6205 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5975);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6205);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
@@ -32630,7 +33938,7 @@ void parser___parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 5978;
+  fra.me.line = 6208;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -32642,7 +33950,7 @@ void parser___parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:5980 */
+  /* parser/parser_prod.nit:6210 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -32657,7 +33965,7 @@ void parser___parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5981 */
+    /* parser/parser_prod.nit:6211 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32672,32 +33980,32 @@ void parser___parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5982 */
+      /* parser/parser_prod.nit:6212 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5982);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6212);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5983 */
+      /* parser/parser_prod.nit:6213 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AQualified, ID_parser___parser_nodes___AQualified)) /*cast AQualified*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5983);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6213);
       }
-      /* parser/parser_prod.nit:5984 */
+      /* parser/parser_prod.nit:6214 */
       ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5986 */
+      /* parser/parser_prod.nit:6216 */
       ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:5988 */
+    /* parser/parser_prod.nit:6218 */
     goto label1;
   }
-  /* parser/parser_prod.nit:5990 */
+  /* parser/parser_prod.nit:6220 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 5990);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 6220);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32707,7 +34015,7 @@ void parser___parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:5991 */
+    /* parser/parser_prod.nit:6221 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32722,32 +34030,32 @@ void parser___parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:5992 */
+      /* parser/parser_prod.nit:6222 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 5992);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6222);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:5993 */
+      /* parser/parser_prod.nit:6223 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast TKwsuper*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 5993);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6223);
       }
-      /* parser/parser_prod.nit:5994 */
+      /* parser/parser_prod.nit:6224 */
       ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:5996 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 5996);
+      /* parser/parser_prod.nit:6226 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6226);
     }
-    /* parser/parser_prod.nit:5998 */
+    /* parser/parser_prod.nit:6228 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6000 */
+  /* parser/parser_prod.nit:6230 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6000);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6230);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32757,7 +34065,7 @@ void parser___parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6001 */
+    /* parser/parser_prod.nit:6231 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32772,25 +34080,25 @@ void parser___parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6002 */
+      /* parser/parser_prod.nit:6232 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6002);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6232);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6003 */
+      /* parser/parser_prod.nit:6233 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6003);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6233);
       }
-      /* parser/parser_prod.nit:6004 */
+      /* parser/parser_prod.nit:6234 */
       ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6006 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6006);
+      /* parser/parser_prod.nit:6236 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6236);
     }
-    /* parser/parser_prod.nit:6008 */
+    /* parser/parser_prod.nit:6238 */
     goto label1;
   }
   label1: while(0);
@@ -32805,7 +34113,7 @@ void parser___parser_prod___ASuperExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6012;
+  fra.me.line = 6242;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -32816,9 +34124,9 @@ void parser___parser_prod___ASuperExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6012 */
+  /* parser/parser_prod.nit:6242 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6014 */
+  /* parser/parser_prod.nit:6244 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -32834,28 +34142,28 @@ void parser___parser_prod___ASuperExpr___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6015 */
+    /* parser/parser_prod.nit:6245 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExpr____n_qualified(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AQualified, ID_parser___parser_nodes___AQualified)) /*cast AQualified*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6015);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6245);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:6017 */
+  /* parser/parser_prod.nit:6247 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 6017);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 6247);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:6018 */
+  /* parser/parser_prod.nit:6248 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6018);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6248);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASuperExpr____n_args(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -32870,7 +34178,7 @@ void parser___parser_prod___AInitExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos197]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6022;
+  fra.me.line = 6252;
   fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -32890,7 +34198,7 @@ void parser___parser_prod___AInitExpr___init_ainitexpr(val_t p0, val_t p1, val_t
   if (init_table[itpos198]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6024;
+  fra.me.line = 6254;
   fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___init_ainitexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -32904,47 +34212,47 @@ void parser___parser_prod___AInitExpr___init_ainitexpr(val_t p0, val_t p1, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:6024 */
+  /* parser/parser_prod.nit:6254 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6030 */
+  /* parser/parser_prod.nit:6260 */
   CALL_parser___parser_prod___AInitExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:6031 */
+  /* parser/parser_prod.nit:6261 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6031);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6261);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6032 */
+  /* parser/parser_prod.nit:6262 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6032);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6262);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6033 */
+  /* parser/parser_prod.nit:6263 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6033);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6263);
   }
   ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6034 */
+  /* parser/parser_prod.nit:6264 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6034);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6264);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6035 */
+  /* parser/parser_prod.nit:6265 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6035);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6265);
   }
   ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6036 */
+  /* parser/parser_prod.nit:6266 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6036);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6266);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
@@ -32959,7 +34267,7 @@ void parser___parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6039;
+  fra.me.line = 6269;
   fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -32971,11 +34279,11 @@ void parser___parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6041 */
+  /* parser/parser_prod.nit:6271 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6041);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6271);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32985,7 +34293,7 @@ void parser___parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6042 */
+    /* parser/parser_prod.nit:6272 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33000,32 +34308,32 @@ void parser___parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6043 */
+      /* parser/parser_prod.nit:6273 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6043);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6273);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6044 */
+      /* parser/parser_prod.nit:6274 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6044);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6274);
       }
-      /* parser/parser_prod.nit:6045 */
+      /* parser/parser_prod.nit:6275 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6047 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6047);
+      /* parser/parser_prod.nit:6277 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6277);
     }
-    /* parser/parser_prod.nit:6049 */
+    /* parser/parser_prod.nit:6279 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6051 */
+  /* parser/parser_prod.nit:6281 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 6051);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 6281);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33035,7 +34343,7 @@ void parser___parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6052 */
+    /* parser/parser_prod.nit:6282 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33050,32 +34358,32 @@ void parser___parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6053 */
+      /* parser/parser_prod.nit:6283 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6053);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6283);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6054 */
+      /* parser/parser_prod.nit:6284 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast TKwinit*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6054);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6284);
       }
-      /* parser/parser_prod.nit:6055 */
+      /* parser/parser_prod.nit:6285 */
       ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6057 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6057);
+      /* parser/parser_prod.nit:6287 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6287);
     }
-    /* parser/parser_prod.nit:6059 */
+    /* parser/parser_prod.nit:6289 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6061 */
+  /* parser/parser_prod.nit:6291 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6061);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6291);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33085,7 +34393,7 @@ void parser___parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6062 */
+    /* parser/parser_prod.nit:6292 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33100,25 +34408,25 @@ void parser___parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6063 */
+      /* parser/parser_prod.nit:6293 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6063);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6293);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6064 */
+      /* parser/parser_prod.nit:6294 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6064);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6294);
       }
-      /* parser/parser_prod.nit:6065 */
+      /* parser/parser_prod.nit:6295 */
       ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6067 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6067);
+      /* parser/parser_prod.nit:6297 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6297);
     }
-    /* parser/parser_prod.nit:6069 */
+    /* parser/parser_prod.nit:6299 */
     goto label1;
   }
   label1: while(0);
@@ -33132,7 +34440,7 @@ void parser___parser_prod___AInitExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6073;
+  fra.me.line = 6303;
   fra.me.meth = LOCATE_parser___parser_prod___AInitExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -33142,27 +34450,27 @@ void parser___parser_prod___AInitExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6075 */
+  /* parser/parser_prod.nit:6305 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6075);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6305);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6076 */
+  /* parser/parser_prod.nit:6306 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 6076);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser___parser_prod, 6306);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6077 */
+  /* parser/parser_prod.nit:6307 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6077);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6307);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -33177,7 +34485,7 @@ void parser___parser_prod___ABraExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos199]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6081;
+  fra.me.line = 6311;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -33197,7 +34505,7 @@ void parser___parser_prod___ABraExpr___init_abraexpr(val_t p0, val_t p1, val_t p
   if (init_table[itpos200]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6083;
+  fra.me.line = 6313;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___init_abraexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -33211,34 +34519,34 @@ void parser___parser_prod___ABraExpr___init_abraexpr(val_t p0, val_t p1, val_t p
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:6083 */
+  /* parser/parser_prod.nit:6313 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6089 */
+  /* parser/parser_prod.nit:6319 */
   CALL_parser___parser_prod___ABraExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:6090 */
+  /* parser/parser_prod.nit:6320 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6090);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6320);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6091 */
+  /* parser/parser_prod.nit:6321 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6091);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6321);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6092 */
+  /* parser/parser_prod.nit:6322 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6092);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6322);
   }
   ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6093 */
+  /* parser/parser_prod.nit:6323 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6093);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6323);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABraExpr___init_abraexpr_1));
@@ -33251,7 +34559,7 @@ void parser___parser_prod___ABraExpr___init_abraexpr(val_t p0, val_t p1, val_t p
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:6094 */
+    /* parser/parser_prod.nit:6324 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -33265,21 +34573,21 @@ void parser___parser_prod___ABraExpr___init_abraexpr(val_t p0, val_t p1, val_t p
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:6095 */
+    /* parser/parser_prod.nit:6325 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AClosureDef, ID_parser___parser_nodes___AClosureDef)) /*cast AClosureDef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6095);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6325);
     }
-    /* parser/parser_prod.nit:6096 */
+    /* parser/parser_prod.nit:6326 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(closctx->REG[4])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6096);
+      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6326);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(closctx->REG[4]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:6097 */
+    /* parser/parser_prod.nit:6327 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
     stack_frame_head = fra.me.prev;
     return;
@@ -33295,7 +34603,7 @@ void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6101;
+  fra.me.line = 6331;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -33307,11 +34615,11 @@ void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6103 */
+  /* parser/parser_prod.nit:6333 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6103);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6333);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33321,7 +34629,7 @@ void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6104 */
+    /* parser/parser_prod.nit:6334 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33336,32 +34644,32 @@ void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6105 */
+      /* parser/parser_prod.nit:6335 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6105);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6335);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6106 */
+      /* parser/parser_prod.nit:6336 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6106);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6336);
       }
-      /* parser/parser_prod.nit:6107 */
+      /* parser/parser_prod.nit:6337 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6109 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6109);
+      /* parser/parser_prod.nit:6339 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6339);
     }
-    /* parser/parser_prod.nit:6111 */
+    /* parser/parser_prod.nit:6341 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6113 */
+  /* parser/parser_prod.nit:6343 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6113);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6343);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33371,7 +34679,7 @@ void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6114 */
+    /* parser/parser_prod.nit:6344 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33386,33 +34694,33 @@ void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6115 */
+      /* parser/parser_prod.nit:6345 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6115);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6345);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6116 */
+      /* parser/parser_prod.nit:6346 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6116);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6346);
       }
-      /* parser/parser_prod.nit:6117 */
+      /* parser/parser_prod.nit:6347 */
       ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6119 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6119);
+      /* parser/parser_prod.nit:6349 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6349);
     }
-    /* parser/parser_prod.nit:6121 */
+    /* parser/parser_prod.nit:6351 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6123 */
+  /* parser/parser_prod.nit:6353 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6123);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6353);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -33427,13 +34735,13 @@ void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:6123 */
+      /* parser/parser_prod.nit:6353 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:6124 */
+      /* parser/parser_prod.nit:6354 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6124);
+        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6354);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -33450,7 +34758,7 @@ void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:6125 */
+        /* parser/parser_prod.nit:6355 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -33465,37 +34773,37 @@ void parser___parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:6126 */
+          /* parser/parser_prod.nit:6356 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AClosureDef, ID_parser___parser_nodes___AClosureDef)) /*cast AClosureDef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6126);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6356);
           }
-          /* parser/parser_prod.nit:6127 */
+          /* parser/parser_prod.nit:6357 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6127);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6357);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:6128 */
+          /* parser/parser_prod.nit:6358 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6128);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6358);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:6130 */
+          /* parser/parser_prod.nit:6360 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6130);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6360);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:6132 */
+        /* parser/parser_prod.nit:6362 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -33521,7 +34829,7 @@ void parser___parser_prod___ABraExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6137;
+  fra.me.line = 6367;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -33531,27 +34839,27 @@ void parser___parser_prod___ABraExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6139 */
+  /* parser/parser_prod.nit:6369 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6139);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6369);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6140 */
+  /* parser/parser_prod.nit:6370 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6140);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6370);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6141 */
+  /* parser/parser_prod.nit:6371 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6141);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6371);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABraExpr___visit_all_1));
@@ -33574,7 +34882,7 @@ void parser___parser_prod___ABraExpr___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:6142 */
+    /* parser/parser_prod.nit:6372 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -33587,7 +34895,7 @@ void parser___parser_prod___ABraAssignExpr___empty_init(val_t p0, int* init_tabl
   if (init_table[itpos201]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6147;
+  fra.me.line = 6377;
   fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -33607,7 +34915,7 @@ void parser___parser_prod___ABraAssignExpr___init_abraassignexpr(val_t p0, val_t
   if (init_table[itpos202]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6149;
+  fra.me.line = 6379;
   fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___init_abraassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -33623,60 +34931,60 @@ void parser___parser_prod___ABraAssignExpr___init_abraassignexpr(val_t p0, val_t
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:6149 */
+  /* parser/parser_prod.nit:6379 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6156 */
+  /* parser/parser_prod.nit:6386 */
   CALL_parser___parser_prod___ABraAssignExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:6157 */
+  /* parser/parser_prod.nit:6387 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6157);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6387);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6158 */
+  /* parser/parser_prod.nit:6388 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6158);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6388);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6159 */
+  /* parser/parser_prod.nit:6389 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6159);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6389);
   }
   ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6160 */
+  /* parser/parser_prod.nit:6390 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6160);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6390);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6161 */
+  /* parser/parser_prod.nit:6391 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6161);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6391);
   }
   ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6162 */
+  /* parser/parser_prod.nit:6392 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6162);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6392);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6163 */
+  /* parser/parser_prod.nit:6393 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6163);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6393);
   }
   ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:6164 */
+  /* parser/parser_prod.nit:6394 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6164);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6394);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
@@ -33691,7 +34999,7 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6167;
+  fra.me.line = 6397;
   fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -33703,11 +35011,11 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6169 */
+  /* parser/parser_prod.nit:6399 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6169);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6399);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33717,7 +35025,7 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6170 */
+    /* parser/parser_prod.nit:6400 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33732,32 +35040,32 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6171 */
+      /* parser/parser_prod.nit:6401 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6171);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6401);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6172 */
+      /* parser/parser_prod.nit:6402 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6172);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6402);
       }
-      /* parser/parser_prod.nit:6173 */
+      /* parser/parser_prod.nit:6403 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6175 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6175);
+      /* parser/parser_prod.nit:6405 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6405);
     }
-    /* parser/parser_prod.nit:6177 */
+    /* parser/parser_prod.nit:6407 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6179 */
+  /* parser/parser_prod.nit:6409 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6179);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6409);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33767,7 +35075,7 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6180 */
+    /* parser/parser_prod.nit:6410 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33782,32 +35090,32 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6181 */
+      /* parser/parser_prod.nit:6411 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6181);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6411);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6182 */
+      /* parser/parser_prod.nit:6412 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6182);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6412);
       }
-      /* parser/parser_prod.nit:6183 */
+      /* parser/parser_prod.nit:6413 */
       ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6185 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6185);
+      /* parser/parser_prod.nit:6415 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6415);
     }
-    /* parser/parser_prod.nit:6187 */
+    /* parser/parser_prod.nit:6417 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6189 */
+  /* parser/parser_prod.nit:6419 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6189);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6419);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33817,7 +35125,7 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6190 */
+    /* parser/parser_prod.nit:6420 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33832,32 +35140,32 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6191 */
+      /* parser/parser_prod.nit:6421 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6191);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6421);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6192 */
+      /* parser/parser_prod.nit:6422 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6192);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6422);
       }
-      /* parser/parser_prod.nit:6193 */
+      /* parser/parser_prod.nit:6423 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6195 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6195);
+      /* parser/parser_prod.nit:6425 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6425);
     }
-    /* parser/parser_prod.nit:6197 */
+    /* parser/parser_prod.nit:6427 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6199 */
+  /* parser/parser_prod.nit:6429 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6199);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6429);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33867,7 +35175,7 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6200 */
+    /* parser/parser_prod.nit:6430 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33882,25 +35190,25 @@ void parser___parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6201 */
+      /* parser/parser_prod.nit:6431 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6201);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6431);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6202 */
+      /* parser/parser_prod.nit:6432 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6202);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6432);
       }
-      /* parser/parser_prod.nit:6203 */
+      /* parser/parser_prod.nit:6433 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6205 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6205);
+      /* parser/parser_prod.nit:6435 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6435);
     }
-    /* parser/parser_prod.nit:6207 */
+    /* parser/parser_prod.nit:6437 */
     goto label1;
   }
   label1: while(0);
@@ -33914,7 +35222,7 @@ void parser___parser_prod___ABraAssignExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6211;
+  fra.me.line = 6441;
   fra.me.meth = LOCATE_parser___parser_prod___ABraAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -33924,35 +35232,35 @@ void parser___parser_prod___ABraAssignExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6213 */
+  /* parser/parser_prod.nit:6443 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6213);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6443);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6214 */
+  /* parser/parser_prod.nit:6444 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6214);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6444);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6215 */
+  /* parser/parser_prod.nit:6445 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6215);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6445);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6216 */
+  /* parser/parser_prod.nit:6446 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6216);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6446);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -33967,7 +35275,7 @@ void parser___parser_prod___ABraReassignExpr___empty_init(val_t p0, int* init_ta
   if (init_table[itpos203]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6220;
+  fra.me.line = 6450;
   fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -33987,7 +35295,7 @@ void parser___parser_prod___ABraReassignExpr___init_abrareassignexpr(val_t p0, v
   if (init_table[itpos204]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6222;
+  fra.me.line = 6452;
   fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___init_abrareassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -34003,60 +35311,60 @@ void parser___parser_prod___ABraReassignExpr___init_abrareassignexpr(val_t p0, v
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:6222 */
+  /* parser/parser_prod.nit:6452 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6229 */
+  /* parser/parser_prod.nit:6459 */
   CALL_parser___parser_prod___ABraReassignExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:6230 */
+  /* parser/parser_prod.nit:6460 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6230);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6460);
   }
   ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6231 */
+  /* parser/parser_prod.nit:6461 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6231);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6461);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6232 */
+  /* parser/parser_prod.nit:6462 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6232);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6462);
   }
   ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6233 */
+  /* parser/parser_prod.nit:6463 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6233);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6463);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6234 */
+  /* parser/parser_prod.nit:6464 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6234);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6464);
   }
   ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6235 */
+  /* parser/parser_prod.nit:6465 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6235);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6465);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6236 */
+  /* parser/parser_prod.nit:6466 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6236);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6466);
   }
   ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:6237 */
+  /* parser/parser_prod.nit:6467 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6237);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6467);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
@@ -34071,7 +35379,7 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6240;
+  fra.me.line = 6470;
   fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -34083,11 +35391,11 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6242 */
+  /* parser/parser_prod.nit:6472 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6242);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6472);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34097,7 +35405,7 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6243 */
+    /* parser/parser_prod.nit:6473 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34112,32 +35420,32 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6244 */
+      /* parser/parser_prod.nit:6474 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6244);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6474);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6245 */
+      /* parser/parser_prod.nit:6475 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6245);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6475);
       }
-      /* parser/parser_prod.nit:6246 */
+      /* parser/parser_prod.nit:6476 */
       ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6248 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6248);
+      /* parser/parser_prod.nit:6478 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6478);
     }
-    /* parser/parser_prod.nit:6250 */
+    /* parser/parser_prod.nit:6480 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6252 */
+  /* parser/parser_prod.nit:6482 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6252);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6482);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34147,7 +35455,7 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6253 */
+    /* parser/parser_prod.nit:6483 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34162,32 +35470,32 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6254 */
+      /* parser/parser_prod.nit:6484 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6254);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6484);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6255 */
+      /* parser/parser_prod.nit:6485 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6255);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6485);
       }
-      /* parser/parser_prod.nit:6256 */
+      /* parser/parser_prod.nit:6486 */
       ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6258 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6258);
+      /* parser/parser_prod.nit:6488 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6488);
     }
-    /* parser/parser_prod.nit:6260 */
+    /* parser/parser_prod.nit:6490 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6262 */
+  /* parser/parser_prod.nit:6492 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6262);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6492);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34197,7 +35505,7 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6263 */
+    /* parser/parser_prod.nit:6493 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34212,32 +35520,32 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6264 */
+      /* parser/parser_prod.nit:6494 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6264);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6494);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6265 */
+      /* parser/parser_prod.nit:6495 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast AAssignOp*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6265);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6495);
       }
-      /* parser/parser_prod.nit:6266 */
+      /* parser/parser_prod.nit:6496 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6268 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6268);
+      /* parser/parser_prod.nit:6498 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6498);
     }
-    /* parser/parser_prod.nit:6270 */
+    /* parser/parser_prod.nit:6500 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6272 */
+  /* parser/parser_prod.nit:6502 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6272);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6502);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34247,7 +35555,7 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6273 */
+    /* parser/parser_prod.nit:6503 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34262,25 +35570,25 @@ void parser___parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6274 */
+      /* parser/parser_prod.nit:6504 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6274);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6504);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6275 */
+      /* parser/parser_prod.nit:6505 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6275);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6505);
       }
-      /* parser/parser_prod.nit:6276 */
+      /* parser/parser_prod.nit:6506 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6278 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6278);
+      /* parser/parser_prod.nit:6508 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6508);
     }
-    /* parser/parser_prod.nit:6280 */
+    /* parser/parser_prod.nit:6510 */
     goto label1;
   }
   label1: while(0);
@@ -34294,7 +35602,7 @@ void parser___parser_prod___ABraReassignExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6284;
+  fra.me.line = 6514;
   fra.me.meth = LOCATE_parser___parser_prod___ABraReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -34304,35 +35612,35 @@ void parser___parser_prod___ABraReassignExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6286 */
+  /* parser/parser_prod.nit:6516 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6286);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6516);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6287 */
+  /* parser/parser_prod.nit:6517 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6287);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6517);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6288 */
+  /* parser/parser_prod.nit:6518 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6288);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6518);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6289 */
+  /* parser/parser_prod.nit:6519 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6289);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6519);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -34347,7 +35655,7 @@ void parser___parser_prod___AClosureCallExpr___empty_init(val_t p0, int* init_ta
   if (init_table[itpos205]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6293;
+  fra.me.line = 6523;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -34367,7 +35675,7 @@ void parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr(val_t p0, v
   if (init_table[itpos206]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6295;
+  fra.me.line = 6525;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -34381,34 +35689,34 @@ void parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr(val_t p0, v
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:6295 */
+  /* parser/parser_prod.nit:6525 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6301 */
+  /* parser/parser_prod.nit:6531 */
   CALL_parser___parser_prod___AClosureCallExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:6302 */
+  /* parser/parser_prod.nit:6532 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6302);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6532);
   }
   ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6303 */
+  /* parser/parser_prod.nit:6533 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6303);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6533);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6304 */
+  /* parser/parser_prod.nit:6534 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6304);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6534);
   }
   ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6305 */
+  /* parser/parser_prod.nit:6535 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6305);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6535);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr_1));
@@ -34421,7 +35729,7 @@ void parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr(val_t p0, v
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:6306 */
+    /* parser/parser_prod.nit:6536 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -34435,21 +35743,21 @@ void parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr(val_t p0, v
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:6307 */
+    /* parser/parser_prod.nit:6537 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AClosureDef, ID_parser___parser_nodes___AClosureDef)) /*cast AClosureDef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6307);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6537);
     }
-    /* parser/parser_prod.nit:6308 */
+    /* parser/parser_prod.nit:6538 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(closctx->REG[4])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6308);
+      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6538);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(closctx->REG[4]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:6309 */
+    /* parser/parser_prod.nit:6539 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
     stack_frame_head = fra.me.prev;
     return;
@@ -34465,7 +35773,7 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6313;
+  fra.me.line = 6543;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -34477,11 +35785,11 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6315 */
+  /* parser/parser_prod.nit:6545 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6315);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6545);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34491,7 +35799,7 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6316 */
+    /* parser/parser_prod.nit:6546 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34506,32 +35814,32 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6317 */
+      /* parser/parser_prod.nit:6547 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6317);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6547);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6318 */
+      /* parser/parser_prod.nit:6548 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6318);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6548);
       }
-      /* parser/parser_prod.nit:6319 */
+      /* parser/parser_prod.nit:6549 */
       ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6321 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6321);
+      /* parser/parser_prod.nit:6551 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6551);
     }
-    /* parser/parser_prod.nit:6323 */
+    /* parser/parser_prod.nit:6553 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6325 */
+  /* parser/parser_prod.nit:6555 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6325);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6555);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34541,7 +35849,7 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6326 */
+    /* parser/parser_prod.nit:6556 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34556,33 +35864,33 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6327 */
+      /* parser/parser_prod.nit:6557 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6327);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6557);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6328 */
+      /* parser/parser_prod.nit:6558 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6328);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6558);
       }
-      /* parser/parser_prod.nit:6329 */
+      /* parser/parser_prod.nit:6559 */
       ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6331 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6331);
+      /* parser/parser_prod.nit:6561 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6561);
     }
-    /* parser/parser_prod.nit:6333 */
+    /* parser/parser_prod.nit:6563 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6335 */
+  /* parser/parser_prod.nit:6565 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6335);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6565);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -34597,13 +35905,13 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:6335 */
+      /* parser/parser_prod.nit:6565 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:6336 */
+      /* parser/parser_prod.nit:6566 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6336);
+        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6566);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -34620,7 +35928,7 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:6337 */
+        /* parser/parser_prod.nit:6567 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -34635,37 +35943,37 @@ void parser___parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1,
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:6338 */
+          /* parser/parser_prod.nit:6568 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AClosureDef, ID_parser___parser_nodes___AClosureDef)) /*cast AClosureDef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6338);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6568);
           }
-          /* parser/parser_prod.nit:6339 */
+          /* parser/parser_prod.nit:6569 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6339);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6569);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:6340 */
+          /* parser/parser_prod.nit:6570 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6340);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6570);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:6342 */
+          /* parser/parser_prod.nit:6572 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6342);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6572);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:6344 */
+        /* parser/parser_prod.nit:6574 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -34691,7 +35999,7 @@ void parser___parser_prod___AClosureCallExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6349;
+  fra.me.line = 6579;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureCallExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -34701,27 +36009,27 @@ void parser___parser_prod___AClosureCallExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6351 */
+  /* parser/parser_prod.nit:6581 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6351);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6581);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6352 */
+  /* parser/parser_prod.nit:6582 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6352);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 6582);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6353 */
+  /* parser/parser_prod.nit:6583 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6353);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser___parser_prod, 6583);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AClosureCallExpr___visit_all_1));
@@ -34744,7 +36052,7 @@ void parser___parser_prod___AClosureCallExpr___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:6354 */
+    /* parser/parser_prod.nit:6584 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -34757,7 +36065,7 @@ void parser___parser_prod___AVarExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos207]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6359;
+  fra.me.line = 6589;
   fra.me.meth = LOCATE_parser___parser_prod___AVarExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -34777,7 +36085,7 @@ void parser___parser_prod___AVarExpr___init_avarexpr(val_t p0, val_t p1, int* in
   if (init_table[itpos208]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6361;
+  fra.me.line = 6591;
   fra.me.meth = LOCATE_parser___parser_prod___AVarExpr___init_avarexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -34787,21 +36095,21 @@ void parser___parser_prod___AVarExpr___init_avarexpr(val_t p0, val_t p1, int* in
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6361 */
+  /* parser/parser_prod.nit:6591 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6365 */
+  /* parser/parser_prod.nit:6595 */
   CALL_parser___parser_prod___AVarExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:6366 */
+  /* parser/parser_prod.nit:6596 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6366);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6596);
   }
   ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6367 */
+  /* parser/parser_prod.nit:6597 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6367);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6597);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -34816,7 +36124,7 @@ void parser___parser_prod___AVarExpr___replace_child(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6370;
+  fra.me.line = 6600;
   fra.me.meth = LOCATE_parser___parser_prod___AVarExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -34828,11 +36136,11 @@ void parser___parser_prod___AVarExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6372 */
+  /* parser/parser_prod.nit:6602 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6372);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6602);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34842,7 +36150,7 @@ void parser___parser_prod___AVarExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6373 */
+    /* parser/parser_prod.nit:6603 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34857,25 +36165,25 @@ void parser___parser_prod___AVarExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6374 */
+      /* parser/parser_prod.nit:6604 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6374);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6604);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6375 */
+      /* parser/parser_prod.nit:6605 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6375);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6605);
       }
-      /* parser/parser_prod.nit:6376 */
+      /* parser/parser_prod.nit:6606 */
       ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6378 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6378);
+      /* parser/parser_prod.nit:6608 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6608);
     }
-    /* parser/parser_prod.nit:6380 */
+    /* parser/parser_prod.nit:6610 */
     goto label1;
   }
   label1: while(0);
@@ -34889,7 +36197,7 @@ void parser___parser_prod___AVarExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6384;
+  fra.me.line = 6614;
   fra.me.meth = LOCATE_parser___parser_prod___AVarExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34898,11 +36206,11 @@ void parser___parser_prod___AVarExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6386 */
+  /* parser/parser_prod.nit:6616 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6386);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6616);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -34917,7 +36225,7 @@ void parser___parser_prod___AVarAssignExpr___empty_init(val_t p0, int* init_tabl
   if (init_table[itpos209]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6390;
+  fra.me.line = 6620;
   fra.me.meth = LOCATE_parser___parser_prod___AVarAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -34937,7 +36245,7 @@ void parser___parser_prod___AVarAssignExpr___init_avarassignexpr(val_t p0, val_t
   if (init_table[itpos210]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6392;
+  fra.me.line = 6622;
   fra.me.meth = LOCATE_parser___parser_prod___AVarAssignExpr___init_avarassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -34951,47 +36259,47 @@ void parser___parser_prod___AVarAssignExpr___init_avarassignexpr(val_t p0, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:6392 */
+  /* parser/parser_prod.nit:6622 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6398 */
+  /* parser/parser_prod.nit:6628 */
   CALL_parser___parser_prod___AVarAssignExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:6399 */
+  /* parser/parser_prod.nit:6629 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6399);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6629);
   }
   ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6400 */
+  /* parser/parser_prod.nit:6630 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6400);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6630);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6401 */
+  /* parser/parser_prod.nit:6631 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6401);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6631);
   }
   ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6402 */
+  /* parser/parser_prod.nit:6632 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6402);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6632);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6403 */
+  /* parser/parser_prod.nit:6633 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6403);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6633);
   }
   ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6404 */
+  /* parser/parser_prod.nit:6634 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6404);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6634);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
@@ -35006,7 +36314,7 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6407;
+  fra.me.line = 6637;
   fra.me.meth = LOCATE_parser___parser_prod___AVarAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -35018,11 +36326,11 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6409 */
+  /* parser/parser_prod.nit:6639 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6409);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6639);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35032,7 +36340,7 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6410 */
+    /* parser/parser_prod.nit:6640 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35047,32 +36355,32 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6411 */
+      /* parser/parser_prod.nit:6641 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6411);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6641);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6412 */
+      /* parser/parser_prod.nit:6642 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6412);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6642);
       }
-      /* parser/parser_prod.nit:6413 */
+      /* parser/parser_prod.nit:6643 */
       ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6415 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6415);
+      /* parser/parser_prod.nit:6645 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6645);
     }
-    /* parser/parser_prod.nit:6417 */
+    /* parser/parser_prod.nit:6647 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6419 */
+  /* parser/parser_prod.nit:6649 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6419);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6649);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35082,7 +36390,7 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6420 */
+    /* parser/parser_prod.nit:6650 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35097,32 +36405,32 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6421 */
+      /* parser/parser_prod.nit:6651 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6421);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6651);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6422 */
+      /* parser/parser_prod.nit:6652 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6422);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6652);
       }
-      /* parser/parser_prod.nit:6423 */
+      /* parser/parser_prod.nit:6653 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6425 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6425);
+      /* parser/parser_prod.nit:6655 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6655);
     }
-    /* parser/parser_prod.nit:6427 */
+    /* parser/parser_prod.nit:6657 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6429 */
+  /* parser/parser_prod.nit:6659 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6429);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6659);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35132,7 +36440,7 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6430 */
+    /* parser/parser_prod.nit:6660 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35147,25 +36455,25 @@ void parser___parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6431 */
+      /* parser/parser_prod.nit:6661 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6431);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6661);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6432 */
+      /* parser/parser_prod.nit:6662 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6432);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6662);
       }
-      /* parser/parser_prod.nit:6433 */
+      /* parser/parser_prod.nit:6663 */
       ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6435 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6435);
+      /* parser/parser_prod.nit:6665 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6665);
     }
-    /* parser/parser_prod.nit:6437 */
+    /* parser/parser_prod.nit:6667 */
     goto label1;
   }
   label1: while(0);
@@ -35179,7 +36487,7 @@ void parser___parser_prod___AVarAssignExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6441;
+  fra.me.line = 6671;
   fra.me.meth = LOCATE_parser___parser_prod___AVarAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -35189,27 +36497,27 @@ void parser___parser_prod___AVarAssignExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6443 */
+  /* parser/parser_prod.nit:6673 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6443);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6673);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6444 */
+  /* parser/parser_prod.nit:6674 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6444);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser___parser_prod, 6674);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6445 */
+  /* parser/parser_prod.nit:6675 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6445);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6675);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -35224,7 +36532,7 @@ void parser___parser_prod___AVarReassignExpr___empty_init(val_t p0, int* init_ta
   if (init_table[itpos211]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6449;
+  fra.me.line = 6679;
   fra.me.meth = LOCATE_parser___parser_prod___AVarReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -35244,7 +36552,7 @@ void parser___parser_prod___AVarReassignExpr___init_avarreassignexpr(val_t p0, v
   if (init_table[itpos212]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6451;
+  fra.me.line = 6681;
   fra.me.meth = LOCATE_parser___parser_prod___AVarReassignExpr___init_avarreassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -35258,47 +36566,47 @@ void parser___parser_prod___AVarReassignExpr___init_avarreassignexpr(val_t p0, v
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:6451 */
+  /* parser/parser_prod.nit:6681 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6457 */
+  /* parser/parser_prod.nit:6687 */
   CALL_parser___parser_prod___AVarReassignExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:6458 */
+  /* parser/parser_prod.nit:6688 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6458);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6688);
   }
   ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6459 */
+  /* parser/parser_prod.nit:6689 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6459);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6689);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6460 */
+  /* parser/parser_prod.nit:6690 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6460);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6690);
   }
   ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6461 */
+  /* parser/parser_prod.nit:6691 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6461);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6691);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:6462 */
+  /* parser/parser_prod.nit:6692 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6462);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6692);
   }
   ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6463 */
+  /* parser/parser_prod.nit:6693 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6463);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6693);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
@@ -35313,7 +36621,7 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6466;
+  fra.me.line = 6696;
   fra.me.meth = LOCATE_parser___parser_prod___AVarReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -35325,11 +36633,11 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6468 */
+  /* parser/parser_prod.nit:6698 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6468);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6698);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35339,7 +36647,7 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6469 */
+    /* parser/parser_prod.nit:6699 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35354,32 +36662,32 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6470 */
+      /* parser/parser_prod.nit:6700 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6470);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6700);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6471 */
+      /* parser/parser_prod.nit:6701 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6471);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6701);
       }
-      /* parser/parser_prod.nit:6472 */
+      /* parser/parser_prod.nit:6702 */
       ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6474 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6474);
+      /* parser/parser_prod.nit:6704 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6704);
     }
-    /* parser/parser_prod.nit:6476 */
+    /* parser/parser_prod.nit:6706 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6478 */
+  /* parser/parser_prod.nit:6708 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6478);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6708);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35389,7 +36697,7 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6479 */
+    /* parser/parser_prod.nit:6709 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35404,32 +36712,32 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6480 */
+      /* parser/parser_prod.nit:6710 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6480);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6710);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6481 */
+      /* parser/parser_prod.nit:6711 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast AAssignOp*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6481);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6711);
       }
-      /* parser/parser_prod.nit:6482 */
+      /* parser/parser_prod.nit:6712 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6484 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6484);
+      /* parser/parser_prod.nit:6714 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6714);
     }
-    /* parser/parser_prod.nit:6486 */
+    /* parser/parser_prod.nit:6716 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6488 */
+  /* parser/parser_prod.nit:6718 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6488);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6718);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35439,7 +36747,7 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6489 */
+    /* parser/parser_prod.nit:6719 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35454,25 +36762,25 @@ void parser___parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6490 */
+      /* parser/parser_prod.nit:6720 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6490);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6720);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6491 */
+      /* parser/parser_prod.nit:6721 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6491);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6721);
       }
-      /* parser/parser_prod.nit:6492 */
+      /* parser/parser_prod.nit:6722 */
       ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6494 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6494);
+      /* parser/parser_prod.nit:6724 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6724);
     }
-    /* parser/parser_prod.nit:6496 */
+    /* parser/parser_prod.nit:6726 */
     goto label1;
   }
   label1: while(0);
@@ -35486,7 +36794,7 @@ void parser___parser_prod___AVarReassignExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6500;
+  fra.me.line = 6730;
   fra.me.meth = LOCATE_parser___parser_prod___AVarReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -35496,27 +36804,27 @@ void parser___parser_prod___AVarReassignExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6502 */
+  /* parser/parser_prod.nit:6732 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6502);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 6732);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6503 */
+  /* parser/parser_prod.nit:6733 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6503);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser___parser_prod, 6733);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6504 */
+  /* parser/parser_prod.nit:6734 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6504);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser___parser_prod, 6734);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -35531,7 +36839,7 @@ void parser___parser_prod___ARangeExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos213]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6508;
+  fra.me.line = 6738;
   fra.me.meth = LOCATE_parser___parser_prod___ARangeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -35543,56 +36851,83 @@ void parser___parser_prod___ARangeExpr___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___ARangeExpr___init_arangeexpr[] = "parser_prod::ARangeExpr::init_arangeexpr";
-void parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+void parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
   int itpos214 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ARangeExpr].i;
-  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 REGB1;
   val_t tmp;
   if (init_table[itpos214]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6510;
+  fra.me.line = 6740;
   fra.me.meth = LOCATE_parser___parser_prod___ARangeExpr___init_arangeexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6510 */
-  fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6515 */
-  CALL_parser___parser_prod___ARangeExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:6516 */
+  fra.me.REG[3] = p3;
+  /* parser/parser_prod.nit:6740 */
+  fra.me.REG[4] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6746 */
+  CALL_parser___parser_prod___ARangeExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
+  /* parser/parser_prod.nit:6747 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6516);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6747);
   }
-  ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6517 */
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[4]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6748 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6517);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6748);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:6518 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* parser/parser_prod.nit:6749 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6518);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6749);
   }
-  ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6519 */
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[4]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:6750 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6519);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6750);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
+  /* parser/parser_prod.nit:6751 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[4]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:6752 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6753 */
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6753);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos214] = 1;
   return;
@@ -35605,7 +36940,7 @@ void parser___parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6522;
+  fra.me.line = 6757;
   fra.me.meth = LOCATE_parser___parser_prod___ARangeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -35617,11 +36952,11 @@ void parser___parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6524 */
+  /* parser/parser_prod.nit:6759 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6524);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6759);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35631,7 +36966,7 @@ void parser___parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6525 */
+    /* parser/parser_prod.nit:6760 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35646,32 +36981,32 @@ void parser___parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6526 */
+      /* parser/parser_prod.nit:6761 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6526);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6761);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6527 */
+      /* parser/parser_prod.nit:6762 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6527);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6762);
       }
-      /* parser/parser_prod.nit:6528 */
+      /* parser/parser_prod.nit:6763 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6530 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6530);
+      /* parser/parser_prod.nit:6765 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6765);
     }
-    /* parser/parser_prod.nit:6532 */
+    /* parser/parser_prod.nit:6767 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6534 */
+  /* parser/parser_prod.nit:6769 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6534);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6769);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35681,7 +37016,7 @@ void parser___parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6535 */
+    /* parser/parser_prod.nit:6770 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35696,25 +37031,76 @@ void parser___parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6536 */
+      /* parser/parser_prod.nit:6771 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6536);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6771);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6537 */
+      /* parser/parser_prod.nit:6772 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6537);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6772);
       }
-      /* parser/parser_prod.nit:6538 */
+      /* parser/parser_prod.nit:6773 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6540 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6540);
+      /* parser/parser_prod.nit:6775 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6775);
     }
-    /* parser/parser_prod.nit:6542 */
+    /* parser/parser_prod.nit:6777 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:6779 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6780 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:6781 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6781);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6782 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6782);
+      }
+      /* parser/parser_prod.nit:6783 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:6785 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:6787 */
     goto label1;
   }
   label1: while(0);
@@ -35723,37 +37109,66 @@ void parser___parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t
 }
 static const char LOCATE_parser___parser_prod___ARangeExpr___visit_all[] = "parser_prod::ARangeExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ARangeExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} 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___parser_prod;
-  fra.me.line = 6546;
+  fra.me.line = 6791;
   fra.me.meth = LOCATE_parser___parser_prod___ARangeExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6548 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:6791 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6793 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6548);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6793);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6549 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6794 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6549);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6794);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6795 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6796 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6796);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -35765,7 +37180,7 @@ void parser___parser_prod___ACrangeExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos215]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6553;
+  fra.me.line = 6801;
   fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -35777,18 +37192,19 @@ void parser___parser_prod___ACrangeExpr___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___ACrangeExpr___init_acrangeexpr[] = "parser_prod::ACrangeExpr::init_acrangeexpr";
-void parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
+void parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
   int itpos216 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACrangeExpr].i;
-  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 REGB1;
   val_t tmp;
   if (init_table[itpos216]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6555;
+  fra.me.line = 6803;
   fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___init_acrangeexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -35796,67 +37212,93 @@ void parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, v
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:6555 */
-  fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6562 */
-  CALL_parser___parser_prod___ACrangeExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:6563 */
+  fra.me.REG[5] = p5;
+  /* parser/parser_prod.nit:6803 */
+  fra.me.REG[6] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6811 */
+  CALL_parser___parser_prod___ACrangeExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
+  /* parser/parser_prod.nit:6812 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6563);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6812);
   }
-  ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6564 */
+  ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[6]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6813 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6564);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6813);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6565 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+  /* parser/parser_prod.nit:6814 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6565);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6814);
   }
-  ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6566 */
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[6]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:6815 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6566);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6815);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6567 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+  /* parser/parser_prod.nit:6816 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6567);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6816);
   }
-  ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6568 */
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[6]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:6817 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6568);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6817);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6569 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser_prod.nit:6818 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6569);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6818);
   }
-  ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:6570 */
+  ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[6]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:6819 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6570);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6819);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser_prod.nit:6820 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[6]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:6821 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6822 */
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6822);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
   init_table[itpos216] = 1;
   return;
@@ -35869,7 +37311,7 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6573;
+  fra.me.line = 6826;
   fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -35881,11 +37323,11 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6575 */
+  /* parser/parser_prod.nit:6828 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 6575);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 6828);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35895,7 +37337,7 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6576 */
+    /* parser/parser_prod.nit:6829 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35910,32 +37352,32 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6577 */
+      /* parser/parser_prod.nit:6830 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6577);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6830);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6578 */
+      /* parser/parser_prod.nit:6831 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast TObra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6578);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6831);
       }
-      /* parser/parser_prod.nit:6579 */
+      /* parser/parser_prod.nit:6832 */
       ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6581 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6581);
+      /* parser/parser_prod.nit:6834 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6834);
     }
-    /* parser/parser_prod.nit:6583 */
+    /* parser/parser_prod.nit:6836 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6585 */
+  /* parser/parser_prod.nit:6838 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6585);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6838);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35945,7 +37387,7 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6586 */
+    /* parser/parser_prod.nit:6839 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35960,32 +37402,32 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6587 */
+      /* parser/parser_prod.nit:6840 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6587);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6840);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6588 */
+      /* parser/parser_prod.nit:6841 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6588);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6841);
       }
-      /* parser/parser_prod.nit:6589 */
+      /* parser/parser_prod.nit:6842 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6591 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6591);
+      /* parser/parser_prod.nit:6844 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6844);
     }
-    /* parser/parser_prod.nit:6593 */
+    /* parser/parser_prod.nit:6846 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6595 */
+  /* parser/parser_prod.nit:6848 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6595);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6848);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35995,7 +37437,7 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6596 */
+    /* parser/parser_prod.nit:6849 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36010,32 +37452,32 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6597 */
+      /* parser/parser_prod.nit:6850 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6597);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6850);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6598 */
+      /* parser/parser_prod.nit:6851 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6598);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6851);
       }
-      /* parser/parser_prod.nit:6599 */
+      /* parser/parser_prod.nit:6852 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6601 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6601);
+      /* parser/parser_prod.nit:6854 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6854);
     }
-    /* parser/parser_prod.nit:6603 */
+    /* parser/parser_prod.nit:6856 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6605 */
+  /* parser/parser_prod.nit:6858 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 6605);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 6858);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36045,7 +37487,7 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6606 */
+    /* parser/parser_prod.nit:6859 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36060,25 +37502,76 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6607 */
+      /* parser/parser_prod.nit:6860 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6607);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6860);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6608 */
+      /* parser/parser_prod.nit:6861 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast TCbra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6608);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6861);
       }
-      /* parser/parser_prod.nit:6609 */
+      /* parser/parser_prod.nit:6862 */
       ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6611 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6611);
+      /* parser/parser_prod.nit:6864 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6864);
     }
-    /* parser/parser_prod.nit:6613 */
+    /* parser/parser_prod.nit:6866 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:6868 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6869 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:6870 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6870);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6871 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6871);
+      }
+      /* parser/parser_prod.nit:6872 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:6874 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:6876 */
     goto label1;
   }
   label1: while(0);
@@ -36087,53 +37580,82 @@ void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_
 }
 static const char LOCATE_parser___parser_prod___ACrangeExpr___visit_all[] = "parser_prod::ACrangeExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ACrangeExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} 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___parser_prod;
-  fra.me.line = 6617;
+  fra.me.line = 6880;
   fra.me.meth = LOCATE_parser___parser_prod___ACrangeExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6619 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:6880 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6882 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 6619);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 6882);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6620 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ACrangeExpr____n_obra(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6883 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6620);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6883);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6621 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6884 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6621);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6884);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6622 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6885 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 6622);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 6885);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6886 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6887 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6887);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ACrangeExpr____n_cbra(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -36145,7 +37667,7 @@ void parser___parser_prod___AOrangeExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos217]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6626;
+  fra.me.line = 6892;
   fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -36157,18 +37679,19 @@ void parser___parser_prod___AOrangeExpr___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___AOrangeExpr___init_aorangeexpr[] = "parser_prod::AOrangeExpr::init_aorangeexpr";
-void parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
+void parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
   int itpos218 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AOrangeExpr].i;
-  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 REGB1;
   val_t tmp;
   if (init_table[itpos218]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6628;
+  fra.me.line = 6894;
   fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___init_aorangeexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -36176,67 +37699,93 @@ void parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, v
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:6628 */
-  fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6635 */
-  CALL_parser___parser_prod___AOrangeExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:6636 */
+  fra.me.REG[5] = p5;
+  /* parser/parser_prod.nit:6894 */
+  fra.me.REG[6] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6902 */
+  CALL_parser___parser_prod___AOrangeExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
+  /* parser/parser_prod.nit:6903 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6636);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6903);
   }
-  ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6637 */
+  ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[6]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6904 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6637);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6904);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6638 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+  /* parser/parser_prod.nit:6905 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6638);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6905);
   }
-  ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:6639 */
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[6]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:6906 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6639);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6906);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6640 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+  /* parser/parser_prod.nit:6907 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6640);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6907);
   }
-  ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:6641 */
+  ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[6]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:6908 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6641);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6908);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:6642 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser_prod.nit:6909 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6642);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6909);
   }
-  ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:6643 */
+  ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[6]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:6910 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6643);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6910);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser_prod.nit:6911 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[6]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:6912 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6913 */
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6913);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
   init_table[itpos218] = 1;
   return;
@@ -36249,7 +37798,7 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6646;
+  fra.me.line = 6917;
   fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36261,11 +37810,11 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6648 */
+  /* parser/parser_prod.nit:6919 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 6648);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 6919);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36275,7 +37824,7 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6649 */
+    /* parser/parser_prod.nit:6920 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36290,32 +37839,32 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6650 */
+      /* parser/parser_prod.nit:6921 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6650);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6921);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6651 */
+      /* parser/parser_prod.nit:6922 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast TObra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6651);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6922);
       }
-      /* parser/parser_prod.nit:6652 */
+      /* parser/parser_prod.nit:6923 */
       ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6654 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6654);
+      /* parser/parser_prod.nit:6925 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6925);
     }
-    /* parser/parser_prod.nit:6656 */
+    /* parser/parser_prod.nit:6927 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6658 */
+  /* parser/parser_prod.nit:6929 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6658);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6929);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36325,7 +37874,7 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6659 */
+    /* parser/parser_prod.nit:6930 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36340,32 +37889,32 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6660 */
+      /* parser/parser_prod.nit:6931 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6660);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6931);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6661 */
+      /* parser/parser_prod.nit:6932 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6661);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6932);
       }
-      /* parser/parser_prod.nit:6662 */
+      /* parser/parser_prod.nit:6933 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6664 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6664);
+      /* parser/parser_prod.nit:6935 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6935);
     }
-    /* parser/parser_prod.nit:6666 */
+    /* parser/parser_prod.nit:6937 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6668 */
+  /* parser/parser_prod.nit:6939 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6668);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6939);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36375,7 +37924,7 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6669 */
+    /* parser/parser_prod.nit:6940 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36390,32 +37939,32 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6670 */
+      /* parser/parser_prod.nit:6941 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6670);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6941);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6671 */
+      /* parser/parser_prod.nit:6942 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6671);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6942);
       }
-      /* parser/parser_prod.nit:6672 */
+      /* parser/parser_prod.nit:6943 */
       ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6674 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6674);
+      /* parser/parser_prod.nit:6945 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6945);
     }
-    /* parser/parser_prod.nit:6676 */
+    /* parser/parser_prod.nit:6947 */
     goto label1;
   }
-  /* parser/parser_prod.nit:6678 */
+  /* parser/parser_prod.nit:6949 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 6678);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 6949);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36425,7 +37974,7 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6679 */
+    /* parser/parser_prod.nit:6950 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36440,25 +37989,76 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6680 */
+      /* parser/parser_prod.nit:6951 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6680);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6951);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6681 */
+      /* parser/parser_prod.nit:6952 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast TObra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6681);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6952);
       }
-      /* parser/parser_prod.nit:6682 */
+      /* parser/parser_prod.nit:6953 */
       ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6684 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6684);
+      /* parser/parser_prod.nit:6955 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6955);
+    }
+    /* parser/parser_prod.nit:6957 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:6959 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6960 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:6961 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6961);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:6962 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6962);
+      }
+      /* parser/parser_prod.nit:6963 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:6965 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:6686 */
+    /* parser/parser_prod.nit:6967 */
     goto label1;
   }
   label1: while(0);
@@ -36467,53 +38067,82 @@ void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_
 }
 static const char LOCATE_parser___parser_prod___AOrangeExpr___visit_all[] = "parser_prod::AOrangeExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AOrangeExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} 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___parser_prod;
-  fra.me.line = 6690;
+  fra.me.line = 6971;
   fra.me.meth = LOCATE_parser___parser_prod___AOrangeExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6692 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:6971 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6973 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 6692);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 6973);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6693 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AOrangeExpr____n_obra(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6974 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6693);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 6974);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6694 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6975 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6694);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser___parser_prod, 6975);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:6695 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ARangeExpr____n_expr2(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6976 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 6695);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 6976);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6977 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6978 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6978);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AOrangeExpr____n_cbra(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -36525,7 +38154,7 @@ void parser___parser_prod___AArrayExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos219]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6699;
+  fra.me.line = 6983;
   fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -36537,41 +38166,68 @@ void parser___parser_prod___AArrayExpr___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___AArrayExpr___init_aarrayexpr[] = "parser_prod::AArrayExpr::init_aarrayexpr";
-void parser___parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1, int* init_table){
+void parser___parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos220 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AArrayExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   if (init_table[itpos220]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6701;
+  fra.me.line = 6985;
   fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___init_aarrayexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6701 */
-  fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6705 */
-  CALL_parser___parser_prod___AArrayExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:6706 */
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:6985 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:6990 */
+  CALL_parser___parser_prod___AArrayExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:6991 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6706);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6991);
   }
-  ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6707 */
+  ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:6992 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6707);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6992);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:6993 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:6994 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:6995 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6995);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos220] = 1;
   return;
@@ -36584,7 +38240,7 @@ void parser___parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6710;
+  fra.me.line = 6999;
   fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36596,11 +38252,11 @@ void parser___parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6712 */
+  /* parser/parser_prod.nit:7001 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 6712);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7001);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36610,7 +38266,7 @@ void parser___parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6713 */
+    /* parser/parser_prod.nit:7002 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36625,25 +38281,76 @@ void parser___parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6714 */
+      /* parser/parser_prod.nit:7003 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6714);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7003);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6715 */
+      /* parser/parser_prod.nit:7004 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast AExprs*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6715);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7004);
       }
-      /* parser/parser_prod.nit:6716 */
+      /* parser/parser_prod.nit:7005 */
       ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6718 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6718);
+      /* parser/parser_prod.nit:7007 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7007);
+    }
+    /* parser/parser_prod.nit:7009 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7011 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7012 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7013 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7013);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7014 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7014);
+      }
+      /* parser/parser_prod.nit:7015 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7017 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:6720 */
+    /* parser/parser_prod.nit:7019 */
     goto label1;
   }
   label1: while(0);
@@ -36652,28 +38359,58 @@ void parser___parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t
 }
 static const char LOCATE_parser___parser_prod___AArrayExpr___visit_all[] = "parser_prod::AArrayExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AArrayExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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___parser_prod;
-  fra.me.line = 6724;
+  fra.me.line = 7023;
   fra.me.meth = LOCATE_parser___parser_prod___AArrayExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6726 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7023 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7025 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 6726);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7025);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7026 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7027 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7027);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -36685,7 +38422,7 @@ void parser___parser_prod___ASelfExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos221]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6730;
+  fra.me.line = 7032;
   fra.me.meth = LOCATE_parser___parser_prod___ASelfExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -36697,41 +38434,68 @@ void parser___parser_prod___ASelfExpr___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___ASelfExpr___init_aselfexpr[] = "parser_prod::ASelfExpr::init_aselfexpr";
-void parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1, int* init_table){
+void parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos222 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASelfExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   if (init_table[itpos222]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6732;
+  fra.me.line = 7034;
   fra.me.meth = LOCATE_parser___parser_prod___ASelfExpr___init_aselfexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6732 */
-  fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6736 */
-  CALL_parser___parser_prod___ASelfExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:6737 */
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:7034 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7039 */
+  CALL_parser___parser_prod___ASelfExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:7040 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6737);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7040);
   }
-  ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6738 */
+  ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7041 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6738);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7041);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7042 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:7043 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7044 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7044);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos222] = 1;
   return;
@@ -36744,7 +38508,7 @@ void parser___parser_prod___ASelfExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6741;
+  fra.me.line = 7048;
   fra.me.meth = LOCATE_parser___parser_prod___ASelfExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36756,7 +38520,7 @@ void parser___parser_prod___ASelfExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6743 */
+  /* parser/parser_prod.nit:7050 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -36771,7 +38535,7 @@ void parser___parser_prod___ASelfExpr___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6744 */
+    /* parser/parser_prod.nit:7051 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36786,25 +38550,76 @@ void parser___parser_prod___ASelfExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6745 */
+      /* parser/parser_prod.nit:7052 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6745);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7052);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6746 */
+      /* parser/parser_prod.nit:7053 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwself, ID_parser___parser_nodes___TKwself)) /*cast TKwself*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6746);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7053);
       }
-      /* parser/parser_prod.nit:6747 */
+      /* parser/parser_prod.nit:7054 */
       ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6749 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6749);
+      /* parser/parser_prod.nit:7056 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7056);
+    }
+    /* parser/parser_prod.nit:7058 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7060 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7061 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7062 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7062);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7063 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7063);
+      }
+      /* parser/parser_prod.nit:7064 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7066 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:6751 */
+    /* parser/parser_prod.nit:7068 */
     goto label1;
   }
   label1: while(0);
@@ -36813,22 +38628,53 @@ void parser___parser_prod___ASelfExpr___replace_child(val_t p0, val_t p1, val_t
 }
 static const char LOCATE_parser___parser_prod___ASelfExpr___visit_all[] = "parser_prod::ASelfExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ASelfExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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___parser_prod;
-  fra.me.line = 6755;
+  fra.me.line = 7072;
   fra.me.meth = LOCATE_parser___parser_prod___ASelfExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6757 */
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* parser/parser_prod.nit:7072 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7074 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ASelfExpr____n_kwself(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7075 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7076 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7076);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -36840,7 +38686,7 @@ void parser___parser_prod___AImplicitSelfExpr___empty_init(val_t p0, int* init_t
   if (init_table[itpos223]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6761;
+  fra.me.line = 7081;
   fra.me.meth = LOCATE_parser___parser_prod___AImplicitSelfExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -36859,14 +38705,14 @@ void parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(val_t p0,
   if (init_table[itpos224]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6763;
+  fra.me.line = 7083;
   fra.me.meth = LOCATE_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:6765 */
+  /* parser/parser_prod.nit:7085 */
   CALL_parser___parser_prod___AImplicitSelfExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
   init_table[itpos224] = 1;
@@ -36878,7 +38724,7 @@ void parser___parser_prod___AImplicitSelfExpr___replace_child(val_t p0, val_t p1
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6768;
+  fra.me.line = 7088;
   fra.me.meth = LOCATE_parser___parser_prod___AImplicitSelfExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -36898,7 +38744,7 @@ void parser___parser_prod___AImplicitSelfExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6772;
+  fra.me.line = 7092;
   fra.me.meth = LOCATE_parser___parser_prod___AImplicitSelfExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36918,7 +38764,7 @@ void parser___parser_prod___ATrueExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos225]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6777;
+  fra.me.line = 7097;
   fra.me.meth = LOCATE_parser___parser_prod___ATrueExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -36930,41 +38776,68 @@ void parser___parser_prod___ATrueExpr___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___ATrueExpr___init_atrueexpr[] = "parser_prod::ATrueExpr::init_atrueexpr";
-void parser___parser_prod___ATrueExpr___init_atrueexpr(val_t p0, val_t p1, int* init_table){
+void parser___parser_prod___ATrueExpr___init_atrueexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos226 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATrueExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   if (init_table[itpos226]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6779;
+  fra.me.line = 7099;
   fra.me.meth = LOCATE_parser___parser_prod___ATrueExpr___init_atrueexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6779 */
-  fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6783 */
-  CALL_parser___parser_prod___ATrueExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:6784 */
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:7099 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7104 */
+  CALL_parser___parser_prod___ATrueExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:7105 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6784);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7105);
   }
-  ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6785 */
+  ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7106 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6785);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7106);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7107 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:7108 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7109 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7109);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos226] = 1;
   return;
@@ -36977,7 +38850,7 @@ void parser___parser_prod___ATrueExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6788;
+  fra.me.line = 7113;
   fra.me.meth = LOCATE_parser___parser_prod___ATrueExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36989,11 +38862,11 @@ void parser___parser_prod___ATrueExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6790 */
+  /* parser/parser_prod.nit:7115 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser___parser_prod, 6790);
+    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser___parser_prod, 7115);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37003,7 +38876,7 @@ void parser___parser_prod___ATrueExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6791 */
+    /* parser/parser_prod.nit:7116 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37018,25 +38891,76 @@ void parser___parser_prod___ATrueExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6792 */
+      /* parser/parser_prod.nit:7117 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6792);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7117);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6793 */
+      /* parser/parser_prod.nit:7118 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwtrue, ID_parser___parser_nodes___TKwtrue)) /*cast TKwtrue*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6793);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7118);
       }
-      /* parser/parser_prod.nit:6794 */
+      /* parser/parser_prod.nit:7119 */
       ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6796 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6796);
+      /* parser/parser_prod.nit:7121 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7121);
+    }
+    /* parser/parser_prod.nit:7123 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7125 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7126 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7127 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7127);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7128 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7128);
+      }
+      /* parser/parser_prod.nit:7129 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7131 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:6798 */
+    /* parser/parser_prod.nit:7133 */
     goto label1;
   }
   label1: while(0);
@@ -37045,28 +38969,58 @@ void parser___parser_prod___ATrueExpr___replace_child(val_t p0, val_t p1, val_t
 }
 static const char LOCATE_parser___parser_prod___ATrueExpr___visit_all[] = "parser_prod::ATrueExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ATrueExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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___parser_prod;
-  fra.me.line = 6802;
+  fra.me.line = 7137;
   fra.me.meth = LOCATE_parser___parser_prod___ATrueExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6804 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7137 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7139 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser___parser_prod, 6804);
+    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser___parser_prod, 7139);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7140 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7141 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7141);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -37078,7 +39032,7 @@ void parser___parser_prod___AFalseExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos227]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6808;
+  fra.me.line = 7146;
   fra.me.meth = LOCATE_parser___parser_prod___AFalseExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -37090,41 +39044,68 @@ void parser___parser_prod___AFalseExpr___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___AFalseExpr___init_afalseexpr[] = "parser_prod::AFalseExpr::init_afalseexpr";
-void parser___parser_prod___AFalseExpr___init_afalseexpr(val_t p0, val_t p1, int* init_table){
+void parser___parser_prod___AFalseExpr___init_afalseexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos228 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFalseExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   if (init_table[itpos228]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6810;
+  fra.me.line = 7148;
   fra.me.meth = LOCATE_parser___parser_prod___AFalseExpr___init_afalseexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6810 */
-  fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6814 */
-  CALL_parser___parser_prod___AFalseExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:6815 */
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:7148 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7153 */
+  CALL_parser___parser_prod___AFalseExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:7154 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6815);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7154);
   }
-  ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6816 */
+  ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7155 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6816);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7155);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7156 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:7157 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7158 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7158);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos228] = 1;
   return;
@@ -37137,7 +39118,7 @@ void parser___parser_prod___AFalseExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6819;
+  fra.me.line = 7162;
   fra.me.meth = LOCATE_parser___parser_prod___AFalseExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -37149,11 +39130,11 @@ void parser___parser_prod___AFalseExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6821 */
+  /* parser/parser_prod.nit:7164 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser___parser_prod, 6821);
+    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser___parser_prod, 7164);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37163,7 +39144,7 @@ void parser___parser_prod___AFalseExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6822 */
+    /* parser/parser_prod.nit:7165 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37178,25 +39159,76 @@ void parser___parser_prod___AFalseExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6823 */
+      /* parser/parser_prod.nit:7166 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6823);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7166);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6824 */
+      /* parser/parser_prod.nit:7167 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwfalse, ID_parser___parser_nodes___TKwfalse)) /*cast TKwfalse*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6824);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7167);
       }
-      /* parser/parser_prod.nit:6825 */
+      /* parser/parser_prod.nit:7168 */
       ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6827 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6827);
+      /* parser/parser_prod.nit:7170 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7170);
     }
-    /* parser/parser_prod.nit:6829 */
+    /* parser/parser_prod.nit:7172 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7174 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7175 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7176 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7176);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7177 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7177);
+      }
+      /* parser/parser_prod.nit:7178 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7180 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:7182 */
     goto label1;
   }
   label1: while(0);
@@ -37205,28 +39237,58 @@ void parser___parser_prod___AFalseExpr___replace_child(val_t p0, val_t p1, val_t
 }
 static const char LOCATE_parser___parser_prod___AFalseExpr___visit_all[] = "parser_prod::AFalseExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AFalseExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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___parser_prod;
-  fra.me.line = 6833;
+  fra.me.line = 7186;
   fra.me.meth = LOCATE_parser___parser_prod___AFalseExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6835 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7186 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7188 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser___parser_prod, 6835);
+    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser___parser_prod, 7188);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7189 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7190 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7190);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -37238,7 +39300,7 @@ void parser___parser_prod___ANullExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos229]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6839;
+  fra.me.line = 7195;
   fra.me.meth = LOCATE_parser___parser_prod___ANullExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -37250,41 +39312,68 @@ void parser___parser_prod___ANullExpr___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___ANullExpr___init_anullexpr[] = "parser_prod::ANullExpr::init_anullexpr";
-void parser___parser_prod___ANullExpr___init_anullexpr(val_t p0, val_t p1, int* init_table){
+void parser___parser_prod___ANullExpr___init_anullexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos230 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ANullExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   if (init_table[itpos230]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6841;
+  fra.me.line = 7197;
   fra.me.meth = LOCATE_parser___parser_prod___ANullExpr___init_anullexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6841 */
-  fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6845 */
-  CALL_parser___parser_prod___ANullExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:6846 */
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:7197 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7202 */
+  CALL_parser___parser_prod___ANullExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:7203 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6846);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7203);
   }
-  ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6847 */
+  ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7204 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6847);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7204);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7205 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:7206 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7207 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7207);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos230] = 1;
   return;
@@ -37297,7 +39386,7 @@ void parser___parser_prod___ANullExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6850;
+  fra.me.line = 7211;
   fra.me.meth = LOCATE_parser___parser_prod___ANullExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -37309,11 +39398,11 @@ void parser___parser_prod___ANullExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6852 */
+  /* parser/parser_prod.nit:7213 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 6852);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 7213);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37323,7 +39412,7 @@ void parser___parser_prod___ANullExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6853 */
+    /* parser/parser_prod.nit:7214 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37338,25 +39427,76 @@ void parser___parser_prod___ANullExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6854 */
+      /* parser/parser_prod.nit:7215 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6854);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7215);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6855 */
+      /* parser/parser_prod.nit:7216 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnull, ID_parser___parser_nodes___TKwnull)) /*cast TKwnull*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6855);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7216);
       }
-      /* parser/parser_prod.nit:6856 */
+      /* parser/parser_prod.nit:7217 */
       ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6858 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6858);
+      /* parser/parser_prod.nit:7219 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7219);
+    }
+    /* parser/parser_prod.nit:7221 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7223 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7224 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7225 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7225);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7226 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7226);
+      }
+      /* parser/parser_prod.nit:7227 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7229 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:6860 */
+    /* parser/parser_prod.nit:7231 */
     goto label1;
   }
   label1: while(0);
@@ -37365,28 +39505,58 @@ void parser___parser_prod___ANullExpr___replace_child(val_t p0, val_t p1, val_t
 }
 static const char LOCATE_parser___parser_prod___ANullExpr___visit_all[] = "parser_prod::ANullExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ANullExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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___parser_prod;
-  fra.me.line = 6864;
+  fra.me.line = 7235;
   fra.me.meth = LOCATE_parser___parser_prod___ANullExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6866 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7235 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7237 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 6866);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 7237);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7238 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7239 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7239);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -37398,7 +39568,7 @@ void parser___parser_prod___AIntExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos231]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6870;
+  fra.me.line = 7244;
   fra.me.meth = LOCATE_parser___parser_prod___AIntExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -37410,46 +39580,73 @@ void parser___parser_prod___AIntExpr___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___AIntExpr___init_aintexpr[] = "parser_prod::AIntExpr::init_aintexpr";
-void parser___parser_prod___AIntExpr___init_aintexpr(val_t p0, val_t p1, int* init_table){
+void parser___parser_prod___AIntExpr___init_aintexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos232 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIntExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   if (init_table[itpos232]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6872;
+  fra.me.line = 7246;
   fra.me.meth = LOCATE_parser___parser_prod___AIntExpr___init_aintexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6872 */
-  fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6876 */
-  CALL_parser___parser_prod___AIntExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:6877 */
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:7246 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7251 */
+  CALL_parser___parser_prod___AIntExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:7252 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6877);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7252);
   }
-  ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6878 */
+  ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7253 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6878);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7253);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos232] = 1;
-  return;
-}
-static const char LOCATE_parser___parser_prod___AIntExpr___replace_child[] = "parser_prod::AIntExpr::(parser_prod::ANode::replace_child)";
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7254 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:7255 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7256 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7256);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos232] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AIntExpr___replace_child[] = "parser_prod::AIntExpr::(parser_prod::ANode::replace_child)";
 void parser___parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -37457,7 +39654,7 @@ void parser___parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6881;
+  fra.me.line = 7260;
   fra.me.meth = LOCATE_parser___parser_prod___AIntExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -37469,11 +39666,11 @@ void parser___parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6883 */
+  /* parser/parser_prod.nit:7262 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser___parser_prod, 6883);
+    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser___parser_prod, 7262);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37483,7 +39680,7 @@ void parser___parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6884 */
+    /* parser/parser_prod.nit:7263 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37498,25 +39695,76 @@ void parser___parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6885 */
+      /* parser/parser_prod.nit:7264 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6885);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7264);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6886 */
+      /* parser/parser_prod.nit:7265 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TNumber, ID_parser___parser_nodes___TNumber)) /*cast TNumber*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6886);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7265);
       }
-      /* parser/parser_prod.nit:6887 */
+      /* parser/parser_prod.nit:7266 */
       ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6889 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6889);
+      /* parser/parser_prod.nit:7268 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7268);
     }
-    /* parser/parser_prod.nit:6891 */
+    /* parser/parser_prod.nit:7270 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7272 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7273 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7274 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7274);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7275 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7275);
+      }
+      /* parser/parser_prod.nit:7276 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7278 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:7280 */
     goto label1;
   }
   label1: while(0);
@@ -37525,28 +39773,58 @@ void parser___parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p
 }
 static const char LOCATE_parser___parser_prod___AIntExpr___visit_all[] = "parser_prod::AIntExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AIntExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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___parser_prod;
-  fra.me.line = 6895;
+  fra.me.line = 7284;
   fra.me.meth = LOCATE_parser___parser_prod___AIntExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6897 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7284 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7286 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser___parser_prod, 6897);
+    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser___parser_prod, 7286);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7287 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7288 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7288);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AIntExpr____n_number(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -37558,7 +39836,7 @@ void parser___parser_prod___AFloatExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos233]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6901;
+  fra.me.line = 7293;
   fra.me.meth = LOCATE_parser___parser_prod___AFloatExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -37570,41 +39848,68 @@ void parser___parser_prod___AFloatExpr___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___AFloatExpr___init_afloatexpr[] = "parser_prod::AFloatExpr::init_afloatexpr";
-void parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0, val_t p1, int* init_table){
+void parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos234 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AFloatExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   if (init_table[itpos234]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6903;
+  fra.me.line = 7295;
   fra.me.meth = LOCATE_parser___parser_prod___AFloatExpr___init_afloatexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6903 */
-  fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6907 */
-  CALL_parser___parser_prod___AFloatExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:6908 */
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:7295 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7300 */
+  CALL_parser___parser_prod___AFloatExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:7301 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6908);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7301);
   }
-  ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6909 */
+  ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7302 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6909);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7302);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7303 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:7304 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7305 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7305);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos234] = 1;
   return;
@@ -37617,7 +39922,7 @@ void parser___parser_prod___AFloatExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6912;
+  fra.me.line = 7309;
   fra.me.meth = LOCATE_parser___parser_prod___AFloatExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -37629,11 +39934,11 @@ void parser___parser_prod___AFloatExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6914 */
+  /* parser/parser_prod.nit:7311 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser___parser_prod, 6914);
+    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser___parser_prod, 7311);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37643,7 +39948,7 @@ void parser___parser_prod___AFloatExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6915 */
+    /* parser/parser_prod.nit:7312 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37658,25 +39963,76 @@ void parser___parser_prod___AFloatExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6916 */
+      /* parser/parser_prod.nit:7313 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6916);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7313);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6917 */
+      /* parser/parser_prod.nit:7314 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TFloat, ID_parser___parser_nodes___TFloat)) /*cast TFloat*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6917);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7314);
       }
-      /* parser/parser_prod.nit:6918 */
+      /* parser/parser_prod.nit:7315 */
       ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6920 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6920);
+      /* parser/parser_prod.nit:7317 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7317);
+    }
+    /* parser/parser_prod.nit:7319 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7321 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7322 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7323 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7323);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7324 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7324);
+      }
+      /* parser/parser_prod.nit:7325 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7327 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:6922 */
+    /* parser/parser_prod.nit:7329 */
     goto label1;
   }
   label1: while(0);
@@ -37685,28 +40041,58 @@ void parser___parser_prod___AFloatExpr___replace_child(val_t p0, val_t p1, val_t
 }
 static const char LOCATE_parser___parser_prod___AFloatExpr___visit_all[] = "parser_prod::AFloatExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AFloatExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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___parser_prod;
-  fra.me.line = 6926;
+  fra.me.line = 7333;
   fra.me.meth = LOCATE_parser___parser_prod___AFloatExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6928 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7333 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7335 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser___parser_prod, 6928);
+    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser___parser_prod, 7335);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7336 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7337 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7337);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AFloatExpr____n_float(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -37718,7 +40104,7 @@ void parser___parser_prod___ACharExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos235]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6932;
+  fra.me.line = 7342;
   fra.me.meth = LOCATE_parser___parser_prod___ACharExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -37730,41 +40116,68 @@ void parser___parser_prod___ACharExpr___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___ACharExpr___init_acharexpr[] = "parser_prod::ACharExpr::init_acharexpr";
-void parser___parser_prod___ACharExpr___init_acharexpr(val_t p0, val_t p1, int* init_table){
+void parser___parser_prod___ACharExpr___init_acharexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos236 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ACharExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   if (init_table[itpos236]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6934;
+  fra.me.line = 7344;
   fra.me.meth = LOCATE_parser___parser_prod___ACharExpr___init_acharexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6934 */
-  fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6938 */
-  CALL_parser___parser_prod___ACharExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:6939 */
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:7344 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7349 */
+  CALL_parser___parser_prod___ACharExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:7350 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6939);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7350);
   }
-  ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6940 */
+  ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7351 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6940);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7351);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7352 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:7353 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7354 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7354);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos236] = 1;
   return;
@@ -37777,7 +40190,7 @@ void parser___parser_prod___ACharExpr___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6943;
+  fra.me.line = 7358;
   fra.me.meth = LOCATE_parser___parser_prod___ACharExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -37789,11 +40202,11 @@ void parser___parser_prod___ACharExpr___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6945 */
+  /* parser/parser_prod.nit:7360 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser___parser_prod, 6945);
+    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser___parser_prod, 7360);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37803,7 +40216,7 @@ void parser___parser_prod___ACharExpr___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6946 */
+    /* parser/parser_prod.nit:7361 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37818,25 +40231,76 @@ void parser___parser_prod___ACharExpr___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6947 */
+      /* parser/parser_prod.nit:7362 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6947);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7362);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6948 */
+      /* parser/parser_prod.nit:7363 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TChar, ID_parser___parser_nodes___TChar)) /*cast TChar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6948);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7363);
       }
-      /* parser/parser_prod.nit:6949 */
+      /* parser/parser_prod.nit:7364 */
       ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6951 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6951);
+      /* parser/parser_prod.nit:7366 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7366);
     }
-    /* parser/parser_prod.nit:6953 */
+    /* parser/parser_prod.nit:7368 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7370 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7371 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7372 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7372);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7373 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7373);
+      }
+      /* parser/parser_prod.nit:7374 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7376 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:7378 */
     goto label1;
   }
   label1: while(0);
@@ -37845,28 +40309,58 @@ void parser___parser_prod___ACharExpr___replace_child(val_t p0, val_t p1, val_t
 }
 static const char LOCATE_parser___parser_prod___ACharExpr___visit_all[] = "parser_prod::ACharExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ACharExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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___parser_prod;
-  fra.me.line = 6957;
+  fra.me.line = 7382;
   fra.me.meth = LOCATE_parser___parser_prod___ACharExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6959 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7382 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7384 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser___parser_prod, 6959);
+    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser___parser_prod, 7384);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7385 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7386 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7386);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ACharExpr____n_char(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -37878,7 +40372,7 @@ void parser___parser_prod___AStringExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos237]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6963;
+  fra.me.line = 7391;
   fra.me.meth = LOCATE_parser___parser_prod___AStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -37890,41 +40384,68 @@ void parser___parser_prod___AStringExpr___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___AStringExpr___init_astringexpr[] = "parser_prod::AStringExpr::init_astringexpr";
-void parser___parser_prod___AStringExpr___init_astringexpr(val_t p0, val_t p1, int* init_table){
+void parser___parser_prod___AStringExpr___init_astringexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos238 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AStringExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   if (init_table[itpos238]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6965;
+  fra.me.line = 7393;
   fra.me.meth = LOCATE_parser___parser_prod___AStringExpr___init_astringexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6965 */
-  fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:6969 */
-  CALL_parser___parser_prod___AStringExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:6970 */
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:7393 */
+  fra.me.REG[3] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7398 */
+  CALL_parser___parser_prod___AStringExpr___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
+  /* parser/parser_prod.nit:7399 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 6970);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7399);
   }
-  ATTR_parser___parser_nodes___AStringExpr____n_string(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:6971 */
+  ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[3]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7400 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6971);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7400);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7401 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[3]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:7402 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7403 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7403);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   init_table[itpos238] = 1;
   return;
@@ -37937,7 +40458,7 @@ void parser___parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6974;
+  fra.me.line = 7407;
   fra.me.meth = LOCATE_parser___parser_prod___AStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -37949,13 +40470,13 @@ void parser___parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:6976 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7409 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 6976);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7409);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AStringExpr____n_string(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37963,7 +40484,7 @@ void parser___parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:6977 */
+    /* parser/parser_prod.nit:7410 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37978,25 +40499,76 @@ void parser___parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:6978 */
+      /* parser/parser_prod.nit:7411 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 6978);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7411);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:6979 */
+      /* parser/parser_prod.nit:7412 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast TString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 6979);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7412);
       }
-      /* parser/parser_prod.nit:6980 */
-      ATTR_parser___parser_nodes___AStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:7413 */
+      ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:6982 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 6982);
+      /* parser/parser_prod.nit:7415 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7415);
     }
-    /* parser/parser_prod.nit:6984 */
+    /* parser/parser_prod.nit:7417 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7419 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7420 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7421 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7421);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7422 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7422);
+      }
+      /* parser/parser_prod.nit:7423 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7425 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:7427 */
     goto label1;
   }
   label1: while(0);
@@ -38005,28 +40577,58 @@ void parser___parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_
 }
 static const char LOCATE_parser___parser_prod___AStringExpr___visit_all[] = "parser_prod::AStringExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AStringExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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___parser_prod;
-  fra.me.line = 6988;
+  fra.me.line = 7431;
   fra.me.meth = LOCATE_parser___parser_prod___AStringExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6990 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7431 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7433 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 6990);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7433);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7434 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7435 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7435);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AStringExpr____n_string(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -38038,7 +40640,7 @@ void parser___parser_prod___AStartStringExpr___empty_init(val_t p0, int* init_ta
   if (init_table[itpos239]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6994;
+  fra.me.line = 7440;
   fra.me.meth = LOCATE_parser___parser_prod___AStartStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -38058,7 +40660,7 @@ void parser___parser_prod___AStartStringExpr___init_astartstringexpr(val_t p0, v
   if (init_table[itpos240]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 6996;
+  fra.me.line = 7442;
   fra.me.meth = LOCATE_parser___parser_prod___AStartStringExpr___init_astartstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -38068,21 +40670,21 @@ void parser___parser_prod___AStartStringExpr___init_astartstringexpr(val_t p0, v
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:6996 */
+  /* parser/parser_prod.nit:7442 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7000 */
+  /* parser/parser_prod.nit:7446 */
   CALL_parser___parser_prod___AStartStringExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:7001 */
+  /* parser/parser_prod.nit:7447 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7001);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7447);
   }
-  ATTR_parser___parser_nodes___AStartStringExpr____n_string(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7002 */
+  ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7448 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7002);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7448);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -38097,7 +40699,7 @@ void parser___parser_prod___AStartStringExpr___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7005;
+  fra.me.line = 7451;
   fra.me.meth = LOCATE_parser___parser_prod___AStartStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38109,13 +40711,13 @@ void parser___parser_prod___AStartStringExpr___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7007 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStartStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7453 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7007);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7453);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38123,7 +40725,7 @@ void parser___parser_prod___AStartStringExpr___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7008 */
+    /* parser/parser_prod.nit:7454 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -38138,25 +40740,25 @@ void parser___parser_prod___AStartStringExpr___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7009 */
+      /* parser/parser_prod.nit:7455 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7009);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7455);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7010 */
+      /* parser/parser_prod.nit:7456 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TStartString, ID_parser___parser_nodes___TStartString)) /*cast TStartString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7010);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7456);
       }
-      /* parser/parser_prod.nit:7011 */
-      ATTR_parser___parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:7457 */
+      ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7013 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7013);
+      /* parser/parser_prod.nit:7459 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7459);
     }
-    /* parser/parser_prod.nit:7015 */
+    /* parser/parser_prod.nit:7461 */
     goto label1;
   }
   label1: while(0);
@@ -38170,7 +40772,7 @@ void parser___parser_prod___AStartStringExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7019;
+  fra.me.line = 7465;
   fra.me.meth = LOCATE_parser___parser_prod___AStartStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38179,13 +40781,13 @@ void parser___parser_prod___AStartStringExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7021 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStartStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7467 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7021);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7467);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]);
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
@@ -38198,7 +40800,7 @@ void parser___parser_prod___AMidStringExpr___empty_init(val_t p0, int* init_tabl
   if (init_table[itpos241]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7025;
+  fra.me.line = 7471;
   fra.me.meth = LOCATE_parser___parser_prod___AMidStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -38218,7 +40820,7 @@ void parser___parser_prod___AMidStringExpr___init_amidstringexpr(val_t p0, val_t
   if (init_table[itpos242]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7027;
+  fra.me.line = 7473;
   fra.me.meth = LOCATE_parser___parser_prod___AMidStringExpr___init_amidstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -38228,21 +40830,21 @@ void parser___parser_prod___AMidStringExpr___init_amidstringexpr(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7027 */
+  /* parser/parser_prod.nit:7473 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7031 */
+  /* parser/parser_prod.nit:7477 */
   CALL_parser___parser_prod___AMidStringExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:7032 */
+  /* parser/parser_prod.nit:7478 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7032);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7478);
   }
-  ATTR_parser___parser_nodes___AMidStringExpr____n_string(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7033 */
+  ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7479 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7033);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7479);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -38257,7 +40859,7 @@ void parser___parser_prod___AMidStringExpr___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7036;
+  fra.me.line = 7482;
   fra.me.meth = LOCATE_parser___parser_prod___AMidStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38269,13 +40871,13 @@ void parser___parser_prod___AMidStringExpr___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7038 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMidStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7484 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7038);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7484);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38283,7 +40885,7 @@ void parser___parser_prod___AMidStringExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7039 */
+    /* parser/parser_prod.nit:7485 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -38298,25 +40900,25 @@ void parser___parser_prod___AMidStringExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7040 */
+      /* parser/parser_prod.nit:7486 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7040);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7486);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7041 */
+      /* parser/parser_prod.nit:7487 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TMidString, ID_parser___parser_nodes___TMidString)) /*cast TMidString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7041);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7487);
       }
-      /* parser/parser_prod.nit:7042 */
-      ATTR_parser___parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:7488 */
+      ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7044 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7044);
+      /* parser/parser_prod.nit:7490 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7490);
     }
-    /* parser/parser_prod.nit:7046 */
+    /* parser/parser_prod.nit:7492 */
     goto label1;
   }
   label1: while(0);
@@ -38330,7 +40932,7 @@ void parser___parser_prod___AMidStringExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7050;
+  fra.me.line = 7496;
   fra.me.meth = LOCATE_parser___parser_prod___AMidStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38339,13 +40941,13 @@ void parser___parser_prod___AMidStringExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7052 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMidStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7498 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7052);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7498);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]);
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
@@ -38358,7 +40960,7 @@ void parser___parser_prod___AEndStringExpr___empty_init(val_t p0, int* init_tabl
   if (init_table[itpos243]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7056;
+  fra.me.line = 7502;
   fra.me.meth = LOCATE_parser___parser_prod___AEndStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -38378,7 +40980,7 @@ void parser___parser_prod___AEndStringExpr___init_aendstringexpr(val_t p0, val_t
   if (init_table[itpos244]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7058;
+  fra.me.line = 7504;
   fra.me.meth = LOCATE_parser___parser_prod___AEndStringExpr___init_aendstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -38388,21 +40990,21 @@ void parser___parser_prod___AEndStringExpr___init_aendstringexpr(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7058 */
+  /* parser/parser_prod.nit:7504 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7062 */
+  /* parser/parser_prod.nit:7508 */
   CALL_parser___parser_prod___AEndStringExpr___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:7063 */
+  /* parser/parser_prod.nit:7509 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7063);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7509);
   }
-  ATTR_parser___parser_nodes___AEndStringExpr____n_string(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7064 */
+  ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7510 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7064);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7510);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -38417,7 +41019,7 @@ void parser___parser_prod___AEndStringExpr___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7067;
+  fra.me.line = 7513;
   fra.me.meth = LOCATE_parser___parser_prod___AEndStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38429,13 +41031,13 @@ void parser___parser_prod___AEndStringExpr___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7069 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEndStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7515 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7069);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7515);
   }
-  fra.me.REG[3] = ATTR_parser___parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38443,7 +41045,7 @@ void parser___parser_prod___AEndStringExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7070 */
+    /* parser/parser_prod.nit:7516 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -38458,25 +41060,25 @@ void parser___parser_prod___AEndStringExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7071 */
+      /* parser/parser_prod.nit:7517 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7071);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7517);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7072 */
+      /* parser/parser_prod.nit:7518 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TEndString, ID_parser___parser_nodes___TEndString)) /*cast TEndString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7072);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7518);
       }
-      /* parser/parser_prod.nit:7073 */
-      ATTR_parser___parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
+      /* parser/parser_prod.nit:7519 */
+      ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7075 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7075);
+      /* parser/parser_prod.nit:7521 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7521);
     }
-    /* parser/parser_prod.nit:7077 */
+    /* parser/parser_prod.nit:7523 */
     goto label1;
   }
   label1: while(0);
@@ -38490,7 +41092,7 @@ void parser___parser_prod___AEndStringExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7081;
+  fra.me.line = 7527;
   fra.me.meth = LOCATE_parser___parser_prod___AEndStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38499,13 +41101,13 @@ void parser___parser_prod___AEndStringExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7083 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AEndStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7529 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7083);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 7529);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]);
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AStringFormExpr____n_string(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
@@ -38518,7 +41120,7 @@ void parser___parser_prod___ASuperstringExpr___empty_init(val_t p0, int* init_ta
   if (init_table[itpos245]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7087;
+  fra.me.line = 7533;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperstringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -38530,25 +41132,53 @@ void parser___parser_prod___ASuperstringExpr___empty_init(val_t p0, int* init_ta
   return;
 }
 static const char LOCATE_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr[] = "parser_prod::ASuperstringExpr::init_asuperstringexpr";
-void parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, val_t p1, int* init_table){
+void parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, val_t p1, val_t p2, int* init_table){
   int itpos246 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ASuperstringExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   if (init_table[itpos246]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7089;
+  fra.me.line = 7535;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 3;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7093 */
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:7540 */
   CALL_parser___parser_prod___ASuperstringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr_1));
+  /* parser/parser_prod.nit:7546 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:7547 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7548 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7548);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
   stack_frame_head = fra.me.prev;
   init_table[itpos246] = 1;
   return;
@@ -38558,7 +41188,7 @@ void parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, v
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:7094 */
+    /* parser/parser_prod.nit:7541 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -38572,21 +41202,21 @@ void parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, v
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:7095 */
+    /* parser/parser_prod.nit:7542 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7095);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7542);
     }
-    /* parser/parser_prod.nit:7096 */
+    /* parser/parser_prod.nit:7543 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7096);
+      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7543);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:7097 */
+    /* parser/parser_prod.nit:7544 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -38602,7 +41232,7 @@ void parser___parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7101;
+  fra.me.line = 7552;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperstringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38614,12 +41244,12 @@ void parser___parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7103 */
+  /* parser/parser_prod.nit:7554 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7103);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7554);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -38634,13 +41264,13 @@ void parser___parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1,
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:7103 */
+      /* parser/parser_prod.nit:7554 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:7104 */
+      /* parser/parser_prod.nit:7555 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7104);
+        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7555);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -38657,7 +41287,7 @@ void parser___parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1,
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:7105 */
+        /* parser/parser_prod.nit:7556 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -38672,37 +41302,37 @@ void parser___parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1,
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:7106 */
+          /* parser/parser_prod.nit:7557 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7106);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7557);
           }
-          /* parser/parser_prod.nit:7107 */
+          /* parser/parser_prod.nit:7558 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7107);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7558);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:7108 */
+          /* parser/parser_prod.nit:7559 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7108);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7559);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:7110 */
+          /* parser/parser_prod.nit:7561 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7110);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7561);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:7112 */
+        /* parser/parser_prod.nit:7563 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -38717,34 +41347,115 @@ void parser___parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1,
     }
   }
   label2: while(0);
+  /* parser/parser_prod.nit:7566 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7567 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7568 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7568);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7569 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7569);
+      }
+      /* parser/parser_prod.nit:7570 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7572 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:7574 */
+    goto label1;
+  }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
 static const char LOCATE_parser___parser_prod___ASuperstringExpr___visit_all[] = "parser_prod::ASuperstringExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___ASuperstringExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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___parser_prod;
-  fra.me.line = 7117;
+  fra.me.line = 7578;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperstringExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7119 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7578 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7580 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7119);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7580);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASuperstringExpr___visit_all_1));
+  /* parser/parser_prod.nit:7583 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7584 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7584);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
-  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ASuperstringExpr___visit_all_1));
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -38764,7 +41475,7 @@ void parser___parser_prod___ASuperstringExpr___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:7120 */
+    /* parser/parser_prod.nit:7581 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -38777,7 +41488,7 @@ void parser___parser_prod___AParExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos247]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7125;
+  fra.me.line = 7589;
   fra.me.meth = LOCATE_parser___parser_prod___AParExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -38789,71 +41500,98 @@ void parser___parser_prod___AParExpr___empty_init(val_t p0, int* init_table){
   return;
 }
 static const char LOCATE_parser___parser_prod___AParExpr___init_aparexpr[] = "parser_prod::AParExpr::init_aparexpr";
-void parser___parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+void parser___parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
   int itpos248 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AParExpr].i;
-  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;
   if (init_table[itpos248]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7127;
+  fra.me.line = 7591;
   fra.me.meth = LOCATE_parser___parser_prod___AParExpr___init_aparexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:7127 */
-  fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7133 */
-  CALL_parser___parser_prod___AParExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:7134 */
+  fra.me.REG[4] = p4;
+  /* parser/parser_prod.nit:7591 */
+  fra.me.REG[5] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7598 */
+  CALL_parser___parser_prod___AParExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
+  /* parser/parser_prod.nit:7599 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7134);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7599);
   }
-  ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7135 */
+  ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[5]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:7600 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7135);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7600);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:7136 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* parser/parser_prod.nit:7601 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7136);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7601);
   }
-  ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7137 */
+  ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[5]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:7602 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7137);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7602);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:7138 */
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
+  /* parser/parser_prod.nit:7603 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7138);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7603);
   }
-  ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:7139 */
+  ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[5]) = fra.me.REG[3];
+  /* parser/parser_prod.nit:7604 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7139);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7604);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser_prod.nit:7605 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[5]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:7606 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7607 */
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7607);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   }
-  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
   init_table[itpos248] = 1;
   return;
@@ -38866,7 +41604,7 @@ void parser___parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7142;
+  fra.me.line = 7611;
   fra.me.meth = LOCATE_parser___parser_prod___AParExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38878,11 +41616,11 @@ void parser___parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7144 */
+  /* parser/parser_prod.nit:7613 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7144);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7613);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -38892,7 +41630,7 @@ void parser___parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7145 */
+    /* parser/parser_prod.nit:7614 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -38907,32 +41645,32 @@ void parser___parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7146 */
+      /* parser/parser_prod.nit:7615 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7146);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7615);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7147 */
+      /* parser/parser_prod.nit:7616 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast TOpar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7147);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7616);
       }
-      /* parser/parser_prod.nit:7148 */
+      /* parser/parser_prod.nit:7617 */
       ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7150 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7150);
+      /* parser/parser_prod.nit:7619 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7619);
     }
-    /* parser/parser_prod.nit:7152 */
+    /* parser/parser_prod.nit:7621 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7154 */
+  /* parser/parser_prod.nit:7623 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7154);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7623);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -38942,7 +41680,7 @@ void parser___parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7155 */
+    /* parser/parser_prod.nit:7624 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -38957,32 +41695,32 @@ void parser___parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7156 */
+      /* parser/parser_prod.nit:7625 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7156);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7625);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7157 */
+      /* parser/parser_prod.nit:7626 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7157);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7626);
       }
-      /* parser/parser_prod.nit:7158 */
+      /* parser/parser_prod.nit:7627 */
       ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7160 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7160);
+      /* parser/parser_prod.nit:7629 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7629);
     }
-    /* parser/parser_prod.nit:7162 */
+    /* parser/parser_prod.nit:7631 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7164 */
+  /* parser/parser_prod.nit:7633 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7164);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7633);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -38992,7 +41730,7 @@ void parser___parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7165 */
+    /* parser/parser_prod.nit:7634 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39007,25 +41745,76 @@ void parser___parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7166 */
+      /* parser/parser_prod.nit:7635 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7166);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7635);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7167 */
+      /* parser/parser_prod.nit:7636 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast TCpar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7167);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7636);
       }
-      /* parser/parser_prod.nit:7168 */
+      /* parser/parser_prod.nit:7637 */
       ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7170 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7170);
+      /* parser/parser_prod.nit:7639 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7639);
     }
-    /* parser/parser_prod.nit:7172 */
+    /* parser/parser_prod.nit:7641 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:7643 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7644 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:7645 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7645);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:7646 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7646);
+      }
+      /* parser/parser_prod.nit:7647 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:7649 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:7651 */
     goto label1;
   }
   label1: while(0);
@@ -39034,45 +41823,74 @@ void parser___parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p
 }
 static const char LOCATE_parser___parser_prod___AParExpr___visit_all[] = "parser_prod::AParExpr::(parser_prod::ANode::visit_all)";
 void parser___parser_prod___AParExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} 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___parser_prod;
-  fra.me.line = 7176;
+  fra.me.line = 7655;
   fra.me.meth = LOCATE_parser___parser_prod___AParExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7178 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser_prod.nit:7655 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:7657 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7178);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7657);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7179 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AParExpr____n_opar(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7658 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7179);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7658);
   }
-  fra.me.REG[2] = ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7180 */
-  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AProxyExpr____n_expr(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7659 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7180);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7659);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:7660 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:7661 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7661);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[0] = ATTR_parser___parser_nodes___AParExpr____n_cpar(fra.me.REG[0]);
-  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -39084,7 +41902,7 @@ void parser___parser_prod___AAsCastExpr___empty_init(val_t p0, int* init_table){
   if (init_table[itpos249]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7184;
+  fra.me.line = 7666;
   fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -39104,7 +41922,7 @@ void parser___parser_prod___AAsCastExpr___init_aascastexpr(val_t p0, val_t p1, v
   if (init_table[itpos250]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7186;
+  fra.me.line = 7668;
   fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___init_aascastexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -39122,73 +41940,73 @@ void parser___parser_prod___AAsCastExpr___init_aascastexpr(val_t p0, val_t p1, v
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* parser/parser_prod.nit:7186 */
+  /* parser/parser_prod.nit:7668 */
   fra.me.REG[6] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7194 */
+  /* parser/parser_prod.nit:7676 */
   CALL_parser___parser_prod___AAsCastExpr___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
-  /* parser/parser_prod.nit:7195 */
+  /* parser/parser_prod.nit:7677 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7195);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7677);
   }
   ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[6]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7196 */
+  /* parser/parser_prod.nit:7678 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7196);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7678);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-  /* parser/parser_prod.nit:7197 */
+  /* parser/parser_prod.nit:7679 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7197);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7679);
   }
   ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[6]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7198 */
+  /* parser/parser_prod.nit:7680 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7198);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7680);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
-  /* parser/parser_prod.nit:7199 */
+  /* parser/parser_prod.nit:7681 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7199);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7681);
   }
   ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[6]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:7200 */
+  /* parser/parser_prod.nit:7682 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7200);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7682);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
-  /* parser/parser_prod.nit:7201 */
+  /* parser/parser_prod.nit:7683 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7201);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7683);
   }
   ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[6]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:7202 */
+  /* parser/parser_prod.nit:7684 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7202);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7684);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-  /* parser/parser_prod.nit:7203 */
+  /* parser/parser_prod.nit:7685 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7203);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7685);
   }
   ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[6]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:7204 */
+  /* parser/parser_prod.nit:7686 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7204);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7686);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   stack_frame_head = fra.me.prev;
@@ -39203,7 +42021,7 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7207;
+  fra.me.line = 7689;
   fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39215,11 +42033,11 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7209 */
+  /* parser/parser_prod.nit:7691 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7209);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7691);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39229,7 +42047,7 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7210 */
+    /* parser/parser_prod.nit:7692 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39244,32 +42062,32 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7211 */
+      /* parser/parser_prod.nit:7693 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7211);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7693);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7212 */
+      /* parser/parser_prod.nit:7694 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7212);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7694);
       }
-      /* parser/parser_prod.nit:7213 */
+      /* parser/parser_prod.nit:7695 */
       ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7215 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7215);
+      /* parser/parser_prod.nit:7697 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7697);
     }
-    /* parser/parser_prod.nit:7217 */
+    /* parser/parser_prod.nit:7699 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7219 */
+  /* parser/parser_prod.nit:7701 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7219);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7701);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39279,7 +42097,7 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7220 */
+    /* parser/parser_prod.nit:7702 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39294,32 +42112,32 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7221 */
+      /* parser/parser_prod.nit:7703 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7221);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7703);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7222 */
+      /* parser/parser_prod.nit:7704 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast TKwas*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7222);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7704);
       }
-      /* parser/parser_prod.nit:7223 */
+      /* parser/parser_prod.nit:7705 */
       ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7225 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7225);
+      /* parser/parser_prod.nit:7707 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7707);
     }
-    /* parser/parser_prod.nit:7227 */
+    /* parser/parser_prod.nit:7709 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7229 */
+  /* parser/parser_prod.nit:7711 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7229);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7711);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39329,7 +42147,7 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7230 */
+    /* parser/parser_prod.nit:7712 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39344,32 +42162,32 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7231 */
+      /* parser/parser_prod.nit:7713 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7231);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7713);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7232 */
+      /* parser/parser_prod.nit:7714 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast TOpar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7232);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7714);
       }
-      /* parser/parser_prod.nit:7233 */
+      /* parser/parser_prod.nit:7715 */
       ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7235 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7235);
+      /* parser/parser_prod.nit:7717 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7717);
     }
-    /* parser/parser_prod.nit:7237 */
+    /* parser/parser_prod.nit:7719 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7239 */
+  /* parser/parser_prod.nit:7721 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7239);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7721);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39379,7 +42197,7 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7240 */
+    /* parser/parser_prod.nit:7722 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39394,32 +42212,32 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7241 */
+      /* parser/parser_prod.nit:7723 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7241);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7723);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7242 */
+      /* parser/parser_prod.nit:7724 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7242);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7724);
       }
-      /* parser/parser_prod.nit:7243 */
+      /* parser/parser_prod.nit:7725 */
       ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7245 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7245);
+      /* parser/parser_prod.nit:7727 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7727);
     }
-    /* parser/parser_prod.nit:7247 */
+    /* parser/parser_prod.nit:7729 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7249 */
+  /* parser/parser_prod.nit:7731 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7249);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7731);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39429,7 +42247,7 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7250 */
+    /* parser/parser_prod.nit:7732 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39444,25 +42262,25 @@ void parser___parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7251 */
+      /* parser/parser_prod.nit:7733 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7251);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7733);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7252 */
+      /* parser/parser_prod.nit:7734 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast TCpar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7252);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7734);
       }
-      /* parser/parser_prod.nit:7253 */
+      /* parser/parser_prod.nit:7735 */
       ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7255 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7255);
+      /* parser/parser_prod.nit:7737 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7737);
     }
-    /* parser/parser_prod.nit:7257 */
+    /* parser/parser_prod.nit:7739 */
     goto label1;
   }
   label1: while(0);
@@ -39476,7 +42294,7 @@ void parser___parser_prod___AAsCastExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7261;
+  fra.me.line = 7743;
   fra.me.meth = LOCATE_parser___parser_prod___AAsCastExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -39486,43 +42304,43 @@ void parser___parser_prod___AAsCastExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7263 */
+  /* parser/parser_prod.nit:7745 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7263);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7745);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7264 */
+  /* parser/parser_prod.nit:7746 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7264);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7746);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7265 */
+  /* parser/parser_prod.nit:7747 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7265);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7747);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAsCastExpr____n_opar(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7266 */
+  /* parser/parser_prod.nit:7748 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7266);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7748);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7267 */
+  /* parser/parser_prod.nit:7749 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7267);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7749);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsCastExpr____n_cpar(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -39537,7 +42355,7 @@ void parser___parser_prod___AAsNotnullExpr___empty_init(val_t p0, int* init_tabl
   if (init_table[itpos251]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7271;
+  fra.me.line = 7753;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -39557,7 +42375,7 @@ void parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr(val_t p0, val_t
   if (init_table[itpos252]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7273;
+  fra.me.line = 7755;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -39577,86 +42395,86 @@ void parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr(val_t p0, val_t
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* parser/parser_prod.nit:7273 */
+  /* parser/parser_prod.nit:7755 */
   fra.me.REG[7] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7282 */
+  /* parser/parser_prod.nit:7764 */
   CALL_parser___parser_prod___AAsNotnullExpr___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
-  /* parser/parser_prod.nit:7283 */
+  /* parser/parser_prod.nit:7765 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7283);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7765);
   }
   ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[7]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7284 */
+  /* parser/parser_prod.nit:7766 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7284);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7766);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-  /* parser/parser_prod.nit:7285 */
+  /* parser/parser_prod.nit:7767 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7285);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7767);
   }
   ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[7]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7286 */
+  /* parser/parser_prod.nit:7768 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7286);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7768);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
-  /* parser/parser_prod.nit:7287 */
+  /* parser/parser_prod.nit:7769 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7287);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7769);
   }
   ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[7]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:7288 */
+  /* parser/parser_prod.nit:7770 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7288);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7770);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
-  /* parser/parser_prod.nit:7289 */
+  /* parser/parser_prod.nit:7771 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7289);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7771);
   }
   ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[7]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:7290 */
+  /* parser/parser_prod.nit:7772 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7290);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7772);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
-  /* parser/parser_prod.nit:7291 */
+  /* parser/parser_prod.nit:7773 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7291);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7773);
   }
   ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[7]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:7292 */
+  /* parser/parser_prod.nit:7774 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7292);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7774);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
-  /* parser/parser_prod.nit:7293 */
+  /* parser/parser_prod.nit:7775 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7293);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7775);
   }
   ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[7]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:7294 */
+  /* parser/parser_prod.nit:7776 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7294);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7776);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   stack_frame_head = fra.me.prev;
@@ -39671,7 +42489,7 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7297;
+  fra.me.line = 7779;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39683,11 +42501,11 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7299 */
+  /* parser/parser_prod.nit:7781 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7299);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7781);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39697,7 +42515,7 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7300 */
+    /* parser/parser_prod.nit:7782 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39712,32 +42530,32 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7301 */
+      /* parser/parser_prod.nit:7783 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7301);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7783);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7302 */
+      /* parser/parser_prod.nit:7784 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7302);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7784);
       }
-      /* parser/parser_prod.nit:7303 */
+      /* parser/parser_prod.nit:7785 */
       ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7305 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7305);
+      /* parser/parser_prod.nit:7787 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7787);
     }
-    /* parser/parser_prod.nit:7307 */
+    /* parser/parser_prod.nit:7789 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7309 */
+  /* parser/parser_prod.nit:7791 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7309);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7791);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39747,7 +42565,7 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7310 */
+    /* parser/parser_prod.nit:7792 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39762,32 +42580,32 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7311 */
+      /* parser/parser_prod.nit:7793 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7311);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7793);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7312 */
+      /* parser/parser_prod.nit:7794 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast TKwas*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7312);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7794);
       }
-      /* parser/parser_prod.nit:7313 */
+      /* parser/parser_prod.nit:7795 */
       ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7315 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7315);
+      /* parser/parser_prod.nit:7797 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7797);
     }
-    /* parser/parser_prod.nit:7317 */
+    /* parser/parser_prod.nit:7799 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7319 */
+  /* parser/parser_prod.nit:7801 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7319);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7801);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39797,7 +42615,7 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7320 */
+    /* parser/parser_prod.nit:7802 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39812,32 +42630,32 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7321 */
+      /* parser/parser_prod.nit:7803 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7321);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7803);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7322 */
+      /* parser/parser_prod.nit:7804 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast TOpar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7322);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7804);
       }
-      /* parser/parser_prod.nit:7323 */
+      /* parser/parser_prod.nit:7805 */
       ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7325 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7325);
+      /* parser/parser_prod.nit:7807 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7807);
     }
-    /* parser/parser_prod.nit:7327 */
+    /* parser/parser_prod.nit:7809 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7329 */
+  /* parser/parser_prod.nit:7811 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 7329);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 7811);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39847,7 +42665,7 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7330 */
+    /* parser/parser_prod.nit:7812 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39862,32 +42680,32 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7331 */
+      /* parser/parser_prod.nit:7813 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7331);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7813);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7332 */
+      /* parser/parser_prod.nit:7814 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast TKwnot*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7332);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7814);
       }
-      /* parser/parser_prod.nit:7333 */
+      /* parser/parser_prod.nit:7815 */
       ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7335 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7335);
+      /* parser/parser_prod.nit:7817 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7817);
     }
-    /* parser/parser_prod.nit:7337 */
+    /* parser/parser_prod.nit:7819 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7339 */
+  /* parser/parser_prod.nit:7821 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 7339);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 7821);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39897,7 +42715,7 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7340 */
+    /* parser/parser_prod.nit:7822 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39912,32 +42730,32 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7341 */
+      /* parser/parser_prod.nit:7823 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7341);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7823);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7342 */
+      /* parser/parser_prod.nit:7824 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnull, ID_parser___parser_nodes___TKwnull)) /*cast TKwnull*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7342);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7824);
       }
-      /* parser/parser_prod.nit:7343 */
+      /* parser/parser_prod.nit:7825 */
       ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7345 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7345);
+      /* parser/parser_prod.nit:7827 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7827);
     }
-    /* parser/parser_prod.nit:7347 */
+    /* parser/parser_prod.nit:7829 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7349 */
+  /* parser/parser_prod.nit:7831 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7349);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7831);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39947,7 +42765,7 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7350 */
+    /* parser/parser_prod.nit:7832 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39962,25 +42780,25 @@ void parser___parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7351 */
+      /* parser/parser_prod.nit:7833 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7351);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7833);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7352 */
+      /* parser/parser_prod.nit:7834 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast TCpar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7352);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7834);
       }
-      /* parser/parser_prod.nit:7353 */
+      /* parser/parser_prod.nit:7835 */
       ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7355 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7355);
+      /* parser/parser_prod.nit:7837 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7837);
     }
-    /* parser/parser_prod.nit:7357 */
+    /* parser/parser_prod.nit:7839 */
     goto label1;
   }
   label1: while(0);
@@ -39994,7 +42812,7 @@ void parser___parser_prod___AAsNotnullExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7361;
+  fra.me.line = 7843;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotnullExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -40004,51 +42822,51 @@ void parser___parser_prod___AAsNotnullExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7363 */
+  /* parser/parser_prod.nit:7845 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7363);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7845);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7364 */
+  /* parser/parser_prod.nit:7846 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7364);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 7846);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7365 */
+  /* parser/parser_prod.nit:7847 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7365);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7847);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_opar(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7366 */
+  /* parser/parser_prod.nit:7848 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 7366);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 7848);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7367 */
+  /* parser/parser_prod.nit:7849 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 7367);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser___parser_prod, 7849);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7368 */
+  /* parser/parser_prod.nit:7850 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7368);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7850);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNotnullExpr____n_cpar(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -40063,7 +42881,7 @@ void parser___parser_prod___AIssetAttrExpr___empty_init(val_t p0, int* init_tabl
   if (init_table[itpos253]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7372;
+  fra.me.line = 7854;
   fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -40083,7 +42901,7 @@ void parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(val_t p0, val_t
   if (init_table[itpos254]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7374;
+  fra.me.line = 7856;
   fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -40097,47 +42915,47 @@ void parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(val_t p0, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:7374 */
+  /* parser/parser_prod.nit:7856 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7380 */
+  /* parser/parser_prod.nit:7862 */
   CALL_parser___parser_prod___AIssetAttrExpr___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:7381 */
+  /* parser/parser_prod.nit:7863 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7381);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7863);
   }
   ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7382 */
+  /* parser/parser_prod.nit:7864 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7382);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7864);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:7383 */
+  /* parser/parser_prod.nit:7865 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7383);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7865);
   }
   ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7384 */
+  /* parser/parser_prod.nit:7866 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7384);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7866);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:7385 */
+  /* parser/parser_prod.nit:7867 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7385);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7867);
   }
   ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:7386 */
+  /* parser/parser_prod.nit:7868 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7386);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7868);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
@@ -40152,7 +42970,7 @@ void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7389;
+  fra.me.line = 7871;
   fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40164,11 +42982,11 @@ void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7391 */
+  /* parser/parser_prod.nit:7873 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_parser___parser_prod, 7391);
+    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_parser___parser_prod, 7873);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40178,7 +42996,7 @@ void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7392 */
+    /* parser/parser_prod.nit:7874 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40193,32 +43011,32 @@ void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7393 */
+      /* parser/parser_prod.nit:7875 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7393);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7875);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7394 */
+      /* parser/parser_prod.nit:7876 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwisset, ID_parser___parser_nodes___TKwisset)) /*cast TKwisset*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7394);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7876);
       }
-      /* parser/parser_prod.nit:7395 */
+      /* parser/parser_prod.nit:7877 */
       ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7397 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7397);
+      /* parser/parser_prod.nit:7879 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7879);
     }
-    /* parser/parser_prod.nit:7399 */
+    /* parser/parser_prod.nit:7881 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7401 */
+  /* parser/parser_prod.nit:7883 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7401);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7883);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40228,7 +43046,7 @@ void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7402 */
+    /* parser/parser_prod.nit:7884 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40243,32 +43061,32 @@ void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7403 */
+      /* parser/parser_prod.nit:7885 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7403);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7885);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7404 */
+      /* parser/parser_prod.nit:7886 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7404);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7886);
       }
-      /* parser/parser_prod.nit:7405 */
+      /* parser/parser_prod.nit:7887 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7407 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7407);
+      /* parser/parser_prod.nit:7889 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7889);
     }
-    /* parser/parser_prod.nit:7409 */
+    /* parser/parser_prod.nit:7891 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7411 */
+  /* parser/parser_prod.nit:7893 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7411);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7893);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40278,7 +43096,7 @@ void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7412 */
+    /* parser/parser_prod.nit:7894 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40293,25 +43111,25 @@ void parser___parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7413 */
+      /* parser/parser_prod.nit:7895 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7413);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7895);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7414 */
+      /* parser/parser_prod.nit:7896 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast TAttrid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7414);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7896);
       }
-      /* parser/parser_prod.nit:7415 */
+      /* parser/parser_prod.nit:7897 */
       ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7417 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7417);
+      /* parser/parser_prod.nit:7899 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7899);
     }
-    /* parser/parser_prod.nit:7419 */
+    /* parser/parser_prod.nit:7901 */
     goto label1;
   }
   label1: while(0);
@@ -40325,7 +43143,7 @@ void parser___parser_prod___AIssetAttrExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7423;
+  fra.me.line = 7905;
   fra.me.meth = LOCATE_parser___parser_prod___AIssetAttrExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -40335,27 +43153,27 @@ void parser___parser_prod___AIssetAttrExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7425 */
+  /* parser/parser_prod.nit:7907 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_parser___parser_prod, 7425);
+    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_parser___parser_prod, 7907);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7426 */
+  /* parser/parser_prod.nit:7908 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7426);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7908);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7427 */
+  /* parser/parser_prod.nit:7909 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7427);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7909);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -40370,7 +43188,7 @@ void parser___parser_prod___ADebugTypeExpr___empty_init(val_t p0, int* init_tabl
   if (init_table[itpos255]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7431;
+  fra.me.line = 7913;
   fra.me.meth = LOCATE_parser___parser_prod___ADebugTypeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -40390,7 +43208,7 @@ void parser___parser_prod___ADebugTypeExpr___init_adebugtypeexpr(val_t p0, val_t
   if (init_table[itpos256]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7433;
+  fra.me.line = 7915;
   fra.me.meth = LOCATE_parser___parser_prod___ADebugTypeExpr___init_adebugtypeexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -40406,60 +43224,60 @@ void parser___parser_prod___ADebugTypeExpr___init_adebugtypeexpr(val_t p0, val_t
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:7433 */
+  /* parser/parser_prod.nit:7915 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7440 */
+  /* parser/parser_prod.nit:7922 */
   CALL_parser___parser_prod___ADebugTypeExpr___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:7441 */
+  /* parser/parser_prod.nit:7923 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7441);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7923);
   }
   ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7442 */
+  /* parser/parser_prod.nit:7924 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7442);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7924);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:7443 */
+  /* parser/parser_prod.nit:7925 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7443);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7925);
   }
   ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7444 */
+  /* parser/parser_prod.nit:7926 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7444);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7926);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:7445 */
+  /* parser/parser_prod.nit:7927 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7445);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7927);
   }
   ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:7446 */
+  /* parser/parser_prod.nit:7928 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7446);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7928);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:7447 */
+  /* parser/parser_prod.nit:7929 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7447);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7929);
   }
   ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:7448 */
+  /* parser/parser_prod.nit:7930 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7448);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7930);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
@@ -40474,7 +43292,7 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7451;
+  fra.me.line = 7933;
   fra.me.meth = LOCATE_parser___parser_prod___ADebugTypeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40486,11 +43304,11 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7453 */
+  /* parser/parser_prod.nit:7935 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdebug", LOCATE_parser___parser_prod, 7453);
+    nit_abort("Uninitialized attribute %s", "_n_kwdebug", LOCATE_parser___parser_prod, 7935);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40500,7 +43318,7 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7454 */
+    /* parser/parser_prod.nit:7936 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40515,32 +43333,32 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7455 */
+      /* parser/parser_prod.nit:7937 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7455);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7937);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7456 */
+      /* parser/parser_prod.nit:7938 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwdebug, ID_parser___parser_nodes___TKwdebug)) /*cast TKwdebug*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7456);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7938);
       }
-      /* parser/parser_prod.nit:7457 */
+      /* parser/parser_prod.nit:7939 */
       ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7459 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7459);
+      /* parser/parser_prod.nit:7941 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7941);
     }
-    /* parser/parser_prod.nit:7461 */
+    /* parser/parser_prod.nit:7943 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7463 */
+  /* parser/parser_prod.nit:7945 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 7463);
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 7945);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40550,7 +43368,7 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7464 */
+    /* parser/parser_prod.nit:7946 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40565,32 +43383,32 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7465 */
+      /* parser/parser_prod.nit:7947 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7465);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7947);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7466 */
+      /* parser/parser_prod.nit:7948 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast TKwtype*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7466);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7948);
       }
-      /* parser/parser_prod.nit:7467 */
+      /* parser/parser_prod.nit:7949 */
       ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7469 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7469);
+      /* parser/parser_prod.nit:7951 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7951);
     }
-    /* parser/parser_prod.nit:7471 */
+    /* parser/parser_prod.nit:7953 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7473 */
+  /* parser/parser_prod.nit:7955 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7473);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7955);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40600,7 +43418,7 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7474 */
+    /* parser/parser_prod.nit:7956 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40615,32 +43433,32 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7475 */
+      /* parser/parser_prod.nit:7957 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7475);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7957);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7476 */
+      /* parser/parser_prod.nit:7958 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7476);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7958);
       }
-      /* parser/parser_prod.nit:7477 */
+      /* parser/parser_prod.nit:7959 */
       ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7479 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7479);
+      /* parser/parser_prod.nit:7961 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7961);
     }
-    /* parser/parser_prod.nit:7481 */
+    /* parser/parser_prod.nit:7963 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7483 */
+  /* parser/parser_prod.nit:7965 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7483);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7965);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40650,7 +43468,7 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7484 */
+    /* parser/parser_prod.nit:7966 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40665,25 +43483,25 @@ void parser___parser_prod___ADebugTypeExpr___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7485 */
+      /* parser/parser_prod.nit:7967 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7485);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7967);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7486 */
+      /* parser/parser_prod.nit:7968 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7486);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7968);
       }
-      /* parser/parser_prod.nit:7487 */
+      /* parser/parser_prod.nit:7969 */
       ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7489 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7489);
+      /* parser/parser_prod.nit:7971 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7971);
     }
-    /* parser/parser_prod.nit:7491 */
+    /* parser/parser_prod.nit:7973 */
     goto label1;
   }
   label1: while(0);
@@ -40697,7 +43515,7 @@ void parser___parser_prod___ADebugTypeExpr___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7495;
+  fra.me.line = 7977;
   fra.me.meth = LOCATE_parser___parser_prod___ADebugTypeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -40707,35 +43525,35 @@ void parser___parser_prod___ADebugTypeExpr___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7497 */
+  /* parser/parser_prod.nit:7979 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwdebug", LOCATE_parser___parser_prod, 7497);
+    nit_abort("Uninitialized attribute %s", "_n_kwdebug", LOCATE_parser___parser_prod, 7979);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwdebug(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7498 */
+  /* parser/parser_prod.nit:7980 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 7498);
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser___parser_prod, 7980);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_kwtype(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7499 */
+  /* parser/parser_prod.nit:7981 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7499);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 7981);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_expr(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7500 */
+  /* parser/parser_prod.nit:7982 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7500);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 7982);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ADebugTypeExpr____n_type(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -40750,7 +43568,7 @@ void parser___parser_prod___AListExprs___empty_init(val_t p0, int* init_table){
   if (init_table[itpos257]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7504;
+  fra.me.line = 7986;
   fra.me.meth = LOCATE_parser___parser_prod___AListExprs___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -40769,7 +43587,7 @@ void parser___parser_prod___AListExprs___init_alistexprs(val_t p0, val_t p1, int
   if (init_table[itpos258]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7506;
+  fra.me.line = 7988;
   fra.me.meth = LOCATE_parser___parser_prod___AListExprs___init_alistexprs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40778,7 +43596,7 @@ void parser___parser_prod___AListExprs___init_alistexprs(val_t p0, val_t p1, int
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7510 */
+  /* parser/parser_prod.nit:7992 */
   CALL_parser___parser_prod___AListExprs___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AListExprs___init_alistexprs_1));
   stack_frame_head = fra.me.prev;
@@ -40790,7 +43608,7 @@ void parser___parser_prod___AListExprs___init_alistexprs(val_t p0, val_t p1, int
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:7511 */
+    /* parser/parser_prod.nit:7993 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -40804,21 +43622,21 @@ void parser___parser_prod___AListExprs___init_alistexprs(val_t p0, val_t p1, int
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:7512 */
+    /* parser/parser_prod.nit:7994 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7512);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7994);
     }
-    /* parser/parser_prod.nit:7513 */
+    /* parser/parser_prod.nit:7995 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7513);
+      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7995);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AExprs____n_exprs(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:7514 */
+    /* parser/parser_prod.nit:7996 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -40834,7 +43652,7 @@ void parser___parser_prod___AListExprs___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7518;
+  fra.me.line = 8000;
   fra.me.meth = LOCATE_parser___parser_prod___AListExprs___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40846,12 +43664,12 @@ void parser___parser_prod___AListExprs___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7520 */
+  /* parser/parser_prod.nit:8002 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7520);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8002);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -40866,13 +43684,13 @@ void parser___parser_prod___AListExprs___replace_child(val_t p0, val_t p1, val_t
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:7520 */
+      /* parser/parser_prod.nit:8002 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:7521 */
+      /* parser/parser_prod.nit:8003 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7521);
+        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8003);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -40889,7 +43707,7 @@ void parser___parser_prod___AListExprs___replace_child(val_t p0, val_t p1, val_t
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:7522 */
+        /* parser/parser_prod.nit:8004 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -40904,37 +43722,37 @@ void parser___parser_prod___AListExprs___replace_child(val_t p0, val_t p1, val_t
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:7523 */
+          /* parser/parser_prod.nit:8005 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7523);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8005);
           }
-          /* parser/parser_prod.nit:7524 */
+          /* parser/parser_prod.nit:8006 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7524);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8006);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:7525 */
+          /* parser/parser_prod.nit:8007 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7525);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8007);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:7527 */
+          /* parser/parser_prod.nit:8009 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7527);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8009);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:7529 */
+        /* parser/parser_prod.nit:8011 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -40960,7 +43778,7 @@ void parser___parser_prod___AListExprs___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7534;
+  fra.me.line = 8016;
   fra.me.meth = LOCATE_parser___parser_prod___AListExprs___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -40969,11 +43787,11 @@ void parser___parser_prod___AListExprs___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7536 */
+  /* parser/parser_prod.nit:8018 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7536);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8018);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AListExprs___visit_all_1));
@@ -40996,7 +43814,7 @@ void parser___parser_prod___AListExprs___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:7537 */
+    /* parser/parser_prod.nit:8019 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -41009,7 +43827,7 @@ void parser___parser_prod___AParExprs___empty_init(val_t p0, int* init_table){
   if (init_table[itpos259]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7542;
+  fra.me.line = 8024;
   fra.me.meth = LOCATE_parser___parser_prod___AParExprs___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -41029,7 +43847,7 @@ void parser___parser_prod___AParExprs___init_aparexprs(val_t p0, val_t p1, val_t
   if (init_table[itpos260]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7544;
+  fra.me.line = 8026;
   fra.me.meth = LOCATE_parser___parser_prod___AParExprs___init_aparexprs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -41043,35 +43861,35 @@ void parser___parser_prod___AParExprs___init_aparexprs(val_t p0, val_t p1, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:7544 */
+  /* parser/parser_prod.nit:8026 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7550 */
+  /* parser/parser_prod.nit:8032 */
   CALL_parser___parser_prod___AParExprs___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:7551 */
+  /* parser/parser_prod.nit:8033 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7551);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8033);
   }
   ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7552 */
+  /* parser/parser_prod.nit:8034 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7552);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8034);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AParExprs___init_aparexprs_1));
-  /* parser/parser_prod.nit:7558 */
+  /* parser/parser_prod.nit:8040 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7558);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8040);
   }
   ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:7559 */
+  /* parser/parser_prod.nit:8041 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7559);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8041);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
@@ -41083,7 +43901,7 @@ void parser___parser_prod___AParExprs___init_aparexprs(val_t p0, val_t p1, val_t
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:7553 */
+    /* parser/parser_prod.nit:8035 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -41097,21 +43915,21 @@ void parser___parser_prod___AParExprs___init_aparexprs(val_t p0, val_t p1, val_t
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:7554 */
+    /* parser/parser_prod.nit:8036 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7554);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8036);
     }
-    /* parser/parser_prod.nit:7555 */
+    /* parser/parser_prod.nit:8037 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(closctx->REG[4])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7555);
+      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8037);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AExprs____n_exprs(closctx->REG[4]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:7556 */
+    /* parser/parser_prod.nit:8038 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
     stack_frame_head = fra.me.prev;
     return;
@@ -41127,7 +43945,7 @@ void parser___parser_prod___AParExprs___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7562;
+  fra.me.line = 8044;
   fra.me.meth = LOCATE_parser___parser_prod___AParExprs___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -41139,11 +43957,11 @@ void parser___parser_prod___AParExprs___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7564 */
+  /* parser/parser_prod.nit:8046 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7564);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 8046);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -41153,7 +43971,7 @@ void parser___parser_prod___AParExprs___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7565 */
+    /* parser/parser_prod.nit:8047 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -41168,33 +43986,33 @@ void parser___parser_prod___AParExprs___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7566 */
+      /* parser/parser_prod.nit:8048 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7566);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8048);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7567 */
+      /* parser/parser_prod.nit:8049 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast TOpar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7567);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8049);
       }
-      /* parser/parser_prod.nit:7568 */
+      /* parser/parser_prod.nit:8050 */
       ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7570 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7570);
+      /* parser/parser_prod.nit:8052 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8052);
     }
-    /* parser/parser_prod.nit:7572 */
+    /* parser/parser_prod.nit:8054 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7574 */
+  /* parser/parser_prod.nit:8056 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7574);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8056);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -41209,13 +44027,13 @@ void parser___parser_prod___AParExprs___replace_child(val_t p0, val_t p1, val_t
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:7574 */
+      /* parser/parser_prod.nit:8056 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:7575 */
+      /* parser/parser_prod.nit:8057 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7575);
+        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8057);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -41232,7 +44050,7 @@ void parser___parser_prod___AParExprs___replace_child(val_t p0, val_t p1, val_t
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:7576 */
+        /* parser/parser_prod.nit:8058 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -41247,37 +44065,37 @@ void parser___parser_prod___AParExprs___replace_child(val_t p0, val_t p1, val_t
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:7577 */
+          /* parser/parser_prod.nit:8059 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7577);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8059);
           }
-          /* parser/parser_prod.nit:7578 */
+          /* parser/parser_prod.nit:8060 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7578);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8060);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:7579 */
+          /* parser/parser_prod.nit:8061 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7579);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8061);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:7581 */
+          /* parser/parser_prod.nit:8063 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7581);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8063);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:7583 */
+        /* parser/parser_prod.nit:8065 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -41292,11 +44110,11 @@ void parser___parser_prod___AParExprs___replace_child(val_t p0, val_t p1, val_t
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:7586 */
+  /* parser/parser_prod.nit:8068 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7586);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 8068);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -41306,7 +44124,7 @@ void parser___parser_prod___AParExprs___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7587 */
+    /* parser/parser_prod.nit:8069 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -41321,25 +44139,25 @@ void parser___parser_prod___AParExprs___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7588 */
+      /* parser/parser_prod.nit:8070 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7588);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8070);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7589 */
+      /* parser/parser_prod.nit:8071 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast TCpar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7589);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8071);
       }
-      /* parser/parser_prod.nit:7590 */
+      /* parser/parser_prod.nit:8072 */
       ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7592 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7592);
+      /* parser/parser_prod.nit:8074 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8074);
     }
-    /* parser/parser_prod.nit:7594 */
+    /* parser/parser_prod.nit:8076 */
     goto label1;
   }
   label1: while(0);
@@ -41353,7 +44171,7 @@ void parser___parser_prod___AParExprs___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7598;
+  fra.me.line = 8080;
   fra.me.meth = LOCATE_parser___parser_prod___AParExprs___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -41363,27 +44181,27 @@ void parser___parser_prod___AParExprs___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7600 */
+  /* parser/parser_prod.nit:8082 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 7600);
+    nit_abort("Uninitialized attribute %s", "_n_opar", LOCATE_parser___parser_prod, 8082);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AParExprs____n_opar(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7601 */
+  /* parser/parser_prod.nit:8083 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7601);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8083);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AParExprs___visit_all_1));
-  /* parser/parser_prod.nit:7604 */
+  /* parser/parser_prod.nit:8086 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 7604);
+    nit_abort("Uninitialized attribute %s", "_n_cpar", LOCATE_parser___parser_prod, 8086);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AParExprs____n_cpar(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -41406,7 +44224,7 @@ void parser___parser_prod___AParExprs___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:7602 */
+    /* parser/parser_prod.nit:8084 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -41419,7 +44237,7 @@ void parser___parser_prod___ABraExprs___empty_init(val_t p0, int* init_table){
   if (init_table[itpos261]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7608;
+  fra.me.line = 8090;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExprs___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -41439,7 +44257,7 @@ void parser___parser_prod___ABraExprs___init_abraexprs(val_t p0, val_t p1, val_t
   if (init_table[itpos262]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7610;
+  fra.me.line = 8092;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExprs___init_abraexprs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -41453,35 +44271,35 @@ void parser___parser_prod___ABraExprs___init_abraexprs(val_t p0, val_t p1, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:7610 */
+  /* parser/parser_prod.nit:8092 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7616 */
+  /* parser/parser_prod.nit:8098 */
   CALL_parser___parser_prod___ABraExprs___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:7617 */
+  /* parser/parser_prod.nit:8099 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7617);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8099);
   }
   ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7618 */
+  /* parser/parser_prod.nit:8100 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7618);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8100);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABraExprs___init_abraexprs_1));
-  /* parser/parser_prod.nit:7624 */
+  /* parser/parser_prod.nit:8106 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7624);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8106);
   }
   ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:7625 */
+  /* parser/parser_prod.nit:8107 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7625);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8107);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
@@ -41493,7 +44311,7 @@ void parser___parser_prod___ABraExprs___init_abraexprs(val_t p0, val_t p1, val_t
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:7619 */
+    /* parser/parser_prod.nit:8101 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -41507,21 +44325,21 @@ void parser___parser_prod___ABraExprs___init_abraexprs(val_t p0, val_t p1, val_t
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:7620 */
+    /* parser/parser_prod.nit:8102 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7620);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8102);
     }
-    /* parser/parser_prod.nit:7621 */
+    /* parser/parser_prod.nit:8103 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(closctx->REG[4])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7621);
+      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8103);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AExprs____n_exprs(closctx->REG[4]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:7622 */
+    /* parser/parser_prod.nit:8104 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
     stack_frame_head = fra.me.prev;
     return;
@@ -41537,7 +44355,7 @@ void parser___parser_prod___ABraExprs___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7628;
+  fra.me.line = 8110;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExprs___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -41549,11 +44367,11 @@ void parser___parser_prod___ABraExprs___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7630 */
+  /* parser/parser_prod.nit:8112 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 7630);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 8112);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -41563,7 +44381,7 @@ void parser___parser_prod___ABraExprs___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7631 */
+    /* parser/parser_prod.nit:8113 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -41578,33 +44396,33 @@ void parser___parser_prod___ABraExprs___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7632 */
+      /* parser/parser_prod.nit:8114 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7632);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8114);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7633 */
+      /* parser/parser_prod.nit:8115 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast TObra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7633);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8115);
       }
-      /* parser/parser_prod.nit:7634 */
+      /* parser/parser_prod.nit:8116 */
       ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7636 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7636);
+      /* parser/parser_prod.nit:8118 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8118);
     }
-    /* parser/parser_prod.nit:7638 */
+    /* parser/parser_prod.nit:8120 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7640 */
+  /* parser/parser_prod.nit:8122 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7640);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8122);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -41619,13 +44437,13 @@ void parser___parser_prod___ABraExprs___replace_child(val_t p0, val_t p1, val_t
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:7640 */
+      /* parser/parser_prod.nit:8122 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:7641 */
+      /* parser/parser_prod.nit:8123 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7641);
+        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8123);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -41642,7 +44460,7 @@ void parser___parser_prod___ABraExprs___replace_child(val_t p0, val_t p1, val_t
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:7642 */
+        /* parser/parser_prod.nit:8124 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -41657,37 +44475,37 @@ void parser___parser_prod___ABraExprs___replace_child(val_t p0, val_t p1, val_t
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:7643 */
+          /* parser/parser_prod.nit:8125 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7643);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8125);
           }
-          /* parser/parser_prod.nit:7644 */
+          /* parser/parser_prod.nit:8126 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7644);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8126);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:7645 */
+          /* parser/parser_prod.nit:8127 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7645);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8127);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:7647 */
+          /* parser/parser_prod.nit:8129 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7647);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8129);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:7649 */
+        /* parser/parser_prod.nit:8131 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -41702,11 +44520,11 @@ void parser___parser_prod___ABraExprs___replace_child(val_t p0, val_t p1, val_t
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:7652 */
+  /* parser/parser_prod.nit:8134 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 7652);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 8134);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -41716,7 +44534,7 @@ void parser___parser_prod___ABraExprs___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7653 */
+    /* parser/parser_prod.nit:8135 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -41731,25 +44549,25 @@ void parser___parser_prod___ABraExprs___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7654 */
+      /* parser/parser_prod.nit:8136 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7654);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8136);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7655 */
+      /* parser/parser_prod.nit:8137 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast TCbra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7655);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8137);
       }
-      /* parser/parser_prod.nit:7656 */
+      /* parser/parser_prod.nit:8138 */
       ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7658 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7658);
+      /* parser/parser_prod.nit:8140 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8140);
     }
-    /* parser/parser_prod.nit:7660 */
+    /* parser/parser_prod.nit:8142 */
     goto label1;
   }
   label1: while(0);
@@ -41763,7 +44581,7 @@ void parser___parser_prod___ABraExprs___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7664;
+  fra.me.line = 8146;
   fra.me.meth = LOCATE_parser___parser_prod___ABraExprs___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -41773,27 +44591,27 @@ void parser___parser_prod___ABraExprs___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7666 */
+  /* parser/parser_prod.nit:8148 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 7666);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser___parser_prod, 8148);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ABraExprs____n_obra(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:7667 */
+  /* parser/parser_prod.nit:8149 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 7667);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser___parser_prod, 8149);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AExprs____n_exprs(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ABraExprs___visit_all_1));
-  /* parser/parser_prod.nit:7670 */
+  /* parser/parser_prod.nit:8152 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 7670);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser___parser_prod, 8152);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABraExprs____n_cbra(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -41816,7 +44634,7 @@ void parser___parser_prod___ABraExprs___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:7668 */
+    /* parser/parser_prod.nit:8150 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -41829,7 +44647,7 @@ void parser___parser_prod___APlusAssignOp___empty_init(val_t p0, int* init_table
   if (init_table[itpos263]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7674;
+  fra.me.line = 8156;
   fra.me.meth = LOCATE_parser___parser_prod___APlusAssignOp___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -41849,7 +44667,7 @@ void parser___parser_prod___APlusAssignOp___init_aplusassignop(val_t p0, val_t p
   if (init_table[itpos264]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7676;
+  fra.me.line = 8158;
   fra.me.meth = LOCATE_parser___parser_prod___APlusAssignOp___init_aplusassignop;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -41859,21 +44677,21 @@ void parser___parser_prod___APlusAssignOp___init_aplusassignop(val_t p0, val_t p
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7676 */
+  /* parser/parser_prod.nit:8158 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7680 */
+  /* parser/parser_prod.nit:8162 */
   CALL_parser___parser_prod___APlusAssignOp___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:7681 */
+  /* parser/parser_prod.nit:8163 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7681);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8163);
   }
   ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7682 */
+  /* parser/parser_prod.nit:8164 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7682);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8164);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -41888,7 +44706,7 @@ void parser___parser_prod___APlusAssignOp___replace_child(val_t p0, val_t p1, va
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7685;
+  fra.me.line = 8167;
   fra.me.meth = LOCATE_parser___parser_prod___APlusAssignOp___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -41900,11 +44718,11 @@ void parser___parser_prod___APlusAssignOp___replace_child(val_t p0, val_t p1, va
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7687 */
+  /* parser/parser_prod.nit:8169 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_pluseq", LOCATE_parser___parser_prod, 7687);
+    nit_abort("Uninitialized attribute %s", "_n_pluseq", LOCATE_parser___parser_prod, 8169);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -41914,7 +44732,7 @@ void parser___parser_prod___APlusAssignOp___replace_child(val_t p0, val_t p1, va
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7688 */
+    /* parser/parser_prod.nit:8170 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -41929,25 +44747,25 @@ void parser___parser_prod___APlusAssignOp___replace_child(val_t p0, val_t p1, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7689 */
+      /* parser/parser_prod.nit:8171 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7689);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8171);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7690 */
+      /* parser/parser_prod.nit:8172 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TPluseq, ID_parser___parser_nodes___TPluseq)) /*cast TPluseq*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7690);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8172);
       }
-      /* parser/parser_prod.nit:7691 */
+      /* parser/parser_prod.nit:8173 */
       ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7693 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7693);
+      /* parser/parser_prod.nit:8175 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8175);
     }
-    /* parser/parser_prod.nit:7695 */
+    /* parser/parser_prod.nit:8177 */
     goto label1;
   }
   label1: while(0);
@@ -41961,7 +44779,7 @@ void parser___parser_prod___APlusAssignOp___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7699;
+  fra.me.line = 8181;
   fra.me.meth = LOCATE_parser___parser_prod___APlusAssignOp___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -41970,11 +44788,11 @@ void parser___parser_prod___APlusAssignOp___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7701 */
+  /* parser/parser_prod.nit:8183 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_pluseq", LOCATE_parser___parser_prod, 7701);
+    nit_abort("Uninitialized attribute %s", "_n_pluseq", LOCATE_parser___parser_prod, 8183);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -41989,7 +44807,7 @@ void parser___parser_prod___AMinusAssignOp___empty_init(val_t p0, int* init_tabl
   if (init_table[itpos265]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7705;
+  fra.me.line = 8187;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusAssignOp___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -42009,7 +44827,7 @@ void parser___parser_prod___AMinusAssignOp___init_aminusassignop(val_t p0, val_t
   if (init_table[itpos266]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7707;
+  fra.me.line = 8189;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusAssignOp___init_aminusassignop;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -42019,21 +44837,21 @@ void parser___parser_prod___AMinusAssignOp___init_aminusassignop(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7707 */
+  /* parser/parser_prod.nit:8189 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7711 */
+  /* parser/parser_prod.nit:8193 */
   CALL_parser___parser_prod___AMinusAssignOp___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:7712 */
+  /* parser/parser_prod.nit:8194 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7712);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8194);
   }
   ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7713 */
+  /* parser/parser_prod.nit:8195 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7713);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8195);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -42048,7 +44866,7 @@ void parser___parser_prod___AMinusAssignOp___replace_child(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7716;
+  fra.me.line = 8198;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusAssignOp___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -42060,11 +44878,11 @@ void parser___parser_prod___AMinusAssignOp___replace_child(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7718 */
+  /* parser/parser_prod.nit:8200 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_minuseq", LOCATE_parser___parser_prod, 7718);
+    nit_abort("Uninitialized attribute %s", "_n_minuseq", LOCATE_parser___parser_prod, 8200);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -42074,7 +44892,7 @@ void parser___parser_prod___AMinusAssignOp___replace_child(val_t p0, val_t p1, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7719 */
+    /* parser/parser_prod.nit:8201 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42089,25 +44907,25 @@ void parser___parser_prod___AMinusAssignOp___replace_child(val_t p0, val_t p1, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7720 */
+      /* parser/parser_prod.nit:8202 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7720);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8202);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7721 */
+      /* parser/parser_prod.nit:8203 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TMinuseq, ID_parser___parser_nodes___TMinuseq)) /*cast TMinuseq*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7721);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8203);
       }
-      /* parser/parser_prod.nit:7722 */
+      /* parser/parser_prod.nit:8204 */
       ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7724 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7724);
+      /* parser/parser_prod.nit:8206 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8206);
     }
-    /* parser/parser_prod.nit:7726 */
+    /* parser/parser_prod.nit:8208 */
     goto label1;
   }
   label1: while(0);
@@ -42121,7 +44939,7 @@ void parser___parser_prod___AMinusAssignOp___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7730;
+  fra.me.line = 8212;
   fra.me.meth = LOCATE_parser___parser_prod___AMinusAssignOp___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -42130,11 +44948,11 @@ void parser___parser_prod___AMinusAssignOp___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7732 */
+  /* parser/parser_prod.nit:8214 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_minuseq", LOCATE_parser___parser_prod, 7732);
+    nit_abort("Uninitialized attribute %s", "_n_minuseq", LOCATE_parser___parser_prod, 8214);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -42149,7 +44967,7 @@ void parser___parser_prod___AClosureDef___empty_init(val_t p0, int* init_table){
   if (init_table[itpos267]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7736;
+  fra.me.line = 8218;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -42170,7 +44988,7 @@ void parser___parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, v
   if (init_table[itpos268]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7738;
+  fra.me.line = 8220;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___init_aclosuredef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -42190,40 +45008,40 @@ void parser___parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, v
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* parser/parser_prod.nit:7738 */
+  /* parser/parser_prod.nit:8220 */
   fra.me.REG[7] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7747 */
+  /* parser/parser_prod.nit:8229 */
   CALL_parser___parser_prod___AClosureDef___empty_init(fra.me.REG[7])(fra.me.REG[7], init_table);
-  /* parser/parser_prod.nit:7748 */
+  /* parser/parser_prod.nit:8230 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7748);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8230);
   }
   ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[7]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7749 */
+  /* parser/parser_prod.nit:8231 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7749);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8231);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-  /* parser/parser_prod.nit:7750 */
+  /* parser/parser_prod.nit:8232 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7750);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8232);
   }
   ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[7]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:7751 */
+  /* parser/parser_prod.nit:8233 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7751);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8233);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AClosureDef___init_aclosuredef_1));
-  /* parser/parser_prod.nit:7757 */
+  /* parser/parser_prod.nit:8239 */
   ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[7]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:7758 */
+  /* parser/parser_prod.nit:8240 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -42238,16 +45056,16 @@ void parser___parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7759 */
+    /* parser/parser_prod.nit:8241 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7759);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8241);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
   }
-  /* parser/parser_prod.nit:7761 */
+  /* parser/parser_prod.nit:8243 */
   ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[7]) = fra.me.REG[5];
-  /* parser/parser_prod.nit:7762 */
+  /* parser/parser_prod.nit:8244 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -42262,16 +45080,16 @@ void parser___parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7763 */
+    /* parser/parser_prod.nit:8245 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7763);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8245);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
   }
-  /* parser/parser_prod.nit:7765 */
+  /* parser/parser_prod.nit:8247 */
   ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[7]) = fra.me.REG[6];
-  /* parser/parser_prod.nit:7766 */
+  /* parser/parser_prod.nit:8248 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -42286,10 +45104,10 @@ void parser___parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7767 */
+    /* parser/parser_prod.nit:8249 */
     REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7767);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8249);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
@@ -42302,7 +45120,7 @@ void parser___parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, v
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:7752 */
+    /* parser/parser_prod.nit:8234 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -42316,21 +45134,21 @@ void parser___parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, v
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:7753 */
+    /* parser/parser_prod.nit:8235 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7753);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8235);
     }
-    /* parser/parser_prod.nit:7754 */
+    /* parser/parser_prod.nit:8236 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_ids(closctx->REG[7])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7754);
+      nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 8236);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AClosureDef____n_ids(closctx->REG[7]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:7755 */
+    /* parser/parser_prod.nit:8237 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[7]);
     stack_frame_head = fra.me.prev;
     return;
@@ -42346,7 +45164,7 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7771;
+  fra.me.line = 8253;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -42358,11 +45176,11 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7773 */
+  /* parser/parser_prod.nit:8255 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 7773);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 8255);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -42372,7 +45190,7 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7774 */
+    /* parser/parser_prod.nit:8256 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42387,32 +45205,32 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7775 */
+      /* parser/parser_prod.nit:8257 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7775);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8257);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7776 */
+      /* parser/parser_prod.nit:8258 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast TBang*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7776);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8258);
       }
-      /* parser/parser_prod.nit:7777 */
+      /* parser/parser_prod.nit:8259 */
       ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7779 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7779);
+      /* parser/parser_prod.nit:8261 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8261);
     }
-    /* parser/parser_prod.nit:7781 */
+    /* parser/parser_prod.nit:8263 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7783 */
+  /* parser/parser_prod.nit:8265 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7783);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8265);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -42422,7 +45240,7 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7784 */
+    /* parser/parser_prod.nit:8266 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42437,33 +45255,33 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7785 */
+      /* parser/parser_prod.nit:8267 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7785);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8267);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7786 */
+      /* parser/parser_prod.nit:8268 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast AClosureId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7786);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8268);
       }
-      /* parser/parser_prod.nit:7787 */
+      /* parser/parser_prod.nit:8269 */
       ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7789 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7789);
+      /* parser/parser_prod.nit:8271 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8271);
     }
-    /* parser/parser_prod.nit:7791 */
+    /* parser/parser_prod.nit:8273 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7793 */
+  /* parser/parser_prod.nit:8275 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7793);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 8275);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -42478,13 +45296,13 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:7793 */
+      /* parser/parser_prod.nit:8275 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:7794 */
+      /* parser/parser_prod.nit:8276 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7794);
+        nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 8276);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -42501,7 +45319,7 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:7795 */
+        /* parser/parser_prod.nit:8277 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -42516,37 +45334,37 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:7796 */
+          /* parser/parser_prod.nit:8278 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7796);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8278);
           }
-          /* parser/parser_prod.nit:7797 */
+          /* parser/parser_prod.nit:8279 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7797);
+            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 8279);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:7798 */
+          /* parser/parser_prod.nit:8280 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7798);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8280);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:7800 */
+          /* parser/parser_prod.nit:8282 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7800);
+            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 8282);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:7802 */
+        /* parser/parser_prod.nit:8284 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -42561,7 +45379,7 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:7805 */
+  /* parser/parser_prod.nit:8287 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -42576,7 +45394,7 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7806 */
+    /* parser/parser_prod.nit:8288 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42591,28 +45409,28 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7807 */
+      /* parser/parser_prod.nit:8289 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7807);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8289);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7808 */
+      /* parser/parser_prod.nit:8290 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast TKwdo*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7808);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8290);
       }
-      /* parser/parser_prod.nit:7809 */
+      /* parser/parser_prod.nit:8291 */
       ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7811 */
+      /* parser/parser_prod.nit:8293 */
       ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:7813 */
+    /* parser/parser_prod.nit:8295 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7815 */
+  /* parser/parser_prod.nit:8297 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -42627,7 +45445,7 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7816 */
+    /* parser/parser_prod.nit:8298 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42642,28 +45460,28 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7817 */
+      /* parser/parser_prod.nit:8299 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7817);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8299);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7818 */
+      /* parser/parser_prod.nit:8300 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7818);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8300);
       }
-      /* parser/parser_prod.nit:7819 */
+      /* parser/parser_prod.nit:8301 */
       ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7821 */
+      /* parser/parser_prod.nit:8303 */
       ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:7823 */
+    /* parser/parser_prod.nit:8305 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7825 */
+  /* parser/parser_prod.nit:8307 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -42678,7 +45496,7 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7826 */
+    /* parser/parser_prod.nit:8308 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42693,25 +45511,25 @@ void parser___parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7827 */
+      /* parser/parser_prod.nit:8309 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7827);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8309);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7828 */
+      /* parser/parser_prod.nit:8310 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7828);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8310);
       }
-      /* parser/parser_prod.nit:7829 */
+      /* parser/parser_prod.nit:8311 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7831 */
+      /* parser/parser_prod.nit:8313 */
       ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:7833 */
+    /* parser/parser_prod.nit:8315 */
     goto label1;
   }
   label1: while(0);
@@ -42726,7 +45544,7 @@ void parser___parser_prod___AClosureDef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7837;
+  fra.me.line = 8319;
   fra.me.meth = LOCATE_parser___parser_prod___AClosureDef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -42737,33 +45555,33 @@ void parser___parser_prod___AClosureDef___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7837 */
+  /* parser/parser_prod.nit:8319 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7839 */
+  /* parser/parser_prod.nit:8321 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 7839);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser___parser_prod, 8321);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_bang(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:7840 */
+  /* parser/parser_prod.nit:8322 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7840);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8322);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_id(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:7841 */
+  /* parser/parser_prod.nit:8323 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 7841);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser___parser_prod, 8323);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_ids(fra.me.REG[2]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AClosureDef___visit_all_1));
-  /* parser/parser_prod.nit:7844 */
+  /* parser/parser_prod.nit:8326 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -42779,16 +45597,16 @@ void parser___parser_prod___AClosureDef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7845 */
+    /* parser/parser_prod.nit:8327 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_kwdo(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast TKwdo*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7845);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8327);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:7847 */
+  /* parser/parser_prod.nit:8329 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -42804,16 +45622,16 @@ void parser___parser_prod___AClosureDef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7848 */
+    /* parser/parser_prod.nit:8330 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AClosureDef____n_expr(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7848);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8330);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:7850 */
+  /* parser/parser_prod.nit:8332 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -42829,12 +45647,12 @@ void parser___parser_prod___AClosureDef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7851 */
+    /* parser/parser_prod.nit:8333 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___ALabelable____n_label(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7851);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8333);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -42857,7 +45675,7 @@ void parser___parser_prod___AClosureDef___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:7842 */
+    /* parser/parser_prod.nit:8324 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -42870,7 +45688,7 @@ void parser___parser_prod___ASimpleClosureId___empty_init(val_t p0, int* init_ta
   if (init_table[itpos269]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7856;
+  fra.me.line = 8338;
   fra.me.meth = LOCATE_parser___parser_prod___ASimpleClosureId___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -42890,7 +45708,7 @@ void parser___parser_prod___ASimpleClosureId___init_asimpleclosureid(val_t p0, v
   if (init_table[itpos270]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7858;
+  fra.me.line = 8340;
   fra.me.meth = LOCATE_parser___parser_prod___ASimpleClosureId___init_asimpleclosureid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -42900,21 +45718,21 @@ void parser___parser_prod___ASimpleClosureId___init_asimpleclosureid(val_t p0, v
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7858 */
+  /* parser/parser_prod.nit:8340 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7862 */
+  /* parser/parser_prod.nit:8344 */
   CALL_parser___parser_prod___ASimpleClosureId___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:7863 */
+  /* parser/parser_prod.nit:8345 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7863);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8345);
   }
   ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7864 */
+  /* parser/parser_prod.nit:8346 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7864);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8346);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -42929,7 +45747,7 @@ void parser___parser_prod___ASimpleClosureId___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7867;
+  fra.me.line = 8349;
   fra.me.meth = LOCATE_parser___parser_prod___ASimpleClosureId___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -42941,11 +45759,11 @@ void parser___parser_prod___ASimpleClosureId___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7869 */
+  /* parser/parser_prod.nit:8351 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7869);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8351);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -42955,7 +45773,7 @@ void parser___parser_prod___ASimpleClosureId___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7870 */
+    /* parser/parser_prod.nit:8352 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -42970,25 +45788,25 @@ void parser___parser_prod___ASimpleClosureId___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7871 */
+      /* parser/parser_prod.nit:8353 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7871);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8353);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7872 */
+      /* parser/parser_prod.nit:8354 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7872);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8354);
       }
-      /* parser/parser_prod.nit:7873 */
+      /* parser/parser_prod.nit:8355 */
       ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7875 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7875);
+      /* parser/parser_prod.nit:8357 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8357);
     }
-    /* parser/parser_prod.nit:7877 */
+    /* parser/parser_prod.nit:8359 */
     goto label1;
   }
   label1: while(0);
@@ -43002,7 +45820,7 @@ void parser___parser_prod___ASimpleClosureId___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7881;
+  fra.me.line = 8363;
   fra.me.meth = LOCATE_parser___parser_prod___ASimpleClosureId___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -43011,11 +45829,11 @@ void parser___parser_prod___ASimpleClosureId___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7883 */
+  /* parser/parser_prod.nit:8365 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7883);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8365);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -43030,7 +45848,7 @@ void parser___parser_prod___ABreakClosureId___empty_init(val_t p0, int* init_tab
   if (init_table[itpos271]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7887;
+  fra.me.line = 8369;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakClosureId___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -43050,7 +45868,7 @@ void parser___parser_prod___ABreakClosureId___init_abreakclosureid(val_t p0, val
   if (init_table[itpos272]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7889;
+  fra.me.line = 8371;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakClosureId___init_abreakclosureid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -43060,21 +45878,21 @@ void parser___parser_prod___ABreakClosureId___init_abreakclosureid(val_t p0, val
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7889 */
+  /* parser/parser_prod.nit:8371 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7893 */
+  /* parser/parser_prod.nit:8375 */
   CALL_parser___parser_prod___ABreakClosureId___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:7894 */
+  /* parser/parser_prod.nit:8376 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7894);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8376);
   }
   ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7895 */
+  /* parser/parser_prod.nit:8377 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7895);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8377);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -43089,7 +45907,7 @@ void parser___parser_prod___ABreakClosureId___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7898;
+  fra.me.line = 8380;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakClosureId___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -43101,11 +45919,11 @@ void parser___parser_prod___ABreakClosureId___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7900 */
+  /* parser/parser_prod.nit:8382 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 7900);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 8382);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -43115,7 +45933,7 @@ void parser___parser_prod___ABreakClosureId___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7901 */
+    /* parser/parser_prod.nit:8383 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -43130,25 +45948,25 @@ void parser___parser_prod___ABreakClosureId___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7902 */
+      /* parser/parser_prod.nit:8384 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7902);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8384);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7903 */
+      /* parser/parser_prod.nit:8385 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast TKwbreak*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7903);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8385);
       }
-      /* parser/parser_prod.nit:7904 */
+      /* parser/parser_prod.nit:8386 */
       ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7906 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7906);
+      /* parser/parser_prod.nit:8388 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8388);
     }
-    /* parser/parser_prod.nit:7908 */
+    /* parser/parser_prod.nit:8390 */
     goto label1;
   }
   label1: while(0);
@@ -43162,7 +45980,7 @@ void parser___parser_prod___ABreakClosureId___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7912;
+  fra.me.line = 8394;
   fra.me.meth = LOCATE_parser___parser_prod___ABreakClosureId___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -43171,11 +45989,11 @@ void parser___parser_prod___ABreakClosureId___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7914 */
+  /* parser/parser_prod.nit:8396 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 7914);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser___parser_prod, 8396);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -43190,7 +46008,7 @@ void parser___parser_prod___AModuleName___empty_init(val_t p0, int* init_table){
   if (init_table[itpos273]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7918;
+  fra.me.line = 8400;
   fra.me.meth = LOCATE_parser___parser_prod___AModuleName___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -43211,7 +46029,7 @@ void parser___parser_prod___AModuleName___init_amodulename(val_t p0, val_t p1, v
   if (init_table[itpos274]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7920;
+  fra.me.line = 8402;
   fra.me.meth = LOCATE_parser___parser_prod___AModuleName___init_amodulename;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -43225,13 +46043,13 @@ void parser___parser_prod___AModuleName___init_amodulename(val_t p0, val_t p1, v
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:7920 */
+  /* parser/parser_prod.nit:8402 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7926 */
+  /* parser/parser_prod.nit:8408 */
   CALL_parser___parser_prod___AModuleName___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:7927 */
+  /* parser/parser_prod.nit:8409 */
   ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7928 */
+  /* parser/parser_prod.nit:8410 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -43246,25 +46064,25 @@ void parser___parser_prod___AModuleName___init_amodulename(val_t p0, val_t p1, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7929 */
+    /* parser/parser_prod.nit:8411 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7929);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8411);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   }
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AModuleName___init_amodulename_1));
-  /* parser/parser_prod.nit:7936 */
+  /* parser/parser_prod.nit:8418 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7936);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8418);
   }
   ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:7937 */
+  /* parser/parser_prod.nit:8419 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7937);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8419);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
@@ -43276,7 +46094,7 @@ void parser___parser_prod___AModuleName___init_amodulename(val_t p0, val_t p1, v
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:7931 */
+    /* parser/parser_prod.nit:8413 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -43290,21 +46108,21 @@ void parser___parser_prod___AModuleName___init_amodulename(val_t p0, val_t p1, v
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:7932 */
+    /* parser/parser_prod.nit:8414 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7932);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8414);
     }
-    /* parser/parser_prod.nit:7933 */
+    /* parser/parser_prod.nit:8415 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_path(closctx->REG[4])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7933);
+      nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 8415);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AModuleName____n_path(closctx->REG[4]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:7934 */
+    /* parser/parser_prod.nit:8416 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[4]);
     stack_frame_head = fra.me.prev;
     return;
@@ -43320,7 +46138,7 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7940;
+  fra.me.line = 8422;
   fra.me.meth = LOCATE_parser___parser_prod___AModuleName___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -43332,7 +46150,7 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7942 */
+  /* parser/parser_prod.nit:8424 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -43347,7 +46165,7 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7943 */
+    /* parser/parser_prod.nit:8425 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -43362,33 +46180,33 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7944 */
+      /* parser/parser_prod.nit:8426 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7944);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8426);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7945 */
+      /* parser/parser_prod.nit:8427 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast TQuad*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7945);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8427);
       }
-      /* parser/parser_prod.nit:7946 */
+      /* parser/parser_prod.nit:8428 */
       ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7948 */
+      /* parser/parser_prod.nit:8430 */
       ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:7950 */
+    /* parser/parser_prod.nit:8432 */
     goto label1;
   }
-  /* parser/parser_prod.nit:7952 */
+  /* parser/parser_prod.nit:8434 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7952);
+    nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 8434);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -43403,13 +46221,13 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:7952 */
+      /* parser/parser_prod.nit:8434 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:7953 */
+      /* parser/parser_prod.nit:8435 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7953);
+        nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 8435);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -43426,7 +46244,7 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:7954 */
+        /* parser/parser_prod.nit:8436 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -43441,37 +46259,37 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:7955 */
+          /* parser/parser_prod.nit:8437 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7955);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8437);
           }
-          /* parser/parser_prod.nit:7956 */
+          /* parser/parser_prod.nit:8438 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7956);
+            nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 8438);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:7957 */
+          /* parser/parser_prod.nit:8439 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7957);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8439);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:7959 */
+          /* parser/parser_prod.nit:8441 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7959);
+            nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 8441);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:7961 */
+        /* parser/parser_prod.nit:8443 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -43486,11 +46304,11 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:7964 */
+  /* parser/parser_prod.nit:8446 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7964);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8446);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -43500,7 +46318,7 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7965 */
+    /* parser/parser_prod.nit:8447 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -43515,25 +46333,25 @@ void parser___parser_prod___AModuleName___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:7966 */
+      /* parser/parser_prod.nit:8448 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7966);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8448);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:7967 */
+      /* parser/parser_prod.nit:8449 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7967);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8449);
       }
-      /* parser/parser_prod.nit:7968 */
+      /* parser/parser_prod.nit:8450 */
       ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:7970 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 7970);
+      /* parser/parser_prod.nit:8452 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8452);
     }
-    /* parser/parser_prod.nit:7972 */
+    /* parser/parser_prod.nit:8454 */
     goto label1;
   }
   label1: while(0);
@@ -43548,7 +46366,7 @@ void parser___parser_prod___AModuleName___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7976;
+  fra.me.line = 8458;
   fra.me.meth = LOCATE_parser___parser_prod___AModuleName___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -43559,9 +46377,9 @@ void parser___parser_prod___AModuleName___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:7976 */
+  /* parser/parser_prod.nit:8458 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7978 */
+  /* parser/parser_prod.nit:8460 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -43577,28 +46395,28 @@ void parser___parser_prod___AModuleName___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:7979 */
+    /* parser/parser_prod.nit:8461 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_quad(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast TQuad*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7979);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8461);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:7981 */
+  /* parser/parser_prod.nit:8463 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 7981);
+    nit_abort("Uninitialized attribute %s", "_n_path", LOCATE_parser___parser_prod, 8463);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AModuleName____n_path(fra.me.REG[2]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AModuleName___visit_all_1));
-  /* parser/parser_prod.nit:7984 */
+  /* parser/parser_prod.nit:8466 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 7984);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8466);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AModuleName____n_id(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -43621,7 +46439,7 @@ void parser___parser_prod___AModuleName___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:7982 */
+    /* parser/parser_prod.nit:8464 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -43634,7 +46452,7 @@ void parser___parser_prod___AExternCalls___empty_init(val_t p0, int* init_table)
   if (init_table[itpos275]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7988;
+  fra.me.line = 8470;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCalls___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -43654,7 +46472,7 @@ void parser___parser_prod___AExternCalls___init_aexterncalls(val_t p0, val_t p1,
   if (init_table[itpos276]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 7990;
+  fra.me.line = 8472;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCalls___init_aexterncalls;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -43666,21 +46484,21 @@ void parser___parser_prod___AExternCalls___init_aexterncalls(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:7990 */
+  /* parser/parser_prod.nit:8472 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:7995 */
+  /* parser/parser_prod.nit:8477 */
   CALL_parser___parser_prod___AExternCalls___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:7996 */
+  /* parser/parser_prod.nit:8478 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 7996);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8478);
   }
   ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:7997 */
+  /* parser/parser_prod.nit:8479 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 7997);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8479);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AExternCalls___init_aexterncalls_1));
@@ -43693,7 +46511,7 @@ void parser___parser_prod___AExternCalls___init_aexterncalls(val_t p0, val_t p1,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:7998 */
+    /* parser/parser_prod.nit:8480 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -43707,21 +46525,21 @@ void parser___parser_prod___AExternCalls___init_aexterncalls(val_t p0, val_t p1,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:7999 */
+    /* parser/parser_prod.nit:8481 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AExternCall, ID_parser___parser_nodes___AExternCall)) /*cast AExternCall*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 7999);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8481);
     }
-    /* parser/parser_prod.nit:8000 */
+    /* parser/parser_prod.nit:8482 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(closctx->REG[3])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8000);
+      nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8482);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(closctx->REG[3]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:8001 */
+    /* parser/parser_prod.nit:8483 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[3]);
     stack_frame_head = fra.me.prev;
     return;
@@ -43737,7 +46555,7 @@ void parser___parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8005;
+  fra.me.line = 8487;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCalls___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -43749,11 +46567,11 @@ void parser___parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8007 */
+  /* parser/parser_prod.nit:8489 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 8007);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 8489);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -43763,7 +46581,7 @@ void parser___parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8008 */
+    /* parser/parser_prod.nit:8490 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -43778,33 +46596,33 @@ void parser___parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8009 */
+      /* parser/parser_prod.nit:8491 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8009);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8491);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8010 */
+      /* parser/parser_prod.nit:8492 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast TKwimport*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8010);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8492);
       }
-      /* parser/parser_prod.nit:8011 */
+      /* parser/parser_prod.nit:8493 */
       ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8013 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8013);
+      /* parser/parser_prod.nit:8495 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8495);
     }
-    /* parser/parser_prod.nit:8015 */
+    /* parser/parser_prod.nit:8497 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8017 */
+  /* parser/parser_prod.nit:8499 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8017);
+    nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8499);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -43819,13 +46637,13 @@ void parser___parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:8017 */
+      /* parser/parser_prod.nit:8499 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:8018 */
+      /* parser/parser_prod.nit:8500 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8018);
+        nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8500);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -43842,7 +46660,7 @@ void parser___parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:8019 */
+        /* parser/parser_prod.nit:8501 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -43857,37 +46675,37 @@ void parser___parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:8020 */
+          /* parser/parser_prod.nit:8502 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExternCall, ID_parser___parser_nodes___AExternCall)) /*cast AExternCall*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8020);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8502);
           }
-          /* parser/parser_prod.nit:8021 */
+          /* parser/parser_prod.nit:8503 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8021);
+            nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8503);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:8022 */
+          /* parser/parser_prod.nit:8504 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8022);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8504);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:8024 */
+          /* parser/parser_prod.nit:8506 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8024);
+            nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8506);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:8026 */
+        /* parser/parser_prod.nit:8508 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -43913,7 +46731,7 @@ void parser___parser_prod___AExternCalls___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8031;
+  fra.me.line = 8513;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCalls___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -43923,19 +46741,19 @@ void parser___parser_prod___AExternCalls___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8033 */
+  /* parser/parser_prod.nit:8515 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 8033);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser___parser_prod, 8515);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:8034 */
+  /* parser/parser_prod.nit:8516 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8034);
+    nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser___parser_prod, 8516);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AExternCalls___visit_all_1));
@@ -43958,7 +46776,7 @@ void parser___parser_prod___AExternCalls___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8035 */
+    /* parser/parser_prod.nit:8517 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -43971,7 +46789,7 @@ void parser___parser_prod___AExternCall___empty_init(val_t p0, int* init_table){
   if (init_table[itpos277]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8040;
+  fra.me.line = 8522;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -43990,14 +46808,14 @@ void parser___parser_prod___AExternCall___init_aexterncall(val_t p0, int* init_t
   if (init_table[itpos278]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8042;
+  fra.me.line = 8524;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCall___init_aexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* parser/parser_prod.nit:8044 */
+  /* parser/parser_prod.nit:8526 */
   CALL_parser___parser_prod___AExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
   init_table[itpos278] = 1;
@@ -44009,7 +46827,7 @@ void parser___parser_prod___AExternCall___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8047;
+  fra.me.line = 8529;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -44029,7 +46847,7 @@ void parser___parser_prod___AExternCall___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8051;
+  fra.me.line = 8533;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -44049,7 +46867,7 @@ void parser___parser_prod___ASuperExternCall___empty_init(val_t p0, int* init_ta
   if (init_table[itpos279]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8056;
+  fra.me.line = 8538;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -44069,7 +46887,7 @@ void parser___parser_prod___ASuperExternCall___init_asuperexterncall(val_t p0, v
   if (init_table[itpos280]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8058;
+  fra.me.line = 8540;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExternCall___init_asuperexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -44079,21 +46897,21 @@ void parser___parser_prod___ASuperExternCall___init_asuperexterncall(val_t p0, v
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8058 */
+  /* parser/parser_prod.nit:8540 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8062 */
+  /* parser/parser_prod.nit:8544 */
   CALL_parser___parser_prod___ASuperExternCall___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:8063 */
+  /* parser/parser_prod.nit:8545 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8063);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8545);
   }
   ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8064 */
+  /* parser/parser_prod.nit:8546 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8064);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8546);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -44108,7 +46926,7 @@ void parser___parser_prod___ASuperExternCall___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8067;
+  fra.me.line = 8549;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -44120,11 +46938,11 @@ void parser___parser_prod___ASuperExternCall___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8069 */
+  /* parser/parser_prod.nit:8551 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 8069);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 8551);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -44134,7 +46952,7 @@ void parser___parser_prod___ASuperExternCall___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8070 */
+    /* parser/parser_prod.nit:8552 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -44149,25 +46967,25 @@ void parser___parser_prod___ASuperExternCall___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8071 */
+      /* parser/parser_prod.nit:8553 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8071);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8553);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8072 */
+      /* parser/parser_prod.nit:8554 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast TKwsuper*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8072);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8554);
       }
-      /* parser/parser_prod.nit:8073 */
+      /* parser/parser_prod.nit:8555 */
       ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8075 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8075);
+      /* parser/parser_prod.nit:8557 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8557);
     }
-    /* parser/parser_prod.nit:8077 */
+    /* parser/parser_prod.nit:8559 */
     goto label1;
   }
   label1: while(0);
@@ -44181,7 +46999,7 @@ void parser___parser_prod___ASuperExternCall___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8081;
+  fra.me.line = 8563;
   fra.me.meth = LOCATE_parser___parser_prod___ASuperExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -44190,11 +47008,11 @@ void parser___parser_prod___ASuperExternCall___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8083 */
+  /* parser/parser_prod.nit:8565 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 8083);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser___parser_prod, 8565);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -44209,7 +47027,7 @@ void parser___parser_prod___ALocalPropExternCall___empty_init(val_t p0, int* ini
   if (init_table[itpos281]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8087;
+  fra.me.line = 8569;
   fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -44229,7 +47047,7 @@ void parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall(val
   if (init_table[itpos282]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8089;
+  fra.me.line = 8571;
   fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -44239,21 +47057,21 @@ void parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall(val
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8089 */
+  /* parser/parser_prod.nit:8571 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8093 */
+  /* parser/parser_prod.nit:8575 */
   CALL_parser___parser_prod___ALocalPropExternCall___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:8094 */
+  /* parser/parser_prod.nit:8576 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8094);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8576);
   }
   ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8095 */
+  /* parser/parser_prod.nit:8577 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8095);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8577);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -44268,7 +47086,7 @@ void parser___parser_prod___ALocalPropExternCall___replace_child(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8098;
+  fra.me.line = 8580;
   fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -44280,11 +47098,11 @@ void parser___parser_prod___ALocalPropExternCall___replace_child(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8100 */
+  /* parser/parser_prod.nit:8582 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 8100);
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 8582);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -44294,7 +47112,7 @@ void parser___parser_prod___ALocalPropExternCall___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8101 */
+    /* parser/parser_prod.nit:8583 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -44309,25 +47127,25 @@ void parser___parser_prod___ALocalPropExternCall___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8102 */
+      /* parser/parser_prod.nit:8584 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8102);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8584);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8103 */
+      /* parser/parser_prod.nit:8585 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8103);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8585);
       }
-      /* parser/parser_prod.nit:8104 */
+      /* parser/parser_prod.nit:8586 */
       ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8106 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8106);
+      /* parser/parser_prod.nit:8588 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8588);
     }
-    /* parser/parser_prod.nit:8108 */
+    /* parser/parser_prod.nit:8590 */
     goto label1;
   }
   label1: while(0);
@@ -44341,7 +47159,7 @@ void parser___parser_prod___ALocalPropExternCall___visit_all(val_t p0, val_t p1)
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8112;
+  fra.me.line = 8594;
   fra.me.meth = LOCATE_parser___parser_prod___ALocalPropExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -44350,11 +47168,11 @@ void parser___parser_prod___ALocalPropExternCall___visit_all(val_t p0, val_t p1)
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8114 */
+  /* parser/parser_prod.nit:8596 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 8114);
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 8596);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -44369,7 +47187,7 @@ void parser___parser_prod___AFullPropExternCall___empty_init(val_t p0, int* init
   if (init_table[itpos283]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8118;
+  fra.me.line = 8600;
   fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -44390,7 +47208,7 @@ void parser___parser_prod___AFullPropExternCall___init_afullpropexterncall(val_t
   if (init_table[itpos284]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8120;
+  fra.me.line = 8602;
   fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___init_afullpropexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -44404,26 +47222,26 @@ void parser___parser_prod___AFullPropExternCall___init_afullpropexterncall(val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:8120 */
+  /* parser/parser_prod.nit:8602 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8126 */
+  /* parser/parser_prod.nit:8608 */
   CALL_parser___parser_prod___AFullPropExternCall___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:8127 */
+  /* parser/parser_prod.nit:8609 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8127);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8609);
   }
   ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8128 */
+  /* parser/parser_prod.nit:8610 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8128);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8610);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:8129 */
+  /* parser/parser_prod.nit:8611 */
   ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:8130 */
+  /* parser/parser_prod.nit:8612 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -44438,24 +47256,24 @@ void parser___parser_prod___AFullPropExternCall___init_afullpropexterncall(val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8131 */
+    /* parser/parser_prod.nit:8613 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8131);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8613);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
   }
-  /* parser/parser_prod.nit:8133 */
+  /* parser/parser_prod.nit:8615 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8133);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8615);
   }
   ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:8134 */
+  /* parser/parser_prod.nit:8616 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8134);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8616);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
@@ -44470,7 +47288,7 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8137;
+  fra.me.line = 8619;
   fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -44482,11 +47300,11 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8139 */
+  /* parser/parser_prod.nit:8621 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 8139);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 8621);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -44496,7 +47314,7 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8140 */
+    /* parser/parser_prod.nit:8622 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -44511,28 +47329,28 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8141 */
+      /* parser/parser_prod.nit:8623 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8141);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8623);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8142 */
+      /* parser/parser_prod.nit:8624 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8142);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8624);
       }
-      /* parser/parser_prod.nit:8143 */
+      /* parser/parser_prod.nit:8625 */
       ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8145 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8145);
+      /* parser/parser_prod.nit:8627 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8627);
     }
-    /* parser/parser_prod.nit:8147 */
+    /* parser/parser_prod.nit:8629 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8149 */
+  /* parser/parser_prod.nit:8631 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -44547,7 +47365,7 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8150 */
+    /* parser/parser_prod.nit:8632 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -44562,32 +47380,32 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8151 */
+      /* parser/parser_prod.nit:8633 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8151);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8633);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8152 */
+      /* parser/parser_prod.nit:8634 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast TQuad*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8152);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8634);
       }
-      /* parser/parser_prod.nit:8153 */
+      /* parser/parser_prod.nit:8635 */
       ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8155 */
+      /* parser/parser_prod.nit:8637 */
       ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:8157 */
+    /* parser/parser_prod.nit:8639 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8159 */
+  /* parser/parser_prod.nit:8641 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 8159);
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 8641);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -44597,7 +47415,7 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8160 */
+    /* parser/parser_prod.nit:8642 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -44612,25 +47430,25 @@ void parser___parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8161 */
+      /* parser/parser_prod.nit:8643 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8161);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8643);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8162 */
+      /* parser/parser_prod.nit:8644 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8162);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8644);
       }
-      /* parser/parser_prod.nit:8163 */
+      /* parser/parser_prod.nit:8645 */
       ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8165 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8165);
+      /* parser/parser_prod.nit:8647 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8647);
     }
-    /* parser/parser_prod.nit:8167 */
+    /* parser/parser_prod.nit:8649 */
     goto label1;
   }
   label1: while(0);
@@ -44645,7 +47463,7 @@ void parser___parser_prod___AFullPropExternCall___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8171;
+  fra.me.line = 8653;
   fra.me.meth = LOCATE_parser___parser_prod___AFullPropExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -44656,17 +47474,17 @@ void parser___parser_prod___AFullPropExternCall___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8171 */
+  /* parser/parser_prod.nit:8653 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8173 */
+  /* parser/parser_prod.nit:8655 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 8173);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 8655);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:8174 */
+  /* parser/parser_prod.nit:8656 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -44682,20 +47500,20 @@ void parser___parser_prod___AFullPropExternCall___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8175 */
+    /* parser/parser_prod.nit:8657 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast TQuad*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8175);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8657);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:8177 */
+  /* parser/parser_prod.nit:8659 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 8177);
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser___parser_prod, 8659);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -44710,7 +47528,7 @@ void parser___parser_prod___AInitPropExternCall___empty_init(val_t p0, int* init
   if (init_table[itpos285]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8181;
+  fra.me.line = 8663;
   fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -44730,7 +47548,7 @@ void parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall(val_t
   if (init_table[itpos286]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8183;
+  fra.me.line = 8665;
   fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -44740,21 +47558,21 @@ void parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall(val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8183 */
+  /* parser/parser_prod.nit:8665 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8187 */
+  /* parser/parser_prod.nit:8669 */
   CALL_parser___parser_prod___AInitPropExternCall___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
-  /* parser/parser_prod.nit:8188 */
+  /* parser/parser_prod.nit:8670 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8188);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8670);
   }
   ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[2]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8189 */
+  /* parser/parser_prod.nit:8671 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8189);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8671);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -44769,7 +47587,7 @@ void parser___parser_prod___AInitPropExternCall___replace_child(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8192;
+  fra.me.line = 8674;
   fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -44781,11 +47599,11 @@ void parser___parser_prod___AInitPropExternCall___replace_child(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8194 */
+  /* parser/parser_prod.nit:8676 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 8194);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 8676);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -44795,7 +47613,7 @@ void parser___parser_prod___AInitPropExternCall___replace_child(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8195 */
+    /* parser/parser_prod.nit:8677 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -44810,25 +47628,25 @@ void parser___parser_prod___AInitPropExternCall___replace_child(val_t p0, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8196 */
+      /* parser/parser_prod.nit:8678 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8196);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8678);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8197 */
+      /* parser/parser_prod.nit:8679 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8197);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8679);
       }
-      /* parser/parser_prod.nit:8198 */
+      /* parser/parser_prod.nit:8680 */
       ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8200 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8200);
+      /* parser/parser_prod.nit:8682 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8682);
     }
-    /* parser/parser_prod.nit:8202 */
+    /* parser/parser_prod.nit:8684 */
     goto label1;
   }
   label1: while(0);
@@ -44842,7 +47660,7 @@ void parser___parser_prod___AInitPropExternCall___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8206;
+  fra.me.line = 8688;
   fra.me.meth = LOCATE_parser___parser_prod___AInitPropExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -44851,11 +47669,11 @@ void parser___parser_prod___AInitPropExternCall___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8208 */
+  /* parser/parser_prod.nit:8690 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 8208);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser___parser_prod, 8690);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -44870,7 +47688,7 @@ void parser___parser_prod___ACastAsExternCall___empty_init(val_t p0, int* init_t
   if (init_table[itpos287]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8212;
+  fra.me.line = 8694;
   fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -44890,7 +47708,7 @@ void parser___parser_prod___ACastAsExternCall___init_acastasexterncall(val_t p0,
   if (init_table[itpos288]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8214;
+  fra.me.line = 8696;
   fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___init_acastasexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -44904,47 +47722,47 @@ void parser___parser_prod___ACastAsExternCall___init_acastasexterncall(val_t p0,
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:8214 */
+  /* parser/parser_prod.nit:8696 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8220 */
+  /* parser/parser_prod.nit:8702 */
   CALL_parser___parser_prod___ACastAsExternCall___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:8221 */
+  /* parser/parser_prod.nit:8703 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8221);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8703);
   }
   ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8222 */
+  /* parser/parser_prod.nit:8704 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8222);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8704);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:8223 */
+  /* parser/parser_prod.nit:8705 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8223);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8705);
   }
   ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:8224 */
+  /* parser/parser_prod.nit:8706 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8224);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8706);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:8225 */
+  /* parser/parser_prod.nit:8707 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8225);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8707);
   }
   ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:8226 */
+  /* parser/parser_prod.nit:8708 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8226);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8708);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
@@ -44959,7 +47777,7 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8229;
+  fra.me.line = 8711;
   fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -44971,11 +47789,11 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8231 */
+  /* parser/parser_prod.nit:8713 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_from_type", LOCATE_parser___parser_prod, 8231);
+    nit_abort("Uninitialized attribute %s", "_n_from_type", LOCATE_parser___parser_prod, 8713);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -44985,7 +47803,7 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8232 */
+    /* parser/parser_prod.nit:8714 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45000,32 +47818,32 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8233 */
+      /* parser/parser_prod.nit:8715 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8233);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8715);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8234 */
+      /* parser/parser_prod.nit:8716 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8234);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8716);
       }
-      /* parser/parser_prod.nit:8235 */
+      /* parser/parser_prod.nit:8717 */
       ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8237 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8237);
+      /* parser/parser_prod.nit:8719 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8719);
     }
-    /* parser/parser_prod.nit:8239 */
+    /* parser/parser_prod.nit:8721 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8241 */
+  /* parser/parser_prod.nit:8723 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8241);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8723);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -45035,7 +47853,7 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8242 */
+    /* parser/parser_prod.nit:8724 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45050,32 +47868,32 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8243 */
+      /* parser/parser_prod.nit:8725 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8243);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8725);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8244 */
+      /* parser/parser_prod.nit:8726 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast TKwas*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8244);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8726);
       }
-      /* parser/parser_prod.nit:8245 */
+      /* parser/parser_prod.nit:8727 */
       ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8247 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8247);
+      /* parser/parser_prod.nit:8729 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8729);
     }
-    /* parser/parser_prod.nit:8249 */
+    /* parser/parser_prod.nit:8731 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8251 */
+  /* parser/parser_prod.nit:8733 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_to_type", LOCATE_parser___parser_prod, 8251);
+    nit_abort("Uninitialized attribute %s", "_n_to_type", LOCATE_parser___parser_prod, 8733);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -45085,7 +47903,7 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8252 */
+    /* parser/parser_prod.nit:8734 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45100,25 +47918,25 @@ void parser___parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8253 */
+      /* parser/parser_prod.nit:8735 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8253);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8735);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8254 */
+      /* parser/parser_prod.nit:8736 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8254);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8736);
       }
-      /* parser/parser_prod.nit:8255 */
+      /* parser/parser_prod.nit:8737 */
       ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8257 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8257);
+      /* parser/parser_prod.nit:8739 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8739);
     }
-    /* parser/parser_prod.nit:8259 */
+    /* parser/parser_prod.nit:8741 */
     goto label1;
   }
   label1: while(0);
@@ -45132,7 +47950,7 @@ void parser___parser_prod___ACastAsExternCall___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8263;
+  fra.me.line = 8745;
   fra.me.meth = LOCATE_parser___parser_prod___ACastAsExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -45142,27 +47960,27 @@ void parser___parser_prod___ACastAsExternCall___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8265 */
+  /* parser/parser_prod.nit:8747 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_from_type", LOCATE_parser___parser_prod, 8265);
+    nit_abort("Uninitialized attribute %s", "_n_from_type", LOCATE_parser___parser_prod, 8747);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:8266 */
+  /* parser/parser_prod.nit:8748 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8266);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8748);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:8267 */
+  /* parser/parser_prod.nit:8749 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_to_type", LOCATE_parser___parser_prod, 8267);
+    nit_abort("Uninitialized attribute %s", "_n_to_type", LOCATE_parser___parser_prod, 8749);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -45177,7 +47995,7 @@ void parser___parser_prod___AAsNullableExternCall___empty_init(val_t p0, int* in
   if (init_table[itpos289]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8271;
+  fra.me.line = 8753;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -45197,7 +48015,7 @@ void parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall(v
   if (init_table[itpos290]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8273;
+  fra.me.line = 8755;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -45211,47 +48029,47 @@ void parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall(v
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* parser/parser_prod.nit:8273 */
+  /* parser/parser_prod.nit:8755 */
   fra.me.REG[4] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8279 */
+  /* parser/parser_prod.nit:8761 */
   CALL_parser___parser_prod___AAsNullableExternCall___empty_init(fra.me.REG[4])(fra.me.REG[4], init_table);
-  /* parser/parser_prod.nit:8280 */
+  /* parser/parser_prod.nit:8762 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8280);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8762);
   }
   ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[4]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8281 */
+  /* parser/parser_prod.nit:8763 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8281);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8763);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* parser/parser_prod.nit:8282 */
+  /* parser/parser_prod.nit:8764 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8282);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8764);
   }
   ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[4]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:8283 */
+  /* parser/parser_prod.nit:8765 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8283);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8765);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-  /* parser/parser_prod.nit:8284 */
+  /* parser/parser_prod.nit:8766 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8284);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8766);
   }
   ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[4]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:8285 */
+  /* parser/parser_prod.nit:8767 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8285);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8767);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
@@ -45266,7 +48084,7 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8288;
+  fra.me.line = 8770;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -45278,11 +48096,11 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8290 */
+  /* parser/parser_prod.nit:8772 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 8290);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 8772);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -45292,7 +48110,7 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8291 */
+    /* parser/parser_prod.nit:8773 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45307,32 +48125,32 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8292 */
+      /* parser/parser_prod.nit:8774 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8292);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8774);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8293 */
+      /* parser/parser_prod.nit:8775 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8293);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8775);
       }
-      /* parser/parser_prod.nit:8294 */
+      /* parser/parser_prod.nit:8776 */
       ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8296 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8296);
+      /* parser/parser_prod.nit:8778 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8778);
     }
-    /* parser/parser_prod.nit:8298 */
+    /* parser/parser_prod.nit:8780 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8300 */
+  /* parser/parser_prod.nit:8782 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8300);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8782);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -45342,7 +48160,7 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8301 */
+    /* parser/parser_prod.nit:8783 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45357,32 +48175,32 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8302 */
+      /* parser/parser_prod.nit:8784 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8302);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8784);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8303 */
+      /* parser/parser_prod.nit:8785 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast TKwas*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8303);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8785);
       }
-      /* parser/parser_prod.nit:8304 */
+      /* parser/parser_prod.nit:8786 */
       ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8306 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8306);
+      /* parser/parser_prod.nit:8788 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8788);
     }
-    /* parser/parser_prod.nit:8308 */
+    /* parser/parser_prod.nit:8790 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8310 */
+  /* parser/parser_prod.nit:8792 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 8310);
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 8792);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -45392,7 +48210,7 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8311 */
+    /* parser/parser_prod.nit:8793 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45407,25 +48225,25 @@ void parser___parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8312 */
+      /* parser/parser_prod.nit:8794 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8312);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8794);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8313 */
+      /* parser/parser_prod.nit:8795 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast TKwnullable*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8313);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8795);
       }
-      /* parser/parser_prod.nit:8314 */
+      /* parser/parser_prod.nit:8796 */
       ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8316 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8316);
+      /* parser/parser_prod.nit:8798 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8798);
     }
-    /* parser/parser_prod.nit:8318 */
+    /* parser/parser_prod.nit:8800 */
     goto label1;
   }
   label1: while(0);
@@ -45439,7 +48257,7 @@ void parser___parser_prod___AAsNullableExternCall___visit_all(val_t p0, val_t p1
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8322;
+  fra.me.line = 8804;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNullableExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -45449,27 +48267,27 @@ void parser___parser_prod___AAsNullableExternCall___visit_all(val_t p0, val_t p1
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8324 */
+  /* parser/parser_prod.nit:8806 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 8324);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 8806);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:8325 */
+  /* parser/parser_prod.nit:8807 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8325);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8807);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:8326 */
+  /* parser/parser_prod.nit:8808 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 8326);
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 8808);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -45484,7 +48302,7 @@ void parser___parser_prod___AAsNotNullableExternCall___empty_init(val_t p0, int*
   if (init_table[itpos291]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8330;
+  fra.me.line = 8812;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -45504,7 +48322,7 @@ void parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableextern
   if (init_table[itpos292]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8332;
+  fra.me.line = 8814;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -45520,60 +48338,60 @@ void parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableextern
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* parser/parser_prod.nit:8332 */
+  /* parser/parser_prod.nit:8814 */
   fra.me.REG[5] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8339 */
+  /* parser/parser_prod.nit:8821 */
   CALL_parser___parser_prod___AAsNotNullableExternCall___empty_init(fra.me.REG[5])(fra.me.REG[5], init_table);
-  /* parser/parser_prod.nit:8340 */
+  /* parser/parser_prod.nit:8822 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8340);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8822);
   }
   ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[5]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8341 */
+  /* parser/parser_prod.nit:8823 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8341);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8823);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* parser/parser_prod.nit:8342 */
+  /* parser/parser_prod.nit:8824 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8342);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8824);
   }
   ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[5]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:8343 */
+  /* parser/parser_prod.nit:8825 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8343);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8825);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-  /* parser/parser_prod.nit:8344 */
+  /* parser/parser_prod.nit:8826 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8344);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8826);
   }
   ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[5]) = fra.me.REG[3];
-  /* parser/parser_prod.nit:8345 */
+  /* parser/parser_prod.nit:8827 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8345);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8827);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-  /* parser/parser_prod.nit:8346 */
+  /* parser/parser_prod.nit:8828 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8346);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8828);
   }
   ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[5]) = fra.me.REG[4];
-  /* parser/parser_prod.nit:8347 */
+  /* parser/parser_prod.nit:8829 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8347);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8829);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   stack_frame_head = fra.me.prev;
@@ -45588,7 +48406,7 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8350;
+  fra.me.line = 8832;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -45600,11 +48418,11 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8352 */
+  /* parser/parser_prod.nit:8834 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 8352);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 8834);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -45614,7 +48432,7 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8353 */
+    /* parser/parser_prod.nit:8835 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45629,32 +48447,32 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8354 */
+      /* parser/parser_prod.nit:8836 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8354);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8836);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8355 */
+      /* parser/parser_prod.nit:8837 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8355);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8837);
       }
-      /* parser/parser_prod.nit:8356 */
+      /* parser/parser_prod.nit:8838 */
       ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8358 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8358);
+      /* parser/parser_prod.nit:8840 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8840);
     }
-    /* parser/parser_prod.nit:8360 */
+    /* parser/parser_prod.nit:8842 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8362 */
+  /* parser/parser_prod.nit:8844 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8362);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8844);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -45664,7 +48482,7 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8363 */
+    /* parser/parser_prod.nit:8845 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45679,32 +48497,32 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8364 */
+      /* parser/parser_prod.nit:8846 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8364);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8846);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8365 */
+      /* parser/parser_prod.nit:8847 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast TKwas*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8365);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8847);
       }
-      /* parser/parser_prod.nit:8366 */
+      /* parser/parser_prod.nit:8848 */
       ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8368 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8368);
+      /* parser/parser_prod.nit:8850 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8850);
     }
-    /* parser/parser_prod.nit:8370 */
+    /* parser/parser_prod.nit:8852 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8372 */
+  /* parser/parser_prod.nit:8854 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 8372);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 8854);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -45714,7 +48532,7 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8373 */
+    /* parser/parser_prod.nit:8855 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45729,32 +48547,32 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8374 */
+      /* parser/parser_prod.nit:8856 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8374);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8856);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8375 */
+      /* parser/parser_prod.nit:8857 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast TKwnot*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8375);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8857);
       }
-      /* parser/parser_prod.nit:8376 */
+      /* parser/parser_prod.nit:8858 */
       ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8378 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8378);
+      /* parser/parser_prod.nit:8860 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8860);
     }
-    /* parser/parser_prod.nit:8380 */
+    /* parser/parser_prod.nit:8862 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8382 */
+  /* parser/parser_prod.nit:8864 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 8382);
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 8864);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -45764,7 +48582,7 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8383 */
+    /* parser/parser_prod.nit:8865 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45779,25 +48597,25 @@ void parser___parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, v
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8384 */
+      /* parser/parser_prod.nit:8866 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8384);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8866);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8385 */
+      /* parser/parser_prod.nit:8867 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast TKwnullable*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8385);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8867);
       }
-      /* parser/parser_prod.nit:8386 */
+      /* parser/parser_prod.nit:8868 */
       ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8388 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8388);
+      /* parser/parser_prod.nit:8870 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8870);
     }
-    /* parser/parser_prod.nit:8390 */
+    /* parser/parser_prod.nit:8872 */
     goto label1;
   }
   label1: while(0);
@@ -45811,7 +48629,7 @@ void parser___parser_prod___AAsNotNullableExternCall___visit_all(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8394;
+  fra.me.line = 8876;
   fra.me.meth = LOCATE_parser___parser_prod___AAsNotNullableExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -45821,35 +48639,35 @@ void parser___parser_prod___AAsNotNullableExternCall___visit_all(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8396 */
+  /* parser/parser_prod.nit:8878 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 8396);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 8878);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:8397 */
+  /* parser/parser_prod.nit:8879 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8397);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser___parser_prod, 8879);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:8398 */
+  /* parser/parser_prod.nit:8880 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 8398);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser___parser_prod, 8880);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:8399 */
+  /* parser/parser_prod.nit:8881 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 8399);
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser___parser_prod, 8881);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -45864,7 +48682,7 @@ void parser___parser_prod___AInLanguage___empty_init(val_t p0, int* init_table){
   if (init_table[itpos293]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8403;
+  fra.me.line = 8885;
   fra.me.meth = LOCATE_parser___parser_prod___AInLanguage___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -45884,7 +48702,7 @@ void parser___parser_prod___AInLanguage___init_ainlanguage(val_t p0, val_t p1, v
   if (init_table[itpos294]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8405;
+  fra.me.line = 8887;
   fra.me.meth = LOCATE_parser___parser_prod___AInLanguage___init_ainlanguage;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -45896,34 +48714,34 @@ void parser___parser_prod___AInLanguage___init_ainlanguage(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8405 */
+  /* parser/parser_prod.nit:8887 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8410 */
+  /* parser/parser_prod.nit:8892 */
   CALL_parser___parser_prod___AInLanguage___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:8411 */
+  /* parser/parser_prod.nit:8893 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8411);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8893);
   }
   ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8412 */
+  /* parser/parser_prod.nit:8894 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8412);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8894);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* parser/parser_prod.nit:8413 */
+  /* parser/parser_prod.nit:8895 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8413);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8895);
   }
   ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:8414 */
+  /* parser/parser_prod.nit:8896 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8414);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8896);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -45938,7 +48756,7 @@ void parser___parser_prod___AInLanguage___replace_child(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8417;
+  fra.me.line = 8899;
   fra.me.meth = LOCATE_parser___parser_prod___AInLanguage___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -45950,11 +48768,11 @@ void parser___parser_prod___AInLanguage___replace_child(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8419 */
+  /* parser/parser_prod.nit:8901 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwin", LOCATE_parser___parser_prod, 8419);
+    nit_abort("Uninitialized attribute %s", "_n_kwin", LOCATE_parser___parser_prod, 8901);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -45964,7 +48782,7 @@ void parser___parser_prod___AInLanguage___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8420 */
+    /* parser/parser_prod.nit:8902 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -45979,32 +48797,32 @@ void parser___parser_prod___AInLanguage___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8421 */
+      /* parser/parser_prod.nit:8903 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8421);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8903);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8422 */
+      /* parser/parser_prod.nit:8904 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwin, ID_parser___parser_nodes___TKwin)) /*cast TKwin*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8422);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8904);
       }
-      /* parser/parser_prod.nit:8423 */
+      /* parser/parser_prod.nit:8905 */
       ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8425 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8425);
+      /* parser/parser_prod.nit:8907 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8907);
     }
-    /* parser/parser_prod.nit:8427 */
+    /* parser/parser_prod.nit:8909 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8429 */
+  /* parser/parser_prod.nit:8911 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 8429);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 8911);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -46014,7 +48832,7 @@ void parser___parser_prod___AInLanguage___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8430 */
+    /* parser/parser_prod.nit:8912 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -46029,25 +48847,25 @@ void parser___parser_prod___AInLanguage___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8431 */
+      /* parser/parser_prod.nit:8913 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8431);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8913);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8432 */
+      /* parser/parser_prod.nit:8914 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast TString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8432);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8914);
       }
-      /* parser/parser_prod.nit:8433 */
+      /* parser/parser_prod.nit:8915 */
       ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8435 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8435);
+      /* parser/parser_prod.nit:8917 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8917);
     }
-    /* parser/parser_prod.nit:8437 */
+    /* parser/parser_prod.nit:8919 */
     goto label1;
   }
   label1: while(0);
@@ -46061,7 +48879,7 @@ void parser___parser_prod___AInLanguage___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8441;
+  fra.me.line = 8923;
   fra.me.meth = LOCATE_parser___parser_prod___AInLanguage___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -46071,19 +48889,19 @@ void parser___parser_prod___AInLanguage___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8443 */
+  /* parser/parser_prod.nit:8925 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_kwin", LOCATE_parser___parser_prod, 8443);
+    nit_abort("Uninitialized attribute %s", "_n_kwin", LOCATE_parser___parser_prod, 8925);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AInLanguage____n_kwin(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* parser/parser_prod.nit:8444 */
+  /* parser/parser_prod.nit:8926 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 8444);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser___parser_prod, 8926);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___AInLanguage____n_string(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -46098,7 +48916,7 @@ void parser___parser_prod___AExternCodeBlock___empty_init(val_t p0, int* init_ta
   if (init_table[itpos295]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8448;
+  fra.me.line = 8930;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCodeBlock___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -46119,7 +48937,7 @@ void parser___parser_prod___AExternCodeBlock___init_aexterncodeblock(val_t p0, v
   if (init_table[itpos296]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8450;
+  fra.me.line = 8932;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCodeBlock___init_aexterncodeblock;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -46131,13 +48949,13 @@ void parser___parser_prod___AExternCodeBlock___init_aexterncodeblock(val_t p0, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8450 */
+  /* parser/parser_prod.nit:8932 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8455 */
+  /* parser/parser_prod.nit:8937 */
   CALL_parser___parser_prod___AExternCodeBlock___empty_init(fra.me.REG[3])(fra.me.REG[3], init_table);
-  /* parser/parser_prod.nit:8456 */
+  /* parser/parser_prod.nit:8938 */
   ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[3]) = fra.me.REG[1];
-  /* parser/parser_prod.nit:8457 */
+  /* parser/parser_prod.nit:8939 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46152,24 +48970,24 @@ void parser___parser_prod___AExternCodeBlock___init_aexterncodeblock(val_t p0, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8458 */
+    /* parser/parser_prod.nit:8940 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8458);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8940);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:8460 */
+  /* parser/parser_prod.nit:8942 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8460);
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8942);
   }
   ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[3]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:8461 */
+  /* parser/parser_prod.nit:8943 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8461);
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8943);
   }
   CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
@@ -46184,7 +49002,7 @@ void parser___parser_prod___AExternCodeBlock___replace_child(val_t p0, val_t p1,
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8464;
+  fra.me.line = 8946;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCodeBlock___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -46196,7 +49014,7 @@ void parser___parser_prod___AExternCodeBlock___replace_child(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8466 */
+  /* parser/parser_prod.nit:8948 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -46211,7 +49029,7 @@ void parser___parser_prod___AExternCodeBlock___replace_child(val_t p0, val_t p1,
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8467 */
+    /* parser/parser_prod.nit:8949 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -46226,32 +49044,32 @@ void parser___parser_prod___AExternCodeBlock___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8468 */
+      /* parser/parser_prod.nit:8950 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8468);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8950);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8469 */
+      /* parser/parser_prod.nit:8951 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AInLanguage, ID_parser___parser_nodes___AInLanguage)) /*cast AInLanguage*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8469);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8951);
       }
-      /* parser/parser_prod.nit:8470 */
+      /* parser/parser_prod.nit:8952 */
       ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8472 */
+      /* parser/parser_prod.nit:8954 */
       ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:8474 */
+    /* parser/parser_prod.nit:8956 */
     goto label1;
   }
-  /* parser/parser_prod.nit:8476 */
+  /* parser/parser_prod.nit:8958 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_extern_code_segment", LOCATE_parser___parser_prod, 8476);
+    nit_abort("Uninitialized attribute %s", "_n_extern_code_segment", LOCATE_parser___parser_prod, 8958);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -46261,7 +49079,7 @@ void parser___parser_prod___AExternCodeBlock___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8477 */
+    /* parser/parser_prod.nit:8959 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -46276,25 +49094,25 @@ void parser___parser_prod___AExternCodeBlock___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8478 */
+      /* parser/parser_prod.nit:8960 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8478);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8960);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8479 */
+      /* parser/parser_prod.nit:8961 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TExternCodeSegment, ID_parser___parser_nodes___TExternCodeSegment)) /*cast TExternCodeSegment*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8479);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8961);
       }
-      /* parser/parser_prod.nit:8480 */
+      /* parser/parser_prod.nit:8962 */
       ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8482 */
-      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8482);
+      /* parser/parser_prod.nit:8964 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 8964);
     }
-    /* parser/parser_prod.nit:8484 */
+    /* parser/parser_prod.nit:8966 */
     goto label1;
   }
   label1: while(0);
@@ -46309,7 +49127,7 @@ void parser___parser_prod___AExternCodeBlock___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8488;
+  fra.me.line = 8970;
   fra.me.meth = LOCATE_parser___parser_prod___AExternCodeBlock___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -46320,9 +49138,9 @@ void parser___parser_prod___AExternCodeBlock___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8488 */
+  /* parser/parser_prod.nit:8970 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8490 */
+  /* parser/parser_prod.nit:8972 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -46338,20 +49156,20 @@ void parser___parser_prod___AExternCodeBlock___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8491 */
+    /* parser/parser_prod.nit:8973 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___AExternCodeBlock____n_in_language(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AInLanguage, ID_parser___parser_nodes___AInLanguage)) /*cast AInLanguage*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8491);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8973);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:8493 */
+  /* parser/parser_prod.nit:8975 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_extern_code_segment", LOCATE_parser___parser_prod, 8493);
+    nit_abort("Uninitialized attribute %s", "_n_extern_code_segment", LOCATE_parser___parser_prod, 8975);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___AExternCodeBlock____n_extern_code_segment(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
@@ -46366,7 +49184,7 @@ void parser___parser_prod___AQualified___empty_init(val_t p0, int* init_table){
   if (init_table[itpos297]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8497;
+  fra.me.line = 8979;
   fra.me.meth = LOCATE_parser___parser_prod___AQualified___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -46387,7 +49205,7 @@ void parser___parser_prod___AQualified___init_aqualified(val_t p0, val_t p1, val
   if (init_table[itpos298]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8499;
+  fra.me.line = 8981;
   fra.me.meth = LOCATE_parser___parser_prod___AQualified___init_aqualified;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -46398,12 +49216,12 @@ void parser___parser_prod___AQualified___init_aqualified(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8504 */
+  /* parser/parser_prod.nit:8986 */
   CALL_parser___parser_prod___AQualified___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AQualified___init_aqualified_1));
-  /* parser/parser_prod.nit:8510 */
+  /* parser/parser_prod.nit:8992 */
   ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[2];
-  /* parser/parser_prod.nit:8511 */
+  /* parser/parser_prod.nit:8993 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -46418,10 +49236,10 @@ void parser___parser_prod___AQualified___init_aqualified(val_t p0, val_t p1, val
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8512 */
+    /* parser/parser_prod.nit:8994 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8512);
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8994);
     }
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
@@ -46434,7 +49252,7 @@ void parser___parser_prod___AQualified___init_aqualified(val_t p0, val_t p1, val
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:8505 */
+    /* parser/parser_prod.nit:8987 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -46448,21 +49266,21 @@ void parser___parser_prod___AQualified___init_aqualified(val_t p0, val_t p1, val
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8506 */
+    /* parser/parser_prod.nit:8988 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8506);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8988);
     }
-    /* parser/parser_prod.nit:8507 */
+    /* parser/parser_prod.nit:8989 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AQualified____n_id(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8507);
+      nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8989);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___AQualified____n_id(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:8508 */
+    /* parser/parser_prod.nit:8990 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -46478,7 +49296,7 @@ void parser___parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8516;
+  fra.me.line = 8998;
   fra.me.meth = LOCATE_parser___parser_prod___AQualified___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -46490,12 +49308,12 @@ void parser___parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* parser/parser_prod.nit:8518 */
+  /* parser/parser_prod.nit:9000 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8518);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9000);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -46510,13 +49328,13 @@ void parser___parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:8518 */
+      /* parser/parser_prod.nit:9000 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:8519 */
+      /* parser/parser_prod.nit:9001 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8519);
+        nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9001);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -46533,7 +49351,7 @@ void parser___parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:8520 */
+        /* parser/parser_prod.nit:9002 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -46548,37 +49366,37 @@ void parser___parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:8521 */
+          /* parser/parser_prod.nit:9003 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8521);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9003);
           }
-          /* parser/parser_prod.nit:8522 */
+          /* parser/parser_prod.nit:9004 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8522);
+            nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9004);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:8523 */
+          /* parser/parser_prod.nit:9005 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8523);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9005);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:8525 */
+          /* parser/parser_prod.nit:9007 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8525);
+            nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9007);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:8527 */
+        /* parser/parser_prod.nit:9009 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -46593,7 +49411,7 @@ void parser___parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t
     }
   }
   label2: while(0);
-  /* parser/parser_prod.nit:8530 */
+  /* parser/parser_prod.nit:9012 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
@@ -46608,7 +49426,7 @@ void parser___parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8531 */
+    /* parser/parser_prod.nit:9013 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -46623,25 +49441,25 @@ void parser___parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* parser/parser_prod.nit:8532 */
+      /* parser/parser_prod.nit:9014 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8532);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9014);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8533 */
+      /* parser/parser_prod.nit:9015 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8533);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9015);
       }
-      /* parser/parser_prod.nit:8534 */
+      /* parser/parser_prod.nit:9016 */
       ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* parser/parser_prod.nit:8536 */
+      /* parser/parser_prod.nit:9018 */
       ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[0]) = NIT_NULL;
     }
-    /* parser/parser_prod.nit:8538 */
+    /* parser/parser_prod.nit:9020 */
     goto label1;
   }
   label1: while(0);
@@ -46656,7 +49474,7 @@ void parser___parser_prod___AQualified___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8542;
+  fra.me.line = 9024;
   fra.me.meth = LOCATE_parser___parser_prod___AQualified___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -46667,17 +49485,17 @@ void parser___parser_prod___AQualified___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8542 */
+  /* parser/parser_prod.nit:9024 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8544 */
+  /* parser/parser_prod.nit:9026 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 8544);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9026);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_id(fra.me.REG[2]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AQualified___visit_all_1));
-  /* parser/parser_prod.nit:8547 */
+  /* parser/parser_prod.nit:9029 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -46693,12 +49511,12 @@ void parser___parser_prod___AQualified___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8548 */
+    /* parser/parser_prod.nit:9030 */
     fra.me.REG[2] = ATTR_parser___parser_nodes___AQualified____n_classid(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast TClassid*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8548);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9030);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
@@ -46721,7 +49539,7 @@ void parser___parser_prod___AQualified___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8545 */
+    /* parser/parser_prod.nit:9027 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -46734,7 +49552,7 @@ void parser___parser_prod___ADoc___empty_init(val_t p0, int* init_table){
   if (init_table[itpos299]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8553;
+  fra.me.line = 9035;
   fra.me.meth = LOCATE_parser___parser_prod___ADoc___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -46753,7 +49571,7 @@ void parser___parser_prod___ADoc___init_adoc(val_t p0, val_t p1, int* init_table
   if (init_table[itpos300]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8555;
+  fra.me.line = 9037;
   fra.me.meth = LOCATE_parser___parser_prod___ADoc___init_adoc;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -46762,7 +49580,7 @@ void parser___parser_prod___ADoc___init_adoc(val_t p0, val_t p1, int* init_table
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8559 */
+  /* parser/parser_prod.nit:9041 */
   CALL_parser___parser_prod___ADoc___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ADoc___init_adoc_1));
   stack_frame_head = fra.me.prev;
@@ -46774,7 +49592,7 @@ void parser___parser_prod___ADoc___init_adoc(val_t p0, val_t p1, int* init_table
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* parser/parser_prod.nit:8560 */
+    /* parser/parser_prod.nit:9042 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser___parser_prod;
     fra.me.line = 0;
@@ -46788,21 +49606,21 @@ void parser___parser_prod___ADoc___init_adoc(val_t p0, val_t p1, int* init_table
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8561 */
+    /* parser/parser_prod.nit:9043 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___TComment, ID_parser___parser_nodes___TComment)) /*cast TComment*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8561);
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9043);
     }
-    /* parser/parser_prod.nit:8562 */
+    /* parser/parser_prod.nit:9044 */
     REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADoc____n_comment(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8562);
+      nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 9044);
     }
     fra.me.REG[1] = ATTR_parser___parser_nodes___ADoc____n_comment(closctx->REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* parser/parser_prod.nit:8563 */
+    /* parser/parser_prod.nit:9045 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -46818,7 +49636,7 @@ void parser___parser_prod___ADoc___replace_child(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___parser_prod;
-  fra.me.line = 8567;
+  fra.me.line = 9049;
   fra.me.meth = LOCATE_parser___parser_prod___ADoc___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -46830,12 +49648,12 @@ void parser___parser_prod___ADoc___replace_child(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_prod.nit:8569 */
+  /* parser/parser_prod.nit:9051 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8569);
+    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 9051);
   }
   fra.me.REG[3] = ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -46850,13 +49668,13 @@ void parser___parser_prod___ADoc___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* parser/parser_prod.nit:8569 */
+      /* parser/parser_prod.nit:9051 */
       REGB2 = REGB0;
-      /* parser/parser_prod.nit:8570 */
+      /* parser/parser_prod.nit:9052 */
       REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8570);
+        nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 9052);
       }
       fra.me.REG[3] = ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0]);
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -46873,7 +49691,7 @@ void parser___parser_prod___ADoc___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* parser/parser_prod.nit:8571 */
+        /* parser/parser_prod.nit:9053 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -46888,37 +49706,37 @@ void parser___parser_prod___ADoc___replace_child(val_t p0, val_t p1, val_t p2){
         }
         REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
         if (UNTAG_Bool(REGB3)) {
-          /* parser/parser_prod.nit:8572 */
+          /* parser/parser_prod.nit:9054 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TComment, ID_parser___parser_nodes___TComment)) /*cast TComment*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8572);
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9054);
           }
-          /* parser/parser_prod.nit:8573 */
+          /* parser/parser_prod.nit:9055 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8573);
+            nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 9055);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* parser/parser_prod.nit:8574 */
+          /* parser/parser_prod.nit:9056 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8574);
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9056);
           }
           CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* parser/parser_prod.nit:8576 */
+          /* parser/parser_prod.nit:9058 */
           REGB3 = TAG_Bool(ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8576);
+            nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 9058);
           }
           fra.me.REG[3] = ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0]);
           CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* parser/parser_prod.nit:8578 */
+        /* parser/parser_prod.nit:9060 */
         goto label1;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -46944,7 +49762,7 @@ void parser___parser_prod___ADoc___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8583;
+  fra.me.line = 9065;
   fra.me.meth = LOCATE_parser___parser_prod___ADoc___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -46953,11 +49771,11 @@ void parser___parser_prod___ADoc___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8585 */
+  /* parser/parser_prod.nit:9067 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 8585);
+    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser___parser_prod, 9067);
   }
   fra.me.REG[0] = ATTR_parser___parser_nodes___ADoc____n_comment(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser___parser_prod___ADoc___visit_all_1));
@@ -46980,21 +49798,185 @@ void parser___parser_prod___ADoc___visit_all(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* parser/parser_prod.nit:8586 */
+    /* parser/parser_prod.nit:9068 */
     CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
-static const char LOCATE_parser___parser_prod___Start___replace_child[] = "parser_prod::Start::(parser_prod::ANode::replace_child)";
-void parser___parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2){
+static const char LOCATE_parser___parser_prod___AAnnotations___empty_init[] = "parser_prod::AAnnotations::empty_init";
+void parser___parser_prod___AAnnotations___empty_init(val_t p0, int* init_table){
+  int itpos301 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAnnotations].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos301]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9073;
+  fra.me.meth = LOCATE_parser___parser_prod___AAnnotations___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos301] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AAnnotations___init_aannotations[] = "parser_prod::AAnnotations::init_aannotations";
+void parser___parser_prod___AAnnotations___init_aannotations(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
+  int itpos302 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAnnotations].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos302]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9075;
+  fra.me.meth = LOCATE_parser___parser_prod___AAnnotations___init_aannotations;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* parser/parser_prod.nit:9082 */
+  CALL_parser___parser_prod___AAnnotations___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* parser/parser_prod.nit:9083 */
+  ATTR_parser___parser_nodes___AAnnotations____n_at(fra.me.REG[0]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9084 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9085 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9085);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  /* parser/parser_prod.nit:9087 */
+  ATTR_parser___parser_nodes___AAnnotations____n_opar(fra.me.REG[0]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:9088 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9089 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9089);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AAnnotations___init_aannotations_1));
+  /* parser/parser_prod.nit:9096 */
+  ATTR_parser___parser_nodes___AAnnotations____n_cpar(fra.me.REG[0]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:9097 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9098 */
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9098);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos302] = 1;
+  return;
+}
+  void OC_parser___parser_prod___AAnnotations___init_aannotations_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* parser/parser_prod.nit:9091 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser___parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser___parser_prod___AAnnotations___init_aannotations;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* parser/parser_prod.nit:9092 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AAnnotation, ID_parser___parser_nodes___AAnnotation)) /*cast AAnnotation*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9092);
+    }
+    /* parser/parser_prod.nit:9093 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotations____n_items(closctx->REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 9093);
+    }
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AAnnotations____n_items(closctx->REG[0]);
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:9094 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+static const char LOCATE_parser___parser_prod___AAnnotations___replace_child[] = "parser_prod::AAnnotations::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AAnnotations___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8592;
-  fra.me.meth = LOCATE_parser___parser_prod___Start___replace_child;
+  fra.me.line = 9102;
+  fra.me.meth = LOCATE_parser___parser_prod___AAnnotations___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -47005,8 +49987,8 @@ void parser___parser_prod___Start___replace_child(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_prod.nit:8594 */
-  fra.me.REG[3] = ATTR_parser___parser_nodes___Start____n_base(fra.me.REG[0]);
+  /* parser/parser_prod.nit:9104 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_at(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -47020,7 +50002,2498 @@ void parser___parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8595 */
+    /* parser/parser_prod.nit:9105 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:9106 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9106);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9107 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TAt, ID_parser___parser_nodes___TAt)) /*cast TAt*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9107);
+      }
+      /* parser/parser_prod.nit:9108 */
+      ATTR_parser___parser_nodes___AAnnotations____n_at(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:9110 */
+      ATTR_parser___parser_nodes___AAnnotations____n_at(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:9112 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:9114 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_opar(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9115 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:9116 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9116);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9117 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast TOpar*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9117);
+      }
+      /* parser/parser_prod.nit:9118 */
+      ATTR_parser___parser_nodes___AAnnotations____n_opar(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:9120 */
+      ATTR_parser___parser_nodes___AAnnotations____n_opar(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:9122 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:9124 */
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 9124);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[0]);
+  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  /* ../lib/standard/kernel.nit:355 */
+  while(1) {
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ../lib/standard/kernel.nit:355 */
+    if (UNTAG_Bool(REGB2)) {
+      /* parser/parser_prod.nit:9124 */
+      REGB2 = REGB0;
+      /* parser/parser_prod.nit:9125 */
+      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 9125);
+      }
+      fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(0);
+          REGB3 = REGB4;
+        } else {
+          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
+        }
+      }
+      if (UNTAG_Bool(REGB3)) {
+        /* parser/parser_prod.nit:9126 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
+        } else {
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(0);
+            REGB3 = REGB4;
+          } else {
+            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
+          }
+        }
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* parser/parser_prod.nit:9127 */
+          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotation, ID_parser___parser_nodes___AAnnotation)) /*cast AAnnotation*/;
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9127);
+          }
+          /* parser/parser_prod.nit:9128 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 9128);
+          }
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:9129 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9129);
+          }
+          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          /* parser/parser_prod.nit:9131 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 9131);
+          }
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+        }
+        /* parser/parser_prod.nit:9133 */
+        goto label1;
+      }
+      /* ../lib/standard/kernel.nit:357 */
+      REGB2 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ../lib/standard/kernel.nit:357 */
+      REGB0 = REGB2;
+    } else {
+      /* ../lib/standard/kernel.nit:355 */
+      goto label2;
+    }
+  }
+  label2: while(0);
+  /* parser/parser_prod.nit:9136 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_cpar(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9137 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:9138 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9138);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9139 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast TCpar*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9139);
+      }
+      /* parser/parser_prod.nit:9140 */
+      ATTR_parser___parser_nodes___AAnnotations____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:9142 */
+      ATTR_parser___parser_nodes___AAnnotations____n_cpar(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:9144 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AAnnotations___visit_all[] = "parser_prod::AAnnotations::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AAnnotations___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9148;
+  fra.me.meth = LOCATE_parser___parser_prod___AAnnotations___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9148 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:9150 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_at(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9151 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_at(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAt, ID_parser___parser_nodes___TAt)) /*cast TAt*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9151);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:9153 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_opar(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9154 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_opar(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast TOpar*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9154);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:9156 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[2])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_items", LOCATE_parser___parser_prod, 9156);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_items(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AAnnotations___visit_all_1));
+  /* parser/parser_prod.nit:9159 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotations____n_cpar(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9160 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___AAnnotations____n_cpar(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast TCpar*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9160);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser___parser_prod___AAnnotations___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser___parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser___parser_prod___AAnnotations___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* parser/parser_prod.nit:9157 */
+    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+static const char LOCATE_parser___parser_prod___AAnnotation___empty_init[] = "parser_prod::AAnnotation::empty_init";
+void parser___parser_prod___AAnnotation___empty_init(val_t p0, int* init_table){
+  int itpos303 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAnnotation].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos303]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9165;
+  fra.me.meth = LOCATE_parser___parser_prod___AAnnotation___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos303] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AAnnotation___init_aannotation[] = "parser_prod::AAnnotation::init_aannotation";
+void parser___parser_prod___AAnnotation___init_aannotation(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
+  int itpos304 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAnnotation].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos304]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9167;
+  fra.me.meth = LOCATE_parser___parser_prod___AAnnotation___init_aannotation;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  /* parser/parser_prod.nit:9167 */
+  fra.me.REG[6] = fra.me.REG[0];
+  /* parser/parser_prod.nit:9175 */
+  CALL_parser___parser_prod___AAnnotation___empty_init(fra.me.REG[6])(fra.me.REG[6], init_table);
+  /* parser/parser_prod.nit:9176 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9176);
+  }
+  ATTR_parser___parser_nodes___AAnnotation____n_atid(fra.me.REG[6]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9177 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9177);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+  /* parser/parser_prod.nit:9178 */
+  ATTR_parser___parser_nodes___AAnnotation____n_opar(fra.me.REG[6]) = fra.me.REG[2];
+  /* parser/parser_prod.nit:9179 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9180 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9180);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+  }
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AAnnotation___init_aannotation_1));
+  /* parser/parser_prod.nit:9187 */
+  ATTR_parser___parser_nodes___AAnnotation____n_cpar(fra.me.REG[6]) = fra.me.REG[4];
+  /* parser/parser_prod.nit:9188 */
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9189 */
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9189);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+  }
+  /* parser/parser_prod.nit:9191 */
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[6]) = fra.me.REG[5];
+  /* parser/parser_prod.nit:9192 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9193 */
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9193);
+    }
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos304] = 1;
+  return;
+}
+  void OC_parser___parser_prod___AAnnotation___init_aannotation_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* parser/parser_prod.nit:9182 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser___parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser___parser_prod___AAnnotation___init_aannotation;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.nitni_local_ref_head = NULL;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* parser/parser_prod.nit:9183 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AAtArg, ID_parser___parser_nodes___AAtArg)) /*cast AAtArg*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9183);
+    }
+    /* parser/parser_prod.nit:9184 */
+    REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_args(closctx->REG[6])!=NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 9184);
+    }
+    fra.me.REG[1] = ATTR_parser___parser_nodes___AAnnotation____n_args(closctx->REG[6]);
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    /* parser/parser_prod.nit:9185 */
+    CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[6]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+static const char LOCATE_parser___parser_prod___AAnnotation___replace_child[] = "parser_prod::AAnnotation::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AAnnotation___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9197;
+  fra.me.meth = LOCATE_parser___parser_prod___AAnnotation___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:9199 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_atid(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_atid", LOCATE_parser___parser_prod, 9199);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_atid(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9200 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:9201 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9201);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9202 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAtid, ID_parser___parser_nodes___AAtid)) /*cast AAtid*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9202);
+      }
+      /* parser/parser_prod.nit:9203 */
+      ATTR_parser___parser_nodes___AAnnotation____n_atid(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:9205 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9205);
+    }
+    /* parser/parser_prod.nit:9207 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:9209 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_opar(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9210 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:9211 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9211);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9212 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast TOpar*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9212);
+      }
+      /* parser/parser_prod.nit:9213 */
+      ATTR_parser___parser_nodes___AAnnotation____n_opar(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:9215 */
+      ATTR_parser___parser_nodes___AAnnotation____n_opar(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:9217 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:9219 */
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 9219);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[0]);
+  REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  /* ../lib/standard/kernel.nit:355 */
+  while(1) {
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ../lib/standard/kernel.nit:355 */
+    if (UNTAG_Bool(REGB2)) {
+      /* parser/parser_prod.nit:9219 */
+      REGB2 = REGB0;
+      /* parser/parser_prod.nit:9220 */
+      REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 9220);
+      }
+      fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(0);
+          REGB3 = REGB4;
+        } else {
+          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
+        }
+      }
+      if (UNTAG_Bool(REGB3)) {
+        /* parser/parser_prod.nit:9221 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
+        } else {
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(0);
+            REGB3 = REGB4;
+          } else {
+            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
+          }
+        }
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* parser/parser_prod.nit:9222 */
+          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAtArg, ID_parser___parser_nodes___AAtArg)) /*cast AAtArg*/;
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9222);
+          }
+          /* parser/parser_prod.nit:9223 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 9223);
+          }
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
+          /* parser/parser_prod.nit:9224 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9224);
+          }
+          CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          /* parser/parser_prod.nit:9226 */
+          REGB3 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+          } else {
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 9226);
+          }
+          fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[0]);
+          CALL_standard___collection___abstract_collection___Sequence___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
+        }
+        /* parser/parser_prod.nit:9228 */
+        goto label1;
+      }
+      /* ../lib/standard/kernel.nit:357 */
+      REGB2 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ../lib/standard/kernel.nit:357 */
+      REGB0 = REGB2;
+    } else {
+      /* ../lib/standard/kernel.nit:355 */
+      goto label2;
+    }
+  }
+  label2: while(0);
+  /* parser/parser_prod.nit:9231 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_cpar(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9232 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:9233 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9233);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9234 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast TCpar*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9234);
+      }
+      /* parser/parser_prod.nit:9235 */
+      ATTR_parser___parser_nodes___AAnnotation____n_cpar(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:9237 */
+      ATTR_parser___parser_nodes___AAnnotation____n_cpar(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:9239 */
+    goto label1;
+  }
+  /* parser/parser_prod.nit:9241 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9242 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:9243 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9243);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9244 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9244);
+      }
+      /* parser/parser_prod.nit:9245 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:9247 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* parser/parser_prod.nit:9249 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AAnnotation___visit_all[] = "parser_prod::AAnnotation::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AAnnotation___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9253;
+  fra.me.meth = LOCATE_parser___parser_prod___AAnnotation___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9253 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:9255 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_atid(fra.me.REG[2])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_atid", LOCATE_parser___parser_prod, 9255);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_atid(fra.me.REG[2]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* parser/parser_prod.nit:9256 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_opar(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9257 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_opar(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast TOpar*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9257);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:9259 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[2])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser___parser_prod, 9259);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_args(fra.me.REG[2]);
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser___parser_prod___AAnnotation___visit_all_1));
+  /* parser/parser_prod.nit:9262 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_cpar(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9263 */
+    fra.me.REG[3] = ATTR_parser___parser_nodes___AAnnotation____n_cpar(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast TCpar*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9263);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  }
+  /* parser/parser_prod.nit:9265 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+  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(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9266 */
+    fra.me.REG[2] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9266);
+    }
+    CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser___parser_prod___AAnnotation___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser___parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser___parser_prod___AAnnotation___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* parser/parser_prod.nit:9260 */
+    CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+static const char LOCATE_parser___parser_prod___ATypeAtArg___empty_init[] = "parser_prod::ATypeAtArg::empty_init";
+void parser___parser_prod___ATypeAtArg___empty_init(val_t p0, int* init_table){
+  int itpos305 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATypeAtArg].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos305]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9271;
+  fra.me.meth = LOCATE_parser___parser_prod___ATypeAtArg___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos305] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ATypeAtArg___init_atypeatarg[] = "parser_prod::ATypeAtArg::init_atypeatarg";
+void parser___parser_prod___ATypeAtArg___init_atypeatarg(val_t p0, val_t p1, int* init_table){
+  int itpos306 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___ATypeAtArg].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos306]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9273;
+  fra.me.meth = LOCATE_parser___parser_prod___ATypeAtArg___init_atypeatarg;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9273 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:9277 */
+  CALL_parser___parser_prod___ATypeAtArg___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:9278 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9278);
+  }
+  ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9279 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9279);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos306] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ATypeAtArg___replace_child[] = "parser_prod::ATypeAtArg::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___ATypeAtArg___replace_child(val_t p0, val_t p1, val_t p2){
+  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___parser_prod;
+  fra.me.line = 9282;
+  fra.me.meth = LOCATE_parser___parser_prod___ATypeAtArg___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:9284 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 9284);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9285 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:9286 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9286);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9287 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast AType*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9287);
+      }
+      /* parser/parser_prod.nit:9288 */
+      ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:9290 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9290);
+    }
+    /* parser/parser_prod.nit:9292 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___ATypeAtArg___visit_all[] = "parser_prod::ATypeAtArg::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___ATypeAtArg___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9296;
+  fra.me.meth = LOCATE_parser___parser_prod___ATypeAtArg___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9298 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser___parser_prod, 9298);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___ATypeAtArg____n_type(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AExprAtArg___empty_init[] = "parser_prod::AExprAtArg::empty_init";
+void parser___parser_prod___AExprAtArg___empty_init(val_t p0, int* init_table){
+  int itpos307 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExprAtArg].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos307]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9302;
+  fra.me.meth = LOCATE_parser___parser_prod___AExprAtArg___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos307] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AExprAtArg___init_aexpratarg[] = "parser_prod::AExprAtArg::init_aexpratarg";
+void parser___parser_prod___AExprAtArg___init_aexpratarg(val_t p0, val_t p1, int* init_table){
+  int itpos308 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AExprAtArg].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos308]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9304;
+  fra.me.meth = LOCATE_parser___parser_prod___AExprAtArg___init_aexpratarg;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9304 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:9308 */
+  CALL_parser___parser_prod___AExprAtArg___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:9309 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9309);
+  }
+  ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9310 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9310);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos308] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AExprAtArg___replace_child[] = "parser_prod::AExprAtArg::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AExprAtArg___replace_child(val_t p0, val_t p1, val_t p2){
+  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___parser_prod;
+  fra.me.line = 9313;
+  fra.me.meth = LOCATE_parser___parser_prod___AExprAtArg___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:9315 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 9315);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9316 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:9317 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9317);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9318 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast AExpr*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9318);
+      }
+      /* parser/parser_prod.nit:9319 */
+      ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:9321 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9321);
+    }
+    /* parser/parser_prod.nit:9323 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AExprAtArg___visit_all[] = "parser_prod::AExprAtArg::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AExprAtArg___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9327;
+  fra.me.meth = LOCATE_parser___parser_prod___AExprAtArg___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9329 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser___parser_prod, 9329);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AExprAtArg____n_expr(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AAtAtArg___empty_init[] = "parser_prod::AAtAtArg::empty_init";
+void parser___parser_prod___AAtAtArg___empty_init(val_t p0, int* init_table){
+  int itpos309 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAtAtArg].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos309]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9333;
+  fra.me.meth = LOCATE_parser___parser_prod___AAtAtArg___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos309] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AAtAtArg___init_aatatarg[] = "parser_prod::AAtAtArg::init_aatatarg";
+void parser___parser_prod___AAtAtArg___init_aatatarg(val_t p0, val_t p1, int* init_table){
+  int itpos310 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AAtAtArg].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos310]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9335;
+  fra.me.meth = LOCATE_parser___parser_prod___AAtAtArg___init_aatatarg;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9335 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:9339 */
+  CALL_parser___parser_prod___AAtAtArg___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:9340 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9340);
+  }
+  ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9341 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9341);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos310] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AAtAtArg___replace_child[] = "parser_prod::AAtAtArg::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AAtAtArg___replace_child(val_t p0, val_t p1, val_t p2){
+  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___parser_prod;
+  fra.me.line = 9344;
+  fra.me.meth = LOCATE_parser___parser_prod___AAtAtArg___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:9346 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9347 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:9348 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9348);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9349 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AAnnotations, ID_parser___parser_nodes___AAnnotations)) /*cast AAnnotations*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9349);
+      }
+      /* parser/parser_prod.nit:9350 */
+      ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:9352 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9352);
+    }
+    /* parser/parser_prod.nit:9354 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AAtAtArg___visit_all[] = "parser_prod::AAtAtArg::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AAtAtArg___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9358;
+  fra.me.meth = LOCATE_parser___parser_prod___AAtAtArg___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9360 */
+  fra.me.REG[0] = ATTR_parser___parser_nodes___Prod____n_annotations(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AIdAtid___empty_init[] = "parser_prod::AIdAtid::empty_init";
+void parser___parser_prod___AIdAtid___empty_init(val_t p0, int* init_table){
+  int itpos311 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIdAtid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos311]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9364;
+  fra.me.meth = LOCATE_parser___parser_prod___AIdAtid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos311] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AIdAtid___init_aidatid[] = "parser_prod::AIdAtid::init_aidatid";
+void parser___parser_prod___AIdAtid___init_aidatid(val_t p0, val_t p1, int* init_table){
+  int itpos312 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AIdAtid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos312]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9366;
+  fra.me.meth = LOCATE_parser___parser_prod___AIdAtid___init_aidatid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9366 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:9370 */
+  CALL_parser___parser_prod___AIdAtid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:9371 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9371);
+  }
+  ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9372 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9372);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos312] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AIdAtid___replace_child[] = "parser_prod::AIdAtid::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AIdAtid___replace_child(val_t p0, val_t p1, val_t p2){
+  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___parser_prod;
+  fra.me.line = 9375;
+  fra.me.meth = LOCATE_parser___parser_prod___AIdAtid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:9377 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9377);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9378 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:9379 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9379);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9380 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast TId*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9380);
+      }
+      /* parser/parser_prod.nit:9381 */
+      ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:9383 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9383);
+    }
+    /* parser/parser_prod.nit:9385 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AIdAtid___visit_all[] = "parser_prod::AIdAtid::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AIdAtid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9389;
+  fra.me.meth = LOCATE_parser___parser_prod___AIdAtid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9391 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9391);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwexternAtid___empty_init[] = "parser_prod::AKwexternAtid::empty_init";
+void parser___parser_prod___AKwexternAtid___empty_init(val_t p0, int* init_table){
+  int itpos313 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwexternAtid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos313]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9395;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwexternAtid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos313] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwexternAtid___init_akwexternatid[] = "parser_prod::AKwexternAtid::init_akwexternatid";
+void parser___parser_prod___AKwexternAtid___init_akwexternatid(val_t p0, val_t p1, int* init_table){
+  int itpos314 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwexternAtid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos314]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9397;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwexternAtid___init_akwexternatid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9397 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:9401 */
+  CALL_parser___parser_prod___AKwexternAtid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:9402 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9402);
+  }
+  ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9403 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9403);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos314] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwexternAtid___replace_child[] = "parser_prod::AKwexternAtid::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AKwexternAtid___replace_child(val_t p0, val_t p1, val_t p2){
+  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___parser_prod;
+  fra.me.line = 9406;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwexternAtid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:9408 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9408);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9409 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:9410 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9410);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9411 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwextern, ID_parser___parser_nodes___TKwextern)) /*cast TKwextern*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9411);
+      }
+      /* parser/parser_prod.nit:9412 */
+      ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:9414 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9414);
+    }
+    /* parser/parser_prod.nit:9416 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwexternAtid___visit_all[] = "parser_prod::AKwexternAtid::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AKwexternAtid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9420;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwexternAtid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9422 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9422);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwinternAtid___empty_init[] = "parser_prod::AKwinternAtid::empty_init";
+void parser___parser_prod___AKwinternAtid___empty_init(val_t p0, int* init_table){
+  int itpos315 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwinternAtid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos315]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9426;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwinternAtid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos315] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwinternAtid___init_akwinternatid[] = "parser_prod::AKwinternAtid::init_akwinternatid";
+void parser___parser_prod___AKwinternAtid___init_akwinternatid(val_t p0, val_t p1, int* init_table){
+  int itpos316 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwinternAtid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos316]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9428;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwinternAtid___init_akwinternatid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9428 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:9432 */
+  CALL_parser___parser_prod___AKwinternAtid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:9433 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9433);
+  }
+  ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9434 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9434);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos316] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwinternAtid___replace_child[] = "parser_prod::AKwinternAtid::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AKwinternAtid___replace_child(val_t p0, val_t p1, val_t p2){
+  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___parser_prod;
+  fra.me.line = 9437;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwinternAtid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:9439 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9439);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9440 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:9441 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9441);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9442 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwintern, ID_parser___parser_nodes___TKwintern)) /*cast TKwintern*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9442);
+      }
+      /* parser/parser_prod.nit:9443 */
+      ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:9445 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9445);
+    }
+    /* parser/parser_prod.nit:9447 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwinternAtid___visit_all[] = "parser_prod::AKwinternAtid::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AKwinternAtid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9451;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwinternAtid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9453 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9453);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwreadableAtid___empty_init[] = "parser_prod::AKwreadableAtid::empty_init";
+void parser___parser_prod___AKwreadableAtid___empty_init(val_t p0, int* init_table){
+  int itpos317 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwreadableAtid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos317]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9457;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwreadableAtid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos317] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwreadableAtid___init_akwreadableatid[] = "parser_prod::AKwreadableAtid::init_akwreadableatid";
+void parser___parser_prod___AKwreadableAtid___init_akwreadableatid(val_t p0, val_t p1, int* init_table){
+  int itpos318 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwreadableAtid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos318]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9459;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwreadableAtid___init_akwreadableatid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9459 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:9463 */
+  CALL_parser___parser_prod___AKwreadableAtid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:9464 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9464);
+  }
+  ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9465 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9465);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos318] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwreadableAtid___replace_child[] = "parser_prod::AKwreadableAtid::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AKwreadableAtid___replace_child(val_t p0, val_t p1, val_t p2){
+  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___parser_prod;
+  fra.me.line = 9468;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwreadableAtid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:9470 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9470);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9471 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:9472 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9472);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9473 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwreadable, ID_parser___parser_nodes___TKwreadable)) /*cast TKwreadable*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9473);
+      }
+      /* parser/parser_prod.nit:9474 */
+      ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:9476 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9476);
+    }
+    /* parser/parser_prod.nit:9478 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwreadableAtid___visit_all[] = "parser_prod::AKwreadableAtid::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AKwreadableAtid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9482;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwreadableAtid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9484 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9484);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwwritableAtid___empty_init[] = "parser_prod::AKwwritableAtid::empty_init";
+void parser___parser_prod___AKwwritableAtid___empty_init(val_t p0, int* init_table){
+  int itpos319 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwwritableAtid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos319]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9488;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwwritableAtid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos319] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwwritableAtid___init_akwwritableatid[] = "parser_prod::AKwwritableAtid::init_akwwritableatid";
+void parser___parser_prod___AKwwritableAtid___init_akwwritableatid(val_t p0, val_t p1, int* init_table){
+  int itpos320 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwwritableAtid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos320]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9490;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwwritableAtid___init_akwwritableatid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9490 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:9494 */
+  CALL_parser___parser_prod___AKwwritableAtid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:9495 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9495);
+  }
+  ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9496 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9496);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos320] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwwritableAtid___replace_child[] = "parser_prod::AKwwritableAtid::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AKwwritableAtid___replace_child(val_t p0, val_t p1, val_t p2){
+  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___parser_prod;
+  fra.me.line = 9499;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwwritableAtid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:9501 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9501);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9502 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:9503 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9503);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9504 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast TKwwritable*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9504);
+      }
+      /* parser/parser_prod.nit:9505 */
+      ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:9507 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9507);
+    }
+    /* parser/parser_prod.nit:9509 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwwritableAtid___visit_all[] = "parser_prod::AKwwritableAtid::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AKwwritableAtid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9513;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwwritableAtid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9515 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9515);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwimportAtid___empty_init[] = "parser_prod::AKwimportAtid::empty_init";
+void parser___parser_prod___AKwimportAtid___empty_init(val_t p0, int* init_table){
+  int itpos321 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwimportAtid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos321]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9519;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwimportAtid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos321] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwimportAtid___init_akwimportatid[] = "parser_prod::AKwimportAtid::init_akwimportatid";
+void parser___parser_prod___AKwimportAtid___init_akwimportatid(val_t p0, val_t p1, int* init_table){
+  int itpos322 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___parser_nodes___AKwimportAtid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos322]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9521;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwimportAtid___init_akwimportatid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9521 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* parser/parser_prod.nit:9525 */
+  CALL_parser___parser_prod___AKwimportAtid___empty_init(fra.me.REG[2])(fra.me.REG[2], init_table);
+  /* parser/parser_prod.nit:9526 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9526);
+  }
+  ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[2]) = fra.me.REG[1];
+  /* parser/parser_prod.nit:9527 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9527);
+  }
+  CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos322] = 1;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwimportAtid___replace_child[] = "parser_prod::AKwimportAtid::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___AKwimportAtid___replace_child(val_t p0, val_t p1, val_t p2){
+  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___parser_prod;
+  fra.me.line = 9530;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwimportAtid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:9532 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9532);
+  }
+  fra.me.REG[3] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9533 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* parser/parser_prod.nit:9534 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9534);
+      }
+      CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* parser/parser_prod.nit:9535 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast TKwimport*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9535);
+      }
+      /* parser/parser_prod.nit:9536 */
+      ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* parser/parser_prod.nit:9538 */
+      nit_abort("Aborted", NULL, LOCATE_parser___parser_prod, 9538);
+    }
+    /* parser/parser_prod.nit:9540 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___AKwimportAtid___visit_all[] = "parser_prod::AKwimportAtid::(parser_prod::ANode::visit_all)";
+void parser___parser_prod___AKwimportAtid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser___parser_prod;
+  fra.me.line = 9544;
+  fra.me.meth = LOCATE_parser___parser_prod___AKwimportAtid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser_prod.nit:9546 */
+  REGB0 = TAG_Bool(ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser___parser_prod, 9546);
+  }
+  fra.me.REG[0] = ATTR_parser___parser_nodes___AAtid____n_id(fra.me.REG[0]);
+  CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_parser___parser_prod___Start___replace_child[] = "parser_prod::Start::(parser_prod::ANode::replace_child)";
+void parser___parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2){
+  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___parser_prod;
+  fra.me.line = 9551;
+  fra.me.meth = LOCATE_parser___parser_prod___Start___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* parser/parser_prod.nit:9553 */
+  fra.me.REG[3] = ATTR_parser___parser_nodes___Start____n_base(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(0);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser_prod.nit:9554 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -47035,24 +52508,24 @@ void parser___parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2){
     }
     if (UNTAG_Bool(REGB0)) {
     } else {
-      /* parser/parser_prod.nit:8597 */
+      /* parser/parser_prod.nit:9556 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 8597);
+        nit_abort("Reciever is null", NULL, LOCATE_parser___parser_prod, 9556);
       }
       CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* parser/parser_prod.nit:8598 */
+      /* parser/parser_prod.nit:9557 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AModule, ID_parser___parser_nodes___AModule)) /*cast AModule*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 8598);
+        nit_abort("Assert failed", NULL, LOCATE_parser___parser_prod, 9557);
       }
-      /* parser/parser_prod.nit:8599 */
+      /* parser/parser_prod.nit:9558 */
       ATTR_parser___parser_nodes___Start____n_base(fra.me.REG[0]) = fra.me.REG[2];
     }
-    /* parser/parser_prod.nit:8601 */
+    /* parser/parser_prod.nit:9560 */
     CALL_parser___parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
-    /* parser/parser_prod.nit:8602 */
+    /* parser/parser_prod.nit:9561 */
     goto label1;
   }
   label1: while(0);
@@ -47067,7 +52540,7 @@ void parser___parser_prod___Start___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser___parser_prod;
-  fra.me.line = 8606;
+  fra.me.line = 9565;
   fra.me.meth = LOCATE_parser___parser_prod___Start___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -47078,9 +52551,9 @@ void parser___parser_prod___Start___visit_all(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* parser/parser_prod.nit:8606 */
+  /* parser/parser_prod.nit:9565 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* parser/parser_prod.nit:8608 */
+  /* parser/parser_prod.nit:9567 */
   fra.me.REG[3] = ATTR_parser___parser_nodes___Start____n_base(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -47096,20 +52569,20 @@ void parser___parser_prod___Start___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* parser/parser_prod.nit:8609 */
+    /* parser/parser_prod.nit:9568 */
     fra.me.REG[3] = ATTR_parser___parser_nodes___Start____n_base(fra.me.REG[2]);
     REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AModule, ID_parser___parser_nodes___AModule)) /*cast AModule*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 8609);
+      nit_abort("Cast failed", NULL, LOCATE_parser___parser_prod, 9568);
     }
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* parser/parser_prod.nit:8611 */
+  /* parser/parser_prod.nit:9570 */
   REGB0 = TAG_Bool(ATTR_parser___parser_nodes___Start____n_eof(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_eof", LOCATE_parser___parser_prod, 8611);
+    nit_abort("Uninitialized attribute %s", "_n_eof", LOCATE_parser___parser_prod, 9570);
   }
   fra.me.REG[2] = ATTR_parser___parser_nodes___Start____n_eof(fra.me.REG[2]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
index 12031a0..dfc1d7b 100644 (file)
@@ -323,6 +323,28 @@ extern const int SFT_parser___parser_prod[];
 #define CALL_parser___parser_prod___AQualified___init_aqualified(recv) ((parser___parser_prod___AQualified___init_aqualified_t)CALL((recv), (SFT_parser___parser_prod[155] + 1)))
 #define CALL_parser___parser_prod___ADoc___empty_init(recv) ((parser___parser_prod___ADoc___empty_init_t)CALL((recv), (SFT_parser___parser_prod[156] + 0)))
 #define CALL_parser___parser_prod___ADoc___init_adoc(recv) ((parser___parser_prod___ADoc___init_adoc_t)CALL((recv), (SFT_parser___parser_prod[156] + 1)))
+#define CALL_parser___parser_prod___AAnnotations___empty_init(recv) ((parser___parser_prod___AAnnotations___empty_init_t)CALL((recv), (SFT_parser___parser_prod[157] + 0)))
+#define CALL_parser___parser_prod___AAnnotations___init_aannotations(recv) ((parser___parser_prod___AAnnotations___init_aannotations_t)CALL((recv), (SFT_parser___parser_prod[157] + 1)))
+#define CALL_parser___parser_prod___AAnnotation___empty_init(recv) ((parser___parser_prod___AAnnotation___empty_init_t)CALL((recv), (SFT_parser___parser_prod[158] + 0)))
+#define CALL_parser___parser_prod___AAnnotation___init_aannotation(recv) ((parser___parser_prod___AAnnotation___init_aannotation_t)CALL((recv), (SFT_parser___parser_prod[158] + 1)))
+#define CALL_parser___parser_prod___ATypeAtArg___empty_init(recv) ((parser___parser_prod___ATypeAtArg___empty_init_t)CALL((recv), (SFT_parser___parser_prod[159] + 0)))
+#define CALL_parser___parser_prod___ATypeAtArg___init_atypeatarg(recv) ((parser___parser_prod___ATypeAtArg___init_atypeatarg_t)CALL((recv), (SFT_parser___parser_prod[159] + 1)))
+#define CALL_parser___parser_prod___AExprAtArg___empty_init(recv) ((parser___parser_prod___AExprAtArg___empty_init_t)CALL((recv), (SFT_parser___parser_prod[160] + 0)))
+#define CALL_parser___parser_prod___AExprAtArg___init_aexpratarg(recv) ((parser___parser_prod___AExprAtArg___init_aexpratarg_t)CALL((recv), (SFT_parser___parser_prod[160] + 1)))
+#define CALL_parser___parser_prod___AAtAtArg___empty_init(recv) ((parser___parser_prod___AAtAtArg___empty_init_t)CALL((recv), (SFT_parser___parser_prod[161] + 0)))
+#define CALL_parser___parser_prod___AAtAtArg___init_aatatarg(recv) ((parser___parser_prod___AAtAtArg___init_aatatarg_t)CALL((recv), (SFT_parser___parser_prod[161] + 1)))
+#define CALL_parser___parser_prod___AIdAtid___empty_init(recv) ((parser___parser_prod___AIdAtid___empty_init_t)CALL((recv), (SFT_parser___parser_prod[162] + 0)))
+#define CALL_parser___parser_prod___AIdAtid___init_aidatid(recv) ((parser___parser_prod___AIdAtid___init_aidatid_t)CALL((recv), (SFT_parser___parser_prod[162] + 1)))
+#define CALL_parser___parser_prod___AKwexternAtid___empty_init(recv) ((parser___parser_prod___AKwexternAtid___empty_init_t)CALL((recv), (SFT_parser___parser_prod[163] + 0)))
+#define CALL_parser___parser_prod___AKwexternAtid___init_akwexternatid(recv) ((parser___parser_prod___AKwexternAtid___init_akwexternatid_t)CALL((recv), (SFT_parser___parser_prod[163] + 1)))
+#define CALL_parser___parser_prod___AKwinternAtid___empty_init(recv) ((parser___parser_prod___AKwinternAtid___empty_init_t)CALL((recv), (SFT_parser___parser_prod[164] + 0)))
+#define CALL_parser___parser_prod___AKwinternAtid___init_akwinternatid(recv) ((parser___parser_prod___AKwinternAtid___init_akwinternatid_t)CALL((recv), (SFT_parser___parser_prod[164] + 1)))
+#define CALL_parser___parser_prod___AKwreadableAtid___empty_init(recv) ((parser___parser_prod___AKwreadableAtid___empty_init_t)CALL((recv), (SFT_parser___parser_prod[165] + 0)))
+#define CALL_parser___parser_prod___AKwreadableAtid___init_akwreadableatid(recv) ((parser___parser_prod___AKwreadableAtid___init_akwreadableatid_t)CALL((recv), (SFT_parser___parser_prod[165] + 1)))
+#define CALL_parser___parser_prod___AKwwritableAtid___empty_init(recv) ((parser___parser_prod___AKwwritableAtid___empty_init_t)CALL((recv), (SFT_parser___parser_prod[166] + 0)))
+#define CALL_parser___parser_prod___AKwwritableAtid___init_akwwritableatid(recv) ((parser___parser_prod___AKwwritableAtid___init_akwwritableatid_t)CALL((recv), (SFT_parser___parser_prod[166] + 1)))
+#define CALL_parser___parser_prod___AKwimportAtid___empty_init(recv) ((parser___parser_prod___AKwimportAtid___empty_init_t)CALL((recv), (SFT_parser___parser_prod[167] + 0)))
+#define CALL_parser___parser_prod___AKwimportAtid___init_akwimportatid(recv) ((parser___parser_prod___AKwimportAtid___init_akwimportatid_t)CALL((recv), (SFT_parser___parser_prod[167] + 1)))
 val_t parser___parser_prod___ANode___parent(val_t p0);
 typedef val_t (*parser___parser_prod___ANode___parent_t)(val_t p0);
 void parser___parser_prod___ANode___parent__eq(val_t p0, val_t p1);
@@ -385,9 +407,9 @@ val_t NEW_AModule_parser___parser_nodes___ANode___init();
 void parser___parser_prod___AModuledecl___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AModuledecl___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AModuledecl_parser___parser_prod___AModuledecl___empty_init();
-void parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
-typedef void (*parser___parser_prod___AModuledecl___init_amoduledecl_t)(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
-val_t NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, val_t p2);
+void parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table);
+typedef void (*parser___parser_prod___AModuledecl___init_amoduledecl_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table);
+val_t NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, val_t p2, val_t p3);
 void parser___parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AModuledecl___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AModuledecl___visit_all(val_t p0, val_t p1);
@@ -396,9 +418,9 @@ val_t NEW_AModuledecl_parser___parser_nodes___ANode___init();
 void parser___parser_prod___AStdImport___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AStdImport___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AStdImport_parser___parser_prod___AStdImport___empty_init();
-void parser___parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
-typedef void (*parser___parser_prod___AStdImport___init_astdimport_t)(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
-val_t NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val_t p2);
+void parser___parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table);
+typedef void (*parser___parser_prod___AStdImport___init_astdimport_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table);
+val_t NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val_t p2, val_t p3);
 void parser___parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AStdImport___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AStdImport___visit_all(val_t p0, val_t p1);
@@ -462,8 +484,8 @@ val_t NEW_AIntrudeVisibility_parser___parser_nodes___ANode___init();
 void parser___parser_prod___AStdClassdef___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AStdClassdef___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___empty_init();
-void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10, int* init_table);
-typedef void (*parser___parser_prod___AStdClassdef___init_astdclassdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10, int* init_table);
+void parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10, val_t p11, int* init_table);
+typedef void (*parser___parser_prod___AStdClassdef___init_astdclassdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10, val_t p11, int* init_table);
   typedef void (*CLOS_OC_parser___parser_prod___AStdClassdef___init_astdclassdef_1_0)(struct stack_frame_t *);
   void OC_parser___parser_prod___AStdClassdef___init_astdclassdef_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
   typedef void (*OC_parser___parser_prod___AStdClassdef___init_astdclassdef_1_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
@@ -473,7 +495,7 @@ typedef void (*parser___parser_prod___AStdClassdef___init_astdclassdef_t)(val_t
   typedef void (*CLOS_OC_parser___parser_prod___AStdClassdef___init_astdclassdef_3_0)(struct stack_frame_t *);
   void OC_parser___parser_prod___AStdClassdef___init_astdclassdef_3(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
   typedef void (*OC_parser___parser_prod___AStdClassdef___init_astdclassdef_3_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
-val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9);
+val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10);
 void parser___parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AStdClassdef___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1);
@@ -569,9 +591,9 @@ val_t NEW_AEnumClasskind_parser___parser_nodes___ANode___init();
 void parser___parser_prod___AExternClasskind___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AExternClasskind___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AExternClasskind_parser___parser_prod___AExternClasskind___empty_init();
-void parser___parser_prod___AExternClasskind___init_aexternclasskind(val_t p0, val_t p1, int* init_table);
-typedef void (*parser___parser_prod___AExternClasskind___init_aexternclasskind_t)(val_t p0, val_t p1, int* init_table);
-val_t NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind(val_t p0);
+void parser___parser_prod___AExternClasskind___init_aexternclasskind(val_t p0, val_t p1, val_t p2, int* init_table);
+typedef void (*parser___parser_prod___AExternClasskind___init_aexternclasskind_t)(val_t p0, val_t p1, val_t p2, int* init_table);
+val_t NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind(val_t p0, val_t p1);
 void parser___parser_prod___AExternClasskind___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AExternClasskind___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AExternClasskind___visit_all(val_t p0, val_t p1);
@@ -580,9 +602,9 @@ val_t NEW_AExternClasskind_parser___parser_nodes___ANode___init();
 void parser___parser_prod___AFormaldef___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AFormaldef___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AFormaldef_parser___parser_prod___AFormaldef___empty_init();
-void parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val_t p2, int* init_table);
-typedef void (*parser___parser_prod___AFormaldef___init_aformaldef_t)(val_t p0, val_t p1, val_t p2, int* init_table);
-val_t NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1);
+void parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
+typedef void (*parser___parser_prod___AFormaldef___init_aformaldef_t)(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
+val_t NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AFormaldef___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AFormaldef___visit_all(val_t p0, val_t p1);
@@ -602,9 +624,9 @@ val_t NEW_ASuperclass_parser___parser_nodes___ANode___init();
 void parser___parser_prod___AAttrPropdef___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AAttrPropdef___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___empty_init();
-void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10, int* init_table);
-typedef void (*parser___parser_prod___AAttrPropdef___init_aattrpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10, int* init_table);
-val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9);
+void parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10, val_t p11, int* init_table);
+typedef void (*parser___parser_prod___AAttrPropdef___init_aattrpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10, val_t p11, int* init_table);
+val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10);
 void parser___parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AAttrPropdef___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1);
@@ -625,9 +647,9 @@ val_t NEW_ADeferredMethPropdef_parser___parser_prod___AMethPropdef___empty_init(
 void parser___parser_prod___ADeferredMethPropdef___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___ADeferredMethPropdef___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___empty_init();
-void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table);
-typedef void (*parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table);
-val_t NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5);
+void parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table);
+typedef void (*parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table);
+val_t NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
 void parser___parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___ADeferredMethPropdef___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___ADeferredMethPropdef___visit_all(val_t p0, val_t p1);
@@ -664,9 +686,9 @@ val_t NEW_AConcreteMethPropdef_parser___parser_prod___AMethPropdef___empty_init(
 void parser___parser_prod___AConcreteMethPropdef___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AConcreteMethPropdef___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___empty_init();
-void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table);
-typedef void (*parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table);
-val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+void parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, int* init_table);
+typedef void (*parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, int* init_table);
+val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
 void parser___parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AConcreteMethPropdef___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AConcreteMethPropdef___visit_all(val_t p0, val_t p1);
@@ -677,16 +699,16 @@ val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___emp
 void parser___parser_prod___AConcreteInitPropdef___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AConcreteInitPropdef___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___empty_init();
-void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table);
-typedef void (*parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table);
-val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+void parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, int* init_table);
+typedef void (*parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, int* init_table);
+val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
 void parser___parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AConcreteInitPropdef___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1);
 typedef void (*parser___parser_prod___AConcreteInitPropdef___visit_all_t)(val_t p0, val_t p1);
 val_t NEW_AConcreteInitPropdef_parser___parser_nodes___ANode___init();
 val_t NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___empty_init();
-val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
 val_t NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 val_t NEW_AExternInitPropdef_parser___parser_prod___AMethPropdef___empty_init();
 void parser___parser_prod___AExternInitPropdef___empty_init(val_t p0, int* init_table);
@@ -714,14 +736,14 @@ void parser___parser_prod___AMainMethPropdef___visit_all(val_t p0, val_t p1);
 typedef void (*parser___parser_prod___AMainMethPropdef___visit_all_t)(val_t p0, val_t p1);
 val_t NEW_AMainMethPropdef_parser___parser_nodes___ANode___init();
 val_t NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___empty_init();
-val_t NEW_AMainMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+val_t NEW_AMainMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
 val_t NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 void parser___parser_prod___ATypePropdef___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___ATypePropdef___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___empty_init();
-void parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table);
-typedef void (*parser___parser_prod___ATypePropdef___init_atypepropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table);
-val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5);
+void parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table);
+typedef void (*parser___parser_prod___ATypePropdef___init_atypepropdef_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table);
+val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
 void parser___parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___ATypePropdef___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___ATypePropdef___visit_all(val_t p0, val_t p1);
@@ -973,9 +995,9 @@ val_t NEW_ASignature_parser___parser_nodes___ANode___init();
 void parser___parser_prod___AParam___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AParam___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AParam_parser___parser_prod___AParam___empty_init();
-void parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
-typedef void (*parser___parser_prod___AParam___init_aparam_t)(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
-val_t NEW_AParam_parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2);
+void parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table);
+typedef void (*parser___parser_prod___AParam___init_aparam_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table);
+val_t NEW_AParam_parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, val_t p3);
 void parser___parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AParam___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AParam___visit_all(val_t p0, val_t p1);
@@ -995,12 +1017,12 @@ val_t NEW_AClosureDecl_parser___parser_nodes___ANode___init();
 void parser___parser_prod___AType___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AType___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AType_parser___parser_prod___AType___empty_init();
-void parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
-typedef void (*parser___parser_prod___AType___init_atype_t)(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
+void parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table);
+typedef void (*parser___parser_prod___AType___init_atype_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table);
   typedef void (*CLOS_OC_parser___parser_prod___AType___init_atype_1_0)(struct stack_frame_t *);
   void OC_parser___parser_prod___AType___init_atype_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
   typedef void (*OC_parser___parser_prod___AType___init_atype_1_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
-val_t NEW_AType_parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2);
+val_t NEW_AType_parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3);
 void parser___parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AType___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AType___visit_all(val_t p0, val_t p1);
@@ -1040,9 +1062,9 @@ val_t NEW_ABlockExpr_parser___parser_nodes___ANode___init();
 void parser___parser_prod___AVardeclExpr___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AVardeclExpr___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___empty_init();
-void parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table);
-typedef void (*parser___parser_prod___AVardeclExpr___init_avardeclexpr_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table);
-val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
+void parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table);
+typedef void (*parser___parser_prod___AVardeclExpr___init_avardeclexpr_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table);
+val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5);
 void parser___parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AVardeclExpr___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AVardeclExpr___visit_all(val_t p0, val_t p1);
@@ -1710,9 +1732,9 @@ val_t NEW_AVarReassignExpr_parser___parser_nodes___ANode___init();
 void parser___parser_prod___ARangeExpr___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___ARangeExpr___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_ARangeExpr_parser___parser_prod___ARangeExpr___empty_init();
-void parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2, int* init_table);
-typedef void (*parser___parser_prod___ARangeExpr___init_arangeexpr_t)(val_t p0, val_t p1, val_t p2, int* init_table);
-val_t NEW_ARangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1);
+void parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
+typedef void (*parser___parser_prod___ARangeExpr___init_arangeexpr_t)(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
+val_t NEW_ARangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___ARangeExpr___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___ARangeExpr___visit_all(val_t p0, val_t p1);
@@ -1722,34 +1744,34 @@ val_t NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___empty_init();
 void parser___parser_prod___ACrangeExpr___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___ACrangeExpr___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___empty_init();
-void parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table);
-typedef void (*parser___parser_prod___ACrangeExpr___init_acrangeexpr_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table);
-val_t NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, val_t p2, val_t p3);
+void parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table);
+typedef void (*parser___parser_prod___ACrangeExpr___init_acrangeexpr_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table);
+val_t NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 void parser___parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___ACrangeExpr___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___ACrangeExpr___visit_all(val_t p0, val_t p1);
 typedef void (*parser___parser_prod___ACrangeExpr___visit_all_t)(val_t p0, val_t p1);
 val_t NEW_ACrangeExpr_parser___parser_nodes___ANode___init();
-val_t NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1);
+val_t NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2);
 val_t NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___empty_init();
 void parser___parser_prod___AOrangeExpr___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AOrangeExpr___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___empty_init();
-void parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table);
-typedef void (*parser___parser_prod___AOrangeExpr___init_aorangeexpr_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table);
-val_t NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, val_t p2, val_t p3);
+void parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table);
+typedef void (*parser___parser_prod___AOrangeExpr___init_aorangeexpr_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table);
+val_t NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 void parser___parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AOrangeExpr___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AOrangeExpr___visit_all(val_t p0, val_t p1);
 typedef void (*parser___parser_prod___AOrangeExpr___visit_all_t)(val_t p0, val_t p1);
 val_t NEW_AOrangeExpr_parser___parser_nodes___ANode___init();
-val_t NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1);
+val_t NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AArrayExpr___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AArrayExpr___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AArrayExpr_parser___parser_prod___AArrayExpr___empty_init();
-void parser___parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1, int* init_table);
-typedef void (*parser___parser_prod___AArrayExpr___init_aarrayexpr_t)(val_t p0, val_t p1, int* init_table);
-val_t NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr(val_t p0);
+void parser___parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1, val_t p2, int* init_table);
+typedef void (*parser___parser_prod___AArrayExpr___init_aarrayexpr_t)(val_t p0, val_t p1, val_t p2, int* init_table);
+val_t NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1);
 void parser___parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AArrayExpr___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AArrayExpr___visit_all(val_t p0, val_t p1);
@@ -1758,9 +1780,9 @@ val_t NEW_AArrayExpr_parser___parser_nodes___ANode___init();
 void parser___parser_prod___ASelfExpr___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___ASelfExpr___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___empty_init();
-void parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1, int* init_table);
-typedef void (*parser___parser_prod___ASelfExpr___init_aselfexpr_t)(val_t p0, val_t p1, int* init_table);
-val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0);
+void parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1, val_t p2, int* init_table);
+typedef void (*parser___parser_prod___ASelfExpr___init_aselfexpr_t)(val_t p0, val_t p1, val_t p2, int* init_table);
+val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1);
 void parser___parser_prod___ASelfExpr___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___ASelfExpr___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___ASelfExpr___visit_all(val_t p0, val_t p1);
@@ -1778,13 +1800,13 @@ typedef void (*parser___parser_prod___AImplicitSelfExpr___replace_child_t)(val_t
 void parser___parser_prod___AImplicitSelfExpr___visit_all(val_t p0, val_t p1);
 typedef void (*parser___parser_prod___AImplicitSelfExpr___visit_all_t)(val_t p0, val_t p1);
 val_t NEW_AImplicitSelfExpr_parser___parser_nodes___ANode___init();
-val_t NEW_AImplicitSelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0);
+val_t NEW_AImplicitSelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1);
 void parser___parser_prod___ATrueExpr___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___ATrueExpr___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_ATrueExpr_parser___parser_prod___ATrueExpr___empty_init();
-void parser___parser_prod___ATrueExpr___init_atrueexpr(val_t p0, val_t p1, int* init_table);
-typedef void (*parser___parser_prod___ATrueExpr___init_atrueexpr_t)(val_t p0, val_t p1, int* init_table);
-val_t NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr(val_t p0);
+void parser___parser_prod___ATrueExpr___init_atrueexpr(val_t p0, val_t p1, val_t p2, int* init_table);
+typedef void (*parser___parser_prod___ATrueExpr___init_atrueexpr_t)(val_t p0, val_t p1, val_t p2, int* init_table);
+val_t NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr(val_t p0, val_t p1);
 void parser___parser_prod___ATrueExpr___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___ATrueExpr___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___ATrueExpr___visit_all(val_t p0, val_t p1);
@@ -1793,9 +1815,9 @@ val_t NEW_ATrueExpr_parser___parser_nodes___ANode___init();
 void parser___parser_prod___AFalseExpr___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AFalseExpr___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AFalseExpr_parser___parser_prod___AFalseExpr___empty_init();
-void parser___parser_prod___AFalseExpr___init_afalseexpr(val_t p0, val_t p1, int* init_table);
-typedef void (*parser___parser_prod___AFalseExpr___init_afalseexpr_t)(val_t p0, val_t p1, int* init_table);
-val_t NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr(val_t p0);
+void parser___parser_prod___AFalseExpr___init_afalseexpr(val_t p0, val_t p1, val_t p2, int* init_table);
+typedef void (*parser___parser_prod___AFalseExpr___init_afalseexpr_t)(val_t p0, val_t p1, val_t p2, int* init_table);
+val_t NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr(val_t p0, val_t p1);
 void parser___parser_prod___AFalseExpr___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AFalseExpr___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AFalseExpr___visit_all(val_t p0, val_t p1);
@@ -1804,9 +1826,9 @@ val_t NEW_AFalseExpr_parser___parser_nodes___ANode___init();
 void parser___parser_prod___ANullExpr___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___ANullExpr___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_ANullExpr_parser___parser_prod___ANullExpr___empty_init();
-void parser___parser_prod___ANullExpr___init_anullexpr(val_t p0, val_t p1, int* init_table);
-typedef void (*parser___parser_prod___ANullExpr___init_anullexpr_t)(val_t p0, val_t p1, int* init_table);
-val_t NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr(val_t p0);
+void parser___parser_prod___ANullExpr___init_anullexpr(val_t p0, val_t p1, val_t p2, int* init_table);
+typedef void (*parser___parser_prod___ANullExpr___init_anullexpr_t)(val_t p0, val_t p1, val_t p2, int* init_table);
+val_t NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr(val_t p0, val_t p1);
 void parser___parser_prod___ANullExpr___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___ANullExpr___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___ANullExpr___visit_all(val_t p0, val_t p1);
@@ -1815,9 +1837,9 @@ val_t NEW_ANullExpr_parser___parser_nodes___ANode___init();
 void parser___parser_prod___AIntExpr___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AIntExpr___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___empty_init();
-void parser___parser_prod___AIntExpr___init_aintexpr(val_t p0, val_t p1, int* init_table);
-typedef void (*parser___parser_prod___AIntExpr___init_aintexpr_t)(val_t p0, val_t p1, int* init_table);
-val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(val_t p0);
+void parser___parser_prod___AIntExpr___init_aintexpr(val_t p0, val_t p1, val_t p2, int* init_table);
+typedef void (*parser___parser_prod___AIntExpr___init_aintexpr_t)(val_t p0, val_t p1, val_t p2, int* init_table);
+val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(val_t p0, val_t p1);
 void parser___parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AIntExpr___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AIntExpr___visit_all(val_t p0, val_t p1);
@@ -1826,9 +1848,9 @@ val_t NEW_AIntExpr_parser___parser_nodes___ANode___init();
 void parser___parser_prod___AFloatExpr___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AFloatExpr___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___empty_init();
-void parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0, val_t p1, int* init_table);
-typedef void (*parser___parser_prod___AFloatExpr___init_afloatexpr_t)(val_t p0, val_t p1, int* init_table);
-val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0);
+void parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0, val_t p1, val_t p2, int* init_table);
+typedef void (*parser___parser_prod___AFloatExpr___init_afloatexpr_t)(val_t p0, val_t p1, val_t p2, int* init_table);
+val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0, val_t p1);
 void parser___parser_prod___AFloatExpr___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AFloatExpr___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AFloatExpr___visit_all(val_t p0, val_t p1);
@@ -1837,9 +1859,9 @@ val_t NEW_AFloatExpr_parser___parser_nodes___ANode___init();
 void parser___parser_prod___ACharExpr___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___ACharExpr___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___empty_init();
-void parser___parser_prod___ACharExpr___init_acharexpr(val_t p0, val_t p1, int* init_table);
-typedef void (*parser___parser_prod___ACharExpr___init_acharexpr_t)(val_t p0, val_t p1, int* init_table);
-val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(val_t p0);
+void parser___parser_prod___ACharExpr___init_acharexpr(val_t p0, val_t p1, val_t p2, int* init_table);
+typedef void (*parser___parser_prod___ACharExpr___init_acharexpr_t)(val_t p0, val_t p1, val_t p2, int* init_table);
+val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(val_t p0, val_t p1);
 void parser___parser_prod___ACharExpr___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___ACharExpr___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___ACharExpr___visit_all(val_t p0, val_t p1);
@@ -1848,9 +1870,9 @@ val_t NEW_ACharExpr_parser___parser_nodes___ANode___init();
 void parser___parser_prod___AStringExpr___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AStringExpr___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AStringExpr_parser___parser_prod___AStringExpr___empty_init();
-void parser___parser_prod___AStringExpr___init_astringexpr(val_t p0, val_t p1, int* init_table);
-typedef void (*parser___parser_prod___AStringExpr___init_astringexpr_t)(val_t p0, val_t p1, int* init_table);
-val_t NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr(val_t p0);
+void parser___parser_prod___AStringExpr___init_astringexpr(val_t p0, val_t p1, val_t p2, int* init_table);
+typedef void (*parser___parser_prod___AStringExpr___init_astringexpr_t)(val_t p0, val_t p1, val_t p2, int* init_table);
+val_t NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr(val_t p0, val_t p1);
 void parser___parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AStringExpr___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AStringExpr___visit_all(val_t p0, val_t p1);
@@ -1892,12 +1914,12 @@ val_t NEW_AEndStringExpr_parser___parser_nodes___ANode___init();
 void parser___parser_prod___ASuperstringExpr___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___ASuperstringExpr___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___empty_init();
-void parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, val_t p1, int* init_table);
-typedef void (*parser___parser_prod___ASuperstringExpr___init_asuperstringexpr_t)(val_t p0, val_t p1, int* init_table);
+void parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, val_t p1, val_t p2, int* init_table);
+typedef void (*parser___parser_prod___ASuperstringExpr___init_asuperstringexpr_t)(val_t p0, val_t p1, val_t p2, int* init_table);
   typedef void (*CLOS_OC_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr_1_0)(struct stack_frame_t *);
   void OC_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
   typedef void (*OC_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr_1_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
-val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0);
+val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, val_t p1);
 void parser___parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___ASuperstringExpr___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___ASuperstringExpr___visit_all(val_t p0, val_t p1);
@@ -1909,9 +1931,9 @@ val_t NEW_ASuperstringExpr_parser___parser_nodes___ANode___init();
 void parser___parser_prod___AParExpr___empty_init(val_t p0, int* init_table);
 typedef void (*parser___parser_prod___AParExpr___empty_init_t)(val_t p0, int* init_table);
 val_t NEW_AParExpr_parser___parser_prod___AParExpr___empty_init();
-void parser___parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
-typedef void (*parser___parser_prod___AParExpr___init_aparexpr_t)(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
-val_t NEW_AParExpr_parser___parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, val_t p2);
+void parser___parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table);
+typedef void (*parser___parser_prod___AParExpr___init_aparexpr_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table);
+val_t NEW_AParExpr_parser___parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, val_t p2, val_t p3);
 void parser___parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___AParExpr___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___AParExpr___visit_all(val_t p0, val_t p1);
@@ -2265,6 +2287,139 @@ typedef void (*parser___parser_prod___ADoc___visit_all_t)(val_t p0, val_t p1);
   void OC_parser___parser_prod___ADoc___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
   typedef void (*OC_parser___parser_prod___ADoc___visit_all_1_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
 val_t NEW_ADoc_parser___parser_nodes___ANode___init();
+void parser___parser_prod___AAnnotations___empty_init(val_t p0, int* init_table);
+typedef void (*parser___parser_prod___AAnnotations___empty_init_t)(val_t p0, int* init_table);
+val_t NEW_AAnnotations_parser___parser_prod___AAnnotations___empty_init();
+void parser___parser_prod___AAnnotations___init_aannotations(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table);
+typedef void (*parser___parser_prod___AAnnotations___init_aannotations_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table);
+  typedef void (*CLOS_OC_parser___parser_prod___AAnnotations___init_aannotations_1_0)(struct stack_frame_t *);
+  void OC_parser___parser_prod___AAnnotations___init_aannotations_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
+  typedef void (*OC_parser___parser_prod___AAnnotations___init_aannotations_1_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
+val_t NEW_AAnnotations_parser___parser_prod___AAnnotations___init_aannotations(val_t p0, val_t p1, val_t p2, val_t p3);
+void parser___parser_prod___AAnnotations___replace_child(val_t p0, val_t p1, val_t p2);
+typedef void (*parser___parser_prod___AAnnotations___replace_child_t)(val_t p0, val_t p1, val_t p2);
+void parser___parser_prod___AAnnotations___visit_all(val_t p0, val_t p1);
+typedef void (*parser___parser_prod___AAnnotations___visit_all_t)(val_t p0, val_t p1);
+  typedef void (*CLOS_OC_parser___parser_prod___AAnnotations___visit_all_1_0)(struct stack_frame_t *);
+  void OC_parser___parser_prod___AAnnotations___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
+  typedef void (*OC_parser___parser_prod___AAnnotations___visit_all_1_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
+val_t NEW_AAnnotations_parser___parser_nodes___ANode___init();
+void parser___parser_prod___AAnnotation___empty_init(val_t p0, int* init_table);
+typedef void (*parser___parser_prod___AAnnotation___empty_init_t)(val_t p0, int* init_table);
+val_t NEW_AAnnotation_parser___parser_prod___AAnnotation___empty_init();
+void parser___parser_prod___AAnnotation___init_aannotation(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table);
+typedef void (*parser___parser_prod___AAnnotation___init_aannotation_t)(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table);
+  typedef void (*CLOS_OC_parser___parser_prod___AAnnotation___init_aannotation_1_0)(struct stack_frame_t *);
+  void OC_parser___parser_prod___AAnnotation___init_aannotation_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
+  typedef void (*OC_parser___parser_prod___AAnnotation___init_aannotation_1_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
+val_t NEW_AAnnotation_parser___parser_prod___AAnnotation___init_aannotation(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
+void parser___parser_prod___AAnnotation___replace_child(val_t p0, val_t p1, val_t p2);
+typedef void (*parser___parser_prod___AAnnotation___replace_child_t)(val_t p0, val_t p1, val_t p2);
+void parser___parser_prod___AAnnotation___visit_all(val_t p0, val_t p1);
+typedef void (*parser___parser_prod___AAnnotation___visit_all_t)(val_t p0, val_t p1);
+  typedef void (*CLOS_OC_parser___parser_prod___AAnnotation___visit_all_1_0)(struct stack_frame_t *);
+  void OC_parser___parser_prod___AAnnotation___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
+  typedef void (*OC_parser___parser_prod___AAnnotation___visit_all_1_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
+val_t NEW_AAnnotation_parser___parser_nodes___ANode___init();
+void parser___parser_prod___ATypeAtArg___empty_init(val_t p0, int* init_table);
+typedef void (*parser___parser_prod___ATypeAtArg___empty_init_t)(val_t p0, int* init_table);
+val_t NEW_ATypeAtArg_parser___parser_prod___ATypeAtArg___empty_init();
+void parser___parser_prod___ATypeAtArg___init_atypeatarg(val_t p0, val_t p1, int* init_table);
+typedef void (*parser___parser_prod___ATypeAtArg___init_atypeatarg_t)(val_t p0, val_t p1, int* init_table);
+val_t NEW_ATypeAtArg_parser___parser_prod___ATypeAtArg___init_atypeatarg(val_t p0);
+void parser___parser_prod___ATypeAtArg___replace_child(val_t p0, val_t p1, val_t p2);
+typedef void (*parser___parser_prod___ATypeAtArg___replace_child_t)(val_t p0, val_t p1, val_t p2);
+void parser___parser_prod___ATypeAtArg___visit_all(val_t p0, val_t p1);
+typedef void (*parser___parser_prod___ATypeAtArg___visit_all_t)(val_t p0, val_t p1);
+val_t NEW_ATypeAtArg_parser___parser_nodes___ANode___init();
+void parser___parser_prod___AExprAtArg___empty_init(val_t p0, int* init_table);
+typedef void (*parser___parser_prod___AExprAtArg___empty_init_t)(val_t p0, int* init_table);
+val_t NEW_AExprAtArg_parser___parser_prod___AExprAtArg___empty_init();
+void parser___parser_prod___AExprAtArg___init_aexpratarg(val_t p0, val_t p1, int* init_table);
+typedef void (*parser___parser_prod___AExprAtArg___init_aexpratarg_t)(val_t p0, val_t p1, int* init_table);
+val_t NEW_AExprAtArg_parser___parser_prod___AExprAtArg___init_aexpratarg(val_t p0);
+void parser___parser_prod___AExprAtArg___replace_child(val_t p0, val_t p1, val_t p2);
+typedef void (*parser___parser_prod___AExprAtArg___replace_child_t)(val_t p0, val_t p1, val_t p2);
+void parser___parser_prod___AExprAtArg___visit_all(val_t p0, val_t p1);
+typedef void (*parser___parser_prod___AExprAtArg___visit_all_t)(val_t p0, val_t p1);
+val_t NEW_AExprAtArg_parser___parser_nodes___ANode___init();
+void parser___parser_prod___AAtAtArg___empty_init(val_t p0, int* init_table);
+typedef void (*parser___parser_prod___AAtAtArg___empty_init_t)(val_t p0, int* init_table);
+val_t NEW_AAtAtArg_parser___parser_prod___AAtAtArg___empty_init();
+void parser___parser_prod___AAtAtArg___init_aatatarg(val_t p0, val_t p1, int* init_table);
+typedef void (*parser___parser_prod___AAtAtArg___init_aatatarg_t)(val_t p0, val_t p1, int* init_table);
+val_t NEW_AAtAtArg_parser___parser_prod___AAtAtArg___init_aatatarg(val_t p0);
+void parser___parser_prod___AAtAtArg___replace_child(val_t p0, val_t p1, val_t p2);
+typedef void (*parser___parser_prod___AAtAtArg___replace_child_t)(val_t p0, val_t p1, val_t p2);
+void parser___parser_prod___AAtAtArg___visit_all(val_t p0, val_t p1);
+typedef void (*parser___parser_prod___AAtAtArg___visit_all_t)(val_t p0, val_t p1);
+val_t NEW_AAtAtArg_parser___parser_nodes___ANode___init();
+void parser___parser_prod___AIdAtid___empty_init(val_t p0, int* init_table);
+typedef void (*parser___parser_prod___AIdAtid___empty_init_t)(val_t p0, int* init_table);
+val_t NEW_AIdAtid_parser___parser_prod___AIdAtid___empty_init();
+void parser___parser_prod___AIdAtid___init_aidatid(val_t p0, val_t p1, int* init_table);
+typedef void (*parser___parser_prod___AIdAtid___init_aidatid_t)(val_t p0, val_t p1, int* init_table);
+val_t NEW_AIdAtid_parser___parser_prod___AIdAtid___init_aidatid(val_t p0);
+void parser___parser_prod___AIdAtid___replace_child(val_t p0, val_t p1, val_t p2);
+typedef void (*parser___parser_prod___AIdAtid___replace_child_t)(val_t p0, val_t p1, val_t p2);
+void parser___parser_prod___AIdAtid___visit_all(val_t p0, val_t p1);
+typedef void (*parser___parser_prod___AIdAtid___visit_all_t)(val_t p0, val_t p1);
+val_t NEW_AIdAtid_parser___parser_nodes___ANode___init();
+void parser___parser_prod___AKwexternAtid___empty_init(val_t p0, int* init_table);
+typedef void (*parser___parser_prod___AKwexternAtid___empty_init_t)(val_t p0, int* init_table);
+val_t NEW_AKwexternAtid_parser___parser_prod___AKwexternAtid___empty_init();
+void parser___parser_prod___AKwexternAtid___init_akwexternatid(val_t p0, val_t p1, int* init_table);
+typedef void (*parser___parser_prod___AKwexternAtid___init_akwexternatid_t)(val_t p0, val_t p1, int* init_table);
+val_t NEW_AKwexternAtid_parser___parser_prod___AKwexternAtid___init_akwexternatid(val_t p0);
+void parser___parser_prod___AKwexternAtid___replace_child(val_t p0, val_t p1, val_t p2);
+typedef void (*parser___parser_prod___AKwexternAtid___replace_child_t)(val_t p0, val_t p1, val_t p2);
+void parser___parser_prod___AKwexternAtid___visit_all(val_t p0, val_t p1);
+typedef void (*parser___parser_prod___AKwexternAtid___visit_all_t)(val_t p0, val_t p1);
+val_t NEW_AKwexternAtid_parser___parser_nodes___ANode___init();
+void parser___parser_prod___AKwinternAtid___empty_init(val_t p0, int* init_table);
+typedef void (*parser___parser_prod___AKwinternAtid___empty_init_t)(val_t p0, int* init_table);
+val_t NEW_AKwinternAtid_parser___parser_prod___AKwinternAtid___empty_init();
+void parser___parser_prod___AKwinternAtid___init_akwinternatid(val_t p0, val_t p1, int* init_table);
+typedef void (*parser___parser_prod___AKwinternAtid___init_akwinternatid_t)(val_t p0, val_t p1, int* init_table);
+val_t NEW_AKwinternAtid_parser___parser_prod___AKwinternAtid___init_akwinternatid(val_t p0);
+void parser___parser_prod___AKwinternAtid___replace_child(val_t p0, val_t p1, val_t p2);
+typedef void (*parser___parser_prod___AKwinternAtid___replace_child_t)(val_t p0, val_t p1, val_t p2);
+void parser___parser_prod___AKwinternAtid___visit_all(val_t p0, val_t p1);
+typedef void (*parser___parser_prod___AKwinternAtid___visit_all_t)(val_t p0, val_t p1);
+val_t NEW_AKwinternAtid_parser___parser_nodes___ANode___init();
+void parser___parser_prod___AKwreadableAtid___empty_init(val_t p0, int* init_table);
+typedef void (*parser___parser_prod___AKwreadableAtid___empty_init_t)(val_t p0, int* init_table);
+val_t NEW_AKwreadableAtid_parser___parser_prod___AKwreadableAtid___empty_init();
+void parser___parser_prod___AKwreadableAtid___init_akwreadableatid(val_t p0, val_t p1, int* init_table);
+typedef void (*parser___parser_prod___AKwreadableAtid___init_akwreadableatid_t)(val_t p0, val_t p1, int* init_table);
+val_t NEW_AKwreadableAtid_parser___parser_prod___AKwreadableAtid___init_akwreadableatid(val_t p0);
+void parser___parser_prod___AKwreadableAtid___replace_child(val_t p0, val_t p1, val_t p2);
+typedef void (*parser___parser_prod___AKwreadableAtid___replace_child_t)(val_t p0, val_t p1, val_t p2);
+void parser___parser_prod___AKwreadableAtid___visit_all(val_t p0, val_t p1);
+typedef void (*parser___parser_prod___AKwreadableAtid___visit_all_t)(val_t p0, val_t p1);
+val_t NEW_AKwreadableAtid_parser___parser_nodes___ANode___init();
+void parser___parser_prod___AKwwritableAtid___empty_init(val_t p0, int* init_table);
+typedef void (*parser___parser_prod___AKwwritableAtid___empty_init_t)(val_t p0, int* init_table);
+val_t NEW_AKwwritableAtid_parser___parser_prod___AKwwritableAtid___empty_init();
+void parser___parser_prod___AKwwritableAtid___init_akwwritableatid(val_t p0, val_t p1, int* init_table);
+typedef void (*parser___parser_prod___AKwwritableAtid___init_akwwritableatid_t)(val_t p0, val_t p1, int* init_table);
+val_t NEW_AKwwritableAtid_parser___parser_prod___AKwwritableAtid___init_akwwritableatid(val_t p0);
+void parser___parser_prod___AKwwritableAtid___replace_child(val_t p0, val_t p1, val_t p2);
+typedef void (*parser___parser_prod___AKwwritableAtid___replace_child_t)(val_t p0, val_t p1, val_t p2);
+void parser___parser_prod___AKwwritableAtid___visit_all(val_t p0, val_t p1);
+typedef void (*parser___parser_prod___AKwwritableAtid___visit_all_t)(val_t p0, val_t p1);
+val_t NEW_AKwwritableAtid_parser___parser_nodes___ANode___init();
+void parser___parser_prod___AKwimportAtid___empty_init(val_t p0, int* init_table);
+typedef void (*parser___parser_prod___AKwimportAtid___empty_init_t)(val_t p0, int* init_table);
+val_t NEW_AKwimportAtid_parser___parser_prod___AKwimportAtid___empty_init();
+void parser___parser_prod___AKwimportAtid___init_akwimportatid(val_t p0, val_t p1, int* init_table);
+typedef void (*parser___parser_prod___AKwimportAtid___init_akwimportatid_t)(val_t p0, val_t p1, int* init_table);
+val_t NEW_AKwimportAtid_parser___parser_prod___AKwimportAtid___init_akwimportatid(val_t p0);
+void parser___parser_prod___AKwimportAtid___replace_child(val_t p0, val_t p1, val_t p2);
+typedef void (*parser___parser_prod___AKwimportAtid___replace_child_t)(val_t p0, val_t p1, val_t p2);
+void parser___parser_prod___AKwimportAtid___visit_all(val_t p0, val_t p1);
+typedef void (*parser___parser_prod___AKwimportAtid___visit_all_t)(val_t p0, val_t p1);
+val_t NEW_AKwimportAtid_parser___parser_nodes___ANode___init();
 void parser___parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2);
 typedef void (*parser___parser_prod___Start___replace_child_t)(val_t p0, val_t p1, val_t p2);
 void parser___parser_prod___Start___visit_all(val_t p0, val_t p1);
index 41405c9..3981125 100644 (file)
@@ -380,7 +380,7 @@ val_t primitive_info___MMLocalClass___primitive_ctypes(val_t p0){
       if (UNTAG_Bool(REGB4)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB3)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label13;
@@ -433,7 +433,7 @@ val_t primitive_info___MMLocalClass___primitive_ctypes(val_t p0){
       if (UNTAG_Bool(REGB4)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB3)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label14;
@@ -479,7 +479,7 @@ val_t primitive_info___MMLocalClass___primitive_ctypes(val_t p0){
       if (UNTAG_Bool(REGB3)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB2)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label15;
index 5a62291..331bc58 100644 (file)
@@ -239,7 +239,7 @@ void program___Program___finish_processing_classes(val_t p0){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)];
       /* program.nit:62 */
       CALL_metamodel___inheritance___MMLocalClass___compute_ancestors(fra.me.REG[2])(fra.me.REG[2]);
@@ -358,14 +358,14 @@ void program___Program___compute_main_method(val_t p0){
 }
 static const char LOCATE_program___Program___generate_allocation_iroutines[] = "program::Program::generate_allocation_iroutines";
 void program___Program___generate_allocation_iroutines(val_t p0){
-  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 tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_program;
   fra.me.line = 80;
   fra.me.meth = LOCATE_program___Program___generate_allocation_iroutines;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
@@ -373,6 +373,7 @@ void program___Program___generate_allocation_iroutines(val_t p0){
   fra.me.REG[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;
   /* program.nit:80 */
   fra.me.REG[1] = fra.me.REG[0];
@@ -384,9 +385,10 @@ void program___Program___generate_allocation_iroutines(val_t p0){
   return;
 }
   void OC_program___Program___generate_allocation_iroutines_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
     val_t REGB0;
     val_t REGB1;
+    val_t REGB2;
     fun_t CREG[1];
     val_t tmp;
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
@@ -394,10 +396,12 @@ void program___Program___generate_allocation_iroutines(val_t p0){
     fra.me.line = 0;
     fra.me.meth = LOCATE_program___Program___generate_allocation_iroutines;
     fra.me.has_broke = 0;
-    fra.me.REG_size = 2;
+    fra.me.REG_size = 4;
     fra.me.nitni_local_ref_head = NULL;
     fra.me.REG[0] = NIT_NULL;
     fra.me.REG[1] = NIT_NULL;
+    fra.me.REG[2] = NIT_NULL;
+    fra.me.REG[3] = NIT_NULL;
     fra.me.closure_ctx = closctx_param;
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
@@ -448,127 +452,189 @@ void program___Program___generate_allocation_iroutines(val_t p0){
       fra.me.REG[1] = NEW_ICodeBuilder_icode___icode_builder___ICodeBuilder___init(fra.me.REG[1], fra.me.REG[0]);
       closctx->REG[5] = fra.me.REG[1];
       /* program.nit:94 */
-      fra.me.REG[1] = CALL_metamodel___abstractmetamodel___MMLocalClass___global_properties(closctx->REG[2])(closctx->REG[2]);
-      CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], closctx, ((fun_t)OC_program___Program___generate_allocation_iroutines_3));
-      /* program.nit:107 */
+      fra.me.REG[1] = CALL_metamodel___abstractmetamodel___MMLocalClass___che(closctx->REG[2])(closctx->REG[2]);
+      fra.me.REG[1] = CALL_metamodel___partial_order___PartialOrderElement___linear_extension(fra.me.REG[1])(fra.me.REG[1]);
+      fra.me.REG[1] = CALL_standard___collection___array___AbstractArrayRead___reversed(fra.me.REG[1])(fra.me.REG[1]);
+      /* ../lib/standard/collection/array.nit:269 */
+      REGB0 = TAG_Int(0);
+      /* ../lib/standard/collection/array.nit:270 */
+      REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
+      }
+      REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
+      /* ../lib/standard/collection/array.nit:271 */
+      fra.me.REG[2] = ATTR_standard___collection___array___Array____items(fra.me.REG[1]);
+      /* ../lib/standard/collection/array.nit:272 */
+      while(1) {
+        /* ../lib/standard/collection/array.nit:24 */
+        REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
+        if (UNTAG_Bool(REGB1)) {
+        } else {
+          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+        }
+        REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
+        REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+        if (UNTAG_Bool(REGB2)) {
+        } else {
+          nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+        }
+        /* ../lib/standard/kernel.nit:235 */
+        REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+        /* ../lib/standard/collection/array.nit:272 */
+        if (UNTAG_Bool(REGB1)) {
+          /* ../lib/standard/collection/array.nit:273 */
+          REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB1)) {
+            nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
+          }
+          /* ../lib/standard/collection/array.nit:724 */
+          fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
+          /* program.nit:94 */
+          closctx->REG[6] = fra.me.REG[3];
+          /* program.nit:95 */
+          fra.me.REG[3] = CALL_metamodel___abstractmetamodel___MMLocalClass___global_properties(closctx->REG[6])(closctx->REG[6]);
+          CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], closctx, ((fun_t)OC_program___Program___generate_allocation_iroutines_3));
+          /* ../lib/standard/collection/array.nit:274 */
+          REGB1 = TAG_Int(1);
+          /* ../lib/standard/kernel.nit:238 */
+          REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+          /* ../lib/standard/collection/array.nit:274 */
+          REGB0 = REGB1;
+        } else {
+          /* ../lib/standard/collection/array.nit:272 */
+          goto label5;
+        }
+      }
+      label5: while(0);
+      /* program.nit:110 */
       CALL_program___MMLocalClass___init_var_iroutine__eq(closctx->REG[2])(closctx->REG[2], fra.me.REG[0]);
-      /* program.nit:111 */
+      /* program.nit:114 */
       fra.me.REG[0] = CALL_metamodel___static_type___MMLocalClass___get_type(closctx->REG[2])(closctx->REG[2]);
       fra.me.REG[0] = NEW_IRegister_icode___icode_base___IRegister___init(fra.me.REG[0]);
       closctx->REG[5] = fra.me.REG[0];
-      /* program.nit:112 */
+      /* program.nit:115 */
       REGB0 = TAG_Int(1);
       fra.me.REG[0] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], closctx->REG[5]);
-      /* program.nit:113 */
+      /* program.nit:116 */
       fra.me.REG[0] = NEW_IRoutine_icode___icode_base___IRoutine___init(fra.me.REG[0], NIT_NULL);
-      /* program.nit:114 */
-      fra.me.REG[1] = CALL_program___Program___main_module(closctx->REG[1])(closctx->REG[1]);
-      fra.me.REG[1] = NEW_ICodeBuilder_icode___icode_builder___ICodeBuilder___init(fra.me.REG[1], fra.me.REG[0]);
-      closctx->REG[3] = fra.me.REG[1];
-      /* program.nit:115 */
-      fra.me.REG[1] = CALL_metamodel___abstractmetamodel___MMLocalClass___global_properties(closctx->REG[2])(closctx->REG[2]);
-      CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], closctx, ((fun_t)OC_program___Program___generate_allocation_iroutines_5));
-      /* program.nit:124 */
-      CALL_program___MMLocalClass___checknew_iroutine__eq(closctx->REG[2])(closctx->REG[2], fra.me.REG[0]);
+      /* program.nit:117 */
+      fra.me.REG[2] = CALL_program___Program___main_module(closctx->REG[1])(closctx->REG[1]);
+      fra.me.REG[2] = NEW_ICodeBuilder_icode___icode_builder___ICodeBuilder___init(fra.me.REG[2], fra.me.REG[0]);
+      closctx->REG[3] = fra.me.REG[2];
+      /* program.nit:118 */
+      fra.me.REG[2] = CALL_metamodel___abstractmetamodel___MMLocalClass___global_properties(closctx->REG[2])(closctx->REG[2]);
+      CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], closctx, ((fun_t)OC_program___Program___generate_allocation_iroutines_6));
       /* program.nit:127 */
+      CALL_program___MMLocalClass___checknew_iroutine__eq(closctx->REG[2])(closctx->REG[2], fra.me.REG[0]);
+      /* program.nit:130 */
       fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMLocalClass___global_properties(closctx->REG[2])(closctx->REG[2]);
-      CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], closctx, ((fun_t)OC_program___Program___generate_allocation_iroutines_7));
+      CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], closctx, ((fun_t)OC_program___Program___generate_allocation_iroutines_8));
     }
     label2: while(0);
     stack_frame_head = fra.me.prev;
     return;
   }
-      void OC_program___Program___generate_allocation_iroutines_3(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
-        struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-        val_t REGB0;
-        val_t REGB1;
-        fun_t CREG[1];
-        val_t tmp;
-        fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-        fra.me.file = LOCATE_program;
-        fra.me.line = 0;
-        fra.me.meth = LOCATE_program___Program___generate_allocation_iroutines;
-        fra.me.has_broke = 0;
-        fra.me.REG_size = 2;
-        fra.me.nitni_local_ref_head = NULL;
-        fra.me.REG[0] = NIT_NULL;
-        fra.me.REG[1] = NIT_NULL;
-        fra.me.closure_ctx = closctx_param;
-        fra.me.closure_funs = CREG;
-        fra.me.REG[0] = p0;
-        CREG[0] = clos_fun0;
-        /* program.nit:95 */
-        fra.me.REG[1] = CALL_metamodel___abstractmetamodel___MMGlobalProperty___intro(fra.me.REG[0])(fra.me.REG[0]);
-        REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_metamodel___abstractmetamodel___MMAttribute, ID_metamodel___abstractmetamodel___MMAttribute)) /*cast MMAttribute*/;
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          goto label4;
-        }
-        /* program.nit:96 */
-        fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMLocalClass_____bra(closctx->REG[2])(closctx->REG[2], fra.me.REG[0]);
-        /* program.nit:97 */
-        fra.me.REG[1] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[0])(fra.me.REG[0]);
-        REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-        if (UNTAG_Bool(REGB0)) {
-          nit_abort("Reciever is null", NULL, LOCATE_program, 97);
-        }
-        fra.me.REG[1] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[1])(fra.me.REG[1]);
-        /* program.nit:98 */
-        REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_metamodel___abstractmetamodel___MMAttribute, ID_metamodel___abstractmetamodel___MMAttribute)) /*cast MMAttribute*/;
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-          if (UNTAG_Bool(REGB0)) {
-          } else {
-            REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-            if (UNTAG_Bool(REGB1)) {
-              REGB1 = TAG_Bool(0);
-              REGB0 = REGB1;
+          void OC_program___Program___generate_allocation_iroutines_3(struct stack_frame_t *closctx, val_t p0){
+            struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+            val_t REGB0;
+            val_t REGB1;
+            val_t tmp;
+            fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+            fra.me.file = LOCATE_program;
+            fra.me.line = 0;
+            fra.me.meth = LOCATE_program___Program___generate_allocation_iroutines;
+            fra.me.has_broke = 0;
+            fra.me.REG_size = 2;
+            fra.me.nitni_local_ref_head = NULL;
+            fra.me.REG[0] = NIT_NULL;
+            fra.me.REG[1] = NIT_NULL;
+            fra.me.REG[0] = p0;
+            /* program.nit:96 */
+            fra.me.REG[1] = CALL_metamodel___abstractmetamodel___MMGlobalProperty___local_class(fra.me.REG[0])(fra.me.REG[0]);
+            REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[1],closctx->REG[6]));
+            if (UNTAG_Bool(REGB0)) {
             } else {
-              REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+              REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], closctx->REG[6]);
               REGB0 = REGB1;
             }
-          }
-          REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        } else {
-          REGB1 = TAG_Bool(0);
-          REGB0 = REGB1;
-        }
-        if (UNTAG_Bool(REGB0)) {
-          /* program.nit:99 */
-          fra.me.REG[1] = CALL_icode___icode_base___MMAttribute___iroutine(fra.me.REG[0])(fra.me.REG[0]);
-          /* program.nit:100 */
-          REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-          if (UNTAG_Bool(REGB0)) {
-          } else {
-            REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-            if (UNTAG_Bool(REGB1)) {
-              REGB1 = TAG_Bool(0);
-              REGB0 = REGB1;
+            REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+            if (UNTAG_Bool(REGB0)) {
+              goto label4;
+            }
+            /* program.nit:97 */
+            fra.me.REG[1] = CALL_metamodel___abstractmetamodel___MMGlobalProperty___intro(fra.me.REG[0])(fra.me.REG[0]);
+            REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_metamodel___abstractmetamodel___MMAttribute, ID_metamodel___abstractmetamodel___MMAttribute)) /*cast MMAttribute*/;
+            REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+            if (UNTAG_Bool(REGB0)) {
+              goto label4;
+            }
+            /* program.nit:98 */
+            fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMLocalClass_____bra(closctx->REG[2])(closctx->REG[2], fra.me.REG[0]);
+            /* program.nit:99 */
+            fra.me.REG[1] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[0])(fra.me.REG[0]);
+            REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+            if (UNTAG_Bool(REGB0)) {
+              nit_abort("Reciever is null", NULL, LOCATE_program, 99);
+            }
+            fra.me.REG[1] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[1])(fra.me.REG[1]);
+            /* program.nit:100 */
+            REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_metamodel___abstractmetamodel___MMAttribute, ID_metamodel___abstractmetamodel___MMAttribute)) /*cast MMAttribute*/;
+            if (UNTAG_Bool(REGB0)) {
+              REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+              if (UNTAG_Bool(REGB0)) {
+              } else {
+               REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+               if (UNTAG_Bool(REGB1)) {
+               REGB1 = TAG_Bool(0);
+               REGB0 = REGB1;
+               } else {
+               REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+               REGB0 = REGB1;
+               }
+              }
+              REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
             } else {
-              REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+              REGB1 = TAG_Bool(0);
               REGB0 = REGB1;
             }
+            if (UNTAG_Bool(REGB0)) {
+              /* program.nit:101 */
+              fra.me.REG[1] = CALL_icode___icode_base___MMAttribute___iroutine(fra.me.REG[0])(fra.me.REG[0]);
+              /* program.nit:102 */
+              REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+              if (UNTAG_Bool(REGB0)) {
+              } else {
+               REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+               if (UNTAG_Bool(REGB1)) {
+               REGB1 = TAG_Bool(0);
+               REGB0 = REGB1;
+               } else {
+               REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+               REGB0 = REGB1;
+               }
+              }
+              if (UNTAG_Bool(REGB0)) {
+               goto label4;
+              }
+              /* program.nit:104 */
+              fra.me.REG[1] = CALL_icode___icode_tools___ICodeBuilder___inline_routine(closctx->REG[5])(closctx->REG[5], fra.me.REG[1], closctx->REG[4], NIT_NULL);
+              REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_icode___icode_base___IRegister, ID_icode___icode_base___IRegister)) /*cast IRegister*/;
+              if (UNTAG_Bool(REGB0)) {
+              } else {
+               nit_abort("Cast failed", NULL, LOCATE_program, 104);
+              }
+              /* program.nit:105 */
+              fra.me.REG[1] = NEW_IAttrWrite_icode___icode_base___IAttrWrite___init(fra.me.REG[0], closctx->REG[3], fra.me.REG[1]);
+              CALL_icode___icode_builder___ICodeBuilder___stmt(closctx->REG[5])(closctx->REG[5], fra.me.REG[1]);
+            }
+            label4: while(0);
+            stack_frame_head = fra.me.prev;
+            return;
           }
-          if (UNTAG_Bool(REGB0)) {
-            goto label4;
-          }
-          /* program.nit:102 */
-          fra.me.REG[1] = CALL_icode___icode_tools___ICodeBuilder___inline_routine(closctx->REG[5])(closctx->REG[5], fra.me.REG[1], closctx->REG[4], NIT_NULL);
-          REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_icode___icode_base___IRegister, ID_icode___icode_base___IRegister)) /*cast IRegister*/;
-          if (UNTAG_Bool(REGB0)) {
-          } else {
-            nit_abort("Cast failed", NULL, LOCATE_program, 102);
-          }
-          /* program.nit:103 */
-          fra.me.REG[1] = NEW_IAttrWrite_icode___icode_base___IAttrWrite___init(fra.me.REG[0], closctx->REG[3], fra.me.REG[1]);
-          CALL_icode___icode_builder___ICodeBuilder___stmt(closctx->REG[5])(closctx->REG[5], fra.me.REG[1]);
-        }
-        label4: while(0);
-        stack_frame_head = fra.me.prev;
-        return;
-      }
-      void OC_program___Program___generate_allocation_iroutines_5(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+      void OC_program___Program___generate_allocation_iroutines_6(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
         struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
         val_t REGB0;
         val_t REGB1;
@@ -587,23 +653,23 @@ void program___Program___generate_allocation_iroutines(val_t p0){
         fra.me.closure_funs = CREG;
         fra.me.REG[0] = p0;
         CREG[0] = clos_fun0;
-        /* program.nit:116 */
+        /* program.nit:119 */
         fra.me.REG[1] = CALL_metamodel___abstractmetamodel___MMGlobalProperty___intro(fra.me.REG[0])(fra.me.REG[0]);
         REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_metamodel___abstractmetamodel___MMAttribute, ID_metamodel___abstractmetamodel___MMAttribute)) /*cast MMAttribute*/;
         REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
         if (UNTAG_Bool(REGB0)) {
-          goto label6;
+          goto label7;
         }
-        /* program.nit:117 */
+        /* program.nit:120 */
         fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMLocalClass_____bra(closctx->REG[2])(closctx->REG[2], fra.me.REG[0]);
-        /* program.nit:118 */
+        /* program.nit:121 */
         fra.me.REG[1] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[0])(fra.me.REG[0]);
         REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
         if (UNTAG_Bool(REGB0)) {
-          nit_abort("Reciever is null", NULL, LOCATE_program, 118);
+          nit_abort("Reciever is null", NULL, LOCATE_program, 121);
         }
         fra.me.REG[1] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[1])(fra.me.REG[1]);
-        /* program.nit:119 */
+        /* program.nit:122 */
         REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_metamodel___abstractmetamodel___MMAttribute, ID_metamodel___abstractmetamodel___MMAttribute)) /*cast MMAttribute*/;
         if (UNTAG_Bool(REGB0)) {
           REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
@@ -626,7 +692,7 @@ void program___Program___generate_allocation_iroutines(val_t p0){
         if (UNTAG_Bool(REGB0)) {
           REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
           if (UNTAG_Bool(REGB0)) {
-            nit_abort("Reciever is null", NULL, LOCATE_program, 119);
+            nit_abort("Reciever is null", NULL, LOCATE_program, 122);
           }
           REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[1])(fra.me.REG[1]);
           REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
@@ -635,14 +701,14 @@ void program___Program___generate_allocation_iroutines(val_t p0){
           REGB0 = REGB1;
         }
         if (UNTAG_Bool(REGB0)) {
-          /* program.nit:120 */
+          /* program.nit:123 */
           CALL_icode___icode_builder___ICodeBuilder___add_attr_check(closctx->REG[3])(closctx->REG[3], fra.me.REG[0], closctx->REG[5]);
         }
-        label6: while(0);
+        label7: while(0);
         stack_frame_head = fra.me.prev;
         return;
       }
-      void OC_program___Program___generate_allocation_iroutines_7(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+      void OC_program___Program___generate_allocation_iroutines_8(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
         struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
         val_t REGB0;
         val_t REGB1;
@@ -667,31 +733,31 @@ void program___Program___generate_allocation_iroutines(val_t p0){
         fra.me.closure_funs = CREG;
         fra.me.REG[0] = p0;
         CREG[0] = clos_fun0;
-        /* program.nit:129 */
+        /* program.nit:132 */
         REGB0 = CALL_metamodel___abstractmetamodel___MMGlobalProperty___is_init_for(fra.me.REG[0])(fra.me.REG[0], closctx->REG[2]);
         REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
         if (UNTAG_Bool(REGB0)) {
-          goto label8;
+          goto label9;
         }
-        /* program.nit:130 */
+        /* program.nit:133 */
         fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMLocalClass_____bra(closctx->REG[2])(closctx->REG[2], fra.me.REG[0]);
-        /* program.nit:131 */
+        /* program.nit:134 */
         REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_metamodel___abstractmetamodel___MMMethod, ID_metamodel___abstractmetamodel___MMMethod)) /*cast MMMethod*/;
         if (UNTAG_Bool(REGB0)) {
         } else {
-          nit_abort("Assert failed", NULL, LOCATE_program, 131);
+          nit_abort("Assert failed", NULL, LOCATE_program, 134);
         }
-        /* program.nit:133 */
+        /* program.nit:136 */
         fra.me.REG[1] = CALL_metamodel___static_type___MMLocalClass___get_type(closctx->REG[2])(closctx->REG[2]);
         fra.me.REG[1] = NEW_IRegister_icode___icode_base___IRegister___init(fra.me.REG[1]);
-        /* program.nit:134 */
+        /* program.nit:137 */
         fra.me.REG[2] = NEW_Array_standard___collection___array___Array___init();
-        /* program.nit:135 */
+        /* program.nit:138 */
         REGB0 = TAG_Int(0);
         fra.me.REG[3] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[0])(fra.me.REG[0]);
         REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB1)) {
-          nit_abort("Reciever is null", NULL, LOCATE_program, 135);
+          nit_abort("Reciever is null", NULL, LOCATE_program, 138);
         }
         REGB1 = CALL_metamodel___static_type___MMSignature___arity(fra.me.REG[3])(fra.me.REG[3]);
         /* ../lib/standard/kernel.nit:355 */
@@ -705,12 +771,12 @@ void program___Program___generate_allocation_iroutines(val_t p0){
           REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
           /* ../lib/standard/kernel.nit:355 */
           if (UNTAG_Bool(REGB2)) {
-            /* program.nit:135 */
+            /* program.nit:138 */
             REGB2 = REGB0;
             fra.me.REG[3] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[0])(fra.me.REG[0]);
             REGB3 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
             if (UNTAG_Bool(REGB3)) {
-              nit_abort("Reciever is null", NULL, LOCATE_program, 135);
+              nit_abort("Reciever is null", NULL, LOCATE_program, 138);
             }
             fra.me.REG[3] = CALL_metamodel___static_type___MMSignature_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
             fra.me.REG[3] = NEW_IRegister_icode___icode_base___IRegister___init(fra.me.REG[3]);
@@ -723,51 +789,51 @@ void program___Program___generate_allocation_iroutines(val_t p0){
             REGB0 = REGB2;
           } else {
             /* ../lib/standard/kernel.nit:355 */
-            goto label9;
+            goto label10;
           }
         }
-        label9: while(0);
-        /* program.nit:136 */
+        label10: while(0);
+        /* program.nit:139 */
         fra.me.REG[3] = NEW_IRoutine_icode___icode_base___IRoutine___init(fra.me.REG[2], fra.me.REG[1]);
-        /* program.nit:137 */
+        /* program.nit:140 */
         fra.me.REG[4] = CALL_icode___icode_base___MMMethod___iroutine(fra.me.REG[0])(fra.me.REG[0]);
         REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
         if (UNTAG_Bool(REGB0)) {
-          nit_abort("Reciever is null", NULL, LOCATE_program, 137);
+          nit_abort("Reciever is null", NULL, LOCATE_program, 140);
         }
         fra.me.REG[4] = CALL_icode___icode_base___IRoutine___location(fra.me.REG[4])(fra.me.REG[4]);
         CALL_icode___icode_base___IRoutine___location__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
-        /* program.nit:138 */
+        /* program.nit:141 */
         fra.me.REG[4] = CALL_program___Program___main_module(closctx->REG[1])(closctx->REG[1]);
         fra.me.REG[4] = NEW_ICodeBuilder_icode___icode_builder___ICodeBuilder___init(fra.me.REG[4], fra.me.REG[3]);
-        /* program.nit:140 */
+        /* program.nit:143 */
         fra.me.REG[5] = CALL_metamodel___static_type___MMLocalClass___get_type(closctx->REG[2])(closctx->REG[2]);
         fra.me.REG[5] = NEW_IAllocateInstance_icode___icode_base___IAllocateInstance___init(fra.me.REG[5]);
-        /* program.nit:141 */
+        /* program.nit:144 */
         CALL_icode___icode_base___ICode___result__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[1]);
-        /* program.nit:142 */
+        /* program.nit:145 */
         CALL_icode___icode_builder___ICodeBuilder___stmt(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
-        /* program.nit:143 */
+        /* program.nit:146 */
         REGB0 = TAG_Int(1);
         fra.me.REG[5] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
         CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[1]);
-        /* program.nit:144 */
+        /* program.nit:147 */
         CALL_standard___collection___abstract_collection___SimpleCollection___add_all(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-        /* program.nit:146 */
+        /* program.nit:149 */
         fra.me.REG[2] = CALL_metamodel___static_type___MMLocalClass___get_type(closctx->REG[2])(closctx->REG[2]);
         fra.me.REG[2] = NEW_IInitAttributes_icode___icode_base___IInitAttributes___init(fra.me.REG[2], fra.me.REG[1]);
         CALL_icode___icode_builder___ICodeBuilder___stmt(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-        /* program.nit:147 */
+        /* program.nit:150 */
         fra.me.REG[5] = NEW_IStaticCall_icode___icode_base___IStaticCall___init(fra.me.REG[0], fra.me.REG[5]);
         CALL_icode___icode_builder___ICodeBuilder___stmt(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
-        /* program.nit:148 */
+        /* program.nit:151 */
         fra.me.REG[5] = CALL_metamodel___static_type___MMLocalClass___get_type(closctx->REG[2])(closctx->REG[2]);
         fra.me.REG[1] = NEW_ICheckInstance_icode___icode_base___ICheckInstance___init(fra.me.REG[5], fra.me.REG[1]);
         CALL_icode___icode_builder___ICodeBuilder___stmt(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-        /* program.nit:150 */
+        /* program.nit:153 */
         fra.me.REG[1] = CALL_program___MMLocalClass___new_instance_iroutine(closctx->REG[2])(closctx->REG[2]);
         CALL_standard___collection___abstract_collection___Map_____braeq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[3]);
-        label8: while(0);
+        label9: while(0);
         stack_frame_head = fra.me.prev;
         return;
       }
@@ -779,7 +845,7 @@ void program___Program___with_each_iroutines(val_t p0, struct stack_frame_t *clo
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_program;
-  fra.me.line = 156;
+  fra.me.line = 159;
   fra.me.meth = LOCATE_program___Program___with_each_iroutines;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -791,12 +857,12 @@ void program___Program___with_each_iroutines(val_t p0, struct stack_frame_t *clo
   fra.me.closure_funs = CREG;
   fra.me.REG[0] = p0;
   CREG[0] = clos_fun0;
-  /* program.nit:161 */
+  /* program.nit:164 */
   fra.me.REG[1] = CALL_program___Program___main_module(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[1] = CALL_metamodel___abstractmetamodel___MMModule___mhe(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_program, 161);
+    nit_abort("Reciever is null", NULL, LOCATE_program, 164);
   }
   fra.me.REG[1] = CALL_metamodel___partial_order___PartialOrderElement___greaters_and_self(fra.me.REG[1])(fra.me.REG[1]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_program___Program___with_each_iroutines_1));
@@ -825,7 +891,7 @@ void program___Program___with_each_iroutines(val_t p0, struct stack_frame_t *clo
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
     closctx->REG[1] = fra.me.REG[0];
-    /* program.nit:162 */
+    /* program.nit:165 */
     fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMModule___local_classes(closctx->REG[1])(closctx->REG[1]);
     CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], closctx, ((fun_t)OC_program___Program___with_each_iroutines_2));
     switch (closctx->has_broke) {
@@ -855,19 +921,19 @@ void program___Program___with_each_iroutines(val_t p0, struct stack_frame_t *clo
       fra.me.closure_funs = CREG;
       fra.me.REG[0] = p0;
       CREG[0] = clos_fun0;
-      /* program.nit:163 */
-      closctx->REG[2] = NIT_NULL;
       /* program.nit:166 */
+      closctx->REG[2] = NIT_NULL;
+      /* program.nit:169 */
       fra.me.REG[1] = CALL_metamodel___abstractmetamodel___MMLocalClass___local_local_properties(fra.me.REG[0])(fra.me.REG[0]);
       CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], closctx, ((fun_t)OC_program___Program___with_each_iroutines_3));
       switch (closctx->has_broke) {
         case 0: break;
         default: goto label5;
       }
-      /* program.nit:177 */
+      /* program.nit:180 */
       fra.me.REG[1] = CALL_program___MMLocalClass___init_var_iroutine(fra.me.REG[0])(fra.me.REG[0]);
       closctx->REG[2] = fra.me.REG[1];
-      /* program.nit:178 */
+      /* program.nit:181 */
       REGB0 = TAG_Bool(closctx->REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
@@ -882,17 +948,17 @@ void program___Program___with_each_iroutines(val_t p0, struct stack_frame_t *clo
       }
       REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
       if (UNTAG_Bool(REGB0)) {
-        /* program.nit:179 */
+        /* program.nit:182 */
         ((void (*)(struct stack_frame_t *, val_t, val_t))(closctx->closure_funs[0]))(closctx->closure_ctx, closctx->REG[2], closctx->REG[1]);
         if (closctx->closure_ctx->has_broke) {
           closctx->has_broke = 1;
           goto label5;
         }
       }
-      /* program.nit:181 */
+      /* program.nit:184 */
       fra.me.REG[1] = CALL_program___MMLocalClass___checknew_iroutine(fra.me.REG[0])(fra.me.REG[0]);
       closctx->REG[2] = fra.me.REG[1];
-      /* program.nit:182 */
+      /* program.nit:185 */
       REGB0 = TAG_Bool(closctx->REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
@@ -907,14 +973,14 @@ void program___Program___with_each_iroutines(val_t p0, struct stack_frame_t *clo
       }
       REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
       if (UNTAG_Bool(REGB0)) {
-        /* program.nit:183 */
+        /* program.nit:186 */
         ((void (*)(struct stack_frame_t *, val_t, val_t))(closctx->closure_funs[0]))(closctx->closure_ctx, closctx->REG[2], closctx->REG[1]);
         if (closctx->closure_ctx->has_broke) {
           closctx->has_broke = 1;
           goto label5;
         }
       }
-      /* program.nit:185 */
+      /* program.nit:188 */
       fra.me.REG[0] = CALL_program___MMLocalClass___new_instance_iroutine(fra.me.REG[0])(fra.me.REG[0]);
       fra.me.REG[0] = CALL_standard___collection___abstract_collection___MapRead___values(fra.me.REG[0])(fra.me.REG[0]);
       CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], closctx, ((fun_t)OC_program___Program___with_each_iroutines_6));
@@ -945,22 +1011,22 @@ void program___Program___with_each_iroutines(val_t p0, struct stack_frame_t *clo
         fra.me.closure_funs = CREG;
         fra.me.REG[0] = p0;
         CREG[0] = clos_fun0;
-        /* program.nit:167 */
+        /* program.nit:170 */
         REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_metamodel___abstractmetamodel___MMAttribute, ID_metamodel___abstractmetamodel___MMAttribute)) /*cast MMAttribute*/;
         if (UNTAG_Bool(REGB0)) {
-          /* program.nit:168 */
+          /* program.nit:171 */
           fra.me.REG[1] = CALL_icode___icode_base___MMAttribute___iroutine(fra.me.REG[0])(fra.me.REG[0]);
           closctx->REG[2] = fra.me.REG[1];
         } else {
-          /* program.nit:169 */
+          /* program.nit:172 */
           REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_metamodel___abstractmetamodel___MMMethod, ID_metamodel___abstractmetamodel___MMMethod)) /*cast MMMethod*/;
           if (UNTAG_Bool(REGB0)) {
-            /* program.nit:170 */
+            /* program.nit:173 */
             fra.me.REG[0] = CALL_icode___icode_base___MMMethod___iroutine(fra.me.REG[0])(fra.me.REG[0]);
             closctx->REG[2] = fra.me.REG[0];
           }
         }
-        /* program.nit:172 */
+        /* program.nit:175 */
         REGB0 = TAG_Bool(closctx->REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB0)) {
         } else {
@@ -976,7 +1042,7 @@ void program___Program___with_each_iroutines(val_t p0, struct stack_frame_t *clo
         if (UNTAG_Bool(REGB0)) {
           goto label4;
         }
-        /* program.nit:173 */
+        /* program.nit:176 */
         ((void (*)(struct stack_frame_t *, val_t, val_t))(closctx->closure_funs[0]))(closctx->closure_ctx, closctx->REG[2], closctx->REG[1]);
         if (closctx->closure_ctx->has_broke) {
           closctx->has_broke = 1;
@@ -1002,7 +1068,7 @@ void program___Program___with_each_iroutines(val_t p0, struct stack_frame_t *clo
         fra.me.closure_funs = CREG;
         fra.me.REG[0] = p0;
         CREG[0] = clos_fun0;
-        /* program.nit:186 */
+        /* program.nit:189 */
         ((void (*)(struct stack_frame_t *, val_t, val_t))(closctx->closure_funs[0]))(closctx->closure_ctx, fra.me.REG[0], closctx->REG[1]);
         if (closctx->closure_ctx->has_broke) {
           closctx->has_broke = 1;
@@ -1020,7 +1086,7 @@ void program___Program___with_each_methods(val_t p0, struct stack_frame_t *closc
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_program;
-  fra.me.line = 192;
+  fra.me.line = 195;
   fra.me.meth = LOCATE_program___Program___with_each_methods;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1031,12 +1097,12 @@ void program___Program___with_each_methods(val_t p0, struct stack_frame_t *closc
   fra.me.closure_funs = CREG;
   fra.me.REG[0] = p0;
   CREG[0] = clos_fun0;
-  /* program.nit:197 */
+  /* program.nit:200 */
   fra.me.REG[1] = CALL_program___Program___main_module(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[1] = CALL_metamodel___abstractmetamodel___MMModule___mhe(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_program, 197);
+    nit_abort("Reciever is null", NULL, LOCATE_program, 200);
   }
   fra.me.REG[1] = CALL_metamodel___partial_order___PartialOrderElement___greaters_and_self(fra.me.REG[1])(fra.me.REG[1]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_program___Program___with_each_methods_1));
@@ -1064,7 +1130,7 @@ void program___Program___with_each_methods(val_t p0, struct stack_frame_t *closc
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* program.nit:198 */
+    /* program.nit:201 */
     fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMModule___local_classes(fra.me.REG[0])(fra.me.REG[0]);
     CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], closctx, ((fun_t)OC_program___Program___with_each_methods_2));
     switch (closctx->has_broke) {
@@ -1091,7 +1157,7 @@ void program___Program___with_each_methods(val_t p0, struct stack_frame_t *closc
       fra.me.closure_funs = CREG;
       fra.me.REG[0] = p0;
       CREG[0] = clos_fun0;
-      /* program.nit:200 */
+      /* program.nit:203 */
       fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMLocalClass___local_local_properties(fra.me.REG[0])(fra.me.REG[0]);
       CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], closctx, ((fun_t)OC_program___Program___with_each_methods_3));
       switch (closctx->has_broke) {
@@ -1119,10 +1185,10 @@ void program___Program___with_each_methods(val_t p0, struct stack_frame_t *closc
         fra.me.closure_funs = CREG;
         fra.me.REG[0] = p0;
         CREG[0] = clos_fun0;
-        /* program.nit:201 */
+        /* program.nit:204 */
         REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_metamodel___abstractmetamodel___MMMethod, ID_metamodel___abstractmetamodel___MMMethod)) /*cast MMMethod*/;
         if (UNTAG_Bool(REGB0)) {
-          /* program.nit:202 */
+          /* program.nit:205 */
           ((void (*)(struct stack_frame_t *, val_t))(closctx->closure_funs[0]))(closctx->closure_ctx, fra.me.REG[0]);
           if (closctx->closure_ctx->has_broke) {
             closctx->has_broke = 1;
@@ -1140,7 +1206,7 @@ void program___Program___with_each_live_local_classes(val_t p0, struct stack_fra
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_program;
-  fra.me.line = 209;
+  fra.me.line = 212;
   fra.me.meth = LOCATE_program___Program___with_each_live_local_classes;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -1150,7 +1216,7 @@ void program___Program___with_each_live_local_classes(val_t p0, struct stack_fra
   fra.me.closure_funs = CREG;
   fra.me.REG[0] = p0;
   CREG[0] = clos_fun0;
-  /* program.nit:214 */
+  /* program.nit:217 */
   fra.me.REG[0] = CALL_program___Program___main_module(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMModule___local_classes(fra.me.REG[0])(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_program___Program___with_each_live_local_classes_1));
@@ -1178,7 +1244,7 @@ void program___Program___with_each_live_local_classes(val_t p0, struct stack_fra
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* program.nit:215 */
+    /* program.nit:218 */
     ((void (*)(struct stack_frame_t *, val_t))(closctx->closure_funs[0]))(closctx->closure_ctx, fra.me.REG[0]);
     if (closctx->closure_ctx->has_broke) {
       closctx->has_broke = 1;
@@ -1196,7 +1262,7 @@ void program___Program___init(val_t p0, val_t p1, val_t p2, int* init_table){
   if (init_table[itpos0]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_program;
-  fra.me.line = 219;
+  fra.me.line = 222;
   fra.me.meth = LOCATE_program___Program___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -1207,11 +1273,11 @@ void program___Program___init(val_t p0, val_t p1, val_t p2, int* init_table){
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* program.nit:220 */
+  /* program.nit:223 */
   ATTR_program___Program____main_module(fra.me.REG[0]) = fra.me.REG[1];
-  /* program.nit:221 */
+  /* program.nit:224 */
   ATTR_program___Program____tc(fra.me.REG[0]) = fra.me.REG[2];
-  /* program.nit:222 */
+  /* program.nit:225 */
   CALL_program___Program___finish_processing_classes(fra.me.REG[0])(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   init_table[itpos0] = 1;
@@ -1223,14 +1289,14 @@ val_t program___MMLocalClass___init_var_iroutine(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_program;
-  fra.me.line = 227;
+  fra.me.line = 230;
   fra.me.meth = LOCATE_program___MMLocalClass___init_var_iroutine;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* program.nit:227 */
+  /* program.nit:230 */
   fra.me.REG[0] = ATTR_program___MMLocalClass____init_var_iroutine(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1241,7 +1307,7 @@ void program___MMLocalClass___init_var_iroutine__eq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_program;
-  fra.me.line = 227;
+  fra.me.line = 230;
   fra.me.meth = LOCATE_program___MMLocalClass___init_var_iroutine__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1250,7 +1316,7 @@ void program___MMLocalClass___init_var_iroutine__eq(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* program.nit:227 */
+  /* program.nit:230 */
   ATTR_program___MMLocalClass____init_var_iroutine(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -1261,14 +1327,14 @@ val_t program___MMLocalClass___checknew_iroutine(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_program;
-  fra.me.line = 229;
+  fra.me.line = 232;
   fra.me.meth = LOCATE_program___MMLocalClass___checknew_iroutine;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* program.nit:229 */
+  /* program.nit:232 */
   fra.me.REG[0] = ATTR_program___MMLocalClass____checknew_iroutine(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1279,7 +1345,7 @@ void program___MMLocalClass___checknew_iroutine__eq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_program;
-  fra.me.line = 229;
+  fra.me.line = 232;
   fra.me.meth = LOCATE_program___MMLocalClass___checknew_iroutine__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1288,7 +1354,7 @@ void program___MMLocalClass___checknew_iroutine__eq(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* program.nit:229 */
+  /* program.nit:232 */
   ATTR_program___MMLocalClass____checknew_iroutine(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -1300,18 +1366,18 @@ val_t program___MMLocalClass___new_instance_iroutine(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_program;
-  fra.me.line = 231;
+  fra.me.line = 234;
   fra.me.meth = LOCATE_program___MMLocalClass___new_instance_iroutine;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* program.nit:231 */
+  /* program.nit:234 */
   REGB0 = TAG_Bool(ATTR_program___MMLocalClass____new_instance_iroutine(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_new_instance_iroutine", LOCATE_program, 231);
+    nit_abort("Uninitialized attribute %s", "_new_instance_iroutine", LOCATE_program, 234);
   }
   fra.me.REG[0] = ATTR_program___MMLocalClass____new_instance_iroutine(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
index 137fa91..1cf350e 100644 (file)
@@ -70,15 +70,14 @@ typedef void (*program___Program___generate_allocation_iroutines_t)(val_t p0);
   typedef void (*CLOS_OC_program___Program___generate_allocation_iroutines_1_0)(struct stack_frame_t *);
   void OC_program___Program___generate_allocation_iroutines_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
   typedef void (*OC_program___Program___generate_allocation_iroutines_1_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
-      typedef void (*CLOS_OC_program___Program___generate_allocation_iroutines_3_0)(struct stack_frame_t *);
-      void OC_program___Program___generate_allocation_iroutines_3(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
-      typedef void (*OC_program___Program___generate_allocation_iroutines_3_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
-      typedef void (*CLOS_OC_program___Program___generate_allocation_iroutines_5_0)(struct stack_frame_t *);
-      void OC_program___Program___generate_allocation_iroutines_5(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
-      typedef void (*OC_program___Program___generate_allocation_iroutines_5_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
-      typedef void (*CLOS_OC_program___Program___generate_allocation_iroutines_7_0)(struct stack_frame_t *);
-      void OC_program___Program___generate_allocation_iroutines_7(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
-      typedef void (*OC_program___Program___generate_allocation_iroutines_7_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
+          void OC_program___Program___generate_allocation_iroutines_3(struct stack_frame_t *closctx, val_t p0);
+          typedef void (*OC_program___Program___generate_allocation_iroutines_3_t)(struct stack_frame_t *closctx, val_t p0);
+      typedef void (*CLOS_OC_program___Program___generate_allocation_iroutines_6_0)(struct stack_frame_t *);
+      void OC_program___Program___generate_allocation_iroutines_6(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
+      typedef void (*OC_program___Program___generate_allocation_iroutines_6_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
+      typedef void (*CLOS_OC_program___Program___generate_allocation_iroutines_8_0)(struct stack_frame_t *);
+      void OC_program___Program___generate_allocation_iroutines_8(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
+      typedef void (*OC_program___Program___generate_allocation_iroutines_8_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
 typedef void (*CLOS_program___Program___with_each_iroutines_0)(struct stack_frame_t *, val_t, val_t);
 void program___Program___with_each_iroutines(val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
 typedef void (*program___Program___with_each_iroutines_t)(val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
index 3bf37d8..5690d79 100644 (file)
@@ -257,7 +257,8 @@ void separate_options___ToolContext___integrate_separate_options(val_t p0, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   /* separate_options.nit:45 */
-  fra.me.REG[1] = CALL_standard___string_search___String___split(fra.me.REG[1])(fra.me.REG[1]);
+  REGB0 = TAG_Char('\n');
+  fra.me.REG[1] = CALL_standard___string_search___String___split_with(fra.me.REG[1])(fra.me.REG[1], REGB0);
   /* ../lib/standard/collection/array.nit:269 */
   REGB0 = TAG_Int(0);
   /* ../lib/standard/collection/array.nit:270 */
@@ -292,7 +293,7 @@ void separate_options___ToolContext___integrate_separate_options(val_t p0, val_t
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
       /* separate_options.nit:46 */
       if (!once_value_1) {
@@ -349,7 +350,7 @@ void separate_options___ToolContext___integrate_separate_options(val_t p0, val_t
           if (UNTAG_Bool(REGB2)) {
             nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
           }
-          /* ../lib/standard/collection/array.nit:718 */
+          /* ../lib/standard/collection/array.nit:724 */
           fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB1)];
           /* ../lib/standard/collection/array.nit:24 */
           REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[7])!=NIT_NULL);
index b7349c0..40f17e3 100644 (file)
@@ -1,2 +1,59 @@
 /* This C file is generated by NIT to compile module standard___collection. */
 #include "standard___collection._sep.h"
+static const char LOCATE_standard___collection___Sequence___subarray[] = "collection::Sequence::subarray";
+val_t standard___collection___Sequence___subarray(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___collection;
+  fra.me.line = 24;
+  fra.me.meth = LOCATE_standard___collection___Sequence___subarray;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  REGB1 = p2;
+  /* ../lib/standard/collection/collection.nit:26 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+  /* ../lib/standard/kernel.nit:355 */
+  while(1) {
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ../lib/standard/kernel.nit:355 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ../lib/standard/collection/collection.nit:27 */
+      REGB2 = REGB0;
+      fra.me.REG[2] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[0])(fra.me.REG[0], REGB2);
+      CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      /* ../lib/standard/kernel.nit:357 */
+      REGB2 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ../lib/standard/kernel.nit:357 */
+      REGB0 = REGB2;
+    } else {
+      /* ../lib/standard/kernel.nit:355 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  /* ../lib/standard/collection/collection.nit:28 */
+  goto label2;
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
index c546fd9..81a5291 100644 (file)
@@ -8,4 +8,7 @@
 #include <nit_common.h>
 extern const char LOCATE_standard___collection[];
 extern const int SFT_standard___collection[];
+#define CALL_standard___collection___Sequence___subarray(recv) ((standard___collection___Sequence___subarray_t)CALL((recv), (SFT_standard___collection[0] + 0)))
+val_t standard___collection___Sequence___subarray(val_t p0, val_t p1, val_t p2);
+typedef val_t (*standard___collection___Sequence___subarray_t)(val_t p0, val_t p1, val_t p2);
 #endif
index 8708f09..f7d2626 100644 (file)
@@ -1436,7 +1436,7 @@ void standard___collection___array___Array___iterate(val_t p0, struct stack_fram
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB0)];
       /* ../lib/standard/collection/array.nit:273 */
       ((void (*)(struct stack_frame_t *, val_t))(CREG[0]))(closctx_param, fra.me.REG[2]);
@@ -1515,7 +1515,7 @@ val_t standard___collection___array___Array_____bra(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB1)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[0] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label1;
@@ -1630,7 +1630,7 @@ void standard___collection___array___Array_____braeq(val_t p0, val_t p1, val_t p
   if (UNTAG_Bool(REGB2)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 293);
   }
-  /* ../lib/standard/collection/array.nit:719 */
+  /* ../lib/standard/collection/array.nit:725 */
   ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)]=fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -1695,7 +1695,7 @@ void standard___collection___array___Array___add(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB1)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 303);
   }
-  /* ../lib/standard/collection/array.nit:719 */
+  /* ../lib/standard/collection/array.nit:725 */
   ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)]=fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -1763,7 +1763,7 @@ void standard___collection___array___Array___enlarge(val_t p0, val_t p1){
     }
   }
   label2: while(0);
-  /* ../lib/standard/collection/array.nit:712 */
+  /* ../lib/standard/collection/array.nit:718 */
   fra.me.REG[1] = NEW_NativeArray(UNTAG_Int(REGB1), sizeof(val_t));
   /* ../lib/standard/collection/array.nit:312 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___Array____capacity(fra.me.REG[0])!=NIT_NULL);
@@ -1793,7 +1793,7 @@ void standard___collection___array___Array___enlarge(val_t p0, val_t p1){
     if (UNTAG_Bool(REGB0)) {
       nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 312);
     }
-    /* ../lib/standard/collection/array.nit:720 */
+    /* ../lib/standard/collection/array.nit:726 */
     (void)memcpy(((Nit_NativeArray )fra.me.REG[1])->val, ((Nit_NativeArray)fra.me.REG[2])->val, UNTAG_Int(REGB3)*sizeof(val_t));
   }
   /* ../lib/standard/collection/array.nit:313 */
@@ -1830,16 +1830,43 @@ void standard___collection___array___Array___init(val_t p0, int* init_table){
   init_table[itpos1] = 1;
   return;
 }
-static const char LOCATE_standard___collection___array___Array___with_items[] = "array::Array::with_items";
-void standard___collection___array___Array___with_items(val_t p0, val_t p1, int* init_table){
+static const char LOCATE_standard___collection___array___Array___from[] = "array::Array::from";
+void standard___collection___array___Array___from(val_t p0, val_t p1, int* init_table){
   int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___Array].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   if (init_table[itpos2]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
   fra.me.line = 324;
+  fra.me.meth = LOCATE_standard___collection___array___Array___from;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ../lib/standard/collection/array.nit:326 */
+  REGB0 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[1])(fra.me.REG[1]);
+  CALL_standard___collection___array___Array___with_capacity(fra.me.REG[0])(fra.me.REG[0], REGB0, init_table);
+  /* ../lib/standard/collection/array.nit:327 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add_all(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos2] = 1;
+  return;
+}
+static const char LOCATE_standard___collection___array___Array___with_items[] = "array::Array::with_items";
+void standard___collection___array___Array___with_items(val_t p0, val_t p1, int* init_table){
+  int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___Array].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos3]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___collection___array;
+  fra.me.line = 330;
   fra.me.meth = LOCATE_standard___collection___array___Array___with_items;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -1849,21 +1876,21 @@ void standard___collection___array___Array___with_items(val_t p0, val_t p1, int*
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:324 */
+  /* ../lib/standard/collection/array.nit:330 */
   fra.me.REG[2] = fra.me.REG[0];
   REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[E]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_standard___collection___array, 324);
+    nit_abort("Cast failed", NULL, LOCATE_standard___collection___array, 330);
   }
-  /* ../lib/standard/collection/array.nit:327 */
+  /* ../lib/standard/collection/array.nit:333 */
   fra.me.REG[0] = ATTR_standard___collection___array___Array____items(fra.me.REG[1]);
   ATTR_standard___collection___array___Array____items(fra.me.REG[2]) = fra.me.REG[0];
-  /* ../lib/standard/collection/array.nit:328 */
+  /* ../lib/standard/collection/array.nit:334 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___Array____capacity(fra.me.REG[1])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_standard___collection___array, 328);
+    nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_standard___collection___array, 334);
   }
   REGB0 = ATTR_standard___collection___array___Array____capacity(fra.me.REG[1]);
   ATTR_standard___collection___array___Array____capacity(fra.me.REG[2]) = REGB0;
@@ -1874,24 +1901,24 @@ void standard___collection___array___Array___with_items(val_t p0, val_t p1, int*
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
-  /* ../lib/standard/collection/array.nit:329 */
+  /* ../lib/standard/collection/array.nit:335 */
   ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos2] = 1;
+  init_table[itpos3] = 1;
   return;
 }
 static const char LOCATE_standard___collection___array___Array___with_capacity[] = "array::Array::with_capacity";
 void standard___collection___array___Array___with_capacity(val_t p0, val_t p1, int* init_table){
-  int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___Array].i;
+  int itpos4 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___Array].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
   val_t tmp;
-  if (init_table[itpos3]) return;
+  if (init_table[itpos4]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 332;
+  fra.me.line = 338;
   fra.me.meth = LOCATE_standard___collection___array___Array___with_capacity;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1900,7 +1927,7 @@ void standard___collection___array___Array___with_capacity(val_t p0, val_t p1, i
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/collection/array.nit:335 */
+  /* ../lib/standard/collection/array.nit:341 */
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
@@ -1909,36 +1936,36 @@ void standard___collection___array___Array___with_capacity(val_t p0, val_t p1, i
   }
   /* ../lib/standard/kernel.nit:236 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:335 */
+  /* ../lib/standard/collection/array.nit:341 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Assert '%s' failed", "positive", LOCATE_standard___collection___array, 335);
+    nit_abort("Assert '%s' failed", "positive", LOCATE_standard___collection___array, 341);
   }
-  /* ../lib/standard/collection/array.nit:712 */
+  /* ../lib/standard/collection/array.nit:718 */
   fra.me.REG[1] = NEW_NativeArray(UNTAG_Int(REGB0), sizeof(val_t));
-  /* ../lib/standard/collection/array.nit:336 */
+  /* ../lib/standard/collection/array.nit:342 */
   ATTR_standard___collection___array___Array____items(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/collection/array.nit:337 */
+  /* ../lib/standard/collection/array.nit:343 */
   ATTR_standard___collection___array___Array____capacity(fra.me.REG[0]) = REGB0;
-  /* ../lib/standard/collection/array.nit:338 */
+  /* ../lib/standard/collection/array.nit:344 */
   REGB0 = TAG_Int(0);
   ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos3] = 1;
+  init_table[itpos4] = 1;
   return;
 }
 static const char LOCATE_standard___collection___array___Array___filled_with[] = "array::Array::filled_with";
 void standard___collection___array___Array___filled_with(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos4 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___Array].i;
+  int itpos5 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___Array].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
   val_t tmp;
-  if (init_table[itpos4]) return;
+  if (init_table[itpos5]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 341;
+  fra.me.line = 347;
   fra.me.meth = LOCATE_standard___collection___array___Array___filled_with;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -1949,7 +1976,7 @@ void standard___collection___array___Array___filled_with(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   REGB0 = p2;
-  /* ../lib/standard/collection/array.nit:344 */
+  /* ../lib/standard/collection/array.nit:350 */
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
@@ -1958,22 +1985,22 @@ void standard___collection___array___Array___filled_with(val_t p0, val_t p1, val
   }
   /* ../lib/standard/kernel.nit:236 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:344 */
+  /* ../lib/standard/collection/array.nit:350 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Assert '%s' failed", "positive", LOCATE_standard___collection___array, 344);
+    nit_abort("Assert '%s' failed", "positive", LOCATE_standard___collection___array, 350);
   }
-  /* ../lib/standard/collection/array.nit:712 */
+  /* ../lib/standard/collection/array.nit:718 */
   fra.me.REG[2] = NEW_NativeArray(UNTAG_Int(REGB0), sizeof(val_t));
-  /* ../lib/standard/collection/array.nit:345 */
+  /* ../lib/standard/collection/array.nit:351 */
   ATTR_standard___collection___array___Array____items(fra.me.REG[0]) = fra.me.REG[2];
-  /* ../lib/standard/collection/array.nit:346 */
+  /* ../lib/standard/collection/array.nit:352 */
   ATTR_standard___collection___array___Array____capacity(fra.me.REG[0]) = REGB0;
-  /* ../lib/standard/collection/array.nit:347 */
+  /* ../lib/standard/collection/array.nit:353 */
   ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]) = REGB0;
-  /* ../lib/standard/collection/array.nit:348 */
+  /* ../lib/standard/collection/array.nit:354 */
   REGB1 = TAG_Int(0);
-  /* ../lib/standard/collection/array.nit:349 */
+  /* ../lib/standard/collection/array.nit:355 */
   while(1) {
     REGB2 = TAG_Bool(VAL_ISA(REGB0, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
     if (UNTAG_Bool(REGB2)) {
@@ -1982,38 +2009,38 @@ void standard___collection___array___Array___filled_with(val_t p0, val_t p1, val
     }
     /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB0));
-    /* ../lib/standard/collection/array.nit:349 */
+    /* ../lib/standard/collection/array.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* ../lib/standard/collection/array.nit:350 */
+      /* ../lib/standard/collection/array.nit:356 */
       CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[0])(fra.me.REG[0], REGB1, fra.me.REG[1]);
-      /* ../lib/standard/collection/array.nit:351 */
+      /* ../lib/standard/collection/array.nit:357 */
       REGB2 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB2));
-      /* ../lib/standard/collection/array.nit:351 */
+      /* ../lib/standard/collection/array.nit:357 */
       REGB1 = REGB2;
     } else {
-      /* ../lib/standard/collection/array.nit:349 */
+      /* ../lib/standard/collection/array.nit:355 */
       goto label1;
     }
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
-  init_table[itpos4] = 1;
+  init_table[itpos5] = 1;
   return;
 }
 static const char LOCATE_standard___collection___array___Array___with_native[] = "array::Array::with_native";
 void standard___collection___array___Array___with_native(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos5 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___Array].i;
+  int itpos6 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___Array].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
   val_t tmp;
-  if (init_table[itpos5]) return;
+  if (init_table[itpos6]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 355;
+  fra.me.line = 361;
   fra.me.meth = LOCATE_standard___collection___array___Array___with_native;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2023,7 +2050,7 @@ void standard___collection___array___Array___with_native(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   REGB0 = p2;
-  /* ../lib/standard/collection/array.nit:358 */
+  /* ../lib/standard/collection/array.nit:364 */
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
@@ -2032,19 +2059,19 @@ void standard___collection___array___Array___with_native(val_t p0, val_t p1, val
   }
   /* ../lib/standard/kernel.nit:236 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:358 */
+  /* ../lib/standard/collection/array.nit:364 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Assert '%s' failed", "positive", LOCATE_standard___collection___array, 358);
+    nit_abort("Assert '%s' failed", "positive", LOCATE_standard___collection___array, 364);
   }
-  /* ../lib/standard/collection/array.nit:359 */
+  /* ../lib/standard/collection/array.nit:365 */
   ATTR_standard___collection___array___Array____items(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/collection/array.nit:360 */
+  /* ../lib/standard/collection/array.nit:366 */
   ATTR_standard___collection___array___Array____capacity(fra.me.REG[0]) = REGB0;
-  /* ../lib/standard/collection/array.nit:361 */
+  /* ../lib/standard/collection/array.nit:367 */
   ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos5] = 1;
+  init_table[itpos6] = 1;
   return;
 }
 static const char LOCATE_standard___collection___array___Array___intern_items[] = "array::Array::intern_items";
@@ -2054,7 +2081,7 @@ val_t standard___collection___array___Array___intern_items(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 367;
+  fra.me.line = 373;
   fra.me.meth = LOCATE_standard___collection___array___Array___intern_items;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2062,14 +2089,14 @@ val_t standard___collection___array___Array___intern_items(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:367 */
+  /* ../lib/standard/collection/array.nit:373 */
   fra.me.REG[1] = fra.me.REG[0];
-  /* ../lib/standard/collection/array.nit:369 */
+  /* ../lib/standard/collection/array.nit:375 */
   fra.me.REG[1] = ATTR_standard___collection___array___Array____items(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_standard___collection___array, 369);
+    nit_abort("Cast failed", NULL, LOCATE_standard___collection___array, 375);
   }
   goto label1;
   label1: while(0);
@@ -2086,7 +2113,7 @@ void standard___collection___array___Array___sort(val_t p0, struct stack_frame_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 374;
+  fra.me.line = 380;
   fra.me.meth = LOCATE_standard___collection___array___Array___sort;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -2096,7 +2123,7 @@ void standard___collection___array___Array___sort(val_t p0, struct stack_frame_t
   fra.me.closure_funs = CREG;
   fra.me.REG[0] = p0;
   CREG[0] = clos_fun0;
-  /* ../lib/standard/collection/array.nit:378 */
+  /* ../lib/standard/collection/array.nit:384 */
   REGB0 = TAG_Int(0);
   /* ../lib/standard/collection/array.nit:24 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
@@ -2105,7 +2132,7 @@ void standard___collection___array___Array___sort(val_t p0, struct stack_frame_t
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* ../lib/standard/collection/array.nit:378 */
+  /* ../lib/standard/collection/array.nit:384 */
   REGB2 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:240 */
   REGB2 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB2));
@@ -2122,10 +2149,10 @@ void standard___collection___array___Array___sort(val_t p0, struct stack_frame_t
     struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
     val_t REGB0;
     val_t tmp;
-    /* ../lib/standard/collection/array.nit:378 */
+    /* ../lib/standard/collection/array.nit:384 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_standard___collection___array;
-    fra.me.line = 378;
+    fra.me.line = 384;
     fra.me.meth = LOCATE_standard___collection___array___Array___sort;
     fra.me.has_broke = 0;
     fra.me.REG_size = 2;
@@ -2158,7 +2185,7 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 381;
+  fra.me.line = 387;
   fra.me.meth = LOCATE_standard___collection___array___Array___sub_sort;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -2180,12 +2207,12 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
   }
   /* ../lib/standard/kernel.nit:236 */
   REGB2 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:385 */
+  /* ../lib/standard/collection/array.nit:391 */
   if (UNTAG_Bool(REGB2)) {
-    /* ../lib/standard/collection/array.nit:386 */
+    /* ../lib/standard/collection/array.nit:392 */
     goto label1;
   } else {
-    /* ../lib/standard/collection/array.nit:387 */
+    /* ../lib/standard/collection/array.nit:393 */
     REGB2 = TAG_Int(7);
     /* ../lib/standard/kernel.nit:238 */
     REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
@@ -2196,7 +2223,7 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
     }
     /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB1));
-    /* ../lib/standard/collection/array.nit:387 */
+    /* ../lib/standard/collection/array.nit:393 */
     if (UNTAG_Bool(REGB2)) {
       /* ../lib/standard/collection/array.nit:278 */
       fra.me.REG[1] = fra.me.REG[0];
@@ -2240,16 +2267,16 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
       if (UNTAG_Bool(REGB3)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB2)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label2;
       label2: while(0);
-      /* ../lib/standard/collection/array.nit:389 */
+      /* ../lib/standard/collection/array.nit:395 */
       REGB2 = REGB0;
-      /* ../lib/standard/collection/array.nit:390 */
+      /* ../lib/standard/collection/array.nit:396 */
       REGB3 = REGB1;
-      /* ../lib/standard/collection/array.nit:391 */
+      /* ../lib/standard/collection/array.nit:397 */
       while(1) {
         REGB4 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB3), VTID_standard___kernel___Comparable___OTHER(REGB3))) /*cast OTHER*/;
         if (UNTAG_Bool(REGB4)) {
@@ -2258,9 +2285,9 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
         }
         /* ../lib/standard/kernel.nit:237 */
         REGB4 = TAG_Bool(UNTAG_Int(REGB3)>UNTAG_Int(REGB2));
-        /* ../lib/standard/collection/array.nit:391 */
+        /* ../lib/standard/collection/array.nit:397 */
         if (UNTAG_Bool(REGB4)) {
-          /* ../lib/standard/collection/array.nit:392 */
+          /* ../lib/standard/collection/array.nit:398 */
           while(1) {
             REGB4 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
             if (UNTAG_Bool(REGB4)) {
@@ -2269,7 +2296,7 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
             }
             /* ../lib/standard/kernel.nit:234 */
             REGB4 = TAG_Bool(UNTAG_Int(REGB2)<=UNTAG_Int(REGB1));
-            /* ../lib/standard/collection/array.nit:392 */
+            /* ../lib/standard/collection/array.nit:398 */
             if (UNTAG_Bool(REGB4)) {
               /* ../lib/standard/collection/array.nit:278 */
               fra.me.REG[2] = fra.me.REG[0];
@@ -2313,12 +2340,12 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
               if (UNTAG_Bool(REGB5)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
               }
-              /* ../lib/standard/collection/array.nit:718 */
+              /* ../lib/standard/collection/array.nit:724 */
               fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB4)];
               /* ../lib/standard/collection/array.nit:281 */
               goto label3;
               label3: while(0);
-              /* ../lib/standard/collection/array.nit:392 */
+              /* ../lib/standard/collection/array.nit:398 */
               REGB4 = ((val_t (*)(struct stack_frame_t *, val_t, val_t))(CREG[0]))(closctx_param, fra.me.REG[2], fra.me.REG[1]);
               if (closctx_param->has_broke) {
                goto label1;
@@ -2332,7 +2359,7 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
               /* ../lib/standard/kernel.nit:234 */
               REGB5 = TAG_Bool(UNTAG_Int(REGB4)<=UNTAG_Int(REGB5));
             } else {
-              /* ../lib/standard/collection/array.nit:392 */
+              /* ../lib/standard/collection/array.nit:398 */
               REGB4 = TAG_Bool(0);
               REGB5 = REGB4;
             }
@@ -2340,14 +2367,14 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
               REGB5 = TAG_Int(1);
               /* ../lib/standard/kernel.nit:238 */
               REGB5 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB5));
-              /* ../lib/standard/collection/array.nit:392 */
+              /* ../lib/standard/collection/array.nit:398 */
               REGB2 = REGB5;
             } else {
               goto label4;
             }
           }
           label4: while(0);
-          /* ../lib/standard/collection/array.nit:393 */
+          /* ../lib/standard/collection/array.nit:399 */
           while(1) {
             REGB5 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB3), VTID_standard___kernel___Comparable___OTHER(REGB3))) /*cast OTHER*/;
             if (UNTAG_Bool(REGB5)) {
@@ -2356,7 +2383,7 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
             }
             /* ../lib/standard/kernel.nit:237 */
             REGB5 = TAG_Bool(UNTAG_Int(REGB3)>UNTAG_Int(REGB2));
-            /* ../lib/standard/collection/array.nit:393 */
+            /* ../lib/standard/collection/array.nit:399 */
             if (UNTAG_Bool(REGB5)) {
               /* ../lib/standard/collection/array.nit:278 */
               fra.me.REG[2] = fra.me.REG[0];
@@ -2400,12 +2427,12 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
               if (UNTAG_Bool(REGB4)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
               }
-              /* ../lib/standard/collection/array.nit:718 */
+              /* ../lib/standard/collection/array.nit:724 */
               fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB5)];
               /* ../lib/standard/collection/array.nit:281 */
               goto label5;
               label5: while(0);
-              /* ../lib/standard/collection/array.nit:393 */
+              /* ../lib/standard/collection/array.nit:399 */
               REGB5 = ((val_t (*)(struct stack_frame_t *, val_t, val_t))(CREG[0]))(closctx_param, fra.me.REG[2], fra.me.REG[1]);
               if (closctx_param->has_broke) {
                goto label1;
@@ -2419,7 +2446,7 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
               /* ../lib/standard/kernel.nit:236 */
               REGB4 = TAG_Bool(UNTAG_Int(REGB5)>=UNTAG_Int(REGB4));
             } else {
-              /* ../lib/standard/collection/array.nit:393 */
+              /* ../lib/standard/collection/array.nit:399 */
               REGB5 = TAG_Bool(0);
               REGB4 = REGB5;
             }
@@ -2427,7 +2454,7 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
               REGB4 = TAG_Int(1);
               /* ../lib/standard/kernel.nit:240 */
               REGB4 = TAG_Int(UNTAG_Int(REGB3)-UNTAG_Int(REGB4));
-              /* ../lib/standard/collection/array.nit:393 */
+              /* ../lib/standard/collection/array.nit:399 */
               REGB3 = REGB4;
             } else {
               goto label6;
@@ -2441,7 +2468,7 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
           }
           /* ../lib/standard/kernel.nit:237 */
           REGB4 = TAG_Bool(UNTAG_Int(REGB3)>UNTAG_Int(REGB2));
-          /* ../lib/standard/collection/array.nit:394 */
+          /* ../lib/standard/collection/array.nit:400 */
           if (UNTAG_Bool(REGB4)) {
             /* ../lib/standard/collection/array.nit:278 */
             fra.me.REG[2] = fra.me.REG[0];
@@ -2485,7 +2512,7 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
             if (UNTAG_Bool(REGB5)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB4)];
             /* ../lib/standard/collection/array.nit:281 */
             goto label7;
@@ -2532,23 +2559,23 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
             if (UNTAG_Bool(REGB5)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB4)];
             /* ../lib/standard/collection/array.nit:281 */
             goto label8;
             label8: while(0);
-            /* ../lib/standard/collection/array.nit:396 */
+            /* ../lib/standard/collection/array.nit:402 */
             CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[0])(fra.me.REG[0], REGB2, fra.me.REG[3]);
-            /* ../lib/standard/collection/array.nit:397 */
+            /* ../lib/standard/collection/array.nit:403 */
             CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[0])(fra.me.REG[0], REGB3, fra.me.REG[2]);
           }
         } else {
-          /* ../lib/standard/collection/array.nit:391 */
+          /* ../lib/standard/collection/array.nit:397 */
           goto label9;
         }
       }
       label9: while(0);
-      /* ../lib/standard/collection/array.nit:400 */
+      /* ../lib/standard/collection/array.nit:406 */
       REGB3 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:240 */
       REGB3 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB3));
@@ -2593,20 +2620,20 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
       if (UNTAG_Bool(REGB4)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB3)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label10;
       label10: while(0);
-      /* ../lib/standard/collection/array.nit:400 */
+      /* ../lib/standard/collection/array.nit:406 */
       CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[0])(fra.me.REG[0], REGB0, fra.me.REG[2]);
-      /* ../lib/standard/collection/array.nit:401 */
+      /* ../lib/standard/collection/array.nit:407 */
       REGB3 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:240 */
       REGB3 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB3));
-      /* ../lib/standard/collection/array.nit:401 */
+      /* ../lib/standard/collection/array.nit:407 */
       CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[0])(fra.me.REG[0], REGB3, fra.me.REG[1]);
-      /* ../lib/standard/collection/array.nit:402 */
+      /* ../lib/standard/collection/array.nit:408 */
       REGB3 = TAG_Int(2);
       /* ../lib/standard/kernel.nit:240 */
       REGB3 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB3));
@@ -2621,7 +2648,7 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
         case 1: (&(fra.me))->has_broke = 0; goto label1;
       }
     } else {
-      /* ../lib/standard/collection/array.nit:406 */
+      /* ../lib/standard/collection/array.nit:412 */
       while(1) {
         REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
         if (UNTAG_Bool(REGB2)) {
@@ -2630,9 +2657,9 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
         }
         /* ../lib/standard/kernel.nit:235 */
         REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-        /* ../lib/standard/collection/array.nit:406 */
+        /* ../lib/standard/collection/array.nit:412 */
         if (UNTAG_Bool(REGB2)) {
-          /* ../lib/standard/collection/array.nit:407 */
+          /* ../lib/standard/collection/array.nit:413 */
           REGB2 = REGB0;
           /* ../lib/standard/collection/array.nit:278 */
           fra.me.REG[1] = fra.me.REG[0];
@@ -2676,14 +2703,14 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
           if (UNTAG_Bool(REGB4)) {
             nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
           }
-          /* ../lib/standard/collection/array.nit:718 */
+          /* ../lib/standard/collection/array.nit:724 */
           fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB3)];
           /* ../lib/standard/collection/array.nit:281 */
           goto label15;
           label15: while(0);
-          /* ../lib/standard/collection/array.nit:409 */
+          /* ../lib/standard/collection/array.nit:415 */
           REGB3 = REGB0;
-          /* ../lib/standard/collection/array.nit:410 */
+          /* ../lib/standard/collection/array.nit:416 */
           while(1) {
             REGB4 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB3), VTID_standard___kernel___Comparable___OTHER(REGB3))) /*cast OTHER*/;
             if (UNTAG_Bool(REGB4)) {
@@ -2692,7 +2719,7 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
             }
             /* ../lib/standard/kernel.nit:234 */
             REGB4 = TAG_Bool(UNTAG_Int(REGB3)<=UNTAG_Int(REGB1));
-            /* ../lib/standard/collection/array.nit:410 */
+            /* ../lib/standard/collection/array.nit:416 */
             if (UNTAG_Bool(REGB4)) {
               /* ../lib/standard/collection/array.nit:278 */
               fra.me.REG[2] = fra.me.REG[0];
@@ -2736,12 +2763,12 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
               if (UNTAG_Bool(REGB5)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
               }
-              /* ../lib/standard/collection/array.nit:718 */
+              /* ../lib/standard/collection/array.nit:724 */
               fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB4)];
               /* ../lib/standard/collection/array.nit:281 */
               goto label16;
               label16: while(0);
-              /* ../lib/standard/collection/array.nit:411 */
+              /* ../lib/standard/collection/array.nit:417 */
               REGB4 = ((val_t (*)(struct stack_frame_t *, val_t, val_t))(CREG[0]))(closctx_param, fra.me.REG[1], fra.me.REG[2]);
               if (closctx_param->has_broke) {
                goto label1;
@@ -2754,9 +2781,9 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
               }
               /* ../lib/standard/kernel.nit:237 */
               REGB5 = TAG_Bool(UNTAG_Int(REGB4)>UNTAG_Int(REGB5));
-              /* ../lib/standard/collection/array.nit:411 */
+              /* ../lib/standard/collection/array.nit:417 */
               if (UNTAG_Bool(REGB5)) {
-               /* ../lib/standard/collection/array.nit:412 */
+               /* ../lib/standard/collection/array.nit:418 */
                REGB2 = REGB3;
                /* ../lib/standard/collection/array.nit:278 */
                fra.me.REG[2] = fra.me.REG[0];
@@ -2800,33 +2827,33 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
                if (UNTAG_Bool(REGB4)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB5)];
                /* ../lib/standard/collection/array.nit:281 */
                goto label17;
                label17: while(0);
-               /* ../lib/standard/collection/array.nit:413 */
+               /* ../lib/standard/collection/array.nit:419 */
                fra.me.REG[1] = fra.me.REG[2];
               }
-              /* ../lib/standard/collection/array.nit:415 */
+              /* ../lib/standard/collection/array.nit:421 */
               REGB5 = TAG_Int(1);
               /* ../lib/standard/kernel.nit:238 */
               REGB5 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB5));
-              /* ../lib/standard/collection/array.nit:415 */
+              /* ../lib/standard/collection/array.nit:421 */
               REGB3 = REGB5;
             } else {
-              /* ../lib/standard/collection/array.nit:410 */
+              /* ../lib/standard/collection/array.nit:416 */
               goto label18;
             }
           }
           label18: while(0);
-          /* ../lib/standard/collection/array.nit:417 */
+          /* ../lib/standard/collection/array.nit:423 */
           REGB3 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB0));
           if (UNTAG_Bool(REGB3)) {
           } else {
             /* ../lib/standard/kernel.nit:230 */
             REGB5 = TAG_Bool((REGB2)==(REGB0));
-            /* ../lib/standard/collection/array.nit:417 */
+            /* ../lib/standard/collection/array.nit:423 */
             REGB3 = REGB5;
           }
           REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
@@ -2873,24 +2900,24 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
             if (UNTAG_Bool(REGB5)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB3)];
             /* ../lib/standard/collection/array.nit:281 */
             goto label19;
             label19: while(0);
-            /* ../lib/standard/collection/array.nit:418 */
+            /* ../lib/standard/collection/array.nit:424 */
             CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[0])(fra.me.REG[0], REGB2, fra.me.REG[2]);
-            /* ../lib/standard/collection/array.nit:419 */
+            /* ../lib/standard/collection/array.nit:425 */
             CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[0])(fra.me.REG[0], REGB0, fra.me.REG[1]);
           }
-          /* ../lib/standard/collection/array.nit:421 */
+          /* ../lib/standard/collection/array.nit:427 */
           REGB2 = TAG_Int(1);
           /* ../lib/standard/kernel.nit:238 */
           REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-          /* ../lib/standard/collection/array.nit:421 */
+          /* ../lib/standard/collection/array.nit:427 */
           REGB0 = REGB2;
         } else {
-          /* ../lib/standard/collection/array.nit:406 */
+          /* ../lib/standard/collection/array.nit:412 */
           goto label20;
         }
       }
@@ -2905,10 +2932,10 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
         struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
         val_t REGB0;
         val_t tmp;
-        /* ../lib/standard/collection/array.nit:402 */
+        /* ../lib/standard/collection/array.nit:408 */
         fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
         fra.me.file = LOCATE_standard___collection___array;
-        fra.me.line = 402;
+        fra.me.line = 408;
         fra.me.meth = LOCATE_standard___collection___array___Array___sub_sort;
         fra.me.has_broke = 0;
         fra.me.REG_size = 2;
@@ -2931,10 +2958,10 @@ void standard___collection___array___Array___sub_sort(val_t p0, val_t p1, val_t
         struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
         val_t REGB0;
         val_t tmp;
-        /* ../lib/standard/collection/array.nit:403 */
+        /* ../lib/standard/collection/array.nit:409 */
         fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
         fra.me.file = LOCATE_standard___collection___array;
-        fra.me.line = 403;
+        fra.me.line = 409;
         fra.me.meth = LOCATE_standard___collection___array___Array___sub_sort;
         fra.me.has_broke = 0;
         fra.me.REG_size = 2;
@@ -2960,7 +2987,7 @@ val_t standard___collection___array___ArrayIterator___item(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 431;
+  fra.me.line = 437;
   fra.me.meth = LOCATE_standard___collection___array___ArrayIterator___item;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2968,17 +2995,17 @@ val_t standard___collection___array___ArrayIterator___item(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:431 */
+  /* ../lib/standard/collection/array.nit:437 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayIterator____array(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 431);
+    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 437);
   }
   fra.me.REG[1] = ATTR_standard___collection___array___ArrayIterator____array(fra.me.REG[0]);
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayIterator____index(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_index", LOCATE_standard___collection___array, 431);
+    nit_abort("Uninitialized attribute %s", "_index", LOCATE_standard___collection___array, 437);
   }
   REGB0 = ATTR_standard___collection___array___ArrayIterator____index(fra.me.REG[0]);
   fra.me.REG[1] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[1])(fra.me.REG[1], REGB0);
@@ -2996,24 +3023,24 @@ val_t standard___collection___array___ArrayIterator___is_ok(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 435;
+  fra.me.line = 441;
   fra.me.meth = LOCATE_standard___collection___array___ArrayIterator___is_ok;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:435 */
+  /* ../lib/standard/collection/array.nit:441 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayIterator____index(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_index", LOCATE_standard___collection___array, 435);
+    nit_abort("Uninitialized attribute %s", "_index", LOCATE_standard___collection___array, 441);
   }
   REGB0 = ATTR_standard___collection___array___ArrayIterator____index(fra.me.REG[0]);
   REGB1 = TAG_Bool(ATTR_standard___collection___array___ArrayIterator____array(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 435);
+    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 441);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArrayIterator____array(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:24 */
@@ -3030,7 +3057,7 @@ val_t standard___collection___array___ArrayIterator___is_ok(val_t p0){
   }
   /* ../lib/standard/kernel.nit:235 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:435 */
+  /* ../lib/standard/collection/array.nit:441 */
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -3044,33 +3071,33 @@ void standard___collection___array___ArrayIterator___next(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 437;
+  fra.me.line = 443;
   fra.me.meth = LOCATE_standard___collection___array___ArrayIterator___next;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:437 */
+  /* ../lib/standard/collection/array.nit:443 */
   REGB0 = ATTR_standard___collection___array___ArrayIterator____index(fra.me.REG[0]);
   REGB1 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:238 */
   REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:437 */
+  /* ../lib/standard/collection/array.nit:443 */
   ATTR_standard___collection___array___ArrayIterator____index(fra.me.REG[0]) = REGB1;
   stack_frame_head = fra.me.prev;
   return;
 }
 static const char LOCATE_standard___collection___array___ArrayIterator___init[] = "array::ArrayIterator::init";
 void standard___collection___array___ArrayIterator___init(val_t p0, val_t p1, int* init_table){
-  int itpos6 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___ArrayIterator].i;
+  int itpos7 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___ArrayIterator].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos6]) return;
+  if (init_table[itpos7]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 439;
+  fra.me.line = 445;
   fra.me.meth = LOCATE_standard___collection___array___ArrayIterator___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3079,13 +3106,13 @@ void standard___collection___array___ArrayIterator___init(val_t p0, val_t p1, in
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:441 */
+  /* ../lib/standard/collection/array.nit:447 */
   ATTR_standard___collection___array___ArrayIterator____array(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/collection/array.nit:442 */
+  /* ../lib/standard/collection/array.nit:448 */
   REGB0 = TAG_Int(0);
   ATTR_standard___collection___array___ArrayIterator____index(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos6] = 1;
+  init_table[itpos7] = 1;
   return;
 }
 static const char LOCATE_standard___collection___array___ArrayIterator___index[] = "array::ArrayIterator::(abstract_collection::IndexedIterator::index)";
@@ -3095,18 +3122,18 @@ val_t standard___collection___array___ArrayIterator___index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 445;
+  fra.me.line = 451;
   fra.me.meth = LOCATE_standard___collection___array___ArrayIterator___index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:445 */
+  /* ../lib/standard/collection/array.nit:451 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayIterator____index(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_index", LOCATE_standard___collection___array, 445);
+    nit_abort("Uninitialized attribute %s", "_index", LOCATE_standard___collection___array, 451);
   }
   REGB0 = ATTR_standard___collection___array___ArrayIterator____index(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3119,7 +3146,7 @@ val_t standard___collection___array___ArraySet___has(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 458;
+  fra.me.line = 464;
   fra.me.meth = LOCATE_standard___collection___array___ArraySet___has;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3128,11 +3155,11 @@ val_t standard___collection___array___ArraySet___has(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:458 */
+  /* ../lib/standard/collection/array.nit:464 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 458);
+    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 464);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___abstract_collection___Collection___has(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
@@ -3148,7 +3175,7 @@ void standard___collection___array___ArraySet___add(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 460;
+  fra.me.line = 466;
   fra.me.meth = LOCATE_standard___collection___array___ArraySet___add;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -3158,11 +3185,11 @@ void standard___collection___array___ArraySet___add(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:460 */
+  /* ../lib/standard/collection/array.nit:466 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 460);
+    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 466);
   }
   fra.me.REG[2] = ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___abstract_collection___Collection___has(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
@@ -3171,7 +3198,7 @@ void standard___collection___array___ArraySet___add(val_t p0, val_t p1){
     REGB0 = TAG_Bool(ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 460);
+      nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 466);
     }
     fra.me.REG[0] = ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
@@ -3186,18 +3213,18 @@ val_t standard___collection___array___ArraySet___is_empty(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 462;
+  fra.me.line = 468;
   fra.me.meth = LOCATE_standard___collection___array___ArraySet___is_empty;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:462 */
+  /* ../lib/standard/collection/array.nit:468 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 462);
+    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 468);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[0])(fra.me.REG[0]);
@@ -3213,18 +3240,18 @@ val_t standard___collection___array___ArraySet___length(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 464;
+  fra.me.line = 470;
   fra.me.meth = LOCATE_standard___collection___array___ArraySet___length;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:464 */
+  /* ../lib/standard/collection/array.nit:470 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 464);
+    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 470);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:24 */
@@ -3234,7 +3261,7 @@ val_t standard___collection___array___ArraySet___length(val_t p0){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* ../lib/standard/collection/array.nit:464 */
+  /* ../lib/standard/collection/array.nit:470 */
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -3249,7 +3276,7 @@ val_t standard___collection___array___ArraySet___first(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 466;
+  fra.me.line = 472;
   fra.me.meth = LOCATE_standard___collection___array___ArraySet___first;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3257,11 +3284,11 @@ val_t standard___collection___array___ArraySet___first(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:468 */
+  /* ../lib/standard/collection/array.nit:474 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 468);
+    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 474);
   }
   fra.me.REG[1] = ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:24 */
@@ -3271,7 +3298,7 @@ val_t standard___collection___array___ArraySet___first(val_t p0){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
-  /* ../lib/standard/collection/array.nit:468 */
+  /* ../lib/standard/collection/array.nit:474 */
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
@@ -3280,16 +3307,16 @@ val_t standard___collection___array___ArraySet___first(val_t p0){
   }
   /* ../lib/standard/kernel.nit:237 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:468 */
+  /* ../lib/standard/collection/array.nit:474 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_standard___collection___array, 468);
+    nit_abort("Assert failed", NULL, LOCATE_standard___collection___array, 474);
   }
-  /* ../lib/standard/collection/array.nit:469 */
+  /* ../lib/standard/collection/array.nit:475 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 469);
+    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 475);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0]);
   fra.me.REG[0] = CALL_standard___collection___abstract_collection___Collection___first(fra.me.REG[0])(fra.me.REG[0]);
@@ -3307,7 +3334,7 @@ void standard___collection___array___ArraySet___remove(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 472;
+  fra.me.line = 478;
   fra.me.meth = LOCATE_standard___collection___array___ArraySet___remove;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -3317,15 +3344,15 @@ void standard___collection___array___ArraySet___remove(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:474 */
+  /* ../lib/standard/collection/array.nit:480 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 474);
+    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 480);
   }
   fra.me.REG[2] = ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___abstract_collection___SequenceRead___index_of(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  /* ../lib/standard/collection/array.nit:475 */
+  /* ../lib/standard/collection/array.nit:481 */
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
@@ -3334,7 +3361,7 @@ void standard___collection___array___ArraySet___remove(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:236 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:475 */
+  /* ../lib/standard/collection/array.nit:481 */
   if (UNTAG_Bool(REGB1)) {
     CALL_standard___collection___array___ArraySet___remove_at(fra.me.REG[0])(fra.me.REG[0], REGB0);
   }
@@ -3347,7 +3374,7 @@ void standard___collection___array___ArraySet___remove_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 478;
+  fra.me.line = 484;
   fra.me.meth = LOCATE_standard___collection___array___ArraySet___remove_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3356,7 +3383,7 @@ void standard___collection___array___ArraySet___remove_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:478 */
+  /* ../lib/standard/collection/array.nit:484 */
   CALL_standard___collection___abstract_collection___RemovableCollection___remove(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return;
@@ -3368,18 +3395,18 @@ void standard___collection___array___ArraySet___clear(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 480;
+  fra.me.line = 486;
   fra.me.meth = LOCATE_standard___collection___array___ArraySet___clear;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:480 */
+  /* ../lib/standard/collection/array.nit:486 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 480);
+    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 486);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[0])(fra.me.REG[0]);
@@ -3393,18 +3420,18 @@ val_t standard___collection___array___ArraySet___iterator(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 482;
+  fra.me.line = 488;
   fra.me.meth = LOCATE_standard___collection___array___ArraySet___iterator;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:482 */
+  /* ../lib/standard/collection/array.nit:488 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 482);
+    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 488);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0]);
   fra.me.REG[0] = CALL_standard___collection___abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
@@ -3422,7 +3449,7 @@ void standard___collection___array___ArraySet___enlarge(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 484;
+  fra.me.line = 490;
   fra.me.meth = LOCATE_standard___collection___array___ArraySet___enlarge;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -3430,11 +3457,11 @@ void standard___collection___array___ArraySet___enlarge(val_t p0, val_t p1){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/collection/array.nit:485 */
+  /* ../lib/standard/collection/array.nit:491 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 485);
+    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 491);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0]);
   CALL_standard___collection___array___AbstractArray___enlarge(fra.me.REG[0])(fra.me.REG[0], REGB0);
@@ -3449,7 +3476,7 @@ void standard___collection___array___ArraySet___remove_at(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 487;
+  fra.me.line = 493;
   fra.me.meth = LOCATE_standard___collection___array___ArraySet___remove_at;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -3459,26 +3486,26 @@ void standard___collection___array___ArraySet___remove_at(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/collection/array.nit:489 */
+  /* ../lib/standard/collection/array.nit:495 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 489);
+    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 495);
   }
   fra.me.REG[1] = ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0]);
   REGB1 = TAG_Bool(ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 489);
+    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 495);
   }
   fra.me.REG[2] = ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0]);
   fra.me.REG[2] = CALL_standard___collection___abstract_collection___SequenceRead___last(fra.me.REG[2])(fra.me.REG[2]);
   CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  /* ../lib/standard/collection/array.nit:490 */
+  /* ../lib/standard/collection/array.nit:496 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 490);
+    nit_abort("Uninitialized attribute %s", "_array", LOCATE_standard___collection___array, 496);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Sequence___pop(fra.me.REG[0])(fra.me.REG[0]);
@@ -3487,13 +3514,13 @@ void standard___collection___array___ArraySet___remove_at(val_t p0, val_t p1){
 }
 static const char LOCATE_standard___collection___array___ArraySet___init[] = "array::ArraySet::init";
 void standard___collection___array___ArraySet___init(val_t p0, int* init_table){
-  int itpos7 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___ArraySet].i;
+  int itpos8 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___ArraySet].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos7]) return;
+  if (init_table[itpos8]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 493;
+  fra.me.line = 499;
   fra.me.meth = LOCATE_standard___collection___array___ArraySet___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3501,23 +3528,23 @@ void standard___collection___array___ArraySet___init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:494 */
+  /* ../lib/standard/collection/array.nit:500 */
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
   ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos7] = 1;
+  init_table[itpos8] = 1;
   return;
 }
 static const char LOCATE_standard___collection___array___ArraySet___with_capacity[] = "array::ArraySet::with_capacity";
 void standard___collection___array___ArraySet___with_capacity(val_t p0, val_t p1, int* init_table){
-  int itpos8 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___ArraySet].i;
+  int itpos9 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___ArraySet].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos8]) return;
+  if (init_table[itpos9]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 496;
+  fra.me.line = 502;
   fra.me.meth = LOCATE_standard___collection___array___ArraySet___with_capacity;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3526,11 +3553,11 @@ void standard___collection___array___ArraySet___with_capacity(val_t p0, val_t p1
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/collection/array.nit:497 */
+  /* ../lib/standard/collection/array.nit:503 */
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   ATTR_standard___collection___array___ArraySet____array(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos8] = 1;
+  init_table[itpos9] = 1;
   return;
 }
 static const char LOCATE_standard___collection___array___ArraySetIterator___is_ok[] = "array::ArraySetIterator::(abstract_collection::Iterator::is_ok)";
@@ -3540,18 +3567,18 @@ val_t standard___collection___array___ArraySetIterator___is_ok(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 504;
+  fra.me.line = 510;
   fra.me.meth = LOCATE_standard___collection___array___ArraySetIterator___is_ok;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:504 */
+  /* ../lib/standard/collection/array.nit:510 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArraySetIterator____iter(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_iter", LOCATE_standard___collection___array, 504);
+    nit_abort("Uninitialized attribute %s", "_iter", LOCATE_standard___collection___array, 510);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArraySetIterator____iter(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
@@ -3567,18 +3594,18 @@ void standard___collection___array___ArraySetIterator___next(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 506;
+  fra.me.line = 512;
   fra.me.meth = LOCATE_standard___collection___array___ArraySetIterator___next;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:506 */
+  /* ../lib/standard/collection/array.nit:512 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArraySetIterator____iter(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_iter", LOCATE_standard___collection___array, 506);
+    nit_abort("Uninitialized attribute %s", "_iter", LOCATE_standard___collection___array, 512);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArraySetIterator____iter(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
@@ -3592,18 +3619,18 @@ val_t standard___collection___array___ArraySetIterator___item(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 508;
+  fra.me.line = 514;
   fra.me.meth = LOCATE_standard___collection___array___ArraySetIterator___item;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:508 */
+  /* ../lib/standard/collection/array.nit:514 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArraySetIterator____iter(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_iter", LOCATE_standard___collection___array, 508);
+    nit_abort("Uninitialized attribute %s", "_iter", LOCATE_standard___collection___array, 514);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArraySetIterator____iter(fra.me.REG[0]);
   fra.me.REG[0] = CALL_standard___collection___abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
@@ -3614,13 +3641,13 @@ val_t standard___collection___array___ArraySetIterator___item(val_t p0){
 }
 static const char LOCATE_standard___collection___array___ArraySetIterator___init[] = "array::ArraySetIterator::init";
 void standard___collection___array___ArraySetIterator___init(val_t p0, val_t p1, int* init_table){
-  int itpos9 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___ArraySetIterator].i;
+  int itpos10 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___ArraySetIterator].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos9]) return;
+  if (init_table[itpos10]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 510;
+  fra.me.line = 516;
   fra.me.meth = LOCATE_standard___collection___array___ArraySetIterator___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3629,10 +3656,10 @@ void standard___collection___array___ArraySetIterator___init(val_t p0, val_t p1,
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:510 */
+  /* ../lib/standard/collection/array.nit:516 */
   ATTR_standard___collection___array___ArraySetIterator____iter(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos9] = 1;
+  init_table[itpos10] = 1;
   return;
 }
 static const char LOCATE_standard___collection___array___ArrayMap_____bra[] = "array::ArrayMap::(abstract_collection::MapRead::[])";
@@ -3644,7 +3671,7 @@ val_t standard___collection___array___ArrayMap_____bra(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 520;
+  fra.me.line = 526;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMap_____bra;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3653,9 +3680,9 @@ val_t standard___collection___array___ArrayMap_____bra(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:523 */
+  /* ../lib/standard/collection/array.nit:529 */
   REGB0 = CALL_standard___collection___array___ArrayMap___index(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* ../lib/standard/collection/array.nit:524 */
+  /* ../lib/standard/collection/array.nit:530 */
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
@@ -3664,13 +3691,13 @@ val_t standard___collection___array___ArrayMap_____bra(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:236 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:524 */
+  /* ../lib/standard/collection/array.nit:530 */
   if (UNTAG_Bool(REGB1)) {
-    /* ../lib/standard/collection/array.nit:525 */
+    /* ../lib/standard/collection/array.nit:531 */
     REGB1 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 525);
+      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 531);
     }
     fra.me.REG[0] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
     /* ../lib/standard/collection/array.nit:280 */
@@ -3712,21 +3739,21 @@ val_t standard___collection___array___ArrayMap_____bra(val_t p0, val_t p1){
     if (UNTAG_Bool(REGB1)) {
       nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
     }
-    /* ../lib/standard/collection/array.nit:718 */
+    /* ../lib/standard/collection/array.nit:724 */
     fra.me.REG[0] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)];
     /* ../lib/standard/collection/array.nit:281 */
     goto label1;
     label1: while(0);
-    /* ../lib/standard/collection/array.nit:525 */
+    /* ../lib/standard/collection/array.nit:531 */
     REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 525);
+      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 531);
     }
     fra.me.REG[0] = CALL_standard___collection___abstract_collection___Couple___second(fra.me.REG[0])(fra.me.REG[0]);
     goto label2;
   } else {
-    /* ../lib/standard/collection/array.nit:527 */
-    nit_abort("Aborted", NULL, LOCATE_standard___collection___array, 527);
+    /* ../lib/standard/collection/array.nit:533 */
+    nit_abort("Aborted", NULL, LOCATE_standard___collection___array, 533);
   }
   label2: while(0);
   stack_frame_head = fra.me.prev;
@@ -3741,7 +3768,7 @@ void standard___collection___array___ArrayMap_____braeq(val_t p0, val_t p1, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 531;
+  fra.me.line = 537;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMap_____braeq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -3753,9 +3780,9 @@ void standard___collection___array___ArrayMap_____braeq(val_t p0, val_t p1, val_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ../lib/standard/collection/array.nit:534 */
+  /* ../lib/standard/collection/array.nit:540 */
   REGB0 = CALL_standard___collection___array___ArrayMap___index(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* ../lib/standard/collection/array.nit:535 */
+  /* ../lib/standard/collection/array.nit:541 */
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
@@ -3764,13 +3791,13 @@ void standard___collection___array___ArrayMap_____braeq(val_t p0, val_t p1, val_
   }
   /* ../lib/standard/kernel.nit:236 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:535 */
+  /* ../lib/standard/collection/array.nit:541 */
   if (UNTAG_Bool(REGB1)) {
-    /* ../lib/standard/collection/array.nit:536 */
+    /* ../lib/standard/collection/array.nit:542 */
     REGB1 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 536);
+      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 542);
     }
     fra.me.REG[3] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
     /* ../lib/standard/collection/array.nit:280 */
@@ -3812,23 +3839,23 @@ void standard___collection___array___ArrayMap_____braeq(val_t p0, val_t p1, val_
     if (UNTAG_Bool(REGB1)) {
       nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
     }
-    /* ../lib/standard/collection/array.nit:718 */
+    /* ../lib/standard/collection/array.nit:724 */
     fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
     /* ../lib/standard/collection/array.nit:281 */
     goto label1;
     label1: while(0);
-    /* ../lib/standard/collection/array.nit:536 */
+    /* ../lib/standard/collection/array.nit:542 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 536);
+      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 542);
     }
     CALL_standard___collection___abstract_collection___Couple___second__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
   } else {
-    /* ../lib/standard/collection/array.nit:538 */
+    /* ../lib/standard/collection/array.nit:544 */
     REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 538);
+      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 544);
     }
     fra.me.REG[0] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
     fra.me.REG[2] = NEW_Couple_standard___collection___abstract_collection___Couple___init(fra.me.REG[1], fra.me.REG[2]);
@@ -3844,18 +3871,18 @@ val_t standard___collection___array___ArrayMap___keys(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 542;
+  fra.me.line = 548;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMap___keys;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:542 */
+  /* ../lib/standard/collection/array.nit:548 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap_____atkeys(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "@keys", LOCATE_standard___collection___array, 542);
+    nit_abort("Uninitialized attribute %s", "@keys", LOCATE_standard___collection___array, 548);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArrayMap_____atkeys(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3867,7 +3894,7 @@ void standard___collection___array___ArrayMap___keys__eq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 542;
+  fra.me.line = 548;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMap___keys__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3876,7 +3903,7 @@ void standard___collection___array___ArrayMap___keys__eq(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:542 */
+  /* ../lib/standard/collection/array.nit:548 */
   ATTR_standard___collection___array___ArrayMap_____atkeys(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -3888,18 +3915,18 @@ val_t standard___collection___array___ArrayMap___values(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 543;
+  fra.me.line = 549;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMap___values;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:543 */
+  /* ../lib/standard/collection/array.nit:549 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap_____atvalues(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "@values", LOCATE_standard___collection___array, 543);
+    nit_abort("Uninitialized attribute %s", "@values", LOCATE_standard___collection___array, 549);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArrayMap_____atvalues(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3911,7 +3938,7 @@ void standard___collection___array___ArrayMap___values__eq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 543;
+  fra.me.line = 549;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMap___values__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3920,7 +3947,7 @@ void standard___collection___array___ArrayMap___values__eq(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:543 */
+  /* ../lib/standard/collection/array.nit:549 */
   ATTR_standard___collection___array___ArrayMap_____atvalues(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -3932,18 +3959,18 @@ val_t standard___collection___array___ArrayMap___length(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 545;
+  fra.me.line = 551;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMap___length;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:546 */
+  /* ../lib/standard/collection/array.nit:552 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 546);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 552);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:24 */
@@ -3953,7 +3980,7 @@ val_t standard___collection___array___ArrayMap___length(val_t p0){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* ../lib/standard/collection/array.nit:546 */
+  /* ../lib/standard/collection/array.nit:552 */
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -3966,18 +3993,18 @@ val_t standard___collection___array___ArrayMap___iterator(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 548;
+  fra.me.line = 554;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMap___iterator;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:548 */
+  /* ../lib/standard/collection/array.nit:554 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 548);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 554);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
   fra.me.REG[0] = CALL_standard___collection___abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
@@ -3994,18 +4021,18 @@ val_t standard___collection___array___ArrayMap___is_empty(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 550;
+  fra.me.line = 556;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMap___is_empty;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:550 */
+  /* ../lib/standard/collection/array.nit:556 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 550);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 556);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[0])(fra.me.REG[0]);
@@ -4021,18 +4048,18 @@ void standard___collection___array___ArrayMap___clear(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 552;
+  fra.me.line = 558;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMap___clear;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:552 */
+  /* ../lib/standard/collection/array.nit:558 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 552);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 558);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[0])(fra.me.REG[0]);
@@ -4047,7 +4074,7 @@ void standard___collection___array___ArrayMap___enlarge(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 554;
+  fra.me.line = 560;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMap___enlarge;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -4055,11 +4082,11 @@ void standard___collection___array___ArrayMap___enlarge(val_t p0, val_t p1){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/collection/array.nit:555 */
+  /* ../lib/standard/collection/array.nit:561 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 555);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 561);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
   CALL_standard___collection___array___AbstractArray___enlarge(fra.me.REG[0])(fra.me.REG[0], REGB0);
@@ -4075,7 +4102,7 @@ val_t standard___collection___array___ArrayMap___couple_at(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 557;
+  fra.me.line = 563;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMap___couple_at;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4084,9 +4111,9 @@ val_t standard___collection___array___ArrayMap___couple_at(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:559 */
+  /* ../lib/standard/collection/array.nit:565 */
   REGB0 = CALL_standard___collection___array___ArrayMap___index(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* ../lib/standard/collection/array.nit:560 */
+  /* ../lib/standard/collection/array.nit:566 */
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
@@ -4095,13 +4122,13 @@ val_t standard___collection___array___ArrayMap___couple_at(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:236 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:560 */
+  /* ../lib/standard/collection/array.nit:566 */
   if (UNTAG_Bool(REGB1)) {
-    /* ../lib/standard/collection/array.nit:561 */
+    /* ../lib/standard/collection/array.nit:567 */
     REGB1 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 561);
+      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 567);
     }
     fra.me.REG[0] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
     /* ../lib/standard/collection/array.nit:280 */
@@ -4143,15 +4170,15 @@ val_t standard___collection___array___ArrayMap___couple_at(val_t p0, val_t p1){
     if (UNTAG_Bool(REGB1)) {
       nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
     }
-    /* ../lib/standard/collection/array.nit:718 */
+    /* ../lib/standard/collection/array.nit:724 */
     fra.me.REG[0] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)];
     /* ../lib/standard/collection/array.nit:281 */
     goto label1;
     label1: while(0);
-    /* ../lib/standard/collection/array.nit:561 */
+    /* ../lib/standard/collection/array.nit:567 */
     goto label2;
   } else {
-    /* ../lib/standard/collection/array.nit:563 */
+    /* ../lib/standard/collection/array.nit:569 */
     fra.me.REG[0] = NIT_NULL;
     goto label2;
   }
@@ -4167,7 +4194,7 @@ void standard___collection___array___ArrayMap___remove_at_index(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 570;
+  fra.me.line = 576;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMap___remove_at_index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -4177,26 +4204,26 @@ void standard___collection___array___ArrayMap___remove_at_index(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/collection/array.nit:573 */
+  /* ../lib/standard/collection/array.nit:579 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 573);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 579);
   }
   fra.me.REG[1] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
   REGB1 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 573);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 579);
   }
   fra.me.REG[2] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
   fra.me.REG[2] = CALL_standard___collection___abstract_collection___SequenceRead___last(fra.me.REG[2])(fra.me.REG[2]);
   CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  /* ../lib/standard/collection/array.nit:574 */
+  /* ../lib/standard/collection/array.nit:580 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 574);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 580);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Sequence___pop(fra.me.REG[0])(fra.me.REG[0]);
@@ -4214,7 +4241,7 @@ val_t standard___collection___array___ArrayMap___index(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 580;
+  fra.me.line = 586;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMap___index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -4224,18 +4251,18 @@ val_t standard___collection___array___ArrayMap___index(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:584 */
+  /* ../lib/standard/collection/array.nit:590 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____last_index(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_last_index", LOCATE_standard___collection___array, 584);
+    nit_abort("Uninitialized attribute %s", "_last_index", LOCATE_standard___collection___array, 590);
   }
   REGB0 = ATTR_standard___collection___array___ArrayMap____last_index(fra.me.REG[0]);
-  /* ../lib/standard/collection/array.nit:585 */
+  /* ../lib/standard/collection/array.nit:591 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 585);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 591);
   }
   fra.me.REG[2] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:24 */
@@ -4252,12 +4279,12 @@ val_t standard___collection___array___ArrayMap___index(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:235 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:585 */
+  /* ../lib/standard/collection/array.nit:591 */
   if (UNTAG_Bool(REGB1)) {
     REGB1 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 585);
+      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 591);
     }
     fra.me.REG[2] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
     /* ../lib/standard/collection/array.nit:278 */
@@ -4301,15 +4328,15 @@ val_t standard___collection___array___ArrayMap___index(val_t p0, val_t p1){
     if (UNTAG_Bool(REGB2)) {
       nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
     }
-    /* ../lib/standard/collection/array.nit:718 */
+    /* ../lib/standard/collection/array.nit:724 */
     fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB1)];
     /* ../lib/standard/collection/array.nit:281 */
     goto label1;
     label1: while(0);
-    /* ../lib/standard/collection/array.nit:585 */
+    /* ../lib/standard/collection/array.nit:591 */
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 585);
+      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 591);
     }
     fra.me.REG[2] = CALL_standard___collection___abstract_collection___Couple___first(fra.me.REG[2])(fra.me.REG[2]);
     REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[2]));
@@ -4331,14 +4358,14 @@ val_t standard___collection___array___ArrayMap___index(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB1)) {
     goto label2;
   }
-  /* ../lib/standard/collection/array.nit:587 */
+  /* ../lib/standard/collection/array.nit:593 */
   REGB1 = TAG_Int(0);
-  /* ../lib/standard/collection/array.nit:588 */
+  /* ../lib/standard/collection/array.nit:594 */
   while(1) {
     REGB2 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 588);
+      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 594);
     }
     fra.me.REG[2] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
     /* ../lib/standard/collection/array.nit:24 */
@@ -4355,13 +4382,13 @@ val_t standard___collection___array___ArrayMap___index(val_t p0, val_t p1){
     }
     /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
-    /* ../lib/standard/collection/array.nit:588 */
+    /* ../lib/standard/collection/array.nit:594 */
     if (UNTAG_Bool(REGB2)) {
-      /* ../lib/standard/collection/array.nit:589 */
+      /* ../lib/standard/collection/array.nit:595 */
       REGB2 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB2)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 589);
+        nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 595);
       }
       fra.me.REG[2] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
       /* ../lib/standard/collection/array.nit:278 */
@@ -4405,15 +4432,15 @@ val_t standard___collection___array___ArrayMap___index(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB3)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB2)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label3;
       label3: while(0);
-      /* ../lib/standard/collection/array.nit:589 */
+      /* ../lib/standard/collection/array.nit:595 */
       REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB2)) {
-        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 589);
+        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 595);
       }
       fra.me.REG[2] = CALL_standard___collection___abstract_collection___Couple___first(fra.me.REG[2])(fra.me.REG[2]);
       REGB2 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[2]));
@@ -4429,29 +4456,29 @@ val_t standard___collection___array___ArrayMap___index(val_t p0, val_t p1){
         }
       }
       if (UNTAG_Bool(REGB2)) {
-        /* ../lib/standard/collection/array.nit:590 */
+        /* ../lib/standard/collection/array.nit:596 */
         ATTR_standard___collection___array___ArrayMap____last_index(fra.me.REG[0]) = REGB1;
-        /* ../lib/standard/collection/array.nit:591 */
+        /* ../lib/standard/collection/array.nit:597 */
         REGB0 = REGB1;
         goto label2;
       }
-      /* ../lib/standard/collection/array.nit:593 */
+      /* ../lib/standard/collection/array.nit:599 */
       REGB2 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB2));
-      /* ../lib/standard/collection/array.nit:593 */
+      /* ../lib/standard/collection/array.nit:599 */
       REGB1 = REGB2;
     } else {
-      /* ../lib/standard/collection/array.nit:588 */
+      /* ../lib/standard/collection/array.nit:594 */
       goto label4;
     }
   }
   label4: while(0);
-  /* ../lib/standard/collection/array.nit:595 */
+  /* ../lib/standard/collection/array.nit:601 */
   REGB1 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:239 */
   REGB1 = TAG_Int(-UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:595 */
+  /* ../lib/standard/collection/array.nit:601 */
   REGB0 = REGB1;
   goto label2;
   label2: while(0);
@@ -4460,13 +4487,13 @@ val_t standard___collection___array___ArrayMap___index(val_t p0, val_t p1){
 }
 static const char LOCATE_standard___collection___array___ArrayMap___init[] = "array::ArrayMap::init";
 void standard___collection___array___ArrayMap___init(val_t p0, int* init_table){
-  int itpos10 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___ArrayMap].i;
+  int itpos11 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___ArrayMap].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos10]) return;
+  if (init_table[itpos11]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 598;
+  fra.me.line = 604;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMap___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4474,11 +4501,11 @@ void standard___collection___array___ArrayMap___init(val_t p0, int* init_table){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:601 */
+  /* ../lib/standard/collection/array.nit:607 */
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
   ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos10] = 1;
+  init_table[itpos11] = 1;
   return;
 }
 static const char LOCATE_standard___collection___array___ArrayMapKeys___map[] = "array::ArrayMapKeys::map";
@@ -4488,18 +4515,18 @@ val_t standard___collection___array___ArrayMapKeys___map(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 607;
+  fra.me.line = 613;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapKeys___map;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:607 */
+  /* ../lib/standard/collection/array.nit:613 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMapKeys_____atmap(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "@map", LOCATE_standard___collection___array, 607);
+    nit_abort("Uninitialized attribute %s", "@map", LOCATE_standard___collection___array, 613);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArrayMapKeys_____atmap(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4511,7 +4538,7 @@ void standard___collection___array___ArrayMapKeys___map__eq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 607;
+  fra.me.line = 613;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapKeys___map__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4520,7 +4547,7 @@ void standard___collection___array___ArrayMapKeys___map__eq(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:607 */
+  /* ../lib/standard/collection/array.nit:613 */
   ATTR_standard___collection___array___ArrayMapKeys_____atmap(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -4533,7 +4560,7 @@ val_t standard___collection___array___ArrayMapKeys___count(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 609;
+  fra.me.line = 615;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapKeys___count;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4542,7 +4569,7 @@ val_t standard___collection___array___ArrayMapKeys___count(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:609 */
+  /* ../lib/standard/collection/array.nit:615 */
   REGB0 = CALL_standard___collection___abstract_collection___Collection___has(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   if (UNTAG_Bool(REGB0)) {
     REGB0 = TAG_Int(1);
@@ -4563,25 +4590,25 @@ val_t standard___collection___array___ArrayMapKeys___first(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 610;
+  fra.me.line = 616;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapKeys___first;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:610 */
+  /* ../lib/standard/collection/array.nit:616 */
   fra.me.REG[0] = CALL_standard___collection___array___ArrayMapKeys___map(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 610);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 616);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
   fra.me.REG[0] = CALL_standard___collection___abstract_collection___Collection___first(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 610);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 616);
   }
   fra.me.REG[0] = CALL_standard___collection___abstract_collection___Couple___first(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -4598,7 +4625,7 @@ val_t standard___collection___array___ArrayMapKeys___has(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 611;
+  fra.me.line = 617;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapKeys___has;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4607,7 +4634,7 @@ val_t standard___collection___array___ArrayMapKeys___has(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:611 */
+  /* ../lib/standard/collection/array.nit:617 */
   fra.me.REG[0] = CALL_standard___collection___array___ArrayMapKeys___map(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___array___ArrayMap___index(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   REGB1 = TAG_Int(0);
@@ -4618,7 +4645,7 @@ val_t standard___collection___array___ArrayMapKeys___has(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:236 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:611 */
+  /* ../lib/standard/collection/array.nit:617 */
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -4633,7 +4660,7 @@ val_t standard___collection___array___ArrayMapKeys___has_only(val_t p0, val_t p1
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 612;
+  fra.me.line = 618;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapKeys___has_only;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4642,7 +4669,7 @@ val_t standard___collection___array___ArrayMapKeys___has_only(val_t p0, val_t p1
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:612 */
+  /* ../lib/standard/collection/array.nit:618 */
   REGB0 = CALL_standard___collection___abstract_collection___Collection___has(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   if (UNTAG_Bool(REGB0)) {
     REGB0 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[0])(fra.me.REG[0]);
@@ -4652,7 +4679,7 @@ val_t standard___collection___array___ArrayMapKeys___has_only(val_t p0, val_t p1
     } else {
       /* ../lib/standard/kernel.nit:230 */
       REGB1 = TAG_Bool((REGB0)==(REGB1));
-      /* ../lib/standard/collection/array.nit:612 */
+      /* ../lib/standard/collection/array.nit:618 */
       REGB2 = REGB1;
     }
   } else {
@@ -4677,14 +4704,14 @@ val_t standard___collection___array___ArrayMapKeys___is_empty(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 613;
+  fra.me.line = 619;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapKeys___is_empty;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:613 */
+  /* ../lib/standard/collection/array.nit:619 */
   fra.me.REG[0] = CALL_standard___collection___array___ArrayMapKeys___map(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___abstract_collection___MapRead___is_empty(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -4699,14 +4726,14 @@ val_t standard___collection___array___ArrayMapKeys___length(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 614;
+  fra.me.line = 620;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapKeys___length;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:614 */
+  /* ../lib/standard/collection/array.nit:620 */
   fra.me.REG[0] = CALL_standard___collection___array___ArrayMapKeys___map(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___abstract_collection___MapRead___length(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -4720,14 +4747,14 @@ val_t standard___collection___array___ArrayMapKeys___iterator(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 615;
+  fra.me.line = 621;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapKeys___iterator;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:615 */
+  /* ../lib/standard/collection/array.nit:621 */
   fra.me.REG[0] = CALL_standard___collection___array___ArrayMapKeys___map(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_standard___collection___abstract_collection___MapRead___iterator(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = NEW_MapKeysIterator_standard___collection___abstract_collection___MapKeysIterator___init(fra.me.REG[0]);
@@ -4742,14 +4769,14 @@ void standard___collection___array___ArrayMapKeys___clear(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 616;
+  fra.me.line = 622;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapKeys___clear;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:616 */
+  /* ../lib/standard/collection/array.nit:622 */
   fra.me.REG[0] = CALL_standard___collection___array___ArrayMapKeys___map(fra.me.REG[0])(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Map___clear(fra.me.REG[0])(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4764,7 +4791,7 @@ void standard___collection___array___ArrayMapKeys___remove(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 617;
+  fra.me.line = 623;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapKeys___remove;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -4774,10 +4801,10 @@ void standard___collection___array___ArrayMapKeys___remove(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:619 */
+  /* ../lib/standard/collection/array.nit:625 */
   fra.me.REG[2] = CALL_standard___collection___array___ArrayMapKeys___map(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___array___ArrayMap___index(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  /* ../lib/standard/collection/array.nit:620 */
+  /* ../lib/standard/collection/array.nit:626 */
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
@@ -4786,7 +4813,7 @@ void standard___collection___array___ArrayMapKeys___remove(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:236 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:620 */
+  /* ../lib/standard/collection/array.nit:626 */
   if (UNTAG_Bool(REGB1)) {
     fra.me.REG[0] = CALL_standard___collection___array___ArrayMapKeys___map(fra.me.REG[0])(fra.me.REG[0]);
     CALL_standard___collection___array___ArrayMap___remove_at_index(fra.me.REG[0])(fra.me.REG[0], REGB0);
@@ -4800,7 +4827,7 @@ void standard___collection___array___ArrayMapKeys___remove_all(val_t p0, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 622;
+  fra.me.line = 628;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapKeys___remove_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4809,17 +4836,17 @@ void standard___collection___array___ArrayMapKeys___remove_all(val_t p0, val_t p
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:622 */
+  /* ../lib/standard/collection/array.nit:628 */
   CALL_standard___collection___abstract_collection___RemovableCollection___remove(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return;
 }
 static const char LOCATE_standard___collection___array___ArrayMapKeys___init[] = "array::ArrayMapKeys::init";
 void standard___collection___array___ArrayMapKeys___init(val_t p0, val_t p1, int* init_table){
-  int itpos11 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___ArrayMapKeys].i;
+  int itpos12 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___ArrayMapKeys].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos11]) return;
+  if (init_table[itpos12]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
   fra.me.line = 0;
@@ -4833,7 +4860,7 @@ void standard___collection___array___ArrayMapKeys___init(val_t p0, val_t p1, int
   fra.me.REG[1] = p1;
   ATTR_standard___collection___array___ArrayMapKeys_____atmap(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos11] = 1;
+  init_table[itpos12] = 1;
   return;
 }
 static const char LOCATE_standard___collection___array___ArrayMapValues___map[] = "array::ArrayMapValues::map";
@@ -4843,18 +4870,18 @@ val_t standard___collection___array___ArrayMapValues___map(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 627;
+  fra.me.line = 633;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapValues___map;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:627 */
+  /* ../lib/standard/collection/array.nit:633 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMapValues_____atmap(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "@map", LOCATE_standard___collection___array, 627);
+    nit_abort("Uninitialized attribute %s", "@map", LOCATE_standard___collection___array, 633);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArrayMapValues_____atmap(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -4866,7 +4893,7 @@ void standard___collection___array___ArrayMapValues___map__eq(val_t p0, val_t p1
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 627;
+  fra.me.line = 633;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapValues___map__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4875,7 +4902,7 @@ void standard___collection___array___ArrayMapValues___map__eq(val_t p0, val_t p1
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:627 */
+  /* ../lib/standard/collection/array.nit:633 */
   ATTR_standard___collection___array___ArrayMapValues_____atmap(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -4887,25 +4914,25 @@ val_t standard___collection___array___ArrayMapValues___first(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 629;
+  fra.me.line = 635;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapValues___first;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:629 */
+  /* ../lib/standard/collection/array.nit:635 */
   fra.me.REG[0] = CALL_standard___collection___array___ArrayMapValues___map(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 629);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 635);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
   fra.me.REG[0] = CALL_standard___collection___abstract_collection___Collection___first(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 629);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 635);
   }
   fra.me.REG[0] = CALL_standard___collection___abstract_collection___Couple___second(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -4920,14 +4947,14 @@ val_t standard___collection___array___ArrayMapValues___is_empty(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 630;
+  fra.me.line = 636;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapValues___is_empty;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:630 */
+  /* ../lib/standard/collection/array.nit:636 */
   fra.me.REG[0] = CALL_standard___collection___array___ArrayMapValues___map(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___abstract_collection___MapRead___is_empty(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -4942,14 +4969,14 @@ val_t standard___collection___array___ArrayMapValues___length(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 631;
+  fra.me.line = 637;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapValues___length;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:631 */
+  /* ../lib/standard/collection/array.nit:637 */
   fra.me.REG[0] = CALL_standard___collection___array___ArrayMapValues___map(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___abstract_collection___MapRead___length(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -4963,14 +4990,14 @@ val_t standard___collection___array___ArrayMapValues___iterator(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 632;
+  fra.me.line = 638;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapValues___iterator;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:632 */
+  /* ../lib/standard/collection/array.nit:638 */
   fra.me.REG[0] = CALL_standard___collection___array___ArrayMapValues___map(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_standard___collection___abstract_collection___MapRead___iterator(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = NEW_MapValuesIterator_standard___collection___abstract_collection___MapValuesIterator___init(fra.me.REG[0]);
@@ -4988,7 +5015,7 @@ val_t standard___collection___array___ArrayMapValues___has(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 634;
+  fra.me.line = 640;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapValues___has;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4999,12 +5026,12 @@ val_t standard___collection___array___ArrayMapValues___has(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:637 */
+  /* ../lib/standard/collection/array.nit:643 */
   fra.me.REG[0] = CALL_standard___collection___array___ArrayMapValues___map(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 637);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 643);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:269 */
@@ -5041,9 +5068,9 @@ val_t standard___collection___array___ArrayMapValues___has(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
-      /* ../lib/standard/collection/array.nit:637 */
+      /* ../lib/standard/collection/array.nit:643 */
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___Couple___second(fra.me.REG[3])(fra.me.REG[3]);
       REGB1 = TAG_Bool(IS_EQUAL_NN(fra.me.REG[3],fra.me.REG[1]));
       if (UNTAG_Bool(REGB1)) {
@@ -5073,7 +5100,7 @@ val_t standard___collection___array___ArrayMapValues___has(val_t p0, val_t p1){
     }
   }
   label2: while(0);
-  /* ../lib/standard/collection/array.nit:638 */
+  /* ../lib/standard/collection/array.nit:644 */
   REGB0 = TAG_Bool(0);
   REGB1 = REGB0;
   goto label1;
@@ -5090,7 +5117,7 @@ val_t standard___collection___array___ArrayMapValues___has_only(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 641;
+  fra.me.line = 647;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapValues___has_only;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5101,12 +5128,12 @@ val_t standard___collection___array___ArrayMapValues___has_only(val_t p0, val_t
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:644 */
+  /* ../lib/standard/collection/array.nit:650 */
   fra.me.REG[0] = CALL_standard___collection___array___ArrayMapValues___map(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 644);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 650);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:269 */
@@ -5143,9 +5170,9 @@ val_t standard___collection___array___ArrayMapValues___has_only(val_t p0, val_t
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
-      /* ../lib/standard/collection/array.nit:644 */
+      /* ../lib/standard/collection/array.nit:650 */
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___Couple___second(fra.me.REG[3])(fra.me.REG[3]);
       REGB1 = TAG_Bool(IS_EQUAL_NN(fra.me.REG[3],fra.me.REG[1]));
       if (UNTAG_Bool(REGB1)) {
@@ -5176,7 +5203,7 @@ val_t standard___collection___array___ArrayMapValues___has_only(val_t p0, val_t
     }
   }
   label2: while(0);
-  /* ../lib/standard/collection/array.nit:645 */
+  /* ../lib/standard/collection/array.nit:651 */
   REGB0 = TAG_Bool(1);
   REGB1 = REGB0;
   goto label1;
@@ -5194,7 +5221,7 @@ val_t standard___collection___array___ArrayMapValues___count(val_t p0, val_t p1)
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 648;
+  fra.me.line = 654;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapValues___count;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5205,14 +5232,14 @@ val_t standard___collection___array___ArrayMapValues___count(val_t p0, val_t p1)
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:651 */
+  /* ../lib/standard/collection/array.nit:657 */
   REGB0 = TAG_Int(0);
-  /* ../lib/standard/collection/array.nit:652 */
+  /* ../lib/standard/collection/array.nit:658 */
   fra.me.REG[0] = CALL_standard___collection___array___ArrayMapValues___map(fra.me.REG[0])(fra.me.REG[0]);
   REGB1 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 652);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 658);
   }
   fra.me.REG[0] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:269 */
@@ -5249,9 +5276,9 @@ val_t standard___collection___array___ArrayMapValues___count(val_t p0, val_t p1)
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB1)];
-      /* ../lib/standard/collection/array.nit:652 */
+      /* ../lib/standard/collection/array.nit:658 */
       fra.me.REG[3] = CALL_standard___collection___abstract_collection___Couple___second(fra.me.REG[3])(fra.me.REG[3]);
       REGB2 = TAG_Bool(IS_EQUAL_NN(fra.me.REG[3],fra.me.REG[1]));
       if (UNTAG_Bool(REGB2)) {
@@ -5269,7 +5296,7 @@ val_t standard___collection___array___ArrayMapValues___count(val_t p0, val_t p1)
         REGB2 = TAG_Int(1);
         /* ../lib/standard/kernel.nit:238 */
         REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-        /* ../lib/standard/collection/array.nit:652 */
+        /* ../lib/standard/collection/array.nit:658 */
         REGB0 = REGB2;
       }
       /* ../lib/standard/collection/array.nit:274 */
@@ -5284,7 +5311,7 @@ val_t standard___collection___array___ArrayMapValues___count(val_t p0, val_t p1)
     }
   }
   label1: while(0);
-  /* ../lib/standard/collection/array.nit:653 */
+  /* ../lib/standard/collection/array.nit:659 */
   goto label2;
   label2: while(0);
   stack_frame_head = fra.me.prev;
@@ -5296,14 +5323,14 @@ void standard___collection___array___ArrayMapValues___clear(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 656;
+  fra.me.line = 662;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapValues___clear;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:656 */
+  /* ../lib/standard/collection/array.nit:662 */
   fra.me.REG[0] = CALL_standard___collection___array___ArrayMapValues___map(fra.me.REG[0])(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Map___clear(fra.me.REG[0])(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -5319,7 +5346,7 @@ void standard___collection___array___ArrayMapValues___remove(val_t p0, val_t p1)
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 658;
+  fra.me.line = 664;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapValues___remove;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -5329,13 +5356,13 @@ void standard___collection___array___ArrayMapValues___remove(val_t p0, val_t p1)
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:660 */
+  /* ../lib/standard/collection/array.nit:666 */
   fra.me.REG[0] = CALL_standard___collection___array___ArrayMapValues___map(fra.me.REG[0])(fra.me.REG[0]);
-  /* ../lib/standard/collection/array.nit:661 */
+  /* ../lib/standard/collection/array.nit:667 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 661);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 667);
   }
   fra.me.REG[2] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:24 */
@@ -5345,11 +5372,11 @@ void standard___collection___array___ArrayMapValues___remove(val_t p0, val_t p1)
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
-  /* ../lib/standard/collection/array.nit:661 */
+  /* ../lib/standard/collection/array.nit:667 */
   REGB1 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:240 */
   REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:662 */
+  /* ../lib/standard/collection/array.nit:668 */
   while(1) {
     REGB0 = TAG_Int(0);
     REGB2 = TAG_Bool(VAL_ISA(REGB0, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
@@ -5359,13 +5386,13 @@ void standard___collection___array___ArrayMapValues___remove(val_t p0, val_t p1)
     }
     /* ../lib/standard/kernel.nit:236 */
     REGB0 = TAG_Bool(UNTAG_Int(REGB1)>=UNTAG_Int(REGB0));
-    /* ../lib/standard/collection/array.nit:662 */
+    /* ../lib/standard/collection/array.nit:668 */
     if (UNTAG_Bool(REGB0)) {
-      /* ../lib/standard/collection/array.nit:663 */
+      /* ../lib/standard/collection/array.nit:669 */
       REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 663);
+        nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 669);
       }
       fra.me.REG[2] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
       /* ../lib/standard/collection/array.nit:278 */
@@ -5409,15 +5436,15 @@ void standard___collection___array___ArrayMapValues___remove(val_t p0, val_t p1)
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label1;
       label1: while(0);
-      /* ../lib/standard/collection/array.nit:663 */
+      /* ../lib/standard/collection/array.nit:669 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 663);
+        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 669);
       }
       fra.me.REG[2] = CALL_standard___collection___abstract_collection___Couple___second(fra.me.REG[2])(fra.me.REG[2]);
       REGB0 = TAG_Bool(IS_EQUAL_NN(fra.me.REG[2],fra.me.REG[1]));
@@ -5433,19 +5460,19 @@ void standard___collection___array___ArrayMapValues___remove(val_t p0, val_t p1)
         }
       }
       if (UNTAG_Bool(REGB0)) {
-        /* ../lib/standard/collection/array.nit:664 */
+        /* ../lib/standard/collection/array.nit:670 */
         CALL_standard___collection___array___ArrayMap___remove_at_index(fra.me.REG[0])(fra.me.REG[0], REGB1);
-        /* ../lib/standard/collection/array.nit:665 */
+        /* ../lib/standard/collection/array.nit:671 */
         goto label2;
       }
-      /* ../lib/standard/collection/array.nit:667 */
+      /* ../lib/standard/collection/array.nit:673 */
       REGB0 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:240 */
       REGB0 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB0));
-      /* ../lib/standard/collection/array.nit:667 */
+      /* ../lib/standard/collection/array.nit:673 */
       REGB1 = REGB0;
     } else {
-      /* ../lib/standard/collection/array.nit:662 */
+      /* ../lib/standard/collection/array.nit:668 */
       goto label3;
     }
   }
@@ -5464,7 +5491,7 @@ void standard___collection___array___ArrayMapValues___remove_all(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 671;
+  fra.me.line = 677;
   fra.me.meth = LOCATE_standard___collection___array___ArrayMapValues___remove_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -5474,13 +5501,13 @@ void standard___collection___array___ArrayMapValues___remove_all(val_t p0, val_t
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:673 */
+  /* ../lib/standard/collection/array.nit:679 */
   fra.me.REG[0] = CALL_standard___collection___array___ArrayMapValues___map(fra.me.REG[0])(fra.me.REG[0]);
-  /* ../lib/standard/collection/array.nit:674 */
+  /* ../lib/standard/collection/array.nit:680 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 674);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 680);
   }
   fra.me.REG[2] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:24 */
@@ -5490,11 +5517,11 @@ void standard___collection___array___ArrayMapValues___remove_all(val_t p0, val_t
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
-  /* ../lib/standard/collection/array.nit:674 */
+  /* ../lib/standard/collection/array.nit:680 */
   REGB1 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:240 */
   REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/array.nit:675 */
+  /* ../lib/standard/collection/array.nit:681 */
   while(1) {
     REGB0 = TAG_Int(0);
     REGB2 = TAG_Bool(VAL_ISA(REGB0, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
@@ -5504,13 +5531,13 @@ void standard___collection___array___ArrayMapValues___remove_all(val_t p0, val_t
     }
     /* ../lib/standard/kernel.nit:236 */
     REGB0 = TAG_Bool(UNTAG_Int(REGB1)>=UNTAG_Int(REGB0));
-    /* ../lib/standard/collection/array.nit:675 */
+    /* ../lib/standard/collection/array.nit:681 */
     if (UNTAG_Bool(REGB0)) {
-      /* ../lib/standard/collection/array.nit:676 */
+      /* ../lib/standard/collection/array.nit:682 */
       REGB0 = TAG_Bool(ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 676);
+        nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___collection___array, 682);
       }
       fra.me.REG[2] = ATTR_standard___collection___array___ArrayMap____items(fra.me.REG[0]);
       /* ../lib/standard/collection/array.nit:278 */
@@ -5554,15 +5581,15 @@ void standard___collection___array___ArrayMapValues___remove_all(val_t p0, val_t
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label1;
       label1: while(0);
-      /* ../lib/standard/collection/array.nit:676 */
+      /* ../lib/standard/collection/array.nit:682 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 676);
+        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 682);
       }
       fra.me.REG[2] = CALL_standard___collection___abstract_collection___Couple___second(fra.me.REG[2])(fra.me.REG[2]);
       REGB0 = TAG_Bool(IS_EQUAL_NN(fra.me.REG[2],fra.me.REG[1]));
@@ -5578,17 +5605,17 @@ void standard___collection___array___ArrayMapValues___remove_all(val_t p0, val_t
         }
       }
       if (UNTAG_Bool(REGB0)) {
-        /* ../lib/standard/collection/array.nit:677 */
+        /* ../lib/standard/collection/array.nit:683 */
         CALL_standard___collection___array___ArrayMap___remove_at_index(fra.me.REG[0])(fra.me.REG[0], REGB1);
       }
-      /* ../lib/standard/collection/array.nit:679 */
+      /* ../lib/standard/collection/array.nit:685 */
       REGB0 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:240 */
       REGB0 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB0));
-      /* ../lib/standard/collection/array.nit:679 */
+      /* ../lib/standard/collection/array.nit:685 */
       REGB1 = REGB0;
     } else {
-      /* ../lib/standard/collection/array.nit:675 */
+      /* ../lib/standard/collection/array.nit:681 */
       goto label2;
     }
   }
@@ -5598,10 +5625,10 @@ void standard___collection___array___ArrayMapValues___remove_all(val_t p0, val_t
 }
 static const char LOCATE_standard___collection___array___ArrayMapValues___init[] = "array::ArrayMapValues::init";
 void standard___collection___array___ArrayMapValues___init(val_t p0, val_t p1, int* init_table){
-  int itpos12 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___ArrayMapValues].i;
+  int itpos13 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___array___ArrayMapValues].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos12]) return;
+  if (init_table[itpos13]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
   fra.me.line = 0;
@@ -5615,7 +5642,7 @@ void standard___collection___array___ArrayMapValues___init(val_t p0, val_t p1, i
   fra.me.REG[1] = p1;
   ATTR_standard___collection___array___ArrayMapValues_____atmap(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos12] = 1;
+  init_table[itpos13] = 1;
   return;
 }
 static const char LOCATE_standard___collection___array___Iterator___to_a[] = "array::Iterator::to_a";
@@ -5625,7 +5652,7 @@ val_t standard___collection___array___Iterator___to_a(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 688;
+  fra.me.line = 694;
   fra.me.meth = LOCATE_standard___collection___array___Iterator___to_a;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -5634,24 +5661,24 @@ val_t standard___collection___array___Iterator___to_a(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:691 */
+  /* ../lib/standard/collection/array.nit:697 */
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
-  /* ../lib/standard/collection/array.nit:692 */
+  /* ../lib/standard/collection/array.nit:698 */
   while(1) {
     REGB0 = CALL_standard___collection___abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
     if (UNTAG_Bool(REGB0)) {
-      /* ../lib/standard/collection/array.nit:693 */
+      /* ../lib/standard/collection/array.nit:699 */
       fra.me.REG[2] = CALL_standard___collection___abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      /* ../lib/standard/collection/array.nit:694 */
+      /* ../lib/standard/collection/array.nit:700 */
       CALL_standard___collection___abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
     } else {
-      /* ../lib/standard/collection/array.nit:692 */
+      /* ../lib/standard/collection/array.nit:698 */
       goto label1;
     }
   }
   label1: while(0);
-  /* ../lib/standard/collection/array.nit:696 */
+  /* ../lib/standard/collection/array.nit:702 */
   goto label2;
   label2: while(0);
   stack_frame_head = fra.me.prev;
@@ -5663,14 +5690,14 @@ val_t standard___collection___array___Collection___to_a(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 701;
+  fra.me.line = 707;
   fra.me.meth = LOCATE_standard___collection___array___Collection___to_a;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/array.nit:704 */
+  /* ../lib/standard/collection/array.nit:710 */
   fra.me.REG[0] = CALL_standard___collection___abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_standard___collection___array___Iterator___to_a(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -5685,7 +5712,7 @@ val_t standard___collection___array___ArrayCapable___calloc_array(val_t p0, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 712;
+  fra.me.line = 718;
   fra.me.meth = LOCATE_standard___collection___array___ArrayCapable___calloc_array;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -5693,7 +5720,7 @@ val_t standard___collection___array___ArrayCapable___calloc_array(val_t p0, val_
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/collection/array.nit:712 */
+  /* ../lib/standard/collection/array.nit:718 */
   fra.me.REG[0] = NEW_NativeArray(UNTAG_Int(REGB0), sizeof(val_t));
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -5705,7 +5732,7 @@ val_t standard___collection___array___NativeArray_____bra(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 718;
+  fra.me.line = 724;
   fra.me.meth = LOCATE_standard___collection___array___NativeArray_____bra;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -5713,7 +5740,7 @@ val_t standard___collection___array___NativeArray_____bra(val_t p0, val_t p1){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[0] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)];
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -5725,7 +5752,7 @@ void standard___collection___array___NativeArray_____braeq(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 719;
+  fra.me.line = 725;
   fra.me.meth = LOCATE_standard___collection___array___NativeArray_____braeq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5735,7 +5762,7 @@ void standard___collection___array___NativeArray_____braeq(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   REGB0 = p1;
   fra.me.REG[1] = p2;
-  /* ../lib/standard/collection/array.nit:719 */
+  /* ../lib/standard/collection/array.nit:725 */
   ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)]=fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -5747,7 +5774,7 @@ void standard___collection___array___NativeArray___copy_to(val_t p0, val_t p1, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___array;
-  fra.me.line = 720;
+  fra.me.line = 726;
   fra.me.meth = LOCATE_standard___collection___array___NativeArray___copy_to;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5757,7 +5784,7 @@ void standard___collection___array___NativeArray___copy_to(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   REGB0 = p2;
-  /* ../lib/standard/collection/array.nit:720 */
+  /* ../lib/standard/collection/array.nit:726 */
   (void)memcpy(((Nit_NativeArray )fra.me.REG[1])->val, ((Nit_NativeArray)fra.me.REG[0])->val, UNTAG_Int(REGB0)*sizeof(val_t));
   stack_frame_head = fra.me.prev;
   return;
index ba91e7f..8e3144c 100644 (file)
@@ -49,13 +49,14 @@ extern const int SFT_standard___collection___array[];
 #define ATTR_standard___collection___array___Array____capacity(recv) ATTR(recv, (SFT_standard___collection___array[9] + 1))
 #define INIT_TABLE_POS_standard___collection___array___Array (SFT_standard___collection___array[10] + 0)
 #define CALL_standard___collection___array___Array___init(recv) ((standard___collection___array___Array___init_t)CALL((recv), (SFT_standard___collection___array[10] + 1)))
-#define CALL_standard___collection___array___Array___with_items(recv) ((standard___collection___array___Array___with_items_t)CALL((recv), (SFT_standard___collection___array[10] + 2)))
-#define CALL_standard___collection___array___Array___with_capacity(recv) ((standard___collection___array___Array___with_capacity_t)CALL((recv), (SFT_standard___collection___array[10] + 3)))
-#define CALL_standard___collection___array___Array___filled_with(recv) ((standard___collection___array___Array___filled_with_t)CALL((recv), (SFT_standard___collection___array[10] + 4)))
-#define CALL_standard___collection___array___Array___with_native(recv) ((standard___collection___array___Array___with_native_t)CALL((recv), (SFT_standard___collection___array[10] + 5)))
-#define CALL_standard___collection___array___Array___intern_items(recv) ((standard___collection___array___Array___intern_items_t)CALL((recv), (SFT_standard___collection___array[10] + 6)))
-#define CALL_standard___collection___array___Array___sort(recv) ((standard___collection___array___Array___sort_t)CALL((recv), (SFT_standard___collection___array[10] + 7)))
-#define CALL_standard___collection___array___Array___sub_sort(recv) ((standard___collection___array___Array___sub_sort_t)CALL((recv), (SFT_standard___collection___array[10] + 8)))
+#define CALL_standard___collection___array___Array___from(recv) ((standard___collection___array___Array___from_t)CALL((recv), (SFT_standard___collection___array[10] + 2)))
+#define CALL_standard___collection___array___Array___with_items(recv) ((standard___collection___array___Array___with_items_t)CALL((recv), (SFT_standard___collection___array[10] + 3)))
+#define CALL_standard___collection___array___Array___with_capacity(recv) ((standard___collection___array___Array___with_capacity_t)CALL((recv), (SFT_standard___collection___array[10] + 4)))
+#define CALL_standard___collection___array___Array___filled_with(recv) ((standard___collection___array___Array___filled_with_t)CALL((recv), (SFT_standard___collection___array[10] + 5)))
+#define CALL_standard___collection___array___Array___with_native(recv) ((standard___collection___array___Array___with_native_t)CALL((recv), (SFT_standard___collection___array[10] + 6)))
+#define CALL_standard___collection___array___Array___intern_items(recv) ((standard___collection___array___Array___intern_items_t)CALL((recv), (SFT_standard___collection___array[10] + 7)))
+#define CALL_standard___collection___array___Array___sort(recv) ((standard___collection___array___Array___sort_t)CALL((recv), (SFT_standard___collection___array[10] + 8)))
+#define CALL_standard___collection___array___Array___sub_sort(recv) ((standard___collection___array___Array___sub_sort_t)CALL((recv), (SFT_standard___collection___array[10] + 9)))
 #define ID_standard___collection___array___ArrayIterator (SFT_standard___collection___array[11])
 #define COLOR_standard___collection___array___ArrayIterator (SFT_standard___collection___array[12])
 #define ATTR_standard___collection___array___ArrayIterator____index(recv) ATTR(recv, (SFT_standard___collection___array[13] + 0))
@@ -184,6 +185,9 @@ typedef void (*standard___collection___array___Array___enlarge_t)(val_t p0, val_
 void standard___collection___array___Array___init(val_t p0, int* init_table);
 typedef void (*standard___collection___array___Array___init_t)(val_t p0, int* init_table);
 val_t NEW_Array_standard___collection___array___Array___init();
+void standard___collection___array___Array___from(val_t p0, val_t p1, int* init_table);
+typedef void (*standard___collection___array___Array___from_t)(val_t p0, val_t p1, int* init_table);
+val_t NEW_Array_standard___collection___array___Array___from(val_t p0);
 void standard___collection___array___Array___with_items(val_t p0, val_t p1, int* init_table);
 typedef void (*standard___collection___array___Array___with_items_t)(val_t p0, val_t p1, int* init_table);
 val_t NEW_Array_standard___collection___array___Array___with_items(val_t p0);
index 452ecb9..2a53901 100644 (file)
@@ -133,7 +133,7 @@ val_t standard___collection___hash_collection___HashCollection___node_at_idx(val
   if (UNTAG_Bool(REGB1)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___hash_collection, 59);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[0] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)];
   /* ../lib/standard/collection/hash_collection.nit:60 */
   while(1) {
@@ -250,7 +250,7 @@ void standard___collection___hash_collection___HashCollection___store(val_t p0,
   if (UNTAG_Bool(REGB1)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___hash_collection, 84);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
   /* ../lib/standard/collection/hash_collection.nit:85 */
   fra.me.REG[3] = ATTR_standard___collection___hash_collection___HashCollection____array(fra.me.REG[0]);
@@ -258,7 +258,7 @@ void standard___collection___hash_collection___HashCollection___store(val_t p0,
   if (UNTAG_Bool(REGB1)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___hash_collection, 85);
   }
-  /* ../lib/standard/collection/array.nit:719 */
+  /* ../lib/standard/collection/array.nit:725 */
   ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)]=fra.me.REG[1];
   /* ../lib/standard/collection/hash_collection.nit:86 */
   ATTR_standard___collection___hash_collection___HashNode____next_in_bucklet(fra.me.REG[1]) = fra.me.REG[2];
@@ -466,7 +466,7 @@ void standard___collection___hash_collection___HashCollection___remove_node(val_
     if (UNTAG_Bool(REGB2)) {
       nit_abort("Reciever is null", NULL, LOCATE_standard___collection___hash_collection, 129);
     }
-    /* ../lib/standard/collection/array.nit:719 */
+    /* ../lib/standard/collection/array.nit:725 */
     ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB0)]=fra.me.REG[3];
   }
   /* ../lib/standard/collection/hash_collection.nit:131 */
@@ -538,7 +538,7 @@ void standard___collection___hash_collection___HashCollection___raz(val_t p0){
       if (UNTAG_Bool(REGB0)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___hash_collection, 143);
       }
-      /* ../lib/standard/collection/array.nit:719 */
+      /* ../lib/standard/collection/array.nit:725 */
       ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB1)]=NIT_NULL;
       /* ../lib/standard/collection/hash_collection.nit:144 */
       REGB0 = TAG_Int(1);
@@ -645,7 +645,7 @@ void standard___collection___hash_collection___HashCollection___enlarge(val_t p0
   ATTR_standard___collection___hash_collection___HashCollection____capacity(fra.me.REG[0]) = REGB0;
   /* ../lib/standard/collection/hash_collection.nit:160 */
   ATTR_standard___collection___hash_collection___HashCollection____last_accessed_key(fra.me.REG[0]) = NIT_NULL;
-  /* ../lib/standard/collection/array.nit:712 */
+  /* ../lib/standard/collection/array.nit:718 */
   fra.me.REG[1] = NEW_NativeArray(UNTAG_Int(REGB0), sizeof(val_t));
   /* ../lib/standard/collection/hash_collection.nit:164 */
   ATTR_standard___collection___hash_collection___HashCollection____array(fra.me.REG[0]) = fra.me.REG[1];
@@ -665,7 +665,7 @@ void standard___collection___hash_collection___HashCollection___enlarge(val_t p0
     REGB0 = TAG_Bool(UNTAG_Int(REGB2)>=UNTAG_Int(REGB0));
     /* ../lib/standard/collection/hash_collection.nit:168 */
     if (UNTAG_Bool(REGB0)) {
-      /* ../lib/standard/collection/array.nit:719 */
+      /* ../lib/standard/collection/array.nit:725 */
       ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB2)]=NIT_NULL;
       /* ../lib/standard/collection/hash_collection.nit:170 */
       REGB0 = TAG_Int(1);
@@ -723,9 +723,9 @@ void standard___collection___hash_collection___HashCollection___enlarge(val_t p0
       }
       fra.me.REG[3] = ATTR_standard___collection___hash_collection___HashNode____key(fra.me.REG[2]);
       REGB1 = CALL_standard___collection___hash_collection___HashCollection___index_at(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[3]);
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB1)];
-      /* ../lib/standard/collection/array.nit:719 */
+      /* ../lib/standard/collection/array.nit:725 */
       ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB1)]=fra.me.REG[2];
       /* ../lib/standard/collection/hash_collection.nit:182 */
       ATTR_standard___collection___hash_collection___HashNode____next_in_bucklet(fra.me.REG[2]) = fra.me.REG[3];
@@ -2633,15 +2633,40 @@ void standard___collection___hash_collection___HashSet___init(val_t p0, int* ini
   init_table[itpos7] = 1;
   return;
 }
+static const char LOCATE_standard___collection___hash_collection___HashSet___from[] = "hash_collection::HashSet::from";
+void standard___collection___hash_collection___HashSet___from(val_t p0, val_t p1, int* init_table){
+  int itpos8 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___hash_collection___HashSet].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  if (init_table[itpos8]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___collection___hash_collection;
+  fra.me.line = 449;
+  fra.me.meth = LOCATE_standard___collection___hash_collection___HashSet___from;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ../lib/standard/collection/hash_collection.nit:451 */
+  CALL_standard___collection___hash_collection___HashSet___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ../lib/standard/collection/hash_collection.nit:452 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add_all(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos8] = 1;
+  return;
+}
 static const char LOCATE_standard___collection___hash_collection___HashSetNode___init[] = "hash_collection::HashSetNode::init";
 void standard___collection___hash_collection___HashSetNode___init(val_t p0, val_t p1, int* init_table){
-  int itpos8 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___hash_collection___HashSetNode].i;
+  int itpos9 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___hash_collection___HashSetNode].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t tmp;
-  if (init_table[itpos8]) return;
+  if (init_table[itpos9]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___hash_collection;
-  fra.me.line = 454;
+  fra.me.line = 460;
   fra.me.meth = LOCATE_standard___collection___hash_collection___HashSetNode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -2652,14 +2677,14 @@ void standard___collection___hash_collection___HashSetNode___init(val_t p0, val_
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/hash_collection.nit:454 */
+  /* ../lib/standard/collection/hash_collection.nit:460 */
   fra.me.REG[2] = fra.me.REG[0];
   fra.me.REG[3] = fra.me.REG[1];
   CALL_standard___collection___hash_collection___HashNode___init(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], init_table);
-  /* ../lib/standard/collection/hash_collection.nit:456 */
+  /* ../lib/standard/collection/hash_collection.nit:462 */
   ATTR_standard___collection___hash_collection___HashNode____key(fra.me.REG[2]) = fra.me.REG[3];
   stack_frame_head = fra.me.prev;
-  init_table[itpos8] = 1;
+  init_table[itpos9] = 1;
   return;
 }
 static const char LOCATE_standard___collection___hash_collection___HashSetIterator___is_ok[] = "hash_collection::HashSetIterator::(abstract_collection::Iterator::is_ok)";
@@ -2670,14 +2695,14 @@ val_t standard___collection___hash_collection___HashSetIterator___is_ok(val_t p0
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___hash_collection;
-  fra.me.line = 462;
+  fra.me.line = 468;
   fra.me.meth = LOCATE_standard___collection___hash_collection___HashSetIterator___is_ok;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/hash_collection.nit:462 */
+  /* ../lib/standard/collection/hash_collection.nit:468 */
   fra.me.REG[0] = ATTR_standard___collection___hash_collection___HashSetIterator____node(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -2704,29 +2729,29 @@ val_t standard___collection___hash_collection___HashSetIterator___item(val_t p0)
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___hash_collection;
-  fra.me.line = 464;
+  fra.me.line = 470;
   fra.me.meth = LOCATE_standard___collection___hash_collection___HashSetIterator___item;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/hash_collection.nit:466 */
+  /* ../lib/standard/collection/hash_collection.nit:472 */
   REGB0 = CALL_standard___collection___abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_standard___collection___hash_collection, 466);
+    nit_abort("Assert failed", NULL, LOCATE_standard___collection___hash_collection, 472);
   }
-  /* ../lib/standard/collection/hash_collection.nit:467 */
+  /* ../lib/standard/collection/hash_collection.nit:473 */
   fra.me.REG[0] = ATTR_standard___collection___hash_collection___HashSetIterator____node(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___hash_collection, 467);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___hash_collection, 473);
   }
   REGB0 = TAG_Bool(ATTR_standard___collection___hash_collection___HashNode____key(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_key", LOCATE_standard___collection___hash_collection, 467);
+    nit_abort("Uninitialized attribute %s", "_key", LOCATE_standard___collection___hash_collection, 473);
   }
   fra.me.REG[0] = ATTR_standard___collection___hash_collection___HashNode____key(fra.me.REG[0]);
   goto label1;
@@ -2741,7 +2766,7 @@ void standard___collection___hash_collection___HashSetIterator___next(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___hash_collection;
-  fra.me.line = 470;
+  fra.me.line = 476;
   fra.me.meth = LOCATE_standard___collection___hash_collection___HashSetIterator___next;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2749,17 +2774,17 @@ void standard___collection___hash_collection___HashSetIterator___next(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/hash_collection.nit:472 */
+  /* ../lib/standard/collection/hash_collection.nit:478 */
   REGB0 = CALL_standard___collection___abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_standard___collection___hash_collection, 472);
+    nit_abort("Assert failed", NULL, LOCATE_standard___collection___hash_collection, 478);
   }
-  /* ../lib/standard/collection/hash_collection.nit:473 */
+  /* ../lib/standard/collection/hash_collection.nit:479 */
   fra.me.REG[1] = ATTR_standard___collection___hash_collection___HashSetIterator____node(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___hash_collection, 473);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___hash_collection, 479);
   }
   fra.me.REG[1] = ATTR_standard___collection___hash_collection___HashNode____next_item(fra.me.REG[1]);
   ATTR_standard___collection___hash_collection___HashSetIterator____node(fra.me.REG[0]) = fra.me.REG[1];
@@ -2768,13 +2793,13 @@ void standard___collection___hash_collection___HashSetIterator___next(val_t p0){
 }
 static const char LOCATE_standard___collection___hash_collection___HashSetIterator___init[] = "hash_collection::HashSetIterator::init";
 void standard___collection___hash_collection___HashSetIterator___init(val_t p0, val_t p1, int* init_table){
-  int itpos9 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___hash_collection___HashSetIterator].i;
+  int itpos10 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___collection___hash_collection___HashSetIterator].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos9]) return;
+  if (init_table[itpos10]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___hash_collection;
-  fra.me.line = 482;
+  fra.me.line = 488;
   fra.me.meth = LOCATE_standard___collection___hash_collection___HashSetIterator___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2783,12 +2808,12 @@ void standard___collection___hash_collection___HashSetIterator___init(val_t p0,
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/hash_collection.nit:484 */
+  /* ../lib/standard/collection/hash_collection.nit:490 */
   ATTR_standard___collection___hash_collection___HashSetIterator____set(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/collection/hash_collection.nit:485 */
+  /* ../lib/standard/collection/hash_collection.nit:491 */
   fra.me.REG[1] = ATTR_standard___collection___hash_collection___HashCollection____first_item(fra.me.REG[1]);
   ATTR_standard___collection___hash_collection___HashSetIterator____node(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
-  init_table[itpos9] = 1;
+  init_table[itpos10] = 1;
   return;
 }
index d1a811c..d843a3e 100644 (file)
@@ -97,6 +97,7 @@ extern const int SFT_standard___collection___hash_collection[];
 #define COLOR_standard___collection___hash_collection___HashSet (SFT_standard___collection___hash_collection[29])
 #define INIT_TABLE_POS_standard___collection___hash_collection___HashSet (SFT_standard___collection___hash_collection[30] + 0)
 #define CALL_standard___collection___hash_collection___HashSet___init(recv) ((standard___collection___hash_collection___HashSet___init_t)CALL((recv), (SFT_standard___collection___hash_collection[30] + 1)))
+#define CALL_standard___collection___hash_collection___HashSet___from(recv) ((standard___collection___hash_collection___HashSet___from_t)CALL((recv), (SFT_standard___collection___hash_collection[30] + 2)))
 #define ID_standard___collection___hash_collection___HashSetNode (SFT_standard___collection___hash_collection[31])
 #define COLOR_standard___collection___hash_collection___HashSetNode (SFT_standard___collection___hash_collection[32])
 #define INIT_TABLE_POS_standard___collection___hash_collection___HashSetNode (SFT_standard___collection___hash_collection[33] + 0)
@@ -250,6 +251,9 @@ typedef val_t (*standard___collection___hash_collection___HashSet___iterator_t)(
 void standard___collection___hash_collection___HashSet___init(val_t p0, int* init_table);
 typedef void (*standard___collection___hash_collection___HashSet___init_t)(val_t p0, int* init_table);
 val_t NEW_HashSet_standard___collection___hash_collection___HashSet___init();
+void standard___collection___hash_collection___HashSet___from(val_t p0, val_t p1, int* init_table);
+typedef void (*standard___collection___hash_collection___HashSet___from_t)(val_t p0, val_t p1, int* init_table);
+val_t NEW_HashSet_standard___collection___hash_collection___HashSet___from(val_t p0);
 void standard___collection___hash_collection___HashSetNode___init(val_t p0, val_t p1, int* init_table);
 typedef void (*standard___collection___hash_collection___HashSetNode___init_t)(val_t p0, val_t p1, int* init_table);
 val_t NEW_HashSetNode_standard___collection___hash_collection___HashSetNode___init(val_t p0);
index 70096bf..5f2e07b 100644 (file)
@@ -457,6 +457,130 @@ val_t standard___collection___list___List___count(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return REGB0;
 }
+static const char LOCATE_standard___collection___list___List___slice[] = "list::List::slice";
+val_t standard___collection___list___List___slice(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___collection___list;
+  fra.me.line = 79;
+  fra.me.meth = LOCATE_standard___collection___list___List___slice;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  REGB1 = p2;
+  /* ../lib/standard/collection/list.nit:81 */
+  REGB2 = TAG_Int(0);
+  REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB3)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:236 */
+  REGB2 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB2));
+  /* ../lib/standard/collection/list.nit:81 */
+  if (UNTAG_Bool(REGB2)) {
+    REGB2 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[0])(fra.me.REG[0]);
+    REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB3)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB2));
+  } else {
+    /* ../lib/standard/collection/list.nit:81 */
+    REGB3 = TAG_Bool(0);
+    REGB2 = REGB3;
+  }
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_standard___collection___list, 81);
+  }
+  /* ../lib/standard/collection/list.nit:82 */
+  REGB2 = TAG_Int(0);
+  REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB3)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:236 */
+  REGB2 = TAG_Bool(UNTAG_Int(REGB1)>=UNTAG_Int(REGB2));
+  /* ../lib/standard/collection/list.nit:82 */
+  if (UNTAG_Bool(REGB2)) {
+    REGB2 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[0])(fra.me.REG[0]);
+    REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB3)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
+  } else {
+    /* ../lib/standard/collection/list.nit:82 */
+    REGB3 = TAG_Bool(0);
+    REGB2 = REGB3;
+  }
+  if (UNTAG_Bool(REGB2)) {
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:234 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<=UNTAG_Int(REGB1));
+  } else {
+    /* ../lib/standard/collection/list.nit:82 */
+    REGB3 = TAG_Bool(0);
+    REGB2 = REGB3;
+  }
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_standard___collection___list, 82);
+  }
+  /* ../lib/standard/collection/list.nit:83 */
+  fra.me.REG[1] = NEW_List_standard___collection___list___List___init();
+  /* ../lib/standard/collection/list.nit:84 */
+  while(1) {
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:234 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<=UNTAG_Int(REGB1));
+    /* ../lib/standard/collection/list.nit:84 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ../lib/standard/collection/list.nit:85 */
+      fra.me.REG[2] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[0])(fra.me.REG[0], REGB0);
+      CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      /* ../lib/standard/collection/list.nit:86 */
+      REGB2 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ../lib/standard/collection/list.nit:86 */
+      REGB0 = REGB2;
+    } else {
+      /* ../lib/standard/collection/list.nit:84 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  /* ../lib/standard/collection/list.nit:88 */
+  goto label2;
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
 static const char LOCATE_standard___collection___list___List___push[] = "list::List::(abstract_collection::Sequence::push)";
 void standard___collection___list___List___push(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
@@ -465,7 +589,7 @@ void standard___collection___list___List___push(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 81;
+  fra.me.line = 93;
   fra.me.meth = LOCATE_standard___collection___list___List___push;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -475,9 +599,9 @@ void standard___collection___list___List___push(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/list.nit:84 */
+  /* ../lib/standard/collection/list.nit:96 */
   fra.me.REG[1] = NEW_ListNode_standard___collection___list___ListNode___init(fra.me.REG[1]);
-  /* ../lib/standard/collection/list.nit:85 */
+  /* ../lib/standard/collection/list.nit:97 */
   fra.me.REG[2] = ATTR_standard___collection___list___List____tail(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -492,21 +616,21 @@ void standard___collection___list___List___push(val_t p0, val_t p1){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ../lib/standard/collection/list.nit:86 */
+    /* ../lib/standard/collection/list.nit:98 */
     ATTR_standard___collection___list___List____head(fra.me.REG[0]) = fra.me.REG[1];
   } else {
-    /* ../lib/standard/collection/list.nit:88 */
+    /* ../lib/standard/collection/list.nit:100 */
     fra.me.REG[2] = ATTR_standard___collection___list___List____tail(fra.me.REG[0]);
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 88);
+      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 100);
     }
     CALL_standard___collection___list___ListNode___next__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-    /* ../lib/standard/collection/list.nit:89 */
+    /* ../lib/standard/collection/list.nit:101 */
     fra.me.REG[2] = ATTR_standard___collection___list___List____tail(fra.me.REG[0]);
     CALL_standard___collection___list___ListNode___prev__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ../lib/standard/collection/list.nit:91 */
+  /* ../lib/standard/collection/list.nit:103 */
   ATTR_standard___collection___list___List____tail(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -519,7 +643,7 @@ void standard___collection___list___List___unshift(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 94;
+  fra.me.line = 106;
   fra.me.meth = LOCATE_standard___collection___list___List___unshift;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -529,9 +653,9 @@ void standard___collection___list___List___unshift(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/list.nit:97 */
+  /* ../lib/standard/collection/list.nit:109 */
   fra.me.REG[1] = NEW_ListNode_standard___collection___list___ListNode___init(fra.me.REG[1]);
-  /* ../lib/standard/collection/list.nit:98 */
+  /* ../lib/standard/collection/list.nit:110 */
   fra.me.REG[2] = ATTR_standard___collection___list___List____head(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -546,21 +670,21 @@ void standard___collection___list___List___unshift(val_t p0, val_t p1){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ../lib/standard/collection/list.nit:99 */
+    /* ../lib/standard/collection/list.nit:111 */
     ATTR_standard___collection___list___List____tail(fra.me.REG[0]) = fra.me.REG[1];
   } else {
-    /* ../lib/standard/collection/list.nit:101 */
+    /* ../lib/standard/collection/list.nit:113 */
     fra.me.REG[2] = ATTR_standard___collection___list___List____head(fra.me.REG[0]);
     CALL_standard___collection___list___ListNode___next__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    /* ../lib/standard/collection/list.nit:102 */
+    /* ../lib/standard/collection/list.nit:114 */
     fra.me.REG[2] = ATTR_standard___collection___list___List____head(fra.me.REG[0]);
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 102);
+      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 114);
     }
     CALL_standard___collection___list___ListNode___prev__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
   }
-  /* ../lib/standard/collection/list.nit:104 */
+  /* ../lib/standard/collection/list.nit:116 */
   ATTR_standard___collection___list___List____head(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -573,7 +697,7 @@ void standard___collection___list___List___link(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 107;
+  fra.me.line = 119;
   fra.me.meth = LOCATE_standard___collection___list___List___link;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -584,7 +708,7 @@ void standard___collection___list___List___link(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/list.nit:112 */
+  /* ../lib/standard/collection/list.nit:124 */
   fra.me.REG[2] = ATTR_standard___collection___list___List____tail(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -599,11 +723,11 @@ void standard___collection___list___List___link(val_t p0, val_t p1){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ../lib/standard/collection/list.nit:113 */
+    /* ../lib/standard/collection/list.nit:125 */
     fra.me.REG[2] = ATTR_standard___collection___list___List____head(fra.me.REG[1]);
     ATTR_standard___collection___list___List____head(fra.me.REG[0]) = fra.me.REG[2];
   } else {
-    /* ../lib/standard/collection/list.nit:114 */
+    /* ../lib/standard/collection/list.nit:126 */
     fra.me.REG[2] = ATTR_standard___collection___list___List____head(fra.me.REG[1]);
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
@@ -619,33 +743,33 @@ void standard___collection___list___List___link(val_t p0, val_t p1){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ../lib/standard/collection/list.nit:115 */
+      /* ../lib/standard/collection/list.nit:127 */
       fra.me.REG[2] = ATTR_standard___collection___list___List____tail(fra.me.REG[0]);
       fra.me.REG[3] = ATTR_standard___collection___list___List____head(fra.me.REG[1]);
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 115);
+        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 127);
       }
       CALL_standard___collection___list___ListNode___next__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-      /* ../lib/standard/collection/list.nit:116 */
+      /* ../lib/standard/collection/list.nit:128 */
       fra.me.REG[3] = ATTR_standard___collection___list___List____tail(fra.me.REG[0]);
       REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 116);
+        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 128);
       }
       fra.me.REG[3] = CALL_standard___collection___list___ListNode___next(fra.me.REG[3])(fra.me.REG[3]);
       fra.me.REG[2] = ATTR_standard___collection___list___List____tail(fra.me.REG[0]);
       REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 116);
+        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 128);
       }
       CALL_standard___collection___list___ListNode___prev__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
     }
   }
-  /* ../lib/standard/collection/list.nit:118 */
+  /* ../lib/standard/collection/list.nit:130 */
   fra.me.REG[2] = ATTR_standard___collection___list___List____tail(fra.me.REG[1]);
   ATTR_standard___collection___list___List____tail(fra.me.REG[0]) = fra.me.REG[2];
-  /* ../lib/standard/collection/list.nit:119 */
+  /* ../lib/standard/collection/list.nit:131 */
   CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[1])(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return;
@@ -658,7 +782,7 @@ val_t standard___collection___list___List___pop(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 124;
+  fra.me.line = 136;
   fra.me.meth = LOCATE_standard___collection___list___List___pop;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -667,22 +791,22 @@ val_t standard___collection___list___List___pop(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/list.nit:127 */
+  /* ../lib/standard/collection/list.nit:139 */
   fra.me.REG[1] = ATTR_standard___collection___list___List____tail(fra.me.REG[0]);
-  /* ../lib/standard/collection/list.nit:128 */
+  /* ../lib/standard/collection/list.nit:140 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 128);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 140);
   }
   fra.me.REG[2] = CALL_standard___collection___list___ListNode___prev(fra.me.REG[1])(fra.me.REG[1]);
   ATTR_standard___collection___list___List____tail(fra.me.REG[0]) = fra.me.REG[2];
-  /* ../lib/standard/collection/list.nit:129 */
+  /* ../lib/standard/collection/list.nit:141 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 129);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 141);
   }
   CALL_standard___collection___list___ListNode___prev__eq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
-  /* ../lib/standard/collection/list.nit:130 */
+  /* ../lib/standard/collection/list.nit:142 */
   fra.me.REG[2] = ATTR_standard___collection___list___List____tail(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -697,21 +821,21 @@ val_t standard___collection___list___List___pop(val_t p0){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ../lib/standard/collection/list.nit:131 */
+    /* ../lib/standard/collection/list.nit:143 */
     ATTR_standard___collection___list___List____head(fra.me.REG[0]) = NIT_NULL;
   } else {
-    /* ../lib/standard/collection/list.nit:133 */
+    /* ../lib/standard/collection/list.nit:145 */
     fra.me.REG[0] = ATTR_standard___collection___list___List____tail(fra.me.REG[0]);
     REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 133);
+      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 145);
     }
     CALL_standard___collection___list___ListNode___next__eq(fra.me.REG[0])(fra.me.REG[0], NIT_NULL);
   }
-  /* ../lib/standard/collection/list.nit:135 */
+  /* ../lib/standard/collection/list.nit:147 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 135);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 147);
   }
   fra.me.REG[1] = CALL_standard___collection___abstract_collection___Container___item(fra.me.REG[1])(fra.me.REG[1]);
   goto label1;
@@ -727,7 +851,7 @@ val_t standard___collection___list___List___shift(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 138;
+  fra.me.line = 150;
   fra.me.meth = LOCATE_standard___collection___list___List___shift;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -736,22 +860,22 @@ val_t standard___collection___list___List___shift(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/list.nit:141 */
+  /* ../lib/standard/collection/list.nit:153 */
   fra.me.REG[1] = ATTR_standard___collection___list___List____head(fra.me.REG[0]);
-  /* ../lib/standard/collection/list.nit:142 */
+  /* ../lib/standard/collection/list.nit:154 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 142);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 154);
   }
   fra.me.REG[2] = CALL_standard___collection___list___ListNode___next(fra.me.REG[1])(fra.me.REG[1]);
   ATTR_standard___collection___list___List____head(fra.me.REG[0]) = fra.me.REG[2];
-  /* ../lib/standard/collection/list.nit:143 */
+  /* ../lib/standard/collection/list.nit:155 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 143);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 155);
   }
   CALL_standard___collection___list___ListNode___next__eq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
-  /* ../lib/standard/collection/list.nit:144 */
+  /* ../lib/standard/collection/list.nit:156 */
   fra.me.REG[2] = ATTR_standard___collection___list___List____head(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -766,21 +890,21 @@ val_t standard___collection___list___List___shift(val_t p0){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ../lib/standard/collection/list.nit:145 */
+    /* ../lib/standard/collection/list.nit:157 */
     ATTR_standard___collection___list___List____tail(fra.me.REG[0]) = NIT_NULL;
   } else {
-    /* ../lib/standard/collection/list.nit:147 */
+    /* ../lib/standard/collection/list.nit:159 */
     fra.me.REG[0] = ATTR_standard___collection___list___List____head(fra.me.REG[0]);
     REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 147);
+      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 159);
     }
     CALL_standard___collection___list___ListNode___prev__eq(fra.me.REG[0])(fra.me.REG[0], NIT_NULL);
   }
-  /* ../lib/standard/collection/list.nit:149 */
+  /* ../lib/standard/collection/list.nit:161 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 149);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 161);
   }
   fra.me.REG[1] = CALL_standard___collection___abstract_collection___Container___item(fra.me.REG[1])(fra.me.REG[1]);
   goto label1;
@@ -796,7 +920,7 @@ void standard___collection___list___List___remove(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 152;
+  fra.me.line = 164;
   fra.me.meth = LOCATE_standard___collection___list___List___remove;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -806,10 +930,10 @@ void standard___collection___list___List___remove(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/list.nit:154 */
+  /* ../lib/standard/collection/list.nit:166 */
   fra.me.REG[2] = ATTR_standard___collection___list___List____head(fra.me.REG[0]);
   fra.me.REG[2] = CALL_standard___collection___list___List___search_node_after(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2]);
-  /* ../lib/standard/collection/list.nit:155 */
+  /* ../lib/standard/collection/list.nit:167 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -837,7 +961,7 @@ void standard___collection___list___List___remove_at(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 158;
+  fra.me.line = 170;
   fra.me.meth = LOCATE_standard___collection___list___List___remove_at;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -846,9 +970,9 @@ void standard___collection___list___List___remove_at(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/collection/list.nit:160 */
+  /* ../lib/standard/collection/list.nit:172 */
   fra.me.REG[1] = CALL_standard___collection___list___List___get_node(fra.me.REG[0])(fra.me.REG[0], REGB0);
-  /* ../lib/standard/collection/list.nit:161 */
+  /* ../lib/standard/collection/list.nit:173 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -874,16 +998,16 @@ void standard___collection___list___List___clear(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 164;
+  fra.me.line = 176;
   fra.me.meth = LOCATE_standard___collection___list___List___clear;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/list.nit:166 */
+  /* ../lib/standard/collection/list.nit:178 */
   ATTR_standard___collection___list___List____head(fra.me.REG[0]) = NIT_NULL;
-  /* ../lib/standard/collection/list.nit:167 */
+  /* ../lib/standard/collection/list.nit:179 */
   ATTR_standard___collection___list___List____tail(fra.me.REG[0]) = NIT_NULL;
   stack_frame_head = fra.me.prev;
   return;
@@ -894,14 +1018,14 @@ val_t standard___collection___list___List___iterator(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 171;
+  fra.me.line = 183;
   fra.me.meth = LOCATE_standard___collection___list___List___iterator;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/list.nit:171 */
+  /* ../lib/standard/collection/list.nit:183 */
   fra.me.REG[0] = NEW_ListIterator_standard___collection___list___ListIterator___init(fra.me.REG[0]);
   goto label1;
   label1: while(0);
@@ -916,7 +1040,7 @@ void standard___collection___list___List___init(val_t p0, int* init_table){
   if (init_table[itpos0]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 173;
+  fra.me.line = 185;
   fra.me.meth = LOCATE_standard___collection___list___List___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -935,7 +1059,7 @@ void standard___collection___list___List___from(val_t p0, val_t p1, int* init_ta
   if (init_table[itpos1]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 176;
+  fra.me.line = 188;
   fra.me.meth = LOCATE_standard___collection___list___List___from;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -944,7 +1068,7 @@ void standard___collection___list___List___from(val_t p0, val_t p1, int* init_ta
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/list.nit:177 */
+  /* ../lib/standard/collection/list.nit:189 */
   CALL_standard___collection___abstract_collection___Sequence___append(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   init_table[itpos1] = 1;
@@ -959,7 +1083,7 @@ val_t standard___collection___list___List___get_node(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 185;
+  fra.me.line = 197;
   fra.me.meth = LOCATE_standard___collection___list___List___get_node;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -969,9 +1093,9 @@ val_t standard___collection___list___List___get_node(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/collection/list.nit:188 */
+  /* ../lib/standard/collection/list.nit:200 */
   fra.me.REG[0] = ATTR_standard___collection___list___List____head(fra.me.REG[0]);
-  /* ../lib/standard/collection/list.nit:189 */
+  /* ../lib/standard/collection/list.nit:201 */
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
@@ -980,13 +1104,13 @@ val_t standard___collection___list___List___get_node(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:235 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/list.nit:189 */
+  /* ../lib/standard/collection/list.nit:201 */
   if (UNTAG_Bool(REGB1)) {
-    /* ../lib/standard/collection/list.nit:190 */
+    /* ../lib/standard/collection/list.nit:202 */
     fra.me.REG[1] = NIT_NULL;
     goto label1;
   }
-  /* ../lib/standard/collection/list.nit:192 */
+  /* ../lib/standard/collection/list.nit:204 */
   while(1) {
     REGB1 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
@@ -1011,31 +1135,31 @@ val_t standard___collection___list___List___get_node(val_t p0, val_t p1){
       /* ../lib/standard/kernel.nit:237 */
       REGB1 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB1));
     } else {
-      /* ../lib/standard/collection/list.nit:192 */
+      /* ../lib/standard/collection/list.nit:204 */
       REGB2 = TAG_Bool(0);
       REGB1 = REGB2;
     }
     if (UNTAG_Bool(REGB1)) {
-      /* ../lib/standard/collection/list.nit:193 */
+      /* ../lib/standard/collection/list.nit:205 */
       REGB1 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
-        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 193);
+        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 205);
       }
       fra.me.REG[2] = CALL_standard___collection___list___ListNode___next(fra.me.REG[0])(fra.me.REG[0]);
       fra.me.REG[0] = fra.me.REG[2];
-      /* ../lib/standard/collection/list.nit:194 */
+      /* ../lib/standard/collection/list.nit:206 */
       REGB1 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:240 */
       REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      /* ../lib/standard/collection/list.nit:194 */
+      /* ../lib/standard/collection/list.nit:206 */
       REGB0 = REGB1;
     } else {
-      /* ../lib/standard/collection/list.nit:192 */
+      /* ../lib/standard/collection/list.nit:204 */
       goto label2;
     }
   }
   label2: while(0);
-  /* ../lib/standard/collection/list.nit:196 */
+  /* ../lib/standard/collection/list.nit:208 */
   fra.me.REG[1] = fra.me.REG[0];
   goto label1;
   label1: while(0);
@@ -1050,7 +1174,7 @@ val_t standard___collection___list___List___search_node_after(val_t p0, val_t p1
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 199;
+  fra.me.line = 211;
   fra.me.meth = LOCATE_standard___collection___list___List___search_node_after;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -1061,7 +1185,7 @@ val_t standard___collection___list___List___search_node_after(val_t p0, val_t p1
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ../lib/standard/collection/list.nit:203 */
+  /* ../lib/standard/collection/list.nit:215 */
   while(1) {
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
@@ -1079,7 +1203,7 @@ val_t standard___collection___list___List___search_node_after(val_t p0, val_t p1
     if (UNTAG_Bool(REGB0)) {
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 203);
+        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 215);
       }
       fra.me.REG[0] = CALL_standard___collection___abstract_collection___Container___item(fra.me.REG[2])(fra.me.REG[2]);
       REGB0 = TAG_Bool(IS_EQUAL_NN(fra.me.REG[0],fra.me.REG[1]));
@@ -1102,7 +1226,7 @@ val_t standard___collection___list___List___search_node_after(val_t p0, val_t p1
     if (UNTAG_Bool(REGB0)) {
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 203);
+        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 215);
       }
       fra.me.REG[0] = CALL_standard___collection___list___ListNode___next(fra.me.REG[2])(fra.me.REG[2]);
       fra.me.REG[2] = fra.me.REG[0];
@@ -1111,7 +1235,7 @@ val_t standard___collection___list___List___search_node_after(val_t p0, val_t p1
     }
   }
   label1: while(0);
-  /* ../lib/standard/collection/list.nit:204 */
+  /* ../lib/standard/collection/list.nit:216 */
   goto label2;
   label2: while(0);
   stack_frame_head = fra.me.prev;
@@ -1125,7 +1249,7 @@ void standard___collection___list___List___remove_node(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 207;
+  fra.me.line = 219;
   fra.me.meth = LOCATE_standard___collection___list___List___remove_node;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -1135,7 +1259,7 @@ void standard___collection___list___List___remove_node(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/list.nit:210 */
+  /* ../lib/standard/collection/list.nit:222 */
   fra.me.REG[2] = CALL_standard___collection___list___ListNode___prev(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -1150,10 +1274,10 @@ void standard___collection___list___List___remove_node(val_t p0, val_t p1){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ../lib/standard/collection/list.nit:211 */
+    /* ../lib/standard/collection/list.nit:223 */
     fra.me.REG[2] = CALL_standard___collection___list___ListNode___next(fra.me.REG[1])(fra.me.REG[1]);
     ATTR_standard___collection___list___List____head(fra.me.REG[0]) = fra.me.REG[2];
-    /* ../lib/standard/collection/list.nit:212 */
+    /* ../lib/standard/collection/list.nit:224 */
     fra.me.REG[2] = CALL_standard___collection___list___ListNode___next(fra.me.REG[1])(fra.me.REG[1]);
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
@@ -1168,19 +1292,19 @@ void standard___collection___list___List___remove_node(val_t p0, val_t p1){
       }
     }
     if (UNTAG_Bool(REGB0)) {
-      /* ../lib/standard/collection/list.nit:213 */
+      /* ../lib/standard/collection/list.nit:225 */
       ATTR_standard___collection___list___List____tail(fra.me.REG[0]) = NIT_NULL;
     } else {
-      /* ../lib/standard/collection/list.nit:215 */
+      /* ../lib/standard/collection/list.nit:227 */
       fra.me.REG[2] = CALL_standard___collection___list___ListNode___next(fra.me.REG[1])(fra.me.REG[1]);
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 215);
+        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 227);
       }
       CALL_standard___collection___list___ListNode___prev__eq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
     }
   } else {
-    /* ../lib/standard/collection/list.nit:217 */
+    /* ../lib/standard/collection/list.nit:229 */
     fra.me.REG[2] = CALL_standard___collection___list___ListNode___next(fra.me.REG[1])(fra.me.REG[1]);
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
@@ -1195,31 +1319,31 @@ void standard___collection___list___List___remove_node(val_t p0, val_t p1){
       }
     }
     if (UNTAG_Bool(REGB0)) {
-      /* ../lib/standard/collection/list.nit:218 */
+      /* ../lib/standard/collection/list.nit:230 */
       fra.me.REG[2] = CALL_standard___collection___list___ListNode___prev(fra.me.REG[1])(fra.me.REG[1]);
       ATTR_standard___collection___list___List____tail(fra.me.REG[0]) = fra.me.REG[2];
-      /* ../lib/standard/collection/list.nit:219 */
+      /* ../lib/standard/collection/list.nit:231 */
       fra.me.REG[2] = CALL_standard___collection___list___ListNode___prev(fra.me.REG[1])(fra.me.REG[1]);
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 219);
+        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 231);
       }
       CALL_standard___collection___list___ListNode___next__eq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
     } else {
-      /* ../lib/standard/collection/list.nit:221 */
+      /* ../lib/standard/collection/list.nit:233 */
       fra.me.REG[2] = CALL_standard___collection___list___ListNode___prev(fra.me.REG[1])(fra.me.REG[1]);
       fra.me.REG[0] = CALL_standard___collection___list___ListNode___next(fra.me.REG[1])(fra.me.REG[1]);
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 221);
+        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 233);
       }
       CALL_standard___collection___list___ListNode___next__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ../lib/standard/collection/list.nit:222 */
+      /* ../lib/standard/collection/list.nit:234 */
       fra.me.REG[0] = CALL_standard___collection___list___ListNode___next(fra.me.REG[1])(fra.me.REG[1]);
       fra.me.REG[1] = CALL_standard___collection___list___ListNode___prev(fra.me.REG[1])(fra.me.REG[1]);
       REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 222);
+        nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 234);
       }
       CALL_standard___collection___list___ListNode___prev__eq(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
     }
@@ -1235,7 +1359,7 @@ void standard___collection___list___List___insert_before(val_t p0, val_t p1, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 226;
+  fra.me.line = 238;
   fra.me.meth = LOCATE_standard___collection___list___List___insert_before;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1247,11 +1371,11 @@ void standard___collection___list___List___insert_before(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ../lib/standard/collection/list.nit:228 */
+  /* ../lib/standard/collection/list.nit:240 */
   fra.me.REG[1] = NEW_ListNode_standard___collection___list___ListNode___init(fra.me.REG[1]);
-  /* ../lib/standard/collection/list.nit:229 */
+  /* ../lib/standard/collection/list.nit:241 */
   fra.me.REG[3] = CALL_standard___collection___list___ListNode___prev(fra.me.REG[2])(fra.me.REG[2]);
-  /* ../lib/standard/collection/list.nit:230 */
+  /* ../lib/standard/collection/list.nit:242 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -1265,21 +1389,21 @@ void standard___collection___list___List___insert_before(val_t p0, val_t p1, val
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ../lib/standard/collection/list.nit:231 */
+    /* ../lib/standard/collection/list.nit:243 */
     ATTR_standard___collection___list___List____head(fra.me.REG[0]) = fra.me.REG[1];
   } else {
-    /* ../lib/standard/collection/list.nit:233 */
+    /* ../lib/standard/collection/list.nit:245 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 233);
+      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 245);
     }
     CALL_standard___collection___list___ListNode___next__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
   }
-  /* ../lib/standard/collection/list.nit:235 */
+  /* ../lib/standard/collection/list.nit:247 */
   CALL_standard___collection___list___ListNode___prev__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* ../lib/standard/collection/list.nit:236 */
+  /* ../lib/standard/collection/list.nit:248 */
   CALL_standard___collection___list___ListNode___next__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ../lib/standard/collection/list.nit:237 */
+  /* ../lib/standard/collection/list.nit:249 */
   CALL_standard___collection___list___ListNode___prev__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return;
@@ -1291,18 +1415,18 @@ val_t standard___collection___list___ListIterator___item(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 244;
+  fra.me.line = 256;
   fra.me.meth = LOCATE_standard___collection___list___ListIterator___item;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/list.nit:244 */
+  /* ../lib/standard/collection/list.nit:256 */
   fra.me.REG[0] = ATTR_standard___collection___list___ListIterator____node(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 244);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 256);
   }
   fra.me.REG[0] = CALL_standard___collection___abstract_collection___Container___item(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -1317,7 +1441,7 @@ void standard___collection___list___ListIterator___item__eq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 246;
+  fra.me.line = 258;
   fra.me.meth = LOCATE_standard___collection___list___ListIterator___item__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1326,11 +1450,11 @@ void standard___collection___list___ListIterator___item__eq(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/list.nit:246 */
+  /* ../lib/standard/collection/list.nit:258 */
   fra.me.REG[0] = ATTR_standard___collection___list___ListIterator____node(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 246);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 258);
   }
   CALL_standard___collection___abstract_collection___Container___item__eq(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
@@ -1344,14 +1468,14 @@ val_t standard___collection___list___ListIterator___is_ok(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 248;
+  fra.me.line = 260;
   fra.me.meth = LOCATE_standard___collection___list___ListIterator___is_ok;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/list.nit:248 */
+  /* ../lib/standard/collection/list.nit:260 */
   fra.me.REG[0] = ATTR_standard___collection___list___ListIterator____node(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -1379,7 +1503,7 @@ void standard___collection___list___ListIterator___next(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 250;
+  fra.me.line = 262;
   fra.me.meth = LOCATE_standard___collection___list___ListIterator___next;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1387,20 +1511,20 @@ void standard___collection___list___ListIterator___next(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/list.nit:252 */
+  /* ../lib/standard/collection/list.nit:264 */
   fra.me.REG[1] = ATTR_standard___collection___list___ListIterator____node(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 252);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___list, 264);
   }
   fra.me.REG[1] = CALL_standard___collection___list___ListNode___next(fra.me.REG[1])(fra.me.REG[1]);
   ATTR_standard___collection___list___ListIterator____node(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/collection/list.nit:253 */
+  /* ../lib/standard/collection/list.nit:265 */
   REGB0 = ATTR_standard___collection___list___ListIterator____index(fra.me.REG[0]);
   REGB1 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:238 */
   REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
-  /* ../lib/standard/collection/list.nit:253 */
+  /* ../lib/standard/collection/list.nit:265 */
   ATTR_standard___collection___list___ListIterator____index(fra.me.REG[0]) = REGB1;
   stack_frame_head = fra.me.prev;
   return;
@@ -1414,7 +1538,7 @@ void standard___collection___list___ListIterator___init(val_t p0, val_t p1, int*
   if (init_table[itpos2]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 256;
+  fra.me.line = 268;
   fra.me.meth = LOCATE_standard___collection___list___ListIterator___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1423,12 +1547,12 @@ void standard___collection___list___ListIterator___init(val_t p0, val_t p1, int*
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/list.nit:259 */
+  /* ../lib/standard/collection/list.nit:271 */
   ATTR_standard___collection___list___ListIterator____list(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/collection/list.nit:260 */
+  /* ../lib/standard/collection/list.nit:272 */
   fra.me.REG[1] = ATTR_standard___collection___list___List____head(fra.me.REG[1]);
   ATTR_standard___collection___list___ListIterator____node(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/collection/list.nit:261 */
+  /* ../lib/standard/collection/list.nit:273 */
   REGB0 = TAG_Int(0);
   ATTR_standard___collection___list___ListIterator____index(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -1442,18 +1566,18 @@ val_t standard___collection___list___ListIterator___index(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 270;
+  fra.me.line = 282;
   fra.me.meth = LOCATE_standard___collection___list___ListIterator___index;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/list.nit:270 */
+  /* ../lib/standard/collection/list.nit:282 */
   REGB0 = TAG_Bool(ATTR_standard___collection___list___ListIterator____index(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_index", LOCATE_standard___collection___list, 270);
+    nit_abort("Uninitialized attribute %s", "_index", LOCATE_standard___collection___list, 282);
   }
   REGB0 = ATTR_standard___collection___list___ListIterator____index(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -1466,7 +1590,7 @@ void standard___collection___list___ListIterator___delete(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 273;
+  fra.me.line = 285;
   fra.me.meth = LOCATE_standard___collection___list___ListIterator___delete;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -1475,20 +1599,20 @@ void standard___collection___list___ListIterator___delete(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/list.nit:273 */
+  /* ../lib/standard/collection/list.nit:285 */
   fra.me.REG[1] = fra.me.REG[0];
-  /* ../lib/standard/collection/list.nit:276 */
+  /* ../lib/standard/collection/list.nit:288 */
   REGB0 = TAG_Bool(ATTR_standard___collection___list___ListIterator____list(fra.me.REG[1])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_list", LOCATE_standard___collection___list, 276);
+    nit_abort("Uninitialized attribute %s", "_list", LOCATE_standard___collection___list, 288);
   }
   fra.me.REG[2] = ATTR_standard___collection___list___ListIterator____list(fra.me.REG[1]);
   fra.me.REG[1] = ATTR_standard___collection___list___ListIterator____node(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_standard___collection___list, 276);
+    nit_abort("Cast failed", NULL, LOCATE_standard___collection___list, 288);
   }
   CALL_standard___collection___list___List___remove_node(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
@@ -1501,7 +1625,7 @@ void standard___collection___list___ListIterator___insert_before(val_t p0, val_t
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 279;
+  fra.me.line = 291;
   fra.me.meth = LOCATE_standard___collection___list___ListIterator___insert_before;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1512,20 +1636,20 @@ void standard___collection___list___ListIterator___insert_before(val_t p0, val_t
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/list.nit:279 */
+  /* ../lib/standard/collection/list.nit:291 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* ../lib/standard/collection/list.nit:282 */
+  /* ../lib/standard/collection/list.nit:294 */
   REGB0 = TAG_Bool(ATTR_standard___collection___list___ListIterator____list(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_list", LOCATE_standard___collection___list, 282);
+    nit_abort("Uninitialized attribute %s", "_list", LOCATE_standard___collection___list, 294);
   }
   fra.me.REG[3] = ATTR_standard___collection___list___ListIterator____list(fra.me.REG[2]);
   fra.me.REG[2] = ATTR_standard___collection___list___ListIterator____node(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_standard___collection___list, 282);
+    nit_abort("Cast failed", NULL, LOCATE_standard___collection___list, 294);
   }
   CALL_standard___collection___list___List___insert_before(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -1539,7 +1663,7 @@ void standard___collection___list___ListNode___init(val_t p0, val_t p1, int* ini
   if (init_table[itpos3]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 289;
+  fra.me.line = 301;
   fra.me.meth = LOCATE_standard___collection___list___ListNode___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1550,11 +1674,11 @@ void standard___collection___list___ListNode___init(val_t p0, val_t p1, int* ini
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/list.nit:289 */
+  /* ../lib/standard/collection/list.nit:301 */
   fra.me.REG[2] = fra.me.REG[0];
   fra.me.REG[3] = fra.me.REG[1];
   CALL_standard___collection___abstract_collection___Container___init(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], init_table);
-  /* ../lib/standard/collection/list.nit:291 */
+  /* ../lib/standard/collection/list.nit:303 */
   CALL_standard___collection___abstract_collection___Container___item__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   init_table[itpos3] = 1;
@@ -1566,14 +1690,14 @@ val_t standard___collection___list___ListNode___next(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 294;
+  fra.me.line = 306;
   fra.me.meth = LOCATE_standard___collection___list___ListNode___next;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/list.nit:294 */
+  /* ../lib/standard/collection/list.nit:306 */
   fra.me.REG[0] = ATTR_standard___collection___list___ListNode____next(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1584,7 +1708,7 @@ void standard___collection___list___ListNode___next__eq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 294;
+  fra.me.line = 306;
   fra.me.meth = LOCATE_standard___collection___list___ListNode___next__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1593,7 +1717,7 @@ void standard___collection___list___ListNode___next__eq(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/list.nit:294 */
+  /* ../lib/standard/collection/list.nit:306 */
   ATTR_standard___collection___list___ListNode____next(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -1604,14 +1728,14 @@ val_t standard___collection___list___ListNode___prev(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 297;
+  fra.me.line = 309;
   fra.me.meth = LOCATE_standard___collection___list___ListNode___prev;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/collection/list.nit:297 */
+  /* ../lib/standard/collection/list.nit:309 */
   fra.me.REG[0] = ATTR_standard___collection___list___ListNode____prev(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -1622,7 +1746,7 @@ void standard___collection___list___ListNode___prev__eq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___collection___list;
-  fra.me.line = 297;
+  fra.me.line = 309;
   fra.me.meth = LOCATE_standard___collection___list___ListNode___prev__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1631,7 +1755,7 @@ void standard___collection___list___ListNode___prev__eq(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/list.nit:297 */
+  /* ../lib/standard/collection/list.nit:309 */
   ATTR_standard___collection___list___ListNode____prev(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
index cf82a71..047af5b 100644 (file)
@@ -16,13 +16,14 @@ extern const int SFT_standard___collection___list[];
 #define ATTR_standard___collection___list___List____head(recv) ATTR(recv, (SFT_standard___collection___list[2] + 0))
 #define ATTR_standard___collection___list___List____tail(recv) ATTR(recv, (SFT_standard___collection___list[2] + 1))
 #define INIT_TABLE_POS_standard___collection___list___List (SFT_standard___collection___list[3] + 0)
-#define CALL_standard___collection___list___List___link(recv) ((standard___collection___list___List___link_t)CALL((recv), (SFT_standard___collection___list[3] + 1)))
-#define CALL_standard___collection___list___List___init(recv) ((standard___collection___list___List___init_t)CALL((recv), (SFT_standard___collection___list[3] + 2)))
-#define CALL_standard___collection___list___List___from(recv) ((standard___collection___list___List___from_t)CALL((recv), (SFT_standard___collection___list[3] + 3)))
-#define CALL_standard___collection___list___List___get_node(recv) ((standard___collection___list___List___get_node_t)CALL((recv), (SFT_standard___collection___list[3] + 4)))
-#define CALL_standard___collection___list___List___search_node_after(recv) ((standard___collection___list___List___search_node_after_t)CALL((recv), (SFT_standard___collection___list[3] + 5)))
-#define CALL_standard___collection___list___List___remove_node(recv) ((standard___collection___list___List___remove_node_t)CALL((recv), (SFT_standard___collection___list[3] + 6)))
-#define CALL_standard___collection___list___List___insert_before(recv) ((standard___collection___list___List___insert_before_t)CALL((recv), (SFT_standard___collection___list[3] + 7)))
+#define CALL_standard___collection___list___List___slice(recv) ((standard___collection___list___List___slice_t)CALL((recv), (SFT_standard___collection___list[3] + 1)))
+#define CALL_standard___collection___list___List___link(recv) ((standard___collection___list___List___link_t)CALL((recv), (SFT_standard___collection___list[3] + 2)))
+#define CALL_standard___collection___list___List___init(recv) ((standard___collection___list___List___init_t)CALL((recv), (SFT_standard___collection___list[3] + 3)))
+#define CALL_standard___collection___list___List___from(recv) ((standard___collection___list___List___from_t)CALL((recv), (SFT_standard___collection___list[3] + 4)))
+#define CALL_standard___collection___list___List___get_node(recv) ((standard___collection___list___List___get_node_t)CALL((recv), (SFT_standard___collection___list[3] + 5)))
+#define CALL_standard___collection___list___List___search_node_after(recv) ((standard___collection___list___List___search_node_after_t)CALL((recv), (SFT_standard___collection___list[3] + 6)))
+#define CALL_standard___collection___list___List___remove_node(recv) ((standard___collection___list___List___remove_node_t)CALL((recv), (SFT_standard___collection___list[3] + 7)))
+#define CALL_standard___collection___list___List___insert_before(recv) ((standard___collection___list___List___insert_before_t)CALL((recv), (SFT_standard___collection___list[3] + 8)))
 #define ID_standard___collection___list___ListIterator (SFT_standard___collection___list[4])
 #define COLOR_standard___collection___list___ListIterator (SFT_standard___collection___list[5])
 #define ATTR_standard___collection___list___ListIterator____list(recv) ATTR(recv, (SFT_standard___collection___list[6] + 0))
@@ -65,6 +66,8 @@ val_t standard___collection___list___List___has_only(val_t p0, val_t p1);
 typedef val_t (*standard___collection___list___List___has_only_t)(val_t p0, val_t p1);
 val_t standard___collection___list___List___count(val_t p0, val_t p1);
 typedef val_t (*standard___collection___list___List___count_t)(val_t p0, val_t p1);
+val_t standard___collection___list___List___slice(val_t p0, val_t p1, val_t p2);
+typedef val_t (*standard___collection___list___List___slice_t)(val_t p0, val_t p1, val_t p2);
 void standard___collection___list___List___push(val_t p0, val_t p1);
 typedef void (*standard___collection___list___List___push_t)(val_t p0, val_t p1);
 void standard___collection___list___List___unshift(val_t p0, val_t p1);
index a14e023..0ede6c1 100644 (file)
@@ -178,7 +178,7 @@ void standard___collection___sorter___AbstractSorter___quick_sort(val_t p0, val_
   if (UNTAG_Bool(REGB3)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB2)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label1;
@@ -251,7 +251,7 @@ void standard___collection___sorter___AbstractSorter___quick_sort(val_t p0, val_
           if (UNTAG_Bool(REGB5)) {
             nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
           }
-          /* ../lib/standard/collection/array.nit:718 */
+          /* ../lib/standard/collection/array.nit:724 */
           fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB4)];
           /* ../lib/standard/collection/array.nit:281 */
           goto label2;
@@ -335,7 +335,7 @@ void standard___collection___sorter___AbstractSorter___quick_sort(val_t p0, val_
           if (UNTAG_Bool(REGB4)) {
             nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
           }
-          /* ../lib/standard/collection/array.nit:718 */
+          /* ../lib/standard/collection/array.nit:724 */
           fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB5)];
           /* ../lib/standard/collection/array.nit:281 */
           goto label4;
@@ -417,7 +417,7 @@ void standard___collection___sorter___AbstractSorter___quick_sort(val_t p0, val_
         if (UNTAG_Bool(REGB5)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB4)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label6;
@@ -464,7 +464,7 @@ void standard___collection___sorter___AbstractSorter___quick_sort(val_t p0, val_
         if (UNTAG_Bool(REGB5)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB4)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label7;
@@ -525,7 +525,7 @@ void standard___collection___sorter___AbstractSorter___quick_sort(val_t p0, val_
   if (UNTAG_Bool(REGB4)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB3)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label9;
@@ -630,7 +630,7 @@ void standard___collection___sorter___AbstractSorter___bubble_sort(val_t p0, val
       if (UNTAG_Bool(REGB4)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB3)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label1;
@@ -690,7 +690,7 @@ void standard___collection___sorter___AbstractSorter___bubble_sort(val_t p0, val
           if (UNTAG_Bool(REGB5)) {
             nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
           }
-          /* ../lib/standard/collection/array.nit:718 */
+          /* ../lib/standard/collection/array.nit:724 */
           fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB4)];
           /* ../lib/standard/collection/array.nit:281 */
           goto label2;
@@ -751,7 +751,7 @@ void standard___collection___sorter___AbstractSorter___bubble_sort(val_t p0, val
             if (UNTAG_Bool(REGB4)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB5)];
             /* ../lib/standard/collection/array.nit:281 */
             goto label3;
@@ -824,7 +824,7 @@ void standard___collection___sorter___AbstractSorter___bubble_sort(val_t p0, val
         if (UNTAG_Bool(REGB5)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB3)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label5;
index 31aa87a..5f53569 100644 (file)
@@ -16,6 +16,8 @@ void standard___environ___String___setenv(val_t p0, val_t p1);
 typedef void (*standard___environ___String___setenv_t)(val_t p0, val_t p1);
 val_t NEW_String_standard___string___String___from_cstring(val_t p0);
 val_t NEW_String_standard___string___String___with_native(val_t p0, val_t p1);
+val_t NEW_String_standard___string___String___from_substring(val_t p0, val_t p1, val_t p2);
+val_t NEW_String_standard___string___String___copy_from_native(val_t p0);
 val_t standard___environ___NativeString___get_environ(val_t p0);
 typedef val_t (*standard___environ___NativeString___get_environ_t)(val_t p0);
 void standard___environ___NativeString___setenv(val_t p0, val_t p1);
index 83750b9..1ec4c4c 100644 (file)
@@ -250,7 +250,7 @@ void standard___exec___Process___execute(val_t p0, val_t p1, val_t p2, val_t p3,
         if (UNTAG_Bool(REGB3)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB2)];
         /* ../lib/standard/exec.nit:62 */
         REGB3 = TAG_Char('\0');
index e122530..527d01e 100644 (file)
@@ -1269,7 +1269,7 @@ val_t standard___file___String___simplify_path(val_t p0){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* ../lib/standard/file.nit:253 */
       if (!once_value_2) {
@@ -1570,7 +1570,7 @@ void standard___file___String___mkdir(val_t p0){
   if (UNTAG_Bool(REGB1)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label3;
@@ -1620,7 +1620,7 @@ void standard___file___String___mkdir(val_t p0){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* ../lib/standard/file.nit:298 */
       REGB1 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[3])(fra.me.REG[3]);
index ceed42b..e90a1c2 100644 (file)
@@ -198,6 +198,8 @@ val_t standard___file___String___files(val_t p0);
 typedef val_t (*standard___file___String___files_t)(val_t p0);
 val_t NEW_String_standard___string___String___from_cstring(val_t p0);
 val_t NEW_String_standard___string___String___with_native(val_t p0, val_t p1);
+val_t NEW_String_standard___string___String___from_substring(val_t p0, val_t p1, val_t p2);
+val_t NEW_String_standard___string___String___copy_from_native(val_t p0);
 val_t standard___file___NativeString___file_exists(val_t p0);
 typedef val_t (*standard___file___NativeString___file_exists_t)(val_t p0);
 val_t standard___file___NativeString___file_stat(val_t p0);
diff --git a/c_src/standard___string._ffi.c b/c_src/standard___string._ffi.c
new file mode 100644 (file)
index 0000000..c2cf002
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+       Extern implementation of Nit module string
+*/
+#include "standard___string._ffi.h"
+
+String Float_to_precision_native___impl( float recv, bigint nb )
+{
+#line 826 "../lib/standard/string.nit"
+
+
+               int size;
+               char *str;
+
+               size = snprintf(NULL, 0, "%.*f", (int)nb, recv);
+               str = malloc(size + 1);
+               sprintf(str, "%.*f", (int)nb, recv );
+
+               return new_String_from_cstring( str );
+       }
diff --git a/c_src/standard___string._ffi.h b/c_src/standard___string._ffi.h
new file mode 100644 (file)
index 0000000..03cb07d
--- /dev/null
@@ -0,0 +1,10 @@
+/*
+       Extern implementation of Nit module string
+*/
+#include <string._nitni.h>
+
+#ifndef STANDARD___STRING_NIT_H
+#define STANDARD___STRING_NIT_H
+
+String Float_to_precision_native___impl( float recv, bigint nb );
+#endif
index c9cb79e..315d61d 100644 (file)
@@ -47,7 +47,7 @@ val_t standard___string___AbstractString_____bra(val_t p0, val_t p1){
     nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 30);
   }
   fra.me.REG[0] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:602 */
+  /* ../lib/standard/string.nit:955 */
   REGB0 = TAG_Char(UNBOX_NativeString(fra.me.REG[0])[UNTAG_Int(REGB0)]);
   /* ../lib/standard/string.nit:30 */
   goto label1;
@@ -166,7 +166,7 @@ val_t standard___string___AbstractString___substring(val_t p0, val_t p1, val_t p
           nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 47);
         }
         fra.me.REG[2] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
-        /* ../lib/standard/string.nit:602 */
+        /* ../lib/standard/string.nit:955 */
         REGB2 = TAG_Char(UNBOX_NativeString(fra.me.REG[2])[UNTAG_Int(REGB0)]);
         /* ../lib/standard/string.nit:47 */
         CALL_standard___collection___abstract_collection___Sequence___push(fra.me.REG[1])(fra.me.REG[1], REGB2);
@@ -256,24 +256,26 @@ val_t standard___string___AbstractString___substring_from(val_t p0, val_t p1){
 }
 static const char LOCATE_standard___string___AbstractString___has_substring[] = "string::AbstractString::has_substring";
 val_t standard___string___AbstractString___has_substring(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
   val_t REGB3;
   val_t REGB4;
   val_t REGB5;
+  val_t REGB6;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
   fra.me.line = 67;
   fra.me.meth = LOCATE_standard___string___AbstractString___has_substring;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   REGB0 = p2;
@@ -303,7 +305,7 @@ val_t standard___string___AbstractString___has_substring(val_t p0, val_t p1, val
   } else {
     nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 76);
   }
-  fra.me.REG[1] = ATTR_standard___string___AbstractString____items(fra.me.REG[1]);
+  fra.me.REG[3] = ATTR_standard___string___AbstractString____items(fra.me.REG[1]);
   /* ../lib/standard/collection/array.nit:24 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
@@ -337,54 +339,64 @@ val_t standard___string___AbstractString___has_substring(val_t p0, val_t p1, val
     goto label1;
   }
   /* ../lib/standard/string.nit:78 */
+  REGB3 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[1])!=NIT_NULL);
+  if (UNTAG_Bool(REGB3)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 78);
+  }
+  REGB3 = ATTR_standard___string___String____index_from(fra.me.REG[1]);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB4 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB3));
+  /* ../lib/standard/string.nit:79 */
+  REGB2 = REGB4;
+  /* ../lib/standard/string.nit:80 */
   while(1) {
-    REGB3 = TAG_Int(0);
     REGB4 = TAG_Bool(VAL_ISA(REGB3, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
     if (UNTAG_Bool(REGB4)) {
     } else {
       nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
     }
     /* ../lib/standard/kernel.nit:236 */
-    REGB3 = TAG_Bool(UNTAG_Int(REGB2)>=UNTAG_Int(REGB3));
-    /* ../lib/standard/string.nit:78 */
-    if (UNTAG_Bool(REGB3)) {
-      /* ../lib/standard/string.nit:602 */
-      REGB3 = TAG_Char(UNBOX_NativeString(fra.me.REG[2])[UNTAG_Int(REGB0)]);
-      REGB4 = TAG_Char(UNBOX_NativeString(fra.me.REG[1])[UNTAG_Int(REGB2)]);
-      /* ../lib/standard/string.nit:79 */
-      REGB5 = TAG_Bool(IS_EQUAL_OO(REGB3,REGB4));
-      if (UNTAG_Bool(REGB5)) {
+    REGB4 = TAG_Bool(UNTAG_Int(REGB2)>=UNTAG_Int(REGB3));
+    /* ../lib/standard/string.nit:80 */
+    if (UNTAG_Bool(REGB4)) {
+      /* ../lib/standard/string.nit:955 */
+      REGB4 = TAG_Char(UNBOX_NativeString(fra.me.REG[2])[UNTAG_Int(REGB0)]);
+      REGB5 = TAG_Char(UNBOX_NativeString(fra.me.REG[3])[UNTAG_Int(REGB2)]);
+      /* ../lib/standard/string.nit:81 */
+      REGB6 = TAG_Bool(IS_EQUAL_OO(REGB4,REGB5));
+      if (UNTAG_Bool(REGB6)) {
       } else {
         /* ../lib/standard/kernel.nit:381 */
-        REGB4 = TAG_Bool((REGB3)==(REGB4));
-        /* ../lib/standard/string.nit:79 */
-        REGB5 = REGB4;
+        REGB5 = TAG_Bool((REGB4)==(REGB5));
+        /* ../lib/standard/string.nit:81 */
+        REGB6 = REGB5;
       }
-      REGB5 = TAG_Bool(!UNTAG_Bool(REGB5));
-      if (UNTAG_Bool(REGB5)) {
-        REGB5 = TAG_Bool(0);
-        REGB1 = REGB5;
+      REGB6 = TAG_Bool(!UNTAG_Bool(REGB6));
+      if (UNTAG_Bool(REGB6)) {
+        REGB6 = TAG_Bool(0);
+        REGB1 = REGB6;
         goto label1;
       }
-      /* ../lib/standard/string.nit:80 */
-      REGB5 = TAG_Int(1);
+      /* ../lib/standard/string.nit:82 */
+      REGB6 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:240 */
-      REGB5 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB5));
-      /* ../lib/standard/string.nit:80 */
-      REGB0 = REGB5;
-      /* ../lib/standard/string.nit:81 */
-      REGB5 = TAG_Int(1);
+      REGB6 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB6));
+      /* ../lib/standard/string.nit:82 */
+      REGB0 = REGB6;
+      /* ../lib/standard/string.nit:83 */
+      REGB6 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:240 */
-      REGB5 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB5));
-      /* ../lib/standard/string.nit:81 */
-      REGB2 = REGB5;
+      REGB6 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB6));
+      /* ../lib/standard/string.nit:83 */
+      REGB2 = REGB6;
     } else {
-      /* ../lib/standard/string.nit:78 */
+      /* ../lib/standard/string.nit:80 */
       goto label2;
     }
   }
   label2: while(0);
-  /* ../lib/standard/string.nit:83 */
+  /* ../lib/standard/string.nit:85 */
   REGB2 = TAG_Bool(1);
   REGB1 = REGB2;
   goto label1;
@@ -399,7 +411,7 @@ val_t standard___string___AbstractString___has_prefix(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 86;
+  fra.me.line = 88;
   fra.me.meth = LOCATE_standard___string___AbstractString___has_prefix;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -408,7 +420,7 @@ val_t standard___string___AbstractString___has_prefix(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/string.nit:90 */
+  /* ../lib/standard/string.nit:92 */
   REGB0 = TAG_Int(0);
   REGB0 = CALL_standard___string___AbstractString___has_substring(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], REGB0);
   goto label1;
@@ -424,7 +436,7 @@ val_t standard___string___AbstractString___has_suffix(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 92;
+  fra.me.line = 94;
   fra.me.meth = LOCATE_standard___string___AbstractString___has_suffix;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -448,7 +460,7 @@ val_t standard___string___AbstractString___has_suffix(val_t p0, val_t p1){
   REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
   /* ../lib/standard/kernel.nit:240 */
   REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-  /* ../lib/standard/string.nit:96 */
+  /* ../lib/standard/string.nit:98 */
   REGB1 = CALL_standard___string___AbstractString___has_substring(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], REGB1);
   goto label1;
   label1: while(0);
@@ -462,19 +474,19 @@ val_t standard___string___AbstractString___to_i(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 98;
+  fra.me.line = 100;
   fra.me.meth = LOCATE_standard___string___AbstractString___to_i;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:102 */
+  /* ../lib/standard/string.nit:104 */
   fra.me.REG[0] = CALL_standard___string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_standard___string___String___to_cstring(fra.me.REG[0])(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:613 */
+  /* ../lib/standard/string.nit:966 */
   REGB0 = TAG_Int(atoi(UNBOX_NativeString(fra.me.REG[0])));
-  /* ../lib/standard/string.nit:102 */
+  /* ../lib/standard/string.nit:104 */
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -486,14 +498,14 @@ val_t standard___string___AbstractString___to_f(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 105;
+  fra.me.line = 107;
   fra.me.meth = LOCATE_standard___string___AbstractString___to_f;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:109 */
+  /* ../lib/standard/string.nit:111 */
   fra.me.REG[0] = CALL_standard___string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_standard___string___String___to_cstring(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_standard___string___NativeString___atof(fra.me.REG[0])(fra.me.REG[0]);
@@ -509,14 +521,14 @@ val_t standard___string___AbstractString___to_hex(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 112;
+  fra.me.line = 114;
   fra.me.meth = LOCATE_standard___string___AbstractString___to_hex;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:113 */
+  /* ../lib/standard/string.nit:115 */
   REGB0 = TAG_Int(16);
   REGB0 = CALL_standard___string___AbstractString___a_to(fra.me.REG[0])(fra.me.REG[0], REGB0);
   goto label1;
@@ -531,7 +543,7 @@ val_t standard___string___AbstractString___a_to(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 115;
+  fra.me.line = 117;
   fra.me.meth = LOCATE_standard___string___AbstractString___a_to;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -542,12 +554,12 @@ val_t standard___string___AbstractString___a_to(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/string.nit:115 */
+  /* ../lib/standard/string.nit:117 */
   fra.me.REG[1] = REGB0;
-  /* ../lib/standard/string.nit:118 */
+  /* ../lib/standard/string.nit:120 */
   REGB0 = TAG_Int(0);
   fra.me.REG[2] = REGB0;
-  /* ../lib/standard/string.nit:119 */
+  /* ../lib/standard/string.nit:121 */
   REGB0 = TAG_Bool(0);
   fra.me.REG[3] = REGB0;
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_standard___string___AbstractString___a_to_1));
@@ -555,15 +567,15 @@ val_t standard___string___AbstractString___a_to(val_t p0, val_t p1){
     case 0: break;
     case 1: (&(fra.me))->has_broke = 0; goto label3;
   }
-  /* ../lib/standard/string.nit:136 */
+  /* ../lib/standard/string.nit:138 */
   if (UNTAG_Bool(fra.me.REG[3])) {
     /* ../lib/standard/kernel.nit:239 */
     REGB0 = TAG_Int(-UNTAG_Int(fra.me.REG[2]));
-    /* ../lib/standard/string.nit:137 */
+    /* ../lib/standard/string.nit:139 */
     fra.me.REG[0] = REGB0;
     goto label3;
   } else {
-    /* ../lib/standard/string.nit:139 */
+    /* ../lib/standard/string.nit:141 */
     fra.me.REG[0] = fra.me.REG[2];
     goto label3;
   }
@@ -578,7 +590,7 @@ val_t standard___string___AbstractString___a_to(val_t p0, val_t p1){
     val_t REGB2;
     fun_t CREG[1];
     val_t tmp;
-    /* ../lib/standard/string.nit:121 */
+    /* ../lib/standard/string.nit:123 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_standard___string;
     fra.me.line = 0;
@@ -592,7 +604,7 @@ val_t standard___string___AbstractString___a_to(val_t p0, val_t p1){
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
     REGB0 = fra.me.REG[0];
-    /* ../lib/standard/string.nit:123 */
+    /* ../lib/standard/string.nit:125 */
     REGB0 = CALL_standard___kernel___Char___to_i(REGB0)(REGB0);
     REGB1 = TAG_Bool(VAL_ISA(closctx->REG[1], VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
     if (UNTAG_Bool(REGB1)) {
@@ -601,24 +613,24 @@ val_t standard___string___AbstractString___a_to(val_t p0, val_t p1){
     }
     /* ../lib/standard/kernel.nit:237 */
     REGB1 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(closctx->REG[1]));
-    /* ../lib/standard/string.nit:124 */
+    /* ../lib/standard/string.nit:126 */
     if (UNTAG_Bool(REGB1)) {
-      /* ../lib/standard/string.nit:125 */
+      /* ../lib/standard/string.nit:127 */
       if (UNTAG_Bool(closctx->REG[3])) {
         /* ../lib/standard/kernel.nit:239 */
         REGB1 = TAG_Int(-UNTAG_Int(closctx->REG[2]));
-        /* ../lib/standard/string.nit:126 */
+        /* ../lib/standard/string.nit:128 */
         closctx->REG[0] = REGB1;
         closctx->has_broke = 1;
         goto label2;
       } else {
-        /* ../lib/standard/string.nit:128 */
+        /* ../lib/standard/string.nit:130 */
         closctx->REG[0] = closctx->REG[2];
         closctx->has_broke = 1;
         goto label2;
       }
     } else {
-      /* ../lib/standard/string.nit:130 */
+      /* ../lib/standard/string.nit:132 */
       REGB1 = TAG_Int(0);
       REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
       if (UNTAG_Bool(REGB2)) {
@@ -627,9 +639,9 @@ val_t standard___string___AbstractString___a_to(val_t p0, val_t p1){
       }
       /* ../lib/standard/kernel.nit:235 */
       REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-      /* ../lib/standard/string.nit:130 */
+      /* ../lib/standard/string.nit:132 */
       if (UNTAG_Bool(REGB1)) {
-        /* ../lib/standard/string.nit:131 */
+        /* ../lib/standard/string.nit:133 */
         REGB1 = TAG_Bool(1);
         closctx->REG[3] = REGB1;
       } else {
@@ -637,7 +649,7 @@ val_t standard___string___AbstractString___a_to(val_t p0, val_t p1){
         REGB1 = TAG_Int(UNTAG_Int(closctx->REG[2])*UNTAG_Int(closctx->REG[1]));
         /* ../lib/standard/kernel.nit:238 */
         REGB0 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB0));
-        /* ../lib/standard/string.nit:133 */
+        /* ../lib/standard/string.nit:135 */
         closctx->REG[2] = REGB0;
       }
     }
@@ -645,6 +657,109 @@ val_t standard___string___AbstractString___a_to(val_t p0, val_t p1){
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_standard___string___AbstractString___is_numeric[] = "string::AbstractString::is_numeric";
+val_t standard___string___AbstractString___is_numeric(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 145;
+  fra.me.meth = LOCATE_standard___string___AbstractString___is_numeric;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ../lib/standard/string.nit:148 */
+  REGB0 = TAG_Bool(0);
+  fra.me.REG[1] = REGB0;
+  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_standard___string___AbstractString___is_numeric_1));
+  switch ((&(fra.me))->has_broke) {
+    case 0: break;
+    case 1: (&(fra.me))->has_broke = 0; goto label3;
+  }
+  /* ../lib/standard/string.nit:161 */
+  REGB0 = TAG_Bool(1);
+  fra.me.REG[0] = REGB0;
+  goto label3;
+  label3: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+  void OC_standard___string___AbstractString___is_numeric_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    val_t REGB0;
+    val_t REGB1;
+    val_t REGB2;
+    val_t REGB3;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ../lib/standard/string.nit:149 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_standard___string;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_standard___string___AbstractString___is_numeric;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.nitni_local_ref_head = NULL;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    REGB0 = fra.me.REG[0];
+    /* ../lib/standard/string.nit:151 */
+    REGB1 = CALL_standard___string___Char___is_numeric(REGB0)(REGB0);
+    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+    if (UNTAG_Bool(REGB1)) {
+      /* ../lib/standard/string.nit:153 */
+      REGB1 = TAG_Char('.');
+      REGB2 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB1));
+      if (UNTAG_Bool(REGB2)) {
+      } else {
+        /* ../lib/standard/kernel.nit:381 */
+        REGB1 = TAG_Bool((REGB0)==(REGB1));
+        /* ../lib/standard/string.nit:153 */
+        REGB2 = REGB1;
+      }
+      if (UNTAG_Bool(REGB2)) {
+        REGB2 = TAG_Bool(1);
+      } else {
+        REGB1 = TAG_Char(',');
+        REGB3 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB1));
+        if (UNTAG_Bool(REGB3)) {
+        } else {
+          /* ../lib/standard/kernel.nit:381 */
+          REGB1 = TAG_Bool((REGB0)==(REGB1));
+          /* ../lib/standard/string.nit:153 */
+          REGB3 = REGB1;
+        }
+        REGB2 = REGB3;
+      }
+      if (UNTAG_Bool(REGB2)) {
+        REGB2 = TAG_Bool(!UNTAG_Bool(closctx->REG[1]));
+      } else {
+        REGB3 = TAG_Bool(0);
+        REGB2 = REGB3;
+      }
+      if (UNTAG_Bool(REGB2)) {
+        /* ../lib/standard/string.nit:155 */
+        REGB2 = TAG_Bool(1);
+        closctx->REG[1] = REGB2;
+      } else {
+        /* ../lib/standard/string.nit:157 */
+        REGB2 = TAG_Bool(0);
+        closctx->REG[0] = REGB2;
+        closctx->has_broke = 1;
+        goto label2;
+      }
+    }
+    label2: while(0);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
 static const char LOCATE_standard___string___AbstractString___to_upper[] = "string::AbstractString::to_upper";
 val_t standard___string___AbstractString___to_upper(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -652,7 +767,7 @@ val_t standard___string___AbstractString___to_upper(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 143;
+  fra.me.line = 164;
   fra.me.meth = LOCATE_standard___string___AbstractString___to_upper;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -667,10 +782,10 @@ val_t standard___string___AbstractString___to_upper(val_t p0){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:146 */
+  /* ../lib/standard/string.nit:167 */
   fra.me.REG[1] = NEW_Buffer_standard___string___Buffer___with_capacity(REGB0);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_standard___string___AbstractString___to_upper_1));
-  /* ../lib/standard/string.nit:148 */
+  /* ../lib/standard/string.nit:169 */
   fra.me.REG[1] = CALL_standard___string___Object___to_s(fra.me.REG[1])(fra.me.REG[1]);
   goto label2;
   label2: while(0);
@@ -682,7 +797,7 @@ val_t standard___string___AbstractString___to_upper(val_t p0){
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ../lib/standard/string.nit:147 */
+    /* ../lib/standard/string.nit:168 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_standard___string;
     fra.me.line = 0;
@@ -708,7 +823,7 @@ val_t standard___string___AbstractString___to_lower(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 151;
+  fra.me.line = 172;
   fra.me.meth = LOCATE_standard___string___AbstractString___to_lower;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -723,10 +838,10 @@ val_t standard___string___AbstractString___to_lower(val_t p0){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:154 */
+  /* ../lib/standard/string.nit:175 */
   fra.me.REG[1] = NEW_Buffer_standard___string___Buffer___with_capacity(REGB0);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_standard___string___AbstractString___to_lower_1));
-  /* ../lib/standard/string.nit:156 */
+  /* ../lib/standard/string.nit:177 */
   fra.me.REG[1] = CALL_standard___string___Object___to_s(fra.me.REG[1])(fra.me.REG[1]);
   goto label2;
   label2: while(0);
@@ -738,7 +853,7 @@ val_t standard___string___AbstractString___to_lower(val_t p0){
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ../lib/standard/string.nit:155 */
+    /* ../lib/standard/string.nit:176 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_standard___string;
     fra.me.line = 0;
@@ -757,6 +872,172 @@ val_t standard___string___AbstractString___to_lower(val_t p0){
     stack_frame_head = fra.me.prev;
     return;
   }
+static const char LOCATE_standard___string___AbstractString___trim[] = "string::AbstractString::trim";
+val_t standard___string___AbstractString___trim(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
+  val_t tmp;
+        static val_t once_value_2; /* Once value */
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 180;
+  fra.me.meth = LOCATE_standard___string___AbstractString___trim;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ../lib/standard/string.nit:184 */
+  REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 184);
+  }
+  REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  REGB1 = TAG_Int(0);
+  REGB2 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB1));
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    /* ../lib/standard/kernel.nit:230 */
+    REGB1 = TAG_Bool((REGB0)==(REGB1));
+    /* ../lib/standard/string.nit:184 */
+    REGB2 = REGB1;
+  }
+  if (UNTAG_Bool(REGB2)) {
+    fra.me.REG[1] = CALL_standard___string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
+    goto label1;
+  }
+  /* ../lib/standard/string.nit:186 */
+  REGB2 = TAG_Int(0);
+  /* ../lib/standard/string.nit:187 */
+  while(1) {
+    REGB1 = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[0])(fra.me.REG[0], REGB2);
+    /* ../lib/standard/kernel.nit:416 */
+    REGB1 = TAG_Int((unsigned char)UNTAG_Char(REGB1));
+    /* ../lib/standard/string.nit:187 */
+    REGB0 = TAG_Int(32);
+    REGB3 = TAG_Bool(VAL_ISA(REGB0, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB3)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:234 */
+    REGB0 = TAG_Bool(UNTAG_Int(REGB1)<=UNTAG_Int(REGB0));
+    /* ../lib/standard/string.nit:187 */
+    if (UNTAG_Bool(REGB0)) {
+      /* ../lib/standard/string.nit:188 */
+      REGB0 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB0 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB0));
+      /* ../lib/standard/string.nit:188 */
+      REGB2 = REGB0;
+      /* ../lib/standard/string.nit:189 */
+      REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 189);
+      }
+      REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+      REGB1 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB0));
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        /* ../lib/standard/kernel.nit:230 */
+        REGB0 = TAG_Bool((REGB2)==(REGB0));
+        /* ../lib/standard/string.nit:189 */
+        REGB1 = REGB0;
+      }
+      if (UNTAG_Bool(REGB1)) {
+        if (!once_value_2) {
+          fra.me.REG[2] = BOX_NativeString("");
+          REGB1 = TAG_Int(0);
+          fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
+          once_value_2 = fra.me.REG[2];
+          register_static_object(&once_value_2);
+        } else fra.me.REG[2] = once_value_2;
+        fra.me.REG[2] = fra.me.REG[2];
+        fra.me.REG[1] = fra.me.REG[2];
+        goto label1;
+      }
+    } else {
+      /* ../lib/standard/string.nit:187 */
+      goto label3;
+    }
+  }
+  label3: while(0);
+  /* ../lib/standard/collection/array.nit:24 */
+  REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+  }
+  REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:192 */
+  REGB0 = TAG_Int(1);
+  /* ../lib/standard/kernel.nit:240 */
+  REGB0 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB0));
+  /* ../lib/standard/string.nit:193 */
+  while(1) {
+    REGB1 = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[0])(fra.me.REG[0], REGB0);
+    /* ../lib/standard/kernel.nit:416 */
+    REGB1 = TAG_Int((unsigned char)UNTAG_Char(REGB1));
+    /* ../lib/standard/string.nit:193 */
+    REGB3 = TAG_Int(32);
+    REGB4 = TAG_Bool(VAL_ISA(REGB3, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB4)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:234 */
+    REGB3 = TAG_Bool(UNTAG_Int(REGB1)<=UNTAG_Int(REGB3));
+    /* ../lib/standard/string.nit:193 */
+    if (UNTAG_Bool(REGB3)) {
+      /* ../lib/standard/string.nit:194 */
+      REGB3 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:240 */
+      REGB3 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB3));
+      /* ../lib/standard/string.nit:194 */
+      REGB0 = REGB3;
+      /* ../lib/standard/string.nit:195 */
+      REGB3 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB2));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        /* ../lib/standard/kernel.nit:230 */
+        REGB1 = TAG_Bool((REGB0)==(REGB2));
+        /* ../lib/standard/string.nit:195 */
+        REGB3 = REGB1;
+      }
+      if (UNTAG_Bool(REGB3)) {
+        REGB3 = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[0])(fra.me.REG[0], REGB2);
+        fra.me.REG[2] = CALL_standard___string___Object___to_s(REGB3)(REGB3);
+        fra.me.REG[1] = fra.me.REG[2];
+        goto label1;
+      }
+    } else {
+      /* ../lib/standard/string.nit:193 */
+      goto label4;
+    }
+  }
+  label4: while(0);
+  /* ../lib/standard/kernel.nit:240 */
+  REGB0 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB2));
+  /* ../lib/standard/string.nit:197 */
+  REGB3 = TAG_Int(1);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB3 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB3));
+  /* ../lib/standard/string.nit:197 */
+  fra.me.REG[0] = CALL_standard___string___AbstractString___substring(fra.me.REG[0])(fra.me.REG[0], REGB2, REGB3);
+  fra.me.REG[1] = fra.me.REG[0];
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
 static const char LOCATE_standard___string___AbstractString___output[] = "string::AbstractString::(kernel::Object::output)";
 void standard___string___AbstractString___output(val_t p0){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
@@ -766,7 +1047,7 @@ void standard___string___AbstractString___output(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 160;
+  fra.me.line = 200;
   fra.me.meth = LOCATE_standard___string___AbstractString___output;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -774,9 +1055,9 @@ void standard___string___AbstractString___output(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:162 */
+  /* ../lib/standard/string.nit:202 */
   REGB0 = TAG_Int(0);
-  /* ../lib/standard/string.nit:163 */
+  /* ../lib/standard/string.nit:203 */
   while(1) {
     /* ../lib/standard/collection/array.nit:24 */
     REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
@@ -792,27 +1073,27 @@ void standard___string___AbstractString___output(val_t p0){
     }
     /* ../lib/standard/kernel.nit:235 */
     REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/string.nit:163 */
+    /* ../lib/standard/string.nit:203 */
     if (UNTAG_Bool(REGB1)) {
-      /* ../lib/standard/string.nit:164 */
+      /* ../lib/standard/string.nit:204 */
       REGB1 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 164);
+        nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 204);
       }
       fra.me.REG[1] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
-      /* ../lib/standard/string.nit:602 */
+      /* ../lib/standard/string.nit:955 */
       REGB1 = TAG_Char(UNBOX_NativeString(fra.me.REG[1])[UNTAG_Int(REGB0)]);
       /* ../lib/standard/kernel.nit:383 */
       printf("%c", (unsigned char)UNTAG_Char(REGB1));;
-      /* ../lib/standard/string.nit:165 */
+      /* ../lib/standard/string.nit:205 */
       REGB1 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:238 */
       REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
-      /* ../lib/standard/string.nit:165 */
+      /* ../lib/standard/string.nit:205 */
       REGB0 = REGB1;
     } else {
-      /* ../lib/standard/string.nit:163 */
+      /* ../lib/standard/string.nit:203 */
       goto label1;
     }
   }
@@ -820,102 +1101,1296 @@ void standard___string___AbstractString___output(val_t p0){
   stack_frame_head = fra.me.prev;
   return;
 }
-static const char LOCATE_standard___string___String___with_native[] = "string::String::with_native";
-void standard___string___String___with_native(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos0 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___string___String].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+static const char LOCATE_standard___string___String___index_from[] = "string::String::index_from";
+val_t standard___string___String___index_from(val_t p0){
+  struct {struct stack_frame_t me;} fra;
   val_t REGB0;
-  val_t REGB1;
-  val_t REGB2;
   val_t tmp;
-  if (init_table[itpos0]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 177;
-  fra.me.meth = LOCATE_standard___string___String___with_native;
+  fra.me.line = 218;
+  fra.me.meth = LOCATE_standard___string___String___index_from;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = p2;
-  /* ../lib/standard/string.nit:180 */
-  REGB1 = TAG_Int(0);
-  REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
-  if (UNTAG_Bool(REGB2)) {
+  /* ../lib/standard/string.nit:218 */
+  REGB0 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 218);
   }
-  /* ../lib/standard/kernel.nit:236 */
-  REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ../lib/standard/string.nit:180 */
-  if (UNTAG_Bool(REGB1)) {
+  REGB0 = ATTR_standard___string___String____index_from(fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+static const char LOCATE_standard___string___String___index_to[] = "string::String::index_to";
+val_t standard___string___String___index_to(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 221;
+  fra.me.meth = LOCATE_standard___string___String___index_to;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ../lib/standard/string.nit:221 */
+  REGB0 = TAG_Bool(ATTR_standard___string___String____index_to(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_standard___string, 180);
+    nit_abort("Uninitialized attribute %s", "_index_to", LOCATE_standard___string, 221);
   }
-  /* ../lib/standard/string.nit:181 */
-  ATTR_standard___string___AbstractString____items(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/string.nit:182 */
-  ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]) = REGB0;
+  REGB0 = ATTR_standard___string___String____index_to(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos0] = 1;
-  return;
+  return REGB0;
 }
-static const char LOCATE_standard___string___String___from_cstring[] = "string::String::from_cstring";
-void standard___string___String___from_cstring(val_t p0, val_t p1, int* init_table){
-  int itpos1 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___string___String].i;
+static const char LOCATE_standard___string___String_____bra[] = "string::String::(abstract_collection::SequenceRead::[])";
+val_t standard___string___String_____bra(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
   val_t tmp;
-  if (init_table[itpos1]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 185;
-  fra.me.meth = LOCATE_standard___string___String___from_cstring;
+  fra.me.line = 228;
+  fra.me.meth = LOCATE_standard___string___String_____bra;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ../lib/standard/string.nit:188 */
-  REGB0 = CALL_standard___string___NativeString___cstring_length(fra.me.REG[1])(fra.me.REG[1]);
-  /* ../lib/standard/string.nit:189 */
-  ATTR_standard___string___AbstractString____items(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/string.nit:190 */
-  ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]) = REGB0;
+  REGB0 = p1;
+  /* ../lib/standard/string.nit:231 */
+  REGB1 = TAG_Int(0);
+  REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:236 */
+  REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:231 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_standard___string, 231);
+  }
+  /* ../lib/standard/string.nit:234 */
+  REGB1 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 234);
+  }
+  REGB1 = ATTR_standard___string___String____index_from(fra.me.REG[0]);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:234 */
+  REGB2 = TAG_Bool(ATTR_standard___string___String____index_to(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_to", LOCATE_standard___string, 234);
+  }
+  REGB2 = ATTR_standard___string___String____index_to(fra.me.REG[0]);
+  REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB3)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:234 */
+  REGB2 = TAG_Bool(UNTAG_Int(REGB1)<=UNTAG_Int(REGB2));
+  /* ../lib/standard/string.nit:234 */
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_standard___string, 234);
+  }
+  /* ../lib/standard/string.nit:235 */
+  REGB2 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 235);
+  }
+  fra.me.REG[1] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+  REGB2 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 235);
+  }
+  REGB2 = ATTR_standard___string___String____index_from(fra.me.REG[0]);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+  /* ../lib/standard/string.nit:955 */
+  REGB2 = TAG_Char(UNBOX_NativeString(fra.me.REG[1])[UNTAG_Int(REGB2)]);
+  /* ../lib/standard/string.nit:235 */
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB2;
+}
+static const char LOCATE_standard___string___String___substring[] = "string::String::(string::AbstractString::substring)";
+val_t standard___string___String___substring(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
+  val_t tmp;
+    static val_t once_value_2; /* Once value */
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 238;
+  fra.me.meth = LOCATE_standard___string___String___substring;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  REGB1 = p2;
+  /* ../lib/standard/string.nit:251 */
+  REGB2 = TAG_Int(0);
+  REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB3)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:236 */
+  REGB2 = TAG_Bool(UNTAG_Int(REGB1)>=UNTAG_Int(REGB2));
+  /* ../lib/standard/string.nit:251 */
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_standard___string, 251);
+  }
+  /* ../lib/standard/string.nit:253 */
+  REGB2 = TAG_Int(0);
+  REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB3)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:235 */
+  REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB2));
+  /* ../lib/standard/string.nit:253 */
+  if (UNTAG_Bool(REGB2)) {
+    /* ../lib/standard/kernel.nit:238 */
+    REGB2 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB0));
+    /* ../lib/standard/string.nit:254 */
+    REGB1 = REGB2;
+    /* ../lib/standard/string.nit:255 */
+    REGB2 = TAG_Int(0);
+    REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB3)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
+    /* ../lib/standard/string.nit:255 */
+    if (UNTAG_Bool(REGB2)) {
+      REGB2 = TAG_Int(0);
+      REGB1 = REGB2;
+    }
+    /* ../lib/standard/string.nit:256 */
+    REGB2 = TAG_Int(0);
+    REGB0 = REGB2;
+  }
+  /* ../lib/standard/string.nit:259 */
+  REGB2 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 259);
+  }
+  REGB2 = ATTR_standard___string___String____index_from(fra.me.REG[0]);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB0 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB0));
+  REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:261 */
+  REGB3 = TAG_Bool(ATTR_standard___string___String____index_to(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB3)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_to", LOCATE_standard___string, 261);
+  }
+  REGB3 = ATTR_standard___string___String____index_to(fra.me.REG[0]);
+  REGB4 = TAG_Bool(VAL_ISA(REGB3, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB4)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:237 */
+  REGB3 = TAG_Bool(UNTAG_Int(REGB2)>UNTAG_Int(REGB3));
+  /* ../lib/standard/string.nit:261 */
+  if (UNTAG_Bool(REGB3)) {
+    REGB3 = TAG_Bool(ATTR_standard___string___String____index_to(fra.me.REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB3)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_index_to", LOCATE_standard___string, 261);
+    }
+    REGB3 = ATTR_standard___string___String____index_to(fra.me.REG[0]);
+    REGB2 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 261);
+    }
+    fra.me.REG[1] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+    fra.me.REG[1] = NEW_String_standard___string___String___from_substring(REGB0, REGB3, fra.me.REG[1]);
+    goto label1;
+  }
+  /* ../lib/standard/string.nit:263 */
+  REGB3 = TAG_Int(0);
+  REGB2 = TAG_Bool(IS_EQUAL_OO(REGB1,REGB3));
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    /* ../lib/standard/kernel.nit:230 */
+    REGB3 = TAG_Bool((REGB1)==(REGB3));
+    /* ../lib/standard/string.nit:263 */
+    REGB2 = REGB3;
+  }
+  if (UNTAG_Bool(REGB2)) {
+    if (!once_value_2) {
+      fra.me.REG[2] = BOX_NativeString("");
+      REGB2 = TAG_Int(0);
+      fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB2);
+      once_value_2 = fra.me.REG[2];
+      register_static_object(&once_value_2);
+    } else fra.me.REG[2] = once_value_2;
+    fra.me.REG[2] = fra.me.REG[2];
+    fra.me.REG[1] = fra.me.REG[2];
+    goto label1;
+  }
+  /* ../lib/standard/kernel.nit:238 */
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:265 */
+  REGB2 = TAG_Int(1);
+  /* ../lib/standard/kernel.nit:240 */
+  REGB2 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB2));
+  /* ../lib/standard/string.nit:265 */
+  REGB1 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 265);
+  }
+  fra.me.REG[0] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+  fra.me.REG[0] = NEW_String_standard___string___String___from_substring(REGB0, REGB2, fra.me.REG[0]);
+  fra.me.REG[1] = fra.me.REG[0];
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_standard___string___String___substring_from[] = "string::String::(string::AbstractString::substring_from)";
+val_t standard___string___String___substring_from(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+    static val_t once_value_1; /* Once value */
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 268;
+  fra.me.meth = LOCATE_standard___string___String___substring_from;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ../lib/standard/string.nit:278 */
+  REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 278);
+  }
+  REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:237 */
+  REGB1 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:278 */
+  if (UNTAG_Bool(REGB1)) {
+    if (!once_value_1) {
+      fra.me.REG[1] = BOX_NativeString("");
+      REGB1 = TAG_Int(0);
+      fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB1);
+      once_value_1 = fra.me.REG[1];
+      register_static_object(&once_value_1);
+    } else fra.me.REG[1] = once_value_1;
+    fra.me.REG[1] = fra.me.REG[1];
+    goto label2;
+  }
+  /* ../lib/standard/string.nit:279 */
+  REGB1 = TAG_Int(0);
+  REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:235 */
+  REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:279 */
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Int(0);
+    REGB0 = REGB1;
+  }
+  /* ../lib/standard/string.nit:280 */
+  REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 280);
+  }
+  REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_standard___string___AbstractString___substring(fra.me.REG[0])(fra.me.REG[0], REGB0, REGB1);
+  fra.me.REG[1] = fra.me.REG[0];
+  goto label2;
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_standard___string___String___has_substring[] = "string::String::(string::AbstractString::has_substring)";
+val_t standard___string___String___has_substring(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
+  val_t REGB5;
+  val_t REGB6;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 283;
+  fra.me.meth = LOCATE_standard___string___String___has_substring;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = p2;
+  /* ../lib/standard/string.nit:289 */
+  REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 289);
+  }
+  REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
+  REGB2 = TAG_Int(1);
+  /* ../lib/standard/kernel.nit:240 */
+  REGB2 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB2));
+  /* ../lib/standard/kernel.nit:238 */
+  REGB0 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+  /* ../lib/standard/string.nit:292 */
+  REGB1 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 292);
+  }
+  fra.me.REG[2] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:294 */
+  REGB1 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[1])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 294);
+  }
+  fra.me.REG[3] = ATTR_standard___string___AbstractString____items(fra.me.REG[1]);
+  /* ../lib/standard/string.nit:296 */
+  REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 296);
+  }
+  REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  REGB3 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB3)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:237 */
+  REGB1 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:296 */
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(1);
+  } else {
+    REGB3 = TAG_Bool(VAL_ISA(REGB0, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB3)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:237 */
+    REGB3 = TAG_Bool(UNTAG_Int(REGB2)>UNTAG_Int(REGB0));
+    /* ../lib/standard/string.nit:296 */
+    REGB1 = REGB3;
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(0);
+    goto label1;
+  }
+  /* ../lib/standard/string.nit:298 */
+  REGB3 = CALL_standard___string___String___index_from(fra.me.REG[1])(fra.me.REG[1]);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB4 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB3));
+  /* ../lib/standard/string.nit:299 */
+  REGB2 = REGB4;
+  /* ../lib/standard/string.nit:300 */
+  REGB4 = CALL_standard___string___String___index_from(fra.me.REG[0])(fra.me.REG[0]);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB4 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB4));
+  /* ../lib/standard/string.nit:300 */
+  REGB0 = REGB4;
+  /* ../lib/standard/string.nit:302 */
+  while(1) {
+    REGB4 = TAG_Bool(VAL_ISA(REGB3, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB4)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:236 */
+    REGB4 = TAG_Bool(UNTAG_Int(REGB2)>=UNTAG_Int(REGB3));
+    /* ../lib/standard/string.nit:302 */
+    if (UNTAG_Bool(REGB4)) {
+      /* ../lib/standard/string.nit:955 */
+      REGB4 = TAG_Char(UNBOX_NativeString(fra.me.REG[2])[UNTAG_Int(REGB0)]);
+      REGB5 = TAG_Char(UNBOX_NativeString(fra.me.REG[3])[UNTAG_Int(REGB2)]);
+      /* ../lib/standard/string.nit:303 */
+      REGB6 = TAG_Bool(IS_EQUAL_OO(REGB4,REGB5));
+      if (UNTAG_Bool(REGB6)) {
+      } else {
+        /* ../lib/standard/kernel.nit:381 */
+        REGB5 = TAG_Bool((REGB4)==(REGB5));
+        /* ../lib/standard/string.nit:303 */
+        REGB6 = REGB5;
+      }
+      REGB6 = TAG_Bool(!UNTAG_Bool(REGB6));
+      if (UNTAG_Bool(REGB6)) {
+        REGB6 = TAG_Bool(0);
+        REGB1 = REGB6;
+        goto label1;
+      }
+      /* ../lib/standard/string.nit:304 */
+      REGB6 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:240 */
+      REGB6 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB6));
+      /* ../lib/standard/string.nit:304 */
+      REGB0 = REGB6;
+      /* ../lib/standard/string.nit:305 */
+      REGB6 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:240 */
+      REGB6 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB6));
+      /* ../lib/standard/string.nit:305 */
+      REGB2 = REGB6;
+    } else {
+      /* ../lib/standard/string.nit:302 */
+      goto label2;
+    }
+  }
+  label2: while(0);
+  /* ../lib/standard/string.nit:308 */
+  REGB2 = TAG_Bool(1);
+  REGB1 = REGB2;
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+static const char LOCATE_standard___string___String___to_upper[] = "string::String::(string::AbstractString::to_upper)";
+val_t standard___string___String___to_upper(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 311;
+  fra.me.meth = LOCATE_standard___string___String___to_upper;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ../lib/standard/string.nit:314 */
+  REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 314);
+  }
+  REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  REGB1 = TAG_Int(1);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:972 */
+  fra.me.REG[1] = BOX_NativeString((char*)raw_alloc((UNTAG_Int(REGB1) * sizeof(char))));
+  /* ../lib/standard/string.nit:315 */
+  REGB1 = TAG_Int(0);
+  /* ../lib/standard/string.nit:317 */
+  REGB0 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 317);
+  }
+  fra.me.REG[2] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:318 */
+  REGB0 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 318);
+  }
+  REGB0 = ATTR_standard___string___String____index_from(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:319 */
+  REGB2 = TAG_Bool(ATTR_standard___string___String____index_to(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_to", LOCATE_standard___string, 319);
+  }
+  REGB2 = ATTR_standard___string___String____index_to(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:321 */
+  while(1) {
+    REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB3)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:234 */
+    REGB3 = TAG_Bool(UNTAG_Int(REGB0)<=UNTAG_Int(REGB2));
+    /* ../lib/standard/string.nit:321 */
+    if (UNTAG_Bool(REGB3)) {
+      /* ../lib/standard/string.nit:955 */
+      REGB3 = TAG_Char(UNBOX_NativeString(fra.me.REG[2])[UNTAG_Int(REGB0)]);
+      /* ../lib/standard/string.nit:322 */
+      REGB3 = CALL_standard___kernel___Char___to_upper(REGB3)(REGB3);
+      /* ../lib/standard/string.nit:956 */
+      UNBOX_NativeString(fra.me.REG[1])[UNTAG_Int(REGB1)]=UNTAG_Char(REGB3);;
+      /* ../lib/standard/string.nit:323 */
+      REGB3 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB3 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB3));
+      /* ../lib/standard/string.nit:323 */
+      REGB1 = REGB3;
+      /* ../lib/standard/string.nit:324 */
+      REGB3 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB3 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB3));
+      /* ../lib/standard/string.nit:324 */
+      REGB0 = REGB3;
+    } else {
+      /* ../lib/standard/string.nit:321 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  /* ../lib/standard/collection/array.nit:24 */
+  REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+  }
+  REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:327 */
+  REGB1 = TAG_Char('\0');
+  /* ../lib/standard/string.nit:956 */
+  UNBOX_NativeString(fra.me.REG[1])[UNTAG_Int(REGB0)]=UNTAG_Char(REGB1);;
+  /* ../lib/standard/string.nit:329 */
+  REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 329);
+  }
+  REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB1);
+  goto label2;
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_standard___string___String___to_lower[] = "string::String::(string::AbstractString::to_lower)";
+val_t standard___string___String___to_lower(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 332;
+  fra.me.meth = LOCATE_standard___string___String___to_lower;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ../lib/standard/string.nit:335 */
+  REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 335);
+  }
+  REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  REGB1 = TAG_Int(1);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:972 */
+  fra.me.REG[1] = BOX_NativeString((char*)raw_alloc((UNTAG_Int(REGB1) * sizeof(char))));
+  /* ../lib/standard/string.nit:336 */
+  REGB1 = TAG_Int(0);
+  /* ../lib/standard/string.nit:338 */
+  REGB0 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 338);
+  }
+  fra.me.REG[2] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:339 */
+  REGB0 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 339);
+  }
+  REGB0 = ATTR_standard___string___String____index_from(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:340 */
+  REGB2 = TAG_Bool(ATTR_standard___string___String____index_to(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_to", LOCATE_standard___string, 340);
+  }
+  REGB2 = ATTR_standard___string___String____index_to(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:342 */
+  while(1) {
+    REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB3)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:234 */
+    REGB3 = TAG_Bool(UNTAG_Int(REGB0)<=UNTAG_Int(REGB2));
+    /* ../lib/standard/string.nit:342 */
+    if (UNTAG_Bool(REGB3)) {
+      /* ../lib/standard/string.nit:955 */
+      REGB3 = TAG_Char(UNBOX_NativeString(fra.me.REG[2])[UNTAG_Int(REGB0)]);
+      /* ../lib/standard/string.nit:343 */
+      REGB3 = CALL_standard___kernel___Char___to_lower(REGB3)(REGB3);
+      /* ../lib/standard/string.nit:956 */
+      UNBOX_NativeString(fra.me.REG[1])[UNTAG_Int(REGB1)]=UNTAG_Char(REGB3);;
+      /* ../lib/standard/string.nit:344 */
+      REGB3 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB3 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB3));
+      /* ../lib/standard/string.nit:344 */
+      REGB1 = REGB3;
+      /* ../lib/standard/string.nit:345 */
+      REGB3 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB3 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB3));
+      /* ../lib/standard/string.nit:345 */
+      REGB0 = REGB3;
+    } else {
+      /* ../lib/standard/string.nit:342 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  /* ../lib/standard/collection/array.nit:24 */
+  REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+  }
+  REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:348 */
+  REGB1 = TAG_Char('\0');
+  /* ../lib/standard/string.nit:956 */
+  UNBOX_NativeString(fra.me.REG[1])[UNTAG_Int(REGB0)]=UNTAG_Char(REGB1);;
+  /* ../lib/standard/string.nit:350 */
+  REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 350);
+  }
+  REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB1);
+  goto label2;
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_standard___string___String___trim[] = "string::String::(string::AbstractString::trim)";
+val_t standard___string___String___trim(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
+  val_t tmp;
+        static val_t once_value_2; /* Once value */
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 353;
+  fra.me.meth = LOCATE_standard___string___String___trim;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ../lib/standard/string.nit:355 */
+  REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 355);
+  }
+  REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  REGB1 = TAG_Int(0);
+  REGB2 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB1));
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    /* ../lib/standard/kernel.nit:230 */
+    REGB1 = TAG_Bool((REGB0)==(REGB1));
+    /* ../lib/standard/string.nit:355 */
+    REGB2 = REGB1;
+  }
+  if (UNTAG_Bool(REGB2)) {
+    fra.me.REG[1] = fra.me.REG[0];
+    goto label1;
+  }
+  /* ../lib/standard/string.nit:357 */
+  REGB2 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 357);
+  }
+  REGB2 = ATTR_standard___string___String____index_from(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:358 */
+  while(1) {
+    REGB1 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 358);
+    }
+    fra.me.REG[2] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+    /* ../lib/standard/string.nit:955 */
+    REGB1 = TAG_Char(UNBOX_NativeString(fra.me.REG[2])[UNTAG_Int(REGB2)]);
+    /* ../lib/standard/kernel.nit:416 */
+    REGB1 = TAG_Int((unsigned char)UNTAG_Char(REGB1));
+    /* ../lib/standard/string.nit:358 */
+    REGB0 = TAG_Int(32);
+    REGB3 = TAG_Bool(VAL_ISA(REGB0, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB3)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:234 */
+    REGB0 = TAG_Bool(UNTAG_Int(REGB1)<=UNTAG_Int(REGB0));
+    /* ../lib/standard/string.nit:358 */
+    if (UNTAG_Bool(REGB0)) {
+      /* ../lib/standard/string.nit:359 */
+      REGB0 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB0 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB0));
+      /* ../lib/standard/string.nit:359 */
+      REGB2 = REGB0;
+      /* ../lib/standard/string.nit:360 */
+      REGB0 = TAG_Bool(ATTR_standard___string___String____index_to(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_index_to", LOCATE_standard___string, 360);
+      }
+      REGB0 = ATTR_standard___string___String____index_to(fra.me.REG[0]);
+      REGB1 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+      /* ../lib/standard/string.nit:360 */
+      REGB0 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB1));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        /* ../lib/standard/kernel.nit:230 */
+        REGB1 = TAG_Bool((REGB2)==(REGB1));
+        /* ../lib/standard/string.nit:360 */
+        REGB0 = REGB1;
+      }
+      if (UNTAG_Bool(REGB0)) {
+        if (!once_value_2) {
+          fra.me.REG[2] = BOX_NativeString("");
+          REGB0 = TAG_Int(0);
+          fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB0);
+          once_value_2 = fra.me.REG[2];
+          register_static_object(&once_value_2);
+        } else fra.me.REG[2] = once_value_2;
+        fra.me.REG[2] = fra.me.REG[2];
+        fra.me.REG[1] = fra.me.REG[2];
+        goto label1;
+      }
+    } else {
+      /* ../lib/standard/string.nit:358 */
+      goto label3;
+    }
+  }
+  label3: while(0);
+  /* ../lib/standard/string.nit:363 */
+  REGB0 = TAG_Bool(ATTR_standard___string___String____index_to(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_to", LOCATE_standard___string, 363);
+  }
+  REGB0 = ATTR_standard___string___String____index_to(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:364 */
+  while(1) {
+    REGB1 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 364);
+    }
+    fra.me.REG[2] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+    /* ../lib/standard/string.nit:955 */
+    REGB1 = TAG_Char(UNBOX_NativeString(fra.me.REG[2])[UNTAG_Int(REGB0)]);
+    /* ../lib/standard/kernel.nit:416 */
+    REGB1 = TAG_Int((unsigned char)UNTAG_Char(REGB1));
+    /* ../lib/standard/string.nit:364 */
+    REGB3 = TAG_Int(32);
+    REGB4 = TAG_Bool(VAL_ISA(REGB3, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB4)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:234 */
+    REGB3 = TAG_Bool(UNTAG_Int(REGB1)<=UNTAG_Int(REGB3));
+    /* ../lib/standard/string.nit:364 */
+    if (UNTAG_Bool(REGB3)) {
+      /* ../lib/standard/string.nit:365 */
+      REGB3 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:240 */
+      REGB3 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB3));
+      /* ../lib/standard/string.nit:365 */
+      REGB0 = REGB3;
+      /* ../lib/standard/string.nit:366 */
+      REGB3 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB2));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        /* ../lib/standard/kernel.nit:230 */
+        REGB1 = TAG_Bool((REGB0)==(REGB2));
+        /* ../lib/standard/string.nit:366 */
+        REGB3 = REGB1;
+      }
+      if (UNTAG_Bool(REGB3)) {
+        REGB3 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
+        } else {
+          nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 366);
+        }
+        fra.me.REG[2] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+        /* ../lib/standard/string.nit:955 */
+        REGB3 = TAG_Char(UNBOX_NativeString(fra.me.REG[2])[UNTAG_Int(REGB2)]);
+        /* ../lib/standard/string.nit:366 */
+        fra.me.REG[2] = CALL_standard___string___Object___to_s(REGB3)(REGB3);
+        fra.me.REG[1] = fra.me.REG[2];
+        goto label1;
+      }
+    } else {
+      /* ../lib/standard/string.nit:364 */
+      goto label4;
+    }
+  }
+  label4: while(0);
+  /* ../lib/standard/string.nit:368 */
+  REGB3 = CALL_standard___string___String___index_from(fra.me.REG[0])(fra.me.REG[0]);
+  /* ../lib/standard/kernel.nit:240 */
+  REGB3 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB3));
+  /* ../lib/standard/string.nit:368 */
+  REGB2 = REGB3;
+  /* ../lib/standard/string.nit:369 */
+  REGB3 = CALL_standard___string___String___index_from(fra.me.REG[0])(fra.me.REG[0]);
+  /* ../lib/standard/kernel.nit:240 */
+  REGB3 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB3));
+  /* ../lib/standard/string.nit:369 */
+  REGB0 = REGB3;
+  /* ../lib/standard/kernel.nit:240 */
+  REGB0 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB2));
+  /* ../lib/standard/string.nit:370 */
+  REGB3 = TAG_Int(1);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB3 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB3));
+  /* ../lib/standard/string.nit:370 */
+  fra.me.REG[0] = CALL_standard___string___AbstractString___substring(fra.me.REG[0])(fra.me.REG[0], REGB2, REGB3);
+  fra.me.REG[1] = fra.me.REG[0];
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_standard___string___String___output[] = "string::String::(kernel::Object::output)";
+void standard___string___String___output(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 373;
+  fra.me.meth = LOCATE_standard___string___String___output;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ../lib/standard/string.nit:375 */
+  REGB0 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 375);
+  }
+  REGB0 = ATTR_standard___string___String____index_from(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:376 */
+  REGB1 = TAG_Bool(ATTR_standard___string___String____index_to(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_to", LOCATE_standard___string, 376);
+  }
+  REGB1 = ATTR_standard___string___String____index_to(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:377 */
+  while(1) {
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:234 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<=UNTAG_Int(REGB1));
+    /* ../lib/standard/string.nit:377 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ../lib/standard/string.nit:378 */
+      REGB2 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB2)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 378);
+      }
+      fra.me.REG[1] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+      /* ../lib/standard/string.nit:955 */
+      REGB2 = TAG_Char(UNBOX_NativeString(fra.me.REG[1])[UNTAG_Int(REGB0)]);
+      /* ../lib/standard/kernel.nit:383 */
+      printf("%c", (unsigned char)UNTAG_Char(REGB2));;
+      /* ../lib/standard/string.nit:379 */
+      REGB2 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ../lib/standard/string.nit:379 */
+      REGB0 = REGB2;
+    } else {
+      /* ../lib/standard/string.nit:377 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_standard___string___String___from_substring[] = "string::String::from_substring";
+void standard___string___String___from_substring(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos0 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___string___String].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos0]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 387;
+  fra.me.meth = LOCATE_standard___string___String___from_substring;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  REGB1 = p2;
+  fra.me.REG[1] = p3;
+  /* ../lib/standard/string.nit:395 */
+  ATTR_standard___string___AbstractString____items(fra.me.REG[0]) = fra.me.REG[1];
+  /* ../lib/standard/string.nit:396 */
+  ATTR_standard___string___String____index_from(fra.me.REG[0]) = REGB0;
+  /* ../lib/standard/string.nit:397 */
+  ATTR_standard___string___String____index_to(fra.me.REG[0]) = REGB1;
+  /* ../lib/standard/kernel.nit:240 */
+  REGB0 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB0));
+  /* ../lib/standard/string.nit:398 */
+  REGB1 = TAG_Int(1);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:398 */
+  ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]) = REGB1;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos0] = 1;
+  return;
+}
+static const char LOCATE_standard___string___String___with_native[] = "string::String::with_native";
+void standard___string___String___with_native(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos1 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___string___String].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  if (init_table[itpos1]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 401;
+  fra.me.meth = LOCATE_standard___string___String___with_native;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = p2;
+  /* ../lib/standard/string.nit:404 */
+  REGB1 = TAG_Int(0);
+  REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:236 */
+  REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:404 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_standard___string, 404);
+  }
+  /* ../lib/standard/string.nit:405 */
+  ATTR_standard___string___AbstractString____items(fra.me.REG[0]) = fra.me.REG[1];
+  /* ../lib/standard/string.nit:406 */
+  ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]) = REGB0;
+  /* ../lib/standard/string.nit:407 */
+  REGB0 = TAG_Int(0);
+  ATTR_standard___string___String____index_from(fra.me.REG[0]) = REGB0;
+  /* ../lib/standard/string.nit:408 */
+  REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 408);
+  }
+  REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  REGB1 = TAG_Int(1);
+  /* ../lib/standard/kernel.nit:240 */
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:408 */
+  ATTR_standard___string___String____index_to(fra.me.REG[0]) = REGB1;
   stack_frame_head = fra.me.prev;
   init_table[itpos1] = 1;
   return;
 }
+static const char LOCATE_standard___string___String___from_cstring[] = "string::String::from_cstring";
+void standard___string___String___from_cstring(val_t p0, val_t p1, int* init_table){
+  int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___string___String].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos2]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 411;
+  fra.me.meth = LOCATE_standard___string___String___from_cstring;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ../lib/standard/string.nit:414 */
+  REGB0 = CALL_standard___string___NativeString___cstring_length(fra.me.REG[1])(fra.me.REG[1]);
+  CALL_standard___string___String___with_native(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], REGB0, init_table);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos2] = 1;
+  return;
+}
+static const char LOCATE_standard___string___String___copy_from_native[] = "string::String::copy_from_native";
+void standard___string___String___copy_from_native(val_t p0, val_t p1, int* init_table){
+  int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___string___String].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  if (init_table[itpos3]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 417;
+  fra.me.meth = LOCATE_standard___string___String___copy_from_native;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ../lib/standard/string.nit:423 */
+  REGB0 = CALL_standard___string___NativeString___cstring_length(fra.me.REG[1])(fra.me.REG[1]);
+  /* ../lib/standard/string.nit:424 */
+  REGB1 = TAG_Int(1);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:972 */
+  fra.me.REG[2] = BOX_NativeString((char*)raw_alloc((UNTAG_Int(REGB1) * sizeof(char))));
+  /* ../lib/standard/string.nit:425 */
+  REGB1 = TAG_Int(0);
+  REGB2 = TAG_Int(0);
+  /* ../lib/standard/string.nit:957 */
+  (void)memcpy(UNBOX_NativeString(fra.me.REG[2])+UNTAG_Int(REGB2), UNBOX_NativeString(fra.me.REG[1])+UNTAG_Int(REGB1), UNTAG_Int(REGB0));;
+  /* ../lib/standard/string.nit:426 */
+  REGB2 = TAG_Char('\0');
+  /* ../lib/standard/string.nit:956 */
+  UNBOX_NativeString(fra.me.REG[2])[UNTAG_Int(REGB0)]=UNTAG_Char(REGB2);;
+  /* ../lib/standard/string.nit:427 */
+  CALL_standard___string___String___with_native(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[2], REGB0, init_table);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos3] = 1;
+  return;
+}
 static const char LOCATE_standard___string___String___to_cstring[] = "string::String::to_cstring";
 val_t standard___string___String___to_cstring(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 193;
+  fra.me.line = 430;
   fra.me.meth = LOCATE_standard___string___String___to_cstring;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 3;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:196 */
-  REGB0 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+  /* ../lib/standard/string.nit:434 */
+  REGB0 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 196);
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 434);
+  }
+  REGB0 = ATTR_standard___string___String____index_from(fra.me.REG[0]);
+  REGB1 = TAG_Int(0);
+  REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:237 */
+  REGB1 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:434 */
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(1);
+  } else {
+    REGB0 = TAG_Bool(ATTR_standard___string___String____index_to(fra.me.REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_index_to", LOCATE_standard___string, 434);
+    }
+    REGB0 = ATTR_standard___string___String____index_to(fra.me.REG[0]);
+    fra.me.REG[1] = CALL_standard___string___AbstractString___items(fra.me.REG[0])(fra.me.REG[0]);
+    REGB2 = CALL_standard___string___NativeString___cstring_length(fra.me.REG[1])(fra.me.REG[1]);
+    REGB3 = TAG_Int(1);
+    /* ../lib/standard/kernel.nit:240 */
+    REGB3 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB3));
+    /* ../lib/standard/string.nit:434 */
+    REGB2 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB3));
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      /* ../lib/standard/kernel.nit:230 */
+      REGB3 = TAG_Bool((REGB0)==(REGB3));
+      /* ../lib/standard/string.nit:434 */
+      REGB2 = REGB3;
+    }
+    REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
+    REGB1 = REGB2;
+  }
+  if (UNTAG_Bool(REGB1)) {
+    /* ../lib/standard/string.nit:435 */
+    REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 435);
+    }
+    REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+    REGB2 = TAG_Int(1);
+    /* ../lib/standard/kernel.nit:238 */
+    REGB2 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB2));
+    /* ../lib/standard/string.nit:972 */
+    fra.me.REG[1] = BOX_NativeString((char*)raw_alloc((UNTAG_Int(REGB2) * sizeof(char))));
+    /* ../lib/standard/string.nit:436 */
+    fra.me.REG[2] = CALL_standard___string___AbstractString___items(fra.me.REG[0])(fra.me.REG[0]);
+    REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 436);
+    }
+    REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+    REGB1 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 436);
+    }
+    REGB1 = ATTR_standard___string___String____index_from(fra.me.REG[0]);
+    REGB3 = TAG_Int(0);
+    /* ../lib/standard/string.nit:957 */
+    (void)memcpy(UNBOX_NativeString(fra.me.REG[1])+UNTAG_Int(REGB3), UNBOX_NativeString(fra.me.REG[2])+UNTAG_Int(REGB1), UNTAG_Int(REGB2));;
+    /* ../lib/standard/collection/array.nit:24 */
+    REGB3 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB3)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+    }
+    REGB3 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+    /* ../lib/standard/string.nit:437 */
+    REGB1 = TAG_Char('\0');
+    /* ../lib/standard/string.nit:956 */
+    UNBOX_NativeString(fra.me.REG[1])[UNTAG_Int(REGB3)]=UNTAG_Char(REGB1);;
+    /* ../lib/standard/string.nit:438 */
+    goto label1;
+  }
+  /* ../lib/standard/string.nit:440 */
+  REGB1 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 440);
   }
   fra.me.REG[0] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+  fra.me.REG[1] = fra.me.REG[0];
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[0];
+  return fra.me.REG[1];
 }
 static const char LOCATE_standard___string___String_____eqeq[] = "string::String::(kernel::Object::==)";
 val_t standard___string___String_____eqeq(val_t p0, val_t p1){
@@ -926,10 +2401,11 @@ val_t standard___string___String_____eqeq(val_t p0, val_t p1){
   val_t REGB3;
   val_t REGB4;
   val_t REGB5;
+  val_t REGB6;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 199;
+  fra.me.line = 443;
   fra.me.meth = LOCATE_standard___string___String_____eqeq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -938,7 +2414,7 @@ val_t standard___string___String_____eqeq(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/string.nit:201 */
+  /* ../lib/standard/string.nit:445 */
   REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_standard___string___String, ID_standard___string___String)) /*cast String*/;
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
@@ -951,100 +2427,134 @@ val_t standard___string___String_____eqeq(val_t p0, val_t p1){
     REGB0 = TAG_Bool(0);
     goto label1;
   }
-  /* ../lib/standard/collection/array.nit:24 */
-  REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB1)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
-  }
-  REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:203 */
+  /* ../lib/standard/string.nit:447 */
+  REGB1 = CALL_standard___kernel___Object___object_id(fra.me.REG[0])(fra.me.REG[0]);
   REGB2 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___string, 203);
-  }
-  /* ../lib/standard/collection/array.nit:24 */
-  REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
-  if (UNTAG_Bool(REGB2)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___string, 447);
   }
-  REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
-  /* ../lib/standard/string.nit:203 */
-  REGB3 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB1));
+  REGB2 = CALL_standard___kernel___Object___object_id(fra.me.REG[1])(fra.me.REG[1]);
+  REGB3 = TAG_Bool(IS_EQUAL_OO(REGB1,REGB2));
   if (UNTAG_Bool(REGB3)) {
   } else {
     /* ../lib/standard/kernel.nit:230 */
-    REGB2 = TAG_Bool((REGB2)==(REGB1));
-    /* ../lib/standard/string.nit:203 */
+    REGB2 = TAG_Bool((REGB1)==(REGB2));
+    /* ../lib/standard/string.nit:447 */
     REGB3 = REGB2;
   }
-  REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
   if (UNTAG_Bool(REGB3)) {
-    REGB3 = TAG_Bool(0);
+    REGB3 = TAG_Bool(1);
     REGB0 = REGB3;
     goto label1;
   }
-  /* ../lib/standard/string.nit:204 */
-  REGB3 = TAG_Int(0);
-  /* ../lib/standard/string.nit:205 */
-  REGB2 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+  /* ../lib/standard/string.nit:449 */
+  REGB3 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB3)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 449);
+  }
+  REGB3 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:451 */
+  REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 205);
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 451);
   }
-  fra.me.REG[0] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:206 */
-  REGB2 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[1])!=NIT_NULL);
+  REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
+  REGB1 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB3));
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    /* ../lib/standard/kernel.nit:230 */
+    REGB2 = TAG_Bool((REGB2)==(REGB3));
+    /* ../lib/standard/string.nit:451 */
+    REGB1 = REGB2;
+  }
+  REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(0);
+    REGB0 = REGB1;
+    goto label1;
+  }
+  /* ../lib/standard/string.nit:453 */
+  REGB1 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 453);
+  }
+  REGB1 = ATTR_standard___string___String____index_from(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:454 */
+  REGB2 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[1])!=NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 206);
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 454);
+  }
+  REGB2 = ATTR_standard___string___String____index_from(fra.me.REG[1]);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB3 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB3));
+  /* ../lib/standard/string.nit:458 */
+  REGB4 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[1])!=NIT_NULL);
+  if (UNTAG_Bool(REGB4)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 458);
   }
   fra.me.REG[1] = ATTR_standard___string___AbstractString____items(fra.me.REG[1]);
-  /* ../lib/standard/string.nit:207 */
+  /* ../lib/standard/string.nit:459 */
+  REGB4 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB4)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 459);
+  }
+  fra.me.REG[0] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:461 */
   while(1) {
-    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB3), VTID_standard___kernel___Comparable___OTHER(REGB3))) /*cast OTHER*/;
-    if (UNTAG_Bool(REGB2)) {
+    REGB4 = TAG_Bool(VAL_ISA(REGB3, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB4)) {
     } else {
       nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
     }
     /* ../lib/standard/kernel.nit:235 */
-    REGB2 = TAG_Bool(UNTAG_Int(REGB3)<UNTAG_Int(REGB1));
-    /* ../lib/standard/string.nit:207 */
-    if (UNTAG_Bool(REGB2)) {
-      /* ../lib/standard/string.nit:602 */
-      REGB2 = TAG_Char(UNBOX_NativeString(fra.me.REG[0])[UNTAG_Int(REGB3)]);
-      REGB4 = TAG_Char(UNBOX_NativeString(fra.me.REG[1])[UNTAG_Int(REGB3)]);
-      /* ../lib/standard/string.nit:208 */
-      REGB5 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB4));
-      if (UNTAG_Bool(REGB5)) {
+    REGB4 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB3));
+    /* ../lib/standard/string.nit:461 */
+    if (UNTAG_Bool(REGB4)) {
+      /* ../lib/standard/string.nit:955 */
+      REGB4 = TAG_Char(UNBOX_NativeString(fra.me.REG[0])[UNTAG_Int(REGB1)]);
+      REGB5 = TAG_Char(UNBOX_NativeString(fra.me.REG[1])[UNTAG_Int(REGB2)]);
+      /* ../lib/standard/string.nit:462 */
+      REGB6 = TAG_Bool(IS_EQUAL_OO(REGB4,REGB5));
+      if (UNTAG_Bool(REGB6)) {
       } else {
         /* ../lib/standard/kernel.nit:381 */
-        REGB4 = TAG_Bool((REGB2)==(REGB4));
-        /* ../lib/standard/string.nit:208 */
-        REGB5 = REGB4;
+        REGB5 = TAG_Bool((REGB4)==(REGB5));
+        /* ../lib/standard/string.nit:462 */
+        REGB6 = REGB5;
       }
-      REGB5 = TAG_Bool(!UNTAG_Bool(REGB5));
-      if (UNTAG_Bool(REGB5)) {
-        REGB5 = TAG_Bool(0);
-        REGB0 = REGB5;
+      REGB6 = TAG_Bool(!UNTAG_Bool(REGB6));
+      if (UNTAG_Bool(REGB6)) {
+        REGB6 = TAG_Bool(0);
+        REGB0 = REGB6;
         goto label1;
       }
-      /* ../lib/standard/string.nit:209 */
-      REGB5 = TAG_Int(1);
+      /* ../lib/standard/string.nit:463 */
+      REGB6 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:238 */
-      REGB5 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB5));
-      /* ../lib/standard/string.nit:209 */
-      REGB3 = REGB5;
+      REGB6 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB6));
+      /* ../lib/standard/string.nit:463 */
+      REGB1 = REGB6;
+      /* ../lib/standard/string.nit:464 */
+      REGB6 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB6 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB6));
+      /* ../lib/standard/string.nit:464 */
+      REGB2 = REGB6;
     } else {
-      /* ../lib/standard/string.nit:207 */
+      /* ../lib/standard/string.nit:461 */
       goto label2;
     }
   }
   label2: while(0);
-  /* ../lib/standard/string.nit:211 */
-  REGB3 = TAG_Bool(1);
-  REGB0 = REGB3;
+  /* ../lib/standard/string.nit:467 */
+  REGB2 = TAG_Bool(1);
+  REGB0 = REGB2;
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1052,7 +2562,7 @@ val_t standard___string___String_____eqeq(val_t p0, val_t p1){
 }
 static const char LOCATE_standard___string___String_____l[] = "string::String::(kernel::Comparable::<)";
 val_t standard___string___String_____l(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
@@ -1060,16 +2570,21 @@ val_t standard___string___String_____l(val_t p0, val_t p1){
   val_t REGB4;
   val_t REGB5;
   val_t REGB6;
+  val_t REGB7;
+  val_t REGB8;
+  val_t REGB9;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 214;
+  fra.me.line = 470;
   fra.me.meth = LOCATE_standard___string___String_____l;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], VTCOLOR_standard___kernel___Comparable___OTHER(fra.me.REG[0]), VTID_standard___kernel___Comparable___OTHER(fra.me.REG[0]))) /*cast OTHER*/;
@@ -1077,171 +2592,224 @@ val_t standard___string___String_____l(val_t p0, val_t p1){
   } else {
     nit_abort("Cast failed", NULL, LOCATE_standard___string, 0);
   }
-  /* ../lib/standard/string.nit:216 */
-  REGB0 = TAG_Int(0);
-  /* ../lib/standard/collection/array.nit:24 */
-  REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  /* ../lib/standard/string.nit:474 */
+  REGB0 = CALL_standard___kernel___Object___object_id(fra.me.REG[0])(fra.me.REG[0]);
+  REGB1 = CALL_standard___kernel___Object___object_id(fra.me.REG[1])(fra.me.REG[1]);
+  REGB2 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB1));
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    /* ../lib/standard/kernel.nit:230 */
+    REGB1 = TAG_Bool((REGB0)==(REGB1));
+    /* ../lib/standard/string.nit:474 */
+    REGB2 = REGB1;
+  }
+  if (UNTAG_Bool(REGB2)) {
+    REGB2 = TAG_Bool(0);
+    goto label1;
+  }
+  /* ../lib/standard/string.nit:479 */
+  REGB1 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 479);
   }
-  REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
-  if (UNTAG_Bool(REGB2)) {
+  REGB1 = ATTR_standard___string___String____index_from(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:480 */
+  REGB0 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[1])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 480);
   }
-  REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
-  /* ../lib/standard/string.nit:219 */
+  REGB0 = ATTR_standard___string___String____index_from(fra.me.REG[1]);
+  /* ../lib/standard/string.nit:482 */
   REGB3 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB3)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 219);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 482);
   }
-  fra.me.REG[0] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:220 */
+  fra.me.REG[2] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:483 */
   REGB3 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[1])!=NIT_NULL);
   if (UNTAG_Bool(REGB3)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 220);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 483);
   }
-  fra.me.REG[1] = ATTR_standard___string___AbstractString____items(fra.me.REG[1]);
-  /* ../lib/standard/string.nit:221 */
+  fra.me.REG[3] = ATTR_standard___string___AbstractString____items(fra.me.REG[1]);
+  /* ../lib/standard/string.nit:485 */
+  REGB3 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB3)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 485);
+  }
+  REGB3 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:486 */
+  REGB4 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
+  if (UNTAG_Bool(REGB4)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 486);
+  }
+  REGB4 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB5 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB3));
+  /* ../lib/standard/string.nit:490 */
   while(1) {
-    REGB3 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
-    if (UNTAG_Bool(REGB3)) {
+    REGB6 = TAG_Bool(VAL_ISA(REGB5, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB6)) {
     } else {
       nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
     }
     /* ../lib/standard/kernel.nit:235 */
-    REGB3 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/string.nit:221 */
-    if (UNTAG_Bool(REGB3)) {
-      REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
-      if (UNTAG_Bool(REGB3)) {
-      } else {
-        nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
-      }
-      /* ../lib/standard/kernel.nit:235 */
-      REGB3 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB2));
-    } else {
-      /* ../lib/standard/string.nit:221 */
-      REGB4 = TAG_Bool(0);
-      REGB3 = REGB4;
-    }
-    if (UNTAG_Bool(REGB3)) {
-      /* ../lib/standard/string.nit:602 */
-      REGB3 = TAG_Char(UNBOX_NativeString(fra.me.REG[0])[UNTAG_Int(REGB0)]);
-      /* ../lib/standard/kernel.nit:416 */
-      REGB3 = TAG_Int((unsigned char)UNTAG_Char(REGB3));
-      /* ../lib/standard/string.nit:602 */
-      REGB4 = TAG_Char(UNBOX_NativeString(fra.me.REG[1])[UNTAG_Int(REGB0)]);
-      /* ../lib/standard/kernel.nit:416 */
-      REGB4 = TAG_Int((unsigned char)UNTAG_Char(REGB4));
-      REGB5 = TAG_Bool(VAL_ISA(REGB4, VTCOLOR_standard___kernel___Comparable___OTHER(REGB3), VTID_standard___kernel___Comparable___OTHER(REGB3))) /*cast OTHER*/;
-      if (UNTAG_Bool(REGB5)) {
+    REGB6 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB5));
+    /* ../lib/standard/string.nit:490 */
+    if (UNTAG_Bool(REGB6)) {
+      /* ../lib/standard/string.nit:955 */
+      REGB6 = TAG_Char(UNBOX_NativeString(fra.me.REG[2])[UNTAG_Int(REGB1)]);
+      REGB7 = TAG_Char(UNBOX_NativeString(fra.me.REG[3])[UNTAG_Int(REGB0)]);
+      /* ../lib/standard/string.nit:494 */
+      REGB8 = TAG_Bool(IS_EQUAL_OO(REGB6,REGB7));
+      if (UNTAG_Bool(REGB8)) {
       } else {
-        nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+        /* ../lib/standard/kernel.nit:381 */
+        REGB9 = TAG_Bool((REGB6)==(REGB7));
+        /* ../lib/standard/string.nit:494 */
+        REGB8 = REGB9;
       }
-      /* ../lib/standard/kernel.nit:235 */
-      REGB5 = TAG_Bool(UNTAG_Int(REGB3)<UNTAG_Int(REGB4));
-      /* ../lib/standard/string.nit:224 */
-      if (UNTAG_Bool(REGB5)) {
-        /* ../lib/standard/string.nit:225 */
-        REGB5 = TAG_Bool(1);
-        goto label1;
-      } else {
-        REGB6 = TAG_Bool(VAL_ISA(REGB3, VTCOLOR_standard___kernel___Comparable___OTHER(REGB4), VTID_standard___kernel___Comparable___OTHER(REGB4))) /*cast OTHER*/;
-        if (UNTAG_Bool(REGB6)) {
+      REGB8 = TAG_Bool(!UNTAG_Bool(REGB8));
+      if (UNTAG_Bool(REGB8)) {
+        REGB8 = TAG_Bool(VAL_ISA(REGB7, VTCOLOR_standard___kernel___Comparable___OTHER(REGB6), VTID_standard___kernel___Comparable___OTHER(REGB6))) /*cast OTHER*/;
+        if (UNTAG_Bool(REGB8)) {
         } else {
           nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
         }
-        /* ../lib/standard/kernel.nit:235 */
-        REGB3 = TAG_Bool(UNTAG_Int(REGB4)<UNTAG_Int(REGB3));
-        /* ../lib/standard/string.nit:226 */
-        if (UNTAG_Bool(REGB3)) {
-          /* ../lib/standard/string.nit:227 */
-          REGB3 = TAG_Bool(0);
-          REGB5 = REGB3;
+        /* ../lib/standard/kernel.nit:386 */
+        REGB7 = TAG_Bool(UNTAG_Char(REGB6)<UNTAG_Char(REGB7));
+        /* ../lib/standard/string.nit:495 */
+        if (UNTAG_Bool(REGB7)) {
+          REGB7 = TAG_Bool(1);
+          REGB2 = REGB7;
           goto label1;
         }
+        /* ../lib/standard/string.nit:496 */
+        REGB7 = TAG_Bool(0);
+        REGB2 = REGB7;
+        goto label1;
       }
-      /* ../lib/standard/string.nit:229 */
-      REGB3 = TAG_Int(1);
+      /* ../lib/standard/string.nit:499 */
+      REGB7 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:238 */
-      REGB3 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB3));
-      /* ../lib/standard/string.nit:229 */
-      REGB0 = REGB3;
+      REGB7 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB7));
+      /* ../lib/standard/string.nit:499 */
+      REGB1 = REGB7;
+      /* ../lib/standard/string.nit:500 */
+      REGB7 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB7 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB7));
+      /* ../lib/standard/string.nit:500 */
+      REGB0 = REGB7;
     } else {
-      /* ../lib/standard/string.nit:221 */
+      /* ../lib/standard/string.nit:490 */
       goto label2;
     }
   }
   label2: while(0);
-  REGB0 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+  REGB0 = TAG_Bool(VAL_ISA(REGB4, VTCOLOR_standard___kernel___Comparable___OTHER(REGB3), VTID_standard___kernel___Comparable___OTHER(REGB3))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
   }
   /* ../lib/standard/kernel.nit:235 */
-  REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
-  /* ../lib/standard/string.nit:231 */
-  if (UNTAG_Bool(REGB2)) {
-    /* ../lib/standard/string.nit:232 */
-    REGB2 = TAG_Bool(1);
-    REGB5 = REGB2;
-    goto label1;
-  } else {
-    /* ../lib/standard/string.nit:234 */
-    REGB2 = TAG_Bool(0);
-    REGB5 = REGB2;
-    goto label1;
-  }
+  REGB4 = TAG_Bool(UNTAG_Int(REGB3)<UNTAG_Int(REGB4));
+  /* ../lib/standard/string.nit:503 */
+  REGB2 = REGB4;
+  goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
-  return REGB5;
+  return REGB2;
 }
 static const char LOCATE_standard___string___String_____plus[] = "string::String::+";
 val_t standard___string___String_____plus(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 238;
+  fra.me.line = 506;
   fra.me.meth = LOCATE_standard___string___String_____plus;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/collection/array.nit:24 */
+  /* ../lib/standard/string.nit:509 */
   REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 509);
   }
   REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:510 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 510);
   }
   REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
   /* ../lib/standard/kernel.nit:238 */
+  REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:512 */
+  REGB3 = TAG_Int(1);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB3 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB3));
+  /* ../lib/standard/string.nit:972 */
+  fra.me.REG[2] = BOX_NativeString((char*)raw_alloc((UNTAG_Int(REGB3) * sizeof(char))));
+  /* ../lib/standard/string.nit:514 */
+  REGB3 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB3)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 514);
+  }
+  fra.me.REG[3] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+  REGB3 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB3)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 514);
+  }
+  REGB3 = ATTR_standard___string___String____index_from(fra.me.REG[0]);
+  REGB2 = TAG_Int(0);
+  /* ../lib/standard/string.nit:957 */
+  (void)memcpy(UNBOX_NativeString(fra.me.REG[2])+UNTAG_Int(REGB2), UNBOX_NativeString(fra.me.REG[3])+UNTAG_Int(REGB3), UNTAG_Int(REGB0));;
+  /* ../lib/standard/string.nit:515 */
+  REGB2 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[1])!=NIT_NULL);
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 515);
+  }
+  fra.me.REG[3] = ATTR_standard___string___AbstractString____items(fra.me.REG[1]);
+  REGB2 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[1])!=NIT_NULL);
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 515);
+  }
+  REGB2 = ATTR_standard___string___String____index_from(fra.me.REG[1]);
+  /* ../lib/standard/string.nit:957 */
+  (void)memcpy(UNBOX_NativeString(fra.me.REG[2])+UNTAG_Int(REGB0), UNBOX_NativeString(fra.me.REG[3])+UNTAG_Int(REGB2), UNTAG_Int(REGB1));;
+  /* ../lib/standard/kernel.nit:238 */
+  REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:517 */
+  REGB3 = TAG_Char('\0');
+  /* ../lib/standard/string.nit:956 */
+  UNBOX_NativeString(fra.me.REG[2])[UNTAG_Int(REGB2)]=UNTAG_Char(REGB3);;
+  /* ../lib/standard/kernel.nit:238 */
   REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
-  /* ../lib/standard/string.nit:241 */
-  fra.me.REG[2] = NEW_Buffer_standard___string___Buffer___with_capacity(REGB1);
-  /* ../lib/standard/string.nit:242 */
-  CALL_standard___collection___abstract_collection___Sequence___append(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ../lib/standard/string.nit:243 */
-  CALL_standard___collection___abstract_collection___Sequence___append(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-  /* ../lib/standard/string.nit:244 */
-  fra.me.REG[2] = CALL_standard___string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
+  /* ../lib/standard/string.nit:519 */
+  fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB1);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1253,10 +2821,13 @@ val_t standard___string___String_____star(val_t p0, val_t p1){
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
+  val_t REGB5;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 247;
+  fra.me.line = 522;
   fra.me.meth = LOCATE_standard___string___String_____star;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1265,7 +2836,7 @@ val_t standard___string___String_____star(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/string.nit:250 */
+  /* ../lib/standard/string.nit:525 */
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
@@ -1274,54 +2845,78 @@ val_t standard___string___String_____star(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:236 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ../lib/standard/string.nit:250 */
+  /* ../lib/standard/string.nit:525 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_standard___string, 250);
+    nit_abort("Assert failed", NULL, LOCATE_standard___string, 525);
   }
-  /* ../lib/standard/collection/array.nit:24 */
+  /* ../lib/standard/string.nit:527 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 527);
   }
   REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
   /* ../lib/standard/kernel.nit:241 */
-  REGB1 = TAG_Int(UNTAG_Int(REGB1)*UNTAG_Int(REGB0));
-  /* ../lib/standard/string.nit:251 */
-  fra.me.REG[1] = NEW_Buffer_standard___string___Buffer___with_capacity(REGB1);
-  /* ../lib/standard/string.nit:252 */
+  REGB2 = TAG_Int(UNTAG_Int(REGB1)*UNTAG_Int(REGB0));
+  /* ../lib/standard/string.nit:531 */
+  REGB3 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB3)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 531);
+  }
+  fra.me.REG[1] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:533 */
+  REGB3 = TAG_Int(1);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB3 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB3));
+  /* ../lib/standard/string.nit:972 */
+  fra.me.REG[0] = BOX_NativeString((char*)raw_alloc((UNTAG_Int(REGB3) * sizeof(char))));
+  /* ../lib/standard/string.nit:535 */
+  REGB3 = TAG_Char('\0');
+  /* ../lib/standard/string.nit:956 */
+  UNBOX_NativeString(fra.me.REG[0])[UNTAG_Int(REGB2)]=UNTAG_Char(REGB3);;
+  /* ../lib/standard/string.nit:537 */
+  REGB3 = TAG_Int(0);
+  /* ../lib/standard/string.nit:539 */
+  REGB4 = TAG_Int(1);
+  /* ../lib/standard/kernel.nit:344 */
   while(1) {
-    REGB1 = TAG_Int(0);
-    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
-    if (UNTAG_Bool(REGB2)) {
+    REGB5 = TAG_Bool(VAL_ISA(REGB0, VTCOLOR_standard___kernel___Comparable___OTHER(REGB4), VTID_standard___kernel___Comparable___OTHER(REGB4))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB5)) {
     } else {
       nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
     }
-    /* ../lib/standard/kernel.nit:237 */
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB1));
-    /* ../lib/standard/string.nit:252 */
-    if (UNTAG_Bool(REGB1)) {
-      /* ../lib/standard/string.nit:253 */
-      CALL_standard___collection___abstract_collection___Sequence___append(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-      /* ../lib/standard/string.nit:254 */
-      REGB1 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:240 */
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      /* ../lib/standard/string.nit:254 */
-      REGB0 = REGB1;
+    /* ../lib/standard/kernel.nit:234 */
+    REGB5 = TAG_Bool(UNTAG_Int(REGB4)<=UNTAG_Int(REGB0));
+    /* ../lib/standard/kernel.nit:344 */
+    if (UNTAG_Bool(REGB5)) {
+      /* ../lib/standard/string.nit:540 */
+      REGB5 = TAG_Int(0);
+      /* ../lib/standard/string.nit:957 */
+      (void)memcpy(UNBOX_NativeString(fra.me.REG[0])+UNTAG_Int(REGB3), UNBOX_NativeString(fra.me.REG[1])+UNTAG_Int(REGB5), UNTAG_Int(REGB1));;
+      /* ../lib/standard/kernel.nit:238 */
+      REGB5 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB1));
+      /* ../lib/standard/string.nit:541 */
+      REGB3 = REGB5;
+      /* ../lib/standard/kernel.nit:346 */
+      REGB5 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB5 = TAG_Int(UNTAG_Int(REGB4)+UNTAG_Int(REGB5));
+      /* ../lib/standard/kernel.nit:346 */
+      REGB4 = REGB5;
     } else {
-      /* ../lib/standard/string.nit:252 */
+      /* ../lib/standard/kernel.nit:344 */
       goto label1;
     }
   }
   label1: while(0);
-  /* ../lib/standard/string.nit:256 */
-  fra.me.REG[1] = CALL_standard___string___Object___to_s(fra.me.REG[1])(fra.me.REG[1]);
+  /* ../lib/standard/string.nit:544 */
+  fra.me.REG[0] = NEW_String_standard___string___String___with_native(fra.me.REG[0], REGB2);
   goto label2;
   label2: while(0);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return fra.me.REG[0];
 }
 static const char LOCATE_standard___string___String___to_s[] = "string::String::(string::Object::to_s)";
 val_t standard___string___String___to_s(val_t p0){
@@ -1329,14 +2924,14 @@ val_t standard___string___String___to_s(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 259;
+  fra.me.line = 547;
   fra.me.meth = LOCATE_standard___string___String___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:259 */
+  /* ../lib/standard/string.nit:547 */
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1344,79 +2939,98 @@ val_t standard___string___String___to_s(val_t p0){
 }
 static const char LOCATE_standard___string___String___hash[] = "string::String::(hash::Object::hash)";
 val_t standard___string___String___hash(val_t p0){
-  struct {struct stack_frame_t me;} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
   val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 261;
+  fra.me.line = 549;
   fra.me.meth = LOCATE_standard___string___String___hash;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:264 */
+  /* ../lib/standard/string.nit:552 */
   REGB0 = TAG_Int(5381);
-  /* ../lib/standard/string.nit:265 */
+  /* ../lib/standard/string.nit:553 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 265);
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 553);
   }
   REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
   REGB2 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:240 */
   REGB2 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB2));
-  /* ../lib/standard/string.nit:266 */
+  /* ../lib/standard/string.nit:555 */
   REGB1 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 266);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 555);
   }
-  fra.me.REG[0] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:267 */
+  fra.me.REG[1] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:556 */
+  REGB1 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 556);
+  }
+  REGB1 = ATTR_standard___string___String____index_from(fra.me.REG[0]);
+  /* ../lib/standard/kernel.nit:238 */
+  REGB3 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB1));
+  /* ../lib/standard/string.nit:558 */
+  REGB2 = REGB3;
+  /* ../lib/standard/string.nit:560 */
   while(1) {
-    REGB1 = TAG_Int(0);
     REGB3 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
     if (UNTAG_Bool(REGB3)) {
     } else {
       nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
     }
     /* ../lib/standard/kernel.nit:236 */
-    REGB1 = TAG_Bool(UNTAG_Int(REGB2)>=UNTAG_Int(REGB1));
-    /* ../lib/standard/string.nit:267 */
-    if (UNTAG_Bool(REGB1)) {
-      /* ../lib/standard/string.nit:268 */
-      REGB1 = TAG_Int(32);
+    REGB3 = TAG_Bool(UNTAG_Int(REGB2)>=UNTAG_Int(REGB1));
+    /* ../lib/standard/string.nit:560 */
+    if (UNTAG_Bool(REGB3)) {
+      /* ../lib/standard/string.nit:561 */
+      REGB3 = TAG_Int(32);
       /* ../lib/standard/kernel.nit:241 */
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)*UNTAG_Int(REGB1));
+      REGB3 = TAG_Int(UNTAG_Int(REGB0)*UNTAG_Int(REGB3));
       /* ../lib/standard/kernel.nit:238 */
-      REGB1 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB0));
-      /* ../lib/standard/string.nit:602 */
-      REGB3 = TAG_Char(UNBOX_NativeString(fra.me.REG[0])[UNTAG_Int(REGB2)]);
+      REGB3 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB0));
+      /* ../lib/standard/string.nit:561 */
+      REGB4 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB4)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 561);
+      }
+      fra.me.REG[1] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+      /* ../lib/standard/string.nit:955 */
+      REGB4 = TAG_Char(UNBOX_NativeString(fra.me.REG[1])[UNTAG_Int(REGB2)]);
       /* ../lib/standard/kernel.nit:416 */
-      REGB3 = TAG_Int((unsigned char)UNTAG_Char(REGB3));
+      REGB4 = TAG_Int((unsigned char)UNTAG_Char(REGB4));
       /* ../lib/standard/kernel.nit:238 */
-      REGB3 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB3));
-      /* ../lib/standard/string.nit:268 */
-      REGB0 = REGB3;
-      /* ../lib/standard/string.nit:269 */
-      REGB3 = TAG_Int(1);
+      REGB4 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB4));
+      /* ../lib/standard/string.nit:561 */
+      REGB0 = REGB4;
+      /* ../lib/standard/string.nit:562 */
+      REGB4 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:240 */
-      REGB3 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB3));
-      /* ../lib/standard/string.nit:269 */
-      REGB2 = REGB3;
+      REGB4 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB4));
+      /* ../lib/standard/string.nit:562 */
+      REGB2 = REGB4;
     } else {
-      /* ../lib/standard/string.nit:267 */
+      /* ../lib/standard/string.nit:560 */
       goto label1;
     }
   }
   label1: while(0);
-  /* ../lib/standard/string.nit:271 */
+  /* ../lib/standard/string.nit:565 */
   goto label2;
   label2: while(0);
   stack_frame_head = fra.me.prev;
@@ -1432,7 +3046,7 @@ void standard___string___Buffer_____braeq(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_standard___string;
-  fra.me.line = 285;
+  fra.me.line = 578;
   fra.me.meth = LOCATE_standard___string___Buffer_____braeq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -1448,22 +3062,22 @@ void standard___string___Buffer_____braeq(val_t p0, val_t p1, val_t p2){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:287 */
+  /* ../lib/standard/string.nit:580 */
   REGB3 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB2));
   if (UNTAG_Bool(REGB3)) {
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB2 = TAG_Bool((REGB0)==(REGB2));
-    /* ../lib/standard/string.nit:287 */
+    /* ../lib/standard/string.nit:580 */
     REGB3 = REGB2;
   }
   if (UNTAG_Bool(REGB3)) {
-    /* ../lib/standard/string.nit:288 */
+    /* ../lib/standard/string.nit:581 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], REGB1);
-    /* ../lib/standard/string.nit:289 */
+    /* ../lib/standard/string.nit:582 */
     goto label1;
   }
-  /* ../lib/standard/string.nit:291 */
+  /* ../lib/standard/string.nit:584 */
   REGB3 = TAG_Int(0);
   REGB2 = TAG_Bool(VAL_ISA(REGB3, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
@@ -1472,7 +3086,7 @@ void standard___string___Buffer_____braeq(val_t p0, val_t p1, val_t p2){
   }
   /* ../lib/standard/kernel.nit:236 */
   REGB3 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB3));
-  /* ../lib/standard/string.nit:291 */
+  /* ../lib/standard/string.nit:584 */
   if (UNTAG_Bool(REGB3)) {
     /* ../lib/standard/collection/array.nit:24 */
     REGB3 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
@@ -1489,22 +3103,22 @@ void standard___string___Buffer_____braeq(val_t p0, val_t p1, val_t p2){
     /* ../lib/standard/kernel.nit:235 */
     REGB3 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB3));
   } else {
-    /* ../lib/standard/string.nit:291 */
+    /* ../lib/standard/string.nit:584 */
     REGB2 = TAG_Bool(0);
     REGB3 = REGB2;
   }
   if (UNTAG_Bool(REGB3)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_standard___string, 291);
+    nit_abort("Assert failed", NULL, LOCATE_standard___string, 584);
   }
-  /* ../lib/standard/string.nit:292 */
+  /* ../lib/standard/string.nit:585 */
   REGB3 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB3)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 292);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 585);
   }
   fra.me.REG[0] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:603 */
+  /* ../lib/standard/string.nit:956 */
   UNBOX_NativeString(fra.me.REG[0])[UNTAG_Int(REGB0)]=UNTAG_Char(REGB1);;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1520,7 +3134,7 @@ void standard___string___Buffer___add(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 295;
+  fra.me.line = 588;
   fra.me.meth = LOCATE_standard___string___Buffer___add;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1529,11 +3143,11 @@ void standard___string___Buffer___add(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/string.nit:297 */
+  /* ../lib/standard/string.nit:590 */
   REGB1 = TAG_Bool(ATTR_standard___string___Buffer____capacity(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_standard___string, 297);
+    nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_standard___string, 590);
   }
   REGB1 = ATTR_standard___string___Buffer____capacity(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:24 */
@@ -1550,7 +3164,7 @@ void standard___string___Buffer___add(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:234 */
   REGB2 = TAG_Bool(UNTAG_Int(REGB1)<=UNTAG_Int(REGB2));
-  /* ../lib/standard/string.nit:297 */
+  /* ../lib/standard/string.nit:590 */
   if (UNTAG_Bool(REGB2)) {
     /* ../lib/standard/collection/array.nit:24 */
     REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
@@ -1559,18 +3173,18 @@ void standard___string___Buffer___add(val_t p0, val_t p1){
       nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
     }
     REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-    /* ../lib/standard/string.nit:297 */
+    /* ../lib/standard/string.nit:590 */
     REGB1 = TAG_Int(5);
     /* ../lib/standard/kernel.nit:238 */
     REGB1 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB1));
-    /* ../lib/standard/string.nit:297 */
+    /* ../lib/standard/string.nit:590 */
     CALL_standard___collection___array___AbstractArray___enlarge(fra.me.REG[0])(fra.me.REG[0], REGB1);
   }
-  /* ../lib/standard/string.nit:298 */
+  /* ../lib/standard/string.nit:591 */
   REGB1 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 298);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 591);
   }
   fra.me.REG[1] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:24 */
@@ -1580,14 +3194,14 @@ void standard___string___Buffer___add(val_t p0, val_t p1){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:603 */
+  /* ../lib/standard/string.nit:956 */
   UNBOX_NativeString(fra.me.REG[1])[UNTAG_Int(REGB1)]=UNTAG_Char(REGB0);;
-  /* ../lib/standard/string.nit:299 */
+  /* ../lib/standard/string.nit:592 */
   REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
   REGB1 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:238 */
   REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
-  /* ../lib/standard/string.nit:299 */
+  /* ../lib/standard/string.nit:592 */
   ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]) = REGB1;
   stack_frame_head = fra.me.prev;
   return;
@@ -1602,7 +3216,7 @@ void standard___string___Buffer___enlarge(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 302;
+  fra.me.line = 595;
   fra.me.meth = LOCATE_standard___string___Buffer___enlarge;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -1612,11 +3226,11 @@ void standard___string___Buffer___enlarge(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/string.nit:304 */
+  /* ../lib/standard/string.nit:597 */
   REGB1 = TAG_Bool(ATTR_standard___string___Buffer____capacity(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_standard___string, 304);
+    nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_standard___string, 597);
   }
   REGB1 = ATTR_standard___string___Buffer____capacity(fra.me.REG[0]);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
@@ -1626,11 +3240,11 @@ void standard___string___Buffer___enlarge(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:234 */
   REGB2 = TAG_Bool(UNTAG_Int(REGB0)<=UNTAG_Int(REGB1));
-  /* ../lib/standard/string.nit:305 */
+  /* ../lib/standard/string.nit:598 */
   if (UNTAG_Bool(REGB2)) {
     goto label1;
   }
-  /* ../lib/standard/string.nit:306 */
+  /* ../lib/standard/string.nit:599 */
   while(1) {
     REGB2 = TAG_Bool(VAL_ISA(REGB0, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
     if (UNTAG_Bool(REGB2)) {
@@ -1639,33 +3253,33 @@ void standard___string___Buffer___enlarge(val_t p0, val_t p1){
     }
     /* ../lib/standard/kernel.nit:234 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB1)<=UNTAG_Int(REGB0));
-    /* ../lib/standard/string.nit:306 */
+    /* ../lib/standard/string.nit:599 */
     if (UNTAG_Bool(REGB2)) {
       REGB2 = TAG_Int(2);
       /* ../lib/standard/kernel.nit:241 */
       REGB2 = TAG_Int(UNTAG_Int(REGB1)*UNTAG_Int(REGB2));
-      /* ../lib/standard/string.nit:306 */
+      /* ../lib/standard/string.nit:599 */
       REGB3 = TAG_Int(2);
       /* ../lib/standard/kernel.nit:238 */
       REGB3 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB3));
-      /* ../lib/standard/string.nit:306 */
+      /* ../lib/standard/string.nit:599 */
       REGB1 = REGB3;
     } else {
       goto label2;
     }
   }
   label2: while(0);
-  /* ../lib/standard/string.nit:307 */
+  /* ../lib/standard/string.nit:600 */
   REGB0 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:238 */
   REGB0 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB0));
-  /* ../lib/standard/string.nit:619 */
+  /* ../lib/standard/string.nit:972 */
   fra.me.REG[1] = BOX_NativeString((char*)raw_alloc((UNTAG_Int(REGB0) * sizeof(char))));
-  /* ../lib/standard/string.nit:308 */
+  /* ../lib/standard/string.nit:601 */
   REGB0 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 308);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 601);
   }
   fra.me.REG[2] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:24 */
@@ -1675,14 +3289,14 @@ void standard___string___Buffer___enlarge(val_t p0, val_t p1){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:308 */
+  /* ../lib/standard/string.nit:601 */
   REGB3 = TAG_Int(0);
   REGB2 = TAG_Int(0);
-  /* ../lib/standard/string.nit:604 */
+  /* ../lib/standard/string.nit:957 */
   (void)memcpy(UNBOX_NativeString(fra.me.REG[1])+UNTAG_Int(REGB2), UNBOX_NativeString(fra.me.REG[2])+UNTAG_Int(REGB3), UNTAG_Int(REGB0));;
-  /* ../lib/standard/string.nit:309 */
+  /* ../lib/standard/string.nit:602 */
   ATTR_standard___string___AbstractString____items(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/string.nit:310 */
+  /* ../lib/standard/string.nit:603 */
   ATTR_standard___string___Buffer____capacity(fra.me.REG[0]) = REGB1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1690,7 +3304,7 @@ void standard___string___Buffer___enlarge(val_t p0, val_t p1){
 }
 static const char LOCATE_standard___string___Buffer___append[] = "string::Buffer::(abstract_collection::Sequence::append)";
 void standard___string___Buffer___append(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 REGB2;
@@ -1698,22 +3312,23 @@ void standard___string___Buffer___append(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 313;
+  fra.me.line = 606;
   fra.me.meth = LOCATE_standard___string___Buffer___append;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/string.nit:313 */
+  /* ../lib/standard/string.nit:606 */
   fra.me.REG[2] = fra.me.REG[0];
   fra.me.REG[3] = fra.me.REG[1];
-  /* ../lib/standard/string.nit:315 */
+  /* ../lib/standard/string.nit:608 */
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[3], COLOR_standard___string___String, ID_standard___string___String)) /*cast String*/;
   if (UNTAG_Bool(REGB0)) {
     /* ../lib/standard/collection/array.nit:24 */
@@ -1723,18 +3338,17 @@ void standard___string___Buffer___append(val_t p0, val_t p1){
       nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
     }
     REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3]);
-    /* ../lib/standard/string.nit:317 */
+    /* ../lib/standard/string.nit:610 */
     REGB1 = TAG_Bool(ATTR_standard___string___Buffer____capacity(fra.me.REG[2])!=NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_standard___string, 317);
+      nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_standard___string, 610);
     }
     REGB1 = ATTR_standard___string___Buffer____capacity(fra.me.REG[2]);
-    /* ../lib/standard/collection/array.nit:24 */
     REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 610);
     }
     REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
     /* ../lib/standard/kernel.nit:238 */
@@ -1746,46 +3360,49 @@ void standard___string___Buffer___append(val_t p0, val_t p1){
     }
     /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
-    /* ../lib/standard/string.nit:317 */
+    /* ../lib/standard/string.nit:610 */
     if (UNTAG_Bool(REGB2)) {
-      /* ../lib/standard/collection/array.nit:24 */
       REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
       if (UNTAG_Bool(REGB2)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+        nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 610);
       }
       REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
       /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB0));
-      /* ../lib/standard/string.nit:317 */
+      /* ../lib/standard/string.nit:610 */
       CALL_standard___collection___array___AbstractArray___enlarge(fra.me.REG[2])(fra.me.REG[2], REGB2);
     }
-    /* ../lib/standard/string.nit:318 */
-    fra.me.REG[3] = CALL_standard___string___AbstractString___items(fra.me.REG[3])(fra.me.REG[3]);
+    /* ../lib/standard/string.nit:611 */
+    fra.me.REG[4] = CALL_standard___string___AbstractString___items(fra.me.REG[3])(fra.me.REG[3]);
     REGB2 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[2])!=NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 318);
+      nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 611);
     }
-    fra.me.REG[4] = ATTR_standard___string___AbstractString____items(fra.me.REG[2]);
-    REGB2 = TAG_Int(0);
-    /* ../lib/standard/collection/array.nit:24 */
+    fra.me.REG[5] = ATTR_standard___string___AbstractString____items(fra.me.REG[2]);
+    REGB2 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[3])!=NIT_NULL);
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 611);
+    }
+    REGB2 = ATTR_standard___string___String____index_from(fra.me.REG[3]);
     REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 611);
     }
     REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
-    /* ../lib/standard/string.nit:604 */
-    (void)memcpy(UNBOX_NativeString(fra.me.REG[4])+UNTAG_Int(REGB1), UNBOX_NativeString(fra.me.REG[3])+UNTAG_Int(REGB2), UNTAG_Int(REGB0));;
-    /* ../lib/standard/string.nit:319 */
+    /* ../lib/standard/string.nit:957 */
+    (void)memcpy(UNBOX_NativeString(fra.me.REG[5])+UNTAG_Int(REGB1), UNBOX_NativeString(fra.me.REG[4])+UNTAG_Int(REGB2), UNTAG_Int(REGB0));;
+    /* ../lib/standard/string.nit:612 */
     REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
     /* ../lib/standard/kernel.nit:238 */
     REGB0 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB0));
-    /* ../lib/standard/string.nit:319 */
+    /* ../lib/standard/string.nit:612 */
     ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]) = REGB0;
   } else {
-    /* ../lib/standard/string.nit:321 */
+    /* ../lib/standard/string.nit:614 */
     CALL_SUPER_standard___string___Buffer___append(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   }
   stack_frame_head = fra.me.prev;
@@ -1800,7 +3417,7 @@ val_t standard___string___Buffer___to_s(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 325;
+  fra.me.line = 618;
   fra.me.meth = LOCATE_standard___string___Buffer___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -1816,22 +3433,22 @@ val_t standard___string___Buffer___to_s(val_t p0){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:328 */
+  /* ../lib/standard/string.nit:621 */
   REGB1 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:238 */
   REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
-  /* ../lib/standard/string.nit:619 */
+  /* ../lib/standard/string.nit:972 */
   fra.me.REG[1] = BOX_NativeString((char*)raw_alloc((UNTAG_Int(REGB1) * sizeof(char))));
-  /* ../lib/standard/string.nit:329 */
+  /* ../lib/standard/string.nit:622 */
   REGB1 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 329);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 622);
   }
   fra.me.REG[2] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Int(0);
-  /* ../lib/standard/string.nit:604 */
+  /* ../lib/standard/string.nit:957 */
   (void)memcpy(UNBOX_NativeString(fra.me.REG[1])+UNTAG_Int(REGB2), UNBOX_NativeString(fra.me.REG[2])+UNTAG_Int(REGB1), UNTAG_Int(REGB0));;
   /* ../lib/standard/collection/array.nit:24 */
   REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
@@ -1840,9 +3457,9 @@ val_t standard___string___Buffer___to_s(val_t p0){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:332 */
+  /* ../lib/standard/string.nit:625 */
   REGB1 = TAG_Char('\0');
-  /* ../lib/standard/string.nit:603 */
+  /* ../lib/standard/string.nit:956 */
   UNBOX_NativeString(fra.me.REG[1])[UNTAG_Int(REGB2)]=UNTAG_Char(REGB1);;
   /* ../lib/standard/collection/array.nit:24 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
@@ -1851,7 +3468,7 @@ val_t standard___string___Buffer___to_s(val_t p0){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:334 */
+  /* ../lib/standard/string.nit:627 */
   fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB1);
   goto label1;
   label1: while(0);
@@ -1871,7 +3488,7 @@ val_t standard___string___Buffer_____l(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 337;
+  fra.me.line = 630;
   fra.me.meth = LOCATE_standard___string___Buffer_____l;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -1885,7 +3502,7 @@ val_t standard___string___Buffer_____l(val_t p0, val_t p1){
   } else {
     nit_abort("Cast failed", NULL, LOCATE_standard___string, 0);
   }
-  /* ../lib/standard/string.nit:339 */
+  /* ../lib/standard/string.nit:632 */
   REGB0 = TAG_Int(0);
   /* ../lib/standard/collection/array.nit:24 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
@@ -1900,7 +3517,7 @@ val_t standard___string___Buffer_____l(val_t p0, val_t p1){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
-  /* ../lib/standard/string.nit:342 */
+  /* ../lib/standard/string.nit:635 */
   while(1) {
     REGB3 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
     if (UNTAG_Bool(REGB3)) {
@@ -1909,7 +3526,7 @@ val_t standard___string___Buffer_____l(val_t p0, val_t p1){
     }
     /* ../lib/standard/kernel.nit:235 */
     REGB3 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/string.nit:342 */
+    /* ../lib/standard/string.nit:635 */
     if (UNTAG_Bool(REGB3)) {
       REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
       if (UNTAG_Bool(REGB3)) {
@@ -1919,16 +3536,16 @@ val_t standard___string___Buffer_____l(val_t p0, val_t p1){
       /* ../lib/standard/kernel.nit:235 */
       REGB3 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB2));
     } else {
-      /* ../lib/standard/string.nit:342 */
+      /* ../lib/standard/string.nit:635 */
       REGB4 = TAG_Bool(0);
       REGB3 = REGB4;
     }
     if (UNTAG_Bool(REGB3)) {
-      /* ../lib/standard/string.nit:343 */
+      /* ../lib/standard/string.nit:636 */
       REGB3 = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[0])(fra.me.REG[0], REGB0);
       /* ../lib/standard/kernel.nit:416 */
       REGB3 = TAG_Int((unsigned char)UNTAG_Char(REGB3));
-      /* ../lib/standard/string.nit:344 */
+      /* ../lib/standard/string.nit:637 */
       REGB4 = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[1])(fra.me.REG[1], REGB0);
       /* ../lib/standard/kernel.nit:416 */
       REGB4 = TAG_Int((unsigned char)UNTAG_Char(REGB4));
@@ -1939,9 +3556,9 @@ val_t standard___string___Buffer_____l(val_t p0, val_t p1){
       }
       /* ../lib/standard/kernel.nit:235 */
       REGB5 = TAG_Bool(UNTAG_Int(REGB3)<UNTAG_Int(REGB4));
-      /* ../lib/standard/string.nit:345 */
+      /* ../lib/standard/string.nit:638 */
       if (UNTAG_Bool(REGB5)) {
-        /* ../lib/standard/string.nit:346 */
+        /* ../lib/standard/string.nit:639 */
         REGB5 = TAG_Bool(1);
         goto label1;
       } else {
@@ -1952,22 +3569,22 @@ val_t standard___string___Buffer_____l(val_t p0, val_t p1){
         }
         /* ../lib/standard/kernel.nit:235 */
         REGB3 = TAG_Bool(UNTAG_Int(REGB4)<UNTAG_Int(REGB3));
-        /* ../lib/standard/string.nit:347 */
+        /* ../lib/standard/string.nit:640 */
         if (UNTAG_Bool(REGB3)) {
-          /* ../lib/standard/string.nit:348 */
+          /* ../lib/standard/string.nit:641 */
           REGB3 = TAG_Bool(0);
           REGB5 = REGB3;
           goto label1;
         }
       }
-      /* ../lib/standard/string.nit:350 */
+      /* ../lib/standard/string.nit:643 */
       REGB3 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:238 */
       REGB3 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB3));
-      /* ../lib/standard/string.nit:350 */
+      /* ../lib/standard/string.nit:643 */
       REGB0 = REGB3;
     } else {
-      /* ../lib/standard/string.nit:342 */
+      /* ../lib/standard/string.nit:635 */
       goto label2;
     }
   }
@@ -1979,14 +3596,14 @@ val_t standard___string___Buffer_____l(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:235 */
   REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
-  /* ../lib/standard/string.nit:352 */
+  /* ../lib/standard/string.nit:645 */
   if (UNTAG_Bool(REGB2)) {
-    /* ../lib/standard/string.nit:353 */
+    /* ../lib/standard/string.nit:646 */
     REGB2 = TAG_Bool(1);
     REGB5 = REGB2;
     goto label1;
   } else {
-    /* ../lib/standard/string.nit:355 */
+    /* ../lib/standard/string.nit:648 */
     REGB2 = TAG_Bool(0);
     REGB5 = REGB2;
     goto label1;
@@ -1997,46 +3614,47 @@ val_t standard___string___Buffer_____l(val_t p0, val_t p1){
 }
 static const char LOCATE_standard___string___Buffer___init[] = "string::Buffer::init";
 void standard___string___Buffer___init(val_t p0, int* init_table){
-  int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___string___Buffer].i;
+  int itpos4 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___string___Buffer].i;
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos2]) return;
+  if (init_table[itpos4]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 359;
+  fra.me.line = 652;
   fra.me.meth = LOCATE_standard___string___Buffer___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:362 */
+  /* ../lib/standard/string.nit:655 */
   REGB0 = TAG_Int(5);
   CALL_standard___string___Buffer___with_capacity(fra.me.REG[0])(fra.me.REG[0], REGB0, init_table);
   stack_frame_head = fra.me.prev;
-  init_table[itpos2] = 1;
+  init_table[itpos4] = 1;
   return;
 }
 static const char LOCATE_standard___string___Buffer___from[] = "string::Buffer::from";
 void standard___string___Buffer___from(val_t p0, val_t p1, int* init_table){
-  int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___string___Buffer].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  int itpos5 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___string___Buffer].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
   val_t tmp;
-  if (init_table[itpos3]) return;
+  if (init_table[itpos5]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 365;
+  fra.me.line = 658;
   fra.me.meth = LOCATE_standard___string___Buffer___from;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   /* ../lib/standard/collection/array.nit:24 */
@@ -2046,11 +3664,11 @@ void standard___string___Buffer___from(val_t p0, val_t p1, int* init_table){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
-  /* ../lib/standard/string.nit:367 */
+  /* ../lib/standard/string.nit:660 */
   REGB1 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:238 */
   REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
-  /* ../lib/standard/string.nit:367 */
+  /* ../lib/standard/string.nit:660 */
   ATTR_standard___string___Buffer____capacity(fra.me.REG[0]) = REGB1;
   /* ../lib/standard/collection/array.nit:24 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
@@ -2059,53 +3677,58 @@ void standard___string___Buffer___from(val_t p0, val_t p1, int* init_table){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
-  /* ../lib/standard/string.nit:368 */
+  /* ../lib/standard/string.nit:661 */
   ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]) = REGB1;
-  /* ../lib/standard/string.nit:369 */
+  /* ../lib/standard/string.nit:662 */
   REGB1 = TAG_Bool(ATTR_standard___string___Buffer____capacity(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_standard___string, 369);
+    nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_standard___string, 662);
   }
   REGB1 = ATTR_standard___string___Buffer____capacity(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:619 */
+  /* ../lib/standard/string.nit:972 */
   fra.me.REG[2] = BOX_NativeString((char*)raw_alloc((UNTAG_Int(REGB1) * sizeof(char))));
-  /* ../lib/standard/string.nit:369 */
+  /* ../lib/standard/string.nit:662 */
   ATTR_standard___string___AbstractString____items(fra.me.REG[0]) = fra.me.REG[2];
-  /* ../lib/standard/string.nit:370 */
-  fra.me.REG[1] = CALL_standard___string___AbstractString___items(fra.me.REG[1])(fra.me.REG[1]);
+  /* ../lib/standard/string.nit:663 */
+  fra.me.REG[2] = CALL_standard___string___AbstractString___items(fra.me.REG[1])(fra.me.REG[1]);
   REGB1 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 370);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 663);
   }
-  fra.me.REG[2] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 370);
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___string, 663);
   }
   REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  REGB0 = TAG_Int(0);
+  REGB0 = TAG_Bool(ATTR_standard___string___String____index_from(fra.me.REG[1])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_index_from", LOCATE_standard___string, 663);
+  }
+  REGB0 = ATTR_standard___string___String____index_from(fra.me.REG[1]);
   REGB2 = TAG_Int(0);
-  /* ../lib/standard/string.nit:604 */
-  (void)memcpy(UNBOX_NativeString(fra.me.REG[2])+UNTAG_Int(REGB2), UNBOX_NativeString(fra.me.REG[1])+UNTAG_Int(REGB0), UNTAG_Int(REGB1));;
+  /* ../lib/standard/string.nit:957 */
+  (void)memcpy(UNBOX_NativeString(fra.me.REG[3])+UNTAG_Int(REGB2), UNBOX_NativeString(fra.me.REG[2])+UNTAG_Int(REGB0), UNTAG_Int(REGB1));;
   stack_frame_head = fra.me.prev;
-  init_table[itpos3] = 1;
+  init_table[itpos5] = 1;
   return;
 }
 static const char LOCATE_standard___string___Buffer___with_capacity[] = "string::Buffer::with_capacity";
 void standard___string___Buffer___with_capacity(val_t p0, val_t p1, int* init_table){
-  int itpos4 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___string___Buffer].i;
+  int itpos6 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___string___Buffer].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
   val_t tmp;
-  if (init_table[itpos4]) return;
+  if (init_table[itpos6]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 373;
+  fra.me.line = 666;
   fra.me.meth = LOCATE_standard___string___Buffer___with_capacity;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2114,7 +3737,7 @@ void standard___string___Buffer___with_capacity(val_t p0, val_t p1, int* init_ta
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/string.nit:376 */
+  /* ../lib/standard/string.nit:669 */
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
@@ -2123,26 +3746,26 @@ void standard___string___Buffer___with_capacity(val_t p0, val_t p1, int* init_ta
   }
   /* ../lib/standard/kernel.nit:236 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ../lib/standard/string.nit:376 */
+  /* ../lib/standard/string.nit:669 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_standard___string, 376);
+    nit_abort("Assert failed", NULL, LOCATE_standard___string, 669);
   }
-  /* ../lib/standard/string.nit:378 */
+  /* ../lib/standard/string.nit:671 */
   REGB1 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:238 */
   REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
-  /* ../lib/standard/string.nit:619 */
+  /* ../lib/standard/string.nit:972 */
   fra.me.REG[1] = BOX_NativeString((char*)raw_alloc((UNTAG_Int(REGB1) * sizeof(char))));
-  /* ../lib/standard/string.nit:378 */
+  /* ../lib/standard/string.nit:671 */
   ATTR_standard___string___AbstractString____items(fra.me.REG[0]) = fra.me.REG[1];
-  /* ../lib/standard/string.nit:379 */
+  /* ../lib/standard/string.nit:672 */
   ATTR_standard___string___Buffer____capacity(fra.me.REG[0]) = REGB0;
-  /* ../lib/standard/string.nit:380 */
+  /* ../lib/standard/string.nit:673 */
   REGB0 = TAG_Int(0);
   ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos4] = 1;
+  init_table[itpos6] = 1;
   return;
 }
 static const char LOCATE_standard___string___Buffer_____eqeq[] = "string::Buffer::(kernel::Object::==)";
@@ -2157,7 +3780,7 @@ val_t standard___string___Buffer_____eqeq(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 383;
+  fra.me.line = 676;
   fra.me.meth = LOCATE_standard___string___Buffer_____eqeq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2166,7 +3789,7 @@ val_t standard___string___Buffer_____eqeq(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/string.nit:385 */
+  /* ../lib/standard/string.nit:678 */
   REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_standard___string___Buffer, ID_standard___string___Buffer)) /*cast Buffer*/;
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
@@ -2186,10 +3809,10 @@ val_t standard___string___Buffer_____eqeq(val_t p0, val_t p1){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:387 */
+  /* ../lib/standard/string.nit:680 */
   REGB2 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
-    nit_abort("Reciever is null", NULL, LOCATE_standard___string, 387);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___string, 680);
   }
   /* ../lib/standard/collection/array.nit:24 */
   REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
@@ -2198,13 +3821,13 @@ val_t standard___string___Buffer_____eqeq(val_t p0, val_t p1){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
-  /* ../lib/standard/string.nit:387 */
+  /* ../lib/standard/string.nit:680 */
   REGB3 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB1));
   if (UNTAG_Bool(REGB3)) {
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB2 = TAG_Bool((REGB2)==(REGB1));
-    /* ../lib/standard/string.nit:387 */
+    /* ../lib/standard/string.nit:680 */
     REGB3 = REGB2;
   }
   REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
@@ -2213,23 +3836,23 @@ val_t standard___string___Buffer_____eqeq(val_t p0, val_t p1){
     REGB0 = REGB3;
     goto label1;
   }
-  /* ../lib/standard/string.nit:388 */
+  /* ../lib/standard/string.nit:681 */
   REGB3 = TAG_Int(0);
-  /* ../lib/standard/string.nit:389 */
+  /* ../lib/standard/string.nit:682 */
   REGB2 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 389);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 682);
   }
   fra.me.REG[0] = ATTR_standard___string___AbstractString____items(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:390 */
+  /* ../lib/standard/string.nit:683 */
   REGB2 = TAG_Bool(ATTR_standard___string___AbstractString____items(fra.me.REG[1])!=NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 390);
+    nit_abort("Uninitialized attribute %s", "_items", LOCATE_standard___string, 683);
   }
   fra.me.REG[1] = ATTR_standard___string___AbstractString____items(fra.me.REG[1]);
-  /* ../lib/standard/string.nit:391 */
+  /* ../lib/standard/string.nit:684 */
   while(1) {
     REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB3), VTID_standard___kernel___Comparable___OTHER(REGB3))) /*cast OTHER*/;
     if (UNTAG_Bool(REGB2)) {
@@ -2238,18 +3861,18 @@ val_t standard___string___Buffer_____eqeq(val_t p0, val_t p1){
     }
     /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB3)<UNTAG_Int(REGB1));
-    /* ../lib/standard/string.nit:391 */
+    /* ../lib/standard/string.nit:684 */
     if (UNTAG_Bool(REGB2)) {
-      /* ../lib/standard/string.nit:602 */
+      /* ../lib/standard/string.nit:955 */
       REGB2 = TAG_Char(UNBOX_NativeString(fra.me.REG[0])[UNTAG_Int(REGB3)]);
       REGB4 = TAG_Char(UNBOX_NativeString(fra.me.REG[1])[UNTAG_Int(REGB3)]);
-      /* ../lib/standard/string.nit:392 */
+      /* ../lib/standard/string.nit:685 */
       REGB5 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB4));
       if (UNTAG_Bool(REGB5)) {
       } else {
         /* ../lib/standard/kernel.nit:381 */
         REGB4 = TAG_Bool((REGB2)==(REGB4));
-        /* ../lib/standard/string.nit:392 */
+        /* ../lib/standard/string.nit:685 */
         REGB5 = REGB4;
       }
       REGB5 = TAG_Bool(!UNTAG_Bool(REGB5));
@@ -2258,19 +3881,19 @@ val_t standard___string___Buffer_____eqeq(val_t p0, val_t p1){
         REGB0 = REGB5;
         goto label1;
       }
-      /* ../lib/standard/string.nit:393 */
+      /* ../lib/standard/string.nit:686 */
       REGB5 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:238 */
       REGB5 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB5));
-      /* ../lib/standard/string.nit:393 */
+      /* ../lib/standard/string.nit:686 */
       REGB3 = REGB5;
     } else {
-      /* ../lib/standard/string.nit:391 */
+      /* ../lib/standard/string.nit:684 */
       goto label2;
     }
   }
   label2: while(0);
-  /* ../lib/standard/string.nit:395 */
+  /* ../lib/standard/string.nit:688 */
   REGB3 = TAG_Bool(1);
   REGB0 = REGB3;
   goto label1;
@@ -2285,18 +3908,18 @@ val_t standard___string___Buffer___capacity(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 398;
+  fra.me.line = 691;
   fra.me.meth = LOCATE_standard___string___Buffer___capacity;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:398 */
+  /* ../lib/standard/string.nit:691 */
   REGB0 = TAG_Bool(ATTR_standard___string___Buffer____capacity(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_standard___string, 398);
+    nit_abort("Uninitialized attribute %s", "_capacity", LOCATE_standard___string, 691);
   }
   REGB0 = ATTR_standard___string___Buffer____capacity(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -2308,14 +3931,14 @@ val_t standard___string___Object___to_s(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 406;
+  fra.me.line = 699;
   fra.me.meth = LOCATE_standard___string___Object___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:407 */
+  /* ../lib/standard/string.nit:700 */
   fra.me.REG[0] = CALL_standard___string___Object___inspect(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
   label1: while(0);
@@ -2328,14 +3951,14 @@ val_t standard___string___Object___native_class_name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 409;
+  fra.me.line = 702;
   fra.me.meth = LOCATE_standard___string___Object___native_class_name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:409 */
+  /* ../lib/standard/string.nit:702 */
   fra.me.REG[0] = BOX_NativeString(VAL2VFT(fra.me.REG[0])[2].cname);;
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -2346,14 +3969,14 @@ val_t standard___string___Object___class_name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 412;
+  fra.me.line = 705;
   fra.me.meth = LOCATE_standard___string___Object___class_name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:416 */
+  /* ../lib/standard/string.nit:709 */
   fra.me.REG[0] = CALL_standard___string___Object___native_class_name(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = NEW_String_standard___string___String___from_cstring(fra.me.REG[0]);
   goto label1;
@@ -2370,7 +3993,7 @@ val_t standard___string___Object___inspect(val_t p0){
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 418;
+  fra.me.line = 711;
   fra.me.meth = LOCATE_standard___string___Object___inspect;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -2379,7 +4002,7 @@ val_t standard___string___Object___inspect(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:422 */
+  /* ../lib/standard/string.nit:715 */
   REGB0 = TAG_Int(3);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_1) {
@@ -2418,7 +4041,7 @@ val_t standard___string___Object___inspect_head(val_t p0){
   static val_t once_value_3; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 425;
+  fra.me.line = 718;
   fra.me.meth = LOCATE_standard___string___Object___inspect_head;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -2427,7 +4050,7 @@ val_t standard___string___Object___inspect_head(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:429 */
+  /* ../lib/standard/string.nit:722 */
   REGB0 = TAG_Int(5);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_1) {
@@ -2474,14 +4097,14 @@ val_t standard___string___Object___args(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 432;
+  fra.me.line = 725;
   fra.me.meth = LOCATE_standard___string___Object___args;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:434 */
+  /* ../lib/standard/string.nit:727 */
   fra.me.REG[0] = CALL_standard___kernel___Object___sys(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_standard___string___Object___args(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -2500,7 +4123,7 @@ val_t standard___string___Bool___to_s(val_t p0){
       static val_t once_value_5; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 439;
+  fra.me.line = 732;
   fra.me.meth = LOCATE_standard___string___Bool___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2508,9 +4131,9 @@ val_t standard___string___Bool___to_s(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   REGB0 = p0;
-  /* ../lib/standard/string.nit:441 */
+  /* ../lib/standard/string.nit:734 */
   if (UNTAG_Bool(REGB0)) {
-    /* ../lib/standard/string.nit:442 */
+    /* ../lib/standard/string.nit:735 */
     if (!once_value_1) {
       if (!once_value_2) {
         fra.me.REG[0] = BOX_NativeString("true");
@@ -2526,7 +4149,7 @@ val_t standard___string___Bool___to_s(val_t p0){
     fra.me.REG[0] = fra.me.REG[0];
     goto label3;
   } else {
-    /* ../lib/standard/string.nit:444 */
+    /* ../lib/standard/string.nit:737 */
     if (!once_value_4) {
       if (!once_value_5) {
         fra.me.REG[1] = BOX_NativeString("false");
@@ -2558,7 +4181,7 @@ void standard___string___Int___fill_buffer(val_t p0, val_t p1, val_t p2, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 450;
+  fra.me.line = 743;
   fra.me.meth = LOCATE_standard___string___Int___fill_buffer;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -2568,7 +4191,7 @@ void standard___string___Int___fill_buffer(val_t p0, val_t p1, val_t p2, val_t p
   fra.me.REG[0] = p1;
   REGB1 = p2;
   REGB2 = p3;
-  /* ../lib/standard/string.nit:456 */
+  /* ../lib/standard/string.nit:749 */
   REGB2 = TAG_Int(0);
   REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB3)) {
@@ -2577,43 +4200,43 @@ void standard___string___Int___fill_buffer(val_t p0, val_t p1, val_t p2, val_t p
   }
   /* ../lib/standard/kernel.nit:235 */
   REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB2));
-  /* ../lib/standard/string.nit:456 */
+  /* ../lib/standard/string.nit:749 */
   if (UNTAG_Bool(REGB2)) {
     /* ../lib/standard/kernel.nit:239 */
     REGB2 = TAG_Int(-UNTAG_Int(REGB0));
-    /* ../lib/standard/string.nit:458 */
+    /* ../lib/standard/string.nit:751 */
     REGB3 = TAG_Int(0);
     REGB4 = TAG_Char('-');
     CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[0])(fra.me.REG[0], REGB3, REGB4);
   } else {
-    /* ../lib/standard/string.nit:459 */
+    /* ../lib/standard/string.nit:752 */
     REGB4 = TAG_Int(0);
     REGB3 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB4));
     if (UNTAG_Bool(REGB3)) {
     } else {
       /* ../lib/standard/kernel.nit:230 */
       REGB4 = TAG_Bool((REGB0)==(REGB4));
-      /* ../lib/standard/string.nit:459 */
+      /* ../lib/standard/string.nit:752 */
       REGB3 = REGB4;
     }
     if (UNTAG_Bool(REGB3)) {
-      /* ../lib/standard/string.nit:460 */
+      /* ../lib/standard/string.nit:753 */
       REGB3 = TAG_Int(0);
       REGB4 = TAG_Char('0');
       CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[0])(fra.me.REG[0], REGB3, REGB4);
-      /* ../lib/standard/string.nit:461 */
+      /* ../lib/standard/string.nit:754 */
       goto label1;
     } else {
-      /* ../lib/standard/string.nit:463 */
+      /* ../lib/standard/string.nit:756 */
       REGB2 = REGB0;
     }
   }
-  /* ../lib/standard/string.nit:466 */
+  /* ../lib/standard/string.nit:759 */
   REGB0 = CALL_standard___kernel___Int___digit_count(REGB0)(REGB0, REGB1);
   REGB4 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:240 */
   REGB4 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB4));
-  /* ../lib/standard/string.nit:467 */
+  /* ../lib/standard/string.nit:760 */
   while(1) {
     REGB0 = TAG_Int(0);
     REGB3 = TAG_Bool(VAL_ISA(REGB0, VTCOLOR_standard___kernel___Comparable___OTHER(REGB4), VTID_standard___kernel___Comparable___OTHER(REGB4))) /*cast OTHER*/;
@@ -2623,7 +4246,7 @@ void standard___string___Int___fill_buffer(val_t p0, val_t p1, val_t p2, val_t p
     }
     /* ../lib/standard/kernel.nit:236 */
     REGB0 = TAG_Bool(UNTAG_Int(REGB4)>=UNTAG_Int(REGB0));
-    /* ../lib/standard/string.nit:467 */
+    /* ../lib/standard/string.nit:760 */
     if (UNTAG_Bool(REGB0)) {
       REGB0 = TAG_Int(0);
       REGB3 = TAG_Bool(VAL_ISA(REGB0, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
@@ -2634,302 +4257,673 @@ void standard___string___Int___fill_buffer(val_t p0, val_t p1, val_t p2, val_t p
       /* ../lib/standard/kernel.nit:237 */
       REGB0 = TAG_Bool(UNTAG_Int(REGB2)>UNTAG_Int(REGB0));
     } else {
-      /* ../lib/standard/string.nit:467 */
+      /* ../lib/standard/string.nit:760 */
       REGB3 = TAG_Bool(0);
       REGB0 = REGB3;
     }
     if (UNTAG_Bool(REGB0)) {
       /* ../lib/standard/kernel.nit:243 */
       REGB0 = TAG_Int(UNTAG_Int(REGB2)%UNTAG_Int(REGB1));
-      /* ../lib/standard/string.nit:468 */
+      /* ../lib/standard/string.nit:761 */
       REGB0 = CALL_standard___kernel___Int___to_c(REGB0)(REGB0);
       CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[0])(fra.me.REG[0], REGB4, REGB0);
       /* ../lib/standard/kernel.nit:242 */
       REGB0 = TAG_Int(UNTAG_Int(REGB2)/UNTAG_Int(REGB1));
-      /* ../lib/standard/string.nit:469 */
+      /* ../lib/standard/string.nit:762 */
       REGB2 = REGB0;
-      /* ../lib/standard/string.nit:470 */
+      /* ../lib/standard/string.nit:763 */
       REGB0 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:240 */
       REGB0 = TAG_Int(UNTAG_Int(REGB4)-UNTAG_Int(REGB0));
-      /* ../lib/standard/string.nit:470 */
+      /* ../lib/standard/string.nit:763 */
       REGB4 = REGB0;
     } else {
-      /* ../lib/standard/string.nit:467 */
-      goto label2;
+      /* ../lib/standard/string.nit:760 */
+      goto label2;
+    }
+  }
+  label2: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+static const char LOCATE_standard___string___Int___to_s[] = "string::Int::(string::Object::to_s)";
+val_t standard___string___Int___to_s(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 767;
+  fra.me.meth = LOCATE_standard___string___Int___to_s;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* ../lib/standard/string.nit:768 */
+  REGB1 = TAG_Int(10);
+  REGB2 = TAG_Bool(1);
+  fra.me.REG[0] = CALL_standard___string___Int___to_base(REGB0)(REGB0, REGB1, REGB2);
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_standard___string___Int___to_hex[] = "string::Int::to_hex";
+val_t standard___string___Int___to_hex(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 770;
+  fra.me.meth = LOCATE_standard___string___Int___to_hex;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  /* ../lib/standard/string.nit:771 */
+  REGB1 = TAG_Int(16);
+  REGB2 = TAG_Bool(0);
+  fra.me.REG[0] = CALL_standard___string___Int___to_base(REGB0)(REGB0, REGB1, REGB2);
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_standard___string___Int___to_base[] = "string::Int::to_base";
+val_t standard___string___Int___to_base(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
+  val_t tmp;
+  static val_t once_value_1; /* Once value */
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 773;
+  fra.me.meth = LOCATE_standard___string___Int___to_base;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB2 = p2;
+  /* ../lib/standard/string.nit:776 */
+  REGB3 = CALL_standard___kernel___Int___digit_count(REGB0)(REGB0, REGB1);
+  /* ../lib/standard/string.nit:777 */
+  if (!once_value_1) {
+    fra.me.REG[0] = BOX_NativeString(" ");
+    REGB4 = TAG_Int(1);
+    fra.me.REG[0] = NEW_String_standard___string___String___with_native(fra.me.REG[0], REGB4);
+    once_value_1 = fra.me.REG[0];
+    register_static_object(&once_value_1);
+  } else fra.me.REG[0] = once_value_1;
+  fra.me.REG[0] = fra.me.REG[0];
+  fra.me.REG[0] = CALL_standard___string___String_____star(fra.me.REG[0])(fra.me.REG[0], REGB3);
+  fra.me.REG[0] = NEW_Buffer_standard___string___Buffer___from(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:778 */
+  CALL_standard___string___Int___fill_buffer(REGB0)(REGB0, fra.me.REG[0], REGB1, REGB2);
+  /* ../lib/standard/string.nit:779 */
+  fra.me.REG[0] = CALL_standard___string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
+  goto label2;
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+static const char LOCATE_standard___string___Float___to_s[] = "string::Float::(string::Object::to_s)";
+val_t standard___string___Float___to_s(val_t p0){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
+  val_t REGB5;
+  val_t REGB6;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 784;
+  fra.me.meth = LOCATE_standard___string___Float___to_s;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ../lib/standard/string.nit:786 */
+  REGB0 = TAG_Int(3);
+  fra.me.REG[0] = CALL_standard___string___Float___to_precision(fra.me.REG[0])(fra.me.REG[0], REGB0);
+  /* ../lib/standard/collection/array.nit:24 */
+  REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+  }
+  REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:788 */
+  REGB1 = TAG_Int(0);
+  REGB2 = TAG_Int(1);
+  /* ../lib/standard/kernel.nit:240 */
+  REGB2 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB2));
+  /* ../lib/standard/kernel.nit:344 */
+  while(1) {
+    REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB3)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:234 */
+    REGB3 = TAG_Bool(UNTAG_Int(REGB1)<=UNTAG_Int(REGB2));
+    /* ../lib/standard/kernel.nit:344 */
+    if (UNTAG_Bool(REGB3)) {
+      /* ../lib/standard/string.nit:788 */
+      REGB3 = REGB1;
+      /* ../lib/standard/string.nit:789 */
+      REGB4 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:240 */
+      REGB4 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB4));
+      REGB3 = TAG_Int(UNTAG_Int(REGB4)-UNTAG_Int(REGB3));
+      /* ../lib/standard/string.nit:790 */
+      REGB4 = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[0])(fra.me.REG[0], REGB3);
+      /* ../lib/standard/string.nit:791 */
+      REGB5 = TAG_Char('0');
+      REGB6 = TAG_Bool(IS_EQUAL_OO(REGB4,REGB5));
+      if (UNTAG_Bool(REGB6)) {
+      } else {
+        /* ../lib/standard/kernel.nit:381 */
+        REGB5 = TAG_Bool((REGB4)==(REGB5));
+        /* ../lib/standard/string.nit:791 */
+        REGB6 = REGB5;
+      }
+      if (UNTAG_Bool(REGB6)) {
+        /* ../lib/standard/string.nit:792 */
+        goto label1;
+      } else {
+        /* ../lib/standard/string.nit:793 */
+        REGB6 = TAG_Char('.');
+        REGB5 = TAG_Bool(IS_EQUAL_OO(REGB4,REGB6));
+        if (UNTAG_Bool(REGB5)) {
+        } else {
+          /* ../lib/standard/kernel.nit:381 */
+          REGB6 = TAG_Bool((REGB4)==(REGB6));
+          /* ../lib/standard/string.nit:793 */
+          REGB5 = REGB6;
+        }
+        if (UNTAG_Bool(REGB5)) {
+          /* ../lib/standard/string.nit:794 */
+          REGB5 = TAG_Int(0);
+          REGB6 = TAG_Int(2);
+          /* ../lib/standard/kernel.nit:238 */
+          REGB6 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB6));
+          /* ../lib/standard/string.nit:794 */
+          fra.me.REG[1] = CALL_standard___string___AbstractString___substring(fra.me.REG[0])(fra.me.REG[0], REGB5, REGB6);
+          goto label2;
+        } else {
+          /* ../lib/standard/string.nit:796 */
+          REGB6 = TAG_Int(0);
+          REGB5 = TAG_Int(1);
+          /* ../lib/standard/kernel.nit:238 */
+          REGB5 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB5));
+          /* ../lib/standard/string.nit:796 */
+          fra.me.REG[2] = CALL_standard___string___AbstractString___substring(fra.me.REG[0])(fra.me.REG[0], REGB6, REGB5);
+          fra.me.REG[1] = fra.me.REG[2];
+          goto label2;
+        }
+      }
+      label1: while(0);
+      /* ../lib/standard/kernel.nit:346 */
+      REGB5 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB5 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB5));
+      /* ../lib/standard/kernel.nit:346 */
+      REGB1 = REGB5;
+    } else {
+      /* ../lib/standard/kernel.nit:344 */
+      goto label3;
+    }
+  }
+  label3: while(0);
+  /* ../lib/standard/string.nit:799 */
+  fra.me.REG[1] = fra.me.REG[0];
+  goto label2;
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+static const char LOCATE_standard___string___Float___to_precision[] = "string::Float::to_precision";
+val_t standard___string___Float___to_precision(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 REGB2;
+  val_t REGB3;
+  val_t tmp;
+    static val_t once_value_3; /* Once value */
+    static val_t once_value_4; /* Once value */
+    static val_t once_value_5; /* Once value */
+    static val_t once_value_6; /* Once value */
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_standard___string;
+  fra.me.line = 802;
+  fra.me.meth = LOCATE_standard___string___Float___to_precision;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ../lib/standard/string.nit:805 */
+  REGB1 = TAG_Int(0);
+  REGB2 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB1));
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    /* ../lib/standard/kernel.nit:230 */
+    REGB1 = TAG_Bool((REGB0)==(REGB1));
+    /* ../lib/standard/string.nit:805 */
+    REGB2 = REGB1;
+  }
+  if (UNTAG_Bool(REGB2)) {
+    /* ../lib/standard/kernel.nit:219 */
+    REGB2 = TAG_Int((bigint)UNBOX_Float(fra.me.REG[0]));
+    /* ../lib/standard/string.nit:805 */
+    fra.me.REG[1] = CALL_standard___string___Object___to_s(REGB2)(REGB2);
+    goto label1;
+  }
+  /* ../lib/standard/string.nit:806 */
+  fra.me.REG[2] = fra.me.REG[0];
+  /* ../lib/standard/string.nit:807 */
+  REGB2 = TAG_Int(0);
+  /* ../lib/standard/kernel.nit:350 */
+  REGB1 = REGB0;
+  /* ../lib/standard/kernel.nit:355 */
+  while(1) {
+    REGB3 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB3)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:235 */
+    REGB3 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB1));
+    /* ../lib/standard/kernel.nit:355 */
+    if (UNTAG_Bool(REGB3)) {
+      /* ../lib/standard/string.nit:807 */
+      fra.me.REG[3] = BOX_Float(10.0);
+      /* ../lib/standard/kernel.nit:216 */
+      fra.me.REG[3] = BOX_Float(UNBOX_Float(fra.me.REG[2])*UNBOX_Float(fra.me.REG[3]));
+      /* ../lib/standard/string.nit:807 */
+      fra.me.REG[2] = fra.me.REG[3];
+      /* ../lib/standard/kernel.nit:357 */
+      REGB3 = TAG_Int(1);
+      /* ../lib/standard/kernel.nit:238 */
+      REGB3 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB3));
+      /* ../lib/standard/kernel.nit:357 */
+      REGB2 = REGB3;
+    } else {
+      /* ../lib/standard/kernel.nit:355 */
+      goto label2;
+    }
+  }
+  label2: while(0);
+  /* ../lib/standard/string.nit:808 */
+  fra.me.REG[3] = BOX_Float(0.0);
+  /* ../lib/standard/kernel.nit:212 */
+  REGB2 = TAG_Bool(UNBOX_Float(fra.me.REG[0])>UNBOX_Float(fra.me.REG[3]));
+  /* ../lib/standard/string.nit:808 */
+  if (UNTAG_Bool(REGB2)) {
+    /* ../lib/standard/string.nit:809 */
+    fra.me.REG[3] = BOX_Float(0.5);
+    /* ../lib/standard/kernel.nit:213 */
+    fra.me.REG[3] = BOX_Float(UNBOX_Float(fra.me.REG[2])+UNBOX_Float(fra.me.REG[3]));
+    /* ../lib/standard/string.nit:809 */
+    fra.me.REG[2] = fra.me.REG[3];
+  } else {
+    /* ../lib/standard/string.nit:811 */
+    fra.me.REG[3] = BOX_Float(0.5);
+    /* ../lib/standard/kernel.nit:215 */
+    fra.me.REG[3] = BOX_Float(UNBOX_Float(fra.me.REG[2])-UNBOX_Float(fra.me.REG[3]));
+    /* ../lib/standard/string.nit:811 */
+    fra.me.REG[2] = fra.me.REG[3];
+  }
+  /* ../lib/standard/kernel.nit:219 */
+  REGB2 = TAG_Int((bigint)UNBOX_Float(fra.me.REG[2]));
+  /* ../lib/standard/string.nit:814 */
+  REGB1 = TAG_Int(0);
+  REGB3 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB1));
+  if (UNTAG_Bool(REGB3)) {
+  } else {
+    /* ../lib/standard/kernel.nit:230 */
+    REGB1 = TAG_Bool((REGB2)==(REGB1));
+    /* ../lib/standard/string.nit:814 */
+    REGB3 = REGB1;
+  }
+  if (UNTAG_Bool(REGB3)) {
+    if (!once_value_3) {
+      fra.me.REG[2] = BOX_NativeString("0.0");
+      REGB3 = TAG_Int(3);
+      fra.me.REG[2] = NEW_String_standard___string___String___with_native(fra.me.REG[2], REGB3);
+      once_value_3 = fra.me.REG[2];
+      register_static_object(&once_value_3);
+    } else fra.me.REG[2] = once_value_3;
+    fra.me.REG[2] = fra.me.REG[2];
+    fra.me.REG[1] = fra.me.REG[2];
+    goto label1;
+  }
+  /* ../lib/standard/string.nit:815 */
+  fra.me.REG[2] = CALL_standard___string___Object___to_s(REGB2)(REGB2);
+  /* ../lib/standard/collection/array.nit:24 */
+  REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+  }
+  REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
+  REGB3 = TAG_Bool(VAL_ISA(REGB0, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB3)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:237 */
+  REGB3 = TAG_Bool(UNTAG_Int(REGB2)>UNTAG_Int(REGB0));
+  /* ../lib/standard/string.nit:817 */
+  if (UNTAG_Bool(REGB3)) {
+    /* ../lib/standard/string.nit:818 */
+    REGB3 = TAG_Int(0);
+    /* ../lib/standard/collection/array.nit:24 */
+    REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+    }
+    REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
+    /* ../lib/standard/kernel.nit:240 */
+    REGB1 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB0));
+    /* ../lib/standard/string.nit:818 */
+    fra.me.REG[3] = CALL_standard___string___AbstractString___substring(fra.me.REG[2])(fra.me.REG[2], REGB3, REGB1);
+    /* ../lib/standard/collection/array.nit:24 */
+    REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
     }
+    REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
+    /* ../lib/standard/kernel.nit:240 */
+    REGB1 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB0));
+    /* ../lib/standard/string.nit:819 */
+    fra.me.REG[0] = CALL_standard___string___AbstractString___substring(fra.me.REG[2])(fra.me.REG[2], REGB1, REGB0);
+    /* ../lib/standard/string.nit:820 */
+    if (!once_value_4) {
+      fra.me.REG[4] = BOX_NativeString(".");
+      REGB1 = TAG_Int(1);
+      fra.me.REG[4] = NEW_String_standard___string___String___with_native(fra.me.REG[4], REGB1);
+      once_value_4 = fra.me.REG[4];
+      register_static_object(&once_value_4);
+    } else fra.me.REG[4] = once_value_4;
+    fra.me.REG[4] = fra.me.REG[4];
+    fra.me.REG[4] = CALL_standard___string___String_____plus(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+    fra.me.REG[0] = CALL_standard___string___String_____plus(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+    fra.me.REG[1] = fra.me.REG[0];
+    goto label1;
+  } else {
+    /* ../lib/standard/string.nit:822 */
+    if (!once_value_5) {
+      fra.me.REG[0] = BOX_NativeString("0.");
+      REGB1 = TAG_Int(2);
+      fra.me.REG[0] = NEW_String_standard___string___String___with_native(fra.me.REG[0], REGB1);
+      once_value_5 = fra.me.REG[0];
+      register_static_object(&once_value_5);
+    } else fra.me.REG[0] = once_value_5;
+    fra.me.REG[0] = fra.me.REG[0];
+    if (!once_value_6) {
+      fra.me.REG[4] = BOX_NativeString("0");
+      REGB1 = TAG_Int(1);
+      fra.me.REG[4] = NEW_String_standard___string___String___with_native(fra.me.REG[4], REGB1);
+      once_value_6 = fra.me.REG[4];
+      register_static_object(&once_value_6);
+    } else fra.me.REG[4] = once_value_6;
+    fra.me.REG[4] = fra.me.REG[4];
+    /* ../lib/standard/kernel.nit:240 */
+    REGB2 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB2));
+    /* ../lib/standard/string.nit:822 */
+    fra.me.REG[4] = CALL_standard___string___String_____star(fra.me.REG[4])(fra.me.REG[4], REGB2);
+    fra.me.REG[4] = CALL_standard___string___String_____plus(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4]);
+    fra.me.REG[2] = CALL_standard___string___String_____plus(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    fra.me.REG[1] = fra.me.REG[2];
+    goto label1;
   }
-  label2: while(0);
   label1: while(0);
   stack_frame_head = fra.me.prev;
-  return;
+  return fra.me.REG[1];
 }
-static const char LOCATE_standard___string___Int___to_s[] = "string::Int::(string::Object::to_s)";
-val_t standard___string___Int___to_s(val_t p0){
+static const char LOCATE_standard___string___Float___to_precision_native[] = "string::Float::to_precision_native";
+val_t standard___string___Float___to_precision_native(val_t p0, val_t p1){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
-  val_t REGB1;
-  val_t REGB2;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 474;
-  fra.me.meth = LOCATE_standard___string___Int___to_s;
+  fra.me.line = 826;
+  fra.me.meth = LOCATE_standard___string___Float___to_precision_native;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
-  REGB0 = p0;
-  /* ../lib/standard/string.nit:475 */
-  REGB1 = TAG_Int(10);
-  REGB2 = TAG_Bool(1);
-  fra.me.REG[0] = CALL_standard___string___Int___to_base(REGB0)(REGB0, REGB1, REGB2);
-  goto label1;
-  label1: while(0);
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* ../lib/standard/string.nit:826 */
+  fra.me.REG[0] = Float_to_precision_native___out(fra.me.REG[0], REGB0);
+  ;
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-static const char LOCATE_standard___string___Int___to_hex[] = "string::Int::to_hex";
-val_t standard___string___Int___to_hex(val_t p0){
+static const char LOCATE_standard___string___Char___to_s[] = "string::Char::(string::Object::to_s)";
+val_t standard___string___Char___to_s(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t REGB1;
-  val_t REGB2;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 477;
-  fra.me.meth = LOCATE_standard___string___Int___to_hex;
+  fra.me.line = 839;
+  fra.me.meth = LOCATE_standard___string___Char___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* ../lib/standard/string.nit:478 */
-  REGB1 = TAG_Int(16);
-  REGB2 = TAG_Bool(0);
-  fra.me.REG[0] = CALL_standard___string___Int___to_base(REGB0)(REGB0, REGB1, REGB2);
+  /* ../lib/standard/string.nit:841 */
+  REGB1 = TAG_Int(1);
+  fra.me.REG[0] = NEW_Buffer_standard___string___Buffer___with_capacity(REGB1);
+  /* ../lib/standard/string.nit:842 */
+  REGB1 = TAG_Int(0);
+  CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[0])(fra.me.REG[0], REGB1, REGB0);
+  /* ../lib/standard/string.nit:843 */
+  fra.me.REG[0] = CALL_standard___string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-static const char LOCATE_standard___string___Int___to_base[] = "string::Int::to_base";
-val_t standard___string___Int___to_base(val_t p0, val_t p1, val_t p2){
+static const char LOCATE_standard___string___Char___is_numeric[] = "string::Char::is_numeric";
+val_t standard___string___Char___is_numeric(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
-  val_t REGB3;
-  val_t REGB4;
   val_t tmp;
-  static val_t once_value_1; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 480;
-  fra.me.meth = LOCATE_standard___string___Int___to_base;
+  fra.me.line = 846;
+  fra.me.meth = LOCATE_standard___string___Char___is_numeric;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  REGB1 = p1;
-  REGB2 = p2;
-  /* ../lib/standard/string.nit:483 */
-  REGB3 = CALL_standard___kernel___Int___digit_count(REGB0)(REGB0, REGB1);
-  /* ../lib/standard/string.nit:484 */
-  if (!once_value_1) {
-    fra.me.REG[0] = BOX_NativeString(" ");
-    REGB4 = TAG_Int(1);
-    fra.me.REG[0] = NEW_String_standard___string___String___with_native(fra.me.REG[0], REGB4);
-    once_value_1 = fra.me.REG[0];
-    register_static_object(&once_value_1);
-  } else fra.me.REG[0] = once_value_1;
-  fra.me.REG[0] = fra.me.REG[0];
-  fra.me.REG[0] = CALL_standard___string___String_____star(fra.me.REG[0])(fra.me.REG[0], REGB3);
-  fra.me.REG[0] = NEW_Buffer_standard___string___Buffer___from(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:485 */
-  CALL_standard___string___Int___fill_buffer(REGB0)(REGB0, fra.me.REG[0], REGB1, REGB2);
-  /* ../lib/standard/string.nit:486 */
-  fra.me.REG[0] = CALL_standard___string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
-  goto label2;
-  label2: while(0);
-  stack_frame_head = fra.me.prev;
-  return fra.me.REG[0];
-}
-static const char LOCATE_standard___string___Float___to_s[] = "string::Float::(string::Object::to_s)";
-val_t standard___string___Float___to_s(val_t p0){
-  struct {struct stack_frame_t me;} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_standard___string;
-  fra.me.line = 491;
-  fra.me.meth = LOCATE_standard___string___Float___to_s;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:491 */
-  REGB0 = TAG_Int(6);
-  fra.me.REG[0] = CALL_standard___string___Float___to_precision(fra.me.REG[0])(fra.me.REG[0], REGB0);
+  /* ../lib/standard/string.nit:849 */
+  REGB1 = TAG_Char('0');
+  REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:387 */
+  REGB1 = TAG_Bool(UNTAG_Char(REGB0)>=UNTAG_Char(REGB1));
+  /* ../lib/standard/string.nit:849 */
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Char('9');
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:385 */
+    REGB1 = TAG_Bool(UNTAG_Char(REGB0)<=UNTAG_Char(REGB1));
+  } else {
+    /* ../lib/standard/string.nit:849 */
+    REGB0 = TAG_Bool(0);
+    REGB1 = REGB0;
+  }
+  if (UNTAG_Bool(REGB1)) {
+    /* ../lib/standard/string.nit:851 */
+    REGB1 = TAG_Bool(1);
+    goto label1;
+  }
+  /* ../lib/standard/string.nit:853 */
+  REGB0 = TAG_Bool(0);
+  REGB1 = REGB0;
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[0];
+  return REGB1;
 }
-static const char LOCATE_standard___string___Float___to_precision[] = "string::Float::to_precision";
-val_t standard___string___Float___to_precision(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+static const char LOCATE_standard___string___Char___is_alpha[] = "string::Char::is_alpha";
+val_t standard___string___Char___is_alpha(val_t p0){
+  struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
   val_t REGB3;
   val_t tmp;
-  static val_t once_value_3; /* Once value */
-  static val_t once_value_4; /* Once value */
-  static val_t once_value_5; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 493;
-  fra.me.meth = LOCATE_standard___string___Float___to_precision;
+  fra.me.line = 856;
+  fra.me.meth = LOCATE_standard___string___Char___is_alpha;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ../lib/standard/string.nit:496 */
-  REGB1 = TAG_Int(0);
-  REGB2 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB1));
+  REGB0 = p0;
+  /* ../lib/standard/string.nit:859 */
+  REGB1 = TAG_Char('a');
+  REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB2)) {
   } else {
-    /* ../lib/standard/kernel.nit:230 */
-    REGB1 = TAG_Bool((REGB0)==(REGB1));
-    /* ../lib/standard/string.nit:496 */
-    REGB2 = REGB1;
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
   }
-  if (UNTAG_Bool(REGB2)) {
-    /* ../lib/standard/kernel.nit:219 */
-    REGB2 = TAG_Int((bigint)UNBOX_Float(fra.me.REG[0]));
-    /* ../lib/standard/string.nit:496 */
-    fra.me.REG[1] = CALL_standard___string___Object___to_s(REGB2)(REGB2);
-    goto label1;
+  /* ../lib/standard/kernel.nit:387 */
+  REGB1 = TAG_Bool(UNTAG_Char(REGB0)>=UNTAG_Char(REGB1));
+  /* ../lib/standard/string.nit:859 */
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Char('z');
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:385 */
+    REGB1 = TAG_Bool(UNTAG_Char(REGB0)<=UNTAG_Char(REGB1));
+  } else {
+    /* ../lib/standard/string.nit:859 */
+    REGB2 = TAG_Bool(0);
+    REGB1 = REGB2;
   }
-  /* ../lib/standard/kernel.nit:219 */
-  REGB2 = TAG_Int((bigint)UNBOX_Float(fra.me.REG[0]));
-  /* ../lib/standard/string.nit:499 */
-  fra.me.REG[2] = BOX_Float(1.0);
-  /* ../lib/standard/string.nit:500 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB3 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(1);
+  } else {
+    REGB2 = TAG_Char('A');
+    REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
     if (UNTAG_Bool(REGB3)) {
     } else {
       nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
     }
-    /* ../lib/standard/kernel.nit:237 */
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB1));
-    /* ../lib/standard/string.nit:500 */
-    if (UNTAG_Bool(REGB1)) {
-      /* ../lib/standard/string.nit:501 */
-      fra.me.REG[3] = BOX_Float(10.0);
-      /* ../lib/standard/kernel.nit:216 */
-      fra.me.REG[3] = BOX_Float(UNBOX_Float(fra.me.REG[2])*UNBOX_Float(fra.me.REG[3]));
-      /* ../lib/standard/string.nit:501 */
-      fra.me.REG[2] = fra.me.REG[3];
-      /* ../lib/standard/string.nit:502 */
-      REGB1 = TAG_Int(1);
-      /* ../lib/standard/kernel.nit:240 */
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      /* ../lib/standard/string.nit:502 */
-      REGB0 = REGB1;
+    /* ../lib/standard/kernel.nit:387 */
+    REGB2 = TAG_Bool(UNTAG_Char(REGB0)>=UNTAG_Char(REGB2));
+    /* ../lib/standard/string.nit:859 */
+    if (UNTAG_Bool(REGB2)) {
+      REGB2 = TAG_Char('Z');
+      REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+      }
+      /* ../lib/standard/kernel.nit:385 */
+      REGB2 = TAG_Bool(UNTAG_Char(REGB0)<=UNTAG_Char(REGB2));
     } else {
-      /* ../lib/standard/string.nit:500 */
-      goto label2;
+      /* ../lib/standard/string.nit:859 */
+      REGB0 = TAG_Bool(0);
+      REGB2 = REGB0;
     }
+    REGB1 = REGB2;
   }
-  label2: while(0);
-  /* ../lib/standard/kernel.nit:247 */
-  fra.me.REG[3] = BOX_Float((float)UNTAG_Int(REGB2));
-  /* ../lib/standard/kernel.nit:215 */
-  fra.me.REG[3] = BOX_Float(UNBOX_Float(fra.me.REG[0])-UNBOX_Float(fra.me.REG[3]));
-  /* ../lib/standard/kernel.nit:216 */
-  fra.me.REG[2] = BOX_Float(UNBOX_Float(fra.me.REG[3])*UNBOX_Float(fra.me.REG[2]));
-  /* ../lib/standard/kernel.nit:219 */
-  REGB0 = TAG_Int((bigint)UNBOX_Float(fra.me.REG[2]));
-  /* ../lib/standard/string.nit:505 */
-  REGB1 = TAG_Int(5);
-  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
-  if (!once_value_3) {
-    fra.me.REG[3] = BOX_NativeString("");
-    REGB1 = TAG_Int(0);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB1);
-    once_value_3 = fra.me.REG[3];
-    register_static_object(&once_value_3);
-  } else fra.me.REG[3] = once_value_3;
-  fra.me.REG[3] = fra.me.REG[3];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  fra.me.REG[3] = CALL_standard___string___Object___to_s(REGB2)(REGB2);
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  if (!once_value_4) {
-    fra.me.REG[3] = BOX_NativeString(".");
-    REGB2 = TAG_Int(1);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB2);
-    once_value_4 = fra.me.REG[3];
-    register_static_object(&once_value_4);
-  } else fra.me.REG[3] = once_value_4;
-  fra.me.REG[3] = fra.me.REG[3];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  fra.me.REG[3] = CALL_standard___string___Object___to_s(REGB0)(REGB0);
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  if (!once_value_5) {
-    fra.me.REG[3] = BOX_NativeString("");
-    REGB0 = TAG_Int(0);
-    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_5 = fra.me.REG[3];
-    register_static_object(&once_value_5);
-  } else fra.me.REG[3] = once_value_5;
-  fra.me.REG[3] = fra.me.REG[3];
-  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  fra.me.REG[2] = CALL_standard___string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
-  fra.me.REG[1] = fra.me.REG[2];
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(1);
+    goto label1;
+  }
+  /* ../lib/standard/string.nit:860 */
+  REGB2 = TAG_Bool(0);
+  REGB1 = REGB2;
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[1];
+  return REGB1;
 }
-static const char LOCATE_standard___string___Char___to_s[] = "string::Char::(string::Object::to_s)";
-val_t standard___string___Char___to_s(val_t p0){
+static const char LOCATE_standard___string___Char___is_alphanumeric[] = "string::Char::is_alphanumeric";
+val_t standard___string___Char___is_alphanumeric(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 510;
-  fra.me.meth = LOCATE_standard___string___Char___to_s;
+  fra.me.line = 863;
+  fra.me.meth = LOCATE_standard___string___Char___is_alphanumeric;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  fra.me.REG[0] = NIT_NULL;
   REGB0 = p0;
-  /* ../lib/standard/string.nit:512 */
-  REGB1 = TAG_Int(1);
-  fra.me.REG[0] = NEW_Buffer_standard___string___Buffer___with_capacity(REGB1);
-  /* ../lib/standard/string.nit:513 */
-  REGB1 = TAG_Int(0);
-  CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[0])(fra.me.REG[0], REGB1, REGB0);
-  /* ../lib/standard/string.nit:514 */
-  fra.me.REG[0] = CALL_standard___string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
+  /* ../lib/standard/string.nit:866 */
+  REGB1 = CALL_standard___string___Char___is_numeric(REGB0)(REGB0);
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(1);
+  } else {
+    REGB0 = CALL_standard___string___Char___is_alpha(REGB0)(REGB0);
+    REGB1 = REGB0;
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(1);
+    goto label1;
+  }
+  /* ../lib/standard/string.nit:867 */
+  REGB0 = TAG_Bool(0);
+  REGB1 = REGB0;
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[0];
+  return REGB1;
 }
 static const char LOCATE_standard___string___Collection___to_s[] = "string::Collection::(string::Object::to_s)";
 val_t standard___string___Collection___to_s(val_t p0){
@@ -2937,7 +4931,7 @@ val_t standard___string___Collection___to_s(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 519;
+  fra.me.line = 872;
   fra.me.meth = LOCATE_standard___string___Collection___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2945,10 +4939,10 @@ val_t standard___string___Collection___to_s(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:522 */
+  /* ../lib/standard/string.nit:875 */
   fra.me.REG[1] = NEW_Buffer_standard___string___Buffer___init();
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_standard___string___Collection___to_s_1));
-  /* ../lib/standard/string.nit:524 */
+  /* ../lib/standard/string.nit:877 */
   fra.me.REG[1] = CALL_standard___string___Object___to_s(fra.me.REG[1])(fra.me.REG[1]);
   goto label2;
   label2: while(0);
@@ -2961,7 +4955,7 @@ val_t standard___string___Collection___to_s(val_t p0){
     val_t REGB1;
     fun_t CREG[1];
     val_t tmp;
-    /* ../lib/standard/string.nit:523 */
+    /* ../lib/standard/string.nit:876 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_standard___string;
     fra.me.line = 0;
@@ -2990,7 +4984,7 @@ val_t standard___string___Collection___to_s(val_t p0){
     if (UNTAG_Bool(REGB0)) {
       REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_standard___string, 523);
+        nit_abort("Reciever is null", NULL, LOCATE_standard___string, 876);
       }
       fra.me.REG[0] = CALL_standard___string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
       CALL_standard___collection___abstract_collection___Sequence___append(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
@@ -3007,7 +5001,7 @@ val_t standard___string___Collection___join(val_t p0, val_t p1){
     static val_t once_value_1; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 527;
+  fra.me.line = 880;
   fra.me.meth = LOCATE_standard___string___Collection___join;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -3020,7 +5014,7 @@ val_t standard___string___Collection___join(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ../lib/standard/string.nit:530 */
+  /* ../lib/standard/string.nit:883 */
   REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[0])(fra.me.REG[0]);
   if (UNTAG_Bool(REGB0)) {
     if (!once_value_1) {
@@ -3033,13 +5027,13 @@ val_t standard___string___Collection___join(val_t p0, val_t p1){
     fra.me.REG[2] = fra.me.REG[2];
     goto label2;
   }
-  /* ../lib/standard/string.nit:532 */
+  /* ../lib/standard/string.nit:885 */
   fra.me.REG[3] = NEW_Buffer_standard___string___Buffer___init();
-  /* ../lib/standard/string.nit:535 */
+  /* ../lib/standard/string.nit:888 */
   fra.me.REG[0] = CALL_standard___collection___abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:536 */
+  /* ../lib/standard/string.nit:889 */
   fra.me.REG[4] = CALL_standard___collection___abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:537 */
+  /* ../lib/standard/string.nit:890 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -3056,23 +5050,23 @@ val_t standard___string___Collection___join(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_standard___string, 537);
+      nit_abort("Reciever is null", NULL, LOCATE_standard___string, 890);
     }
     fra.me.REG[5] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
     CALL_standard___collection___abstract_collection___Sequence___append(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
   }
-  /* ../lib/standard/string.nit:540 */
+  /* ../lib/standard/string.nit:893 */
   CALL_standard___collection___abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:541 */
+  /* ../lib/standard/string.nit:894 */
   while(1) {
     REGB0 = CALL_standard___collection___abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
     if (UNTAG_Bool(REGB0)) {
-      /* ../lib/standard/string.nit:542 */
+      /* ../lib/standard/string.nit:895 */
       CALL_standard___collection___abstract_collection___Sequence___append(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-      /* ../lib/standard/string.nit:543 */
+      /* ../lib/standard/string.nit:896 */
       fra.me.REG[5] = CALL_standard___collection___abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
       fra.me.REG[4] = fra.me.REG[5];
-      /* ../lib/standard/string.nit:544 */
+      /* ../lib/standard/string.nit:897 */
       REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
@@ -3089,20 +5083,20 @@ val_t standard___string___Collection___join(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB0)) {
         REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
         if (UNTAG_Bool(REGB0)) {
-          nit_abort("Reciever is null", NULL, LOCATE_standard___string, 544);
+          nit_abort("Reciever is null", NULL, LOCATE_standard___string, 897);
         }
         fra.me.REG[5] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
         CALL_standard___collection___abstract_collection___Sequence___append(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
       }
-      /* ../lib/standard/string.nit:545 */
+      /* ../lib/standard/string.nit:898 */
       CALL_standard___collection___abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
     } else {
-      /* ../lib/standard/string.nit:541 */
+      /* ../lib/standard/string.nit:894 */
       goto label3;
     }
   }
   label3: while(0);
-  /* ../lib/standard/string.nit:547 */
+  /* ../lib/standard/string.nit:900 */
   fra.me.REG[3] = CALL_standard___string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[2] = fra.me.REG[3];
   goto label2;
@@ -3121,7 +5115,7 @@ val_t standard___string___Array___to_s(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 552;
+  fra.me.line = 905;
   fra.me.meth = LOCATE_standard___string___Array___to_s;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -3130,9 +5124,9 @@ val_t standard___string___Array___to_s(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:555 */
+  /* ../lib/standard/string.nit:908 */
   fra.me.REG[1] = NEW_Buffer_standard___string___Buffer___init();
-  /* ../lib/standard/string.nit:556 */
+  /* ../lib/standard/string.nit:909 */
   REGB0 = TAG_Int(0);
   /* ../lib/standard/collection/array.nit:24 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
@@ -3141,7 +5135,7 @@ val_t standard___string___Array___to_s(val_t p0){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:558 */
+  /* ../lib/standard/string.nit:911 */
   while(1) {
     REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
     if (UNTAG_Bool(REGB2)) {
@@ -3150,7 +5144,7 @@ val_t standard___string___Array___to_s(val_t p0){
     }
     /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-    /* ../lib/standard/string.nit:558 */
+    /* ../lib/standard/string.nit:911 */
     if (UNTAG_Bool(REGB2)) {
       /* ../lib/standard/collection/array.nit:278 */
       fra.me.REG[2] = fra.me.REG[0];
@@ -3194,12 +5188,12 @@ val_t standard___string___Array___to_s(val_t p0){
       if (UNTAG_Bool(REGB3)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB2)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label1;
       label1: while(0);
-      /* ../lib/standard/string.nit:560 */
+      /* ../lib/standard/string.nit:913 */
       REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB2)) {
       } else {
@@ -3216,24 +5210,24 @@ val_t standard___string___Array___to_s(val_t p0){
       if (UNTAG_Bool(REGB2)) {
         REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
-          nit_abort("Reciever is null", NULL, LOCATE_standard___string, 560);
+          nit_abort("Reciever is null", NULL, LOCATE_standard___string, 913);
         }
         fra.me.REG[2] = CALL_standard___string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
         CALL_standard___collection___abstract_collection___Sequence___append(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
       }
-      /* ../lib/standard/string.nit:561 */
+      /* ../lib/standard/string.nit:914 */
       REGB2 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-      /* ../lib/standard/string.nit:561 */
+      /* ../lib/standard/string.nit:914 */
       REGB0 = REGB2;
     } else {
-      /* ../lib/standard/string.nit:558 */
+      /* ../lib/standard/string.nit:911 */
       goto label2;
     }
   }
   label2: while(0);
-  /* ../lib/standard/string.nit:563 */
+  /* ../lib/standard/string.nit:916 */
   fra.me.REG[1] = CALL_standard___string___Object___to_s(fra.me.REG[1])(fra.me.REG[1]);
   goto label3;
   label3: while(0);
@@ -3257,7 +5251,7 @@ val_t standard___string___Map___join(val_t p0, val_t p1, val_t p2){
         static val_t once_value_10; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 568;
+  fra.me.line = 921;
   fra.me.meth = LOCATE_standard___string___Map___join;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -3274,7 +5268,7 @@ val_t standard___string___Map___join(val_t p0, val_t p1, val_t p2){
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ../lib/standard/string.nit:573 */
+  /* ../lib/standard/string.nit:926 */
   REGB0 = CALL_standard___collection___abstract_collection___MapRead___is_empty(fra.me.REG[0])(fra.me.REG[0]);
   if (UNTAG_Bool(REGB0)) {
     if (!once_value_1) {
@@ -3287,15 +5281,15 @@ val_t standard___string___Map___join(val_t p0, val_t p1, val_t p2){
     fra.me.REG[3] = fra.me.REG[3];
     goto label2;
   }
-  /* ../lib/standard/string.nit:575 */
+  /* ../lib/standard/string.nit:928 */
   fra.me.REG[4] = NEW_Buffer_standard___string___Buffer___init();
-  /* ../lib/standard/string.nit:578 */
+  /* ../lib/standard/string.nit:931 */
   fra.me.REG[0] = CALL_standard___collection___abstract_collection___MapRead___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:579 */
+  /* ../lib/standard/string.nit:932 */
   fra.me.REG[5] = CALL_standard___collection___abstract_collection___MapIterator___key(fra.me.REG[0])(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:580 */
+  /* ../lib/standard/string.nit:933 */
   fra.me.REG[6] = CALL_standard___collection___abstract_collection___MapIterator___item(fra.me.REG[0])(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:581 */
+  /* ../lib/standard/string.nit:934 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -3356,21 +5350,21 @@ val_t standard___string___Map___join(val_t p0, val_t p1, val_t p2){
     fra.me.REG[7] = CALL_standard___string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
     CALL_standard___collection___abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
   }
-  /* ../lib/standard/string.nit:584 */
+  /* ../lib/standard/string.nit:937 */
   CALL_standard___collection___abstract_collection___MapIterator___next(fra.me.REG[0])(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:585 */
+  /* ../lib/standard/string.nit:938 */
   while(1) {
     REGB0 = CALL_standard___collection___abstract_collection___MapIterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
     if (UNTAG_Bool(REGB0)) {
-      /* ../lib/standard/string.nit:586 */
+      /* ../lib/standard/string.nit:939 */
       CALL_standard___collection___abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-      /* ../lib/standard/string.nit:587 */
+      /* ../lib/standard/string.nit:940 */
       fra.me.REG[7] = CALL_standard___collection___abstract_collection___MapIterator___key(fra.me.REG[0])(fra.me.REG[0]);
       fra.me.REG[5] = fra.me.REG[7];
-      /* ../lib/standard/string.nit:588 */
+      /* ../lib/standard/string.nit:941 */
       fra.me.REG[7] = CALL_standard___collection___abstract_collection___MapIterator___item(fra.me.REG[0])(fra.me.REG[0]);
       fra.me.REG[6] = fra.me.REG[7];
-      /* ../lib/standard/string.nit:589 */
+      /* ../lib/standard/string.nit:942 */
       REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
@@ -3431,15 +5425,15 @@ val_t standard___string___Map___join(val_t p0, val_t p1, val_t p2){
         fra.me.REG[7] = CALL_standard___string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
         CALL_standard___collection___abstract_collection___Sequence___append(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
       }
-      /* ../lib/standard/string.nit:590 */
+      /* ../lib/standard/string.nit:943 */
       CALL_standard___collection___abstract_collection___MapIterator___next(fra.me.REG[0])(fra.me.REG[0]);
     } else {
-      /* ../lib/standard/string.nit:585 */
+      /* ../lib/standard/string.nit:938 */
       goto label11;
     }
   }
   label11: while(0);
-  /* ../lib/standard/string.nit:592 */
+  /* ../lib/standard/string.nit:945 */
   fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
   fra.me.REG[3] = fra.me.REG[4];
   goto label2;
@@ -3454,7 +5448,7 @@ val_t standard___string___NativeString_____bra(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 602;
+  fra.me.line = 955;
   fra.me.meth = LOCATE_standard___string___NativeString_____bra;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -3462,7 +5456,7 @@ val_t standard___string___NativeString_____bra(val_t p0, val_t p1){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/string.nit:602 */
+  /* ../lib/standard/string.nit:955 */
   REGB0 = TAG_Char(UNBOX_NativeString(fra.me.REG[0])[UNTAG_Int(REGB0)]);
   stack_frame_head = fra.me.prev;
   return REGB0;
@@ -3475,7 +5469,7 @@ void standard___string___NativeString_____braeq(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_standard___string;
-  fra.me.line = 603;
+  fra.me.line = 956;
   fra.me.meth = LOCATE_standard___string___NativeString_____braeq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -3484,7 +5478,7 @@ void standard___string___NativeString_____braeq(val_t p0, val_t p1, val_t p2){
   fra.me.REG[0] = p0;
   REGB0 = p1;
   REGB1 = p2;
-  /* ../lib/standard/string.nit:603 */
+  /* ../lib/standard/string.nit:956 */
   UNBOX_NativeString(fra.me.REG[0])[UNTAG_Int(REGB0)]=UNTAG_Char(REGB1);;
   stack_frame_head = fra.me.prev;
   return;
@@ -3498,7 +5492,7 @@ void standard___string___NativeString___copy_to(val_t p0, val_t p1, val_t p2, va
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 604;
+  fra.me.line = 957;
   fra.me.meth = LOCATE_standard___string___NativeString___copy_to;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3510,7 +5504,7 @@ void standard___string___NativeString___copy_to(val_t p0, val_t p1, val_t p2, va
   REGB0 = p2;
   REGB1 = p3;
   REGB2 = p4;
-  /* ../lib/standard/string.nit:604 */
+  /* ../lib/standard/string.nit:957 */
   (void)memcpy(UNBOX_NativeString(fra.me.REG[1])+UNTAG_Int(REGB2), UNBOX_NativeString(fra.me.REG[0])+UNTAG_Int(REGB1), UNTAG_Int(REGB0));;
   stack_frame_head = fra.me.prev;
   return;
@@ -3525,27 +5519,27 @@ val_t standard___string___NativeString___cstring_length(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 606;
+  fra.me.line = 959;
   fra.me.meth = LOCATE_standard___string___NativeString___cstring_length;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:609 */
+  /* ../lib/standard/string.nit:962 */
   REGB0 = TAG_Int(0);
-  /* ../lib/standard/string.nit:610 */
+  /* ../lib/standard/string.nit:963 */
   while(1) {
-    /* ../lib/standard/string.nit:602 */
+    /* ../lib/standard/string.nit:955 */
     REGB1 = TAG_Char(UNBOX_NativeString(fra.me.REG[0])[UNTAG_Int(REGB0)]);
-    /* ../lib/standard/string.nit:610 */
+    /* ../lib/standard/string.nit:963 */
     REGB2 = TAG_Char('\0');
     REGB3 = TAG_Bool(IS_EQUAL_OO(REGB1,REGB2));
     if (UNTAG_Bool(REGB3)) {
     } else {
       /* ../lib/standard/kernel.nit:381 */
       REGB2 = TAG_Bool((REGB1)==(REGB2));
-      /* ../lib/standard/string.nit:610 */
+      /* ../lib/standard/string.nit:963 */
       REGB3 = REGB2;
     }
     REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
@@ -3553,14 +5547,14 @@ val_t standard___string___NativeString___cstring_length(val_t p0){
       REGB3 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:238 */
       REGB3 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB3));
-      /* ../lib/standard/string.nit:610 */
+      /* ../lib/standard/string.nit:963 */
       REGB0 = REGB3;
     } else {
       goto label1;
     }
   }
   label1: while(0);
-  /* ../lib/standard/string.nit:611 */
+  /* ../lib/standard/string.nit:964 */
   goto label2;
   label2: while(0);
   stack_frame_head = fra.me.prev;
@@ -3573,14 +5567,14 @@ val_t standard___string___NativeString___atoi(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 613;
+  fra.me.line = 966;
   fra.me.meth = LOCATE_standard___string___NativeString___atoi;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:613 */
+  /* ../lib/standard/string.nit:966 */
   REGB0 = TAG_Int(atoi(UNBOX_NativeString(fra.me.REG[0])));
   stack_frame_head = fra.me.prev;
   return REGB0;
@@ -3591,24 +5585,24 @@ val_t standard___string___NativeString___atof(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 614;
+  fra.me.line = 967;
   fra.me.meth = LOCATE_standard___string___NativeString___atof;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:614 */
+  /* ../lib/standard/string.nit:967 */
   fra.me.REG[0] = NativeString_atof___out(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
 static const char LOCATE_standard___string___NativeString___init[] = "string::NativeString::init";
 void standard___string___NativeString___init(val_t p0, int* init_table){
-  int itpos5 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___string___NativeString].i;
+  int itpos7 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_standard___string___NativeString].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos5]) return;
+  if (init_table[itpos7]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
   fra.me.line = 0;
@@ -3617,7 +5611,7 @@ void standard___string___NativeString___init(val_t p0, int* init_table){
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
   stack_frame_head = fra.me.prev;
-  init_table[itpos5] = 1;
+  init_table[itpos7] = 1;
   return;
 }
 static const char LOCATE_standard___string___StringCapable___calloc_string[] = "string::StringCapable::calloc_string";
@@ -3627,7 +5621,7 @@ val_t standard___string___StringCapable___calloc_string(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 619;
+  fra.me.line = 972;
   fra.me.meth = LOCATE_standard___string___StringCapable___calloc_string;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -3635,7 +5629,7 @@ val_t standard___string___StringCapable___calloc_string(val_t p0, val_t p1){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/string.nit:619 */
+  /* ../lib/standard/string.nit:972 */
   fra.me.REG[0] = BOX_NativeString((char*)raw_alloc((UNTAG_Int(REGB0) * sizeof(char))));
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3648,7 +5642,7 @@ val_t standard___string___Sys___args(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 625;
+  fra.me.line = 978;
   fra.me.meth = LOCATE_standard___string___Sys___args;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -3657,9 +5651,9 @@ val_t standard___string___Sys___args(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:625 */
+  /* ../lib/standard/string.nit:978 */
   fra.me.REG[1] = fra.me.REG[0];
-  /* ../lib/standard/string.nit:627 */
+  /* ../lib/standard/string.nit:980 */
   fra.me.REG[2] = ATTR_standard___string___Sys____args_cache(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -3676,12 +5670,12 @@ val_t standard___string___Sys___args(val_t p0){
   if (UNTAG_Bool(REGB0)) {
     CALL_standard___string___Sys___init_args(fra.me.REG[1])(fra.me.REG[1]);
   }
-  /* ../lib/standard/string.nit:628 */
+  /* ../lib/standard/string.nit:981 */
   fra.me.REG[1] = ATTR_standard___string___Sys____args_cache(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_standard___string, 628);
+    nit_abort("Cast failed", NULL, LOCATE_standard___string, 981);
   }
   goto label1;
   label1: while(0);
@@ -3695,14 +5689,14 @@ val_t standard___string___Sys___program_name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 631;
+  fra.me.line = 984;
   fra.me.meth = LOCATE_standard___string___Sys___program_name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:634 */
+  /* ../lib/standard/string.nit:987 */
   REGB0 = TAG_Int(0);
   fra.me.REG[0] = CALL_standard___string___Sys___native_argv(fra.me.REG[0])(fra.me.REG[0], REGB0);
   fra.me.REG[0] = NEW_String_standard___string___String___from_cstring(fra.me.REG[0]);
@@ -3720,7 +5714,7 @@ void standard___string___Sys___init_args(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 637;
+  fra.me.line = 990;
   fra.me.meth = LOCATE_standard___string___Sys___init_args;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -3729,14 +5723,14 @@ void standard___string___Sys___init_args(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:640 */
+  /* ../lib/standard/string.nit:993 */
   REGB0 = CALL_standard___string___Sys___native_argc(fra.me.REG[0])(fra.me.REG[0]);
-  /* ../lib/standard/string.nit:641 */
+  /* ../lib/standard/string.nit:994 */
   REGB1 = TAG_Int(0);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
-  /* ../lib/standard/string.nit:642 */
+  /* ../lib/standard/string.nit:995 */
   REGB1 = TAG_Int(1);
-  /* ../lib/standard/string.nit:643 */
+  /* ../lib/standard/string.nit:996 */
   while(1) {
     REGB2 = TAG_Bool(VAL_ISA(REGB0, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
     if (UNTAG_Bool(REGB2)) {
@@ -3745,29 +5739,29 @@ void standard___string___Sys___init_args(val_t p0){
     }
     /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB0));
-    /* ../lib/standard/string.nit:643 */
+    /* ../lib/standard/string.nit:996 */
     if (UNTAG_Bool(REGB2)) {
-      /* ../lib/standard/string.nit:644 */
+      /* ../lib/standard/string.nit:997 */
       REGB2 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:240 */
       REGB2 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB2));
-      /* ../lib/standard/string.nit:644 */
+      /* ../lib/standard/string.nit:997 */
       fra.me.REG[2] = CALL_standard___string___Sys___native_argv(fra.me.REG[0])(fra.me.REG[0], REGB1);
       fra.me.REG[2] = NEW_String_standard___string___String___from_cstring(fra.me.REG[2]);
       CALL_standard___collection___abstract_collection___Sequence_____braeq(fra.me.REG[1])(fra.me.REG[1], REGB2, fra.me.REG[2]);
-      /* ../lib/standard/string.nit:645 */
+      /* ../lib/standard/string.nit:998 */
       REGB2 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB2));
-      /* ../lib/standard/string.nit:645 */
+      /* ../lib/standard/string.nit:998 */
       REGB1 = REGB2;
     } else {
-      /* ../lib/standard/string.nit:643 */
+      /* ../lib/standard/string.nit:996 */
       goto label1;
     }
   }
   label1: while(0);
-  /* ../lib/standard/string.nit:647 */
+  /* ../lib/standard/string.nit:1000 */
   ATTR_standard___string___Sys____args_cache(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -3779,14 +5773,14 @@ val_t standard___string___Sys___native_argc(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 650;
+  fra.me.line = 1003;
   fra.me.meth = LOCATE_standard___string___Sys___native_argc;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string.nit:650 */
+  /* ../lib/standard/string.nit:1003 */
   REGB0 = Sys_native_argc___out(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return REGB0;
@@ -3798,7 +5792,7 @@ val_t standard___string___Sys___native_argv(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string;
-  fra.me.line = 652;
+  fra.me.line = 1005;
   fra.me.meth = LOCATE_standard___string___Sys___native_argv;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
@@ -3806,7 +5800,7 @@ val_t standard___string___Sys___native_argv(val_t p0, val_t p1){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ../lib/standard/string.nit:652 */
+  /* ../lib/standard/string.nit:1005 */
   fra.me.REG[0] = Sys_native_argv___out(fra.me.REG[0], REGB0);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
index d23da9c..0b917e7 100644 (file)
@@ -4,6 +4,7 @@
 #include "standard___collection._sep.h"
 #include <nit_common.h>
 #include "string._nitni.h"
+#include "standard___string._ffi.h"
 
 extern const classtable_elt_t VFT_standard___string___AbstractString[];
 
@@ -33,56 +34,68 @@ extern const int SFT_standard___string[];
 #define CALL_standard___string___AbstractString___to_f(recv) ((standard___string___AbstractString___to_f_t)CALL((recv), (SFT_standard___string[3] + 8)))
 #define CALL_standard___string___AbstractString___to_hex(recv) ((standard___string___AbstractString___to_hex_t)CALL((recv), (SFT_standard___string[3] + 9)))
 #define CALL_standard___string___AbstractString___a_to(recv) ((standard___string___AbstractString___a_to_t)CALL((recv), (SFT_standard___string[3] + 10)))
-#define CALL_standard___string___AbstractString___to_upper(recv) ((standard___string___AbstractString___to_upper_t)CALL((recv), (SFT_standard___string[3] + 11)))
-#define CALL_standard___string___AbstractString___to_lower(recv) ((standard___string___AbstractString___to_lower_t)CALL((recv), (SFT_standard___string[3] + 12)))
+#define CALL_standard___string___AbstractString___is_numeric(recv) ((standard___string___AbstractString___is_numeric_t)CALL((recv), (SFT_standard___string[3] + 11)))
+#define CALL_standard___string___AbstractString___to_upper(recv) ((standard___string___AbstractString___to_upper_t)CALL((recv), (SFT_standard___string[3] + 12)))
+#define CALL_standard___string___AbstractString___to_lower(recv) ((standard___string___AbstractString___to_lower_t)CALL((recv), (SFT_standard___string[3] + 13)))
+#define CALL_standard___string___AbstractString___trim(recv) ((standard___string___AbstractString___trim_t)CALL((recv), (SFT_standard___string[3] + 14)))
 #define ID_standard___string___String (SFT_standard___string[4])
 #define COLOR_standard___string___String (SFT_standard___string[5])
-#define INIT_TABLE_POS_standard___string___String (SFT_standard___string[6] + 0)
-#define CALL_standard___string___String___with_native(recv) ((standard___string___String___with_native_t)CALL((recv), (SFT_standard___string[6] + 1)))
-#define CALL_standard___string___String___from_cstring(recv) ((standard___string___String___from_cstring_t)CALL((recv), (SFT_standard___string[6] + 2)))
-#define CALL_standard___string___String___to_cstring(recv) ((standard___string___String___to_cstring_t)CALL((recv), (SFT_standard___string[6] + 3)))
-#define CALL_standard___string___String_____plus(recv) ((standard___string___String_____plus_t)CALL((recv), (SFT_standard___string[6] + 4)))
-#define CALL_standard___string___String_____star(recv) ((standard___string___String_____star_t)CALL((recv), (SFT_standard___string[6] + 5)))
-#define ID_standard___string___Buffer (SFT_standard___string[7])
-#define COLOR_standard___string___Buffer (SFT_standard___string[8])
-#define ATTR_standard___string___Buffer____capacity(recv) ATTR(recv, (SFT_standard___string[9] + 0))
-#define INIT_TABLE_POS_standard___string___Buffer (SFT_standard___string[10] + 0)
-#define CALL_SUPER_standard___string___Buffer___append(recv) ((standard___string___Buffer___append_t)CALL((recv), (SFT_standard___string[10] + 1)))
-#define CALL_standard___string___Buffer___init(recv) ((standard___string___Buffer___init_t)CALL((recv), (SFT_standard___string[10] + 2)))
-#define CALL_standard___string___Buffer___from(recv) ((standard___string___Buffer___from_t)CALL((recv), (SFT_standard___string[10] + 3)))
-#define CALL_standard___string___Buffer___with_capacity(recv) ((standard___string___Buffer___with_capacity_t)CALL((recv), (SFT_standard___string[10] + 4)))
-#define CALL_standard___string___Buffer___capacity(recv) ((standard___string___Buffer___capacity_t)CALL((recv), (SFT_standard___string[10] + 5)))
-#define CALL_standard___string___Object___to_s(recv) ((standard___string___Object___to_s_t)CALL((recv), (SFT_standard___string[11] + 0)))
-#define CALL_standard___string___Object___native_class_name(recv) ((standard___string___Object___native_class_name_t)CALL((recv), (SFT_standard___string[11] + 1)))
-#define CALL_standard___string___Object___class_name(recv) ((standard___string___Object___class_name_t)CALL((recv), (SFT_standard___string[11] + 2)))
-#define CALL_standard___string___Object___inspect(recv) ((standard___string___Object___inspect_t)CALL((recv), (SFT_standard___string[11] + 3)))
-#define CALL_standard___string___Object___inspect_head(recv) ((standard___string___Object___inspect_head_t)CALL((recv), (SFT_standard___string[11] + 4)))
-#define CALL_standard___string___Object___args(recv) ((standard___string___Object___args_t)CALL((recv), (SFT_standard___string[11] + 5)))
-#define CALL_standard___string___Int___fill_buffer(recv) ((standard___string___Int___fill_buffer_t)CALL((recv), (SFT_standard___string[12] + 0)))
-#define CALL_standard___string___Int___to_hex(recv) ((standard___string___Int___to_hex_t)CALL((recv), (SFT_standard___string[12] + 1)))
-#define CALL_standard___string___Int___to_base(recv) ((standard___string___Int___to_base_t)CALL((recv), (SFT_standard___string[12] + 2)))
-#define CALL_standard___string___Float___to_precision(recv) ((standard___string___Float___to_precision_t)CALL((recv), (SFT_standard___string[13] + 0)))
-#define CALL_standard___string___Collection___join(recv) ((standard___string___Collection___join_t)CALL((recv), (SFT_standard___string[14] + 0)))
-#define CALL_standard___string___Map___join(recv) ((standard___string___Map___join_t)CALL((recv), (SFT_standard___string[15] + 0)))
-#define ID_standard___string___NativeString (SFT_standard___string[16])
-#define COLOR_standard___string___NativeString (SFT_standard___string[17])
-#define INIT_TABLE_POS_standard___string___NativeString (SFT_standard___string[18] + 0)
-#define CALL_standard___string___NativeString_____bra(recv) ((standard___string___NativeString_____bra_t)CALL((recv), (SFT_standard___string[18] + 1)))
-#define CALL_standard___string___NativeString_____braeq(recv) ((standard___string___NativeString_____braeq_t)CALL((recv), (SFT_standard___string[18] + 2)))
-#define CALL_standard___string___NativeString___copy_to(recv) ((standard___string___NativeString___copy_to_t)CALL((recv), (SFT_standard___string[18] + 3)))
-#define CALL_standard___string___NativeString___cstring_length(recv) ((standard___string___NativeString___cstring_length_t)CALL((recv), (SFT_standard___string[18] + 4)))
-#define CALL_standard___string___NativeString___atoi(recv) ((standard___string___NativeString___atoi_t)CALL((recv), (SFT_standard___string[18] + 5)))
-#define CALL_standard___string___NativeString___atof(recv) ((standard___string___NativeString___atof_t)CALL((recv), (SFT_standard___string[18] + 6)))
-#define CALL_standard___string___NativeString___init(recv) ((standard___string___NativeString___init_t)CALL((recv), (SFT_standard___string[18] + 7)))
-#define ID_standard___string___StringCapable (SFT_standard___string[19])
-#define COLOR_standard___string___StringCapable (SFT_standard___string[20])
-#define INIT_TABLE_POS_standard___string___StringCapable (SFT_standard___string[21] + 0)
-#define CALL_standard___string___StringCapable___calloc_string(recv) ((standard___string___StringCapable___calloc_string_t)CALL((recv), (SFT_standard___string[21] + 1)))
-#define ATTR_standard___string___Sys____args_cache(recv) ATTR(recv, (SFT_standard___string[22] + 0))
-#define CALL_standard___string___Sys___program_name(recv) ((standard___string___Sys___program_name_t)CALL((recv), (SFT_standard___string[23] + 0)))
-#define CALL_standard___string___Sys___init_args(recv) ((standard___string___Sys___init_args_t)CALL((recv), (SFT_standard___string[23] + 1)))
-#define CALL_standard___string___Sys___native_argc(recv) ((standard___string___Sys___native_argc_t)CALL((recv), (SFT_standard___string[23] + 2)))
-#define CALL_standard___string___Sys___native_argv(recv) ((standard___string___Sys___native_argv_t)CALL((recv), (SFT_standard___string[23] + 3)))
+#define ATTR_standard___string___String____index_from(recv) ATTR(recv, (SFT_standard___string[6] + 0))
+#define ATTR_standard___string___String____index_to(recv) ATTR(recv, (SFT_standard___string[6] + 1))
+#define INIT_TABLE_POS_standard___string___String (SFT_standard___string[7] + 0)
+#define CALL_standard___string___String___index_from(recv) ((standard___string___String___index_from_t)CALL((recv), (SFT_standard___string[7] + 1)))
+#define CALL_standard___string___String___index_to(recv) ((standard___string___String___index_to_t)CALL((recv), (SFT_standard___string[7] + 2)))
+#define CALL_standard___string___String___from_substring(recv) ((standard___string___String___from_substring_t)CALL((recv), (SFT_standard___string[7] + 3)))
+#define CALL_standard___string___String___with_native(recv) ((standard___string___String___with_native_t)CALL((recv), (SFT_standard___string[7] + 4)))
+#define CALL_standard___string___String___from_cstring(recv) ((standard___string___String___from_cstring_t)CALL((recv), (SFT_standard___string[7] + 5)))
+#define CALL_standard___string___String___copy_from_native(recv) ((standard___string___String___copy_from_native_t)CALL((recv), (SFT_standard___string[7] + 6)))
+#define CALL_standard___string___String___to_cstring(recv) ((standard___string___String___to_cstring_t)CALL((recv), (SFT_standard___string[7] + 7)))
+#define CALL_standard___string___String_____plus(recv) ((standard___string___String_____plus_t)CALL((recv), (SFT_standard___string[7] + 8)))
+#define CALL_standard___string___String_____star(recv) ((standard___string___String_____star_t)CALL((recv), (SFT_standard___string[7] + 9)))
+#define ID_standard___string___Buffer (SFT_standard___string[8])
+#define COLOR_standard___string___Buffer (SFT_standard___string[9])
+#define ATTR_standard___string___Buffer____capacity(recv) ATTR(recv, (SFT_standard___string[10] + 0))
+#define INIT_TABLE_POS_standard___string___Buffer (SFT_standard___string[11] + 0)
+#define CALL_SUPER_standard___string___Buffer___append(recv) ((standard___string___Buffer___append_t)CALL((recv), (SFT_standard___string[11] + 1)))
+#define CALL_standard___string___Buffer___init(recv) ((standard___string___Buffer___init_t)CALL((recv), (SFT_standard___string[11] + 2)))
+#define CALL_standard___string___Buffer___from(recv) ((standard___string___Buffer___from_t)CALL((recv), (SFT_standard___string[11] + 3)))
+#define CALL_standard___string___Buffer___with_capacity(recv) ((standard___string___Buffer___with_capacity_t)CALL((recv), (SFT_standard___string[11] + 4)))
+#define CALL_standard___string___Buffer___capacity(recv) ((standard___string___Buffer___capacity_t)CALL((recv), (SFT_standard___string[11] + 5)))
+#define CALL_standard___string___Object___to_s(recv) ((standard___string___Object___to_s_t)CALL((recv), (SFT_standard___string[12] + 0)))
+#define CALL_standard___string___Object___native_class_name(recv) ((standard___string___Object___native_class_name_t)CALL((recv), (SFT_standard___string[12] + 1)))
+#define CALL_standard___string___Object___class_name(recv) ((standard___string___Object___class_name_t)CALL((recv), (SFT_standard___string[12] + 2)))
+#define CALL_standard___string___Object___inspect(recv) ((standard___string___Object___inspect_t)CALL((recv), (SFT_standard___string[12] + 3)))
+#define CALL_standard___string___Object___inspect_head(recv) ((standard___string___Object___inspect_head_t)CALL((recv), (SFT_standard___string[12] + 4)))
+#define CALL_standard___string___Object___args(recv) ((standard___string___Object___args_t)CALL((recv), (SFT_standard___string[12] + 5)))
+#define CALL_standard___string___Int___fill_buffer(recv) ((standard___string___Int___fill_buffer_t)CALL((recv), (SFT_standard___string[13] + 0)))
+#define CALL_standard___string___Int___to_hex(recv) ((standard___string___Int___to_hex_t)CALL((recv), (SFT_standard___string[13] + 1)))
+#define CALL_standard___string___Int___to_base(recv) ((standard___string___Int___to_base_t)CALL((recv), (SFT_standard___string[13] + 2)))
+#define CALL_standard___string___Float___to_precision(recv) ((standard___string___Float___to_precision_t)CALL((recv), (SFT_standard___string[14] + 0)))
+#define CALL_standard___string___Float___to_precision_native(recv) ((standard___string___Float___to_precision_native_t)CALL((recv), (SFT_standard___string[14] + 1)))
+#define CALL_standard___string___Char___is_numeric(recv) ((standard___string___Char___is_numeric_t)CALL((recv), (SFT_standard___string[15] + 0)))
+#define CALL_standard___string___Char___is_alpha(recv) ((standard___string___Char___is_alpha_t)CALL((recv), (SFT_standard___string[15] + 1)))
+#define CALL_standard___string___Char___is_alphanumeric(recv) ((standard___string___Char___is_alphanumeric_t)CALL((recv), (SFT_standard___string[15] + 2)))
+#define CALL_standard___string___Collection___join(recv) ((standard___string___Collection___join_t)CALL((recv), (SFT_standard___string[16] + 0)))
+#define CALL_standard___string___Map___join(recv) ((standard___string___Map___join_t)CALL((recv), (SFT_standard___string[17] + 0)))
+#define ID_standard___string___NativeString (SFT_standard___string[18])
+#define COLOR_standard___string___NativeString (SFT_standard___string[19])
+#define INIT_TABLE_POS_standard___string___NativeString (SFT_standard___string[20] + 0)
+#define CALL_standard___string___NativeString_____bra(recv) ((standard___string___NativeString_____bra_t)CALL((recv), (SFT_standard___string[20] + 1)))
+#define CALL_standard___string___NativeString_____braeq(recv) ((standard___string___NativeString_____braeq_t)CALL((recv), (SFT_standard___string[20] + 2)))
+#define CALL_standard___string___NativeString___copy_to(recv) ((standard___string___NativeString___copy_to_t)CALL((recv), (SFT_standard___string[20] + 3)))
+#define CALL_standard___string___NativeString___cstring_length(recv) ((standard___string___NativeString___cstring_length_t)CALL((recv), (SFT_standard___string[20] + 4)))
+#define CALL_standard___string___NativeString___atoi(recv) ((standard___string___NativeString___atoi_t)CALL((recv), (SFT_standard___string[20] + 5)))
+#define CALL_standard___string___NativeString___atof(recv) ((standard___string___NativeString___atof_t)CALL((recv), (SFT_standard___string[20] + 6)))
+#define CALL_standard___string___NativeString___init(recv) ((standard___string___NativeString___init_t)CALL((recv), (SFT_standard___string[20] + 7)))
+#define ID_standard___string___StringCapable (SFT_standard___string[21])
+#define COLOR_standard___string___StringCapable (SFT_standard___string[22])
+#define INIT_TABLE_POS_standard___string___StringCapable (SFT_standard___string[23] + 0)
+#define CALL_standard___string___StringCapable___calloc_string(recv) ((standard___string___StringCapable___calloc_string_t)CALL((recv), (SFT_standard___string[23] + 1)))
+#define ATTR_standard___string___Sys____args_cache(recv) ATTR(recv, (SFT_standard___string[24] + 0))
+#define CALL_standard___string___Sys___program_name(recv) ((standard___string___Sys___program_name_t)CALL((recv), (SFT_standard___string[25] + 0)))
+#define CALL_standard___string___Sys___init_args(recv) ((standard___string___Sys___init_args_t)CALL((recv), (SFT_standard___string[25] + 1)))
+#define CALL_standard___string___Sys___native_argc(recv) ((standard___string___Sys___native_argc_t)CALL((recv), (SFT_standard___string[25] + 2)))
+#define CALL_standard___string___Sys___native_argv(recv) ((standard___string___Sys___native_argv_t)CALL((recv), (SFT_standard___string[25] + 3)))
 val_t standard___string___AbstractString___items(val_t p0);
 typedef val_t (*standard___string___AbstractString___items_t)(val_t p0);
 val_t standard___string___AbstractString_____bra(val_t p0, val_t p1);
@@ -108,6 +121,11 @@ typedef val_t (*standard___string___AbstractString___a_to_t)(val_t p0, val_t p1)
   typedef void (*CLOS_OC_standard___string___AbstractString___a_to_1_0)(struct stack_frame_t *);
   void OC_standard___string___AbstractString___a_to_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
   typedef void (*OC_standard___string___AbstractString___a_to_1_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
+val_t standard___string___AbstractString___is_numeric(val_t p0);
+typedef val_t (*standard___string___AbstractString___is_numeric_t)(val_t p0);
+  typedef void (*CLOS_OC_standard___string___AbstractString___is_numeric_1_0)(struct stack_frame_t *);
+  void OC_standard___string___AbstractString___is_numeric_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
+  typedef void (*OC_standard___string___AbstractString___is_numeric_1_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
 val_t standard___string___AbstractString___to_upper(val_t p0);
 typedef val_t (*standard___string___AbstractString___to_upper_t)(val_t p0);
   typedef void (*CLOS_OC_standard___string___AbstractString___to_upper_1_0)(struct stack_frame_t *);
@@ -118,15 +136,43 @@ typedef val_t (*standard___string___AbstractString___to_lower_t)(val_t p0);
   typedef void (*CLOS_OC_standard___string___AbstractString___to_lower_1_0)(struct stack_frame_t *);
   void OC_standard___string___AbstractString___to_lower_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
   typedef void (*OC_standard___string___AbstractString___to_lower_1_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
+val_t standard___string___AbstractString___trim(val_t p0);
+typedef val_t (*standard___string___AbstractString___trim_t)(val_t p0);
 void standard___string___AbstractString___output(val_t p0);
 typedef void (*standard___string___AbstractString___output_t)(val_t p0);
 val_t NEW_AbstractString_standard___collection___array___AbstractArrayRead___init();
+val_t standard___string___String___index_from(val_t p0);
+typedef val_t (*standard___string___String___index_from_t)(val_t p0);
+val_t standard___string___String___index_to(val_t p0);
+typedef val_t (*standard___string___String___index_to_t)(val_t p0);
+val_t standard___string___String_____bra(val_t p0, val_t p1);
+typedef val_t (*standard___string___String_____bra_t)(val_t p0, val_t p1);
+val_t standard___string___String___substring(val_t p0, val_t p1, val_t p2);
+typedef val_t (*standard___string___String___substring_t)(val_t p0, val_t p1, val_t p2);
+val_t standard___string___String___substring_from(val_t p0, val_t p1);
+typedef val_t (*standard___string___String___substring_from_t)(val_t p0, val_t p1);
+val_t standard___string___String___has_substring(val_t p0, val_t p1, val_t p2);
+typedef val_t (*standard___string___String___has_substring_t)(val_t p0, val_t p1, val_t p2);
+val_t standard___string___String___to_upper(val_t p0);
+typedef val_t (*standard___string___String___to_upper_t)(val_t p0);
+val_t standard___string___String___to_lower(val_t p0);
+typedef val_t (*standard___string___String___to_lower_t)(val_t p0);
+val_t standard___string___String___trim(val_t p0);
+typedef val_t (*standard___string___String___trim_t)(val_t p0);
+void standard___string___String___output(val_t p0);
+typedef void (*standard___string___String___output_t)(val_t p0);
+void standard___string___String___from_substring(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
+typedef void (*standard___string___String___from_substring_t)(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table);
+val_t NEW_String_standard___string___String___from_substring(val_t p0, val_t p1, val_t p2);
 void standard___string___String___with_native(val_t p0, val_t p1, val_t p2, int* init_table);
 typedef void (*standard___string___String___with_native_t)(val_t p0, val_t p1, val_t p2, int* init_table);
 val_t NEW_String_standard___string___String___with_native(val_t p0, val_t p1);
 void standard___string___String___from_cstring(val_t p0, val_t p1, int* init_table);
 typedef void (*standard___string___String___from_cstring_t)(val_t p0, val_t p1, int* init_table);
 val_t NEW_String_standard___string___String___from_cstring(val_t p0);
+void standard___string___String___copy_from_native(val_t p0, val_t p1, int* init_table);
+typedef void (*standard___string___String___copy_from_native_t)(val_t p0, val_t p1, int* init_table);
+val_t NEW_String_standard___string___String___copy_from_native(val_t p0);
 val_t standard___string___String___to_cstring(val_t p0);
 typedef val_t (*standard___string___String___to_cstring_t)(val_t p0);
 val_t standard___string___String_____eqeq(val_t p0, val_t p1);
@@ -192,8 +238,16 @@ val_t standard___string___Float___to_s(val_t p0);
 typedef val_t (*standard___string___Float___to_s_t)(val_t p0);
 val_t standard___string___Float___to_precision(val_t p0, val_t p1);
 typedef val_t (*standard___string___Float___to_precision_t)(val_t p0, val_t p1);
+val_t standard___string___Float___to_precision_native(val_t p0, val_t p1);
+typedef val_t (*standard___string___Float___to_precision_native_t)(val_t p0, val_t p1);
 val_t standard___string___Char___to_s(val_t p0);
 typedef val_t (*standard___string___Char___to_s_t)(val_t p0);
+val_t standard___string___Char___is_numeric(val_t p0);
+typedef val_t (*standard___string___Char___is_numeric_t)(val_t p0);
+val_t standard___string___Char___is_alpha(val_t p0);
+typedef val_t (*standard___string___Char___is_alpha_t)(val_t p0);
+val_t standard___string___Char___is_alphanumeric(val_t p0);
+typedef val_t (*standard___string___Char___is_alphanumeric_t)(val_t p0);
 val_t standard___string___Collection___to_s(val_t p0);
 typedef val_t (*standard___string___Collection___to_s_t)(val_t p0);
   typedef void (*CLOS_OC_standard___string___Collection___to_s_1_0)(struct stack_frame_t *);
@@ -207,6 +261,7 @@ val_t NEW_Array_standard___collection___array___Array___with_capacity(val_t p0);
 val_t NEW_Array_standard___collection___array___Array___init();
 val_t NEW_Array_standard___collection___array___Array___filled_with(val_t p0, val_t p1);
 val_t NEW_Array_standard___collection___array___Array___with_items(val_t p0);
+val_t NEW_Array_standard___collection___array___Array___from(val_t p0);
 val_t NEW_Array_standard___collection___array___Array___with_native(val_t p0, val_t p1);
 val_t standard___string___Map___join(val_t p0, val_t p1, val_t p2);
 typedef val_t (*standard___string___Map___join_t)(val_t p0, val_t p1, val_t p2);
index 637e27d..596ea77 100644 (file)
@@ -393,7 +393,7 @@ val_t standard___string_search___BM_Pattern___search_index_in(val_t p0, val_t p1
         if (UNTAG_Bool(REGB3)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB5)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label3;
@@ -799,7 +799,7 @@ val_t standard___string_search___BM_Pattern___suffixes(val_t p0){
         if (UNTAG_Bool(REGB4)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB5)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label1;
@@ -872,7 +872,7 @@ val_t standard___string_search___BM_Pattern___suffixes(val_t p0){
         if (UNTAG_Bool(REGB5)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB4)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label2;
@@ -1113,7 +1113,7 @@ void standard___string_search___BM_Pattern___compute_gs(val_t p0){
         if (UNTAG_Bool(REGB5)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB3)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label2;
@@ -1203,7 +1203,7 @@ void standard___string_search___BM_Pattern___compute_gs(val_t p0){
             if (UNTAG_Bool(REGB5)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB4)];
             /* ../lib/standard/collection/array.nit:281 */
             goto label3;
@@ -1331,7 +1331,7 @@ void standard___string_search___BM_Pattern___compute_gs(val_t p0){
       if (UNTAG_Bool(REGB5)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB4)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label6;
@@ -1990,8 +1990,8 @@ val_t standard___string_search___String___search_all(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-static const char LOCATE_standard___string_search___String___split_with[] = "string_search::String::split_with";
-val_t standard___string_search___String___split_with(val_t p0, val_t p1){
+static const char LOCATE_standard___string_search___String___split[] = "string_search::String::split";
+val_t standard___string_search___String___split(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
@@ -2000,7 +2000,7 @@ val_t standard___string_search___String___split_with(val_t p0, val_t p1){
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string_search;
   fra.me.line = 301;
-  fra.me.meth = LOCATE_standard___string_search___String___split_with;
+  fra.me.meth = LOCATE_standard___string_search___String___split;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.nitni_local_ref_head = NULL;
@@ -2055,7 +2055,7 @@ val_t standard___string_search___String___split_with(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* ../lib/standard/string_search.nit:307 */
       fra.me.REG[3] = CALL_standard___string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
@@ -2078,27 +2078,27 @@ val_t standard___string_search___String___split_with(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return fra.me.REG[1];
 }
-static const char LOCATE_standard___string_search___String___split[] = "string_search::String::split";
-val_t standard___string_search___String___split(val_t p0){
-  struct {struct stack_frame_t me;} fra;
-  val_t REGB0;
+static const char LOCATE_standard___string_search___String___split_with[] = "string_search::String::split_with";
+val_t standard___string_search___String___split_with(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string_search;
   fra.me.line = 311;
-  fra.me.meth = LOCATE_standard___string_search___String___split;
+  fra.me.meth = LOCATE_standard___string_search___String___split_with;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string_search.nit:313 */
-  REGB0 = TAG_Char('\n');
-  fra.me.REG[0] = CALL_standard___string_search___String___split_with(fra.me.REG[0])(fra.me.REG[0], REGB0);
+  fra.me.REG[1] = p1;
+  /* ../lib/standard/string_search.nit:312 */
+  fra.me.REG[1] = CALL_standard___string_search___String___split(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[0];
+  return fra.me.REG[1];
 }
 static const char LOCATE_standard___string_search___String___replace[] = "string_search::String::replace";
 val_t standard___string_search___String___replace(val_t p0, val_t p1, val_t p2){
@@ -2106,7 +2106,7 @@ val_t standard___string_search___String___replace(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_standard___string_search;
-  fra.me.line = 315;
+  fra.me.line = 314;
   fra.me.meth = LOCATE_standard___string_search___String___replace;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -2117,7 +2117,7 @@ val_t standard___string_search___String___replace(val_t p0, val_t p1, val_t p2){
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ../lib/standard/string_search.nit:321 */
+  /* ../lib/standard/string_search.nit:320 */
   fra.me.REG[1] = CALL_standard___string_search___String___split_with(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   fra.me.REG[2] = CALL_standard___string___Collection___join(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   goto label1;
@@ -2137,7 +2137,7 @@ val_t standard___string_search___String___html_escape(val_t p0){
     static val_t once_value_4; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_standard___string_search;
-  fra.me.line = 324;
+  fra.me.line = 323;
   fra.me.meth = LOCATE_standard___string_search___String___html_escape;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2145,7 +2145,7 @@ val_t standard___string_search___String___html_escape(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ../lib/standard/string_search.nit:330 */
+  /* ../lib/standard/string_search.nit:329 */
   REGB0 = TAG_Char('&');
   REGB0 = CALL_standard___collection___abstract_collection___Collection___has(fra.me.REG[0])(fra.me.REG[0], REGB0);
   if (UNTAG_Bool(REGB0)) {
@@ -2161,7 +2161,7 @@ val_t standard___string_search___String___html_escape(val_t p0){
     fra.me.REG[1] = CALL_standard___string_search___String___replace(fra.me.REG[0])(fra.me.REG[0], REGB0, fra.me.REG[1]);
     fra.me.REG[0] = fra.me.REG[1];
   }
-  /* ../lib/standard/string_search.nit:331 */
+  /* ../lib/standard/string_search.nit:330 */
   REGB0 = TAG_Char('<');
   REGB0 = CALL_standard___collection___abstract_collection___Collection___has(fra.me.REG[0])(fra.me.REG[0], REGB0);
   if (UNTAG_Bool(REGB0)) {
@@ -2177,7 +2177,7 @@ val_t standard___string_search___String___html_escape(val_t p0){
     fra.me.REG[1] = CALL_standard___string_search___String___replace(fra.me.REG[0])(fra.me.REG[0], REGB0, fra.me.REG[1]);
     fra.me.REG[0] = fra.me.REG[1];
   }
-  /* ../lib/standard/string_search.nit:332 */
+  /* ../lib/standard/string_search.nit:331 */
   REGB0 = TAG_Char('>');
   REGB0 = CALL_standard___collection___abstract_collection___Collection___has(fra.me.REG[0])(fra.me.REG[0], REGB0);
   if (UNTAG_Bool(REGB0)) {
@@ -2193,7 +2193,7 @@ val_t standard___string_search___String___html_escape(val_t p0){
     fra.me.REG[1] = CALL_standard___string_search___String___replace(fra.me.REG[0])(fra.me.REG[0], REGB0, fra.me.REG[1]);
     fra.me.REG[0] = fra.me.REG[1];
   }
-  /* ../lib/standard/string_search.nit:333 */
+  /* ../lib/standard/string_search.nit:332 */
   REGB0 = TAG_Char('"');
   REGB0 = CALL_standard___collection___abstract_collection___Collection___has(fra.me.REG[0])(fra.me.REG[0], REGB0);
   if (UNTAG_Bool(REGB0)) {
@@ -2209,7 +2209,7 @@ val_t standard___string_search___String___html_escape(val_t p0){
     fra.me.REG[1] = CALL_standard___string_search___String___replace(fra.me.REG[0])(fra.me.REG[0], REGB0, fra.me.REG[1]);
     fra.me.REG[0] = fra.me.REG[1];
   }
-  /* ../lib/standard/string_search.nit:334 */
+  /* ../lib/standard/string_search.nit:333 */
   goto label5;
   label5: while(0);
   stack_frame_head = fra.me.prev;
index 629e1c1..3b3c118 100644 (file)
@@ -44,8 +44,8 @@ extern const int SFT_standard___string_search[];
 #define CALL_standard___string_search___String___search(recv) ((standard___string_search___String___search_t)CALL((recv), (SFT_standard___string_search[11] + 0)))
 #define CALL_standard___string_search___String___search_from(recv) ((standard___string_search___String___search_from_t)CALL((recv), (SFT_standard___string_search[11] + 1)))
 #define CALL_standard___string_search___String___search_all(recv) ((standard___string_search___String___search_all_t)CALL((recv), (SFT_standard___string_search[11] + 2)))
-#define CALL_standard___string_search___String___split_with(recv) ((standard___string_search___String___split_with_t)CALL((recv), (SFT_standard___string_search[11] + 3)))
-#define CALL_standard___string_search___String___split(recv) ((standard___string_search___String___split_t)CALL((recv), (SFT_standard___string_search[11] + 4)))
+#define CALL_standard___string_search___String___split(recv) ((standard___string_search___String___split_t)CALL((recv), (SFT_standard___string_search[11] + 3)))
+#define CALL_standard___string_search___String___split_with(recv) ((standard___string_search___String___split_with_t)CALL((recv), (SFT_standard___string_search[11] + 4)))
 #define CALL_standard___string_search___String___replace(recv) ((standard___string_search___String___replace_t)CALL((recv), (SFT_standard___string_search[11] + 5)))
 #define CALL_standard___string_search___String___html_escape(recv) ((standard___string_search___String___html_escape_t)CALL((recv), (SFT_standard___string_search[11] + 6)))
 val_t standard___string_search___Pattern___search_index_in(val_t p0, val_t p1, val_t p2);
@@ -100,14 +100,16 @@ val_t standard___string_search___String___search_from(val_t p0, val_t p1, val_t
 typedef val_t (*standard___string_search___String___search_from_t)(val_t p0, val_t p1, val_t p2);
 val_t standard___string_search___String___search_all(val_t p0, val_t p1);
 typedef val_t (*standard___string_search___String___search_all_t)(val_t p0, val_t p1);
+val_t standard___string_search___String___split(val_t p0, val_t p1);
+typedef val_t (*standard___string_search___String___split_t)(val_t p0, val_t p1);
 val_t standard___string_search___String___split_with(val_t p0, val_t p1);
 typedef val_t (*standard___string_search___String___split_with_t)(val_t p0, val_t p1);
-val_t standard___string_search___String___split(val_t p0);
-typedef val_t (*standard___string_search___String___split_t)(val_t p0);
 val_t standard___string_search___String___replace(val_t p0, val_t p1, val_t p2);
 typedef val_t (*standard___string_search___String___replace_t)(val_t p0, val_t p1, val_t p2);
 val_t standard___string_search___String___html_escape(val_t p0);
 typedef val_t (*standard___string_search___String___html_escape_t)(val_t p0);
 val_t NEW_String_standard___string___String___with_native(val_t p0, val_t p1);
 val_t NEW_String_standard___string___String___from_cstring(val_t p0);
+val_t NEW_String_standard___string___String___from_substring(val_t p0, val_t p1, val_t p2);
+val_t NEW_String_standard___string___String___copy_from_native(val_t p0);
 #endif
index 278fbfb..a1958fb 100644 (file)
@@ -3,11 +3,9 @@
 /* out/indirect function for stream::FDStream::native_close */
 val_t FDStream_native_close___out( val_t recv, val_t i )
 {
-bigint trans___i;
 bigint orig_return;
 val_t trans_return;
-trans___i = UNTAG_Int(i);
-orig_return = stream_FDStream_FDStream_native_close_1( NULL, trans___i );
+orig_return = stream_FDStream_FDStream_native_close_1( NULL, UNTAG_Int(i) );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -15,11 +13,9 @@ return trans_return;
 /* out/indirect function for stream::FDStream::native_read_char */
 val_t FDStream_native_read_char___out( val_t recv, val_t i )
 {
-bigint trans___i;
 bigint orig_return;
 val_t trans_return;
-trans___i = UNTAG_Int(i);
-orig_return = stream_FDStream_FDStream_native_read_char_1( NULL, trans___i );
+orig_return = stream_FDStream_FDStream_native_read_char_1( NULL, UNTAG_Int(i) );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -27,13 +23,11 @@ return trans_return;
 /* out/indirect function for stream::FDStream::native_read */
 val_t FDStream_native_read___out( val_t recv, val_t i, val_t buf, val_t len )
 {
-bigint trans___i;
-bigint trans___len;
+char * trans___buf;
 bigint orig_return;
 val_t trans_return;
-trans___i = UNTAG_Int(i);
-trans___len = UNTAG_Int(len);
-orig_return = stream_FDStream_FDStream_native_read_3( NULL, trans___i, UNBOX_NativeString(buf), trans___len );
+trans___buf = UNBOX_NativeString(buf);
+orig_return = stream_FDStream_FDStream_native_read_3( NULL, UNTAG_Int(i), trans___buf, UNTAG_Int(len) );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -41,13 +35,11 @@ return trans_return;
 /* out/indirect function for stream::FDStream::native_write */
 val_t FDStream_native_write___out( val_t recv, val_t i, val_t buf, val_t len )
 {
-bigint trans___i;
-bigint trans___len;
+char * trans___buf;
 bigint orig_return;
 val_t trans_return;
-trans___i = UNTAG_Int(i);
-trans___len = UNTAG_Int(len);
-orig_return = stream_FDStream_FDStream_native_write_3( NULL, trans___i, UNBOX_NativeString(buf), trans___len );
+trans___buf = UNBOX_NativeString(buf);
+orig_return = stream_FDStream_FDStream_native_write_3( NULL, UNTAG_Int(i), trans___buf, UNTAG_Int(len) );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -55,13 +47,9 @@ return trans_return;
 /* out/indirect function for stream::FDStream::native_write_char */
 val_t FDStream_native_write_char___out( val_t recv, val_t i, val_t c )
 {
-bigint trans___i;
-char trans___c;
 bigint orig_return;
 val_t trans_return;
-trans___i = UNTAG_Int(i);
-trans___c = UNTAG_Char(c);
-orig_return = stream_FDStream_FDStream_native_write_char_2( NULL, trans___i, trans___c );
+orig_return = stream_FDStream_FDStream_native_write_char_2( NULL, UNTAG_Int(i), UNTAG_Char(c) );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -130,16 +118,14 @@ return trans_return;
 nullable_Object stream_Array__index( Array recv, bigint index )
 {
 val_t trans_recv;
-val_t trans___index;
 val_t orig_return;
 nullable_Object trans_return;
 trans_recv = recv->ref.val;
-trans___index = TAG_Int(index);
 trans_return = malloc( sizeof( struct s_nullable_Object ) );
 trans_return->ref.val = NIT_NULL;
 trans_return->ref.count = 0;
 nitni_local_ref_add( (struct nitni_ref *)trans_return );
-orig_return = CALL_standard___collection___abstract_collection___SequenceRead_____bra( trans_recv )( trans_recv, trans___index );
+orig_return = CALL_standard___collection___abstract_collection___SequenceRead_____bra( trans_recv )( trans_recv, TAG_Int(index) );
 trans_return->ref.val = orig_return;
 return trans_return;
 }
@@ -148,7 +134,7 @@ int stream_nullable_Object_is_a_Int( nullable_Object value )
 val_t temp;
 temp = value->ref.val;
 if ( ISNULL(temp) ) return 0;
-if ( ! ( ISOBJ( temp ) ? OBJISA( temp, standard___kernel___Int ): VALISA( temp, standard___kernel___Int ) ) ) return 0;
+if ( ! ( ISOBJ( temp ) ? ISNULL( temp ) || OBJISA( temp, standard___kernel___Int ): VALISA( temp, standard___kernel___Int ) ) ) return 0;
 return 1;
 }
 bigint stream_nullable_Object_as_Int( nullable_Object value )
@@ -158,7 +144,7 @@ bigint out;
 temp = value->ref.val;
 if ( ISNULL(temp) ){   fprintf( stderr, "Casting from nullable Object to Int failed because value is null." );
        abort();
-}if ( ! ( ISOBJ( temp ) ? OBJISA( temp, standard___kernel___Int ): VALISA( temp, standard___kernel___Int ) ) ){
+}if ( ! ( ISOBJ( temp ) ? ISNULL( temp ) || OBJISA( temp, standard___kernel___Int ): VALISA( temp, standard___kernel___Int ) ) ){
        fprintf( stderr, "Casting to Int failed because value is not a Int." );
        abort();
 }
index f3f6773..b28e56a 100644 (file)
@@ -25,6 +25,6 @@ nullable_Int Object_intern_poll___impl( Object recv, Array in_fds, Array out_fds
 #define stream_FDStream_FDStream_native_close_1(self, p0) (close(p0))
 #define stream_FDStream_FDStream_native_read_3(s, i, b, l) read((i), ((b)), ((l)))
 #define stream_FDStream_FDStream_native_write_3(s, i, b, l) write((i), ((b)), ((l)))
-#define stream_FDStream_FDStream_native_write_char_2(s, i, c) write((i), ((&c)), 1 )
+#define stream_FDStream_FDStream_native_write_char_2(s, i, c) write((i), (char[]){(c)}, 1 )
 
 #endif
index 3e27c17..7aef628 100644 (file)
@@ -1,11 +1,28 @@
 #include "string._nitni.h"
 #include "string_nit.h"
+/* out/indirect function for string::Float::to_precision_native */
+val_t Float_to_precision_native___out( val_t recv, val_t nb )
+{
+float trans_recv;
+String orig_return;
+val_t trans_return;
+trans_recv = UNBOX_Float(recv);
+orig_return = malloc( sizeof( struct s_String ) );
+orig_return->ref.val = NIT_NULL;
+orig_return->ref.count = 0;
+orig_return = Float_to_precision_native___impl( trans_recv, UNTAG_Int(nb) );
+trans_return = orig_return->ref.val;
+nitni_local_ref_clean(  );
+return trans_return;
+}
 /* out/indirect function for string::NativeString::atof */
 val_t NativeString_atof___out( val_t recv )
 {
+char * trans_recv;
 float orig_return;
 val_t trans_return;
-orig_return = atof( UNBOX_NativeString(recv) );
+trans_recv = UNBOX_NativeString(recv);
+orig_return = atof( trans_recv );
 trans_return = BOX_Float(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -23,12 +40,25 @@ return trans_return;
 /* out/indirect function for string::Sys::native_argv */
 val_t Sys_native_argv___out( val_t recv, val_t i )
 {
-bigint trans___i;
 char * orig_return;
 val_t trans_return;
-trans___i = UNTAG_Int(i);
-orig_return = kernel_Sys_Sys_native_argv_1( NULL, trans___i );
+orig_return = kernel_Sys_Sys_native_argv_1( NULL, UNTAG_Int(i) );
 trans_return = BOX_NativeString(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
 }
+/* friendly for string::String::from_cstring */
+String string_new_String_from_cstring( char * str )
+{
+val_t trans___str;
+val_t orig_return;
+String trans_return;
+trans___str = BOX_NativeString(str);
+trans_return = malloc( sizeof( struct s_String ) );
+trans_return->ref.val = NIT_NULL;
+trans_return->ref.count = 0;
+nitni_local_ref_add( (struct nitni_ref *)trans_return );
+orig_return = NEW_String_standard___string___String___from_cstring( trans___str );
+trans_return->ref.val = orig_return;
+return trans_return;
+}
index 89b5e61..6ae8fc8 100644 (file)
@@ -3,6 +3,15 @@
 #ifndef STRING_NITNI_H
 #define STRING_NITNI_H
 
+#ifndef STRING_TYPE
+#define STRING_TYPE
+struct s_String{
+               struct nitni_ref ref; /* real ref struct, must be first */
+};
+typedef struct s_String *String;
+#define String_incr_ref( x ) nitni_global_ref_incr( (struct nitni_ref*)(x) )
+#define String_decr_ref( x ) nitni_global_ref_decr( (struct nitni_ref*)(x) )
+#endif
 #ifndef SYS_TYPE
 #define SYS_TYPE
 struct s_Sys{
@@ -13,6 +22,10 @@ typedef struct s_Sys *Sys;
 #define Sys_decr_ref( x ) nitni_global_ref_decr( (struct nitni_ref*)(x) )
 #endif
 #include "string_nit.h"
+#include <standard___string._ffi.h>
+
+/* out/indirect function for string::Float::to_precision_native */
+val_t Float_to_precision_native___out( val_t recv, val_t nb );
 
 /* out/indirect function for string::NativeString::atof */
 val_t NativeString_atof___out( val_t recv );
@@ -22,4 +35,9 @@ val_t Sys_native_argc___out( val_t recv );
 
 /* out/indirect function for string::Sys::native_argv */
 val_t Sys_native_argv___out( val_t recv, val_t i );
+/* friendly for string::String::from_cstring */
+String string_new_String_from_cstring( char * str );
+#ifndef new_String_from_cstring
+#define new_String_from_cstring string_new_String_from_cstring
+#endif
 #endif
index c7d200e..a51d6e4 100644 (file)
@@ -17,6 +17,8 @@ val_t symbol___String___to_symbol(val_t p0);
 typedef val_t (*symbol___String___to_symbol_t)(val_t p0);
 val_t NEW_String_standard___string___String___with_native(val_t p0, val_t p1);
 val_t NEW_String_standard___string___String___from_cstring(val_t p0);
+val_t NEW_String_standard___string___String___from_substring(val_t p0, val_t p1, val_t p2);
+val_t NEW_String_standard___string___String___copy_from_native(val_t p0);
 val_t symbol___Symbol___to_s(val_t p0);
 typedef val_t (*symbol___Symbol___to_s_t)(val_t p0);
 void symbol___Symbol___init(val_t p0, val_t p1, int* init_table);
index 6ab5dd4..7814a56 100644 (file)
@@ -87,7 +87,7 @@ val_t NEW_AExternPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef
 void syntax___extern_inline___AStdClassdef___accept_property_verifier(val_t p0, val_t p1);
 typedef void (*syntax___extern_inline___AStdClassdef___accept_property_verifier_t)(val_t p0, val_t p1);
 val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___empty_init();
-val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9);
+val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10);
 val_t NEW_AStdClassdef_parser___parser_nodes___ANode___init();
 void syntax___extern_inline___MMSrcModule___do_mmbuilder(val_t p0, val_t p1);
 typedef void (*syntax___extern_inline___MMSrcModule___do_mmbuilder_t)(val_t p0, val_t p1);
index de411ab..5be0a25 100644 (file)
@@ -320,7 +320,7 @@ val_t syntax___extern_type_inheritance___MMLocalClass___extern_type(val_t p0){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
       /* syntax/extern_type_inheritance.nit:65 */
       fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalClass___global(fra.me.REG[5])(fra.me.REG[5]);
index 7445de9..99e23bb 100644 (file)
@@ -236,7 +236,7 @@ val_t syntax___flow___FlowContext___merge(val_t p0, val_t p1, val_t p2){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
       /* syntax/flow.nit:76 */
       REGB1 = CALL_syntax___flow___FlowContext___unreash(fra.me.REG[5])(fra.me.REG[5]);
@@ -941,7 +941,7 @@ val_t syntax___flow___MergeFlowContext___merge_stype(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB1)];
       /* syntax/flow.nit:228 */
       fra.me.REG[6] = CALL_syntax___flow___FlowContext___stype(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[1]);
@@ -1165,7 +1165,7 @@ val_t syntax___flow___MergeFlowContext___merge_stype(val_t p0, val_t p1){
         if (UNTAG_Bool(REGB1)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB0)];
         /* syntax/flow.nit:261 */
         fra.me.REG[4] = CALL_syntax___flow___FlowContext___stype(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
@@ -1284,7 +1284,7 @@ val_t syntax___flow___MergeFlowContext___is_set(val_t p0, val_t p1){
         if (UNTAG_Bool(REGB2)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB1)];
         /* syntax/flow.nit:276 */
         REGB2 = CALL_syntax___flow___FlowContext___is_set(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
index 4c738d1..4410876 100644 (file)
@@ -595,7 +595,7 @@ void syntax___icode_generation___A2IContext___invoke_super_init_calls_after(val_
       if (UNTAG_Bool(REGB3)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB2)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label2;
@@ -681,7 +681,7 @@ void syntax___icode_generation___A2IContext___invoke_super_init_calls_after(val_
       if (UNTAG_Bool(REGB3)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB2)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label4;
@@ -789,7 +789,7 @@ void syntax___icode_generation___A2IContext___invoke_super_init_calls_after(val_
     if (UNTAG_Bool(REGB2)) {
       nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
     }
-    /* ../lib/standard/collection/array.nit:718 */
+    /* ../lib/standard/collection/array.nit:724 */
     fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB1)];
     /* ../lib/standard/collection/array.nit:281 */
     goto label6;
@@ -868,7 +868,7 @@ void syntax___icode_generation___A2IContext___invoke_super_init_calls_after(val_
       if (UNTAG_Bool(REGB3)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB2)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label7;
@@ -1676,7 +1676,7 @@ void syntax___icode_generation___MMImplicitInit___inner_generate_iroutine(val_t
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB0)];
       /* syntax/icode_generation.nit:264 */
       REGB2 = TAG_Bool(VAL_ISA(fra.me.REG[6], COLOR_metamodel___abstractmetamodel___MMMethod, ID_metamodel___abstractmetamodel___MMMethod)) /*cast MMMethod*/;
@@ -1813,7 +1813,7 @@ void syntax___icode_generation___MMImplicitInit___inner_generate_iroutine(val_t
       if (UNTAG_Bool(REGB5)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB4)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label3;
@@ -2415,7 +2415,7 @@ void syntax___icode_generation___AConcreteMethPropdef___fill_iroutine(val_t p0,
   if (UNTAG_Bool(REGB1)) {
     nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ../lib/standard/collection/array.nit:718 */
+  /* ../lib/standard/collection/array.nit:724 */
   fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB0)];
   /* ../lib/standard/collection/array.nit:281 */
   goto label1;
@@ -3736,7 +3736,7 @@ val_t syntax___icode_generation___AForExpr___generate_icode(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB4)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[8] = ((Nit_NativeArray)fra.me.REG[8])->val[UNTAG_Int(REGB3)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label7;
@@ -4640,14 +4640,84 @@ void syntax___icode_generation___AStringFormExpr___compute_string_infos(val_t p0
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   /* syntax/icode_generation.nit:940 */
-  REGB0 = TAG_Int(0);
+  fra.me.REG[1] = CALL_parser___parser_nodes___AStringFormExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[1] = CALL_parser___parser_nodes___Token___text(fra.me.REG[1])(fra.me.REG[1]);
+  /* ../lib/standard/collection/array.nit:24 */
+  REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+  }
+  REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
   /* syntax/icode_generation.nit:941 */
-  fra.me.REG[1] = CALL_syntax___icode_generation___AStringFormExpr___string_text(fra.me.REG[0])(fra.me.REG[0]);
-  /* syntax/icode_generation.nit:942 */
+  REGB1 = TAG_Int(6);
+  REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:236 */
+  REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+  /* syntax/icode_generation.nit:941 */
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Int(0);
+    REGB1 = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[1])(fra.me.REG[1], REGB1);
+    REGB0 = TAG_Int(1);
+    REGB0 = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[1])(fra.me.REG[1], REGB0);
+    REGB2 = TAG_Bool(IS_EQUAL_OO(REGB1,REGB0));
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      /* ../lib/standard/kernel.nit:381 */
+      REGB0 = TAG_Bool((REGB1)==(REGB0));
+      /* syntax/icode_generation.nit:941 */
+      REGB2 = REGB0;
+    }
+  } else {
+    REGB0 = TAG_Bool(0);
+    REGB2 = REGB0;
+  }
+  if (UNTAG_Bool(REGB2)) {
+    /* syntax/icode_generation.nit:942 */
+    REGB2 = TAG_Int(3);
+    /* ../lib/standard/collection/array.nit:24 */
+    REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+    }
+    REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
+    /* syntax/icode_generation.nit:942 */
+    REGB1 = TAG_Int(6);
+    /* ../lib/standard/kernel.nit:240 */
+    REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+    /* syntax/icode_generation.nit:942 */
+    fra.me.REG[2] = CALL_standard___string___AbstractString___substring(fra.me.REG[1])(fra.me.REG[1], REGB2, REGB1);
+    fra.me.REG[1] = fra.me.REG[2];
+  } else {
+    /* syntax/icode_generation.nit:944 */
+    REGB1 = TAG_Int(1);
+    /* ../lib/standard/collection/array.nit:24 */
+    REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+    }
+    REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
+    /* syntax/icode_generation.nit:944 */
+    REGB0 = TAG_Int(2);
+    /* ../lib/standard/kernel.nit:240 */
+    REGB0 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB0));
+    /* syntax/icode_generation.nit:944 */
+    fra.me.REG[2] = CALL_standard___string___AbstractString___substring(fra.me.REG[1])(fra.me.REG[1], REGB1, REGB0);
+    fra.me.REG[1] = fra.me.REG[2];
+  }
+  /* syntax/icode_generation.nit:946 */
   fra.me.REG[2] = NEW_Buffer_standard___string___Buffer___init();
-  /* syntax/icode_generation.nit:943 */
+  /* syntax/icode_generation.nit:947 */
+  REGB0 = TAG_Int(0);
+  /* syntax/icode_generation.nit:948 */
   REGB1 = TAG_Int(0);
-  /* syntax/icode_generation.nit:944 */
+  /* syntax/icode_generation.nit:949 */
   while(1) {
     /* ../lib/standard/collection/array.nit:24 */
     REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
@@ -4663,37 +4733,37 @@ void syntax___icode_generation___AStringFormExpr___compute_string_infos(val_t p0
     }
     /* ../lib/standard/kernel.nit:235 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
-    /* syntax/icode_generation.nit:944 */
+    /* syntax/icode_generation.nit:949 */
     if (UNTAG_Bool(REGB2)) {
-      /* syntax/icode_generation.nit:945 */
+      /* syntax/icode_generation.nit:950 */
       REGB2 = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[1])(fra.me.REG[1], REGB1);
-      /* syntax/icode_generation.nit:946 */
+      /* syntax/icode_generation.nit:951 */
       REGB3 = TAG_Char('\\');
       REGB4 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB3));
       if (UNTAG_Bool(REGB4)) {
       } else {
         /* ../lib/standard/kernel.nit:381 */
         REGB3 = TAG_Bool((REGB2)==(REGB3));
-        /* syntax/icode_generation.nit:946 */
+        /* syntax/icode_generation.nit:951 */
         REGB4 = REGB3;
       }
       if (UNTAG_Bool(REGB4)) {
-        /* syntax/icode_generation.nit:947 */
+        /* syntax/icode_generation.nit:952 */
         REGB4 = TAG_Int(1);
         /* ../lib/standard/kernel.nit:238 */
         REGB4 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB4));
-        /* syntax/icode_generation.nit:947 */
+        /* syntax/icode_generation.nit:952 */
         REGB1 = REGB4;
-        /* syntax/icode_generation.nit:948 */
+        /* syntax/icode_generation.nit:953 */
         REGB4 = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[1])(fra.me.REG[1], REGB1);
-        /* syntax/icode_generation.nit:949 */
+        /* syntax/icode_generation.nit:954 */
         REGB3 = TAG_Char('{');
         REGB5 = TAG_Bool(IS_EQUAL_OO(REGB4,REGB3));
         if (UNTAG_Bool(REGB5)) {
         } else {
           /* ../lib/standard/kernel.nit:381 */
           REGB3 = TAG_Bool((REGB4)==(REGB3));
-          /* syntax/icode_generation.nit:949 */
+          /* syntax/icode_generation.nit:954 */
           REGB5 = REGB3;
         }
         REGB5 = TAG_Bool(!UNTAG_Bool(REGB5));
@@ -4704,7 +4774,7 @@ void syntax___icode_generation___AStringFormExpr___compute_string_infos(val_t p0
           } else {
             /* ../lib/standard/kernel.nit:381 */
             REGB5 = TAG_Bool((REGB4)==(REGB5));
-            /* syntax/icode_generation.nit:949 */
+            /* syntax/icode_generation.nit:954 */
             REGB3 = REGB5;
           }
           REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
@@ -4713,36 +4783,71 @@ void syntax___icode_generation___AStringFormExpr___compute_string_infos(val_t p0
           REGB3 = REGB5;
         }
         if (UNTAG_Bool(REGB3)) {
-          /* syntax/icode_generation.nit:950 */
+          /* syntax/icode_generation.nit:955 */
           CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], REGB2);
         }
-        /* syntax/icode_generation.nit:952 */
+        /* syntax/icode_generation.nit:957 */
         REGB2 = REGB4;
+      } else {
+        /* syntax/icode_generation.nit:958 */
+        REGB4 = TAG_Char('"');
+        REGB3 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB4));
+        if (UNTAG_Bool(REGB3)) {
+        } else {
+          /* ../lib/standard/kernel.nit:381 */
+          REGB4 = TAG_Bool((REGB2)==(REGB4));
+          /* syntax/icode_generation.nit:958 */
+          REGB3 = REGB4;
+        }
+        if (UNTAG_Bool(REGB3)) {
+          /* syntax/icode_generation.nit:959 */
+          REGB3 = TAG_Char('\\');
+          CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], REGB3);
+        } else {
+          /* syntax/icode_generation.nit:960 */
+          REGB3 = TAG_Char('\n');
+          REGB4 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB3));
+          if (UNTAG_Bool(REGB4)) {
+          } else {
+            /* ../lib/standard/kernel.nit:381 */
+            REGB3 = TAG_Bool((REGB2)==(REGB3));
+            /* syntax/icode_generation.nit:960 */
+            REGB4 = REGB3;
+          }
+          if (UNTAG_Bool(REGB4)) {
+            /* syntax/icode_generation.nit:961 */
+            REGB4 = TAG_Char('\\');
+            CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], REGB4);
+            /* syntax/icode_generation.nit:962 */
+            REGB4 = TAG_Char('n');
+            REGB2 = REGB4;
+          }
+        }
       }
-      /* syntax/icode_generation.nit:954 */
+      /* syntax/icode_generation.nit:964 */
       REGB4 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:238 */
       REGB4 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB4));
-      /* syntax/icode_generation.nit:954 */
+      /* syntax/icode_generation.nit:964 */
       REGB0 = REGB4;
-      /* syntax/icode_generation.nit:955 */
+      /* syntax/icode_generation.nit:965 */
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], REGB2);
-      /* syntax/icode_generation.nit:956 */
+      /* syntax/icode_generation.nit:966 */
       REGB2 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:238 */
       REGB2 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB2));
-      /* syntax/icode_generation.nit:956 */
+      /* syntax/icode_generation.nit:966 */
       REGB1 = REGB2;
     } else {
-      /* syntax/icode_generation.nit:944 */
+      /* syntax/icode_generation.nit:949 */
       goto label1;
     }
   }
   label1: while(0);
-  /* syntax/icode_generation.nit:958 */
+  /* syntax/icode_generation.nit:968 */
   fra.me.REG[2] = CALL_standard___string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
   ATTR_syntax___icode_generation___AStringFormExpr____cstring(fra.me.REG[0]) = fra.me.REG[2];
-  /* syntax/icode_generation.nit:959 */
+  /* syntax/icode_generation.nit:969 */
   ATTR_syntax___icode_generation___AStringFormExpr____cstring_length(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
   return;
@@ -4756,7 +4861,7 @@ val_t syntax___icode_generation___AStringExpr___string_text(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 964;
+  fra.me.line = 974;
   fra.me.meth = LOCATE_syntax___icode_generation___AStringExpr___string_text;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4764,11 +4869,11 @@ val_t syntax___icode_generation___AStringExpr___string_text(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/icode_generation.nit:964 */
-  fra.me.REG[1] = CALL_parser___parser_nodes___AStringExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
+  /* syntax/icode_generation.nit:974 */
+  fra.me.REG[1] = CALL_parser___parser_nodes___AStringFormExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[1] = CALL_parser___parser_nodes___Token___text(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Int(1);
-  fra.me.REG[0] = CALL_parser___parser_nodes___AStringExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_parser___parser_nodes___AStringFormExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_parser___parser_nodes___Token___text(fra.me.REG[0])(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:24 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
@@ -4777,11 +4882,11 @@ val_t syntax___icode_generation___AStringExpr___string_text(val_t p0){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* syntax/icode_generation.nit:964 */
+  /* syntax/icode_generation.nit:974 */
   REGB2 = TAG_Int(2);
   /* ../lib/standard/kernel.nit:240 */
   REGB2 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB2));
-  /* syntax/icode_generation.nit:964 */
+  /* syntax/icode_generation.nit:974 */
   fra.me.REG[1] = CALL_standard___string___AbstractString___substring(fra.me.REG[1])(fra.me.REG[1], REGB0, REGB2);
   goto label1;
   label1: while(0);
@@ -4797,7 +4902,7 @@ val_t syntax___icode_generation___AStartStringExpr___string_text(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 967;
+  fra.me.line = 977;
   fra.me.meth = LOCATE_syntax___icode_generation___AStartStringExpr___string_text;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4805,11 +4910,11 @@ val_t syntax___icode_generation___AStartStringExpr___string_text(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/icode_generation.nit:967 */
-  fra.me.REG[1] = CALL_parser___parser_nodes___AStartStringExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
+  /* syntax/icode_generation.nit:977 */
+  fra.me.REG[1] = CALL_parser___parser_nodes___AStringFormExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[1] = CALL_parser___parser_nodes___Token___text(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Int(1);
-  fra.me.REG[0] = CALL_parser___parser_nodes___AStartStringExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_parser___parser_nodes___AStringFormExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_parser___parser_nodes___Token___text(fra.me.REG[0])(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:24 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
@@ -4818,11 +4923,11 @@ val_t syntax___icode_generation___AStartStringExpr___string_text(val_t p0){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* syntax/icode_generation.nit:967 */
+  /* syntax/icode_generation.nit:977 */
   REGB2 = TAG_Int(2);
   /* ../lib/standard/kernel.nit:240 */
   REGB2 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB2));
-  /* syntax/icode_generation.nit:967 */
+  /* syntax/icode_generation.nit:977 */
   fra.me.REG[1] = CALL_standard___string___AbstractString___substring(fra.me.REG[1])(fra.me.REG[1], REGB0, REGB2);
   goto label1;
   label1: while(0);
@@ -4838,7 +4943,7 @@ val_t syntax___icode_generation___AMidStringExpr___string_text(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 970;
+  fra.me.line = 980;
   fra.me.meth = LOCATE_syntax___icode_generation___AMidStringExpr___string_text;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4846,11 +4951,11 @@ val_t syntax___icode_generation___AMidStringExpr___string_text(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/icode_generation.nit:970 */
-  fra.me.REG[1] = CALL_parser___parser_nodes___AMidStringExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
+  /* syntax/icode_generation.nit:980 */
+  fra.me.REG[1] = CALL_parser___parser_nodes___AStringFormExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[1] = CALL_parser___parser_nodes___Token___text(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Int(1);
-  fra.me.REG[0] = CALL_parser___parser_nodes___AMidStringExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_parser___parser_nodes___AStringFormExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_parser___parser_nodes___Token___text(fra.me.REG[0])(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:24 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
@@ -4859,11 +4964,11 @@ val_t syntax___icode_generation___AMidStringExpr___string_text(val_t p0){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* syntax/icode_generation.nit:970 */
+  /* syntax/icode_generation.nit:980 */
   REGB2 = TAG_Int(2);
   /* ../lib/standard/kernel.nit:240 */
   REGB2 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB2));
-  /* syntax/icode_generation.nit:970 */
+  /* syntax/icode_generation.nit:980 */
   fra.me.REG[1] = CALL_standard___string___AbstractString___substring(fra.me.REG[1])(fra.me.REG[1], REGB0, REGB2);
   goto label1;
   label1: while(0);
@@ -4879,7 +4984,7 @@ val_t syntax___icode_generation___AEndStringExpr___string_text(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 973;
+  fra.me.line = 983;
   fra.me.meth = LOCATE_syntax___icode_generation___AEndStringExpr___string_text;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4887,11 +4992,11 @@ val_t syntax___icode_generation___AEndStringExpr___string_text(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/icode_generation.nit:973 */
-  fra.me.REG[1] = CALL_parser___parser_nodes___AEndStringExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
+  /* syntax/icode_generation.nit:983 */
+  fra.me.REG[1] = CALL_parser___parser_nodes___AStringFormExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[1] = CALL_parser___parser_nodes___Token___text(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Int(1);
-  fra.me.REG[0] = CALL_parser___parser_nodes___AEndStringExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_parser___parser_nodes___AStringFormExpr___n_string(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_parser___parser_nodes___Token___text(fra.me.REG[0])(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:24 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
@@ -4900,11 +5005,11 @@ val_t syntax___icode_generation___AEndStringExpr___string_text(val_t p0){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* syntax/icode_generation.nit:973 */
+  /* syntax/icode_generation.nit:983 */
   REGB2 = TAG_Int(2);
   /* ../lib/standard/kernel.nit:240 */
   REGB2 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB2));
-  /* syntax/icode_generation.nit:973 */
+  /* syntax/icode_generation.nit:983 */
   fra.me.REG[1] = CALL_standard___string___AbstractString___substring(fra.me.REG[1])(fra.me.REG[1], REGB0, REGB2);
   goto label1;
   label1: while(0);
@@ -4920,7 +5025,7 @@ val_t syntax___icode_generation___ASuperstringExpr___generate_icode(val_t p0, va
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 977;
+  fra.me.line = 987;
   fra.me.meth = LOCATE_syntax___icode_generation___ASuperstringExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -4933,12 +5038,12 @@ val_t syntax___icode_generation___ASuperstringExpr___generate_icode(val_t p0, va
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:979 */
+  /* syntax/icode_generation.nit:989 */
   fra.me.REG[2] = CALL_syntax___syntax_base___ASuperstringExpr___atype(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_parser___parser_nodes___ASuperstringExpr___n_exprs(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[2] = CALL_syntax___icode_generation___A2IContext___add_new_array(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], REGB0);
-  /* syntax/icode_generation.nit:980 */
+  /* syntax/icode_generation.nit:990 */
   fra.me.REG[3] = CALL_syntax___icode_generation___A2IContext___visitor(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[4] = CALL_syntax___icode_generation___A2IContext___visitor(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[4] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_object(fra.me.REG[4])(fra.me.REG[4]);
@@ -4957,10 +5062,10 @@ val_t syntax___icode_generation___ASuperstringExpr___generate_icode(val_t p0, va
   } else fra.me.REG[5] = once_value_1;
   fra.me.REG[5] = fra.me.REG[5];
   fra.me.REG[5] = CALL_syntax___syntax_base___AbsSyntaxVisitor___get_method(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
-  /* syntax/icode_generation.nit:981 */
+  /* syntax/icode_generation.nit:991 */
   fra.me.REG[4] = CALL_parser___parser_nodes___ASuperstringExpr___n_exprs(fra.me.REG[0])(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[4])(fra.me.REG[4], (&(fra.me)), ((fun_t)OC_syntax___icode_generation___ASuperstringExpr___generate_icode_3));
-  /* syntax/icode_generation.nit:988 */
+  /* syntax/icode_generation.nit:998 */
   REGB0 = TAG_Int(1);
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
@@ -4992,9 +5097,9 @@ val_t syntax___icode_generation___ASuperstringExpr___generate_icode(val_t p0, va
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* syntax/icode_generation.nit:982 */
+    /* syntax/icode_generation.nit:992 */
     fra.me.REG[1] = CALL_syntax___icode_generation___A2IContext___generate_expr(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
-    /* syntax/icode_generation.nit:983 */
+    /* syntax/icode_generation.nit:993 */
     fra.me.REG[0] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[2] = CALL_syntax___syntax_base___AExpr___stype(closctx->REG[0])(closctx->REG[0]);
     REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[0],fra.me.REG[2]));
@@ -5005,7 +5110,7 @@ val_t syntax___icode_generation___ASuperstringExpr___generate_icode(val_t p0, va
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/icode_generation.nit:984 */
+      /* syntax/icode_generation.nit:994 */
       REGB0 = TAG_Int(1);
       fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
@@ -5014,7 +5119,7 @@ val_t syntax___icode_generation___ASuperstringExpr___generate_icode(val_t p0, va
       fra.me.REG[0] = CALL_icode___icode_builder___ICodeBuilder___expr(closctx->REG[1])(closctx->REG[1], fra.me.REG[2], fra.me.REG[0]);
       fra.me.REG[1] = fra.me.REG[0];
     }
-    /* syntax/icode_generation.nit:986 */
+    /* syntax/icode_generation.nit:996 */
     CALL_syntax___icode_generation___A2IContext___add_call_array_add(closctx->REG[1])(closctx->REG[1], closctx->REG[2], fra.me.REG[1]);
     stack_frame_head = fra.me.prev;
     return;
@@ -5025,7 +5130,7 @@ val_t syntax___icode_generation___ANullExpr___generate_icode(val_t p0, val_t p1)
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 993;
+  fra.me.line = 1003;
   fra.me.meth = LOCATE_syntax___icode_generation___ANullExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5034,7 +5139,7 @@ val_t syntax___icode_generation___ANullExpr___generate_icode(val_t p0, val_t p1)
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:995 */
+  /* syntax/icode_generation.nit:1005 */
   fra.me.REG[1] = CALL_icode___icode_builder___ICodeBuilder___lit_null_reg(fra.me.REG[1])(fra.me.REG[1]);
   goto label1;
   label1: while(0);
@@ -5048,7 +5153,7 @@ val_t syntax___icode_generation___AArrayExpr___generate_icode(val_t p0, val_t p1
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1000;
+  fra.me.line = 1010;
   fra.me.meth = LOCATE_syntax___icode_generation___AArrayExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -5058,15 +5163,15 @@ val_t syntax___icode_generation___AArrayExpr___generate_icode(val_t p0, val_t p1
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:1002 */
+  /* syntax/icode_generation.nit:1012 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AArrayExpr___n_exprs(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_parser___parser_nodes___AExprs___n_exprs(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/icode_generation.nit:1003 */
+  /* syntax/icode_generation.nit:1013 */
   fra.me.REG[0] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[0] = CALL_syntax___icode_generation___A2IContext___add_new_array(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], REGB0);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_syntax___icode_generation___AArrayExpr___generate_icode_1));
-  /* syntax/icode_generation.nit:1008 */
+  /* syntax/icode_generation.nit:1018 */
   goto label2;
   label2: while(0);
   stack_frame_head = fra.me.prev;
@@ -5076,7 +5181,7 @@ val_t syntax___icode_generation___AArrayExpr___generate_icode(val_t p0, val_t p1
     struct {struct stack_frame_t me;} fra;
     fun_t CREG[1];
     val_t tmp;
-    /* syntax/icode_generation.nit:1004 */
+    /* syntax/icode_generation.nit:1014 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_syntax___icode_generation;
     fra.me.line = 0;
@@ -5089,9 +5194,9 @@ val_t syntax___icode_generation___AArrayExpr___generate_icode(val_t p0, val_t p1
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* syntax/icode_generation.nit:1005 */
+    /* syntax/icode_generation.nit:1015 */
     fra.me.REG[0] = CALL_syntax___icode_generation___A2IContext___generate_expr(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
-    /* syntax/icode_generation.nit:1006 */
+    /* syntax/icode_generation.nit:1016 */
     CALL_syntax___icode_generation___A2IContext___add_call_array_add(closctx->REG[1])(closctx->REG[1], closctx->REG[0], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -5105,7 +5210,7 @@ val_t syntax___icode_generation___ACrangeExpr___generate_icode(val_t p0, val_t p
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1013;
+  fra.me.line = 1023;
   fra.me.meth = LOCATE_syntax___icode_generation___ACrangeExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5119,13 +5224,13 @@ val_t syntax___icode_generation___ACrangeExpr___generate_icode(val_t p0, val_t p
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:1015 */
+  /* syntax/icode_generation.nit:1025 */
   fra.me.REG[2] = CALL_parser___parser_nodes___ARangeExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/icode_generation.nit:1016 */
+  /* syntax/icode_generation.nit:1026 */
   fra.me.REG[3] = CALL_parser___parser_nodes___ARangeExpr___n_expr2(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1017 */
+  /* syntax/icode_generation.nit:1027 */
   fra.me.REG[4] = CALL_syntax___icode_generation___A2IContext___visitor(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[5] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[0])(fra.me.REG[0]);
   if (!once_value_1) {
@@ -5143,7 +5248,7 @@ val_t syntax___icode_generation___ACrangeExpr___generate_icode(val_t p0, val_t p
   } else fra.me.REG[6] = once_value_1;
   fra.me.REG[6] = fra.me.REG[6];
   fra.me.REG[6] = CALL_syntax___syntax_base___AbsSyntaxVisitor___get_method(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* syntax/icode_generation.nit:1018 */
+  /* syntax/icode_generation.nit:1028 */
   fra.me.REG[5] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Int(2);
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
@@ -5166,7 +5271,7 @@ val_t syntax___icode_generation___AOrangeExpr___generate_icode(val_t p0, val_t p
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1023;
+  fra.me.line = 1033;
   fra.me.meth = LOCATE_syntax___icode_generation___AOrangeExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5180,13 +5285,13 @@ val_t syntax___icode_generation___AOrangeExpr___generate_icode(val_t p0, val_t p
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:1025 */
+  /* syntax/icode_generation.nit:1035 */
   fra.me.REG[2] = CALL_parser___parser_nodes___ARangeExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/icode_generation.nit:1026 */
+  /* syntax/icode_generation.nit:1036 */
   fra.me.REG[3] = CALL_parser___parser_nodes___ARangeExpr___n_expr2(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1027 */
+  /* syntax/icode_generation.nit:1037 */
   fra.me.REG[4] = CALL_syntax___icode_generation___A2IContext___visitor(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[5] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[0])(fra.me.REG[0]);
   if (!once_value_1) {
@@ -5204,7 +5309,7 @@ val_t syntax___icode_generation___AOrangeExpr___generate_icode(val_t p0, val_t p
   } else fra.me.REG[6] = once_value_1;
   fra.me.REG[6] = fra.me.REG[6];
   fra.me.REG[6] = CALL_syntax___syntax_base___AbsSyntaxVisitor___get_method(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* syntax/icode_generation.nit:1028 */
+  /* syntax/icode_generation.nit:1038 */
   fra.me.REG[5] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Int(2);
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
@@ -5228,7 +5333,7 @@ val_t syntax___icode_generation___ASuperExpr___generate_icode(val_t p0, val_t p1
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1033;
+  fra.me.line = 1043;
   fra.me.meth = LOCATE_syntax___icode_generation___ASuperExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -5241,14 +5346,14 @@ val_t syntax___icode_generation___ASuperExpr___generate_icode(val_t p0, val_t p1
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:1035 */
+  /* syntax/icode_generation.nit:1045 */
   fra.me.REG[2] = CALL_icode___icode_builder___ICodeBuilder___iroutine(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[2] = CALL_icode___icode_base___IRoutine___params(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
   REGB1 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:240 */
   REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-  /* syntax/icode_generation.nit:1036 */
+  /* syntax/icode_generation.nit:1046 */
   fra.me.REG[2] = CALL_syntax___syntax_base___ASuperExpr___init_in_superclass(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -5264,48 +5369,48 @@ val_t syntax___icode_generation___ASuperExpr___generate_icode(val_t p0, val_t p1
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/icode_generation.nit:1037 */
+    /* syntax/icode_generation.nit:1047 */
     fra.me.REG[2] = CALL_syntax___syntax_base___ASuperExpr___init_in_superclass(fra.me.REG[0])(fra.me.REG[0]);
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1037);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1047);
     }
     fra.me.REG[2] = CALL_metamodel___static_type___MMLocalProperty___signature(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_syntax___icode_generation, 1037);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1047);
     }
     REGB0 = CALL_metamodel___static_type___MMSignature___arity(fra.me.REG[2])(fra.me.REG[2]);
     REGB1 = REGB0;
   }
-  /* syntax/icode_generation.nit:1039 */
+  /* syntax/icode_generation.nit:1049 */
   REGB0 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:238 */
   REGB0 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB0));
-  /* syntax/icode_generation.nit:1039 */
+  /* syntax/icode_generation.nit:1049 */
   fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
-  /* syntax/icode_generation.nit:1040 */
+  /* syntax/icode_generation.nit:1050 */
   fra.me.REG[3] = CALL_icode___icode_builder___ICodeBuilder___iroutine(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[3] = CALL_icode___icode_base___IRoutine___params(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = TAG_Int(0);
   fra.me.REG[3] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB0);
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1041 */
+  /* syntax/icode_generation.nit:1051 */
   fra.me.REG[3] = CALL_parser___parser_nodes___ASuperExpr___n_args(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_parser___parser_nodes___AExprs___n_exprs(fra.me.REG[3])(fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1042 */
+  /* syntax/icode_generation.nit:1052 */
   REGB0 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
   REGB2 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB1));
   if (UNTAG_Bool(REGB2)) {
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB0 = TAG_Bool((REGB0)==(REGB1));
-    /* syntax/icode_generation.nit:1042 */
+    /* syntax/icode_generation.nit:1052 */
     REGB2 = REGB0;
   }
   REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
   if (UNTAG_Bool(REGB2)) {
-    /* syntax/icode_generation.nit:1043 */
+    /* syntax/icode_generation.nit:1053 */
     REGB2 = TAG_Int(0);
     /* ../lib/standard/kernel.nit:355 */
     while(1) {
@@ -5318,15 +5423,15 @@ val_t syntax___icode_generation___ASuperExpr___generate_icode(val_t p0, val_t p1
       REGB0 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB1));
       /* ../lib/standard/kernel.nit:355 */
       if (UNTAG_Bool(REGB0)) {
-        /* syntax/icode_generation.nit:1043 */
+        /* syntax/icode_generation.nit:1053 */
         REGB0 = REGB2;
-        /* syntax/icode_generation.nit:1044 */
+        /* syntax/icode_generation.nit:1054 */
         fra.me.REG[4] = CALL_icode___icode_builder___ICodeBuilder___iroutine(fra.me.REG[1])(fra.me.REG[1]);
         fra.me.REG[4] = CALL_icode___icode_base___IRoutine___params(fra.me.REG[4])(fra.me.REG[4]);
         REGB3 = TAG_Int(1);
         /* ../lib/standard/kernel.nit:238 */
         REGB3 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB3));
-        /* syntax/icode_generation.nit:1044 */
+        /* syntax/icode_generation.nit:1054 */
         fra.me.REG[4] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB3);
         CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
         /* ../lib/standard/kernel.nit:357 */
@@ -5344,9 +5449,9 @@ val_t syntax___icode_generation___ASuperExpr___generate_icode(val_t p0, val_t p1
   } else {
     CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_syntax___icode_generation___ASuperExpr___generate_icode_2));
   }
-  /* syntax/icode_generation.nit:1051 */
+  /* syntax/icode_generation.nit:1061 */
   fra.me.REG[3] = CALL_syntax___syntax_base___ASuperExpr___init_in_superclass(fra.me.REG[0])(fra.me.REG[0]);
-  /* syntax/icode_generation.nit:1052 */
+  /* syntax/icode_generation.nit:1062 */
   REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
   } else {
@@ -5361,18 +5466,18 @@ val_t syntax___icode_generation___ASuperExpr___generate_icode(val_t p0, val_t p1
   }
   REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
   if (UNTAG_Bool(REGB2)) {
-    /* syntax/icode_generation.nit:1053 */
+    /* syntax/icode_generation.nit:1063 */
     REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1053);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1063);
     }
     fra.me.REG[4] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[3])(fra.me.REG[3]);
     REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1053);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1063);
     }
     fra.me.REG[4] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[4])(fra.me.REG[4]);
-    /* syntax/icode_generation.nit:1054 */
+    /* syntax/icode_generation.nit:1064 */
     REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
     } else {
@@ -5387,34 +5492,34 @@ val_t syntax___icode_generation___ASuperExpr___generate_icode(val_t p0, val_t p1
     }
     REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
     if (UNTAG_Bool(REGB2)) {
-      /* syntax/icode_generation.nit:1055 */
+      /* syntax/icode_generation.nit:1065 */
       fra.me.REG[5] = NEW_ICall_icode___icode_base___ICall___init(fra.me.REG[3], fra.me.REG[2]);
       fra.me.REG[4] = CALL_icode___icode_builder___ICodeBuilder___expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5], fra.me.REG[4]);
       goto label3;
     } else {
-      /* syntax/icode_generation.nit:1057 */
+      /* syntax/icode_generation.nit:1067 */
       fra.me.REG[5] = NEW_ICall_icode___icode_base___ICall___init(fra.me.REG[3], fra.me.REG[2]);
       CALL_icode___icode_builder___ICodeBuilder___stmt(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-      /* syntax/icode_generation.nit:1058 */
+      /* syntax/icode_generation.nit:1068 */
       fra.me.REG[4] = NIT_NULL;
       goto label3;
     }
   } else {
-    /* syntax/icode_generation.nit:1061 */
+    /* syntax/icode_generation.nit:1071 */
     fra.me.REG[0] = CALL_syntax___syntax_base___AAbsSendExpr___prop(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[3] = fra.me.REG[0];
-    /* syntax/icode_generation.nit:1062 */
+    /* syntax/icode_generation.nit:1072 */
     REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1062);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1072);
     }
     fra.me.REG[0] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[3])(fra.me.REG[3]);
     REGB2 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1062);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1072);
     }
     fra.me.REG[0] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[0])(fra.me.REG[0]);
-    /* syntax/icode_generation.nit:1063 */
+    /* syntax/icode_generation.nit:1073 */
     REGB2 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
     } else {
@@ -5428,14 +5533,14 @@ val_t syntax___icode_generation___ASuperExpr___generate_icode(val_t p0, val_t p1
       }
     }
     if (UNTAG_Bool(REGB2)) {
-      /* syntax/icode_generation.nit:1064 */
+      /* syntax/icode_generation.nit:1074 */
       fra.me.REG[5] = NEW_ISuper_icode___icode_base___ISuper___init(fra.me.REG[3], fra.me.REG[2]);
       CALL_icode___icode_builder___ICodeBuilder___stmt(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-      /* syntax/icode_generation.nit:1065 */
+      /* syntax/icode_generation.nit:1075 */
       fra.me.REG[4] = NIT_NULL;
       goto label3;
     } else {
-      /* syntax/icode_generation.nit:1067 */
+      /* syntax/icode_generation.nit:1077 */
       fra.me.REG[2] = NEW_ISuper_icode___icode_base___ISuper___init(fra.me.REG[3], fra.me.REG[2]);
       fra.me.REG[0] = CALL_icode___icode_builder___ICodeBuilder___expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[0]);
       fra.me.REG[4] = fra.me.REG[0];
@@ -5450,7 +5555,7 @@ val_t syntax___icode_generation___ASuperExpr___generate_icode(val_t p0, val_t p1
       struct {struct stack_frame_t me;} fra;
       fun_t CREG[1];
       val_t tmp;
-      /* syntax/icode_generation.nit:1047 */
+      /* syntax/icode_generation.nit:1057 */
       fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
       fra.me.file = LOCATE_syntax___icode_generation;
       fra.me.line = 0;
@@ -5463,7 +5568,7 @@ val_t syntax___icode_generation___ASuperExpr___generate_icode(val_t p0, val_t p1
       fra.me.closure_funs = CREG;
       fra.me.REG[0] = p0;
       CREG[0] = clos_fun0;
-      /* syntax/icode_generation.nit:1048 */
+      /* syntax/icode_generation.nit:1058 */
       fra.me.REG[0] = CALL_syntax___icode_generation___A2IContext___generate_expr(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
       CALL_standard___collection___abstract_collection___SimpleCollection___add(closctx->REG[2])(closctx->REG[2], fra.me.REG[0]);
       stack_frame_head = fra.me.prev;
@@ -5476,7 +5581,7 @@ val_t syntax___icode_generation___AAttrExpr___generate_icode(val_t p0, val_t p1)
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1074;
+  fra.me.line = 1084;
   fra.me.meth = LOCATE_syntax___icode_generation___AAttrExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5487,17 +5592,17 @@ val_t syntax___icode_generation___AAttrExpr___generate_icode(val_t p0, val_t p1)
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:1076 */
+  /* syntax/icode_generation.nit:1086 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AAttrFormExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/icode_generation.nit:1077 */
+  /* syntax/icode_generation.nit:1087 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AAttrFormExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[3])(fra.me.REG[3]);
   if (UNTAG_Bool(REGB0)) {
     CALL_icode___icode_builder___ICodeBuilder___add_null_reciever_check(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* syntax/icode_generation.nit:1078 */
+  /* syntax/icode_generation.nit:1088 */
   fra.me.REG[0] = CALL_syntax___syntax_base___AAttrFormExpr___prop(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_icode___icode_builder___ICodeBuilder___add_attr_read(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[2]);
   goto label1;
@@ -5512,7 +5617,7 @@ val_t syntax___icode_generation___AAttrAssignExpr___generate_icode(val_t p0, val
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1083;
+  fra.me.line = 1093;
   fra.me.meth = LOCATE_syntax___icode_generation___AAttrAssignExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5523,24 +5628,24 @@ val_t syntax___icode_generation___AAttrAssignExpr___generate_icode(val_t p0, val
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:1085 */
+  /* syntax/icode_generation.nit:1095 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AAttrFormExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/icode_generation.nit:1086 */
+  /* syntax/icode_generation.nit:1096 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AAttrFormExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[3])(fra.me.REG[3]);
   if (UNTAG_Bool(REGB0)) {
     CALL_icode___icode_builder___ICodeBuilder___add_null_reciever_check(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* syntax/icode_generation.nit:1087 */
+  /* syntax/icode_generation.nit:1097 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AAssignFormExpr___n_value(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1088 */
+  /* syntax/icode_generation.nit:1098 */
   fra.me.REG[0] = CALL_syntax___syntax_base___AAttrFormExpr___prop(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = NEW_IAttrWrite_icode___icode_base___IAttrWrite___init(fra.me.REG[0], fra.me.REG[2], fra.me.REG[3]);
   CALL_icode___icode_builder___ICodeBuilder___stmt(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1089 */
+  /* syntax/icode_generation.nit:1099 */
   fra.me.REG[3] = NIT_NULL;
   goto label1;
   label1: while(0);
@@ -5554,7 +5659,7 @@ val_t syntax___icode_generation___AAttrReassignExpr___generate_icode(val_t p0, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1093;
+  fra.me.line = 1103;
   fra.me.meth = LOCATE_syntax___icode_generation___AAttrReassignExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5568,25 +5673,25 @@ val_t syntax___icode_generation___AAttrReassignExpr___generate_icode(val_t p0, v
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:1095 */
+  /* syntax/icode_generation.nit:1105 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AAttrFormExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/icode_generation.nit:1096 */
+  /* syntax/icode_generation.nit:1106 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AAttrFormExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[3])(fra.me.REG[3]);
   if (UNTAG_Bool(REGB0)) {
     CALL_icode___icode_builder___ICodeBuilder___add_null_reciever_check(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* syntax/icode_generation.nit:1097 */
+  /* syntax/icode_generation.nit:1107 */
   fra.me.REG[3] = CALL_syntax___syntax_base___AAttrFormExpr___prop(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = NEW_IAttrRead_icode___icode_base___IAttrRead___init(fra.me.REG[3], fra.me.REG[2]);
   fra.me.REG[4] = CALL_syntax___syntax_base___AAttrFormExpr___attr_type(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_icode___icode_builder___ICodeBuilder___expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3], fra.me.REG[4]);
-  /* syntax/icode_generation.nit:1098 */
+  /* syntax/icode_generation.nit:1108 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AReassignFormExpr___n_value(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1099 */
+  /* syntax/icode_generation.nit:1109 */
   fra.me.REG[5] = CALL_syntax___syntax_base___AReassignFormExpr___assign_method(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Int(2);
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
@@ -5595,11 +5700,11 @@ val_t syntax___icode_generation___AAttrReassignExpr___generate_icode(val_t p0, v
   fra.me.REG[6] = NEW_ICall_icode___icode_base___ICall___init(fra.me.REG[5], fra.me.REG[6]);
   fra.me.REG[5] = CALL_syntax___syntax_base___AAttrFormExpr___attr_type(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[5] = CALL_icode___icode_builder___ICodeBuilder___expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6], fra.me.REG[5]);
-  /* syntax/icode_generation.nit:1100 */
+  /* syntax/icode_generation.nit:1110 */
   fra.me.REG[0] = CALL_syntax___syntax_base___AAttrFormExpr___prop(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[5] = NEW_IAttrWrite_icode___icode_base___IAttrWrite___init(fra.me.REG[0], fra.me.REG[2], fra.me.REG[5]);
   CALL_icode___icode_builder___ICodeBuilder___stmt(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* syntax/icode_generation.nit:1101 */
+  /* syntax/icode_generation.nit:1111 */
   fra.me.REG[5] = NIT_NULL;
   goto label1;
   label1: while(0);
@@ -5613,7 +5718,7 @@ val_t syntax___icode_generation___AIssetAttrExpr___generate_icode(val_t p0, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1106;
+  fra.me.line = 1116;
   fra.me.meth = LOCATE_syntax___icode_generation___AIssetAttrExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5624,17 +5729,17 @@ val_t syntax___icode_generation___AIssetAttrExpr___generate_icode(val_t p0, val_
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:1108 */
+  /* syntax/icode_generation.nit:1118 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AAttrFormExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/icode_generation.nit:1109 */
+  /* syntax/icode_generation.nit:1119 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AAttrFormExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[3])(fra.me.REG[3]);
   if (UNTAG_Bool(REGB0)) {
     CALL_icode___icode_builder___ICodeBuilder___add_null_reciever_check(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* syntax/icode_generation.nit:1110 */
+  /* syntax/icode_generation.nit:1120 */
   fra.me.REG[3] = CALL_syntax___syntax_base___AAttrFormExpr___prop(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = NEW_IAttrIsset_icode___icode_base___IAttrIsset___init(fra.me.REG[3], fra.me.REG[2]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[0])(fra.me.REG[0]);
@@ -5661,7 +5766,7 @@ void syntax___icode_generation___AAbsAbsSendExpr___generate_icode_for_arguments_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1115;
+  fra.me.line = 1125;
   fra.me.meth = LOCATE_syntax___icode_generation___AAbsAbsSendExpr___generate_icode_for_arguments_in;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5677,11 +5782,11 @@ void syntax___icode_generation___AAbsAbsSendExpr___generate_icode_for_arguments_
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* syntax/icode_generation.nit:1118 */
+  /* syntax/icode_generation.nit:1128 */
   REGB0 = CALL_metamodel___static_type___MMSignature___arity(fra.me.REG[3])(fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1119 */
+  /* syntax/icode_generation.nit:1129 */
   REGB1 = CALL_metamodel___vararg___MMSignature___vararg_rank(fra.me.REG[3])(fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1120 */
+  /* syntax/icode_generation.nit:1130 */
   fra.me.REG[0] = CALL_syntax___syntax_base___AAbsAbsSendExpr___raw_arguments(fra.me.REG[0])(fra.me.REG[0]);
   /* ../lib/standard/collection/array.nit:24 */
   REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
@@ -5690,9 +5795,9 @@ void syntax___icode_generation___AAbsAbsSendExpr___generate_icode_for_arguments_
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[0]);
-  /* syntax/icode_generation.nit:1122 */
+  /* syntax/icode_generation.nit:1132 */
   REGB3 = TAG_Int(0);
-  /* syntax/icode_generation.nit:1123 */
+  /* syntax/icode_generation.nit:1133 */
   REGB4 = TAG_Int(0);
   /* ../lib/standard/kernel.nit:350 */
   REGB5 = REGB0;
@@ -5707,28 +5812,28 @@ void syntax___icode_generation___AAbsAbsSendExpr___generate_icode_for_arguments_
     REGB6 = TAG_Bool(UNTAG_Int(REGB4)<UNTAG_Int(REGB5));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB6)) {
-      /* syntax/icode_generation.nit:1123 */
+      /* syntax/icode_generation.nit:1133 */
       REGB6 = REGB4;
-      /* syntax/icode_generation.nit:1125 */
+      /* syntax/icode_generation.nit:1135 */
       fra.me.REG[4] = CALL_metamodel___static_type___MMSignature_____bra(fra.me.REG[3])(fra.me.REG[3], REGB6);
-      /* syntax/icode_generation.nit:1126 */
+      /* syntax/icode_generation.nit:1136 */
       REGB7 = TAG_Bool(IS_EQUAL_OO(REGB6,REGB1));
       if (UNTAG_Bool(REGB7)) {
       } else {
         /* ../lib/standard/kernel.nit:230 */
         REGB6 = TAG_Bool((REGB6)==(REGB1));
-        /* syntax/icode_generation.nit:1126 */
+        /* syntax/icode_generation.nit:1136 */
         REGB7 = REGB6;
       }
       if (UNTAG_Bool(REGB7)) {
-        /* syntax/icode_generation.nit:1127 */
+        /* syntax/icode_generation.nit:1137 */
         fra.me.REG[5] = CALL_syntax___icode_generation___A2IContext___visitor(fra.me.REG[1])(fra.me.REG[1]);
         fra.me.REG[4] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_array(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
         /* ../lib/standard/kernel.nit:240 */
         REGB7 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB0));
-        /* syntax/icode_generation.nit:1127 */
+        /* syntax/icode_generation.nit:1137 */
         fra.me.REG[4] = CALL_syntax___icode_generation___A2IContext___add_new_array(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4], REGB7);
-        /* syntax/icode_generation.nit:1128 */
+        /* syntax/icode_generation.nit:1138 */
         REGB7 = TAG_Int(0);
         /* ../lib/standard/kernel.nit:240 */
         REGB6 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB0));
@@ -5785,19 +5890,19 @@ void syntax___icode_generation___AAbsAbsSendExpr___generate_icode_for_arguments_
             if (UNTAG_Bool(REGB9)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB8)];
             /* ../lib/standard/collection/array.nit:281 */
             goto label1;
             label1: while(0);
-            /* syntax/icode_generation.nit:1130 */
+            /* syntax/icode_generation.nit:1140 */
             fra.me.REG[6] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
             CALL_syntax___icode_generation___A2IContext___add_call_array_add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4], fra.me.REG[6]);
-            /* syntax/icode_generation.nit:1131 */
+            /* syntax/icode_generation.nit:1141 */
             REGB8 = TAG_Int(1);
             /* ../lib/standard/kernel.nit:238 */
             REGB8 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB8));
-            /* syntax/icode_generation.nit:1131 */
+            /* syntax/icode_generation.nit:1141 */
             REGB3 = REGB8;
             /* ../lib/standard/kernel.nit:346 */
             REGB8 = TAG_Int(1);
@@ -5811,7 +5916,7 @@ void syntax___icode_generation___AAbsAbsSendExpr___generate_icode_for_arguments_
           }
         }
         label2: while(0);
-        /* syntax/icode_generation.nit:1133 */
+        /* syntax/icode_generation.nit:1143 */
         CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
       } else {
         /* ../lib/standard/collection/array.nit:278 */
@@ -5856,21 +5961,21 @@ void syntax___icode_generation___AAbsAbsSendExpr___generate_icode_for_arguments_
         if (UNTAG_Bool(REGB6)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB7)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label3;
         label3: while(0);
-        /* syntax/icode_generation.nit:1135 */
+        /* syntax/icode_generation.nit:1145 */
         fra.me.REG[5] = fra.me.REG[4];
-        /* syntax/icode_generation.nit:1136 */
+        /* syntax/icode_generation.nit:1146 */
         fra.me.REG[5] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
         CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
-        /* syntax/icode_generation.nit:1137 */
+        /* syntax/icode_generation.nit:1147 */
         REGB7 = TAG_Int(1);
         /* ../lib/standard/kernel.nit:238 */
         REGB7 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB7));
-        /* syntax/icode_generation.nit:1137 */
+        /* syntax/icode_generation.nit:1147 */
         REGB3 = REGB7;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -5899,7 +6004,7 @@ val_t syntax___icode_generation___ASendExpr___generate_icode(val_t p0, val_t p1)
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1144;
+  fra.me.line = 1154;
   fra.me.meth = LOCATE_syntax___icode_generation___ASendExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 16;
@@ -5922,41 +6027,41 @@ val_t syntax___icode_generation___ASendExpr___generate_icode(val_t p0, val_t p1)
   fra.me.REG[15] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:1144 */
+  /* syntax/icode_generation.nit:1154 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* syntax/icode_generation.nit:1146 */
+  /* syntax/icode_generation.nit:1156 */
   fra.me.REG[3] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[3] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1147 */
+  /* syntax/icode_generation.nit:1157 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* syntax/icode_generation.nit:1148 */
+  /* syntax/icode_generation.nit:1158 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1149 */
+  /* syntax/icode_generation.nit:1159 */
   fra.me.REG[3] = CALL_syntax___syntax_base___AAbsSendExpr___prop(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/icode_generation.nit:1150 */
+  /* syntax/icode_generation.nit:1160 */
   fra.me.REG[5] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_metamodel___static_type___MMSignature, ID_metamodel___static_type___MMSignature)) /*cast MMSignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___icode_generation, 1150);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___icode_generation, 1160);
   }
   CALL_syntax___icode_generation___AAbsAbsSendExpr___generate_icode_for_arguments_in(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1], fra.me.REG[4], fra.me.REG[5]);
-  /* syntax/icode_generation.nit:1151 */
+  /* syntax/icode_generation.nit:1161 */
   fra.me.REG[5] = NIT_NULL;
-  /* syntax/icode_generation.nit:1155 */
+  /* syntax/icode_generation.nit:1165 */
   fra.me.REG[0] = CALL_icode___icode_builder___ICodeBuilder___seq(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/icode_generation.nit:1156 */
+  /* syntax/icode_generation.nit:1166 */
   fra.me.REG[6] = NIT_NULL;
-  /* syntax/icode_generation.nit:1157 */
+  /* syntax/icode_generation.nit:1167 */
   fra.me.REG[7] = CALL_syntax___syntax_base___AAbsAbsSendExpr___prop_signature(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[7] = CALL_metamodel___static_type___MMSignature___closures(fra.me.REG[7])(fra.me.REG[7]);
   REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/icode_generation.nit:1158 */
+    /* syntax/icode_generation.nit:1168 */
     fra.me.REG[7] = CALL_syntax___syntax_base___AAbsAbsSendExpr___prop_signature(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[7] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[7])(fra.me.REG[7]);
-    /* syntax/icode_generation.nit:1159 */
+    /* syntax/icode_generation.nit:1169 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -5971,22 +6076,22 @@ val_t syntax___icode_generation___ASendExpr___generate_icode(val_t p0, val_t p1)
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/icode_generation.nit:1160 */
+      /* syntax/icode_generation.nit:1170 */
       fra.me.REG[7] = CALL_icode___icode_builder___ICodeBuilder___new_register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
       fra.me.REG[5] = fra.me.REG[7];
     }
-    /* syntax/icode_generation.nit:1162 */
+    /* syntax/icode_generation.nit:1172 */
     fra.me.REG[7] = NEW_ISeq_icode___icode_base___ISeq___init();
-    /* syntax/icode_generation.nit:1163 */
+    /* syntax/icode_generation.nit:1173 */
     CALL_icode___icode_builder___ICodeBuilder___stmt(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-    /* syntax/icode_generation.nit:1164 */
+    /* syntax/icode_generation.nit:1174 */
     CALL_icode___icode_builder___ICodeBuilder___seq__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-    /* syntax/icode_generation.nit:1165 */
+    /* syntax/icode_generation.nit:1175 */
     fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
     fra.me.REG[6] = fra.me.REG[8];
-    /* syntax/icode_generation.nit:1166 */
+    /* syntax/icode_generation.nit:1176 */
     REGB0 = TAG_Int(0);
-    /* syntax/icode_generation.nit:1167 */
+    /* syntax/icode_generation.nit:1177 */
     fra.me.REG[8] = CALL_syntax___syntax_base___ASendExpr___closure_defs(fra.me.REG[2])(fra.me.REG[2]);
     REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
@@ -6005,7 +6110,7 @@ val_t syntax___icode_generation___ASendExpr___generate_icode(val_t p0, val_t p1)
       fra.me.REG[8] = CALL_syntax___syntax_base___ASendExpr___closure_defs(fra.me.REG[2])(fra.me.REG[2]);
       REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1167);
+        nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1177);
       }
       /* ../lib/standard/collection/array.nit:24 */
       REGB0 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[8])!=NIT_NULL);
@@ -6015,9 +6120,9 @@ val_t syntax___icode_generation___ASendExpr___generate_icode(val_t p0, val_t p1)
       }
       REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[8]);
     }
-    /* syntax/icode_generation.nit:1168 */
+    /* syntax/icode_generation.nit:1178 */
     fra.me.REG[8] = CALL_syntax___syntax_base___ASendExpr___closure_defs(fra.me.REG[2])(fra.me.REG[2]);
-    /* syntax/icode_generation.nit:1169 */
+    /* syntax/icode_generation.nit:1179 */
     fra.me.REG[9] = CALL_syntax___syntax_base___AAbsAbsSendExpr___prop_signature(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[9] = CALL_metamodel___static_type___MMSignature___closures(fra.me.REG[9])(fra.me.REG[9]);
     /* ../lib/standard/collection/array.nit:269 */
@@ -6054,13 +6159,13 @@ val_t syntax___icode_generation___ASendExpr___generate_icode(val_t p0, val_t p1)
         if (UNTAG_Bool(REGB1)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[11] = ((Nit_NativeArray)fra.me.REG[10])->val[UNTAG_Int(REGB0)];
-        /* syntax/icode_generation.nit:1170 */
+        /* syntax/icode_generation.nit:1180 */
         REGB1 = TAG_Bool(0);
-        /* syntax/icode_generation.nit:1171 */
+        /* syntax/icode_generation.nit:1181 */
         fra.me.REG[11] = CALL_metamodel___static_type___MMClosure___name(fra.me.REG[11])(fra.me.REG[11]);
-        /* syntax/icode_generation.nit:1172 */
+        /* syntax/icode_generation.nit:1182 */
         REGB2 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
         } else {
@@ -6075,10 +6180,10 @@ val_t syntax___icode_generation___ASendExpr___generate_icode(val_t p0, val_t p1)
         }
         REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
         if (UNTAG_Bool(REGB2)) {
-          /* syntax/icode_generation.nit:1173 */
+          /* syntax/icode_generation.nit:1183 */
           REGB2 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
           if (UNTAG_Bool(REGB2)) {
-            nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1173);
+            nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1183);
           }
           /* ../lib/standard/collection/array.nit:266 */
           fra.me.REG[12] = fra.me.REG[8];
@@ -6116,9 +6221,9 @@ val_t syntax___icode_generation___ASendExpr___generate_icode(val_t p0, val_t p1)
               if (UNTAG_Bool(REGB3)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
               }
-              /* ../lib/standard/collection/array.nit:718 */
+              /* ../lib/standard/collection/array.nit:724 */
               fra.me.REG[14] = ((Nit_NativeArray)fra.me.REG[13])->val[UNTAG_Int(REGB2)];
-              /* syntax/icode_generation.nit:1174 */
+              /* syntax/icode_generation.nit:1184 */
               fra.me.REG[15] = CALL_parser___parser_nodes___AClosureDef___n_id(fra.me.REG[14])(fra.me.REG[14]);
               fra.me.REG[15] = CALL_syntax___typing___AClosureId___to_symbol(fra.me.REG[15])(fra.me.REG[15]);
               REGB3 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[15],fra.me.REG[11]));
@@ -6131,43 +6236,43 @@ val_t syntax___icode_generation___ASendExpr___generate_icode(val_t p0, val_t p1)
               if (UNTAG_Bool(REGB3)) {
                goto label1;
               }
-              /* syntax/icode_generation.nit:1175 */
+              /* syntax/icode_generation.nit:1185 */
               REGB3 = TAG_Bool(0);
               REGB4 = TAG_Bool(IS_EQUAL_OO(REGB1,REGB3));
               if (UNTAG_Bool(REGB4)) {
               } else {
                /* ../lib/standard/kernel.nit:198 */
                REGB3 = TAG_Bool((REGB1)==(REGB3));
-               /* syntax/icode_generation.nit:1175 */
+               /* syntax/icode_generation.nit:1185 */
                REGB4 = REGB3;
               }
               if (UNTAG_Bool(REGB4)) {
               } else {
-               nit_abort("Assert failed", NULL, LOCATE_syntax___icode_generation, 1175);
+               nit_abort("Assert failed", NULL, LOCATE_syntax___icode_generation, 1185);
               }
-              /* syntax/icode_generation.nit:1176 */
+              /* syntax/icode_generation.nit:1186 */
               REGB4 = TAG_Bool(1);
               REGB1 = REGB4;
-              /* syntax/icode_generation.nit:1177 */
+              /* syntax/icode_generation.nit:1187 */
               fra.me.REG[15] = CALL_syntax___typing___AClosureDef___escapable(fra.me.REG[14])(fra.me.REG[14]);
               REGB4 = TAG_Bool(fra.me.REG[15]==NIT_NULL);
               if (UNTAG_Bool(REGB4)) {
-               nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1177);
+               nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1187);
               }
               CALL_syntax___icode_generation___EscapableBlock___break_seq__eq(fra.me.REG[15])(fra.me.REG[15], fra.me.REG[7]);
-              /* syntax/icode_generation.nit:1178 */
+              /* syntax/icode_generation.nit:1188 */
               fra.me.REG[15] = CALL_syntax___typing___AClosureDef___escapable(fra.me.REG[14])(fra.me.REG[14]);
               REGB4 = TAG_Bool(fra.me.REG[15]==NIT_NULL);
               if (UNTAG_Bool(REGB4)) {
-               nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1178);
+               nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1188);
               }
               CALL_syntax___icode_generation___EscapableBlock___break_value__eq(fra.me.REG[15])(fra.me.REG[15], fra.me.REG[5]);
-              /* syntax/icode_generation.nit:1179 */
+              /* syntax/icode_generation.nit:1189 */
               fra.me.REG[14] = CALL_syntax___icode_generation___AClosureDef___generate_iclosuredef(fra.me.REG[14])(fra.me.REG[14], fra.me.REG[1]);
-              /* syntax/icode_generation.nit:1180 */
+              /* syntax/icode_generation.nit:1190 */
               REGB4 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
               if (UNTAG_Bool(REGB4)) {
-               nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1180);
+               nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1190);
               }
               CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[14]);
               label1: while(0);
@@ -6184,13 +6289,13 @@ val_t syntax___icode_generation___ASendExpr___generate_icode(val_t p0, val_t p1)
           }
           label2: while(0);
         }
-        /* syntax/icode_generation.nit:1183 */
+        /* syntax/icode_generation.nit:1193 */
         REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
         if (UNTAG_Bool(REGB1)) {
-          /* syntax/icode_generation.nit:1184 */
+          /* syntax/icode_generation.nit:1194 */
           REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
           if (UNTAG_Bool(REGB1)) {
-            nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1184);
+            nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1194);
           }
           CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
         }
@@ -6207,15 +6312,15 @@ val_t syntax___icode_generation___ASendExpr___generate_icode(val_t p0, val_t p1)
     }
     label3: while(0);
   }
-  /* syntax/icode_generation.nit:1189 */
+  /* syntax/icode_generation.nit:1199 */
   fra.me.REG[6] = CALL_icode___icode_builder___ICodeBuilder___add_call(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3], fra.me.REG[4], fra.me.REG[6]);
-  /* syntax/icode_generation.nit:1192 */
+  /* syntax/icode_generation.nit:1202 */
   fra.me.REG[2] = CALL_syntax___syntax_base___AAbsAbsSendExpr___prop_signature(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[2] = CALL_metamodel___static_type___MMSignature___closures(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/icode_generation.nit:1193 */
+    /* syntax/icode_generation.nit:1203 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -6250,20 +6355,20 @@ val_t syntax___icode_generation___ASendExpr___generate_icode(val_t p0, val_t p1)
     if (UNTAG_Bool(REGB0)) {
       CALL_icode___icode_builder___ICodeBuilder___add_assignment(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5], fra.me.REG[6]);
     }
-    /* syntax/icode_generation.nit:1194 */
+    /* syntax/icode_generation.nit:1204 */
     CALL_icode___icode_builder___ICodeBuilder___seq__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   } else {
-    /* syntax/icode_generation.nit:1196 */
+    /* syntax/icode_generation.nit:1206 */
     fra.me.REG[5] = fra.me.REG[6];
   }
-  /* syntax/icode_generation.nit:1199 */
+  /* syntax/icode_generation.nit:1209 */
   fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = CALL_metamodel___abstractmetamodel___MMGlobalProperty___is_init(fra.me.REG[6])(fra.me.REG[6]);
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/icode_generation.nit:1200 */
+    /* syntax/icode_generation.nit:1210 */
     CALL_syntax___icode_generation___A2IContext___invoke_super_init_calls_after(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* syntax/icode_generation.nit:1202 */
+  /* syntax/icode_generation.nit:1212 */
   goto label4;
   label4: while(0);
   stack_frame_head = fra.me.prev;
@@ -6276,7 +6381,7 @@ val_t syntax___icode_generation___ASendReassignExpr___generate_icode(val_t p0, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1207;
+  fra.me.line = 1217;
   fra.me.meth = LOCATE_syntax___icode_generation___ASendReassignExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -6291,51 +6396,51 @@ val_t syntax___icode_generation___ASendReassignExpr___generate_icode(val_t p0, v
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:1207 */
+  /* syntax/icode_generation.nit:1217 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* syntax/icode_generation.nit:1209 */
+  /* syntax/icode_generation.nit:1219 */
   fra.me.REG[3] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[3] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1210 */
+  /* syntax/icode_generation.nit:1220 */
   fra.me.REG[4] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[4] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[4])(fra.me.REG[4]);
   REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[4])(fra.me.REG[4]);
   if (UNTAG_Bool(REGB0)) {
     CALL_icode___icode_builder___ICodeBuilder___add_null_reciever_check(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* syntax/icode_generation.nit:1211 */
+  /* syntax/icode_generation.nit:1221 */
   fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
-  /* syntax/icode_generation.nit:1212 */
+  /* syntax/icode_generation.nit:1222 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1213 */
+  /* syntax/icode_generation.nit:1223 */
   fra.me.REG[3] = CALL_syntax___syntax_base___ASendReassignExpr___read_prop(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[3] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_metamodel___static_type___MMSignature, ID_metamodel___static_type___MMSignature)) /*cast MMSignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___icode_generation, 1213);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___icode_generation, 1223);
   }
   CALL_syntax___icode_generation___AAbsAbsSendExpr___generate_icode_for_arguments_in(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1], fra.me.REG[4], fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1215 */
+  /* syntax/icode_generation.nit:1225 */
   fra.me.REG[3] = CALL_syntax___syntax_base___ASendReassignExpr___read_prop(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[3] = NEW_ICall_icode___icode_base___ICall___init(fra.me.REG[3], fra.me.REG[4]);
   fra.me.REG[5] = CALL_syntax___syntax_base___ASendReassignExpr___read_prop(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[5] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[5])(fra.me.REG[5]);
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1215);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1225);
   }
   fra.me.REG[5] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[5])(fra.me.REG[5]);
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_metamodel___static_type___MMType, ID_metamodel___static_type___MMType)) /*cast MMType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___icode_generation, 1215);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___icode_generation, 1225);
   }
   fra.me.REG[5] = CALL_icode___icode_builder___ICodeBuilder___expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3], fra.me.REG[5]);
-  /* syntax/icode_generation.nit:1216 */
+  /* syntax/icode_generation.nit:1226 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AReassignFormExpr___n_value(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[3] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1217 */
+  /* syntax/icode_generation.nit:1227 */
   fra.me.REG[6] = CALL_syntax___syntax_base___AReassignFormExpr___assign_method(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = TAG_Int(2);
   fra.me.REG[7] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
@@ -6346,24 +6451,24 @@ val_t syntax___icode_generation___ASendReassignExpr___generate_icode(val_t p0, v
   fra.me.REG[6] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[6])(fra.me.REG[6]);
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1217);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1227);
   }
   fra.me.REG[6] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[6])(fra.me.REG[6]);
   REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_metamodel___static_type___MMType, ID_metamodel___static_type___MMType)) /*cast MMType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___icode_generation, 1217);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___icode_generation, 1227);
   }
   fra.me.REG[6] = CALL_icode___icode_builder___ICodeBuilder___expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7], fra.me.REG[6]);
-  /* syntax/icode_generation.nit:1218 */
+  /* syntax/icode_generation.nit:1228 */
   fra.me.REG[4] = CALL_standard___collection___array___Collection___to_a(fra.me.REG[4])(fra.me.REG[4]);
-  /* syntax/icode_generation.nit:1219 */
+  /* syntax/icode_generation.nit:1229 */
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-  /* syntax/icode_generation.nit:1220 */
+  /* syntax/icode_generation.nit:1230 */
   fra.me.REG[2] = CALL_syntax___syntax_base___AAbsSendExpr___prop(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[4] = NEW_ICall_icode___icode_base___ICall___init(fra.me.REG[2], fra.me.REG[4]);
   CALL_icode___icode_builder___ICodeBuilder___stmt(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/icode_generation.nit:1221 */
+  /* syntax/icode_generation.nit:1231 */
   fra.me.REG[4] = NIT_NULL;
   goto label1;
   label1: while(0);
@@ -6377,7 +6482,7 @@ val_t syntax___icode_generation___ANewExpr___generate_icode(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1226;
+  fra.me.line = 1236;
   fra.me.meth = LOCATE_syntax___icode_generation___ANewExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -6389,20 +6494,20 @@ val_t syntax___icode_generation___ANewExpr___generate_icode(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:1226 */
+  /* syntax/icode_generation.nit:1236 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* syntax/icode_generation.nit:1228 */
+  /* syntax/icode_generation.nit:1238 */
   fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  /* syntax/icode_generation.nit:1229 */
+  /* syntax/icode_generation.nit:1239 */
   fra.me.REG[4] = CALL_syntax___syntax_base___AAbsSendExpr___prop(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[4] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[4])(fra.me.REG[4]);
   REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_metamodel___static_type___MMSignature, ID_metamodel___static_type___MMSignature)) /*cast MMSignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___icode_generation, 1229);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___icode_generation, 1239);
   }
   CALL_syntax___icode_generation___AAbsAbsSendExpr___generate_icode_for_arguments_in(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1], fra.me.REG[3], fra.me.REG[4]);
-  /* syntax/icode_generation.nit:1230 */
+  /* syntax/icode_generation.nit:1240 */
   fra.me.REG[4] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AAbsSendExpr___prop(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[3] = NEW_INew_icode___icode_base___INew___init(fra.me.REG[4], fra.me.REG[0], fra.me.REG[3]);
@@ -6419,7 +6524,7 @@ val_t syntax___icode_generation___AProxyExpr___generate_icode(val_t p0, val_t p1
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1235;
+  fra.me.line = 1245;
   fra.me.meth = LOCATE_syntax___icode_generation___AProxyExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6428,7 +6533,7 @@ val_t syntax___icode_generation___AProxyExpr___generate_icode(val_t p0, val_t p1
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:1237 */
+  /* syntax/icode_generation.nit:1247 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AProxyExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   goto label1;
@@ -6442,7 +6547,7 @@ val_t syntax___icode_generation___AOnceExpr___generate_icode(val_t p0, val_t p1)
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1242;
+  fra.me.line = 1252;
   fra.me.meth = LOCATE_syntax___icode_generation___AOnceExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -6454,24 +6559,24 @@ val_t syntax___icode_generation___AOnceExpr___generate_icode(val_t p0, val_t p1)
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:1244 */
+  /* syntax/icode_generation.nit:1254 */
   fra.me.REG[2] = NEW_IOnce_icode___icode_base___IOnce___init();
-  /* syntax/icode_generation.nit:1245 */
+  /* syntax/icode_generation.nit:1255 */
   fra.me.REG[3] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_icode___icode_builder___ICodeBuilder___expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1246 */
+  /* syntax/icode_generation.nit:1256 */
   fra.me.REG[4] = CALL_icode___icode_builder___ICodeBuilder___seq(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/icode_generation.nit:1247 */
+  /* syntax/icode_generation.nit:1257 */
   fra.me.REG[2] = CALL_icode___icode_base___IOnce___body(fra.me.REG[2])(fra.me.REG[2]);
   CALL_icode___icode_builder___ICodeBuilder___seq__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/icode_generation.nit:1249 */
+  /* syntax/icode_generation.nit:1259 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AProxyExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___icode_generation___A2IContext___generate_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* syntax/icode_generation.nit:1250 */
+  /* syntax/icode_generation.nit:1260 */
   CALL_icode___icode_builder___ICodeBuilder___add_assignment(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3], fra.me.REG[0]);
-  /* syntax/icode_generation.nit:1252 */
+  /* syntax/icode_generation.nit:1262 */
   CALL_icode___icode_builder___ICodeBuilder___seq__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/icode_generation.nit:1253 */
+  /* syntax/icode_generation.nit:1263 */
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -6489,7 +6594,7 @@ val_t syntax___icode_generation___AClosureDef___generate_iclosuredef(val_t p0, v
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1261;
+  fra.me.line = 1271;
   fra.me.meth = LOCATE_syntax___icode_generation___AClosureDef___generate_iclosuredef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -6503,14 +6608,14 @@ val_t syntax___icode_generation___AClosureDef___generate_iclosuredef(val_t p0, v
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:1261 */
+  /* syntax/icode_generation.nit:1271 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* syntax/icode_generation.nit:1264 */
+  /* syntax/icode_generation.nit:1274 */
   fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
-  /* syntax/icode_generation.nit:1265 */
+  /* syntax/icode_generation.nit:1275 */
   fra.me.REG[4] = CALL_syntax___syntax_base___AClosureDef___closure(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[4] = CALL_metamodel___static_type___MMClosure___signature(fra.me.REG[4])(fra.me.REG[4]);
-  /* syntax/icode_generation.nit:1266 */
+  /* syntax/icode_generation.nit:1276 */
   REGB0 = TAG_Int(0);
   REGB1 = CALL_metamodel___static_type___MMSignature___arity(fra.me.REG[4])(fra.me.REG[4]);
   /* ../lib/standard/kernel.nit:355 */
@@ -6524,9 +6629,9 @@ val_t syntax___icode_generation___AClosureDef___generate_iclosuredef(val_t p0, v
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* syntax/icode_generation.nit:1266 */
+      /* syntax/icode_generation.nit:1276 */
       REGB2 = REGB0;
-      /* syntax/icode_generation.nit:1267 */
+      /* syntax/icode_generation.nit:1277 */
       fra.me.REG[5] = CALL_metamodel___static_type___MMSignature_____bra(fra.me.REG[4])(fra.me.REG[4], REGB2);
       fra.me.REG[5] = CALL_icode___icode_builder___ICodeBuilder___new_register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
@@ -6542,11 +6647,11 @@ val_t syntax___icode_generation___AClosureDef___generate_iclosuredef(val_t p0, v
     }
   }
   label1: while(0);
-  /* syntax/icode_generation.nit:1269 */
+  /* syntax/icode_generation.nit:1279 */
   fra.me.REG[5] = NIT_NULL;
-  /* syntax/icode_generation.nit:1270 */
+  /* syntax/icode_generation.nit:1280 */
   fra.me.REG[4] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[4])(fra.me.REG[4]);
-  /* syntax/icode_generation.nit:1271 */
+  /* syntax/icode_generation.nit:1281 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6561,42 +6666,42 @@ val_t syntax___icode_generation___AClosureDef___generate_iclosuredef(val_t p0, v
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/icode_generation.nit:1272 */
+    /* syntax/icode_generation.nit:1282 */
     fra.me.REG[4] = CALL_icode___icode_builder___ICodeBuilder___new_register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
     fra.me.REG[5] = fra.me.REG[4];
   }
-  /* syntax/icode_generation.nit:1275 */
+  /* syntax/icode_generation.nit:1285 */
   fra.me.REG[5] = NEW_IClosureDef_icode___icode_base___IClosureDef___init(fra.me.REG[3], fra.me.REG[5]);
-  /* syntax/icode_generation.nit:1276 */
+  /* syntax/icode_generation.nit:1286 */
   fra.me.REG[3] = CALL_parser___parser_nodes___ANode___location(fra.me.REG[2])(fra.me.REG[2]);
   CALL_icode___icode_base___IRoutine___location__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1279 */
+  /* syntax/icode_generation.nit:1289 */
   fra.me.REG[3] = CALL_icode___icode_builder___ICodeBuilder___seq(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/icode_generation.nit:1280 */
+  /* syntax/icode_generation.nit:1290 */
   fra.me.REG[4] = CALL_icode___icode_base___IRoutine___body(fra.me.REG[5])(fra.me.REG[5]);
   CALL_icode___icode_builder___ICodeBuilder___seq__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/icode_generation.nit:1281 */
+  /* syntax/icode_generation.nit:1291 */
   fra.me.REG[4] = CALL_syntax___typing___AClosureDef___escapable(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[6] = CALL_icode___icode_base___IRoutine___body(fra.me.REG[5])(fra.me.REG[5]);
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1281);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1291);
   }
   CALL_syntax___icode_generation___EscapableBlock___continue_seq__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-  /* syntax/icode_generation.nit:1282 */
+  /* syntax/icode_generation.nit:1292 */
   fra.me.REG[6] = CALL_syntax___typing___AClosureDef___escapable(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[4] = CALL_icode___icode_base___IRoutine___result(fra.me.REG[5])(fra.me.REG[5]);
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1282);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1292);
   }
   CALL_syntax___icode_generation___EscapableBlock___continue_value__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
-  /* syntax/icode_generation.nit:1285 */
+  /* syntax/icode_generation.nit:1295 */
   REGB0 = TAG_Int(0);
   fra.me.REG[4] = CALL_syntax___syntax_base___AClosureDef___variables(fra.me.REG[2])(fra.me.REG[2]);
   REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1285);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1295);
   }
   /* ../lib/standard/collection/array.nit:24 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
@@ -6616,13 +6721,13 @@ val_t syntax___icode_generation___AClosureDef___generate_iclosuredef(val_t p0, v
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* syntax/icode_generation.nit:1285 */
+      /* syntax/icode_generation.nit:1295 */
       REGB2 = REGB0;
-      /* syntax/icode_generation.nit:1286 */
+      /* syntax/icode_generation.nit:1296 */
       fra.me.REG[4] = CALL_syntax___syntax_base___AClosureDef___variables(fra.me.REG[2])(fra.me.REG[2]);
       REGB3 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
-        nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1286);
+        nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1296);
       }
       /* ../lib/standard/collection/array.nit:278 */
       REGB3 = REGB2;
@@ -6665,14 +6770,14 @@ val_t syntax___icode_generation___AClosureDef___generate_iclosuredef(val_t p0, v
       if (UNTAG_Bool(REGB4)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB3)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label2;
       label2: while(0);
-      /* syntax/icode_generation.nit:1286 */
+      /* syntax/icode_generation.nit:1296 */
       fra.me.REG[4] = CALL_syntax___icode_generation___A2IContext___variable(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-      /* syntax/icode_generation.nit:1287 */
+      /* syntax/icode_generation.nit:1297 */
       fra.me.REG[6] = CALL_icode___icode_base___IRoutine___params(fra.me.REG[5])(fra.me.REG[5]);
       fra.me.REG[6] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[6])(fra.me.REG[6], REGB2);
       CALL_icode___icode_builder___ICodeBuilder___add_assignment(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4], fra.me.REG[6]);
@@ -6688,17 +6793,17 @@ val_t syntax___icode_generation___AClosureDef___generate_iclosuredef(val_t p0, v
     }
   }
   label3: while(0);
-  /* syntax/icode_generation.nit:1290 */
+  /* syntax/icode_generation.nit:1300 */
   fra.me.REG[6] = CALL_parser___parser_nodes___AClosureDef___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   CALL_syntax___icode_generation___A2IContext___generate_stmt(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-  /* syntax/icode_generation.nit:1293 */
+  /* syntax/icode_generation.nit:1303 */
   fra.me.REG[6] = CALL_syntax___syntax_base___AClosureDef___closure(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = CALL_metamodel___static_type___MMClosure___is_break(fra.me.REG[6])(fra.me.REG[6]);
   if (UNTAG_Bool(REGB0)) {
     fra.me.REG[6] = CALL_syntax___typing___AClosureDef___escapable(fra.me.REG[2])(fra.me.REG[2]);
     REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1293);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1303);
     }
     fra.me.REG[6] = CALL_syntax___icode_generation___EscapableBlock___break_value(fra.me.REG[6])(fra.me.REG[6]);
     REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
@@ -6718,25 +6823,25 @@ val_t syntax___icode_generation___AClosureDef___generate_iclosuredef(val_t p0, v
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/icode_generation.nit:1294 */
+    /* syntax/icode_generation.nit:1304 */
     fra.me.REG[6] = CALL_syntax___typing___AClosureDef___escapable(fra.me.REG[2])(fra.me.REG[2]);
     REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1294);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1304);
     }
     fra.me.REG[6] = CALL_syntax___icode_generation___EscapableBlock___break_seq(fra.me.REG[6])(fra.me.REG[6]);
     REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_syntax___icode_generation, 1294);
+      nit_abort("Cast failed", NULL, LOCATE_syntax___icode_generation, 1304);
     }
     CALL_icode___icode_builder___ICodeBuilder___add_escape(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
   }
-  /* syntax/icode_generation.nit:1297 */
+  /* syntax/icode_generation.nit:1307 */
   CALL_icode___icode_builder___ICodeBuilder___seq__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1298 */
+  /* syntax/icode_generation.nit:1308 */
   ATTR_syntax___icode_generation___AClosureDef____iclosure_def(fra.me.REG[2]) = fra.me.REG[5];
-  /* syntax/icode_generation.nit:1299 */
+  /* syntax/icode_generation.nit:1309 */
   goto label4;
   label4: while(0);
   stack_frame_head = fra.me.prev;
@@ -6751,7 +6856,7 @@ val_t syntax___icode_generation___AClosureCallExpr___generate_icode(val_t p0, va
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1304;
+  fra.me.line = 1314;
   fra.me.meth = LOCATE_syntax___icode_generation___AClosureCallExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -6767,22 +6872,22 @@ val_t syntax___icode_generation___AClosureCallExpr___generate_icode(val_t p0, va
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:1307 */
+  /* syntax/icode_generation.nit:1317 */
   fra.me.REG[2] = NEW_Array_standard___collection___array___Array___init();
-  /* syntax/icode_generation.nit:1308 */
+  /* syntax/icode_generation.nit:1318 */
   fra.me.REG[3] = CALL_syntax___syntax_base___AClosureCallExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___ClosureVariable___closure(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[3] = CALL_metamodel___static_type___MMClosure___signature(fra.me.REG[3])(fra.me.REG[3]);
   CALL_syntax___icode_generation___AAbsAbsSendExpr___generate_icode_for_arguments_in(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3]);
-  /* syntax/icode_generation.nit:1311 */
+  /* syntax/icode_generation.nit:1321 */
   fra.me.REG[3] = CALL_syntax___icode_generation___A2IContext___closurevariables(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[4] = CALL_syntax___syntax_base___AClosureCallExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
-  /* syntax/icode_generation.nit:1312 */
+  /* syntax/icode_generation.nit:1322 */
   fra.me.REG[3] = NEW_IClosCall_icode___icode_base___IClosCall___init(fra.me.REG[4], fra.me.REG[2]);
-  /* syntax/icode_generation.nit:1313 */
+  /* syntax/icode_generation.nit:1323 */
   fra.me.REG[5] = CALL_icode___icode_builder___ICodeBuilder___seq(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/icode_generation.nit:1316 */
+  /* syntax/icode_generation.nit:1326 */
   fra.me.REG[6] = CALL_parser___parser_nodes___AClosureCallExpr___n_closure_defs(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[6])(fra.me.REG[6]);
   REGB1 = TAG_Int(1);
@@ -6791,33 +6896,33 @@ val_t syntax___icode_generation___AClosureCallExpr___generate_icode(val_t p0, va
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB1 = TAG_Bool((REGB0)==(REGB1));
-    /* syntax/icode_generation.nit:1316 */
+    /* syntax/icode_generation.nit:1326 */
     REGB2 = REGB1;
   }
   if (UNTAG_Bool(REGB2)) {
-    /* syntax/icode_generation.nit:1317 */
+    /* syntax/icode_generation.nit:1327 */
     fra.me.REG[6] = NEW_ISeq_icode___icode_base___ISeq___init();
-    /* syntax/icode_generation.nit:1318 */
+    /* syntax/icode_generation.nit:1328 */
     CALL_icode___icode_base___IClosCall___break_seq__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
-    /* syntax/icode_generation.nit:1319 */
+    /* syntax/icode_generation.nit:1329 */
     CALL_icode___icode_builder___ICodeBuilder___seq__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-    /* syntax/icode_generation.nit:1320 */
+    /* syntax/icode_generation.nit:1330 */
     fra.me.REG[6] = CALL_parser___parser_nodes___AClosureCallExpr___n_closure_defs(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[6] = CALL_standard___collection___abstract_collection___Collection___first(fra.me.REG[6])(fra.me.REG[6]);
     REGB2 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1320);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1330);
     }
     fra.me.REG[6] = CALL_parser___parser_nodes___AClosureDef___n_expr(fra.me.REG[6])(fra.me.REG[6]);
     CALL_syntax___icode_generation___A2IContext___generate_stmt(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-    /* syntax/icode_generation.nit:1321 */
+    /* syntax/icode_generation.nit:1331 */
     CALL_icode___icode_builder___ICodeBuilder___seq__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
   }
-  /* syntax/icode_generation.nit:1325 */
+  /* syntax/icode_generation.nit:1335 */
   fra.me.REG[6] = NIT_NULL;
-  /* syntax/icode_generation.nit:1326 */
+  /* syntax/icode_generation.nit:1336 */
   fra.me.REG[7] = CALL_icode___icode_base___IClosureDecl___default(fra.me.REG[4])(fra.me.REG[4]);
-  /* syntax/icode_generation.nit:1327 */
+  /* syntax/icode_generation.nit:1337 */
   REGB2 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
   } else {
@@ -6832,31 +6937,31 @@ val_t syntax___icode_generation___AClosureCallExpr___generate_icode(val_t p0, va
   }
   REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
   if (UNTAG_Bool(REGB2)) {
-    /* syntax/icode_generation.nit:1328 */
+    /* syntax/icode_generation.nit:1338 */
     fra.me.REG[4] = NEW_IHasClos_icode___icode_base___IHasClos___init(fra.me.REG[4]);
     fra.me.REG[8] = CALL_syntax___icode_generation___A2IContext___visitor(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[8] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_bool(fra.me.REG[8])(fra.me.REG[8]);
     fra.me.REG[8] = CALL_icode___icode_builder___ICodeBuilder___expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4], fra.me.REG[8]);
     fra.me.REG[8] = NEW_IIf_icode___icode_base___IIf___init(fra.me.REG[8]);
     fra.me.REG[6] = fra.me.REG[8];
-    /* syntax/icode_generation.nit:1329 */
+    /* syntax/icode_generation.nit:1339 */
     CALL_icode___icode_builder___ICodeBuilder___stmt(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-    /* syntax/icode_generation.nit:1330 */
+    /* syntax/icode_generation.nit:1340 */
     REGB2 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1330);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1340);
     }
     fra.me.REG[8] = CALL_icode___icode_base___IIf___then_seq(fra.me.REG[6])(fra.me.REG[6]);
     CALL_icode___icode_builder___ICodeBuilder___seq__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[8]);
   }
-  /* syntax/icode_generation.nit:1334 */
+  /* syntax/icode_generation.nit:1344 */
   fra.me.REG[8] = NIT_NULL;
-  /* syntax/icode_generation.nit:1335 */
+  /* syntax/icode_generation.nit:1345 */
   fra.me.REG[0] = CALL_syntax___syntax_base___AClosureCallExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___ClosureVariable___closure(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_metamodel___static_type___MMClosure___signature(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[0])(fra.me.REG[0]);
-  /* syntax/icode_generation.nit:1336 */
+  /* syntax/icode_generation.nit:1346 */
   REGB2 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
   } else {
@@ -6870,16 +6975,16 @@ val_t syntax___icode_generation___AClosureCallExpr___generate_icode(val_t p0, va
     }
   }
   if (UNTAG_Bool(REGB2)) {
-    /* syntax/icode_generation.nit:1337 */
+    /* syntax/icode_generation.nit:1347 */
     CALL_icode___icode_builder___ICodeBuilder___stmt(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   } else {
-    /* syntax/icode_generation.nit:1339 */
+    /* syntax/icode_generation.nit:1349 */
     fra.me.REG[3] = CALL_icode___icode_builder___ICodeBuilder___expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3], fra.me.REG[0]);
     fra.me.REG[8] = fra.me.REG[3];
   }
-  /* syntax/icode_generation.nit:1343 */
+  /* syntax/icode_generation.nit:1353 */
   fra.me.REG[3] = NIT_NULL;
-  /* syntax/icode_generation.nit:1344 */
+  /* syntax/icode_generation.nit:1354 */
   REGB2 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
   } else {
@@ -6894,7 +6999,7 @@ val_t syntax___icode_generation___AClosureCallExpr___generate_icode(val_t p0, va
   }
   REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
   if (UNTAG_Bool(REGB2)) {
-    /* syntax/icode_generation.nit:1345 */
+    /* syntax/icode_generation.nit:1355 */
     REGB2 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
     } else {
@@ -6910,9 +7015,9 @@ val_t syntax___icode_generation___AClosureCallExpr___generate_icode(val_t p0, va
     REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
     if (UNTAG_Bool(REGB2)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_syntax___icode_generation, 1345);
+      nit_abort("Assert failed", NULL, LOCATE_syntax___icode_generation, 1355);
     }
-    /* syntax/icode_generation.nit:1346 */
+    /* syntax/icode_generation.nit:1356 */
     REGB2 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
     } else {
@@ -6927,7 +7032,7 @@ val_t syntax___icode_generation___AClosureCallExpr___generate_icode(val_t p0, va
     }
     REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
     if (UNTAG_Bool(REGB2)) {
-      /* syntax/icode_generation.nit:1347 */
+      /* syntax/icode_generation.nit:1357 */
       REGB2 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
       if (UNTAG_Bool(REGB2)) {
       } else {
@@ -6943,24 +7048,24 @@ val_t syntax___icode_generation___AClosureCallExpr___generate_icode(val_t p0, va
       REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
       if (UNTAG_Bool(REGB2)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_syntax___icode_generation, 1347);
+        nit_abort("Assert failed", NULL, LOCATE_syntax___icode_generation, 1357);
       }
-      /* syntax/icode_generation.nit:1348 */
+      /* syntax/icode_generation.nit:1358 */
       fra.me.REG[0] = CALL_icode___icode_builder___ICodeBuilder___new_register(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
       fra.me.REG[3] = fra.me.REG[0];
-      /* syntax/icode_generation.nit:1349 */
+      /* syntax/icode_generation.nit:1359 */
       CALL_icode___icode_builder___ICodeBuilder___add_assignment(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3], fra.me.REG[8]);
     }
-    /* syntax/icode_generation.nit:1351 */
+    /* syntax/icode_generation.nit:1361 */
     REGB2 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1351);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___icode_generation, 1361);
     }
     fra.me.REG[6] = CALL_icode___icode_base___IIf___else_seq(fra.me.REG[6])(fra.me.REG[6]);
     CALL_icode___icode_builder___ICodeBuilder___seq__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-    /* syntax/icode_generation.nit:1352 */
+    /* syntax/icode_generation.nit:1362 */
     fra.me.REG[2] = CALL_icode___icode_tools___ICodeBuilder___inline_routine(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7], fra.me.REG[2], NIT_NULL);
-    /* syntax/icode_generation.nit:1353 */
+    /* syntax/icode_generation.nit:1363 */
     REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
     } else {
@@ -6975,7 +7080,7 @@ val_t syntax___icode_generation___AClosureCallExpr___generate_icode(val_t p0, va
     }
     REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
     if (UNTAG_Bool(REGB2)) {
-      /* syntax/icode_generation.nit:1354 */
+      /* syntax/icode_generation.nit:1364 */
       REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB2)) {
       } else {
@@ -6991,18 +7096,18 @@ val_t syntax___icode_generation___AClosureCallExpr___generate_icode(val_t p0, va
       REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
       if (UNTAG_Bool(REGB2)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_syntax___icode_generation, 1354);
+        nit_abort("Assert failed", NULL, LOCATE_syntax___icode_generation, 1364);
       }
-      /* syntax/icode_generation.nit:1355 */
+      /* syntax/icode_generation.nit:1365 */
       CALL_icode___icode_builder___ICodeBuilder___add_assignment(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3], fra.me.REG[2]);
     }
-    /* syntax/icode_generation.nit:1357 */
+    /* syntax/icode_generation.nit:1367 */
     CALL_icode___icode_builder___ICodeBuilder___seq__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
   } else {
-    /* syntax/icode_generation.nit:1359 */
+    /* syntax/icode_generation.nit:1369 */
     fra.me.REG[3] = fra.me.REG[8];
   }
-  /* syntax/icode_generation.nit:1361 */
+  /* syntax/icode_generation.nit:1371 */
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -7014,7 +7119,7 @@ val_t syntax___icode_generation___ADebugTypeExpr___generate_icode(val_t p0, val_
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___icode_generation;
-  fra.me.line = 1366;
+  fra.me.line = 1376;
   fra.me.meth = LOCATE_syntax___icode_generation___ADebugTypeExpr___generate_icode;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7023,7 +7128,7 @@ val_t syntax___icode_generation___ADebugTypeExpr___generate_icode(val_t p0, val_
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/icode_generation.nit:1369 */
+  /* syntax/icode_generation.nit:1379 */
   fra.me.REG[1] = NIT_NULL;
   goto label1;
   label1: while(0);
index b70d82c..89f3426 100644 (file)
@@ -188,7 +188,7 @@ val_t NEW_ANode_parser___parser_nodes___ANode___init();
 void syntax___icode_generation___AAttrPropdef___accept_icode_generation(val_t p0, val_t p1);
 typedef void (*syntax___icode_generation___AAttrPropdef___accept_icode_generation_t)(val_t p0, val_t p1);
 val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___empty_init();
-val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9);
+val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10);
 val_t NEW_AAttrPropdef_parser___parser_nodes___ANode___init();
 void syntax___icode_generation___AMethPropdef___accept_icode_generation(val_t p0, val_t p1);
 typedef void (*syntax___icode_generation___AMethPropdef___accept_icode_generation_t)(val_t p0, val_t p1);
@@ -214,7 +214,7 @@ void syntax___icode_generation___AConcreteMethPropdef___fill_iroutine(val_t p0,
 typedef void (*syntax___icode_generation___AConcreteMethPropdef___fill_iroutine_t)(val_t p0, val_t p1, val_t p2);
 val_t NEW_AConcreteMethPropdef_parser___parser_prod___AMethPropdef___empty_init();
 val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___empty_init();
-val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
 val_t NEW_AConcreteMethPropdef_parser___parser_nodes___ANode___init();
 val_t NEW_AConcreteMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 void syntax___icode_generation___AExternPropdef___fill_iroutine(val_t p0, val_t p1, val_t p2);
@@ -236,7 +236,7 @@ void syntax___icode_generation___ADeferredMethPropdef___fill_iroutine(val_t p0,
 typedef void (*syntax___icode_generation___ADeferredMethPropdef___fill_iroutine_t)(val_t p0, val_t p1, val_t p2);
 val_t NEW_ADeferredMethPropdef_parser___parser_prod___AMethPropdef___empty_init();
 val_t NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___empty_init();
-val_t NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5);
+val_t NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
 val_t NEW_ADeferredMethPropdef_parser___parser_nodes___ANode___init();
 val_t NEW_ADeferredMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 void syntax___icode_generation___AExternMethPropdef___fill_iroutine(val_t p0, val_t p1, val_t p2);
@@ -261,7 +261,7 @@ val_t NEW_AExpr_parser___parser_nodes___ANode___init();
 val_t syntax___icode_generation___AVardeclExpr___generate_icode(val_t p0, val_t p1);
 typedef val_t (*syntax___icode_generation___AVardeclExpr___generate_icode_t)(val_t p0, val_t p1);
 val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___empty_init();
-val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
+val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5);
 val_t NEW_AVardeclExpr_parser___parser_nodes___ANode___init();
 val_t syntax___icode_generation___ABlockExpr___generate_icode(val_t p0, val_t p1);
 typedef val_t (*syntax___icode_generation___ABlockExpr___generate_icode_t)(val_t p0, val_t p1);
@@ -339,7 +339,7 @@ val_t NEW_AVarReassignExpr_parser___parser_nodes___ANode___init();
 val_t syntax___icode_generation___ASelfExpr___generate_icode(val_t p0, val_t p1);
 typedef val_t (*syntax___icode_generation___ASelfExpr___generate_icode_t)(val_t p0, val_t p1);
 val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___empty_init();
-val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0);
+val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1);
 val_t NEW_ASelfExpr_parser___parser_nodes___ANode___init();
 val_t syntax___icode_generation___AIfexprExpr___generate_icode(val_t p0, val_t p1);
 typedef val_t (*syntax___icode_generation___AIfexprExpr___generate_icode_t)(val_t p0, val_t p1);
@@ -389,27 +389,27 @@ val_t NEW_AAsNotnullExpr_parser___parser_nodes___ANode___init();
 val_t syntax___icode_generation___ATrueExpr___generate_icode(val_t p0, val_t p1);
 typedef val_t (*syntax___icode_generation___ATrueExpr___generate_icode_t)(val_t p0, val_t p1);
 val_t NEW_ATrueExpr_parser___parser_prod___ATrueExpr___empty_init();
-val_t NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr(val_t p0);
+val_t NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr(val_t p0, val_t p1);
 val_t NEW_ATrueExpr_parser___parser_nodes___ANode___init();
 val_t syntax___icode_generation___AFalseExpr___generate_icode(val_t p0, val_t p1);
 typedef val_t (*syntax___icode_generation___AFalseExpr___generate_icode_t)(val_t p0, val_t p1);
 val_t NEW_AFalseExpr_parser___parser_prod___AFalseExpr___empty_init();
-val_t NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr(val_t p0);
+val_t NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr(val_t p0, val_t p1);
 val_t NEW_AFalseExpr_parser___parser_nodes___ANode___init();
 val_t syntax___icode_generation___AIntExpr___generate_icode(val_t p0, val_t p1);
 typedef val_t (*syntax___icode_generation___AIntExpr___generate_icode_t)(val_t p0, val_t p1);
 val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___empty_init();
-val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(val_t p0);
+val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(val_t p0, val_t p1);
 val_t NEW_AIntExpr_parser___parser_nodes___ANode___init();
 val_t syntax___icode_generation___AFloatExpr___generate_icode(val_t p0, val_t p1);
 typedef val_t (*syntax___icode_generation___AFloatExpr___generate_icode_t)(val_t p0, val_t p1);
 val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___empty_init();
-val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0);
+val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0, val_t p1);
 val_t NEW_AFloatExpr_parser___parser_nodes___ANode___init();
 val_t syntax___icode_generation___ACharExpr___generate_icode(val_t p0, val_t p1);
 typedef val_t (*syntax___icode_generation___ACharExpr___generate_icode_t)(val_t p0, val_t p1);
 val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___empty_init();
-val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(val_t p0);
+val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(val_t p0, val_t p1);
 val_t NEW_ACharExpr_parser___parser_nodes___ANode___init();
 val_t syntax___icode_generation___AStringFormExpr___generate_icode(val_t p0, val_t p1);
 typedef val_t (*syntax___icode_generation___AStringFormExpr___generate_icode_t)(val_t p0, val_t p1);
@@ -421,7 +421,7 @@ val_t NEW_AStringFormExpr_parser___parser_nodes___ANode___init();
 val_t syntax___icode_generation___AStringExpr___string_text(val_t p0);
 typedef val_t (*syntax___icode_generation___AStringExpr___string_text_t)(val_t p0);
 val_t NEW_AStringExpr_parser___parser_prod___AStringExpr___empty_init();
-val_t NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr(val_t p0);
+val_t NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr(val_t p0, val_t p1);
 val_t NEW_AStringExpr_parser___parser_nodes___ANode___init();
 val_t syntax___icode_generation___AStartStringExpr___string_text(val_t p0);
 typedef val_t (*syntax___icode_generation___AStartStringExpr___string_text_t)(val_t p0);
@@ -444,12 +444,12 @@ typedef val_t (*syntax___icode_generation___ASuperstringExpr___generate_icode_t)
   void OC_syntax___icode_generation___ASuperstringExpr___generate_icode_3(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
   typedef void (*OC_syntax___icode_generation___ASuperstringExpr___generate_icode_3_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
 val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___empty_init();
-val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0);
+val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, val_t p1);
 val_t NEW_ASuperstringExpr_parser___parser_nodes___ANode___init();
 val_t syntax___icode_generation___ANullExpr___generate_icode(val_t p0, val_t p1);
 typedef val_t (*syntax___icode_generation___ANullExpr___generate_icode_t)(val_t p0, val_t p1);
 val_t NEW_ANullExpr_parser___parser_prod___ANullExpr___empty_init();
-val_t NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr(val_t p0);
+val_t NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr(val_t p0, val_t p1);
 val_t NEW_ANullExpr_parser___parser_nodes___ANode___init();
 val_t syntax___icode_generation___AArrayExpr___generate_icode(val_t p0, val_t p1);
 typedef val_t (*syntax___icode_generation___AArrayExpr___generate_icode_t)(val_t p0, val_t p1);
@@ -457,22 +457,22 @@ typedef val_t (*syntax___icode_generation___AArrayExpr___generate_icode_t)(val_t
   void OC_syntax___icode_generation___AArrayExpr___generate_icode_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
   typedef void (*OC_syntax___icode_generation___AArrayExpr___generate_icode_1_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
 val_t NEW_AArrayExpr_parser___parser_prod___AArrayExpr___empty_init();
-val_t NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr(val_t p0);
+val_t NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1);
 val_t NEW_AArrayExpr_parser___parser_nodes___ANode___init();
 val_t syntax___icode_generation___ACrangeExpr___generate_icode(val_t p0, val_t p1);
 typedef val_t (*syntax___icode_generation___ACrangeExpr___generate_icode_t)(val_t p0, val_t p1);
 val_t NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___empty_init();
 val_t NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___empty_init();
-val_t NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, val_t p2, val_t p3);
+val_t NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 val_t NEW_ACrangeExpr_parser___parser_nodes___ANode___init();
-val_t NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1);
+val_t NEW_ACrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2);
 val_t syntax___icode_generation___AOrangeExpr___generate_icode(val_t p0, val_t p1);
 typedef val_t (*syntax___icode_generation___AOrangeExpr___generate_icode_t)(val_t p0, val_t p1);
 val_t NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___empty_init();
 val_t NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___empty_init();
-val_t NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, val_t p2, val_t p3);
+val_t NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 val_t NEW_AOrangeExpr_parser___parser_nodes___ANode___init();
-val_t NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1);
+val_t NEW_AOrangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2);
 val_t syntax___icode_generation___ASuperExpr___generate_icode(val_t p0, val_t p1);
 typedef val_t (*syntax___icode_generation___ASuperExpr___generate_icode_t)(val_t p0, val_t p1);
     typedef void (*CLOS_OC_syntax___icode_generation___ASuperExpr___generate_icode_2_0)(struct stack_frame_t *);
index 2f740ee..e6d44ad 100644 (file)
@@ -97,7 +97,7 @@ void syntax___mmbuilder___ToolContext___handle_property_conflict(val_t p0, val_t
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB0)];
       /* syntax/mmbuilder.nit:36 */
       fra.me.REG[7] = CALL_metamodel___abstractmetamodel___MMLocalProperty___local_class(fra.me.REG[7])(fra.me.REG[7]);
@@ -337,7 +337,7 @@ void syntax___mmbuilder___MMSrcModule___do_mmbuilder(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB0)];
       /* syntax/mmbuilder.nit:99 */
       CALL_syntax___mmbuilder___MMLocalClass___accept_class_visitor(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
@@ -395,7 +395,7 @@ void syntax___mmbuilder___MMSrcModule___do_mmbuilder(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
       /* syntax/mmbuilder.nit:107 */
       CALL_syntax___mmbuilder___MMLocalClass___accept_class_visitor(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
@@ -451,7 +451,7 @@ void syntax___mmbuilder___MMSrcModule___do_mmbuilder(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB0)];
       /* syntax/mmbuilder.nit:115 */
       CALL_syntax___mmbuilder___MMLocalClass___accept_class_visitor(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
@@ -548,7 +548,7 @@ void syntax___mmbuilder___MMSrcModule___do_mmbuilder(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
       /* syntax/mmbuilder.nit:129 */
       CALL_syntax___mmbuilder___MMLocalClass___accept_properties_visitor(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
@@ -951,7 +951,7 @@ void syntax___mmbuilder___MMSrcLocalClass___process_default_constructors(val_t p
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB0)];
       /* syntax/mmbuilder.nit:204 */
       fra.me.REG[8] = CALL_metamodel___abstractmetamodel___MMLocalClass___global(fra.me.REG[7])(fra.me.REG[7]);
@@ -1576,7 +1576,7 @@ void syntax___mmbuilder___MMImplicitInit___accept_property_visitor(val_t p0, val
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB0)];
       /* syntax/mmbuilder.nit:302 */
       fra.me.REG[7] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[6])(fra.me.REG[6]);
@@ -1770,7 +1770,7 @@ void syntax___mmbuilder___MMImplicitInit___accept_property_visitor(val_t p0, val
         if (UNTAG_Bool(REGB3)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB1)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label7;
@@ -1826,7 +1826,7 @@ void syntax___mmbuilder___MMImplicitInit___accept_property_visitor(val_t p0, val
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB0)];
       /* syntax/mmbuilder.nit:321 */
       fra.me.REG[7] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[4])(fra.me.REG[4]);
@@ -3916,7 +3916,7 @@ void syntax___mmbuilder___AClassdef___accept_class_verifier(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
       /* syntax/mmbuilder.nit:625 */
       fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalClass___global(fra.me.REG[5])(fra.me.REG[5]);
@@ -4595,7 +4595,7 @@ void syntax___mmbuilder___AStdClassdef___accept_class_verifier(val_t p0, val_t p
         if (UNTAG_Bool(REGB1)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB0)];
         /* syntax/mmbuilder.nit:709 */
         fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalClass___global(fra.me.REG[5])(fra.me.REG[5]);
@@ -6125,7 +6125,7 @@ void syntax___mmbuilder___APropdef___do_and_check_intro(val_t p0, val_t p1, val_
             if (UNTAG_Bool(REGB1)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[0] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
             /* syntax/mmbuilder.nit:907 */
             fra.me.REG[3] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[2])(fra.me.REG[2]);
@@ -6222,7 +6222,7 @@ void syntax___mmbuilder___APropdef___inherit_signature(val_t p0, val_t p1, val_t
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
       /* syntax/mmbuilder.nit:917 */
       fra.me.REG[5] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[5])(fra.me.REG[5]);
@@ -6309,7 +6309,7 @@ void syntax___mmbuilder___APropdef___inherit_signature(val_t p0, val_t p1, val_t
             if (UNTAG_Bool(REGB2)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[8] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB3)];
             /* syntax/mmbuilder.nit:924 */
             REGB2 = CALL_syntax___syntax_base___AParam___position(fra.me.REG[8])(fra.me.REG[8]);
@@ -6648,7 +6648,7 @@ void syntax___mmbuilder___APropdef___do_and_check_redef(val_t p0, val_t p1, val_
       if (UNTAG_Bool(REGB0)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB2)];
       /* syntax/mmbuilder.nit:957 */
       fra.me.REG[8] = CALL_metamodel___abstractmetamodel___MMLocalProperty___local_class(fra.me.REG[7])(fra.me.REG[7]);
@@ -6950,7 +6950,7 @@ void syntax___mmbuilder___APropdef___do_and_check_redef(val_t p0, val_t p1, val_
             if (UNTAG_Bool(REGB3)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[11] = ((Nit_NativeArray)fra.me.REG[10])->val[UNTAG_Int(REGB0)];
             /* syntax/mmbuilder.nit:973 */
             REGB3 = CALL_syntax___syntax_base___AParam___position(fra.me.REG[11])(fra.me.REG[11]);
@@ -7030,7 +7030,7 @@ void syntax___mmbuilder___APropdef___do_and_check_redef(val_t p0, val_t p1, val_
             if (UNTAG_Bool(REGB4)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[12] = ((Nit_NativeArray)fra.me.REG[12])->val[UNTAG_Int(REGB5)];
             /* ../lib/standard/collection/array.nit:281 */
             goto label24;
@@ -9847,7 +9847,7 @@ void syntax___mmbuilder___ASignature___accept_property_verifier(val_t p0, val_t
             if (UNTAG_Bool(REGB1)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB0)];
             /* syntax/mmbuilder.nit:1291 */
             fra.me.REG[7] = CALL_syntax___mmbuilder___AParam___stype(fra.me.REG[6])(fra.me.REG[6]);
@@ -9987,7 +9987,7 @@ void syntax___mmbuilder___ASignature___accept_property_verifier(val_t p0, val_t
             if (UNTAG_Bool(REGB0)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[0] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB1)];
             /* syntax/mmbuilder.nit:1306 */
             fra.me.REG[1] = CALL_syntax___mmbuilder___PropertyVerifierVisitor___signature_builder(fra.me.REG[3])(fra.me.REG[3]);
@@ -10357,7 +10357,7 @@ void syntax___mmbuilder___AParam___accept_property_verifier(val_t p0, val_t p1){
         if (UNTAG_Bool(REGB1)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
         /* syntax/mmbuilder.nit:1345 */
         CALL_syntax___mmbuilder___AParam___stype__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
@@ -10734,7 +10734,7 @@ void syntax___mmbuilder___AClosureDecl___accept_property_verifier(val_t p0, val_
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB0)];
       /* syntax/mmbuilder.nit:1393 */
       fra.me.REG[8] = CALL_parser___parser_nodes___AClosureDecl___n_id(fra.me.REG[7])(fra.me.REG[7]);
index ac3cf0f..7b406df 100644 (file)
@@ -326,7 +326,7 @@ val_t NEW_AModule_parser___parser_nodes___ANode___init();
 void syntax___mmbuilder___AModuledecl___accept_class_builder(val_t p0, val_t p1);
 typedef void (*syntax___mmbuilder___AModuledecl___accept_class_builder_t)(val_t p0, val_t p1);
 val_t NEW_AModuledecl_parser___parser_prod___AModuledecl___empty_init();
-val_t NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, val_t p2);
+val_t NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, val_t p2, val_t p3);
 val_t NEW_AModuledecl_parser___parser_nodes___ANode___init();
 val_t syntax___mmbuilder___AImport___module_name(val_t p0);
 typedef val_t (*syntax___mmbuilder___AImport___module_name_t)(val_t p0);
@@ -338,7 +338,7 @@ typedef val_t (*syntax___mmbuilder___AStdImport___module_name_t)(val_t p0);
 val_t syntax___mmbuilder___AStdImport___visibility_level(val_t p0);
 typedef val_t (*syntax___mmbuilder___AStdImport___visibility_level_t)(val_t p0);
 val_t NEW_AStdImport_parser___parser_prod___AStdImport___empty_init();
-val_t NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val_t p2);
+val_t NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val_t p2, val_t p3);
 val_t NEW_AStdImport_parser___parser_nodes___ANode___init();
 val_t syntax___mmbuilder___ANoImport___module_name(val_t p0);
 typedef val_t (*syntax___mmbuilder___ANoImport___module_name_t)(val_t p0);
@@ -409,7 +409,7 @@ val_t NEW_AEnumClasskind_parser___parser_nodes___ANode___init();
 val_t syntax___mmbuilder___AExternClasskind___is_extern(val_t p0);
 typedef val_t (*syntax___mmbuilder___AExternClasskind___is_extern_t)(val_t p0);
 val_t NEW_AExternClasskind_parser___parser_prod___AExternClasskind___empty_init();
-val_t NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind(val_t p0);
+val_t NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind(val_t p0, val_t p1);
 val_t NEW_AExternClasskind_parser___parser_nodes___ANode___init();
 val_t syntax___mmbuilder___AAbstractClasskind___is_abstract(val_t p0);
 typedef val_t (*syntax___mmbuilder___AAbstractClasskind___is_abstract_t)(val_t p0);
@@ -427,7 +427,7 @@ typedef void (*syntax___mmbuilder___AStdClassdef___accept_class_verifier_t)(val_
 val_t syntax___mmbuilder___AStdClassdef___visibility_level(val_t p0);
 typedef val_t (*syntax___mmbuilder___AStdClassdef___visibility_level_t)(val_t p0);
 val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___empty_init();
-val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9);
+val_t NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10);
 val_t NEW_AStdClassdef_parser___parser_nodes___ANode___init();
 val_t syntax___mmbuilder___AMainClassdef___name(val_t p0);
 typedef val_t (*syntax___mmbuilder___AMainClassdef___name_t)(val_t p0);
@@ -444,7 +444,7 @@ typedef void (*syntax___mmbuilder___AFormaldef___accept_class_builder_t)(val_t p
 void syntax___mmbuilder___AFormaldef___accept_class_verifier(val_t p0, val_t p1);
 typedef void (*syntax___mmbuilder___AFormaldef___accept_class_verifier_t)(val_t p0, val_t p1);
 val_t NEW_AFormaldef_parser___parser_prod___AFormaldef___empty_init();
-val_t NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1);
+val_t NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val_t p2);
 val_t NEW_AFormaldef_parser___parser_nodes___ANode___init();
 val_t syntax___mmbuilder___ASuperclass___ancestor(val_t p0);
 typedef val_t (*syntax___mmbuilder___ASuperclass___ancestor_t)(val_t p0);
@@ -479,7 +479,7 @@ typedef void (*syntax___mmbuilder___AAttrPropdef___accept_property_verifier_t)(v
 void syntax___mmbuilder___AAttrPropdef___accept_abs_syntax_visitor(val_t p0, val_t p1);
 typedef void (*syntax___mmbuilder___AAttrPropdef___accept_abs_syntax_visitor_t)(val_t p0, val_t p1);
 val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___empty_init();
-val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9);
+val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10);
 val_t NEW_AAttrPropdef_parser___parser_nodes___ANode___init();
 val_t syntax___mmbuilder___AMethPropdef___name(val_t p0);
 typedef val_t (*syntax___mmbuilder___AMethPropdef___name_t)(val_t p0);
@@ -501,7 +501,7 @@ val_t NEW_AMainMethPropdef_parser___parser_prod___AMainMethPropdef___empty_init(
 val_t NEW_AMainMethPropdef_parser___parser_prod___AMainMethPropdef___init_amainmethpropdef(val_t p0, val_t p1);
 val_t NEW_AMainMethPropdef_parser___parser_nodes___ANode___init();
 val_t NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___empty_init();
-val_t NEW_AMainMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+val_t NEW_AMainMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
 val_t NEW_AMainMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 void syntax___mmbuilder___AExternPropdef___accept_property_verifier(val_t p0, val_t p1);
 typedef void (*syntax___mmbuilder___AExternPropdef___accept_property_verifier_t)(val_t p0, val_t p1);
@@ -517,7 +517,7 @@ typedef void (*syntax___mmbuilder___ATypePropdef___accept_property_verifier_t)(v
 void syntax___mmbuilder___ATypePropdef___accept_abs_syntax_visitor(val_t p0, val_t p1);
 typedef void (*syntax___mmbuilder___ATypePropdef___accept_abs_syntax_visitor_t)(val_t p0, val_t p1);
 val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___empty_init();
-val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5);
+val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
 val_t NEW_ATypePropdef_parser___parser_nodes___ANode___init();
 val_t syntax___mmbuilder___MethidAccumulator___name(val_t p0);
 typedef val_t (*syntax___mmbuilder___MethidAccumulator___name_t)(val_t p0);
@@ -552,7 +552,7 @@ typedef void (*syntax___mmbuilder___AParam___accept_property_verifier_t)(val_t p
 val_t syntax___mmbuilder___AParam___is_vararg(val_t p0);
 typedef val_t (*syntax___mmbuilder___AParam___is_vararg_t)(val_t p0);
 val_t NEW_AParam_parser___parser_prod___AParam___empty_init();
-val_t NEW_AParam_parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2);
+val_t NEW_AParam_parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, val_t p3);
 val_t NEW_AParam_parser___parser_nodes___ANode___init();
 val_t syntax___mmbuilder___AClosureDecl___position(val_t p0);
 typedef val_t (*syntax___mmbuilder___AClosureDecl___position_t)(val_t p0);
@@ -569,7 +569,7 @@ typedef void (*syntax___mmbuilder___AType___check_visibility_t)(val_t p0, val_t
   void OC_syntax___mmbuilder___AType___check_visibility_5(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
   typedef void (*OC_syntax___mmbuilder___AType___check_visibility_5_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
 val_t NEW_AType_parser___parser_prod___AType___empty_init();
-val_t NEW_AType_parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2);
+val_t NEW_AType_parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3);
 val_t NEW_AType_parser___parser_nodes___ANode___init();
 void syntax___mmbuilder___AExpr___accept_class_builder(val_t p0, val_t p1);
 typedef void (*syntax___mmbuilder___AExpr___accept_class_builder_t)(val_t p0, val_t p1);
@@ -586,22 +586,22 @@ val_t NEW_ABoolExpr_parser___parser_nodes___ANode___init();
 val_t syntax___mmbuilder___AStringExpr___get_easy_stype(val_t p0, val_t p1);
 typedef val_t (*syntax___mmbuilder___AStringExpr___get_easy_stype_t)(val_t p0, val_t p1);
 val_t NEW_AStringExpr_parser___parser_prod___AStringExpr___empty_init();
-val_t NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr(val_t p0);
+val_t NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr(val_t p0, val_t p1);
 val_t NEW_AStringExpr_parser___parser_nodes___ANode___init();
 val_t syntax___mmbuilder___ACharExpr___get_easy_stype(val_t p0, val_t p1);
 typedef val_t (*syntax___mmbuilder___ACharExpr___get_easy_stype_t)(val_t p0, val_t p1);
 val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___empty_init();
-val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(val_t p0);
+val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(val_t p0, val_t p1);
 val_t NEW_ACharExpr_parser___parser_nodes___ANode___init();
 val_t syntax___mmbuilder___AIntExpr___get_easy_stype(val_t p0, val_t p1);
 typedef val_t (*syntax___mmbuilder___AIntExpr___get_easy_stype_t)(val_t p0, val_t p1);
 val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___empty_init();
-val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(val_t p0);
+val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(val_t p0, val_t p1);
 val_t NEW_AIntExpr_parser___parser_nodes___ANode___init();
 val_t syntax___mmbuilder___AFloatExpr___get_easy_stype(val_t p0, val_t p1);
 typedef val_t (*syntax___mmbuilder___AFloatExpr___get_easy_stype_t)(val_t p0, val_t p1);
 val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___empty_init();
-val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0);
+val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0, val_t p1);
 val_t NEW_AFloatExpr_parser___parser_nodes___ANode___init();
 val_t syntax___mmbuilder___ANewExpr___get_easy_stype(val_t p0, val_t p1);
 typedef val_t (*syntax___mmbuilder___ANewExpr___get_easy_stype_t)(val_t p0, val_t p1);
index 2bdd3b6..cb3cdd9 100644 (file)
@@ -98,7 +98,7 @@ val_t syntax___scope___ScopeContext_____bra(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label1;
@@ -434,7 +434,7 @@ void syntax___scope___ScopeContext___push_escapable(val_t p0, val_t p1, val_t p2
         if (UNTAG_Bool(REGB2)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label1;
@@ -632,7 +632,7 @@ val_t syntax___scope___ScopeContext___head(val_t p0){
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB0)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label1;
@@ -774,7 +774,7 @@ val_t syntax___scope___ScopeContext___get_by_label(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label1;
index 3848c87..bb93d4d 100644 (file)
@@ -466,7 +466,7 @@ typedef val_t (*syntax___syntax_base___AAttrPropdef___readmethod_t)(val_t p0);
 val_t syntax___syntax_base___AAttrPropdef___writemethod(val_t p0);
 typedef val_t (*syntax___syntax_base___AAttrPropdef___writemethod_t)(val_t p0);
 val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___empty_init();
-val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9);
+val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10);
 val_t NEW_AAttrPropdef_parser___parser_nodes___ANode___init();
 val_t syntax___syntax_base___AConcreteInitPropdef___super_init_calls(val_t p0);
 typedef val_t (*syntax___syntax_base___AConcreteInitPropdef___super_init_calls_t)(val_t p0);
@@ -474,10 +474,10 @@ val_t syntax___syntax_base___AConcreteInitPropdef___explicit_super_init_calls(va
 typedef val_t (*syntax___syntax_base___AConcreteInitPropdef___explicit_super_init_calls_t)(val_t p0);
 val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___empty_init();
 val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___empty_init();
-val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
 val_t NEW_AConcreteInitPropdef_parser___parser_nodes___ANode___init();
 val_t NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___empty_init();
-val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
 val_t NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 val_t syntax___syntax_base___AMethPropdef___method(val_t p0);
 typedef val_t (*syntax___syntax_base___AMethPropdef___method_t)(val_t p0);
@@ -487,14 +487,14 @@ val_t NEW_AMethPropdef_parser___parser_nodes___ANode___init();
 val_t syntax___syntax_base___ATypePropdef___prop(val_t p0);
 typedef val_t (*syntax___syntax_base___ATypePropdef___prop_t)(val_t p0);
 val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___empty_init();
-val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5);
+val_t NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
 val_t NEW_ATypePropdef_parser___parser_nodes___ANode___init();
 val_t syntax___syntax_base___AParam___position(val_t p0);
 typedef val_t (*syntax___syntax_base___AParam___position_t)(val_t p0);
 val_t syntax___syntax_base___AParam___variable(val_t p0);
 typedef val_t (*syntax___syntax_base___AParam___variable_t)(val_t p0);
 val_t NEW_AParam_parser___parser_prod___AParam___empty_init();
-val_t NEW_AParam_parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2);
+val_t NEW_AParam_parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, val_t p3);
 val_t NEW_AParam_parser___parser_nodes___ANode___init();
 val_t syntax___syntax_base___AClosureDecl___position(val_t p0);
 typedef val_t (*syntax___syntax_base___AClosureDecl___position_t)(val_t p0);
@@ -519,7 +519,7 @@ typedef val_t (*syntax___syntax_base___AType___get_stype_t)(val_t p0, val_t p1);
 void syntax___syntax_base___AType___check_conform(val_t p0, val_t p1);
 typedef void (*syntax___syntax_base___AType___check_conform_t)(val_t p0, val_t p1);
 val_t NEW_AType_parser___parser_prod___AType___empty_init();
-val_t NEW_AType_parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2);
+val_t NEW_AType_parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3);
 val_t NEW_AType_parser___parser_nodes___ANode___init();
 val_t syntax___syntax_base___AExpr___is_typed(val_t p0);
 typedef val_t (*syntax___syntax_base___AExpr___is_typed_t)(val_t p0);
@@ -578,12 +578,12 @@ val_t NEW_AAttrFormExpr_parser___parser_nodes___ANode___init();
 val_t syntax___syntax_base___ASuperstringExpr___atype(val_t p0);
 typedef val_t (*syntax___syntax_base___ASuperstringExpr___atype_t)(val_t p0);
 val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___empty_init();
-val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0);
+val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, val_t p1);
 val_t NEW_ASuperstringExpr_parser___parser_nodes___ANode___init();
 val_t syntax___syntax_base___AVardeclExpr___variable(val_t p0);
 typedef val_t (*syntax___syntax_base___AVardeclExpr___variable_t)(val_t p0);
 val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___empty_init();
-val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
+val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5);
 val_t NEW_AVardeclExpr_parser___parser_nodes___ANode___init();
 val_t syntax___syntax_base___AForExpr___variables(val_t p0);
 typedef val_t (*syntax___syntax_base___AForExpr___variables_t)(val_t p0);
@@ -593,7 +593,7 @@ val_t NEW_AForExpr_parser___parser_nodes___ANode___init();
 val_t syntax___syntax_base___ASelfExpr___variable(val_t p0);
 typedef val_t (*syntax___syntax_base___ASelfExpr___variable_t)(val_t p0);
 val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___empty_init();
-val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0);
+val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1);
 val_t NEW_ASelfExpr_parser___parser_nodes___ANode___init();
 val_t syntax___syntax_base___AVarFormExpr___variable(val_t p0);
 typedef val_t (*syntax___syntax_base___AVarFormExpr___variable_t)(val_t p0);
index 8bb0fde..2c7e584 100644 (file)
@@ -792,7 +792,7 @@ val_t syntax___typing___TypingVisitor___get_default_constructor_for(val_t p0, va
           if (UNTAG_Bool(REGB2)) {
             nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
           }
-          /* ../lib/standard/collection/array.nit:718 */
+          /* ../lib/standard/collection/array.nit:724 */
           fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[8])->val[UNTAG_Int(REGB1)];
           /* syntax/typing.nit:146 */
           REGB2 = TAG_Int(5);
@@ -950,7 +950,7 @@ val_t syntax___typing___TypingVisitor___get_default_constructor_for(val_t p0, va
             if (UNTAG_Bool(REGB1)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB2)];
             /* syntax/typing.nit:153 */
             REGB1 = TAG_Int(5);
@@ -1695,7 +1695,7 @@ void syntax___typing___AConcreteInitPropdef___after_typing(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB3)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB2)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label1;
@@ -1782,7 +1782,7 @@ void syntax___typing___AConcreteInitPropdef___after_typing(val_t p0, val_t p1){
         if (UNTAG_Bool(REGB4)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB3)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label2;
@@ -1932,7 +1932,7 @@ void syntax___typing___AConcreteInitPropdef___after_typing(val_t p0, val_t p1){
               if (UNTAG_Bool(REGB4)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
               }
-              /* ../lib/standard/collection/array.nit:718 */
+              /* ../lib/standard/collection/array.nit:724 */
               fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB3)];
               /* ../lib/standard/collection/array.nit:281 */
               goto label3;
@@ -2377,7 +2377,7 @@ void syntax___typing___AClosureDecl___accept_typing(val_t p0, val_t p1){
         if (UNTAG_Bool(REGB1)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[8])->val[UNTAG_Int(REGB2)];
         /* syntax/typing.nit:344 */
         CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_expr(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2], fra.me.REG[7]);
@@ -3010,15 +3010,29 @@ void syntax___typing___AVardeclExpr___after_typing(val_t p0, val_t p1){
         nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 444);
       }
       fra.me.REG[2] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[2])(fra.me.REG[2]);
-      CALL_syntax___syntax_base___Variable___stype__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
+      /* syntax/typing.nit:445 */
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
+      if (UNTAG_Bool(REGB0)) {
+        /* syntax/typing.nit:446 */
+        fra.me.REG[4] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_object(fra.me.REG[1])(fra.me.REG[1]);
+        fra.me.REG[4] = CALL_metamodel___static_type___MMType___as_nullable(fra.me.REG[4])(fra.me.REG[4]);
+        CALL_syntax___syntax_base___Variable___stype__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+        /* syntax/typing.nit:447 */
+        fra.me.REG[4] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
+        fra.me.REG[4] = CALL_syntax___flow___FlowContext___sub_with(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0], fra.me.REG[3], fra.me.REG[2]);
+        CALL_syntax___typing___TypingVisitor___flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+      } else {
+        /* syntax/typing.nit:449 */
+        CALL_syntax___syntax_base___Variable___stype__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
+      }
     } else {
-      /* syntax/typing.nit:446 */
+      /* syntax/typing.nit:452 */
       fra.me.REG[1] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_object(fra.me.REG[1])(fra.me.REG[1]);
       fra.me.REG[1] = CALL_metamodel___static_type___MMType___as_nullable(fra.me.REG[1])(fra.me.REG[1]);
       CALL_syntax___syntax_base___Variable___stype__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
     }
   }
-  /* syntax/typing.nit:448 */
+  /* syntax/typing.nit:454 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   label1: while(0);
@@ -3032,7 +3046,7 @@ void syntax___typing___ABlockExpr___accept_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 453;
+  fra.me.line = 459;
   fra.me.meth = LOCATE_syntax___typing___ABlockExpr___accept_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -3042,10 +3056,10 @@ void syntax___typing___ABlockExpr___accept_typing(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:455 */
+  /* syntax/typing.nit:461 */
   fra.me.REG[2] = CALL_parser___parser_nodes___ABlockExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_syntax___typing___ABlockExpr___accept_typing_1));
-  /* syntax/typing.nit:464 */
+  /* syntax/typing.nit:470 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -3070,24 +3084,24 @@ void syntax___typing___ABlockExpr___accept_typing(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* syntax/typing.nit:456 */
+    /* syntax/typing.nit:462 */
     fra.me.REG[1] = CALL_syntax___typing___TypingVisitor___flow_ctx(closctx->REG[1])(closctx->REG[1]);
     REGB0 = CALL_syntax___flow___FlowContext___unreash(fra.me.REG[1])(fra.me.REG[1]);
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:457 */
+      /* syntax/typing.nit:463 */
       CALL_parser___parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     } else {
-      /* syntax/typing.nit:458 */
+      /* syntax/typing.nit:464 */
       fra.me.REG[1] = CALL_syntax___typing___TypingVisitor___flow_ctx(closctx->REG[1])(closctx->REG[1]);
       REGB0 = CALL_syntax___flow___FlowContext___already_unreash(fra.me.REG[1])(fra.me.REG[1]);
       REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
       if (UNTAG_Bool(REGB0)) {
-        /* syntax/typing.nit:459 */
+        /* syntax/typing.nit:465 */
         fra.me.REG[1] = CALL_syntax___typing___TypingVisitor___flow_ctx(closctx->REG[1])(closctx->REG[1]);
         REGB0 = TAG_Bool(1);
         CALL_syntax___flow___FlowContext___already_unreash__eq(fra.me.REG[1])(fra.me.REG[1], REGB0);
-        /* syntax/typing.nit:460 */
+        /* syntax/typing.nit:466 */
         if (!once_value_2) {
           fra.me.REG[1] = BOX_NativeString("Error: unreachable statement.");
           REGB0 = TAG_Int(29);
@@ -3113,7 +3127,7 @@ void syntax___typing___AReturnExpr___after_typing(val_t p0, val_t p1){
       static val_t once_value_4; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 469;
+  fra.me.line = 475;
   fra.me.meth = LOCATE_syntax___typing___AReturnExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -3125,20 +3139,20 @@ void syntax___typing___AReturnExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:471 */
+  /* syntax/typing.nit:477 */
   CALL_syntax___typing___TypingVisitor___mark_unreash(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* syntax/typing.nit:472 */
+  /* syntax/typing.nit:478 */
   fra.me.REG[2] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[2] = CALL_metamodel___static_type___MMLocalProperty___signature(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_syntax___typing, 472);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 478);
   }
   fra.me.REG[2] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:474 */
+  /* syntax/typing.nit:480 */
   REGB0 = CALL_syntax___typing___TypingVisitor___is_default_closure_definition(fra.me.REG[1])(fra.me.REG[1]);
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:475 */
+    /* syntax/typing.nit:481 */
     if (!once_value_1) {
       fra.me.REG[3] = BOX_NativeString("Error: 'return' invalid in default closure definitions. Use 'continue' or 'break'.");
       REGB0 = TAG_Int(82);
@@ -3148,12 +3162,12 @@ void syntax___typing___AReturnExpr___after_typing(val_t p0, val_t p1){
     } else fra.me.REG[3] = once_value_1;
     fra.me.REG[3] = fra.me.REG[3];
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[3]);
-    /* syntax/typing.nit:476 */
+    /* syntax/typing.nit:482 */
     goto label2;
   }
-  /* syntax/typing.nit:479 */
+  /* syntax/typing.nit:485 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AReturnExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
-  /* syntax/typing.nit:480 */
+  /* syntax/typing.nit:486 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -3185,7 +3199,7 @@ void syntax___typing___AReturnExpr___after_typing(val_t p0, val_t p1){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:481 */
+    /* syntax/typing.nit:487 */
     if (!once_value_3) {
       fra.me.REG[4] = BOX_NativeString("Error: Return without value in a function.");
       REGB0 = TAG_Int(42);
@@ -3196,7 +3210,7 @@ void syntax___typing___AReturnExpr___after_typing(val_t p0, val_t p1){
     fra.me.REG[4] = fra.me.REG[4];
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[4]);
   } else {
-    /* syntax/typing.nit:482 */
+    /* syntax/typing.nit:488 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -3228,7 +3242,7 @@ void syntax___typing___AReturnExpr___after_typing(val_t p0, val_t p1){
       REGB0 = REGB1;
     }
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:483 */
+      /* syntax/typing.nit:489 */
       if (!once_value_4) {
         fra.me.REG[4] = BOX_NativeString("Error: Return with value in a procedure.");
         REGB0 = TAG_Int(40);
@@ -3239,7 +3253,7 @@ void syntax___typing___AReturnExpr___after_typing(val_t p0, val_t p1){
       fra.me.REG[4] = fra.me.REG[4];
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[4]);
     } else {
-      /* syntax/typing.nit:484 */
+      /* syntax/typing.nit:490 */
       REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
@@ -3272,12 +3286,12 @@ void syntax___typing___AReturnExpr___after_typing(val_t p0, val_t p1){
         REGB0 = REGB1;
       }
       if (UNTAG_Bool(REGB0)) {
-        /* syntax/typing.nit:485 */
+        /* syntax/typing.nit:491 */
         CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3], fra.me.REG[2]);
       }
     }
   }
-  /* syntax/typing.nit:487 */
+  /* syntax/typing.nit:493 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -3292,14 +3306,14 @@ void syntax___typing___AReturnExpr___after_typing(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:488 */
+    /* syntax/typing.nit:494 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 488);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 494);
     }
     CALL_syntax___typing___AExpr___warn_parentheses(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
   }
-  /* syntax/typing.nit:490 */
+  /* syntax/typing.nit:496 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   label2: while(0);
@@ -3317,7 +3331,7 @@ void syntax___typing___AContinueExpr___after_typing(val_t p0, val_t p1){
       static val_t once_value_4; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 495;
+  fra.me.line = 501;
   fra.me.meth = LOCATE_syntax___typing___AContinueExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -3329,12 +3343,12 @@ void syntax___typing___AContinueExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:497 */
+  /* syntax/typing.nit:503 */
   CALL_syntax___typing___TypingVisitor___mark_unreash(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* syntax/typing.nit:498 */
+  /* syntax/typing.nit:504 */
   fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___scope_ctx(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[2] = CALL_syntax___scope___AEscapeExpr___compute_escapable_block(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[2]);
-  /* syntax/typing.nit:499 */
+  /* syntax/typing.nit:505 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -3350,14 +3364,14 @@ void syntax___typing___AContinueExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:501 */
+  /* syntax/typing.nit:507 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 501);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 507);
   }
   REGB0 = CALL_syntax___scope___EscapableBlock___is_break_block(fra.me.REG[2])(fra.me.REG[2]);
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:502 */
+    /* syntax/typing.nit:508 */
     if (!once_value_2) {
       fra.me.REG[3] = BOX_NativeString("Error: cannot 'continue', only 'break'.");
       REGB0 = TAG_Int(39);
@@ -3367,18 +3381,18 @@ void syntax___typing___AContinueExpr___after_typing(val_t p0, val_t p1){
     } else fra.me.REG[3] = once_value_2;
     fra.me.REG[3] = fra.me.REG[3];
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[3]);
-    /* syntax/typing.nit:503 */
+    /* syntax/typing.nit:509 */
     goto label1;
   }
-  /* syntax/typing.nit:506 */
+  /* syntax/typing.nit:512 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 506);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 512);
   }
   fra.me.REG[2] = CALL_syntax___scope___EscapableBlock___continue_stype(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:507 */
+  /* syntax/typing.nit:513 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AContinueExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
-  /* syntax/typing.nit:508 */
+  /* syntax/typing.nit:514 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -3410,7 +3424,7 @@ void syntax___typing___AContinueExpr___after_typing(val_t p0, val_t p1){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:509 */
+    /* syntax/typing.nit:515 */
     if (!once_value_3) {
       fra.me.REG[4] = BOX_NativeString("Error: continue with a value required in this block.");
       REGB0 = TAG_Int(52);
@@ -3421,7 +3435,7 @@ void syntax___typing___AContinueExpr___after_typing(val_t p0, val_t p1){
     fra.me.REG[4] = fra.me.REG[4];
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[4]);
   } else {
-    /* syntax/typing.nit:510 */
+    /* syntax/typing.nit:516 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -3453,7 +3467,7 @@ void syntax___typing___AContinueExpr___after_typing(val_t p0, val_t p1){
       REGB0 = REGB1;
     }
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:511 */
+      /* syntax/typing.nit:517 */
       if (!once_value_4) {
         fra.me.REG[4] = BOX_NativeString("Error: continue without value required in this block.");
         REGB0 = TAG_Int(53);
@@ -3464,7 +3478,7 @@ void syntax___typing___AContinueExpr___after_typing(val_t p0, val_t p1){
       fra.me.REG[4] = fra.me.REG[4];
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[4]);
     } else {
-      /* syntax/typing.nit:512 */
+      /* syntax/typing.nit:518 */
       REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
@@ -3497,12 +3511,12 @@ void syntax___typing___AContinueExpr___after_typing(val_t p0, val_t p1){
         REGB0 = REGB1;
       }
       if (UNTAG_Bool(REGB0)) {
-        /* syntax/typing.nit:513 */
+        /* syntax/typing.nit:519 */
         CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3], fra.me.REG[2]);
       }
     }
   }
-  /* syntax/typing.nit:515 */
+  /* syntax/typing.nit:521 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -3517,14 +3531,14 @@ void syntax___typing___AContinueExpr___after_typing(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:516 */
+    /* syntax/typing.nit:522 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 516);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 522);
     }
     CALL_syntax___typing___AExpr___warn_parentheses(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
   }
-  /* syntax/typing.nit:518 */
+  /* syntax/typing.nit:524 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   label1: while(0);
@@ -3541,7 +3555,7 @@ void syntax___typing___ABreakExpr___after_typing(val_t p0, val_t p1){
       static val_t once_value_3; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 523;
+  fra.me.line = 529;
   fra.me.meth = LOCATE_syntax___typing___ABreakExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -3553,14 +3567,14 @@ void syntax___typing___ABreakExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:525 */
+  /* syntax/typing.nit:531 */
   fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:526 */
+  /* syntax/typing.nit:532 */
   CALL_syntax___typing___TypingVisitor___mark_unreash(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* syntax/typing.nit:527 */
+  /* syntax/typing.nit:533 */
   fra.me.REG[3] = CALL_syntax___typing___TypingVisitor___scope_ctx(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[3] = CALL_syntax___scope___AEscapeExpr___compute_escapable_block(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[3]);
-  /* syntax/typing.nit:528 */
+  /* syntax/typing.nit:534 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -3576,22 +3590,22 @@ void syntax___typing___ABreakExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:530 */
+  /* syntax/typing.nit:536 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 530);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 536);
   }
   fra.me.REG[4] = CALL_syntax___scope___EscapableBlock___break_flow_contexts(fra.me.REG[3])(fra.me.REG[3]);
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  /* syntax/typing.nit:532 */
+  /* syntax/typing.nit:538 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 532);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 538);
   }
   fra.me.REG[3] = CALL_syntax___scope___EscapableBlock___break_list(fra.me.REG[3])(fra.me.REG[3]);
-  /* syntax/typing.nit:533 */
+  /* syntax/typing.nit:539 */
   fra.me.REG[2] = CALL_parser___parser_nodes___ABreakExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
-  /* syntax/typing.nit:534 */
+  /* syntax/typing.nit:540 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -3623,7 +3637,7 @@ void syntax___typing___ABreakExpr___after_typing(val_t p0, val_t p1){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:535 */
+    /* syntax/typing.nit:541 */
     if (!once_value_2) {
       fra.me.REG[4] = BOX_NativeString("Error: break with a value required in this block.");
       REGB0 = TAG_Int(49);
@@ -3634,7 +3648,7 @@ void syntax___typing___ABreakExpr___after_typing(val_t p0, val_t p1){
     fra.me.REG[4] = fra.me.REG[4];
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[4]);
   } else {
-    /* syntax/typing.nit:536 */
+    /* syntax/typing.nit:542 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -3666,7 +3680,7 @@ void syntax___typing___ABreakExpr___after_typing(val_t p0, val_t p1){
       REGB0 = REGB1;
     }
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:537 */
+      /* syntax/typing.nit:543 */
       if (!once_value_3) {
         fra.me.REG[4] = BOX_NativeString("Error: break without value required in this block.");
         REGB0 = TAG_Int(50);
@@ -3677,7 +3691,7 @@ void syntax___typing___ABreakExpr___after_typing(val_t p0, val_t p1){
       fra.me.REG[4] = fra.me.REG[4];
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[4]);
     } else {
-      /* syntax/typing.nit:538 */
+      /* syntax/typing.nit:544 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
@@ -3710,16 +3724,16 @@ void syntax___typing___ABreakExpr___after_typing(val_t p0, val_t p1){
         REGB0 = REGB1;
       }
       if (UNTAG_Bool(REGB0)) {
-        /* syntax/typing.nit:540 */
+        /* syntax/typing.nit:546 */
         REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB0)) {
-          nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 540);
+          nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 546);
         }
         CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
       }
     }
   }
-  /* syntax/typing.nit:542 */
+  /* syntax/typing.nit:548 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -3734,14 +3748,14 @@ void syntax___typing___ABreakExpr___after_typing(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:543 */
+    /* syntax/typing.nit:549 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 543);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 549);
     }
     CALL_syntax___typing___AExpr___warn_parentheses(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
   }
-  /* syntax/typing.nit:545 */
+  /* syntax/typing.nit:551 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   label1: while(0);
@@ -3755,7 +3769,7 @@ void syntax___typing___AAbortExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 550;
+  fra.me.line = 556;
   fra.me.meth = LOCATE_syntax___typing___AAbortExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3764,9 +3778,9 @@ void syntax___typing___AAbortExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:552 */
+  /* syntax/typing.nit:558 */
   CALL_syntax___typing___TypingVisitor___mark_unreash(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* syntax/typing.nit:553 */
+  /* syntax/typing.nit:559 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -3778,14 +3792,14 @@ val_t syntax___typing___AAbsControl___escapable(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 560;
+  fra.me.line = 566;
   fra.me.meth = LOCATE_syntax___typing___AAbsControl___escapable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:560 */
+  /* syntax/typing.nit:566 */
   fra.me.REG[0] = ATTR_syntax___typing___AAbsControl____escapable(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -3798,7 +3812,7 @@ void syntax___typing___AAbsControl___process_control(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 563;
+  fra.me.line = 569;
   fra.me.meth = LOCATE_syntax___typing___AAbsControl___process_control;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -3815,54 +3829,54 @@ void syntax___typing___AAbsControl___process_control(val_t p0, val_t p1, val_t p
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   REGB0 = p4;
-  /* syntax/typing.nit:567 */
+  /* syntax/typing.nit:573 */
   ATTR_syntax___typing___AAbsControl____escapable(fra.me.REG[0]) = fra.me.REG[2];
-  /* syntax/typing.nit:568 */
+  /* syntax/typing.nit:574 */
   fra.me.REG[4] = CALL_syntax___typing___TypingVisitor___scope_ctx(fra.me.REG[1])(fra.me.REG[1]);
   CALL_syntax___scope___ScopeContext___push_escapable(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2], fra.me.REG[3]);
-  /* syntax/typing.nit:571 */
+  /* syntax/typing.nit:577 */
   fra.me.REG[3] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:572 */
+  /* syntax/typing.nit:578 */
   fra.me.REG[4] = CALL_syntax___typing___TypingVisitor___base_flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:573 */
+  /* syntax/typing.nit:579 */
   if (UNTAG_Bool(REGB0)) {
     fra.me.REG[5] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
     CALL_syntax___typing___TypingVisitor___base_flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
   }
-  /* syntax/typing.nit:576 */
+  /* syntax/typing.nit:582 */
   CALL_syntax___typing___AAbsControl___process_control_inside(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* syntax/typing.nit:579 */
+  /* syntax/typing.nit:585 */
   fra.me.REG[5] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
   REGB1 = CALL_syntax___flow___FlowContext___unreash(fra.me.REG[5])(fra.me.REG[5]);
   REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
   if (UNTAG_Bool(REGB1)) {
-    /* syntax/typing.nit:580 */
+    /* syntax/typing.nit:586 */
     fra.me.REG[5] = CALL_syntax___scope___EscapableBlock___break_flow_contexts(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[6] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   }
-  /* syntax/typing.nit:584 */
+  /* syntax/typing.nit:590 */
   fra.me.REG[6] = CALL_syntax___scope___EscapableBlock___break_flow_contexts(fra.me.REG[2])(fra.me.REG[2]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
   if (UNTAG_Bool(REGB1)) {
-    /* syntax/typing.nit:585 */
+    /* syntax/typing.nit:591 */
     CALL_syntax___typing___TypingVisitor___flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-    /* syntax/typing.nit:586 */
+    /* syntax/typing.nit:592 */
     CALL_syntax___typing___TypingVisitor___mark_unreash(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   } else {
-    /* syntax/typing.nit:588 */
+    /* syntax/typing.nit:594 */
     fra.me.REG[2] = CALL_syntax___scope___EscapableBlock___break_flow_contexts(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[2] = CALL_syntax___flow___FlowContext___merge(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0], fra.me.REG[2]);
     CALL_syntax___typing___TypingVisitor___flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* syntax/typing.nit:591 */
+  /* syntax/typing.nit:597 */
   if (UNTAG_Bool(REGB0)) {
     CALL_syntax___typing___TypingVisitor___base_flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   }
-  /* syntax/typing.nit:592 */
+  /* syntax/typing.nit:598 */
   fra.me.REG[1] = CALL_syntax___typing___TypingVisitor___scope_ctx(fra.me.REG[1])(fra.me.REG[1]);
   CALL_syntax___scope___ScopeContext___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:593 */
+  /* syntax/typing.nit:599 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -3874,13 +3888,13 @@ void syntax___typing___AAbsControl___process_control_inside(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 596;
+  fra.me.line = 602;
   fra.me.meth = LOCATE_syntax___typing___AAbsControl___process_control_inside;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  /* syntax/typing.nit:596 */
-  nit_abort("Deferred method called", NULL, LOCATE_syntax___typing, 596);
+  /* syntax/typing.nit:602 */
+  nit_abort("Deferred method called", NULL, LOCATE_syntax___typing, 602);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -3891,7 +3905,7 @@ void syntax___typing___ADoExpr___accept_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 602;
+  fra.me.line = 608;
   fra.me.meth = LOCATE_syntax___typing___ADoExpr___accept_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -3902,7 +3916,7 @@ void syntax___typing___ADoExpr___accept_typing(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:604 */
+  /* syntax/typing.nit:610 */
   fra.me.REG[2] = NEW_BreakOnlyEscapableBlock_syntax___scope___BreakOnlyEscapableBlock___init(fra.me.REG[0]);
   fra.me.REG[3] = CALL_parser___parser_nodes___ALabelable___n_label(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(0);
@@ -3916,7 +3930,7 @@ void syntax___typing___ADoExpr___process_control_inside(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 607;
+  fra.me.line = 613;
   fra.me.meth = LOCATE_syntax___typing___ADoExpr___process_control_inside;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3925,7 +3939,7 @@ void syntax___typing___ADoExpr___process_control_inside(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:609 */
+  /* syntax/typing.nit:615 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ADoExpr___n_block(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___enter_visit_block(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
@@ -3938,7 +3952,7 @@ void syntax___typing___AIfExpr___accept_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 614;
+  fra.me.line = 620;
   fra.me.meth = LOCATE_syntax___typing___AIfExpr___accept_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -3950,40 +3964,40 @@ void syntax___typing___AIfExpr___accept_typing(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:616 */
+  /* syntax/typing.nit:622 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AIfExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:617 */
+  /* syntax/typing.nit:623 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AIfExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_bool(fra.me.REG[1])(fra.me.REG[1]);
   CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[3]);
-  /* syntax/typing.nit:619 */
+  /* syntax/typing.nit:625 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AIfExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___AExpr___warn_parentheses(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  /* syntax/typing.nit:622 */
+  /* syntax/typing.nit:628 */
   fra.me.REG[3] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:623 */
+  /* syntax/typing.nit:629 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AIfExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___use_if_true_flow_ctx(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:626 */
+  /* syntax/typing.nit:632 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AIfExpr___n_then(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___enter_visit_block(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:629 */
+  /* syntax/typing.nit:635 */
   fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:632 */
+  /* syntax/typing.nit:638 */
   CALL_syntax___typing___TypingVisitor___flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/typing.nit:633 */
+  /* syntax/typing.nit:639 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AIfExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___use_if_false_flow_ctx(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/typing.nit:636 */
+  /* syntax/typing.nit:642 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AIfExpr___n_else(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___enter_visit_block(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/typing.nit:639 */
+  /* syntax/typing.nit:645 */
   fra.me.REG[3] = CALL_syntax___typing___TypingVisitor___base_flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[4] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[4] = CALL_syntax___flow___FlowContext___merge_reash(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0], fra.me.REG[2], fra.me.REG[4]);
   CALL_syntax___typing___TypingVisitor___flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/typing.nit:640 */
+  /* syntax/typing.nit:646 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -3996,7 +4010,7 @@ void syntax___typing___AWhileExpr___accept_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 646;
+  fra.me.line = 652;
   fra.me.meth = LOCATE_syntax___typing___AWhileExpr___accept_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4007,7 +4021,7 @@ void syntax___typing___AWhileExpr___accept_typing(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:648 */
+  /* syntax/typing.nit:654 */
   fra.me.REG[2] = NEW_EscapableBlock_syntax___scope___EscapableBlock___init(fra.me.REG[0]);
   fra.me.REG[3] = CALL_parser___parser_nodes___ALabelable___n_label(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(1);
@@ -4023,7 +4037,7 @@ void syntax___typing___AWhileExpr___process_control_inside(val_t p0, val_t p1){
     static val_t once_value_1; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 651;
+  fra.me.line = 657;
   fra.me.meth = LOCATE_syntax___typing___AWhileExpr___process_control_inside;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -4035,20 +4049,20 @@ void syntax___typing___AWhileExpr___process_control_inside(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:653 */
+  /* syntax/typing.nit:659 */
   fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:656 */
+  /* syntax/typing.nit:662 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AWhileExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/typing.nit:657 */
+  /* syntax/typing.nit:663 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AWhileExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_bool(fra.me.REG[1])(fra.me.REG[1]);
   CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3], fra.me.REG[4]);
-  /* syntax/typing.nit:659 */
+  /* syntax/typing.nit:665 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AWhileExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ATrueExpr, ID_parser___parser_nodes___ATrueExpr)) /*cast ATrueExpr*/;
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:660 */
+    /* syntax/typing.nit:666 */
     if (!once_value_1) {
       fra.me.REG[4] = BOX_NativeString("Warning: use 'loop' instead of 'while true do'.");
       REGB0 = TAG_Int(47);
@@ -4059,26 +4073,26 @@ void syntax___typing___AWhileExpr___process_control_inside(val_t p0, val_t p1){
     fra.me.REG[4] = fra.me.REG[4];
     CALL_syntax___syntax_base___AbsSyntaxVisitor___warning(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[4]);
   } else {
-    /* syntax/typing.nit:662 */
+    /* syntax/typing.nit:668 */
     fra.me.REG[4] = CALL_parser___parser_nodes___AWhileExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
     CALL_syntax___typing___AExpr___warn_parentheses(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
   }
-  /* syntax/typing.nit:666 */
+  /* syntax/typing.nit:672 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AWhileExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___use_if_true_flow_ctx(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/typing.nit:669 */
+  /* syntax/typing.nit:675 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AWhileExpr___n_block(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___enter_visit_block(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/typing.nit:672 */
+  /* syntax/typing.nit:678 */
   CALL_syntax___typing___TypingVisitor___flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:673 */
+  /* syntax/typing.nit:679 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AWhileExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___use_if_false_flow_ctx(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:674 */
+  /* syntax/typing.nit:680 */
   fra.me.REG[0] = CALL_syntax___typing___AAbsControl___escapable(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 674);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 680);
   }
   fra.me.REG[0] = CALL_syntax___scope___EscapableBlock___break_flow_contexts(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[1] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
@@ -4093,7 +4107,7 @@ void syntax___typing___ALoopExpr___accept_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 680;
+  fra.me.line = 686;
   fra.me.meth = LOCATE_syntax___typing___ALoopExpr___accept_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4104,7 +4118,7 @@ void syntax___typing___ALoopExpr___accept_typing(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:682 */
+  /* syntax/typing.nit:688 */
   fra.me.REG[2] = NEW_EscapableBlock_syntax___scope___EscapableBlock___init(fra.me.REG[0]);
   fra.me.REG[3] = CALL_parser___parser_nodes___ALabelable___n_label(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(1);
@@ -4118,7 +4132,7 @@ void syntax___typing___ALoopExpr___process_control_inside(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 685;
+  fra.me.line = 691;
   fra.me.meth = LOCATE_syntax___typing___ALoopExpr___process_control_inside;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -4128,10 +4142,10 @@ void syntax___typing___ALoopExpr___process_control_inside(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:688 */
+  /* syntax/typing.nit:694 */
   fra.me.REG[2] = CALL_parser___parser_nodes___ALoopExpr___n_block(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___enter_visit_block(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:691 */
+  /* syntax/typing.nit:697 */
   CALL_syntax___typing___TypingVisitor___mark_unreash(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
@@ -4143,7 +4157,7 @@ val_t syntax___typing___AForExpr___variables(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 698;
+  fra.me.line = 704;
   fra.me.meth = LOCATE_syntax___typing___AForExpr___variables;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4151,13 +4165,13 @@ val_t syntax___typing___AForExpr___variables(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:698 */
+  /* syntax/typing.nit:704 */
   fra.me.REG[1] = fra.me.REG[0];
   fra.me.REG[1] = ATTR_syntax___typing___AForExpr____variables(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 698);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 704);
   }
   goto label1;
   label1: while(0);
@@ -4171,7 +4185,7 @@ void syntax___typing___AForExpr___accept_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 700;
+  fra.me.line = 706;
   fra.me.meth = LOCATE_syntax___typing___AForExpr___accept_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4182,7 +4196,7 @@ void syntax___typing___AForExpr___accept_typing(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:702 */
+  /* syntax/typing.nit:708 */
   fra.me.REG[2] = NEW_EscapableBlock_syntax___scope___EscapableBlock___init(fra.me.REG[0]);
   fra.me.REG[3] = CALL_parser___parser_nodes___ALabelable___n_label(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(1);
@@ -4196,7 +4210,7 @@ void syntax___typing___AForExpr___process_control_inside(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 705;
+  fra.me.line = 711;
   fra.me.meth = LOCATE_syntax___typing___AForExpr___process_control_inside;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -4206,19 +4220,19 @@ void syntax___typing___AForExpr___process_control_inside(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:707 */
+  /* syntax/typing.nit:713 */
   fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___scope_ctx(fra.me.REG[1])(fra.me.REG[1]);
   CALL_syntax___scope___ScopeContext___push(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* syntax/typing.nit:708 */
+  /* syntax/typing.nit:714 */
   fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:710 */
+  /* syntax/typing.nit:716 */
   CALL_syntax___typing___AForExpr___do_typing(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* syntax/typing.nit:713 */
+  /* syntax/typing.nit:719 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AForExpr___n_block(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___enter_visit_block(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* syntax/typing.nit:716 */
+  /* syntax/typing.nit:722 */
   CALL_syntax___typing___TypingVisitor___flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:717 */
+  /* syntax/typing.nit:723 */
   fra.me.REG[1] = CALL_syntax___typing___TypingVisitor___scope_ctx(fra.me.REG[1])(fra.me.REG[1]);
   CALL_syntax___scope___ScopeContext___pop(fra.me.REG[1])(fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
@@ -4252,7 +4266,7 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
       static val_t once_value_18; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 720;
+  fra.me.line = 726;
   fra.me.meth = LOCATE_syntax___typing___AForExpr___do_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -4267,30 +4281,30 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:723 */
+  /* syntax/typing.nit:729 */
   fra.me.REG[2] = NEW_Array_standard___collection___array___Array___init();
-  /* syntax/typing.nit:724 */
+  /* syntax/typing.nit:730 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AForExpr___n_ids(fra.me.REG[0])(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_syntax___typing___AForExpr___do_typing_1));
-  /* syntax/typing.nit:729 */
+  /* syntax/typing.nit:735 */
   ATTR_syntax___typing___AForExpr____variables(fra.me.REG[0]) = fra.me.REG[2];
-  /* syntax/typing.nit:732 */
+  /* syntax/typing.nit:738 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AForExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/typing.nit:733 */
+  /* syntax/typing.nit:739 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AForExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___syntax_base___AbsSyntaxVisitor___check_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label2;
   }
-  /* syntax/typing.nit:734 */
+  /* syntax/typing.nit:740 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AForExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[3])(fra.me.REG[3]);
-  /* syntax/typing.nit:736 */
+  /* syntax/typing.nit:742 */
   REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[3])(fra.me.REG[3]);
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:737 */
+    /* syntax/typing.nit:743 */
     fra.me.REG[4] = CALL_parser___parser_nodes___AForExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
     if (!once_value_3) {
       fra.me.REG[5] = BOX_NativeString("Type error: 'for' on a nullable expression.");
@@ -4301,13 +4315,13 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
     } else fra.me.REG[5] = once_value_3;
     fra.me.REG[5] = fra.me.REG[5];
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4], fra.me.REG[5]);
-    /* syntax/typing.nit:738 */
+    /* syntax/typing.nit:744 */
     goto label2;
   }
-  /* syntax/typing.nit:740 */
+  /* syntax/typing.nit:746 */
   fra.me.REG[5] = CALL_parser___parser_nodes___AForExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___AExpr___warn_parentheses(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[1]);
-  /* syntax/typing.nit:743 */
+  /* syntax/typing.nit:749 */
   if (!once_value_4) {
     if (!once_value_5) {
       fra.me.REG[5] = BOX_NativeString("iterate");
@@ -4322,12 +4336,12 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
     register_static_object(&once_value_4);
   } else fra.me.REG[5] = once_value_4;
   fra.me.REG[5] = fra.me.REG[5];
-  /* syntax/typing.nit:744 */
+  /* syntax/typing.nit:750 */
   fra.me.REG[4] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = CALL_metamodel___abstractmetamodel___MMLocalClass___has_global_property_by_name(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:745 */
+    /* syntax/typing.nit:751 */
     fra.me.REG[4] = CALL_parser___parser_nodes___AForExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
     REGB0 = TAG_Int(3);
     fra.me.REG[6] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
@@ -4353,21 +4367,21 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
     fra.me.REG[6] = CALL_standard___string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4], fra.me.REG[6]);
-    /* syntax/typing.nit:746 */
+    /* syntax/typing.nit:752 */
     goto label2;
   }
-  /* syntax/typing.nit:748 */
+  /* syntax/typing.nit:754 */
   fra.me.REG[6] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[5] = CALL_metamodel___abstractmetamodel___MMLocalClass___select_method(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[5]);
-  /* syntax/typing.nit:749 */
+  /* syntax/typing.nit:755 */
   fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[5])(fra.me.REG[5]);
   fra.me.REG[4] = CALL_syntax___syntax_base___AbsSyntaxVisitor___mmmodule(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[7] = CALL_parser___parser_nodes___AForExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___typing___AExpr___is_self(fra.me.REG[7])(fra.me.REG[7]);
   CALL_syntax___syntax_base___MMGlobalProperty___check_visibility(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[1], fra.me.REG[0], fra.me.REG[4], REGB0);
-  /* syntax/typing.nit:750 */
+  /* syntax/typing.nit:756 */
   fra.me.REG[3] = CALL_metamodel___static_type___MMLocalProperty___signature_for(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
-  /* syntax/typing.nit:751 */
+  /* syntax/typing.nit:757 */
   fra.me.REG[5] = CALL_parser___parser_nodes___AForExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___typing___AExpr___is_self(fra.me.REG[5])(fra.me.REG[5]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
@@ -4375,7 +4389,7 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
     fra.me.REG[5] = CALL_metamodel___static_type___MMSignature___not_for_self(fra.me.REG[3])(fra.me.REG[3]);
     fra.me.REG[3] = fra.me.REG[5];
   }
-  /* syntax/typing.nit:752 */
+  /* syntax/typing.nit:758 */
   REGB0 = CALL_metamodel___static_type___MMSignature___arity(fra.me.REG[3])(fra.me.REG[3]);
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB1));
@@ -4383,12 +4397,12 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB1 = TAG_Bool((REGB0)==(REGB1));
-    /* syntax/typing.nit:752 */
+    /* syntax/typing.nit:758 */
     REGB2 = REGB1;
   }
   REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
   if (UNTAG_Bool(REGB2)) {
-    /* syntax/typing.nit:753 */
+    /* syntax/typing.nit:759 */
     if (!once_value_8) {
       fra.me.REG[5] = BOX_NativeString("Error: 'iterate' incompatible with 'for': require no arguments.");
       REGB2 = TAG_Int(63);
@@ -4398,10 +4412,10 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
     } else fra.me.REG[5] = once_value_8;
     fra.me.REG[5] = fra.me.REG[5];
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[5]);
-    /* syntax/typing.nit:754 */
+    /* syntax/typing.nit:760 */
     goto label2;
   } else {
-    /* syntax/typing.nit:755 */
+    /* syntax/typing.nit:761 */
     fra.me.REG[5] = CALL_metamodel___static_type___MMSignature___closures(fra.me.REG[3])(fra.me.REG[3]);
     /* ../lib/standard/collection/array.nit:24 */
     REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[5])!=NIT_NULL);
@@ -4410,19 +4424,19 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
       nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
     }
     REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[5]);
-    /* syntax/typing.nit:755 */
+    /* syntax/typing.nit:761 */
     REGB1 = TAG_Int(1);
     REGB0 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB1));
     if (UNTAG_Bool(REGB0)) {
     } else {
       /* ../lib/standard/kernel.nit:230 */
       REGB1 = TAG_Bool((REGB2)==(REGB1));
-      /* syntax/typing.nit:755 */
+      /* syntax/typing.nit:761 */
       REGB0 = REGB1;
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:756 */
+      /* syntax/typing.nit:762 */
       if (!once_value_9) {
         fra.me.REG[5] = BOX_NativeString("Error: 'iterate' incompatible with 'for': require one closure.");
         REGB0 = TAG_Int(62);
@@ -4432,20 +4446,20 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
       } else fra.me.REG[5] = once_value_9;
       fra.me.REG[5] = fra.me.REG[5];
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[5]);
-      /* syntax/typing.nit:757 */
+      /* syntax/typing.nit:763 */
       goto label2;
     }
   }
-  /* syntax/typing.nit:759 */
+  /* syntax/typing.nit:765 */
   fra.me.REG[5] = CALL_metamodel___static_type___MMSignature___closures(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[5] = CALL_standard___collection___abstract_collection___Collection___first(fra.me.REG[5])(fra.me.REG[5]);
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 759);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 765);
   }
   fra.me.REG[5] = CALL_metamodel___static_type___MMClosure___signature(fra.me.REG[5])(fra.me.REG[5]);
   fra.me.REG[3] = fra.me.REG[5];
-  /* syntax/typing.nit:760 */
+  /* syntax/typing.nit:766 */
   fra.me.REG[5] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -4461,7 +4475,7 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:761 */
+    /* syntax/typing.nit:767 */
     if (!once_value_10) {
       fra.me.REG[5] = BOX_NativeString("Error: 'iterate' incompatible with 'for': require one procedural closure.");
       REGB0 = TAG_Int(73);
@@ -4471,7 +4485,7 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
     } else fra.me.REG[5] = once_value_10;
     fra.me.REG[5] = fra.me.REG[5];
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[5]);
-    /* syntax/typing.nit:762 */
+    /* syntax/typing.nit:768 */
     goto label2;
   }
   /* ../lib/standard/collection/array.nit:24 */
@@ -4481,19 +4495,19 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
-  /* syntax/typing.nit:764 */
+  /* syntax/typing.nit:770 */
   REGB1 = CALL_metamodel___static_type___MMSignature___arity(fra.me.REG[3])(fra.me.REG[3]);
   REGB2 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB1));
   if (UNTAG_Bool(REGB2)) {
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB1 = TAG_Bool((REGB0)==(REGB1));
-    /* syntax/typing.nit:764 */
+    /* syntax/typing.nit:770 */
     REGB2 = REGB1;
   }
   REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
   if (UNTAG_Bool(REGB2)) {
-    /* syntax/typing.nit:765 */
+    /* syntax/typing.nit:771 */
     REGB2 = CALL_metamodel___static_type___MMSignature___arity(fra.me.REG[3])(fra.me.REG[3]);
     REGB1 = TAG_Int(1);
     REGB0 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB1));
@@ -4501,11 +4515,11 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
     } else {
       /* ../lib/standard/kernel.nit:230 */
       REGB1 = TAG_Bool((REGB2)==(REGB1));
-      /* syntax/typing.nit:765 */
+      /* syntax/typing.nit:771 */
       REGB0 = REGB1;
     }
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:766 */
+      /* syntax/typing.nit:772 */
       REGB0 = TAG_Int(7);
       fra.me.REG[5] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
       if (!once_value_11) {
@@ -4547,7 +4561,7 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
         nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
       }
       REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
-      /* syntax/typing.nit:766 */
+      /* syntax/typing.nit:772 */
       fra.me.REG[4] = CALL_standard___string___Object___to_s(REGB0)(REGB0);
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
       if (!once_value_14) {
@@ -4562,7 +4576,7 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
       fra.me.REG[5] = CALL_standard___string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[5]);
     } else {
-      /* syntax/typing.nit:768 */
+      /* syntax/typing.nit:774 */
       REGB0 = TAG_Int(7);
       fra.me.REG[5] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
       if (!once_value_15) {
@@ -4604,7 +4618,7 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
         nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
       }
       REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
-      /* syntax/typing.nit:768 */
+      /* syntax/typing.nit:774 */
       fra.me.REG[4] = CALL_standard___string___Object___to_s(REGB0)(REGB0);
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
       if (!once_value_18) {
@@ -4619,10 +4633,10 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
       fra.me.REG[5] = CALL_standard___string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[5]);
     }
-    /* syntax/typing.nit:770 */
+    /* syntax/typing.nit:776 */
     goto label2;
   }
-  /* syntax/typing.nit:774 */
+  /* syntax/typing.nit:780 */
   REGB0 = TAG_Int(0);
   /* ../lib/standard/collection/array.nit:24 */
   REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
@@ -4642,7 +4656,7 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB2)) {
-      /* syntax/typing.nit:774 */
+      /* syntax/typing.nit:780 */
       REGB2 = REGB0;
       /* ../lib/standard/collection/array.nit:278 */
       fra.me.REG[5] = fra.me.REG[2];
@@ -4686,16 +4700,16 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB4)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB3)];
       /* ../lib/standard/collection/array.nit:281 */
       goto label19;
       label19: while(0);
-      /* syntax/typing.nit:775 */
+      /* syntax/typing.nit:781 */
       fra.me.REG[0] = CALL_metamodel___static_type___MMSignature_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
       REGB2 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
       if (UNTAG_Bool(REGB2)) {
-        nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 775);
+        nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 781);
       }
       CALL_syntax___syntax_base___Variable___stype__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
       /* ../lib/standard/kernel.nit:357 */
@@ -4731,13 +4745,13 @@ void syntax___typing___AForExpr___do_typing(val_t p0, val_t p1){
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* syntax/typing.nit:725 */
+    /* syntax/typing.nit:731 */
     fra.me.REG[1] = CALL_syntax___syntax_base___Token___to_symbol(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[0] = NEW_AutoVariable_syntax___syntax_base___AutoVariable___init(fra.me.REG[1], fra.me.REG[0]);
-    /* syntax/typing.nit:726 */
+    /* syntax/typing.nit:732 */
     fra.me.REG[1] = CALL_syntax___typing___TypingVisitor___scope_ctx(closctx->REG[1])(closctx->REG[1]);
     CALL_syntax___scope___ScopeContext___add_variable(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* syntax/typing.nit:727 */
+    /* syntax/typing.nit:733 */
     CALL_standard___collection___abstract_collection___SimpleCollection___add(closctx->REG[2])(closctx->REG[2], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -4750,7 +4764,7 @@ void syntax___typing___AAssertExpr___accept_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 781;
+  fra.me.line = 787;
   fra.me.meth = LOCATE_syntax___typing___AAssertExpr___accept_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4761,17 +4775,17 @@ void syntax___typing___AAssertExpr___accept_typing(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:784 */
+  /* syntax/typing.nit:790 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AAssertExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:785 */
+  /* syntax/typing.nit:791 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AAssertExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_bool(fra.me.REG[1])(fra.me.REG[1]);
   CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[3]);
-  /* syntax/typing.nit:786 */
+  /* syntax/typing.nit:792 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AAssertExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___AExpr___warn_parentheses(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-  /* syntax/typing.nit:789 */
+  /* syntax/typing.nit:795 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AAssertExpr___n_else(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -4787,21 +4801,21 @@ void syntax___typing___AAssertExpr___accept_typing(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:790 */
+    /* syntax/typing.nit:796 */
     fra.me.REG[3] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
-    /* syntax/typing.nit:791 */
+    /* syntax/typing.nit:797 */
     fra.me.REG[2] = CALL_parser___parser_nodes___AAssertExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
     CALL_syntax___typing___TypingVisitor___use_if_false_flow_ctx(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    /* syntax/typing.nit:792 */
+    /* syntax/typing.nit:798 */
     fra.me.REG[2] = CALL_parser___parser_nodes___AAssertExpr___n_else(fra.me.REG[0])(fra.me.REG[0]);
     CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    /* syntax/typing.nit:793 */
+    /* syntax/typing.nit:799 */
     CALL_syntax___typing___TypingVisitor___flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   }
-  /* syntax/typing.nit:797 */
+  /* syntax/typing.nit:803 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AAssertExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___use_if_true_flow_ctx(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/typing.nit:798 */
+  /* syntax/typing.nit:804 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -4814,7 +4828,7 @@ val_t syntax___typing___AVarFormExpr___variable(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 804;
+  fra.me.line = 810;
   fra.me.meth = LOCATE_syntax___typing___AVarFormExpr___variable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -4822,13 +4836,13 @@ val_t syntax___typing___AVarFormExpr___variable(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:804 */
+  /* syntax/typing.nit:810 */
   fra.me.REG[1] = fra.me.REG[0];
   fra.me.REG[1] = ATTR_syntax___typing___AVarFormExpr____variable(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 804);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 810);
   }
   goto label1;
   label1: while(0);
@@ -4841,14 +4855,14 @@ val_t syntax___typing___AVarExpr___its_variable(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 808;
+  fra.me.line = 814;
   fra.me.meth = LOCATE_syntax___typing___AVarExpr___its_variable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:808 */
+  /* syntax/typing.nit:814 */
   fra.me.REG[0] = CALL_syntax___syntax_base___AVarFormExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
   label1: while(0);
@@ -4863,7 +4877,7 @@ void syntax___typing___AVarExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 810;
+  fra.me.line = 816;
   fra.me.meth = LOCATE_syntax___typing___AVarExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -4874,16 +4888,16 @@ void syntax___typing___AVarExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:812 */
+  /* syntax/typing.nit:818 */
   fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AVarFormExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___flow___FlowContext___check_is_set(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0], fra.me.REG[3]);
-  /* syntax/typing.nit:813 */
+  /* syntax/typing.nit:819 */
   fra.me.REG[1] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AVarFormExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___flow___FlowContext___stype(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[3];
-  /* syntax/typing.nit:814 */
+  /* syntax/typing.nit:820 */
   fra.me.REG[3] = ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -4910,7 +4924,7 @@ void syntax___typing___AVarAssignExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 819;
+  fra.me.line = 825;
   fra.me.meth = LOCATE_syntax___typing___AVarAssignExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -4922,21 +4936,21 @@ void syntax___typing___AVarAssignExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:821 */
+  /* syntax/typing.nit:827 */
   fra.me.REG[2] = CALL_syntax___syntax_base___AVarFormExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___mark_is_set(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:824 */
+  /* syntax/typing.nit:830 */
   fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___base_flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AVarFormExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___flow___FlowContext___stype(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  /* syntax/typing.nit:825 */
+  /* syntax/typing.nit:831 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AAssignFormExpr___n_value(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___syntax_base___AbsSyntaxVisitor___check_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:826 */
+  /* syntax/typing.nit:832 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -4961,14 +4975,14 @@ void syntax___typing___AVarAssignExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:829 */
+  /* syntax/typing.nit:835 */
   fra.me.REG[3] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[2] = CALL_syntax___syntax_base___AVarFormExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_parser___parser_nodes___AAssignFormExpr___n_value(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[4])(fra.me.REG[4]);
   fra.me.REG[4] = CALL_syntax___flow___FlowContext___sub_with(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0], fra.me.REG[2], fra.me.REG[4]);
   CALL_syntax___typing___TypingVisitor___flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/typing.nit:831 */
+  /* syntax/typing.nit:837 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   label1: while(0);
@@ -4988,7 +5002,7 @@ val_t syntax___typing___AReassignFormExpr___do_rvalue_typing(val_t p0, val_t p1,
     static val_t once_value_6; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 836;
+  fra.me.line = 842;
   fra.me.meth = LOCATE_syntax___typing___AReassignFormExpr___do_rvalue_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -5004,7 +5018,7 @@ val_t syntax___typing___AReassignFormExpr___do_rvalue_typing(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* syntax/typing.nit:841 */
+  /* syntax/typing.nit:847 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5018,17 +5032,17 @@ val_t syntax___typing___AReassignFormExpr___do_rvalue_typing(val_t p0, val_t p1,
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:842 */
+    /* syntax/typing.nit:848 */
     fra.me.REG[3] = NIT_NULL;
     goto label1;
   }
-  /* syntax/typing.nit:844 */
+  /* syntax/typing.nit:850 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AReassignFormExpr___n_assign_op(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_syntax___typing___AAssignOp___method_name(fra.me.REG[4])(fra.me.REG[4]);
-  /* syntax/typing.nit:845 */
+  /* syntax/typing.nit:851 */
   REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:846 */
+    /* syntax/typing.nit:852 */
     REGB0 = TAG_Int(3);
     fra.me.REG[5] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
     if (!once_value_2) {
@@ -5053,21 +5067,21 @@ val_t syntax___typing___AReassignFormExpr___do_rvalue_typing(val_t p0, val_t p1,
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
     fra.me.REG[5] = CALL_standard___string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[5]);
-    /* syntax/typing.nit:847 */
+    /* syntax/typing.nit:853 */
     fra.me.REG[3] = NIT_NULL;
     goto label1;
   }
-  /* syntax/typing.nit:849 */
+  /* syntax/typing.nit:855 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 849);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 855);
   }
   fra.me.REG[5] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:850 */
+  /* syntax/typing.nit:856 */
   REGB0 = CALL_metamodel___abstractmetamodel___MMLocalClass___has_global_property_by_name(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:851 */
+    /* syntax/typing.nit:857 */
     REGB0 = TAG_Int(5);
     fra.me.REG[6] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
     if (!once_value_4) {
@@ -5103,22 +5117,22 @@ val_t syntax___typing___AReassignFormExpr___do_rvalue_typing(val_t p0, val_t p1,
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
     fra.me.REG[6] = CALL_standard___string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[6]);
-    /* syntax/typing.nit:852 */
+    /* syntax/typing.nit:858 */
     fra.me.REG[3] = NIT_NULL;
     goto label1;
   }
-  /* syntax/typing.nit:854 */
+  /* syntax/typing.nit:860 */
   fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMLocalClass___select_method(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
-  /* syntax/typing.nit:855 */
+  /* syntax/typing.nit:861 */
   fra.me.REG[5] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[4])(fra.me.REG[4]);
   fra.me.REG[6] = CALL_syntax___syntax_base___AbsSyntaxVisitor___mmmodule(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool(0);
   CALL_syntax___syntax_base___MMGlobalProperty___check_visibility(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[1], fra.me.REG[0], fra.me.REG[6], REGB0);
-  /* syntax/typing.nit:856 */
+  /* syntax/typing.nit:862 */
   fra.me.REG[2] = CALL_metamodel___static_type___MMLocalProperty___signature_for(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-  /* syntax/typing.nit:857 */
+  /* syntax/typing.nit:863 */
   ATTR_syntax___typing___AReassignFormExpr____assign_method(fra.me.REG[0]) = fra.me.REG[4];
-  /* syntax/typing.nit:858 */
+  /* syntax/typing.nit:864 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AReassignFormExpr___n_value(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Int(0);
   fra.me.REG[4] = CALL_metamodel___static_type___MMSignature_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
@@ -5129,11 +5143,11 @@ val_t syntax___typing___AReassignFormExpr___do_rvalue_typing(val_t p0, val_t p1,
     fra.me.REG[3] = NIT_NULL;
     goto label1;
   }
-  /* syntax/typing.nit:859 */
+  /* syntax/typing.nit:865 */
   fra.me.REG[2] = CALL_metamodel___static_type___MMSignature___return_type(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_syntax___typing, 859);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 865);
   }
   fra.me.REG[2] = CALL_metamodel___static_type___MMType___not_for_self(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[3] = fra.me.REG[2];
@@ -5149,7 +5163,7 @@ val_t syntax___typing___AReassignFormExpr___assign_method(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 862;
+  fra.me.line = 868;
   fra.me.meth = LOCATE_syntax___typing___AReassignFormExpr___assign_method;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5157,13 +5171,13 @@ val_t syntax___typing___AReassignFormExpr___assign_method(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:862 */
+  /* syntax/typing.nit:868 */
   fra.me.REG[1] = fra.me.REG[0];
   fra.me.REG[1] = ATTR_syntax___typing___AReassignFormExpr____assign_method(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 862);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 868);
   }
   goto label1;
   label1: while(0);
@@ -5178,7 +5192,7 @@ void syntax___typing___AVarReassignExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 867;
+  fra.me.line = 873;
   fra.me.meth = LOCATE_syntax___typing___AVarReassignExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -5190,20 +5204,20 @@ void syntax___typing___AVarReassignExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:869 */
+  /* syntax/typing.nit:875 */
   fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AVarFormExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___flow___FlowContext___check_is_set(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0], fra.me.REG[3]);
-  /* syntax/typing.nit:870 */
+  /* syntax/typing.nit:876 */
   fra.me.REG[3] = CALL_syntax___syntax_base___AVarFormExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___mark_is_set(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/typing.nit:871 */
+  /* syntax/typing.nit:877 */
   fra.me.REG[3] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[2] = CALL_syntax___syntax_base___AVarFormExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_syntax___flow___FlowContext___stype(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-  /* syntax/typing.nit:872 */
+  /* syntax/typing.nit:878 */
   fra.me.REG[2] = CALL_syntax___typing___AReassignFormExpr___do_rvalue_typing(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:873 */
+  /* syntax/typing.nit:879 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5219,18 +5233,18 @@ void syntax___typing___AVarReassignExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:876 */
+  /* syntax/typing.nit:882 */
   fra.me.REG[3] = CALL_syntax___typing___TypingVisitor___base_flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[4] = CALL_syntax___syntax_base___AVarFormExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_syntax___flow___FlowContext___stype(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
-  /* syntax/typing.nit:877 */
+  /* syntax/typing.nit:883 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AReassignFormExpr___n_value(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___syntax_base___AbsSyntaxVisitor___check_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:878 */
+  /* syntax/typing.nit:884 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5255,12 +5269,12 @@ void syntax___typing___AVarReassignExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:881 */
+  /* syntax/typing.nit:887 */
   fra.me.REG[4] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AVarFormExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_syntax___flow___FlowContext___sub_with(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0], fra.me.REG[3], fra.me.REG[2]);
   CALL_syntax___typing___TypingVisitor___flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:883 */
+  /* syntax/typing.nit:889 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   label1: while(0);
@@ -5273,13 +5287,13 @@ val_t syntax___typing___AAssignOp___method_name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 888;
+  fra.me.line = 894;
   fra.me.meth = LOCATE_syntax___typing___AAssignOp___method_name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  /* syntax/typing.nit:888 */
-  nit_abort("Deferred method called", NULL, LOCATE_syntax___typing, 888);
+  /* syntax/typing.nit:894 */
+  nit_abort("Deferred method called", NULL, LOCATE_syntax___typing, 894);
   stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
@@ -5292,14 +5306,14 @@ val_t syntax___typing___APlusAssignOp___method_name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 891;
+  fra.me.line = 897;
   fra.me.meth = LOCATE_syntax___typing___APlusAssignOp___method_name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:891 */
+  /* syntax/typing.nit:897 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("+");
@@ -5328,14 +5342,14 @@ val_t syntax___typing___AMinusAssignOp___method_name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 894;
+  fra.me.line = 900;
   fra.me.meth = LOCATE_syntax___typing___AMinusAssignOp___method_name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:894 */
+  /* syntax/typing.nit:900 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("-");
@@ -5362,7 +5376,7 @@ val_t syntax___typing___ASelfExpr___variable(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 899;
+  fra.me.line = 905;
   fra.me.meth = LOCATE_syntax___typing___ASelfExpr___variable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5370,13 +5384,13 @@ val_t syntax___typing___ASelfExpr___variable(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:899 */
+  /* syntax/typing.nit:905 */
   fra.me.REG[1] = fra.me.REG[0];
   fra.me.REG[1] = ATTR_syntax___typing___ASelfExpr____variable(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 899);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 905);
   }
   goto label1;
   label1: while(0);
@@ -5389,14 +5403,14 @@ val_t syntax___typing___ASelfExpr___its_variable(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 901;
+  fra.me.line = 907;
   fra.me.meth = LOCATE_syntax___typing___ASelfExpr___its_variable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:901 */
+  /* syntax/typing.nit:907 */
   fra.me.REG[0] = CALL_syntax___syntax_base___ASelfExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
   label1: while(0);
@@ -5410,7 +5424,7 @@ void syntax___typing___ASelfExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 903;
+  fra.me.line = 909;
   fra.me.meth = LOCATE_syntax___typing___ASelfExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -5420,15 +5434,15 @@ void syntax___typing___ASelfExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:905 */
+  /* syntax/typing.nit:911 */
   fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___self_var(fra.me.REG[1])(fra.me.REG[1]);
   ATTR_syntax___typing___ASelfExpr____variable(fra.me.REG[0]) = fra.me.REG[2];
-  /* syntax/typing.nit:906 */
+  /* syntax/typing.nit:912 */
   fra.me.REG[1] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[2] = CALL_syntax___syntax_base___ASelfExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_syntax___flow___FlowContext___stype(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[2];
-  /* syntax/typing.nit:907 */
+  /* syntax/typing.nit:913 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -5441,14 +5455,14 @@ val_t syntax___typing___ASelfExpr___is_self(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 910;
+  fra.me.line = 916;
   fra.me.meth = LOCATE_syntax___typing___ASelfExpr___is_self;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:910 */
+  /* syntax/typing.nit:916 */
   REGB0 = TAG_Bool(1);
   goto label1;
   label1: while(0);
@@ -5462,14 +5476,14 @@ val_t syntax___typing___AImplicitSelfExpr___is_implicit_self(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 914;
+  fra.me.line = 920;
   fra.me.meth = LOCATE_syntax___typing___AImplicitSelfExpr___is_implicit_self;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:914 */
+  /* syntax/typing.nit:920 */
   REGB0 = TAG_Bool(1);
   goto label1;
   label1: while(0);
@@ -5484,7 +5498,7 @@ void syntax___typing___AIfexprExpr___accept_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 918;
+  fra.me.line = 924;
   fra.me.meth = LOCATE_syntax___typing___AIfexprExpr___accept_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -5496,37 +5510,37 @@ void syntax___typing___AIfexprExpr___accept_typing(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:920 */
+  /* syntax/typing.nit:926 */
   fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:923 */
+  /* syntax/typing.nit:929 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AIfexprExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/typing.nit:924 */
+  /* syntax/typing.nit:930 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AIfexprExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_bool(fra.me.REG[1])(fra.me.REG[1]);
   CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3], fra.me.REG[4]);
-  /* syntax/typing.nit:927 */
+  /* syntax/typing.nit:933 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AIfexprExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___use_if_true_flow_ctx(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/typing.nit:930 */
+  /* syntax/typing.nit:936 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AIfexprExpr___n_then(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___enter_visit_block(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/typing.nit:933 */
+  /* syntax/typing.nit:939 */
   fra.me.REG[4] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:936 */
+  /* syntax/typing.nit:942 */
   CALL_syntax___typing___TypingVisitor___flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:937 */
+  /* syntax/typing.nit:943 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AIfexprExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___use_if_false_flow_ctx(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:940 */
+  /* syntax/typing.nit:946 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AIfexprExpr___n_else(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___enter_visit_block(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:943 */
+  /* syntax/typing.nit:949 */
   fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___base_flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[3] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[3] = CALL_syntax___flow___FlowContext___merge_reash(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
   CALL_syntax___typing___TypingVisitor___flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/typing.nit:945 */
+  /* syntax/typing.nit:951 */
   REGB0 = TAG_Int(2);
   fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   fra.me.REG[4] = CALL_parser___parser_nodes___AIfexprExpr___n_then(fra.me.REG[0])(fra.me.REG[0]);
@@ -5534,7 +5548,7 @@ void syntax___typing___AIfexprExpr___accept_typing(val_t p0, val_t p1){
   fra.me.REG[4] = CALL_parser___parser_nodes___AIfexprExpr___n_else(fra.me.REG[0])(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_multiexpr(fra.me.REG[1])(fra.me.REG[1], NIT_NULL, fra.me.REG[3]);
-  /* syntax/typing.nit:946 */
+  /* syntax/typing.nit:952 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5550,9 +5564,9 @@ void syntax___typing___AIfexprExpr___accept_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:948 */
+  /* syntax/typing.nit:954 */
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[3];
-  /* syntax/typing.nit:949 */
+  /* syntax/typing.nit:955 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   label1: while(0);
@@ -5566,7 +5580,7 @@ void syntax___typing___ABoolExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 954;
+  fra.me.line = 960;
   fra.me.meth = LOCATE_syntax___typing___ABoolExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5575,10 +5589,10 @@ void syntax___typing___ABoolExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:956 */
+  /* syntax/typing.nit:962 */
   fra.me.REG[1] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_bool(fra.me.REG[1])(fra.me.REG[1]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/typing.nit:957 */
+  /* syntax/typing.nit:963 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -5592,7 +5606,7 @@ void syntax___typing___AOrExpr___accept_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 962;
+  fra.me.line = 968;
   fra.me.meth = LOCATE_syntax___typing___AOrExpr___accept_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -5604,22 +5618,22 @@ void syntax___typing___AOrExpr___accept_typing(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:964 */
+  /* syntax/typing.nit:970 */
   fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:965 */
+  /* syntax/typing.nit:971 */
   fra.me.REG[3] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_bool(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:966 */
+  /* syntax/typing.nit:972 */
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[3];
-  /* syntax/typing.nit:969 */
+  /* syntax/typing.nit:975 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AOrExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/typing.nit:972 */
+  /* syntax/typing.nit:978 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AOrExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___use_if_false_flow_ctx(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/typing.nit:975 */
+  /* syntax/typing.nit:981 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AOrExpr___n_expr2(fra.me.REG[0])(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/typing.nit:976 */
+  /* syntax/typing.nit:982 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AOrExpr___n_expr2(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_syntax___typing___AExpr___if_false_flow_ctx(fra.me.REG[4])(fra.me.REG[4]);
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
@@ -5636,26 +5650,26 @@ void syntax___typing___AOrExpr___accept_typing(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:977 */
+    /* syntax/typing.nit:983 */
     fra.me.REG[4] = CALL_parser___parser_nodes___AOrExpr___n_expr2(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[4] = CALL_syntax___typing___AExpr___if_false_flow_ctx(fra.me.REG[4])(fra.me.REG[4]);
     ATTR_syntax___typing___AExpr____if_false_flow_ctx(fra.me.REG[0]) = fra.me.REG[4];
   } else {
-    /* syntax/typing.nit:979 */
+    /* syntax/typing.nit:985 */
     fra.me.REG[4] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
     ATTR_syntax___typing___AExpr____if_false_flow_ctx(fra.me.REG[0]) = fra.me.REG[4];
   }
-  /* syntax/typing.nit:982 */
+  /* syntax/typing.nit:988 */
   CALL_syntax___typing___TypingVisitor___flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:984 */
+  /* syntax/typing.nit:990 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AOrExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[3]);
-  /* syntax/typing.nit:985 */
+  /* syntax/typing.nit:991 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AOrExpr___n_expr2(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[3]);
-  /* syntax/typing.nit:986 */
+  /* syntax/typing.nit:992 */
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[3];
-  /* syntax/typing.nit:987 */
+  /* syntax/typing.nit:993 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -5669,7 +5683,7 @@ void syntax___typing___AAndExpr___accept_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 992;
+  fra.me.line = 998;
   fra.me.meth = LOCATE_syntax___typing___AAndExpr___accept_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -5681,20 +5695,20 @@ void syntax___typing___AAndExpr___accept_typing(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:994 */
+  /* syntax/typing.nit:1000 */
   fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:995 */
+  /* syntax/typing.nit:1001 */
   fra.me.REG[3] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_bool(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:998 */
+  /* syntax/typing.nit:1004 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AAndExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/typing.nit:1001 */
+  /* syntax/typing.nit:1007 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AAndExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___TypingVisitor___use_if_true_flow_ctx(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/typing.nit:1004 */
+  /* syntax/typing.nit:1010 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AAndExpr___n_expr2(fra.me.REG[0])(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/typing.nit:1005 */
+  /* syntax/typing.nit:1011 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AAndExpr___n_expr2(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_syntax___typing___AExpr___if_true_flow_ctx(fra.me.REG[4])(fra.me.REG[4]);
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
@@ -5711,26 +5725,26 @@ void syntax___typing___AAndExpr___accept_typing(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1006 */
+    /* syntax/typing.nit:1012 */
     fra.me.REG[4] = CALL_parser___parser_nodes___AAndExpr___n_expr2(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[4] = CALL_syntax___typing___AExpr___if_true_flow_ctx(fra.me.REG[4])(fra.me.REG[4]);
     ATTR_syntax___typing___AExpr____if_true_flow_ctx(fra.me.REG[0]) = fra.me.REG[4];
   } else {
-    /* syntax/typing.nit:1008 */
+    /* syntax/typing.nit:1014 */
     fra.me.REG[4] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
     ATTR_syntax___typing___AExpr____if_true_flow_ctx(fra.me.REG[0]) = fra.me.REG[4];
   }
-  /* syntax/typing.nit:1011 */
+  /* syntax/typing.nit:1017 */
   CALL_syntax___typing___TypingVisitor___flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:1013 */
+  /* syntax/typing.nit:1019 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AAndExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[3]);
-  /* syntax/typing.nit:1014 */
+  /* syntax/typing.nit:1020 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AAndExpr___n_expr2(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[3]);
-  /* syntax/typing.nit:1015 */
+  /* syntax/typing.nit:1021 */
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[3];
-  /* syntax/typing.nit:1016 */
+  /* syntax/typing.nit:1022 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -5743,7 +5757,7 @@ void syntax___typing___ANotExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1021;
+  fra.me.line = 1027;
   fra.me.meth = LOCATE_syntax___typing___ANotExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5754,22 +5768,22 @@ void syntax___typing___ANotExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1023 */
+  /* syntax/typing.nit:1029 */
   fra.me.REG[2] = CALL_parser___parser_nodes___ANotExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_bool(fra.me.REG[1])(fra.me.REG[1]);
   CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[3]);
-  /* syntax/typing.nit:1026 */
+  /* syntax/typing.nit:1032 */
   fra.me.REG[3] = CALL_parser___parser_nodes___ANotExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = ATTR_syntax___typing___AExpr____if_true_flow_ctx(fra.me.REG[3]);
   ATTR_syntax___typing___AExpr____if_false_flow_ctx(fra.me.REG[0]) = fra.me.REG[3];
-  /* syntax/typing.nit:1027 */
+  /* syntax/typing.nit:1033 */
   fra.me.REG[3] = CALL_parser___parser_nodes___ANotExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = ATTR_syntax___typing___AExpr____if_false_flow_ctx(fra.me.REG[3]);
   ATTR_syntax___typing___AExpr____if_true_flow_ctx(fra.me.REG[0]) = fra.me.REG[3];
-  /* syntax/typing.nit:1029 */
+  /* syntax/typing.nit:1035 */
   fra.me.REG[1] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_bool(fra.me.REG[1])(fra.me.REG[1]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/typing.nit:1030 */
+  /* syntax/typing.nit:1036 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -5784,7 +5798,7 @@ void syntax___typing___AOrElseExpr___after_typing(val_t p0, val_t p1){
     static val_t once_value_1; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1035;
+  fra.me.line = 1041;
   fra.me.meth = LOCATE_syntax___typing___AOrElseExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -5798,22 +5812,22 @@ void syntax___typing___AOrElseExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1037 */
+  /* syntax/typing.nit:1043 */
   fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:1040 */
+  /* syntax/typing.nit:1046 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AOrElseExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/typing.nit:1041 */
+  /* syntax/typing.nit:1047 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AOrElseExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___syntax_base___AbsSyntaxVisitor___check_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/typing.nit:1044 */
+  /* syntax/typing.nit:1050 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AOrElseExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[3])(fra.me.REG[3]);
-  /* syntax/typing.nit:1045 */
+  /* syntax/typing.nit:1051 */
   REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1046 */
+    /* syntax/typing.nit:1052 */
     fra.me.REG[4] = CALL_parser___parser_nodes___AOrElseExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
     if (!once_value_1) {
       fra.me.REG[5] = BOX_NativeString("Warning: left operand of a 'or else' is not a nullable type.");
@@ -5825,14 +5839,14 @@ void syntax___typing___AOrElseExpr___after_typing(val_t p0, val_t p1){
     fra.me.REG[5] = fra.me.REG[5];
     CALL_syntax___syntax_base___AbsSyntaxVisitor___warning(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4], fra.me.REG[5]);
   } else {
-    /* syntax/typing.nit:1048 */
+    /* syntax/typing.nit:1054 */
     fra.me.REG[5] = CALL_metamodel___static_type___MMType___as_notnull(fra.me.REG[3])(fra.me.REG[3]);
     fra.me.REG[3] = fra.me.REG[5];
   }
-  /* syntax/typing.nit:1052 */
+  /* syntax/typing.nit:1058 */
   fra.me.REG[5] = CALL_parser___parser_nodes___AOrElseExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[5] = CALL_syntax___typing___AExpr___its_variable(fra.me.REG[5])(fra.me.REG[5]);
-  /* syntax/typing.nit:1053 */
+  /* syntax/typing.nit:1059 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5847,26 +5861,26 @@ void syntax___typing___AOrElseExpr___after_typing(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1054 */
+    /* syntax/typing.nit:1060 */
     fra.me.REG[4] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[6] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_none(fra.me.REG[1])(fra.me.REG[1]);
     CALL_syntax___flow___FlowContext___sub_with(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0], fra.me.REG[5], fra.me.REG[6]);
   }
-  /* syntax/typing.nit:1058 */
+  /* syntax/typing.nit:1064 */
   fra.me.REG[6] = CALL_parser___parser_nodes___AOrElseExpr___n_expr2(fra.me.REG[0])(fra.me.REG[0]);
   CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-  /* syntax/typing.nit:1059 */
+  /* syntax/typing.nit:1065 */
   fra.me.REG[6] = CALL_parser___parser_nodes___AOrElseExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___syntax_base___AbsSyntaxVisitor___check_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-  /* syntax/typing.nit:1062 */
+  /* syntax/typing.nit:1068 */
   CALL_syntax___typing___TypingVisitor___flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:1065 */
+  /* syntax/typing.nit:1071 */
   REGB0 = TAG_Int(1);
   fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   fra.me.REG[6] = CALL_parser___parser_nodes___AOrElseExpr___n_expr2(fra.me.REG[0])(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
   fra.me.REG[2] = CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_multiexpr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3], fra.me.REG[2]);
-  /* syntax/typing.nit:1066 */
+  /* syntax/typing.nit:1072 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5882,9 +5896,9 @@ void syntax___typing___AOrElseExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label2;
   }
-  /* syntax/typing.nit:1068 */
+  /* syntax/typing.nit:1074 */
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[2];
-  /* syntax/typing.nit:1069 */
+  /* syntax/typing.nit:1075 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   label2: while(0);
@@ -5898,7 +5912,7 @@ void syntax___typing___AIntExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1074;
+  fra.me.line = 1080;
   fra.me.meth = LOCATE_syntax___typing___AIntExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5907,10 +5921,10 @@ void syntax___typing___AIntExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1076 */
+  /* syntax/typing.nit:1082 */
   fra.me.REG[1] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_int(fra.me.REG[1])(fra.me.REG[1]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/typing.nit:1077 */
+  /* syntax/typing.nit:1083 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -5923,7 +5937,7 @@ void syntax___typing___AFloatExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1082;
+  fra.me.line = 1088;
   fra.me.meth = LOCATE_syntax___typing___AFloatExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5932,10 +5946,10 @@ void syntax___typing___AFloatExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1084 */
+  /* syntax/typing.nit:1090 */
   fra.me.REG[1] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_float(fra.me.REG[1])(fra.me.REG[1]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/typing.nit:1085 */
+  /* syntax/typing.nit:1091 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -5948,7 +5962,7 @@ void syntax___typing___ACharExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1090;
+  fra.me.line = 1096;
   fra.me.meth = LOCATE_syntax___typing___ACharExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5957,10 +5971,10 @@ void syntax___typing___ACharExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1092 */
+  /* syntax/typing.nit:1098 */
   fra.me.REG[1] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_char(fra.me.REG[1])(fra.me.REG[1]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/typing.nit:1093 */
+  /* syntax/typing.nit:1099 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -5973,7 +5987,7 @@ void syntax___typing___AStringFormExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1098;
+  fra.me.line = 1104;
   fra.me.meth = LOCATE_syntax___typing___AStringFormExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5982,10 +5996,10 @@ void syntax___typing___AStringFormExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1100 */
+  /* syntax/typing.nit:1106 */
   fra.me.REG[1] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_string(fra.me.REG[1])(fra.me.REG[1]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/typing.nit:1101 */
+  /* syntax/typing.nit:1107 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -5998,7 +6012,7 @@ val_t syntax___typing___ASuperstringExpr___atype(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1106;
+  fra.me.line = 1112;
   fra.me.meth = LOCATE_syntax___typing___ASuperstringExpr___atype;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6006,13 +6020,13 @@ val_t syntax___typing___ASuperstringExpr___atype(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1106 */
+  /* syntax/typing.nit:1112 */
   fra.me.REG[1] = fra.me.REG[0];
   fra.me.REG[1] = ATTR_syntax___typing___ASuperstringExpr____atype(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1106);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1112);
   }
   goto label1;
   label1: while(0);
@@ -6026,7 +6040,7 @@ void syntax___typing___ASuperstringExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1108;
+  fra.me.line = 1114;
   fra.me.meth = LOCATE_syntax___typing___ASuperstringExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -6038,20 +6052,20 @@ void syntax___typing___ASuperstringExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1110 */
+  /* syntax/typing.nit:1116 */
   fra.me.REG[2] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_object(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:1111 */
+  /* syntax/typing.nit:1117 */
   fra.me.REG[3] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_string(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:1112 */
+  /* syntax/typing.nit:1118 */
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[3];
-  /* syntax/typing.nit:1113 */
+  /* syntax/typing.nit:1119 */
   fra.me.REG[4] = CALL_parser___parser_nodes___ASuperstringExpr___n_exprs(fra.me.REG[0])(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[4])(fra.me.REG[4], (&(fra.me)), ((fun_t)OC_syntax___typing___ASuperstringExpr___after_typing_1));
-  /* syntax/typing.nit:1114 */
+  /* syntax/typing.nit:1120 */
   fra.me.REG[3] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_array(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  /* syntax/typing.nit:1115 */
+  /* syntax/typing.nit:1121 */
   ATTR_syntax___typing___ASuperstringExpr____atype(fra.me.REG[0]) = fra.me.REG[3];
-  /* syntax/typing.nit:1116 */
+  /* syntax/typing.nit:1122 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -6084,7 +6098,7 @@ void syntax___typing___ANullExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1121;
+  fra.me.line = 1127;
   fra.me.meth = LOCATE_syntax___typing___ANullExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -6093,10 +6107,10 @@ void syntax___typing___ANullExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1123 */
+  /* syntax/typing.nit:1129 */
   fra.me.REG[1] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_none(fra.me.REG[1])(fra.me.REG[1]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/typing.nit:1124 */
+  /* syntax/typing.nit:1130 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -6110,7 +6124,7 @@ void syntax___typing___AArrayExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1129;
+  fra.me.line = 1135;
   fra.me.meth = LOCATE_syntax___typing___AArrayExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -6120,11 +6134,11 @@ void syntax___typing___AArrayExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1131 */
+  /* syntax/typing.nit:1137 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AArrayExpr___n_exprs(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_parser___parser_nodes___AExprs___n_exprs(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[2] = CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_multiexpr(fra.me.REG[1])(fra.me.REG[1], NIT_NULL, fra.me.REG[2]);
-  /* syntax/typing.nit:1132 */
+  /* syntax/typing.nit:1138 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6151,7 +6165,7 @@ void syntax___typing___AArrayExpr___do_typing(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_syntax___typing;
-  fra.me.line = 1135;
+  fra.me.line = 1141;
   fra.me.meth = LOCATE_syntax___typing___AArrayExpr___do_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -6162,10 +6176,10 @@ void syntax___typing___AArrayExpr___do_typing(val_t p0, val_t p1, val_t p2){
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* syntax/typing.nit:1137 */
+  /* syntax/typing.nit:1143 */
   fra.me.REG[2] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_array(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[2];
-  /* syntax/typing.nit:1138 */
+  /* syntax/typing.nit:1144 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
@@ -6182,7 +6196,7 @@ void syntax___typing___ARangeExpr___after_typing(val_t p0, val_t p1){
       static val_t once_value_4; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1143;
+  fra.me.line = 1149;
   fra.me.meth = LOCATE_syntax___typing___ARangeExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -6195,7 +6209,7 @@ void syntax___typing___ARangeExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1145 */
+  /* syntax/typing.nit:1151 */
   fra.me.REG[2] = CALL_parser___parser_nodes___ARangeExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___syntax_base___AbsSyntaxVisitor___check_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
@@ -6210,23 +6224,23 @@ void syntax___typing___ARangeExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:1146 */
+  /* syntax/typing.nit:1152 */
   fra.me.REG[2] = CALL_parser___parser_nodes___ARangeExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1147 */
+  /* syntax/typing.nit:1153 */
   fra.me.REG[3] = CALL_parser___parser_nodes___ARangeExpr___n_expr2(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[3])(fra.me.REG[3]);
-  /* syntax/typing.nit:1148 */
+  /* syntax/typing.nit:1154 */
   REGB0 = CALL_metamodel___static_type___MMType_____l(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1149 */
+    /* syntax/typing.nit:1155 */
     fra.me.REG[2] = fra.me.REG[3];
   } else {
-    /* syntax/typing.nit:1150 */
+    /* syntax/typing.nit:1156 */
     REGB0 = CALL_metamodel___static_type___MMType_____l(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:1151 */
+      /* syntax/typing.nit:1157 */
       REGB0 = TAG_Int(5);
       fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
       if (!once_value_2) {
@@ -6262,13 +6276,13 @@ void syntax___typing___ARangeExpr___after_typing(val_t p0, val_t p1){
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
       fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[4]);
-      /* syntax/typing.nit:1152 */
+      /* syntax/typing.nit:1158 */
       goto label1;
     }
   }
-  /* syntax/typing.nit:1154 */
+  /* syntax/typing.nit:1160 */
   fra.me.REG[4] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_discrete(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:1155 */
+  /* syntax/typing.nit:1161 */
   fra.me.REG[3] = CALL_parser___parser_nodes___ARangeExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3], fra.me.REG[4]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
@@ -6283,10 +6297,10 @@ void syntax___typing___ARangeExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:1156 */
+  /* syntax/typing.nit:1162 */
   fra.me.REG[2] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_range(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[2];
-  /* syntax/typing.nit:1157 */
+  /* syntax/typing.nit:1163 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   label1: while(0);
@@ -6299,14 +6313,14 @@ val_t syntax___typing___ASuperExpr___init_in_superclass(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1162;
+  fra.me.line = 1168;
   fra.me.meth = LOCATE_syntax___typing___ASuperExpr___init_in_superclass;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1162 */
+  /* syntax/typing.nit:1168 */
   fra.me.REG[0] = ATTR_syntax___typing___ASuperExpr____init_in_superclass(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -6317,14 +6331,14 @@ val_t syntax___typing___ASuperExpr___compute_raw_arguments(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1163;
+  fra.me.line = 1169;
   fra.me.meth = LOCATE_syntax___typing___ASuperExpr___compute_raw_arguments;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1163 */
+  /* syntax/typing.nit:1169 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ASuperExpr___n_args(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AExprs___to_a(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -6352,7 +6366,7 @@ void syntax___typing___ASuperExpr___after_typing(val_t p0, val_t p1){
       static val_t once_value_13; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1164;
+  fra.me.line = 1170;
   fra.me.meth = LOCATE_syntax___typing___ASuperExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -6369,27 +6383,27 @@ void syntax___typing___ASuperExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1164 */
+  /* syntax/typing.nit:1170 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* syntax/typing.nit:1166 */
+  /* syntax/typing.nit:1172 */
   fra.me.REG[3] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[3] = CALL_metamodel___abstractmetamodel___MMLocalProperty___prhe(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[3] = CALL_metamodel___partial_order___PartialOrderElement___direct_greaters(fra.me.REG[3])(fra.me.REG[3]);
-  /* syntax/typing.nit:1167 */
+  /* syntax/typing.nit:1173 */
   REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1168 */
+    /* syntax/typing.nit:1174 */
     fra.me.REG[4] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
     REGB0 = TAG_Bool(1);
     CALL_metamodel___abstractmetamodel___MMLocalProperty___need_super__eq(fra.me.REG[4])(fra.me.REG[4], REGB0);
   } else {
-    /* syntax/typing.nit:1169 */
+    /* syntax/typing.nit:1175 */
     fra.me.REG[4] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[4])(fra.me.REG[4]);
     REGB0 = CALL_metamodel___abstractmetamodel___MMGlobalProperty___is_init(fra.me.REG[4])(fra.me.REG[4]);
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:1170 */
+      /* syntax/typing.nit:1176 */
       fra.me.REG[4] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_class(fra.me.REG[1])(fra.me.REG[1]);
       fra.me.REG[5] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
       fra.me.REG[5] = CALL_metamodel___abstractmetamodel___MMLocalProperty___name(fra.me.REG[5])(fra.me.REG[5]);
@@ -6430,14 +6444,14 @@ void syntax___typing___ASuperExpr___after_typing(val_t p0, val_t p1){
           if (UNTAG_Bool(REGB1)) {
             nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
           }
-          /* ../lib/standard/collection/array.nit:718 */
+          /* ../lib/standard/collection/array.nit:724 */
           fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB0)];
-          /* syntax/typing.nit:1172 */
+          /* syntax/typing.nit:1178 */
           fra.me.REG[8] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[7])(fra.me.REG[7]);
           REGB1 = CALL_metamodel___abstractmetamodel___MMGlobalProperty___is_init(fra.me.REG[8])(fra.me.REG[8]);
           REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
           if (UNTAG_Bool(REGB1)) {
-            /* syntax/typing.nit:1173 */
+            /* syntax/typing.nit:1179 */
             REGB1 = TAG_Int(5);
             fra.me.REG[8] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
             if (!once_value_1) {
@@ -6475,7 +6489,7 @@ void syntax___typing___ASuperExpr___after_typing(val_t p0, val_t p1){
             fra.me.REG[8] = CALL_standard___string___Object___to_s(fra.me.REG[8])(fra.me.REG[8]);
             CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[8]);
           } else {
-            /* syntax/typing.nit:1175 */
+            /* syntax/typing.nit:1181 */
             fra.me.REG[8] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_class(fra.me.REG[1])(fra.me.REG[1]);
             fra.me.REG[7] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[7])(fra.me.REG[7]);
             fra.me.REG[7] = CALL_metamodel___abstractmetamodel___MMLocalClass_____bra(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[7]);
@@ -6493,10 +6507,10 @@ void syntax___typing___ASuperExpr___after_typing(val_t p0, val_t p1){
         }
       }
       label4: while(0);
-      /* syntax/typing.nit:1178 */
+      /* syntax/typing.nit:1184 */
       REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[3])(fra.me.REG[3]);
       if (UNTAG_Bool(REGB0)) {
-        /* syntax/typing.nit:1179 */
+        /* syntax/typing.nit:1185 */
         REGB0 = TAG_Int(3);
         fra.me.REG[6] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
         if (!once_value_5) {
@@ -6523,7 +6537,7 @@ void syntax___typing___ASuperExpr___after_typing(val_t p0, val_t p1){
         CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
         fra.me.REG[6] = CALL_standard___string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
         CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[6]);
-        /* syntax/typing.nit:1180 */
+        /* syntax/typing.nit:1186 */
         goto label7;
       } else {
         /* ../lib/standard/collection/array.nit:24 */
@@ -6533,7 +6547,7 @@ void syntax___typing___ASuperExpr___after_typing(val_t p0, val_t p1){
           nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
         }
         REGB0 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3]);
-        /* syntax/typing.nit:1181 */
+        /* syntax/typing.nit:1187 */
         REGB1 = TAG_Int(1);
         REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
         if (UNTAG_Bool(REGB2)) {
@@ -6542,9 +6556,9 @@ void syntax___typing___ASuperExpr___after_typing(val_t p0, val_t p1){
         }
         /* ../lib/standard/kernel.nit:237 */
         REGB1 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB1));
-        /* syntax/typing.nit:1181 */
+        /* syntax/typing.nit:1187 */
         if (UNTAG_Bool(REGB1)) {
-          /* syntax/typing.nit:1182 */
+          /* syntax/typing.nit:1188 */
           REGB1 = TAG_Int(5);
           fra.me.REG[6] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
           if (!once_value_8) {
@@ -6590,23 +6604,23 @@ void syntax___typing___ASuperExpr___after_typing(val_t p0, val_t p1){
           CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
           fra.me.REG[6] = CALL_standard___string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
           CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[6]);
-          /* syntax/typing.nit:1183 */
+          /* syntax/typing.nit:1189 */
           goto label7;
         }
       }
-      /* syntax/typing.nit:1185 */
+      /* syntax/typing.nit:1191 */
       fra.me.REG[5] = CALL_standard___collection___abstract_collection___Collection___first(fra.me.REG[5])(fra.me.REG[5]);
-      /* syntax/typing.nit:1186 */
+      /* syntax/typing.nit:1192 */
       REGB1 = TAG_Bool(VAL_ISA(fra.me.REG[5], COLOR_metamodel___abstractmetamodel___MMMethod, ID_metamodel___abstractmetamodel___MMMethod)) /*cast MMMethod*/;
       if (UNTAG_Bool(REGB1)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_syntax___typing, 1186);
+        nit_abort("Assert failed", NULL, LOCATE_syntax___typing, 1192);
       }
-      /* syntax/typing.nit:1187 */
+      /* syntax/typing.nit:1193 */
       ATTR_syntax___typing___ASuperExpr____init_in_superclass(fra.me.REG[2]) = fra.me.REG[5];
-      /* syntax/typing.nit:1188 */
+      /* syntax/typing.nit:1194 */
       CALL_syntax___typing___ASuperInitCall___register_super_init_call(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1], fra.me.REG[5]);
-      /* syntax/typing.nit:1189 */
+      /* syntax/typing.nit:1195 */
       fra.me.REG[6] = CALL_parser___parser_nodes___ASuperExpr___n_args(fra.me.REG[2])(fra.me.REG[2]);
       fra.me.REG[6] = CALL_parser___parser_nodes___AExprs___n_exprs(fra.me.REG[6])(fra.me.REG[6]);
       REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[6])(fra.me.REG[6]);
@@ -6618,25 +6632,25 @@ void syntax___typing___ASuperExpr___after_typing(val_t p0, val_t p1){
       }
       /* ../lib/standard/kernel.nit:237 */
       REGB0 = TAG_Bool(UNTAG_Int(REGB1)>UNTAG_Int(REGB0));
-      /* syntax/typing.nit:1189 */
+      /* syntax/typing.nit:1195 */
       if (UNTAG_Bool(REGB0)) {
-        /* syntax/typing.nit:1190 */
+        /* syntax/typing.nit:1196 */
         fra.me.REG[6] = CALL_syntax___typing___TypingVisitor___self_var(fra.me.REG[1])(fra.me.REG[1]);
         fra.me.REG[6] = CALL_syntax___syntax_base___Variable___stype(fra.me.REG[6])(fra.me.REG[6]);
         REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_metamodel___static_type___MMType, ID_metamodel___static_type___MMType)) /*cast MMType*/;
         if (UNTAG_Bool(REGB0)) {
         } else {
-          nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1190);
+          nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1196);
         }
         REGB0 = TAG_Bool(1);
         fra.me.REG[6] = CALL_syntax___typing___AAbsSendExpr___get_signature(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1], fra.me.REG[6], fra.me.REG[5], REGB0);
-        /* syntax/typing.nit:1191 */
+        /* syntax/typing.nit:1197 */
         fra.me.REG[5] = CALL_metamodel___abstractmetamodel___MMLocalProperty___name(fra.me.REG[5])(fra.me.REG[5]);
         fra.me.REG[4] = CALL_syntax___typing___AAbsAbsSendExpr___compute_raw_arguments(fra.me.REG[2])(fra.me.REG[2]);
         CALL_syntax___typing___AAbsAbsSendExpr___process_signature(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4]);
       }
     } else {
-      /* syntax/typing.nit:1194 */
+      /* syntax/typing.nit:1200 */
       REGB0 = TAG_Int(3);
       fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
       if (!once_value_12) {
@@ -6662,22 +6676,22 @@ void syntax___typing___ASuperExpr___after_typing(val_t p0, val_t p1){
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
       fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[4]);
-      /* syntax/typing.nit:1195 */
+      /* syntax/typing.nit:1201 */
       goto label7;
     }
   }
-  /* syntax/typing.nit:1198 */
+  /* syntax/typing.nit:1204 */
   fra.me.REG[4] = CALL_standard___collection___abstract_collection___Collection___first(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[5] = CALL_syntax___typing___TypingVisitor___self_var(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[5] = CALL_syntax___syntax_base___Variable___stype(fra.me.REG[5])(fra.me.REG[5]);
   REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_metamodel___static_type___MMType, ID_metamodel___static_type___MMType)) /*cast MMType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1198);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1204);
   }
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1198);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1204);
   }
   fra.me.REG[5] = CALL_metamodel___static_type___MMLocalProperty___signature_for(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   fra.me.REG[5] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[5])(fra.me.REG[5]);
@@ -6695,9 +6709,9 @@ void syntax___typing___ASuperExpr___after_typing(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1199 */
+    /* syntax/typing.nit:1205 */
     fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
-    /* syntax/typing.nit:1200 */
+    /* syntax/typing.nit:1206 */
     fra.me.REG[4] = NIT_NULL;
     /* ../lib/standard/collection/array.nit:269 */
     REGB0 = TAG_Int(0);
@@ -6733,41 +6747,41 @@ void syntax___typing___ASuperExpr___after_typing(val_t p0, val_t p1){
         if (UNTAG_Bool(REGB1)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB0)];
-        /* syntax/typing.nit:1202 */
+        /* syntax/typing.nit:1208 */
         REGB1 = TAG_Bool(VAL_ISA(fra.me.REG[7], COLOR_metamodel___abstractmetamodel___MMMethod, ID_metamodel___abstractmetamodel___MMMethod)) /*cast MMMethod*/;
         if (UNTAG_Bool(REGB1)) {
         } else {
-          nit_abort("Assert failed", NULL, LOCATE_syntax___typing, 1202);
+          nit_abort("Assert failed", NULL, LOCATE_syntax___typing, 1208);
         }
-        /* syntax/typing.nit:1203 */
+        /* syntax/typing.nit:1209 */
         fra.me.REG[8] = CALL_syntax___typing___TypingVisitor___self_var(fra.me.REG[1])(fra.me.REG[1]);
         fra.me.REG[8] = CALL_syntax___syntax_base___Variable___stype(fra.me.REG[8])(fra.me.REG[8]);
         REGB1 = TAG_Bool((fra.me.REG[8]!=NIT_NULL) && VAL_ISA(fra.me.REG[8], COLOR_metamodel___static_type___MMType, ID_metamodel___static_type___MMType)) /*cast MMType*/;
         if (UNTAG_Bool(REGB1)) {
         } else {
-          nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1203);
+          nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1209);
         }
         fra.me.REG[8] = CALL_metamodel___static_type___MMLocalProperty___signature_for(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
         fra.me.REG[8] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[8])(fra.me.REG[8]);
         fra.me.REG[7] = CALL_syntax___syntax_base___AbsSyntaxVisitor___mmmodule(fra.me.REG[1])(fra.me.REG[1]);
         REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
         if (UNTAG_Bool(REGB1)) {
-          nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1203);
+          nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1209);
         }
         fra.me.REG[7] = CALL_metamodel___static_type___MMType___for_module(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[7]);
         fra.me.REG[8] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
         fra.me.REG[8] = CALL_metamodel___static_type___MMLocalProperty___signature(fra.me.REG[8])(fra.me.REG[8]);
         REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
         if (UNTAG_Bool(REGB1)) {
-          nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1203);
+          nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1209);
         }
         fra.me.REG[8] = CALL_metamodel___static_type___MMSignature___recv(fra.me.REG[8])(fra.me.REG[8]);
         fra.me.REG[8] = CALL_metamodel___static_type___MMType___adapt_to(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
-        /* syntax/typing.nit:1204 */
+        /* syntax/typing.nit:1210 */
         CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[8]);
-        /* syntax/typing.nit:1205 */
+        /* syntax/typing.nit:1211 */
         REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
         if (UNTAG_Bool(REGB1)) {
         } else {
@@ -6785,13 +6799,13 @@ void syntax___typing___ASuperExpr___after_typing(val_t p0, val_t p1){
         } else {
           REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
           if (UNTAG_Bool(REGB2)) {
-            nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1205);
+            nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1211);
           }
           REGB2 = CALL_metamodel___static_type___MMType_____l(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[8]);
           REGB1 = REGB2;
         }
         if (UNTAG_Bool(REGB1)) {
-          /* syntax/typing.nit:1206 */
+          /* syntax/typing.nit:1212 */
           fra.me.REG[4] = fra.me.REG[8];
         }
         /* ../lib/standard/collection/array.nit:274 */
@@ -6840,13 +6854,13 @@ void syntax___typing___ASuperExpr___after_typing(val_t p0, val_t p1){
         if (UNTAG_Bool(REGB1)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[6])->val[UNTAG_Int(REGB0)];
-        /* syntax/typing.nit:1210 */
+        /* syntax/typing.nit:1216 */
         REGB1 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
         if (UNTAG_Bool(REGB1)) {
         } else {
-          nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1210);
+          nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1216);
         }
         CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4]);
         /* ../lib/standard/collection/array.nit:274 */
@@ -6861,20 +6875,20 @@ void syntax___typing___ASuperExpr___after_typing(val_t p0, val_t p1){
       }
     }
     label15: while(0);
-    /* syntax/typing.nit:1212 */
+    /* syntax/typing.nit:1218 */
     ATTR_syntax___typing___AExpr____stype(fra.me.REG[2]) = fra.me.REG[4];
   }
-  /* syntax/typing.nit:1214 */
+  /* syntax/typing.nit:1220 */
   fra.me.REG[1] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:1215 */
+  /* syntax/typing.nit:1221 */
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_syntax___syntax_base___MMSrcMethod, ID_syntax___syntax_base___MMSrcMethod)) /*cast MMSrcMethod*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_syntax___typing, 1215);
+    nit_abort("Assert failed", NULL, LOCATE_syntax___typing, 1221);
   }
-  /* syntax/typing.nit:1216 */
+  /* syntax/typing.nit:1222 */
   ATTR_syntax___typing___AAbsSendExpr____prop(fra.me.REG[2]) = fra.me.REG[1];
-  /* syntax/typing.nit:1217 */
+  /* syntax/typing.nit:1223 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[2]) = REGB0;
   label7: while(0);
@@ -6887,14 +6901,14 @@ val_t syntax___typing___AExternCall___target_class_name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1222;
+  fra.me.line = 1228;
   fra.me.meth = LOCATE_syntax___typing___AExternCall___target_class_name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1222 */
+  /* syntax/typing.nit:1228 */
   fra.me.REG[0] = NIT_NULL;
   goto label1;
   label1: while(0);
@@ -6907,13 +6921,13 @@ val_t syntax___typing___AExternCall___target_method_name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1223;
+  fra.me.line = 1229;
   fra.me.meth = LOCATE_syntax___typing___AExternCall___target_method_name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  /* syntax/typing.nit:1223 */
-  nit_abort("Deferred method called", NULL, LOCATE_syntax___typing, 1223);
+  /* syntax/typing.nit:1229 */
+  nit_abort("Deferred method called", NULL, LOCATE_syntax___typing, 1229);
   stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
@@ -6931,7 +6945,7 @@ void syntax___typing___AExternCall___after_typing(val_t p0, val_t p1){
     static val_t once_value_7; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1225;
+  fra.me.line = 1231;
   fra.me.meth = LOCATE_syntax___typing___AExternCall___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -6946,13 +6960,13 @@ void syntax___typing___AExternCall___after_typing(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1225 */
+  /* syntax/typing.nit:1231 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* syntax/typing.nit:1227 */
+  /* syntax/typing.nit:1233 */
   fra.me.REG[3] = CALL_syntax___typing___AExternCall___target_class_name(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1228 */
+  /* syntax/typing.nit:1234 */
   fra.me.REG[4] = CALL_syntax___typing___AExternCall___target_method_name(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1235 */
+  /* syntax/typing.nit:1241 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6966,26 +6980,26 @@ void syntax___typing___AExternCall___after_typing(val_t p0, val_t p1){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1236 */
+    /* syntax/typing.nit:1242 */
     fra.me.REG[5] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[5] = CALL_metamodel___abstractmetamodel___MMLocalProperty___local_class(fra.me.REG[5])(fra.me.REG[5]);
   } else {
-    /* syntax/typing.nit:1238 */
+    /* syntax/typing.nit:1244 */
     fra.me.REG[6] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalProperty___mmmodule(fra.me.REG[6])(fra.me.REG[6]);
     REGB0 = CALL_metamodel___abstractmetamodel___MMModule___has_global_class_named(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:1239 */
+      /* syntax/typing.nit:1245 */
       fra.me.REG[6] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
       fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalProperty___mmmodule(fra.me.REG[6])(fra.me.REG[6]);
       fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMModule___global_class_named(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-      /* syntax/typing.nit:1240 */
+      /* syntax/typing.nit:1246 */
       fra.me.REG[7] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
       fra.me.REG[7] = CALL_metamodel___abstractmetamodel___MMLocalProperty___mmmodule(fra.me.REG[7])(fra.me.REG[7]);
       fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMModule_____bra(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[6]);
       fra.me.REG[5] = fra.me.REG[6];
     } else {
-      /* syntax/typing.nit:1242 */
+      /* syntax/typing.nit:1248 */
       REGB0 = TAG_Int(3);
       fra.me.REG[6] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
       if (!once_value_1) {
@@ -6999,7 +7013,7 @@ void syntax___typing___AExternCall___after_typing(val_t p0, val_t p1){
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
       REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1242);
+        nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1248);
       }
       fra.me.REG[3] = CALL_standard___string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
@@ -7014,22 +7028,22 @@ void syntax___typing___AExternCall___after_typing(val_t p0, val_t p1){
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
       fra.me.REG[6] = CALL_standard___string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[6]);
-      /* syntax/typing.nit:1243 */
+      /* syntax/typing.nit:1249 */
       goto label3;
     }
   }
-  /* syntax/typing.nit:1247 */
+  /* syntax/typing.nit:1253 */
   REGB0 = CALL_metamodel___abstractmetamodel___MMLocalClass___has_global_property_by_name(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1248 */
+    /* syntax/typing.nit:1254 */
     fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalClass___get_property_by_name(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
-    /* syntax/typing.nit:1250 */
+    /* syntax/typing.nit:1256 */
     fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalClass_____bra(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
-    /* syntax/typing.nit:1252 */
+    /* syntax/typing.nit:1258 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[6], COLOR_metamodel___abstractmetamodel___MMMethod, ID_metamodel___abstractmetamodel___MMMethod)) /*cast MMMethod*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      /* syntax/typing.nit:1255 */
+      /* syntax/typing.nit:1261 */
       REGB0 = TAG_Int(3);
       fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
       if (!once_value_4) {
@@ -7054,11 +7068,11 @@ void syntax___typing___AExternCall___after_typing(val_t p0, val_t p1){
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
       fra.me.REG[3] = CALL_standard___string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[3]);
-      /* syntax/typing.nit:1256 */
+      /* syntax/typing.nit:1262 */
       goto label3;
     }
   } else {
-    /* syntax/typing.nit:1259 */
+    /* syntax/typing.nit:1265 */
     REGB0 = TAG_Int(3);
     fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
     if (!once_value_6) {
@@ -7083,17 +7097,17 @@ void syntax___typing___AExternCall___after_typing(val_t p0, val_t p1){
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
     fra.me.REG[3] = CALL_standard___string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[3]);
-    /* syntax/typing.nit:1260 */
+    /* syntax/typing.nit:1266 */
     goto label3;
   }
-  /* syntax/typing.nit:1263 */
+  /* syntax/typing.nit:1269 */
   fra.me.REG[6] = NEW_MMExplicitImport_metamodel___abstractmetamodel___MMExplicitImport___init(fra.me.REG[5], fra.me.REG[6]);
-  /* syntax/typing.nit:1264 */
+  /* syntax/typing.nit:1270 */
   fra.me.REG[1] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_syntax___syntax_base___MMSrcMethod, ID_syntax___syntax_base___MMSrcMethod)) /*cast MMSrcMethod*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1264);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1270);
   }
   fra.me.REG[1] = CALL_metamodel___abstractmetamodel___MMMethod___explicit_imports(fra.me.REG[1])(fra.me.REG[1]);
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
@@ -7107,14 +7121,14 @@ val_t syntax___typing___ALocalPropExternCall___target_class_name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1269;
+  fra.me.line = 1275;
   fra.me.meth = LOCATE_syntax___typing___ALocalPropExternCall___target_class_name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1269 */
+  /* syntax/typing.nit:1275 */
   fra.me.REG[0] = NIT_NULL;
   goto label1;
   label1: while(0);
@@ -7128,7 +7142,7 @@ val_t syntax___typing___ALocalPropExternCall___target_method_name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1270;
+  fra.me.line = 1276;
   fra.me.meth = LOCATE_syntax___typing___ALocalPropExternCall___target_method_name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7136,14 +7150,14 @@ val_t syntax___typing___ALocalPropExternCall___target_method_name(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1270 */
+  /* syntax/typing.nit:1276 */
   fra.me.REG[1] = fra.me.REG[0];
   fra.me.REG[1] = CALL_parser___parser_nodes___ALocalPropExternCall___n_methid(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[1] = CALL_syntax___syntax_base___AMethid___name(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_symbol___Symbol, ID_symbol___Symbol)) /*cast Symbol*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1270);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1276);
   }
   goto label1;
   label1: while(0);
@@ -7159,7 +7173,7 @@ void syntax___typing___ASuperExternCall___after_typing(val_t p0, val_t p1){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1274;
+  fra.me.line = 1280;
   fra.me.meth = LOCATE_syntax___typing___ASuperExternCall___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -7170,20 +7184,20 @@ void syntax___typing___ASuperExternCall___after_typing(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1276 */
+  /* syntax/typing.nit:1282 */
   fra.me.REG[2] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[2] = CALL_metamodel___abstractmetamodel___MMLocalProperty___prhe(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[2] = CALL_metamodel___partial_order___PartialOrderElement___direct_greaters(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1277 */
+  /* syntax/typing.nit:1283 */
   REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1278 */
+    /* syntax/typing.nit:1284 */
     fra.me.REG[2] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
     REGB0 = TAG_Bool(1);
     CALL_metamodel___abstractmetamodel___MMLocalProperty___need_super__eq(fra.me.REG[2])(fra.me.REG[2], REGB0);
   } else {
-    /* syntax/typing.nit:1280 */
+    /* syntax/typing.nit:1286 */
     REGB0 = TAG_Int(3);
     fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
     if (!once_value_1) {
@@ -7209,7 +7223,7 @@ void syntax___typing___ASuperExternCall___after_typing(val_t p0, val_t p1){
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
     fra.me.REG[2] = CALL_standard___string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[2]);
-    /* syntax/typing.nit:1281 */
+    /* syntax/typing.nit:1287 */
     goto label3;
   }
   label3: while(0);
@@ -7222,14 +7236,14 @@ val_t syntax___typing___AFullPropExternCall___target_class_name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1287;
+  fra.me.line = 1293;
   fra.me.meth = LOCATE_syntax___typing___AFullPropExternCall___target_class_name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1287 */
+  /* syntax/typing.nit:1293 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AFullPropExternCall___n_classid(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___Token___to_symbol(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -7244,7 +7258,7 @@ val_t syntax___typing___AFullPropExternCall___target_method_name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1288;
+  fra.me.line = 1294;
   fra.me.meth = LOCATE_syntax___typing___AFullPropExternCall___target_method_name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7252,14 +7266,14 @@ val_t syntax___typing___AFullPropExternCall___target_method_name(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1288 */
+  /* syntax/typing.nit:1294 */
   fra.me.REG[1] = fra.me.REG[0];
   fra.me.REG[1] = CALL_parser___parser_nodes___AFullPropExternCall___n_methid(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[1] = CALL_syntax___syntax_base___AMethid___name(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_symbol___Symbol, ID_symbol___Symbol)) /*cast Symbol*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1288);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1294);
   }
   goto label1;
   label1: while(0);
@@ -7272,14 +7286,14 @@ val_t syntax___typing___AInitPropExternCall___target_class_name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1292;
+  fra.me.line = 1298;
   fra.me.meth = LOCATE_syntax___typing___AInitPropExternCall___target_class_name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1292 */
+  /* syntax/typing.nit:1298 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AInitPropExternCall___n_classid(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___Token___to_symbol(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -7295,14 +7309,14 @@ val_t syntax___typing___AInitPropExternCall___target_method_name(val_t p0){
   static val_t once_value_1; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1293;
+  fra.me.line = 1299;
   fra.me.meth = LOCATE_syntax___typing___AInitPropExternCall___target_method_name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1293 */
+  /* syntax/typing.nit:1299 */
   if (!once_value_1) {
     fra.me.REG[0] = BOX_NativeString("init");
     REGB0 = TAG_Int(4);
@@ -7323,13 +7337,13 @@ val_t syntax___typing___ACastExternCall___from_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1297;
+  fra.me.line = 1303;
   fra.me.meth = LOCATE_syntax___typing___ACastExternCall___from_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  /* syntax/typing.nit:1297 */
-  nit_abort("Deferred method called", NULL, LOCATE_syntax___typing, 1297);
+  /* syntax/typing.nit:1303 */
+  nit_abort("Deferred method called", NULL, LOCATE_syntax___typing, 1303);
   stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
@@ -7339,13 +7353,13 @@ val_t syntax___typing___ACastExternCall___to_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1298;
+  fra.me.line = 1304;
   fra.me.meth = LOCATE_syntax___typing___ACastExternCall___to_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  /* syntax/typing.nit:1298 */
-  nit_abort("Deferred method called", NULL, LOCATE_syntax___typing, 1298);
+  /* syntax/typing.nit:1304 */
+  nit_abort("Deferred method called", NULL, LOCATE_syntax___typing, 1304);
   stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
@@ -7358,7 +7372,7 @@ void syntax___typing___ACastExternCall___after_typing(val_t p0, val_t p1){
     static val_t once_value_1; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1300;
+  fra.me.line = 1306;
   fra.me.meth = LOCATE_syntax___typing___ACastExternCall___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -7369,7 +7383,7 @@ void syntax___typing___ACastExternCall___after_typing(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1302 */
+  /* syntax/typing.nit:1308 */
   fra.me.REG[2] = CALL_syntax___typing___ACastExternCall___from_type(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___typing___ACastExternCall___to_type(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[2],fra.me.REG[3]));
@@ -7379,7 +7393,7 @@ void syntax___typing___ACastExternCall___after_typing(val_t p0, val_t p1){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1304 */
+    /* syntax/typing.nit:1310 */
     if (!once_value_1) {
       fra.me.REG[3] = BOX_NativeString("Attepting to cast from and to the same type.");
       REGB0 = TAG_Int(44);
@@ -7390,19 +7404,19 @@ void syntax___typing___ACastExternCall___after_typing(val_t p0, val_t p1){
     fra.me.REG[3] = fra.me.REG[3];
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[3]);
   }
-  /* syntax/typing.nit:1307 */
+  /* syntax/typing.nit:1313 */
   fra.me.REG[3] = CALL_syntax___typing___ACastExternCall___from_type(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_syntax___typing___ACastExternCall___to_type(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = NEW_MMImportedCast_metamodel___static_type___MMImportedCast___init(fra.me.REG[3], fra.me.REG[2]);
-  /* syntax/typing.nit:1308 */
+  /* syntax/typing.nit:1314 */
   fra.me.REG[1] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:1309 */
+  /* syntax/typing.nit:1315 */
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_metamodel___abstractmetamodel___MMMethod, ID_metamodel___abstractmetamodel___MMMethod)) /*cast MMMethod*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_syntax___typing, 1309);
+    nit_abort("Assert failed", NULL, LOCATE_syntax___typing, 1315);
   }
-  /* syntax/typing.nit:1310 */
+  /* syntax/typing.nit:1316 */
   fra.me.REG[1] = CALL_metamodel___static_type___MMMethod___explicit_casts(fra.me.REG[1])(fra.me.REG[1]);
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
@@ -7414,14 +7428,14 @@ val_t syntax___typing___ACastAsExternCall___from_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1315;
+  fra.me.line = 1321;
   fra.me.meth = LOCATE_syntax___typing___ACastAsExternCall___from_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1315 */
+  /* syntax/typing.nit:1321 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ACastAsExternCall___n_from_type(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AType___stype(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -7435,14 +7449,14 @@ val_t syntax___typing___ACastAsExternCall___to_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1316;
+  fra.me.line = 1322;
   fra.me.meth = LOCATE_syntax___typing___ACastAsExternCall___to_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1316 */
+  /* syntax/typing.nit:1322 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ACastAsExternCall___n_to_type(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AType___stype(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -7456,14 +7470,14 @@ val_t syntax___typing___AAsNullableExternCall___from_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1320;
+  fra.me.line = 1326;
   fra.me.meth = LOCATE_syntax___typing___AAsNullableExternCall___from_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1320 */
+  /* syntax/typing.nit:1326 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AAsNullableExternCall___n_type(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AType___stype(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -7477,14 +7491,14 @@ val_t syntax___typing___AAsNullableExternCall___to_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1321;
+  fra.me.line = 1327;
   fra.me.meth = LOCATE_syntax___typing___AAsNullableExternCall___to_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1321 */
+  /* syntax/typing.nit:1327 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AAsNullableExternCall___n_type(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AType___stype(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_metamodel___static_type___MMType___as_nullable(fra.me.REG[0])(fra.me.REG[0]);
@@ -7500,7 +7514,7 @@ val_t syntax___typing___AAsNotNullableExternCall___from_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1325;
+  fra.me.line = 1331;
   fra.me.meth = LOCATE_syntax___typing___AAsNotNullableExternCall___from_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7508,17 +7522,17 @@ val_t syntax___typing___AAsNotNullableExternCall___from_type(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1327 */
+  /* syntax/typing.nit:1333 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AAsNotNullableExternCall___n_type(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AType___stype(fra.me.REG[0])(fra.me.REG[0]);
-  /* syntax/typing.nit:1328 */
+  /* syntax/typing.nit:1334 */
   REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[0])(fra.me.REG[0]);
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1330 */
+    /* syntax/typing.nit:1336 */
     fra.me.REG[1] = fra.me.REG[0];
     goto label1;
   } else {
-    /* syntax/typing.nit:1332 */
+    /* syntax/typing.nit:1338 */
     fra.me.REG[0] = CALL_metamodel___static_type___MMType___as_nullable(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[1] = fra.me.REG[0];
     goto label1;
@@ -7533,14 +7547,14 @@ val_t syntax___typing___AAsNotNullableExternCall___to_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1335;
+  fra.me.line = 1341;
   fra.me.meth = LOCATE_syntax___typing___AAsNotNullableExternCall___to_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1335 */
+  /* syntax/typing.nit:1341 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AAsNotNullableExternCall___n_type(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AType___stype(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_metamodel___static_type___MMType___as_notnull(fra.me.REG[0])(fra.me.REG[0]);
@@ -7556,7 +7570,7 @@ val_t syntax___typing___AAttrFormExpr___prop(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1339;
+  fra.me.line = 1345;
   fra.me.meth = LOCATE_syntax___typing___AAttrFormExpr___prop;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7564,13 +7578,13 @@ val_t syntax___typing___AAttrFormExpr___prop(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1339 */
+  /* syntax/typing.nit:1345 */
   fra.me.REG[1] = fra.me.REG[0];
   fra.me.REG[1] = ATTR_syntax___typing___AAttrFormExpr____prop(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1339);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1345);
   }
   goto label1;
   label1: while(0);
@@ -7584,7 +7598,7 @@ val_t syntax___typing___AAttrFormExpr___attr_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1342;
+  fra.me.line = 1348;
   fra.me.meth = LOCATE_syntax___typing___AAttrFormExpr___attr_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7592,13 +7606,13 @@ val_t syntax___typing___AAttrFormExpr___attr_type(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1342 */
+  /* syntax/typing.nit:1348 */
   fra.me.REG[1] = fra.me.REG[0];
   fra.me.REG[1] = ATTR_syntax___typing___AAttrFormExpr____attr_type(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1342);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1348);
   }
   goto label1;
   label1: while(0);
@@ -7623,7 +7637,7 @@ void syntax___typing___AAttrFormExpr___do_typing(val_t p0, val_t p1){
     static val_t once_value_10; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1345;
+  fra.me.line = 1351;
   fra.me.meth = LOCATE_syntax___typing___AAttrFormExpr___do_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -7637,23 +7651,23 @@ void syntax___typing___AAttrFormExpr___do_typing(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1348 */
+  /* syntax/typing.nit:1354 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AAttrFormExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___syntax_base___AbsSyntaxVisitor___check_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:1349 */
+  /* syntax/typing.nit:1355 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AAttrFormExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1350 */
+  /* syntax/typing.nit:1356 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AAttrFormExpr___n_id(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___Token___to_symbol(fra.me.REG[3])(fra.me.REG[3]);
-  /* syntax/typing.nit:1351 */
+  /* syntax/typing.nit:1357 */
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1352 */
+    /* syntax/typing.nit:1358 */
     REGB0 = TAG_Int(3);
     fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
     if (!once_value_2) {
@@ -7678,16 +7692,16 @@ void syntax___typing___AAttrFormExpr___do_typing(val_t p0, val_t p1){
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
     fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[4]);
-    /* syntax/typing.nit:1353 */
+    /* syntax/typing.nit:1359 */
     goto label1;
   }
-  /* syntax/typing.nit:1355 */
+  /* syntax/typing.nit:1361 */
   fra.me.REG[4] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1356 */
+  /* syntax/typing.nit:1362 */
   REGB0 = CALL_metamodel___abstractmetamodel___MMLocalClass___has_global_property_by_name(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1357 */
+    /* syntax/typing.nit:1363 */
     REGB0 = TAG_Int(5);
     fra.me.REG[5] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
     if (!once_value_4) {
@@ -7723,12 +7737,12 @@ void syntax___typing___AAttrFormExpr___do_typing(val_t p0, val_t p1){
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
     fra.me.REG[5] = CALL_standard___string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[5]);
-    /* syntax/typing.nit:1358 */
+    /* syntax/typing.nit:1364 */
     goto label1;
   }
-  /* syntax/typing.nit:1360 */
+  /* syntax/typing.nit:1366 */
   fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMLocalClass___select_attribute(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  /* syntax/typing.nit:1361 */
+  /* syntax/typing.nit:1367 */
   fra.me.REG[5] = CALL_syntax___syntax_base___AbsSyntaxVisitor___mmmodule(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[4])(fra.me.REG[4]);
   fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMGlobalProperty___local_class(fra.me.REG[6])(fra.me.REG[6]);
@@ -7742,9 +7756,9 @@ void syntax___typing___AAttrFormExpr___do_typing(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:235 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-  /* syntax/typing.nit:1361 */
+  /* syntax/typing.nit:1367 */
   if (UNTAG_Bool(REGB1)) {
-    /* syntax/typing.nit:1362 */
+    /* syntax/typing.nit:1368 */
     REGB1 = TAG_Int(7);
     fra.me.REG[6] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
     if (!once_value_7) {
@@ -7796,24 +7810,24 @@ void syntax___typing___AAttrFormExpr___do_typing(val_t p0, val_t p1){
     fra.me.REG[6] = CALL_standard___string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[6]);
   }
-  /* syntax/typing.nit:1364 */
+  /* syntax/typing.nit:1370 */
   ATTR_syntax___typing___AAttrFormExpr____prop(fra.me.REG[0]) = fra.me.REG[4];
-  /* syntax/typing.nit:1365 */
+  /* syntax/typing.nit:1371 */
   fra.me.REG[2] = CALL_metamodel___static_type___MMLocalProperty___signature_for(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
   fra.me.REG[2] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1366 */
+  /* syntax/typing.nit:1372 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AAttrFormExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   REGB1 = CALL_syntax___typing___AExpr___is_self(fra.me.REG[4])(fra.me.REG[4]);
   REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
   if (UNTAG_Bool(REGB1)) {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1366);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1372);
     }
     fra.me.REG[4] = CALL_metamodel___static_type___MMType___not_for_self(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[2] = fra.me.REG[4];
   }
-  /* syntax/typing.nit:1367 */
+  /* syntax/typing.nit:1373 */
   ATTR_syntax___typing___AAttrFormExpr____attr_type(fra.me.REG[0]) = fra.me.REG[2];
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -7827,7 +7841,7 @@ void syntax___typing___AAttrExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1372;
+  fra.me.line = 1378;
   fra.me.meth = LOCATE_syntax___typing___AAttrExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -7836,9 +7850,9 @@ void syntax___typing___AAttrExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1374 */
+  /* syntax/typing.nit:1380 */
   CALL_syntax___typing___AAttrFormExpr___do_typing(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* syntax/typing.nit:1375 */
+  /* syntax/typing.nit:1381 */
   fra.me.REG[1] = ATTR_syntax___typing___AAttrFormExpr____prop(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -7855,10 +7869,10 @@ void syntax___typing___AAttrExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:1376 */
+  /* syntax/typing.nit:1382 */
   fra.me.REG[1] = CALL_syntax___syntax_base___AAttrFormExpr___attr_type(fra.me.REG[0])(fra.me.REG[0]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/typing.nit:1377 */
+  /* syntax/typing.nit:1383 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   label1: while(0);
@@ -7873,7 +7887,7 @@ void syntax___typing___AAttrAssignExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1382;
+  fra.me.line = 1388;
   fra.me.meth = LOCATE_syntax___typing___AAttrAssignExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -7884,9 +7898,9 @@ void syntax___typing___AAttrAssignExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1384 */
+  /* syntax/typing.nit:1390 */
   CALL_syntax___typing___AAttrFormExpr___do_typing(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* syntax/typing.nit:1385 */
+  /* syntax/typing.nit:1391 */
   fra.me.REG[2] = ATTR_syntax___typing___AAttrFormExpr____prop(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -7903,7 +7917,7 @@ void syntax___typing___AAttrAssignExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:1386 */
+  /* syntax/typing.nit:1392 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AAssignFormExpr___n_value(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AAttrFormExpr___attr_type(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[3]);
@@ -7911,7 +7925,7 @@ void syntax___typing___AAttrAssignExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:1387 */
+  /* syntax/typing.nit:1393 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   label1: while(0);
@@ -7926,7 +7940,7 @@ void syntax___typing___AAttrReassignExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1392;
+  fra.me.line = 1398;
   fra.me.meth = LOCATE_syntax___typing___AAttrReassignExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -7937,9 +7951,9 @@ void syntax___typing___AAttrReassignExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1394 */
+  /* syntax/typing.nit:1400 */
   CALL_syntax___typing___AAttrFormExpr___do_typing(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* syntax/typing.nit:1395 */
+  /* syntax/typing.nit:1401 */
   fra.me.REG[2] = ATTR_syntax___typing___AAttrFormExpr____prop(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -7956,10 +7970,10 @@ void syntax___typing___AAttrReassignExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:1396 */
+  /* syntax/typing.nit:1402 */
   fra.me.REG[2] = CALL_syntax___syntax_base___AAttrFormExpr___attr_type(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_syntax___typing___AReassignFormExpr___do_rvalue_typing(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2]);
-  /* syntax/typing.nit:1397 */
+  /* syntax/typing.nit:1403 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7975,11 +7989,11 @@ void syntax___typing___AAttrReassignExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:1398 */
+  /* syntax/typing.nit:1404 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AReassignFormExpr___n_value(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[3])(fra.me.REG[3]);
   CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[2], fra.me.REG[3]);
-  /* syntax/typing.nit:1399 */
+  /* syntax/typing.nit:1405 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   label1: while(0);
@@ -7995,7 +8009,7 @@ void syntax___typing___AIssetAttrExpr___after_typing(val_t p0, val_t p1){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1404;
+  fra.me.line = 1410;
   fra.me.meth = LOCATE_syntax___typing___AIssetAttrExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -8005,9 +8019,9 @@ void syntax___typing___AIssetAttrExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1406 */
+  /* syntax/typing.nit:1412 */
   CALL_syntax___typing___AAttrFormExpr___do_typing(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* syntax/typing.nit:1407 */
+  /* syntax/typing.nit:1413 */
   fra.me.REG[2] = ATTR_syntax___typing___AAttrFormExpr____prop(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -8024,11 +8038,11 @@ void syntax___typing___AIssetAttrExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:1408 */
+  /* syntax/typing.nit:1414 */
   fra.me.REG[2] = CALL_syntax___syntax_base___AAttrFormExpr___attr_type(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[2])(fra.me.REG[2]);
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1409 */
+    /* syntax/typing.nit:1415 */
     if (!once_value_2) {
       fra.me.REG[2] = BOX_NativeString("Error: isset on a nullable attribute.");
       REGB0 = TAG_Int(37);
@@ -8039,10 +8053,10 @@ void syntax___typing___AIssetAttrExpr___after_typing(val_t p0, val_t p1){
     fra.me.REG[2] = fra.me.REG[2];
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[2]);
   }
-  /* syntax/typing.nit:1411 */
+  /* syntax/typing.nit:1417 */
   fra.me.REG[1] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_bool(fra.me.REG[1])(fra.me.REG[1]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/typing.nit:1412 */
+  /* syntax/typing.nit:1418 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   label1: while(0);
@@ -8056,7 +8070,7 @@ val_t syntax___typing___AAbsAbsSendExpr___prop_signature(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1417;
+  fra.me.line = 1423;
   fra.me.meth = LOCATE_syntax___typing___AAbsAbsSendExpr___prop_signature;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -8064,14 +8078,14 @@ val_t syntax___typing___AAbsAbsSendExpr___prop_signature(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1417 */
+  /* syntax/typing.nit:1423 */
   fra.me.REG[1] = fra.me.REG[0];
-  /* syntax/typing.nit:1418 */
+  /* syntax/typing.nit:1424 */
   fra.me.REG[1] = ATTR_syntax___typing___AAbsAbsSendExpr____prop_signature(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1418);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1424);
   }
   goto label1;
   label1: while(0);
@@ -8086,7 +8100,7 @@ val_t syntax___typing___AAbsAbsSendExpr___raw_arguments(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1421;
+  fra.me.line = 1427;
   fra.me.meth = LOCATE_syntax___typing___AAbsAbsSendExpr___raw_arguments;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -8096,9 +8110,9 @@ val_t syntax___typing___AAbsAbsSendExpr___raw_arguments(val_t p0){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1424 */
+  /* syntax/typing.nit:1430 */
   fra.me.REG[1] = ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]);
-  /* syntax/typing.nit:1425 */
+  /* syntax/typing.nit:1431 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8113,14 +8127,14 @@ val_t syntax___typing___AAbsAbsSendExpr___raw_arguments(val_t p0){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1426 */
+    /* syntax/typing.nit:1432 */
     fra.me.REG[2] = fra.me.REG[1];
     goto label1;
   } else {
-    /* syntax/typing.nit:1428 */
+    /* syntax/typing.nit:1434 */
     fra.me.REG[3] = CALL_syntax___typing___AAbsAbsSendExpr___compute_raw_arguments(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[1] = fra.me.REG[3];
-    /* syntax/typing.nit:1429 */
+    /* syntax/typing.nit:1435 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -8137,9 +8151,9 @@ val_t syntax___typing___AAbsAbsSendExpr___raw_arguments(val_t p0){
       fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
       fra.me.REG[1] = fra.me.REG[3];
     }
-    /* syntax/typing.nit:1430 */
+    /* syntax/typing.nit:1436 */
     ATTR_syntax___typing___AAbsAbsSendExpr____raw_arguments_cache(fra.me.REG[0]) = fra.me.REG[1];
-    /* syntax/typing.nit:1431 */
+    /* syntax/typing.nit:1437 */
     fra.me.REG[2] = fra.me.REG[1];
     goto label1;
   }
@@ -8156,7 +8170,7 @@ val_t syntax___typing___AAbsAbsSendExpr___compute_raw_arguments(val_t p0){
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1437;
+  fra.me.line = 1443;
   fra.me.meth = LOCATE_syntax___typing___AAbsAbsSendExpr___compute_raw_arguments;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -8165,7 +8179,7 @@ val_t syntax___typing___AAbsAbsSendExpr___compute_raw_arguments(val_t p0){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1439 */
+  /* syntax/typing.nit:1445 */
   REGB0 = TAG_Int(3);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   if (!once_value_1) {
@@ -8191,7 +8205,7 @@ val_t syntax___typing___AAbsAbsSendExpr___compute_raw_arguments(val_t p0){
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   fra.me.REG[1] = CALL_standard___string___Object___to_s(fra.me.REG[1])(fra.me.REG[1]);
   CALL_standard___file___Object___print(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* syntax/typing.nit:1440 */
+  /* syntax/typing.nit:1446 */
   fra.me.REG[1] = NIT_NULL;
   goto label3;
   label3: while(0);
@@ -8219,7 +8233,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_signature(val_t p0, val_t p1,
     static val_t once_value_3; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1443;
+  fra.me.line = 1449;
   fra.me.meth = LOCATE_syntax___typing___AAbsAbsSendExpr___process_signature;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -8236,11 +8250,11 @@ val_t syntax___typing___AAbsAbsSendExpr___process_signature(val_t p0, val_t p1,
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* syntax/typing.nit:1446 */
+  /* syntax/typing.nit:1452 */
   REGB0 = CALL_metamodel___vararg___MMSignature___vararg_rank(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1447 */
+  /* syntax/typing.nit:1453 */
   REGB1 = CALL_metamodel___static_type___MMSignature___arity(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1449 */
+  /* syntax/typing.nit:1455 */
   REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
   } else {
@@ -8258,7 +8272,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_signature(val_t p0, val_t p1,
   } else {
     REGB3 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB3)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1449);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1455);
     }
     /* ../lib/standard/collection/array.nit:24 */
     REGB3 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
@@ -8267,7 +8281,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_signature(val_t p0, val_t p1,
       nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
     }
     REGB3 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
-    /* syntax/typing.nit:1449 */
+    /* syntax/typing.nit:1455 */
     REGB2 = REGB3;
   }
   REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
@@ -8277,7 +8291,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_signature(val_t p0, val_t p1,
   }
   /* ../lib/standard/kernel.nit:237 */
   REGB3 = TAG_Bool(UNTAG_Int(REGB1)>UNTAG_Int(REGB2));
-  /* syntax/typing.nit:1450 */
+  /* syntax/typing.nit:1456 */
   if (UNTAG_Bool(REGB3)) {
     REGB3 = TAG_Bool(1);
   } else {
@@ -8286,7 +8300,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_signature(val_t p0, val_t p1,
     } else {
       /* ../lib/standard/kernel.nit:230 */
       REGB5 = TAG_Bool((REGB1)==(REGB2));
-      /* syntax/typing.nit:1450 */
+      /* syntax/typing.nit:1456 */
       REGB4 = REGB5;
     }
     REGB4 = TAG_Bool(!UNTAG_Bool(REGB4));
@@ -8294,13 +8308,13 @@ val_t syntax___typing___AAbsAbsSendExpr___process_signature(val_t p0, val_t p1,
       REGB4 = TAG_Int(1);
       /* ../lib/standard/kernel.nit:239 */
       REGB4 = TAG_Int(-UNTAG_Int(REGB4));
-      /* syntax/typing.nit:1450 */
+      /* syntax/typing.nit:1456 */
       REGB5 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB4));
       if (UNTAG_Bool(REGB5)) {
       } else {
         /* ../lib/standard/kernel.nit:230 */
         REGB4 = TAG_Bool((REGB0)==(REGB4));
-        /* syntax/typing.nit:1450 */
+        /* syntax/typing.nit:1456 */
         REGB5 = REGB4;
       }
     } else {
@@ -8310,7 +8324,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_signature(val_t p0, val_t p1,
     REGB3 = REGB5;
   }
   if (UNTAG_Bool(REGB3)) {
-    /* syntax/typing.nit:1451 */
+    /* syntax/typing.nit:1457 */
     REGB3 = TAG_Int(5);
     fra.me.REG[5] = NEW_Array_standard___collection___array___Array___with_capacity(REGB3);
     if (!once_value_1) {
@@ -8346,13 +8360,13 @@ val_t syntax___typing___AAbsAbsSendExpr___process_signature(val_t p0, val_t p1,
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
     fra.me.REG[5] = CALL_standard___string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[5]);
-    /* syntax/typing.nit:1452 */
+    /* syntax/typing.nit:1458 */
     REGB3 = TAG_Bool(0);
     goto label4;
   }
-  /* syntax/typing.nit:1454 */
+  /* syntax/typing.nit:1460 */
   REGB5 = TAG_Int(0);
-  /* syntax/typing.nit:1455 */
+  /* syntax/typing.nit:1461 */
   REGB4 = TAG_Int(0);
   /* ../lib/standard/kernel.nit:350 */
   REGB6 = REGB1;
@@ -8367,21 +8381,21 @@ val_t syntax___typing___AAbsAbsSendExpr___process_signature(val_t p0, val_t p1,
     REGB7 = TAG_Bool(UNTAG_Int(REGB4)<UNTAG_Int(REGB6));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB7)) {
-      /* syntax/typing.nit:1455 */
+      /* syntax/typing.nit:1461 */
       REGB7 = REGB4;
-      /* syntax/typing.nit:1457 */
+      /* syntax/typing.nit:1463 */
       fra.me.REG[5] = CALL_metamodel___static_type___MMSignature_____bra(fra.me.REG[2])(fra.me.REG[2], REGB7);
-      /* syntax/typing.nit:1458 */
+      /* syntax/typing.nit:1464 */
       REGB8 = TAG_Bool(IS_EQUAL_OO(REGB7,REGB0));
       if (UNTAG_Bool(REGB8)) {
       } else {
         /* ../lib/standard/kernel.nit:230 */
         REGB7 = TAG_Bool((REGB7)==(REGB0));
-        /* syntax/typing.nit:1458 */
+        /* syntax/typing.nit:1464 */
         REGB8 = REGB7;
       }
       if (UNTAG_Bool(REGB8)) {
-        /* syntax/typing.nit:1459 */
+        /* syntax/typing.nit:1465 */
         REGB8 = TAG_Int(0);
         /* ../lib/standard/kernel.nit:240 */
         REGB7 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB1));
@@ -8396,10 +8410,10 @@ val_t syntax___typing___AAbsAbsSendExpr___process_signature(val_t p0, val_t p1,
           REGB9 = TAG_Bool(UNTAG_Int(REGB8)<=UNTAG_Int(REGB7));
           /* ../lib/standard/kernel.nit:344 */
           if (UNTAG_Bool(REGB9)) {
-            /* syntax/typing.nit:1460 */
+            /* syntax/typing.nit:1466 */
             REGB9 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
             if (UNTAG_Bool(REGB9)) {
-              nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1460);
+              nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1466);
             }
             /* ../lib/standard/collection/array.nit:278 */
             fra.me.REG[0] = fra.me.REG[4];
@@ -8443,18 +8457,18 @@ val_t syntax___typing___AAbsAbsSendExpr___process_signature(val_t p0, val_t p1,
             if (UNTAG_Bool(REGB10)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[0] = ((Nit_NativeArray)fra.me.REG[0])->val[UNTAG_Int(REGB9)];
             /* ../lib/standard/collection/array.nit:281 */
             goto label5;
             label5: while(0);
-            /* syntax/typing.nit:1461 */
+            /* syntax/typing.nit:1467 */
             CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[5]);
-            /* syntax/typing.nit:1462 */
+            /* syntax/typing.nit:1468 */
             REGB9 = TAG_Int(1);
             /* ../lib/standard/kernel.nit:238 */
             REGB9 = TAG_Int(UNTAG_Int(REGB5)+UNTAG_Int(REGB9));
-            /* syntax/typing.nit:1462 */
+            /* syntax/typing.nit:1468 */
             REGB5 = REGB9;
             /* ../lib/standard/kernel.nit:346 */
             REGB9 = TAG_Int(1);
@@ -8469,10 +8483,10 @@ val_t syntax___typing___AAbsAbsSendExpr___process_signature(val_t p0, val_t p1,
         }
         label6: while(0);
       } else {
-        /* syntax/typing.nit:1465 */
+        /* syntax/typing.nit:1471 */
         REGB8 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
         if (UNTAG_Bool(REGB8)) {
-          nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1465);
+          nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1471);
         }
         /* ../lib/standard/collection/array.nit:278 */
         fra.me.REG[3] = fra.me.REG[4];
@@ -8516,20 +8530,20 @@ val_t syntax___typing___AAbsAbsSendExpr___process_signature(val_t p0, val_t p1,
         if (UNTAG_Bool(REGB7)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB8)];
         /* ../lib/standard/collection/array.nit:281 */
         goto label7;
         label7: while(0);
-        /* syntax/typing.nit:1465 */
+        /* syntax/typing.nit:1471 */
         fra.me.REG[0] = fra.me.REG[3];
-        /* syntax/typing.nit:1466 */
+        /* syntax/typing.nit:1472 */
         CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[5]);
-        /* syntax/typing.nit:1467 */
+        /* syntax/typing.nit:1473 */
         REGB8 = TAG_Int(1);
         /* ../lib/standard/kernel.nit:238 */
         REGB8 = TAG_Int(UNTAG_Int(REGB5)+UNTAG_Int(REGB8));
-        /* syntax/typing.nit:1467 */
+        /* syntax/typing.nit:1473 */
         REGB5 = REGB8;
       }
       /* ../lib/standard/kernel.nit:357 */
@@ -8544,7 +8558,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_signature(val_t p0, val_t p1,
     }
   }
   label8: while(0);
-  /* syntax/typing.nit:1470 */
+  /* syntax/typing.nit:1476 */
   REGB4 = TAG_Bool(1);
   REGB3 = REGB4;
   goto label4;
@@ -8584,7 +8598,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
       static val_t once_value_25; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1473;
+  fra.me.line = 1479;
   fra.me.meth = LOCATE_syntax___typing___AAbsAbsSendExpr___process_closures;
   fra.me.has_broke = 0;
   fra.me.REG_size = 17;
@@ -8611,11 +8625,11 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* syntax/typing.nit:1476 */
+  /* syntax/typing.nit:1482 */
   fra.me.REG[5] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1477 */
+  /* syntax/typing.nit:1483 */
   fra.me.REG[6] = CALL_metamodel___static_type___MMSignature___closures(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1478 */
+  /* syntax/typing.nit:1484 */
   REGB0 = TAG_Int(0);
   /* ../lib/standard/collection/array.nit:266 */
   fra.me.REG[7] = fra.me.REG[6];
@@ -8653,16 +8667,16 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
       if (UNTAG_Bool(REGB2)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[9] = ((Nit_NativeArray)fra.me.REG[8])->val[UNTAG_Int(REGB1)];
-      /* syntax/typing.nit:1480 */
+      /* syntax/typing.nit:1486 */
       REGB2 = CALL_metamodel___static_type___MMClosure___is_optional(fra.me.REG[9])(fra.me.REG[9]);
       REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
       if (UNTAG_Bool(REGB2)) {
         REGB2 = TAG_Int(1);
         /* ../lib/standard/kernel.nit:238 */
         REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
-        /* syntax/typing.nit:1480 */
+        /* syntax/typing.nit:1486 */
         REGB0 = REGB2;
       }
       /* ../lib/standard/collection/array.nit:274 */
@@ -8677,9 +8691,9 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
     }
   }
   label1: while(0);
-  /* syntax/typing.nit:1482 */
+  /* syntax/typing.nit:1488 */
   REGB1 = TAG_Int(0);
-  /* syntax/typing.nit:1483 */
+  /* syntax/typing.nit:1489 */
   REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
   } else {
@@ -8696,7 +8710,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
   if (UNTAG_Bool(REGB2)) {
     REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1483);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1489);
     }
     /* ../lib/standard/collection/array.nit:24 */
     REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
@@ -8705,7 +8719,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
       nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
     }
     REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
-    /* syntax/typing.nit:1483 */
+    /* syntax/typing.nit:1489 */
     REGB1 = REGB2;
   }
   /* ../lib/standard/collection/array.nit:24 */
@@ -8715,7 +8729,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
     nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
   REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[6]);
-  /* syntax/typing.nit:1484 */
+  /* syntax/typing.nit:1490 */
   REGB3 = TAG_Int(0);
   REGB4 = TAG_Bool(VAL_ISA(REGB3, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
   if (UNTAG_Bool(REGB4)) {
@@ -8724,16 +8738,16 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
   }
   /* ../lib/standard/kernel.nit:237 */
   REGB3 = TAG_Bool(UNTAG_Int(REGB2)>UNTAG_Int(REGB3));
-  /* syntax/typing.nit:1484 */
+  /* syntax/typing.nit:1490 */
   if (UNTAG_Bool(REGB3)) {
-    /* syntax/typing.nit:1485 */
+    /* syntax/typing.nit:1491 */
     REGB3 = TAG_Int(0);
     REGB2 = TAG_Bool(IS_EQUAL_OO(REGB1,REGB3));
     if (UNTAG_Bool(REGB2)) {
     } else {
       /* ../lib/standard/kernel.nit:230 */
       REGB3 = TAG_Bool((REGB1)==(REGB3));
-      /* syntax/typing.nit:1485 */
+      /* syntax/typing.nit:1491 */
       REGB2 = REGB3;
     }
     if (UNTAG_Bool(REGB2)) {
@@ -8746,12 +8760,12 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
       /* ../lib/standard/kernel.nit:237 */
       REGB2 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB2));
     } else {
-      /* syntax/typing.nit:1485 */
+      /* syntax/typing.nit:1491 */
       REGB3 = TAG_Bool(0);
       REGB2 = REGB3;
     }
     if (UNTAG_Bool(REGB2)) {
-      /* syntax/typing.nit:1486 */
+      /* syntax/typing.nit:1492 */
       REGB2 = TAG_Int(5);
       fra.me.REG[8] = NEW_Array_standard___collection___array___Array___with_capacity(REGB2);
       if (!once_value_2) {
@@ -8781,7 +8795,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
         nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
       }
       REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[6]);
-      /* syntax/typing.nit:1486 */
+      /* syntax/typing.nit:1492 */
       fra.me.REG[7] = CALL_standard___string___Object___to_s(REGB2)(REGB2);
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[7]);
       if (!once_value_4) {
@@ -8810,7 +8824,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
       }
       /* ../lib/standard/kernel.nit:237 */
       REGB2 = TAG_Bool(UNTAG_Int(REGB1)>UNTAG_Int(REGB2));
-      /* syntax/typing.nit:1487 */
+      /* syntax/typing.nit:1493 */
       if (UNTAG_Bool(REGB2)) {
         REGB2 = TAG_Bool(1);
       } else {
@@ -8821,11 +8835,11 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
         }
         /* ../lib/standard/kernel.nit:235 */
         REGB0 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB0));
-        /* syntax/typing.nit:1487 */
+        /* syntax/typing.nit:1493 */
         REGB2 = REGB0;
       }
       if (UNTAG_Bool(REGB2)) {
-        /* syntax/typing.nit:1488 */
+        /* syntax/typing.nit:1494 */
         REGB2 = TAG_Int(7);
         fra.me.REG[8] = NEW_Array_standard___collection___array___Array___with_capacity(REGB2);
         if (!once_value_5) {
@@ -8855,7 +8869,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
           nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
         }
         REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[6]);
-        /* syntax/typing.nit:1488 */
+        /* syntax/typing.nit:1494 */
         fra.me.REG[7] = CALL_standard___string___Object___to_s(REGB2)(REGB2);
         CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[7]);
         if (!once_value_7) {
@@ -8869,7 +8883,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
         CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[7]);
         REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
-          nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1488);
+          nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1494);
         }
         /* ../lib/standard/collection/array.nit:24 */
         REGB2 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
@@ -8878,7 +8892,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
           nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
         }
         REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
-        /* syntax/typing.nit:1488 */
+        /* syntax/typing.nit:1494 */
         fra.me.REG[7] = CALL_standard___string___Object___to_s(REGB2)(REGB2);
         CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[7]);
         if (!once_value_8) {
@@ -8893,9 +8907,9 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
         fra.me.REG[8] = CALL_standard___string___Object___to_s(fra.me.REG[8])(fra.me.REG[8]);
         CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[8]);
       } else {
-        /* syntax/typing.nit:1491 */
+        /* syntax/typing.nit:1497 */
         fra.me.REG[8] = NIT_NULL;
-        /* syntax/typing.nit:1492 */
+        /* syntax/typing.nit:1498 */
         REGB2 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
         } else {
@@ -8913,7 +8927,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
           fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
           fra.me.REG[8] = fra.me.REG[7];
         }
-        /* syntax/typing.nit:1495 */
+        /* syntax/typing.nit:1501 */
         REGB2 = TAG_Int(0);
         REGB0 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
         if (UNTAG_Bool(REGB0)) {
@@ -8922,15 +8936,15 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
         }
         /* ../lib/standard/kernel.nit:237 */
         REGB2 = TAG_Bool(UNTAG_Int(REGB1)>UNTAG_Int(REGB2));
-        /* syntax/typing.nit:1495 */
+        /* syntax/typing.nit:1501 */
         if (UNTAG_Bool(REGB2)) {
           REGB2 = TAG_Int(1);
           /* ../lib/standard/kernel.nit:240 */
           REGB2 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB2));
-          /* syntax/typing.nit:1495 */
+          /* syntax/typing.nit:1501 */
           REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
           if (UNTAG_Bool(REGB0)) {
-            nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1495);
+            nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1501);
           }
           /* ../lib/standard/collection/array.nit:278 */
           fra.me.REG[7] = fra.me.REG[4];
@@ -8973,21 +8987,21 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
           if (UNTAG_Bool(REGB0)) {
             nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
           }
-          /* ../lib/standard/collection/array.nit:718 */
+          /* ../lib/standard/collection/array.nit:724 */
           fra.me.REG[7] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB2)];
           /* ../lib/standard/collection/array.nit:281 */
           goto label9;
           label9: while(0);
-          /* syntax/typing.nit:1495 */
+          /* syntax/typing.nit:1501 */
           REGB2 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
           if (UNTAG_Bool(REGB2)) {
-            nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1495);
+            nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1501);
           }
           fra.me.REG[7] = CALL_parser___parser_nodes___ALabelable___n_label(fra.me.REG[7])(fra.me.REG[7]);
         } else {
           fra.me.REG[7] = NIT_NULL;
         }
-        /* syntax/typing.nit:1498 */
+        /* syntax/typing.nit:1504 */
         REGB2 = TAG_Int(0);
         /* ../lib/standard/kernel.nit:350 */
         REGB0 = REGB1;
@@ -9002,12 +9016,12 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
           REGB3 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB0));
           /* ../lib/standard/kernel.nit:355 */
           if (UNTAG_Bool(REGB3)) {
-            /* syntax/typing.nit:1498 */
+            /* syntax/typing.nit:1504 */
             REGB3 = REGB2;
-            /* syntax/typing.nit:1499 */
+            /* syntax/typing.nit:1505 */
             REGB4 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
             if (UNTAG_Bool(REGB4)) {
-              nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1499);
+              nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1505);
             }
             /* ../lib/standard/collection/array.nit:278 */
             fra.me.REG[9] = fra.me.REG[4];
@@ -9050,17 +9064,17 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
             if (UNTAG_Bool(REGB4)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[9] = ((Nit_NativeArray)fra.me.REG[9])->val[UNTAG_Int(REGB3)];
             /* ../lib/standard/collection/array.nit:281 */
             goto label10;
             label10: while(0);
-            /* syntax/typing.nit:1500 */
+            /* syntax/typing.nit:1506 */
             fra.me.REG[10] = CALL_parser___parser_nodes___AClosureDef___n_id(fra.me.REG[9])(fra.me.REG[9]);
             fra.me.REG[10] = CALL_syntax___typing___AClosureId___to_symbol(fra.me.REG[10])(fra.me.REG[10]);
-            /* syntax/typing.nit:1501 */
+            /* syntax/typing.nit:1507 */
             fra.me.REG[11] = CALL_metamodel___static_type___MMSignature___closure_named(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[10]);
-            /* syntax/typing.nit:1502 */
+            /* syntax/typing.nit:1508 */
             REGB3 = TAG_Bool(fra.me.REG[11]==NIT_NULL);
             if (UNTAG_Bool(REGB3)) {
             } else {
@@ -9075,14 +9089,14 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
             }
             REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
             if (UNTAG_Bool(REGB3)) {
-              /* syntax/typing.nit:1503 */
+              /* syntax/typing.nit:1509 */
               fra.me.REG[11] = NEW_EscapableClosure_syntax___scope___EscapableClosure___init(fra.me.REG[9], fra.me.REG[11], fra.me.REG[8]);
-              /* syntax/typing.nit:1504 */
+              /* syntax/typing.nit:1510 */
               fra.me.REG[12] = CALL_syntax___typing___TypingVisitor___scope_ctx(fra.me.REG[1])(fra.me.REG[1]);
               CALL_syntax___scope___ScopeContext___push_escapable(fra.me.REG[12])(fra.me.REG[12], fra.me.REG[11], fra.me.REG[7]);
-              /* syntax/typing.nit:1505 */
+              /* syntax/typing.nit:1511 */
               CALL_syntax___typing___AClosureDef___accept_typing2(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[1], fra.me.REG[11]);
-              /* syntax/typing.nit:1506 */
+              /* syntax/typing.nit:1512 */
               fra.me.REG[11] = CALL_syntax___typing___TypingVisitor___scope_ctx(fra.me.REG[1])(fra.me.REG[1]);
               CALL_syntax___scope___ScopeContext___pop(fra.me.REG[11])(fra.me.REG[11]);
             } else {
@@ -9093,18 +9107,18 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
                nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
               }
               REGB3 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[6]);
-              /* syntax/typing.nit:1507 */
+              /* syntax/typing.nit:1513 */
               REGB4 = TAG_Int(1);
               REGB5 = TAG_Bool(IS_EQUAL_OO(REGB3,REGB4));
               if (UNTAG_Bool(REGB5)) {
               } else {
                /* ../lib/standard/kernel.nit:230 */
                REGB4 = TAG_Bool((REGB3)==(REGB4));
-               /* syntax/typing.nit:1507 */
+               /* syntax/typing.nit:1513 */
                REGB5 = REGB4;
               }
               if (UNTAG_Bool(REGB5)) {
-               /* syntax/typing.nit:1508 */
+               /* syntax/typing.nit:1514 */
                fra.me.REG[11] = CALL_parser___parser_nodes___AClosureDef___n_id(fra.me.REG[9])(fra.me.REG[9]);
                REGB5 = TAG_Int(7);
                fra.me.REG[12] = NEW_Array_standard___collection___array___Array___with_capacity(REGB5);
@@ -9142,7 +9156,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
                fra.me.REG[13] = CALL_standard___collection___abstract_collection___Collection___first(fra.me.REG[6])(fra.me.REG[6]);
                REGB5 = TAG_Bool(fra.me.REG[13]==NIT_NULL);
                if (UNTAG_Bool(REGB5)) {
-               nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1508);
+               nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1514);
                }
                fra.me.REG[13] = CALL_metamodel___static_type___MMClosure___name(fra.me.REG[13])(fra.me.REG[13]);
                fra.me.REG[13] = CALL_standard___string___Object___to_s(fra.me.REG[13])(fra.me.REG[13]);
@@ -9159,7 +9173,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
                fra.me.REG[12] = CALL_standard___string___Object___to_s(fra.me.REG[12])(fra.me.REG[12]);
                CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[11], fra.me.REG[12]);
               } else {
-               /* syntax/typing.nit:1510 */
+               /* syntax/typing.nit:1516 */
                fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
                /* ../lib/standard/collection/array.nit:266 */
                fra.me.REG[11] = fra.me.REG[6];
@@ -9197,9 +9211,9 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
                if (UNTAG_Bool(REGB4)) {
                nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
                }
-               /* ../lib/standard/collection/array.nit:718 */
+               /* ../lib/standard/collection/array.nit:724 */
                fra.me.REG[14] = ((Nit_NativeArray)fra.me.REG[13])->val[UNTAG_Int(REGB5)];
-               /* syntax/typing.nit:1512 */
+               /* syntax/typing.nit:1518 */
                REGB4 = TAG_Int(3);
                fra.me.REG[15] = NEW_Array_standard___collection___array___Array___with_capacity(REGB4);
                if (!once_value_15) {
@@ -9237,7 +9251,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
                }
                }
                label17: while(0);
-               /* syntax/typing.nit:1514 */
+               /* syntax/typing.nit:1520 */
                fra.me.REG[9] = CALL_parser___parser_nodes___AClosureDef___n_id(fra.me.REG[9])(fra.me.REG[9]);
                REGB5 = TAG_Int(7);
                fra.me.REG[13] = NEW_Array_standard___collection___array___Array___with_capacity(REGB5);
@@ -9307,7 +9321,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
           }
         }
         label23: while(0);
-        /* syntax/typing.nit:1519 */
+        /* syntax/typing.nit:1525 */
         REGB2 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
         } else {
@@ -9322,26 +9336,26 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
         }
         REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
         if (UNTAG_Bool(REGB2)) {
-          /* syntax/typing.nit:1520 */
+          /* syntax/typing.nit:1526 */
           fra.me.REG[8] = CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform_multiexpr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5], fra.me.REG[8]);
           fra.me.REG[5] = fra.me.REG[8];
         }
       }
     }
   } else {
-    /* syntax/typing.nit:1523 */
+    /* syntax/typing.nit:1529 */
     REGB2 = TAG_Int(0);
     REGB0 = TAG_Bool(IS_EQUAL_OO(REGB1,REGB2));
     if (UNTAG_Bool(REGB0)) {
     } else {
       /* ../lib/standard/kernel.nit:230 */
       REGB2 = TAG_Bool((REGB1)==(REGB2));
-      /* syntax/typing.nit:1523 */
+      /* syntax/typing.nit:1529 */
       REGB0 = REGB2;
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:1524 */
+      /* syntax/typing.nit:1530 */
       REGB0 = TAG_Int(3);
       fra.me.REG[8] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
       if (!once_value_24) {
@@ -9368,7 +9382,7 @@ val_t syntax___typing___AAbsAbsSendExpr___process_closures(val_t p0, val_t p1, v
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[8]);
     }
   }
-  /* syntax/typing.nit:1526 */
+  /* syntax/typing.nit:1532 */
   goto label26;
   label26: while(0);
   stack_frame_head = fra.me.prev;
@@ -9383,7 +9397,7 @@ void syntax___typing___AAbsSendExpr___do_typing(val_t p0, val_t p1, val_t p2, va
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1531;
+  fra.me.line = 1537;
   fra.me.meth = LOCATE_syntax___typing___AAbsSendExpr___do_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -9403,9 +9417,9 @@ void syntax___typing___AAbsSendExpr___do_typing(val_t p0, val_t p1, val_t p2, va
   fra.me.REG[3] = p5;
   fra.me.REG[4] = p6;
   fra.me.REG[5] = p7;
-  /* syntax/typing.nit:1534 */
+  /* syntax/typing.nit:1540 */
   fra.me.REG[3] = CALL_syntax___typing___AAbsSendExpr___get_property(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], REGB0, fra.me.REG[3]);
-  /* syntax/typing.nit:1535 */
+  /* syntax/typing.nit:1541 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -9421,12 +9435,12 @@ void syntax___typing___AAbsSendExpr___do_typing(val_t p0, val_t p1, val_t p2, va
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:1536 */
+  /* syntax/typing.nit:1542 */
   fra.me.REG[2] = CALL_syntax___typing___AAbsSendExpr___get_signature(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], REGB1);
-  /* syntax/typing.nit:1537 */
+  /* syntax/typing.nit:1543 */
   REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1537);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1543);
   }
   fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalProperty___name(fra.me.REG[3])(fra.me.REG[3]);
   REGB1 = CALL_syntax___typing___AAbsAbsSendExpr___process_signature(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[6], fra.me.REG[4]);
@@ -9434,14 +9448,14 @@ void syntax___typing___AAbsSendExpr___do_typing(val_t p0, val_t p1, val_t p2, va
   if (UNTAG_Bool(REGB1)) {
     goto label1;
   }
-  /* syntax/typing.nit:1538 */
+  /* syntax/typing.nit:1544 */
   REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1538);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1544);
   }
   fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMLocalProperty___name(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[5] = CALL_syntax___typing___AAbsAbsSendExpr___process_closures(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[4], fra.me.REG[5]);
-  /* syntax/typing.nit:1539 */
+  /* syntax/typing.nit:1545 */
   REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
@@ -9476,11 +9490,11 @@ void syntax___typing___AAbsSendExpr___do_typing(val_t p0, val_t p1, val_t p2, va
   if (UNTAG_Bool(REGB1)) {
     goto label1;
   }
-  /* syntax/typing.nit:1540 */
+  /* syntax/typing.nit:1546 */
   ATTR_syntax___typing___AAbsSendExpr____prop(fra.me.REG[0]) = fra.me.REG[3];
-  /* syntax/typing.nit:1541 */
+  /* syntax/typing.nit:1547 */
   ATTR_syntax___typing___AAbsAbsSendExpr____prop_signature(fra.me.REG[0]) = fra.me.REG[2];
-  /* syntax/typing.nit:1542 */
+  /* syntax/typing.nit:1548 */
   ATTR_syntax___typing___AAbsSendExpr____return_type(fra.me.REG[0]) = fra.me.REG[5];
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -9512,7 +9526,7 @@ val_t syntax___typing___AAbsSendExpr___get_property(val_t p0, val_t p1, val_t p2
       static val_t once_value_17; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1545;
+  fra.me.line = 1551;
   fra.me.meth = LOCATE_syntax___typing___AAbsSendExpr___get_property;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
@@ -9532,10 +9546,10 @@ val_t syntax___typing___AAbsSendExpr___get_property(val_t p0, val_t p1, val_t p2
   fra.me.REG[2] = p2;
   REGB0 = p3;
   fra.me.REG[3] = p4;
-  /* syntax/typing.nit:1547 */
+  /* syntax/typing.nit:1553 */
   REGB1 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
   if (UNTAG_Bool(REGB1)) {
-    /* syntax/typing.nit:1548 */
+    /* syntax/typing.nit:1554 */
     if (!once_value_1) {
       if (!once_value_2) {
         fra.me.REG[4] = BOX_NativeString("==");
@@ -9582,12 +9596,12 @@ val_t syntax___typing___AAbsSendExpr___get_property(val_t p0, val_t p1, val_t p2
       REGB1 = REGB2;
     }
     if (UNTAG_Bool(REGB1)) {
-      /* syntax/typing.nit:1550 */
+      /* syntax/typing.nit:1556 */
       fra.me.REG[4] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_object(fra.me.REG[1])(fra.me.REG[1]);
       fra.me.REG[4] = CALL_metamodel___static_type___MMType___as_nullable(fra.me.REG[4])(fra.me.REG[4]);
       fra.me.REG[2] = fra.me.REG[4];
     } else {
-      /* syntax/typing.nit:1552 */
+      /* syntax/typing.nit:1558 */
       REGB1 = TAG_Int(3);
       fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
       if (!once_value_5) {
@@ -9612,22 +9626,22 @@ val_t syntax___typing___AAbsSendExpr___get_property(val_t p0, val_t p1, val_t p2
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
       fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[4]);
-      /* syntax/typing.nit:1553 */
+      /* syntax/typing.nit:1559 */
       fra.me.REG[4] = NIT_NULL;
       goto label7;
     }
   }
-  /* syntax/typing.nit:1556 */
+  /* syntax/typing.nit:1562 */
   fra.me.REG[5] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1557 */
+  /* syntax/typing.nit:1563 */
   fra.me.REG[6] = NIT_NULL;
-  /* syntax/typing.nit:1558 */
+  /* syntax/typing.nit:1564 */
   REGB1 = CALL_metamodel___abstractmetamodel___MMLocalClass___has_global_property_by_name(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   if (UNTAG_Bool(REGB1)) {
     fra.me.REG[7] = CALL_metamodel___abstractmetamodel___MMLocalClass___select_method(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
     fra.me.REG[6] = fra.me.REG[7];
   }
-  /* syntax/typing.nit:1559 */
+  /* syntax/typing.nit:1565 */
   REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
@@ -9641,15 +9655,7 @@ val_t syntax___typing___AAbsSendExpr___get_property(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB1)) {
-    fra.me.REG[7] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
-    fra.me.REG[7] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[7])(fra.me.REG[7]);
-    REGB1 = CALL_metamodel___abstractmetamodel___MMGlobalProperty___is_init(fra.me.REG[7])(fra.me.REG[7]);
-  } else {
-    REGB2 = TAG_Bool(0);
-    REGB1 = REGB2;
-  }
-  if (UNTAG_Bool(REGB1)) {
-    /* syntax/typing.nit:1560 */
+    /* syntax/typing.nit:1566 */
     fra.me.REG[7] = CALL_metamodel___abstractmetamodel___MMLocalClass___super_methods_named(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
     /* ../lib/standard/collection/array.nit:24 */
     REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[7])!=NIT_NULL);
@@ -9658,7 +9664,7 @@ val_t syntax___typing___AAbsSendExpr___get_property(val_t p0, val_t p1, val_t p2
       nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
     }
     REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[7]);
-    /* syntax/typing.nit:1561 */
+    /* syntax/typing.nit:1567 */
     REGB2 = TAG_Int(1);
     REGB3 = TAG_Bool(VAL_ISA(REGB2, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
     if (UNTAG_Bool(REGB3)) {
@@ -9667,9 +9673,9 @@ val_t syntax___typing___AAbsSendExpr___get_property(val_t p0, val_t p1, val_t p2
     }
     /* ../lib/standard/kernel.nit:237 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB1)>UNTAG_Int(REGB2));
-    /* syntax/typing.nit:1561 */
+    /* syntax/typing.nit:1567 */
     if (UNTAG_Bool(REGB2)) {
-      /* syntax/typing.nit:1562 */
+      /* syntax/typing.nit:1568 */
       REGB2 = TAG_Int(5);
       fra.me.REG[8] = NEW_Array_standard___collection___array___Array___with_capacity(REGB2);
       if (!once_value_8) {
@@ -9713,7 +9719,7 @@ val_t syntax___typing___AAbsSendExpr___get_property(val_t p0, val_t p1, val_t p2
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
       fra.me.REG[8] = CALL_standard___string___Object___to_s(fra.me.REG[8])(fra.me.REG[8]);
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[8]);
-      /* syntax/typing.nit:1563 */
+      /* syntax/typing.nit:1569 */
       fra.me.REG[4] = NIT_NULL;
       goto label7;
     } else {
@@ -9724,37 +9730,37 @@ val_t syntax___typing___AAbsSendExpr___get_property(val_t p0, val_t p1, val_t p2
         nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
       }
       REGB2 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[7]);
-      /* syntax/typing.nit:1564 */
+      /* syntax/typing.nit:1570 */
       REGB1 = TAG_Int(1);
       REGB3 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB1));
       if (UNTAG_Bool(REGB3)) {
       } else {
         /* ../lib/standard/kernel.nit:230 */
         REGB1 = TAG_Bool((REGB2)==(REGB1));
-        /* syntax/typing.nit:1564 */
+        /* syntax/typing.nit:1570 */
         REGB3 = REGB1;
       }
       if (UNTAG_Bool(REGB3)) {
-        /* syntax/typing.nit:1565 */
+        /* syntax/typing.nit:1571 */
         fra.me.REG[7] = CALL_standard___collection___abstract_collection___Collection___first(fra.me.REG[7])(fra.me.REG[7]);
         REGB3 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
-          nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1565);
+          nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1571);
         }
         fra.me.REG[7] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[7])(fra.me.REG[7]);
         fra.me.REG[7] = CALL_metamodel___abstractmetamodel___MMLocalClass_____bra(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
-        /* syntax/typing.nit:1566 */
+        /* syntax/typing.nit:1572 */
         REGB3 = TAG_Bool(VAL_ISA(fra.me.REG[7], COLOR_metamodel___abstractmetamodel___MMMethod, ID_metamodel___abstractmetamodel___MMMethod)) /*cast MMMethod*/;
         if (UNTAG_Bool(REGB3)) {
         } else {
-          nit_abort("Assert failed", NULL, LOCATE_syntax___typing, 1566);
+          nit_abort("Assert failed", NULL, LOCATE_syntax___typing, 1572);
         }
-        /* syntax/typing.nit:1567 */
+        /* syntax/typing.nit:1573 */
         fra.me.REG[6] = fra.me.REG[7];
       }
     }
   }
-  /* syntax/typing.nit:1571 */
+  /* syntax/typing.nit:1577 */
   REGB3 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB3)) {
   } else {
@@ -9768,9 +9774,9 @@ val_t syntax___typing___AAbsSendExpr___get_property(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB3)) {
-    /* syntax/typing.nit:1572 */
+    /* syntax/typing.nit:1578 */
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:1573 */
+      /* syntax/typing.nit:1579 */
       REGB0 = TAG_Int(5);
       fra.me.REG[7] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
       if (!once_value_12) {
@@ -9807,7 +9813,7 @@ val_t syntax___typing___AAbsSendExpr___get_property(val_t p0, val_t p1, val_t p2
       fra.me.REG[7] = CALL_standard___string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[7]);
     } else {
-      /* syntax/typing.nit:1575 */
+      /* syntax/typing.nit:1581 */
       REGB0 = TAG_Int(5);
       fra.me.REG[7] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
       if (!once_value_15) {
@@ -9844,11 +9850,11 @@ val_t syntax___typing___AAbsSendExpr___get_property(val_t p0, val_t p1, val_t p2
       fra.me.REG[7] = CALL_standard___string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[7]);
     }
-    /* syntax/typing.nit:1577 */
+    /* syntax/typing.nit:1583 */
     fra.me.REG[4] = NIT_NULL;
     goto label7;
   }
-  /* syntax/typing.nit:1579 */
+  /* syntax/typing.nit:1585 */
   fra.me.REG[4] = fra.me.REG[6];
   goto label7;
   label7: while(0);
@@ -9862,7 +9868,7 @@ val_t syntax___typing___AAbsSendExpr___get_signature(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1582;
+  fra.me.line = 1588;
   fra.me.meth = LOCATE_syntax___typing___AAbsSendExpr___get_signature;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -9878,19 +9884,19 @@ val_t syntax___typing___AAbsSendExpr___get_signature(val_t p0, val_t p1, val_t p
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   REGB0 = p4;
-  /* syntax/typing.nit:1585 */
+  /* syntax/typing.nit:1591 */
   fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[5] = CALL_syntax___syntax_base___AbsSyntaxVisitor___mmmodule(fra.me.REG[1])(fra.me.REG[1]);
   CALL_syntax___syntax_base___MMGlobalProperty___check_visibility(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1], fra.me.REG[0], fra.me.REG[5], REGB0);
-  /* syntax/typing.nit:1586 */
+  /* syntax/typing.nit:1592 */
   fra.me.REG[2] = CALL_metamodel___static_type___MMLocalProperty___signature_for(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-  /* syntax/typing.nit:1587 */
+  /* syntax/typing.nit:1593 */
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     fra.me.REG[3] = CALL_metamodel___static_type___MMSignature___not_for_self(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[2] = fra.me.REG[3];
   }
-  /* syntax/typing.nit:1588 */
+  /* syntax/typing.nit:1594 */
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -9903,7 +9909,7 @@ val_t syntax___typing___AAbsSendExpr___prop(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1591;
+  fra.me.line = 1597;
   fra.me.meth = LOCATE_syntax___typing___AAbsSendExpr___prop;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -9911,14 +9917,14 @@ val_t syntax___typing___AAbsSendExpr___prop(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1591 */
+  /* syntax/typing.nit:1597 */
   fra.me.REG[1] = fra.me.REG[0];
-  /* syntax/typing.nit:1592 */
+  /* syntax/typing.nit:1598 */
   fra.me.REG[1] = ATTR_syntax___typing___AAbsSendExpr____prop(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1592);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1598);
   }
   goto label1;
   label1: while(0);
@@ -9931,14 +9937,14 @@ val_t syntax___typing___AAbsSendExpr___return_type(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1595;
+  fra.me.line = 1601;
   fra.me.meth = LOCATE_syntax___typing___AAbsSendExpr___return_type;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1595 */
+  /* syntax/typing.nit:1601 */
   fra.me.REG[0] = ATTR_syntax___typing___AAbsSendExpr____return_type(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -9960,7 +9966,7 @@ void syntax___typing___ASuperInitCall___register_super_init_call(val_t p0, val_t
         static val_t once_value_8; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1602;
+  fra.me.line = 1608;
   fra.me.meth = LOCATE_syntax___typing___ASuperInitCall___register_super_init_call;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -9977,9 +9983,9 @@ void syntax___typing___ASuperInitCall___register_super_init_call(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* syntax/typing.nit:1602 */
+  /* syntax/typing.nit:1608 */
   fra.me.REG[3] = fra.me.REG[0];
-  /* syntax/typing.nit:1604 */
+  /* syntax/typing.nit:1610 */
   fra.me.REG[4] = CALL_parser___parser_prod___ANode___parent(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[5] = CALL_syntax___typing___TypingVisitor___top_block(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool(IS_EQUAL_NN(fra.me.REG[4],fra.me.REG[5]));
@@ -10009,7 +10015,7 @@ void syntax___typing___ASuperInitCall___register_super_init_call(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1605 */
+    /* syntax/typing.nit:1611 */
     REGB0 = TAG_Int(3);
     fra.me.REG[5] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
     if (!once_value_1) {
@@ -10035,42 +10041,42 @@ void syntax___typing___ASuperInitCall___register_super_init_call(val_t p0, val_t
     fra.me.REG[5] = CALL_standard___string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3], fra.me.REG[5]);
   }
-  /* syntax/typing.nit:1607 */
+  /* syntax/typing.nit:1613 */
   fra.me.REG[5] = CALL_syntax___syntax_base___AbsSyntaxVisitor___mmmodule(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMGlobalProperty___intro(fra.me.REG[4])(fra.me.REG[4]);
   fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMLocalProperty___local_class(fra.me.REG[4])(fra.me.REG[4]);
   fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMLocalClass___global(fra.me.REG[4])(fra.me.REG[4]);
   fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMModule_____bra(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
-  /* syntax/typing.nit:1608 */
+  /* syntax/typing.nit:1614 */
   fra.me.REG[5] = NIT_NULL;
-  /* syntax/typing.nit:1609 */
+  /* syntax/typing.nit:1615 */
   fra.me.REG[6] = CALL_syntax___typing___TypingVisitor___explicit_super_init_calls(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1609);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1615);
   }
-  /* syntax/typing.nit:1610 */
+  /* syntax/typing.nit:1616 */
   REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[6])(fra.me.REG[6]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1611 */
+    /* syntax/typing.nit:1617 */
     fra.me.REG[0] = CALL_standard___collection___abstract_collection___SequenceRead___last(fra.me.REG[6])(fra.me.REG[6]);
     REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1611);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1617);
     }
     fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMGlobalProperty___intro(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMLocalProperty___local_class(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[5] = fra.me.REG[0];
   }
-  /* syntax/typing.nit:1613 */
+  /* syntax/typing.nit:1619 */
   fra.me.REG[0] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_class(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMLocalClass___cshe(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_metamodel___partial_order___PartialOrderElement___reverse_linear_extension(fra.me.REG[0])(fra.me.REG[0]);
-  /* syntax/typing.nit:1614 */
+  /* syntax/typing.nit:1620 */
   fra.me.REG[7] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_class(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[4],fra.me.REG[7]));
   if (UNTAG_Bool(REGB0)) {
@@ -10079,15 +10085,15 @@ void syntax___typing___ASuperInitCall___register_super_init_call(val_t p0, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1615 */
+    /* syntax/typing.nit:1621 */
     REGB0 = TAG_Bool(1);
     CALL_syntax___typing___TypingVisitor___explicit_other_init_call__eq(fra.me.REG[1])(fra.me.REG[1], REGB0);
   } else {
-    /* syntax/typing.nit:1616 */
+    /* syntax/typing.nit:1622 */
     REGB0 = CALL_standard___collection___abstract_collection___Collection___has(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4]);
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:1617 */
+      /* syntax/typing.nit:1623 */
       REGB0 = TAG_Int(5);
       fra.me.REG[7] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
       if (!once_value_3) {
@@ -10132,7 +10138,7 @@ void syntax___typing___ASuperInitCall___register_super_init_call(val_t p0, val_t
       fra.me.REG[7] = CALL_standard___string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3], fra.me.REG[7]);
     } else {
-      /* syntax/typing.nit:1618 */
+      /* syntax/typing.nit:1624 */
       REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[4],fra.me.REG[5]));
       if (UNTAG_Bool(REGB0)) {
       } else {
@@ -10140,7 +10146,7 @@ void syntax___typing___ASuperInitCall___register_super_init_call(val_t p0, val_t
         REGB0 = REGB1;
       }
       if (UNTAG_Bool(REGB0)) {
-        /* syntax/typing.nit:1619 */
+        /* syntax/typing.nit:1625 */
         REGB0 = TAG_Int(3);
         fra.me.REG[7] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
         if (!once_value_7) {
@@ -10200,9 +10206,9 @@ void syntax___typing___ASuperInitCall___register_super_init_call(val_t p0, val_t
             if (UNTAG_Bool(REGB1)) {
               nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
             }
-            /* ../lib/standard/collection/array.nit:718 */
+            /* ../lib/standard/collection/array.nit:724 */
             fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[7])->val[UNTAG_Int(REGB0)];
-            /* syntax/typing.nit:1622 */
+            /* syntax/typing.nit:1628 */
             REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[3],fra.me.REG[5]));
             if (UNTAG_Bool(REGB1)) {
             } else {
@@ -10210,10 +10216,10 @@ void syntax___typing___ASuperInitCall___register_super_init_call(val_t p0, val_t
               REGB1 = REGB2;
             }
             if (UNTAG_Bool(REGB1)) {
-              /* syntax/typing.nit:1623 */
+              /* syntax/typing.nit:1629 */
               fra.me.REG[5] = NIT_NULL;
             } else {
-              /* syntax/typing.nit:1624 */
+              /* syntax/typing.nit:1630 */
               REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[4]));
               if (UNTAG_Bool(REGB1)) {
               } else {
@@ -10221,9 +10227,9 @@ void syntax___typing___ASuperInitCall___register_super_init_call(val_t p0, val_t
                REGB1 = REGB2;
               }
               if (UNTAG_Bool(REGB1)) {
-               /* syntax/typing.nit:1625 */
+               /* syntax/typing.nit:1631 */
                CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
-               /* syntax/typing.nit:1626 */
+               /* syntax/typing.nit:1632 */
                goto label9;
               }
             }
@@ -10252,14 +10258,14 @@ val_t syntax___typing___ANewExpr___compute_raw_arguments(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1635;
+  fra.me.line = 1641;
   fra.me.meth = LOCATE_syntax___typing___ANewExpr___compute_raw_arguments;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1635 */
+  /* syntax/typing.nit:1641 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ANewExpr___n_args(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AExprs___to_a(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -10281,9 +10287,12 @@ void syntax___typing___ANewExpr___after_typing(val_t p0, val_t p1){
       static val_t once_value_7; /* Once value */
     static val_t once_value_8; /* Once value */
     static val_t once_value_9; /* Once value */
+    static val_t once_value_10; /* Once value */
+    static val_t once_value_11; /* Once value */
+    static val_t once_value_12; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1636;
+  fra.me.line = 1642;
   fra.me.meth = LOCATE_syntax___typing___ANewExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -10295,22 +10304,22 @@ void syntax___typing___ANewExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1638 */
+  /* syntax/typing.nit:1644 */
   fra.me.REG[2] = CALL_parser___parser_nodes___ANewExpr___n_type(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___syntax_base___AType___is_typed(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:1639 */
+  /* syntax/typing.nit:1645 */
   fra.me.REG[2] = CALL_parser___parser_nodes___ANewExpr___n_type(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_syntax___syntax_base___AType___stype(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1640 */
+  /* syntax/typing.nit:1646 */
   fra.me.REG[3] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[3] = CALL_metamodel___abstractmetamodel___MMLocalClass___global(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = CALL_metamodel___abstractmetamodel___MMGlobalClass___is_abstract(fra.me.REG[3])(fra.me.REG[3]);
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1641 */
+    /* syntax/typing.nit:1647 */
     REGB0 = TAG_Int(3);
     fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
     if (!once_value_2) {
@@ -10336,13 +10345,13 @@ void syntax___typing___ANewExpr___after_typing(val_t p0, val_t p1){
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
     fra.me.REG[3] = CALL_standard___string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[3]);
-    /* syntax/typing.nit:1642 */
+    /* syntax/typing.nit:1648 */
     goto label1;
   }
-  /* syntax/typing.nit:1644 */
+  /* syntax/typing.nit:1650 */
   REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[2])(fra.me.REG[2]);
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1645 */
+    /* syntax/typing.nit:1651 */
     REGB0 = TAG_Int(3);
     fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
     if (!once_value_4) {
@@ -10368,7 +10377,7 @@ void syntax___typing___ANewExpr___after_typing(val_t p0, val_t p1){
     fra.me.REG[3] = CALL_standard___string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[3]);
   }
-  /* syntax/typing.nit:1648 */
+  /* syntax/typing.nit:1654 */
   fra.me.REG[3] = CALL_parser___parser_nodes___ANewExpr___n_id(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -10383,7 +10392,7 @@ void syntax___typing___ANewExpr___after_typing(val_t p0, val_t p1){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1649 */
+    /* syntax/typing.nit:1655 */
     if (!once_value_6) {
       if (!once_value_7) {
         fra.me.REG[3] = BOX_NativeString("init");
@@ -10399,21 +10408,21 @@ void syntax___typing___ANewExpr___after_typing(val_t p0, val_t p1){
     } else fra.me.REG[3] = once_value_6;
     fra.me.REG[3] = fra.me.REG[3];
   } else {
-    /* syntax/typing.nit:1651 */
+    /* syntax/typing.nit:1657 */
     fra.me.REG[4] = CALL_parser___parser_nodes___ANewExpr___n_id(fra.me.REG[0])(fra.me.REG[0]);
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1651);
+      nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1657);
     }
     fra.me.REG[4] = CALL_syntax___syntax_base___Token___to_symbol(fra.me.REG[4])(fra.me.REG[4]);
     fra.me.REG[3] = fra.me.REG[4];
   }
-  /* syntax/typing.nit:1654 */
+  /* syntax/typing.nit:1660 */
   REGB0 = TAG_Bool(0);
   REGB1 = TAG_Bool(0);
   fra.me.REG[4] = CALL_syntax___syntax_base___AAbsAbsSendExpr___raw_arguments(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___AAbsSendExpr___do_typing(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], REGB0, REGB1, fra.me.REG[3], fra.me.REG[4], NIT_NULL);
-  /* syntax/typing.nit:1655 */
+  /* syntax/typing.nit:1661 */
   fra.me.REG[4] = ATTR_syntax___typing___AAbsSendExpr____prop(fra.me.REG[0]);
   REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
@@ -10430,13 +10439,13 @@ void syntax___typing___ANewExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB1)) {
     goto label1;
   }
-  /* syntax/typing.nit:1657 */
+  /* syntax/typing.nit:1663 */
   fra.me.REG[4] = CALL_syntax___syntax_base___AAbsSendExpr___prop(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[4])(fra.me.REG[4]);
   REGB1 = CALL_metamodel___abstractmetamodel___MMGlobalProperty___is_init(fra.me.REG[4])(fra.me.REG[4]);
   REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
   if (UNTAG_Bool(REGB1)) {
-    /* syntax/typing.nit:1658 */
+    /* syntax/typing.nit:1664 */
     REGB1 = TAG_Int(3);
     fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
     if (!once_value_8) {
@@ -10462,12 +10471,60 @@ void syntax___typing___ANewExpr___after_typing(val_t p0, val_t p1){
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
     fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[4]);
-    /* syntax/typing.nit:1659 */
+    /* syntax/typing.nit:1665 */
     goto label1;
   }
-  /* syntax/typing.nit:1661 */
+  /* syntax/typing.nit:1667 */
+  fra.me.REG[4] = CALL_syntax___syntax_base___AAbsSendExpr___prop(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[4])(fra.me.REG[4]);
+  fra.me.REG[3] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[2])(fra.me.REG[2]);
+  REGB1 = CALL_metamodel___abstractmetamodel___MMGlobalProperty___is_init_for(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+  if (UNTAG_Bool(REGB1)) {
+    /* syntax/typing.nit:1668 */
+    REGB1 = TAG_Int(5);
+    fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
+    if (!once_value_10) {
+      fra.me.REG[4] = BOX_NativeString("Error: ");
+      REGB1 = TAG_Int(7);
+      fra.me.REG[4] = NEW_String_standard___string___String___with_native(fra.me.REG[4], REGB1);
+      once_value_10 = fra.me.REG[4];
+      register_static_object(&once_value_10);
+    } else fra.me.REG[4] = once_value_10;
+    fra.me.REG[4] = fra.me.REG[4];
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+    fra.me.REG[4] = CALL_syntax___syntax_base___AAbsSendExpr___prop(fra.me.REG[0])(fra.me.REG[0]);
+    fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+    if (!once_value_11) {
+      fra.me.REG[4] = BOX_NativeString(" is not a constructor in ");
+      REGB1 = TAG_Int(25);
+      fra.me.REG[4] = NEW_String_standard___string___String___with_native(fra.me.REG[4], REGB1);
+      once_value_11 = fra.me.REG[4];
+      register_static_object(&once_value_11);
+    } else fra.me.REG[4] = once_value_11;
+    fra.me.REG[4] = fra.me.REG[4];
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+    fra.me.REG[4] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[2])(fra.me.REG[2]);
+    fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+    if (!once_value_12) {
+      fra.me.REG[4] = BOX_NativeString(".");
+      REGB1 = TAG_Int(1);
+      fra.me.REG[4] = NEW_String_standard___string___String___with_native(fra.me.REG[4], REGB1);
+      once_value_12 = fra.me.REG[4];
+      register_static_object(&once_value_12);
+    } else fra.me.REG[4] = once_value_12;
+    fra.me.REG[4] = fra.me.REG[4];
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+    fra.me.REG[3] = CALL_standard___string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
+    CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[3]);
+    /* syntax/typing.nit:1669 */
+    goto label1;
+  }
+  /* syntax/typing.nit:1671 */
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[2];
-  /* syntax/typing.nit:1662 */
+  /* syntax/typing.nit:1672 */
   REGB1 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB1;
   label1: while(0);
@@ -10480,13 +10537,13 @@ val_t syntax___typing___ASendExpr___name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1668;
+  fra.me.line = 1678;
   fra.me.meth = LOCATE_syntax___typing___ASendExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  /* syntax/typing.nit:1668 */
-  nit_abort("Deferred method called", NULL, LOCATE_syntax___typing, 1668);
+  /* syntax/typing.nit:1678 */
+  nit_abort("Deferred method called", NULL, LOCATE_syntax___typing, 1678);
   stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
@@ -10496,14 +10553,14 @@ val_t syntax___typing___ASendExpr___closure_defs(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1671;
+  fra.me.line = 1681;
   fra.me.meth = LOCATE_syntax___typing___ASendExpr___closure_defs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1672 */
+  /* syntax/typing.nit:1682 */
   fra.me.REG[0] = NIT_NULL;
   goto label1;
   label1: while(0);
@@ -10516,7 +10573,7 @@ void syntax___typing___ASendExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1674;
+  fra.me.line = 1684;
   fra.me.meth = LOCATE_syntax___typing___ASendExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10525,7 +10582,7 @@ void syntax___typing___ASendExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1676 */
+  /* syntax/typing.nit:1686 */
   CALL_syntax___typing___ASendExpr___do_all_typing(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   stack_frame_head = fra.me.prev;
   return;
@@ -10542,7 +10599,7 @@ void syntax___typing___ASendExpr___do_all_typing(val_t p0, val_t p1){
         static val_t once_value_5; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1679;
+  fra.me.line = 1689;
   fra.me.meth = LOCATE_syntax___typing___ASendExpr___do_all_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -10556,16 +10613,16 @@ void syntax___typing___ASendExpr___do_all_typing(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1679 */
+  /* syntax/typing.nit:1689 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* syntax/typing.nit:1681 */
+  /* syntax/typing.nit:1691 */
   fra.me.REG[3] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = CALL_syntax___syntax_base___AbsSyntaxVisitor___check_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:1682 */
+  /* syntax/typing.nit:1692 */
   fra.me.REG[3] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[4] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
@@ -10576,7 +10633,7 @@ void syntax___typing___ASendExpr___do_all_typing(val_t p0, val_t p1){
   fra.me.REG[5] = CALL_syntax___syntax_base___AAbsAbsSendExpr___raw_arguments(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[6] = CALL_syntax___syntax_base___ASendExpr___closure_defs(fra.me.REG[2])(fra.me.REG[2]);
   CALL_syntax___typing___AAbsSendExpr___do_typing(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1], fra.me.REG[3], REGB0, REGB1, fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* syntax/typing.nit:1683 */
+  /* syntax/typing.nit:1693 */
   fra.me.REG[6] = ATTR_syntax___typing___AAbsSendExpr____prop(fra.me.REG[2]);
   REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
@@ -10593,24 +10650,24 @@ void syntax___typing___ASendExpr___do_all_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB1)) {
     goto label1;
   }
-  /* syntax/typing.nit:1684 */
+  /* syntax/typing.nit:1694 */
   fra.me.REG[6] = ATTR_syntax___typing___AAbsSendExpr____prop(fra.me.REG[2]);
   REGB1 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1684);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1694);
   }
-  /* syntax/typing.nit:1686 */
+  /* syntax/typing.nit:1696 */
   fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[6])(fra.me.REG[6]);
   REGB1 = CALL_metamodel___abstractmetamodel___MMGlobalProperty___is_init(fra.me.REG[0])(fra.me.REG[0]);
   if (UNTAG_Bool(REGB1)) {
-    /* syntax/typing.nit:1687 */
+    /* syntax/typing.nit:1697 */
     fra.me.REG[0] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[0] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[0])(fra.me.REG[0]);
     REGB1 = CALL_metamodel___abstractmetamodel___MMGlobalProperty___is_init(fra.me.REG[0])(fra.me.REG[0]);
     REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
     if (UNTAG_Bool(REGB1)) {
-      /* syntax/typing.nit:1688 */
+      /* syntax/typing.nit:1698 */
       REGB1 = TAG_Int(3);
       fra.me.REG[0] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
       if (!once_value_2) {
@@ -10636,12 +10693,12 @@ void syntax___typing___ASendExpr___do_all_typing(val_t p0, val_t p1){
       fra.me.REG[0] = CALL_standard___string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[0]);
     } else {
-      /* syntax/typing.nit:1689 */
+      /* syntax/typing.nit:1699 */
       fra.me.REG[0] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
       REGB1 = CALL_syntax___typing___AExpr___is_self(fra.me.REG[0])(fra.me.REG[0]);
       REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
       if (UNTAG_Bool(REGB1)) {
-        /* syntax/typing.nit:1690 */
+        /* syntax/typing.nit:1700 */
         REGB1 = TAG_Int(3);
         fra.me.REG[0] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
         if (!once_value_4) {
@@ -10667,15 +10724,15 @@ void syntax___typing___ASendExpr___do_all_typing(val_t p0, val_t p1){
         fra.me.REG[0] = CALL_standard___string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
         CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[0]);
       } else {
-        /* syntax/typing.nit:1692 */
+        /* syntax/typing.nit:1702 */
         CALL_syntax___typing___ASuperInitCall___register_super_init_call(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1], fra.me.REG[6]);
       }
     }
   }
-  /* syntax/typing.nit:1696 */
+  /* syntax/typing.nit:1706 */
   fra.me.REG[6] = CALL_syntax___syntax_base___AAbsSendExpr___return_type(fra.me.REG[2])(fra.me.REG[2]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[2]) = fra.me.REG[6];
-  /* syntax/typing.nit:1697 */
+  /* syntax/typing.nit:1707 */
   REGB1 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[2]) = REGB1;
   label1: while(0);
@@ -10689,7 +10746,7 @@ val_t syntax___typing___ASendReassignExpr___read_prop(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1702;
+  fra.me.line = 1712;
   fra.me.meth = LOCATE_syntax___typing___ASendReassignExpr___read_prop;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -10697,13 +10754,13 @@ val_t syntax___typing___ASendReassignExpr___read_prop(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1702 */
+  /* syntax/typing.nit:1712 */
   fra.me.REG[1] = fra.me.REG[0];
   fra.me.REG[1] = ATTR_syntax___typing___ASendReassignExpr____read_prop(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1702);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1712);
   }
   goto label1;
   label1: while(0);
@@ -10729,7 +10786,7 @@ void syntax___typing___ASendReassignExpr___do_all_typing(val_t p0, val_t p1){
         static val_t once_value_11; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1704;
+  fra.me.line = 1714;
   fra.me.meth = LOCATE_syntax___typing___ASendReassignExpr___do_all_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -10743,18 +10800,18 @@ void syntax___typing___ASendReassignExpr___do_all_typing(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1704 */
+  /* syntax/typing.nit:1714 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* syntax/typing.nit:1706 */
+  /* syntax/typing.nit:1716 */
   fra.me.REG[3] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = CALL_syntax___syntax_base___AbsSyntaxVisitor___check_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:1707 */
+  /* syntax/typing.nit:1717 */
   fra.me.REG[3] = CALL_syntax___syntax_base___AAbsAbsSendExpr___raw_arguments(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1708 */
+  /* syntax/typing.nit:1718 */
   fra.me.REG[4] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[4] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[4])(fra.me.REG[4]);
   fra.me.REG[5] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
@@ -10763,9 +10820,9 @@ void syntax___typing___ASendReassignExpr___do_all_typing(val_t p0, val_t p1){
   REGB1 = CALL_syntax___typing___AExpr___is_self(fra.me.REG[5])(fra.me.REG[5]);
   fra.me.REG[5] = CALL_syntax___typing___ASendExpr___name(fra.me.REG[2])(fra.me.REG[2]);
   CALL_syntax___typing___AAbsSendExpr___do_typing(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1], fra.me.REG[4], REGB0, REGB1, fra.me.REG[5], fra.me.REG[3], NIT_NULL);
-  /* syntax/typing.nit:1709 */
+  /* syntax/typing.nit:1719 */
   fra.me.REG[5] = ATTR_syntax___typing___AAbsSendExpr____prop(fra.me.REG[2]);
-  /* syntax/typing.nit:1710 */
+  /* syntax/typing.nit:1720 */
   REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
@@ -10781,21 +10838,21 @@ void syntax___typing___ASendReassignExpr___do_all_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB1)) {
     goto label1;
   }
-  /* syntax/typing.nit:1711 */
+  /* syntax/typing.nit:1721 */
   REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1711);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1721);
   }
   fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[5])(fra.me.REG[5]);
   REGB1 = CALL_metamodel___abstractmetamodel___MMGlobalProperty___is_init(fra.me.REG[4])(fra.me.REG[4]);
   if (UNTAG_Bool(REGB1)) {
-    /* syntax/typing.nit:1712 */
+    /* syntax/typing.nit:1722 */
     fra.me.REG[4] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[4] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[4])(fra.me.REG[4]);
     REGB1 = CALL_metamodel___abstractmetamodel___MMGlobalProperty___is_init(fra.me.REG[4])(fra.me.REG[4]);
     REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
     if (UNTAG_Bool(REGB1)) {
-      /* syntax/typing.nit:1713 */
+      /* syntax/typing.nit:1723 */
       REGB1 = TAG_Int(3);
       fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
       if (!once_value_2) {
@@ -10821,12 +10878,12 @@ void syntax___typing___ASendReassignExpr___do_all_typing(val_t p0, val_t p1){
       fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[4]);
     } else {
-      /* syntax/typing.nit:1714 */
+      /* syntax/typing.nit:1724 */
       fra.me.REG[4] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
       REGB1 = CALL_syntax___typing___AExpr___is_self(fra.me.REG[4])(fra.me.REG[4]);
       REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
       if (UNTAG_Bool(REGB1)) {
-        /* syntax/typing.nit:1715 */
+        /* syntax/typing.nit:1725 */
         REGB1 = TAG_Int(3);
         fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB1);
         if (!once_value_4) {
@@ -10854,21 +10911,21 @@ void syntax___typing___ASendReassignExpr___do_all_typing(val_t p0, val_t p1){
       }
     }
   }
-  /* syntax/typing.nit:1718 */
+  /* syntax/typing.nit:1728 */
   fra.me.REG[4] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[4] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[4])(fra.me.REG[4]);
   REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1718);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1728);
   }
   fra.me.REG[4] = CALL_metamodel___static_type___MMLocalProperty___signature_for(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[4] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[4])(fra.me.REG[4]);
   REGB1 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_metamodel___static_type___MMType, ID_metamodel___static_type___MMType)) /*cast MMType*/;
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1718);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1728);
   }
-  /* syntax/typing.nit:1719 */
+  /* syntax/typing.nit:1729 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   REGB1 = CALL_syntax___typing___AExpr___is_self(fra.me.REG[0])(fra.me.REG[0]);
   REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
@@ -10876,9 +10933,9 @@ void syntax___typing___ASendReassignExpr___do_all_typing(val_t p0, val_t p1){
     fra.me.REG[0] = CALL_metamodel___static_type___MMType___not_for_self(fra.me.REG[4])(fra.me.REG[4]);
     fra.me.REG[4] = fra.me.REG[0];
   }
-  /* syntax/typing.nit:1721 */
+  /* syntax/typing.nit:1731 */
   fra.me.REG[4] = CALL_syntax___typing___AReassignFormExpr___do_rvalue_typing(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/typing.nit:1722 */
+  /* syntax/typing.nit:1732 */
   REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
@@ -10894,19 +10951,19 @@ void syntax___typing___ASendReassignExpr___do_all_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB1)) {
     goto label1;
   }
-  /* syntax/typing.nit:1723 */
+  /* syntax/typing.nit:1733 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AReassignFormExpr___n_value(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___syntax_base___AbsSyntaxVisitor___check_conform(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[4], fra.me.REG[0]);
-  /* syntax/typing.nit:1725 */
+  /* syntax/typing.nit:1735 */
   ATTR_syntax___typing___ASendReassignExpr____read_prop(fra.me.REG[2]) = fra.me.REG[5];
-  /* syntax/typing.nit:1726 */
+  /* syntax/typing.nit:1736 */
   fra.me.REG[0] = CALL_standard___collection___array___Collection___to_a(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[3] = fra.me.REG[0];
-  /* syntax/typing.nit:1727 */
+  /* syntax/typing.nit:1737 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AReassignFormExpr___n_value(fra.me.REG[2])(fra.me.REG[2]);
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* syntax/typing.nit:1729 */
+  /* syntax/typing.nit:1739 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
@@ -10939,21 +10996,21 @@ void syntax___typing___ASendReassignExpr___do_all_typing(val_t p0, val_t p1){
   fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
   fra.me.REG[4] = CALL_symbol___String___to_symbol(fra.me.REG[4])(fra.me.REG[4]);
   CALL_syntax___typing___AAbsSendExpr___do_typing(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1], fra.me.REG[0], REGB1, REGB0, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* syntax/typing.nit:1730 */
+  /* syntax/typing.nit:1740 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1730);
+    nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 1740);
   }
   fra.me.REG[3] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[5])(fra.me.REG[5]);
   REGB0 = CALL_metamodel___abstractmetamodel___MMGlobalProperty___is_init(fra.me.REG[3])(fra.me.REG[3]);
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1731 */
+    /* syntax/typing.nit:1741 */
     fra.me.REG[3] = CALL_syntax___syntax_base___AbsSyntaxVisitor___local_property(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[3] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[3])(fra.me.REG[3]);
     REGB0 = CALL_metamodel___abstractmetamodel___MMGlobalProperty___is_init(fra.me.REG[3])(fra.me.REG[3]);
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:1732 */
+      /* syntax/typing.nit:1742 */
       REGB0 = TAG_Int(3);
       fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
       if (!once_value_8) {
@@ -10979,12 +11036,12 @@ void syntax___typing___ASendReassignExpr___do_all_typing(val_t p0, val_t p1){
       fra.me.REG[3] = CALL_standard___string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[3]);
     } else {
-      /* syntax/typing.nit:1733 */
+      /* syntax/typing.nit:1743 */
       fra.me.REG[3] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
       REGB0 = CALL_syntax___typing___AExpr___is_self(fra.me.REG[3])(fra.me.REG[3]);
       REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
       if (UNTAG_Bool(REGB0)) {
-        /* syntax/typing.nit:1734 */
+        /* syntax/typing.nit:1744 */
         REGB0 = TAG_Int(3);
         fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
         if (!once_value_10) {
@@ -11012,7 +11069,7 @@ void syntax___typing___ASendReassignExpr___do_all_typing(val_t p0, val_t p1){
       }
     }
   }
-  /* syntax/typing.nit:1738 */
+  /* syntax/typing.nit:1748 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[2]) = REGB0;
   label1: while(0);
@@ -11026,7 +11083,7 @@ val_t syntax___typing___ABinopExpr___compute_raw_arguments(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1743;
+  fra.me.line = 1753;
   fra.me.meth = LOCATE_syntax___typing___ABinopExpr___compute_raw_arguments;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11034,7 +11091,7 @@ val_t syntax___typing___ABinopExpr___compute_raw_arguments(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1743 */
+  /* syntax/typing.nit:1753 */
   REGB0 = TAG_Int(1);
   fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
   fra.me.REG[0] = CALL_parser___parser_nodes___ABinopExpr___n_expr2(fra.me.REG[0])(fra.me.REG[0]);
@@ -11053,14 +11110,14 @@ val_t syntax___typing___AEqExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1746;
+  fra.me.line = 1756;
   fra.me.meth = LOCATE_syntax___typing___AEqExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1746 */
+  /* syntax/typing.nit:1756 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("==");
@@ -11090,7 +11147,7 @@ void syntax___typing___AEqExpr___after_typing(val_t p0, val_t p1){
       static val_t once_value_3; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1747;
+  fra.me.line = 1757;
   fra.me.meth = LOCATE_syntax___typing___AEqExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11101,12 +11158,12 @@ void syntax___typing___AEqExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1747 */
+  /* syntax/typing.nit:1757 */
   fra.me.REG[2] = fra.me.REG[0];
   fra.me.REG[3] = fra.me.REG[1];
-  /* syntax/typing.nit:1749 */
+  /* syntax/typing.nit:1759 */
   CALL_SUPER_syntax___typing___AEqExpr___after_typing(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* syntax/typing.nit:1750 */
+  /* syntax/typing.nit:1760 */
   fra.me.REG[1] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = CALL_syntax___syntax_base___AExpr___is_typed(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
@@ -11121,7 +11178,7 @@ void syntax___typing___AEqExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:1751 */
+  /* syntax/typing.nit:1761 */
   fra.me.REG[1] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[1] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
@@ -11137,26 +11194,26 @@ void syntax___typing___AEqExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     REGB0 = TAG_Bool(1);
   } else {
-    /* syntax/typing.nit:1752 */
+    /* syntax/typing.nit:1762 */
     fra.me.REG[1] = CALL_parser___parser_nodes___ABinopExpr___n_expr2(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[1] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[1])(fra.me.REG[1]);
     REGB1 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
-    /* syntax/typing.nit:1751 */
+    /* syntax/typing.nit:1761 */
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1752 */
+    /* syntax/typing.nit:1762 */
     fra.me.REG[1] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[1] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[1])(fra.me.REG[1]);
     REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[1])(fra.me.REG[1]);
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   } else {
-    /* syntax/typing.nit:1751 */
+    /* syntax/typing.nit:1761 */
     REGB1 = TAG_Bool(0);
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1753 */
+    /* syntax/typing.nit:1763 */
     if (!once_value_2) {
       fra.me.REG[1] = BOX_NativeString("Warning: comparaison between null and a non nullable value.");
       REGB0 = TAG_Int(59);
@@ -11167,17 +11224,17 @@ void syntax___typing___AEqExpr___after_typing(val_t p0, val_t p1){
     fra.me.REG[1] = fra.me.REG[1];
     CALL_syntax___syntax_base___AbsSyntaxVisitor___warning(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2], fra.me.REG[1]);
   }
-  /* syntax/typing.nit:1756 */
+  /* syntax/typing.nit:1766 */
   fra.me.REG[1] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[1] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1757 */
+    /* syntax/typing.nit:1767 */
     fra.me.REG[1] = CALL_parser___parser_nodes___ABinopExpr___n_expr2(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[1] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[1])(fra.me.REG[1]);
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:1758 */
+      /* syntax/typing.nit:1768 */
       if (!once_value_3) {
         fra.me.REG[1] = BOX_NativeString("Warning: comparaison between two null values.");
         REGB0 = TAG_Int(45);
@@ -11188,17 +11245,17 @@ void syntax___typing___AEqExpr___after_typing(val_t p0, val_t p1){
       fra.me.REG[1] = fra.me.REG[1];
       CALL_syntax___syntax_base___AbsSyntaxVisitor___warning(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2], fra.me.REG[1]);
     } else {
-      /* syntax/typing.nit:1760 */
+      /* syntax/typing.nit:1770 */
       fra.me.REG[1] = CALL_parser___parser_nodes___ABinopExpr___n_expr2(fra.me.REG[2])(fra.me.REG[2]);
       CALL_syntax___typing___AEqExpr___try_to_isa(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3], fra.me.REG[1]);
     }
   } else {
-    /* syntax/typing.nit:1762 */
+    /* syntax/typing.nit:1772 */
     fra.me.REG[1] = CALL_parser___parser_nodes___ABinopExpr___n_expr2(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[1] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[1])(fra.me.REG[1]);
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:1763 */
+      /* syntax/typing.nit:1773 */
       fra.me.REG[1] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
       CALL_syntax___typing___AEqExpr___try_to_isa(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3], fra.me.REG[1]);
     }
@@ -11215,7 +11272,7 @@ void syntax___typing___AEqExpr___try_to_isa(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_syntax___typing;
-  fra.me.line = 1767;
+  fra.me.line = 1777;
   fra.me.meth = LOCATE_syntax___typing___AEqExpr___try_to_isa;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -11228,9 +11285,9 @@ void syntax___typing___AEqExpr___try_to_isa(val_t p0, val_t p1, val_t p2){
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* syntax/typing.nit:1769 */
+  /* syntax/typing.nit:1779 */
   fra.me.REG[3] = CALL_syntax___typing___AExpr___its_variable(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1770 */
+  /* syntax/typing.nit:1780 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11252,13 +11309,13 @@ void syntax___typing___AEqExpr___try_to_isa(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1771 */
+    /* syntax/typing.nit:1781 */
     fra.me.REG[4] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[2] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[2] = CALL_metamodel___static_type___MMType___as_notnull(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[2] = CALL_syntax___flow___FlowContext___sub_with(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0], fra.me.REG[3], fra.me.REG[2]);
     ATTR_syntax___typing___AExpr____if_false_flow_ctx(fra.me.REG[0]) = fra.me.REG[2];
-    /* syntax/typing.nit:1772 */
+    /* syntax/typing.nit:1782 */
     fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[1] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_none(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[1] = CALL_syntax___flow___FlowContext___sub_with(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0], fra.me.REG[3], fra.me.REG[1]);
@@ -11276,14 +11333,14 @@ val_t syntax___typing___ANeExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1777;
+  fra.me.line = 1787;
   fra.me.meth = LOCATE_syntax___typing___ANeExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1777 */
+  /* syntax/typing.nit:1787 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("!=");
@@ -11313,7 +11370,7 @@ void syntax___typing___ANeExpr___after_typing(val_t p0, val_t p1){
       static val_t once_value_3; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1778;
+  fra.me.line = 1788;
   fra.me.meth = LOCATE_syntax___typing___ANeExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11324,12 +11381,12 @@ void syntax___typing___ANeExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1778 */
+  /* syntax/typing.nit:1788 */
   fra.me.REG[2] = fra.me.REG[0];
   fra.me.REG[3] = fra.me.REG[1];
-  /* syntax/typing.nit:1780 */
+  /* syntax/typing.nit:1790 */
   CALL_SUPER_syntax___typing___ANeExpr___after_typing(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* syntax/typing.nit:1781 */
+  /* syntax/typing.nit:1791 */
   fra.me.REG[1] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = CALL_syntax___syntax_base___AExpr___is_typed(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
@@ -11344,7 +11401,7 @@ void syntax___typing___ANeExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:1782 */
+  /* syntax/typing.nit:1792 */
   fra.me.REG[1] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[1] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
@@ -11360,26 +11417,26 @@ void syntax___typing___ANeExpr___after_typing(val_t p0, val_t p1){
   if (UNTAG_Bool(REGB0)) {
     REGB0 = TAG_Bool(1);
   } else {
-    /* syntax/typing.nit:1783 */
+    /* syntax/typing.nit:1793 */
     fra.me.REG[1] = CALL_parser___parser_nodes___ABinopExpr___n_expr2(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[1] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[1])(fra.me.REG[1]);
     REGB1 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
-    /* syntax/typing.nit:1782 */
+    /* syntax/typing.nit:1792 */
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1783 */
+    /* syntax/typing.nit:1793 */
     fra.me.REG[1] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[1] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[1])(fra.me.REG[1]);
     REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[1])(fra.me.REG[1]);
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   } else {
-    /* syntax/typing.nit:1782 */
+    /* syntax/typing.nit:1792 */
     REGB1 = TAG_Bool(0);
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1784 */
+    /* syntax/typing.nit:1794 */
     if (!once_value_2) {
       fra.me.REG[1] = BOX_NativeString("Warning: comparaison between null and a non nullable value.");
       REGB0 = TAG_Int(59);
@@ -11390,17 +11447,17 @@ void syntax___typing___ANeExpr___after_typing(val_t p0, val_t p1){
     fra.me.REG[1] = fra.me.REG[1];
     CALL_syntax___syntax_base___AbsSyntaxVisitor___warning(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2], fra.me.REG[1]);
   }
-  /* syntax/typing.nit:1787 */
+  /* syntax/typing.nit:1797 */
   fra.me.REG[1] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[1] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1788 */
+    /* syntax/typing.nit:1798 */
     fra.me.REG[1] = CALL_parser___parser_nodes___ABinopExpr___n_expr2(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[1] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[1])(fra.me.REG[1]);
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:1789 */
+      /* syntax/typing.nit:1799 */
       if (!once_value_3) {
         fra.me.REG[1] = BOX_NativeString("Warning: comparaison between two null values.");
         REGB0 = TAG_Int(45);
@@ -11411,17 +11468,17 @@ void syntax___typing___ANeExpr___after_typing(val_t p0, val_t p1){
       fra.me.REG[1] = fra.me.REG[1];
       CALL_syntax___syntax_base___AbsSyntaxVisitor___warning(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2], fra.me.REG[1]);
     } else {
-      /* syntax/typing.nit:1791 */
+      /* syntax/typing.nit:1801 */
       fra.me.REG[1] = CALL_parser___parser_nodes___ABinopExpr___n_expr2(fra.me.REG[2])(fra.me.REG[2]);
       CALL_syntax___typing___ANeExpr___try_to_isa(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3], fra.me.REG[1]);
     }
   } else {
-    /* syntax/typing.nit:1793 */
+    /* syntax/typing.nit:1803 */
     fra.me.REG[1] = CALL_parser___parser_nodes___ABinopExpr___n_expr2(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[1] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[1])(fra.me.REG[1]);
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:1794 */
+      /* syntax/typing.nit:1804 */
       fra.me.REG[1] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
       CALL_syntax___typing___ANeExpr___try_to_isa(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3], fra.me.REG[1]);
     }
@@ -11438,7 +11495,7 @@ void syntax___typing___ANeExpr___try_to_isa(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_syntax___typing;
-  fra.me.line = 1798;
+  fra.me.line = 1808;
   fra.me.meth = LOCATE_syntax___typing___ANeExpr___try_to_isa;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -11451,9 +11508,9 @@ void syntax___typing___ANeExpr___try_to_isa(val_t p0, val_t p1, val_t p2){
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* syntax/typing.nit:1800 */
+  /* syntax/typing.nit:1810 */
   fra.me.REG[3] = CALL_syntax___typing___AExpr___its_variable(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1801 */
+  /* syntax/typing.nit:1811 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11475,13 +11532,13 @@ void syntax___typing___ANeExpr___try_to_isa(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1802 */
+    /* syntax/typing.nit:1812 */
     fra.me.REG[4] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[2] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[2] = CALL_metamodel___static_type___MMType___as_notnull(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[2] = CALL_syntax___flow___FlowContext___sub_with(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0], fra.me.REG[3], fra.me.REG[2]);
     ATTR_syntax___typing___AExpr____if_true_flow_ctx(fra.me.REG[0]) = fra.me.REG[2];
-    /* syntax/typing.nit:1803 */
+    /* syntax/typing.nit:1813 */
     fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[1] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_none(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[1] = CALL_syntax___flow___FlowContext___sub_with(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0], fra.me.REG[3], fra.me.REG[1]);
@@ -11499,14 +11556,14 @@ val_t syntax___typing___ALtExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1808;
+  fra.me.line = 1818;
   fra.me.meth = LOCATE_syntax___typing___ALtExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1808 */
+  /* syntax/typing.nit:1818 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("<");
@@ -11535,14 +11592,14 @@ val_t syntax___typing___ALeExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1811;
+  fra.me.line = 1821;
   fra.me.meth = LOCATE_syntax___typing___ALeExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1811 */
+  /* syntax/typing.nit:1821 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("<=");
@@ -11571,14 +11628,14 @@ val_t syntax___typing___ALlExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1814;
+  fra.me.line = 1824;
   fra.me.meth = LOCATE_syntax___typing___ALlExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1814 */
+  /* syntax/typing.nit:1824 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("<<");
@@ -11607,14 +11664,14 @@ val_t syntax___typing___AGtExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1817;
+  fra.me.line = 1827;
   fra.me.meth = LOCATE_syntax___typing___AGtExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1817 */
+  /* syntax/typing.nit:1827 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString(">");
@@ -11643,14 +11700,14 @@ val_t syntax___typing___AGeExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1820;
+  fra.me.line = 1830;
   fra.me.meth = LOCATE_syntax___typing___AGeExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1820 */
+  /* syntax/typing.nit:1830 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString(">=");
@@ -11679,14 +11736,14 @@ val_t syntax___typing___AGgExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1823;
+  fra.me.line = 1833;
   fra.me.meth = LOCATE_syntax___typing___AGgExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1823 */
+  /* syntax/typing.nit:1833 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString(">>");
@@ -11715,14 +11772,14 @@ val_t syntax___typing___APlusExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1826;
+  fra.me.line = 1836;
   fra.me.meth = LOCATE_syntax___typing___APlusExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1826 */
+  /* syntax/typing.nit:1836 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("+");
@@ -11751,14 +11808,14 @@ val_t syntax___typing___AMinusExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1829;
+  fra.me.line = 1839;
   fra.me.meth = LOCATE_syntax___typing___AMinusExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1829 */
+  /* syntax/typing.nit:1839 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("-");
@@ -11787,14 +11844,14 @@ val_t syntax___typing___AStarshipExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1832;
+  fra.me.line = 1842;
   fra.me.meth = LOCATE_syntax___typing___AStarshipExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1832 */
+  /* syntax/typing.nit:1842 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("<=>");
@@ -11823,14 +11880,14 @@ val_t syntax___typing___AStarExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1835;
+  fra.me.line = 1845;
   fra.me.meth = LOCATE_syntax___typing___AStarExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1835 */
+  /* syntax/typing.nit:1845 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("*");
@@ -11859,14 +11916,14 @@ val_t syntax___typing___ASlashExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1838;
+  fra.me.line = 1848;
   fra.me.meth = LOCATE_syntax___typing___ASlashExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1838 */
+  /* syntax/typing.nit:1848 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("/");
@@ -11895,14 +11952,14 @@ val_t syntax___typing___APercentExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1841;
+  fra.me.line = 1851;
   fra.me.meth = LOCATE_syntax___typing___APercentExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1841 */
+  /* syntax/typing.nit:1851 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("%");
@@ -11931,14 +11988,14 @@ val_t syntax___typing___AUminusExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1845;
+  fra.me.line = 1855;
   fra.me.meth = LOCATE_syntax___typing___AUminusExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1845 */
+  /* syntax/typing.nit:1855 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("unary -");
@@ -11964,14 +12021,14 @@ val_t syntax___typing___AUminusExpr___compute_raw_arguments(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1846;
+  fra.me.line = 1856;
   fra.me.meth = LOCATE_syntax___typing___AUminusExpr___compute_raw_arguments;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1846 */
+  /* syntax/typing.nit:1856 */
   fra.me.REG[0] = NIT_NULL;
   goto label1;
   label1: while(0);
@@ -11988,7 +12045,7 @@ void syntax___typing___ACallFormExpr___after_typing(val_t p0, val_t p1){
           static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1850;
+  fra.me.line = 1860;
   fra.me.meth = LOCATE_syntax___typing___ACallFormExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -12004,20 +12061,20 @@ void syntax___typing___ACallFormExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1850 */
+  /* syntax/typing.nit:1860 */
   fra.me.REG[2] = fra.me.REG[0];
   fra.me.REG[3] = fra.me.REG[1];
-  /* syntax/typing.nit:1852 */
+  /* syntax/typing.nit:1862 */
   fra.me.REG[4] = CALL_parser___parser_nodes___ASendExpr___n_expr(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = CALL_syntax___typing___AExpr___is_implicit_self(fra.me.REG[4])(fra.me.REG[4]);
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1853 */
+    /* syntax/typing.nit:1863 */
     fra.me.REG[4] = CALL_parser___parser_nodes___ACallFormExpr___n_id(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[4] = CALL_syntax___syntax_base___Token___to_symbol(fra.me.REG[4])(fra.me.REG[4]);
-    /* syntax/typing.nit:1854 */
+    /* syntax/typing.nit:1864 */
     fra.me.REG[5] = CALL_syntax___typing___TypingVisitor___scope_ctx(fra.me.REG[3])(fra.me.REG[3]);
     fra.me.REG[5] = CALL_syntax___scope___ScopeContext_____bra(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
-    /* syntax/typing.nit:1855 */
+    /* syntax/typing.nit:1865 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12032,18 +12089,18 @@ void syntax___typing___ACallFormExpr___after_typing(val_t p0, val_t p1){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:1857 */
+      /* syntax/typing.nit:1867 */
       REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_syntax___syntax_base___ClosureVariable, ID_syntax___syntax_base___ClosureVariable)) /*cast ClosureVariable*/;
       if (UNTAG_Bool(REGB0)) {
-        /* syntax/typing.nit:1858 */
+        /* syntax/typing.nit:1868 */
         fra.me.REG[6] = CALL_parser___parser_nodes___ACallFormExpr___n_id(fra.me.REG[2])(fra.me.REG[2]);
         fra.me.REG[7] = CALL_parser___parser_nodes___ACallFormExpr___n_args(fra.me.REG[2])(fra.me.REG[2]);
         fra.me.REG[8] = CALL_parser___parser_nodes___ASendExpr___n_closure_defs(fra.me.REG[2])(fra.me.REG[2]);
         fra.me.REG[8] = NEW_AClosureCallExpr_parser___parser_prod___AClosureCallExpr___init_aclosurecallexpr(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-        /* syntax/typing.nit:1859 */
+        /* syntax/typing.nit:1869 */
         ATTR_syntax___typing___AClosureCallExpr____variable(fra.me.REG[8]) = fra.me.REG[5];
       } else {
-        /* syntax/typing.nit:1861 */
+        /* syntax/typing.nit:1871 */
         fra.me.REG[7] = CALL_parser___parser_nodes___ACallFormExpr___n_args(fra.me.REG[2])(fra.me.REG[2]);
         fra.me.REG[7] = CALL_parser___parser_nodes___AExprs___n_exprs(fra.me.REG[7])(fra.me.REG[7]);
         REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[7])(fra.me.REG[7]);
@@ -12056,7 +12113,7 @@ void syntax___typing___ACallFormExpr___after_typing(val_t p0, val_t p1){
           REGB0 = REGB1;
         }
         if (UNTAG_Bool(REGB0)) {
-          /* syntax/typing.nit:1862 */
+          /* syntax/typing.nit:1872 */
           REGB0 = TAG_Int(3);
           fra.me.REG[7] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
           if (!once_value_1) {
@@ -12081,24 +12138,24 @@ void syntax___typing___ACallFormExpr___after_typing(val_t p0, val_t p1){
           CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
           fra.me.REG[7] = CALL_standard___string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
           CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2], fra.me.REG[7]);
-          /* syntax/typing.nit:1863 */
+          /* syntax/typing.nit:1873 */
           goto label3;
         }
-        /* syntax/typing.nit:1865 */
+        /* syntax/typing.nit:1875 */
         fra.me.REG[7] = CALL_syntax___typing___ACallFormExpr___variable_create(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
         fra.me.REG[8] = fra.me.REG[7];
-        /* syntax/typing.nit:1866 */
+        /* syntax/typing.nit:1876 */
         ATTR_syntax___typing___AVarFormExpr____variable(fra.me.REG[8]) = fra.me.REG[5];
       }
-      /* syntax/typing.nit:1868 */
+      /* syntax/typing.nit:1878 */
       CALL_parser___parser_prod___ANode___replace_with(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[8]);
-      /* syntax/typing.nit:1869 */
+      /* syntax/typing.nit:1879 */
       CALL_syntax___typing___ANode___after_typing(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
-      /* syntax/typing.nit:1870 */
+      /* syntax/typing.nit:1880 */
       goto label3;
     }
   }
-  /* syntax/typing.nit:1874 */
+  /* syntax/typing.nit:1884 */
   CALL_SUPER_syntax___typing___ACallFormExpr___after_typing(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   label3: while(0);
   stack_frame_head = fra.me.prev;
@@ -12111,7 +12168,7 @@ val_t syntax___typing___ACallFormExpr___closure_defs(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1877;
+  fra.me.line = 1887;
   fra.me.meth = LOCATE_syntax___typing___ACallFormExpr___closure_defs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12119,15 +12176,15 @@ val_t syntax___typing___ACallFormExpr___closure_defs(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1879 */
+  /* syntax/typing.nit:1889 */
   fra.me.REG[1] = CALL_parser___parser_nodes___ASendExpr___n_closure_defs(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[1])(fra.me.REG[1]);
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1880 */
+    /* syntax/typing.nit:1890 */
     fra.me.REG[1] = NIT_NULL;
     goto label1;
   } else {
-    /* syntax/typing.nit:1882 */
+    /* syntax/typing.nit:1892 */
     fra.me.REG[0] = CALL_parser___parser_nodes___ASendExpr___n_closure_defs(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[0] = CALL_standard___collection___array___Collection___to_a(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[1] = fra.me.REG[0];
@@ -12143,13 +12200,13 @@ val_t syntax___typing___ACallFormExpr___variable_create(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1886;
+  fra.me.line = 1896;
   fra.me.meth = LOCATE_syntax___typing___ACallFormExpr___variable_create;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  /* syntax/typing.nit:1886 */
-  nit_abort("Deferred method called", NULL, LOCATE_syntax___typing, 1886);
+  /* syntax/typing.nit:1896 */
+  nit_abort("Deferred method called", NULL, LOCATE_syntax___typing, 1896);
   stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
@@ -12159,7 +12216,7 @@ val_t syntax___typing___ACallExpr___variable_create(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1891;
+  fra.me.line = 1901;
   fra.me.meth = LOCATE_syntax___typing___ACallExpr___variable_create;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12168,7 +12225,7 @@ val_t syntax___typing___ACallExpr___variable_create(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1893 */
+  /* syntax/typing.nit:1903 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ACallFormExpr___n_id(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = NEW_AVarExpr_parser___parser_prod___AVarExpr___init_avarexpr(fra.me.REG[0]);
   goto label1;
@@ -12182,14 +12239,14 @@ val_t syntax___typing___ACallExpr___name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1896;
+  fra.me.line = 1906;
   fra.me.meth = LOCATE_syntax___typing___ACallExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1896 */
+  /* syntax/typing.nit:1906 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ACallFormExpr___n_id(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___Token___to_symbol(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -12203,14 +12260,14 @@ val_t syntax___typing___ACallExpr___compute_raw_arguments(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1897;
+  fra.me.line = 1907;
   fra.me.meth = LOCATE_syntax___typing___ACallExpr___compute_raw_arguments;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1897 */
+  /* syntax/typing.nit:1907 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ACallFormExpr___n_args(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AExprs___to_a(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -12224,7 +12281,7 @@ val_t syntax___typing___ACallAssignExpr___variable_create(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1901;
+  fra.me.line = 1911;
   fra.me.meth = LOCATE_syntax___typing___ACallAssignExpr___variable_create;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -12234,7 +12291,7 @@ val_t syntax___typing___ACallAssignExpr___variable_create(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1903 */
+  /* syntax/typing.nit:1913 */
   fra.me.REG[1] = CALL_parser___parser_nodes___ACallFormExpr___n_id(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_parser___parser_nodes___AAssignFormExpr___n_assign(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_parser___parser_nodes___AAssignFormExpr___n_value(fra.me.REG[0])(fra.me.REG[0]);
@@ -12252,7 +12309,7 @@ val_t syntax___typing___ACallAssignExpr___name(val_t p0){
   static val_t once_value_1; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1906;
+  fra.me.line = 1916;
   fra.me.meth = LOCATE_syntax___typing___ACallAssignExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12260,7 +12317,7 @@ val_t syntax___typing___ACallAssignExpr___name(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1906 */
+  /* syntax/typing.nit:1916 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ACallFormExpr___n_id(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_parser___parser_nodes___Token___text(fra.me.REG[0])(fra.me.REG[0]);
   if (!once_value_1) {
@@ -12284,7 +12341,7 @@ val_t syntax___typing___ACallAssignExpr___compute_raw_arguments(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1907;
+  fra.me.line = 1917;
   fra.me.meth = LOCATE_syntax___typing___ACallAssignExpr___compute_raw_arguments;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12292,13 +12349,13 @@ val_t syntax___typing___ACallAssignExpr___compute_raw_arguments(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1908 */
+  /* syntax/typing.nit:1918 */
   fra.me.REG[1] = CALL_parser___parser_nodes___ACallFormExpr___n_args(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[1] = CALL_syntax___syntax_base___AExprs___to_a(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:1909 */
+  /* syntax/typing.nit:1919 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AAssignFormExpr___n_value(fra.me.REG[0])(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* syntax/typing.nit:1910 */
+  /* syntax/typing.nit:1920 */
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -12310,7 +12367,7 @@ val_t syntax___typing___ACallReassignExpr___variable_create(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1915;
+  fra.me.line = 1925;
   fra.me.meth = LOCATE_syntax___typing___ACallReassignExpr___variable_create;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -12320,7 +12377,7 @@ val_t syntax___typing___ACallReassignExpr___variable_create(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1917 */
+  /* syntax/typing.nit:1927 */
   fra.me.REG[1] = CALL_parser___parser_nodes___ACallFormExpr___n_id(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_parser___parser_nodes___AReassignFormExpr___n_assign_op(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_parser___parser_nodes___AReassignFormExpr___n_value(fra.me.REG[0])(fra.me.REG[0]);
@@ -12336,14 +12393,14 @@ val_t syntax___typing___ACallReassignExpr___name(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1920;
+  fra.me.line = 1930;
   fra.me.meth = LOCATE_syntax___typing___ACallReassignExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1920 */
+  /* syntax/typing.nit:1930 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ACallFormExpr___n_id(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___Token___to_symbol(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -12357,14 +12414,14 @@ val_t syntax___typing___ACallReassignExpr___compute_raw_arguments(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1921;
+  fra.me.line = 1931;
   fra.me.meth = LOCATE_syntax___typing___ACallReassignExpr___compute_raw_arguments;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1921 */
+  /* syntax/typing.nit:1931 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ACallFormExpr___n_args(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AExprs___to_a(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -12381,14 +12438,14 @@ val_t syntax___typing___ABraExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1925;
+  fra.me.line = 1935;
   fra.me.meth = LOCATE_syntax___typing___ABraExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1925 */
+  /* syntax/typing.nit:1935 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("[]");
@@ -12414,14 +12471,14 @@ val_t syntax___typing___ABraExpr___compute_raw_arguments(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1926;
+  fra.me.line = 1936;
   fra.me.meth = LOCATE_syntax___typing___ABraExpr___compute_raw_arguments;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1926 */
+  /* syntax/typing.nit:1936 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ABraFormExpr___n_args(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AExprs___to_a(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -12436,7 +12493,7 @@ val_t syntax___typing___ABraExpr___closure_defs(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1927;
+  fra.me.line = 1937;
   fra.me.meth = LOCATE_syntax___typing___ABraExpr___closure_defs;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12444,15 +12501,15 @@ val_t syntax___typing___ABraExpr___closure_defs(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1929 */
+  /* syntax/typing.nit:1939 */
   fra.me.REG[1] = CALL_parser___parser_nodes___ASendExpr___n_closure_defs(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[1])(fra.me.REG[1]);
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:1930 */
+    /* syntax/typing.nit:1940 */
     fra.me.REG[1] = NIT_NULL;
     goto label1;
   } else {
-    /* syntax/typing.nit:1932 */
+    /* syntax/typing.nit:1942 */
     fra.me.REG[0] = CALL_parser___parser_nodes___ASendExpr___n_closure_defs(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[0] = CALL_standard___collection___array___Collection___to_a(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[1] = fra.me.REG[0];
@@ -12471,14 +12528,14 @@ val_t syntax___typing___ABraAssignExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1938;
+  fra.me.line = 1948;
   fra.me.meth = LOCATE_syntax___typing___ABraAssignExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1938 */
+  /* syntax/typing.nit:1948 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("[]=");
@@ -12504,7 +12561,7 @@ val_t syntax___typing___ABraAssignExpr___compute_raw_arguments(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1939;
+  fra.me.line = 1949;
   fra.me.meth = LOCATE_syntax___typing___ABraAssignExpr___compute_raw_arguments;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12512,13 +12569,13 @@ val_t syntax___typing___ABraAssignExpr___compute_raw_arguments(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1940 */
+  /* syntax/typing.nit:1950 */
   fra.me.REG[1] = CALL_parser___parser_nodes___ABraFormExpr___n_args(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[1] = CALL_syntax___syntax_base___AExprs___to_a(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:1941 */
+  /* syntax/typing.nit:1951 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AAssignFormExpr___n_value(fra.me.REG[0])(fra.me.REG[0]);
   CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* syntax/typing.nit:1942 */
+  /* syntax/typing.nit:1952 */
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -12533,14 +12590,14 @@ val_t syntax___typing___ABraReassignExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1947;
+  fra.me.line = 1957;
   fra.me.meth = LOCATE_syntax___typing___ABraReassignExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1947 */
+  /* syntax/typing.nit:1957 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("[]");
@@ -12566,14 +12623,14 @@ val_t syntax___typing___ABraReassignExpr___compute_raw_arguments(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1948;
+  fra.me.line = 1958;
   fra.me.meth = LOCATE_syntax___typing___ABraReassignExpr___compute_raw_arguments;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1948 */
+  /* syntax/typing.nit:1958 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ABraFormExpr___n_args(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AExprs___to_a(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -12590,14 +12647,14 @@ val_t syntax___typing___AInitExpr___name(val_t p0){
     static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1952;
+  fra.me.line = 1962;
   fra.me.meth = LOCATE_syntax___typing___AInitExpr___name;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1952 */
+  /* syntax/typing.nit:1962 */
   if (!once_value_1) {
     if (!once_value_2) {
       fra.me.REG[0] = BOX_NativeString("init");
@@ -12623,14 +12680,14 @@ val_t syntax___typing___AInitExpr___compute_raw_arguments(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1953;
+  fra.me.line = 1963;
   fra.me.meth = LOCATE_syntax___typing___AInitExpr___compute_raw_arguments;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1953 */
+  /* syntax/typing.nit:1963 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AInitExpr___n_args(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AExprs___to_a(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -12645,7 +12702,7 @@ val_t syntax___typing___AClosureCallExpr___variable(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1958;
+  fra.me.line = 1968;
   fra.me.meth = LOCATE_syntax___typing___AClosureCallExpr___variable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12653,13 +12710,13 @@ val_t syntax___typing___AClosureCallExpr___variable(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1958 */
+  /* syntax/typing.nit:1968 */
   fra.me.REG[1] = fra.me.REG[0];
   fra.me.REG[1] = ATTR_syntax___typing___AClosureCallExpr____variable(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1958);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1968);
   }
   goto label1;
   label1: while(0);
@@ -12672,14 +12729,14 @@ val_t syntax___typing___AClosureCallExpr___compute_raw_arguments(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1959;
+  fra.me.line = 1969;
   fra.me.meth = LOCATE_syntax___typing___AClosureCallExpr___compute_raw_arguments;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1959 */
+  /* syntax/typing.nit:1969 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AClosureCallExpr___n_args(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___AExprs___to_a(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -12695,7 +12752,7 @@ void syntax___typing___AClosureCallExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1961;
+  fra.me.line = 1971;
   fra.me.meth = LOCATE_syntax___typing___AClosureCallExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -12707,45 +12764,45 @@ void syntax___typing___AClosureCallExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1963 */
+  /* syntax/typing.nit:1973 */
   fra.me.REG[2] = CALL_syntax___syntax_base___AClosureCallExpr___variable(fra.me.REG[0])(fra.me.REG[0]);
-  /* syntax/typing.nit:1964 */
+  /* syntax/typing.nit:1974 */
   fra.me.REG[3] = CALL_syntax___syntax_base___ClosureVariable___closure(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = CALL_metamodel___static_type___MMClosure___is_break(fra.me.REG[3])(fra.me.REG[3]);
   if (UNTAG_Bool(REGB0)) {
     CALL_syntax___typing___TypingVisitor___mark_unreash(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* syntax/typing.nit:1965 */
+  /* syntax/typing.nit:1975 */
   fra.me.REG[2] = CALL_syntax___syntax_base___ClosureVariable___closure(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[2] = CALL_metamodel___static_type___MMClosure___signature(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:1966 */
+  /* syntax/typing.nit:1976 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AClosureCallExpr___n_id(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___Token___to_symbol(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[4] = CALL_syntax___typing___AAbsAbsSendExpr___compute_raw_arguments(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___typing___AAbsAbsSendExpr___process_signature(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], fra.me.REG[4]);
-  /* syntax/typing.nit:1967 */
+  /* syntax/typing.nit:1977 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AClosureCallExpr___n_closure_defs(fra.me.REG[0])(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[4])(fra.me.REG[4]);
   REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
   if (UNTAG_Bool(REGB1)) {
-    /* syntax/typing.nit:1968 */
+    /* syntax/typing.nit:1978 */
     fra.me.REG[4] = CALL_parser___parser_nodes___AClosureCallExpr___n_id(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[4] = CALL_syntax___syntax_base___Token___to_symbol(fra.me.REG[4])(fra.me.REG[4]);
     fra.me.REG[3] = CALL_parser___parser_nodes___AClosureCallExpr___n_closure_defs(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[3] = CALL_standard___collection___array___Collection___to_a(fra.me.REG[3])(fra.me.REG[3]);
     CALL_syntax___typing___AAbsAbsSendExpr___process_closures(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[4], fra.me.REG[3]);
   }
-  /* syntax/typing.nit:1970 */
+  /* syntax/typing.nit:1980 */
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:1971 */
+  /* syntax/typing.nit:1981 */
   ATTR_syntax___typing___AAbsAbsSendExpr____prop_signature(fra.me.REG[0]) = fra.me.REG[2];
-  /* syntax/typing.nit:1972 */
+  /* syntax/typing.nit:1982 */
   fra.me.REG[2] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[2])(fra.me.REG[2]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[2];
-  /* syntax/typing.nit:1973 */
+  /* syntax/typing.nit:1983 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   label1: while(0);
@@ -12758,13 +12815,13 @@ val_t syntax___typing___AClosureId___to_symbol(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1978;
+  fra.me.line = 1988;
   fra.me.meth = LOCATE_syntax___typing___AClosureId___to_symbol;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
   fra.me.nitni_local_ref_head = NULL;
-  /* syntax/typing.nit:1978 */
-  nit_abort("Deferred method called", NULL, LOCATE_syntax___typing, 1978);
+  /* syntax/typing.nit:1988 */
+  nit_abort("Deferred method called", NULL, LOCATE_syntax___typing, 1988);
   stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
@@ -12774,14 +12831,14 @@ val_t syntax___typing___ASimpleClosureId___to_symbol(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1981;
+  fra.me.line = 1991;
   fra.me.meth = LOCATE_syntax___typing___ASimpleClosureId___to_symbol;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1981 */
+  /* syntax/typing.nit:1991 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ASimpleClosureId___n_id(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___Token___to_symbol(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -12795,14 +12852,14 @@ val_t syntax___typing___ABreakClosureId___to_symbol(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1984;
+  fra.me.line = 1994;
   fra.me.meth = LOCATE_syntax___typing___ABreakClosureId___to_symbol;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1984 */
+  /* syntax/typing.nit:1994 */
   fra.me.REG[0] = CALL_parser___parser_nodes___ABreakClosureId___n_kwbreak(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___syntax_base___Token___to_symbol(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -12817,7 +12874,7 @@ val_t syntax___typing___AClosureDef___closure(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1989;
+  fra.me.line = 1999;
   fra.me.meth = LOCATE_syntax___typing___AClosureDef___closure;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12825,13 +12882,13 @@ val_t syntax___typing___AClosureDef___closure(val_t p0){
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1989 */
+  /* syntax/typing.nit:1999 */
   fra.me.REG[1] = fra.me.REG[0];
   fra.me.REG[1] = ATTR_syntax___typing___AClosureDef____closure(fra.me.REG[1]);
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1989);
+    nit_abort("Cast failed", NULL, LOCATE_syntax___typing, 1999);
   }
   goto label1;
   label1: while(0);
@@ -12844,14 +12901,14 @@ val_t syntax___typing___AClosureDef___escapable(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1991;
+  fra.me.line = 2001;
   fra.me.meth = LOCATE_syntax___typing___AClosureDef___escapable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:1991 */
+  /* syntax/typing.nit:2001 */
   fra.me.REG[0] = ATTR_syntax___typing___AClosureDef____escapable(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -12863,7 +12920,7 @@ void syntax___typing___AClosureDef___accept_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 1995;
+  fra.me.line = 2005;
   fra.me.meth = LOCATE_syntax___typing___AClosureDef___accept_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -12873,13 +12930,13 @@ void syntax___typing___AClosureDef___accept_typing(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:1995 */
+  /* syntax/typing.nit:2005 */
   fra.me.REG[2] = fra.me.REG[0];
-  /* syntax/typing.nit:1998 */
+  /* syntax/typing.nit:2008 */
   REGB0 = TAG_Bool(ATTR_syntax___typing___AClosureDef____accept_typing2(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_accept_typing2", LOCATE_syntax___typing, 1998);
+    nit_abort("Uninitialized attribute %s", "_accept_typing2", LOCATE_syntax___typing, 2008);
   }
   REGB0 = ATTR_syntax___typing___AClosureDef____accept_typing2(fra.me.REG[2]);
   if (UNTAG_Bool(REGB0)) {
@@ -12903,7 +12960,7 @@ void syntax___typing___AClosureDef___accept_typing2(val_t p0, val_t p1, val_t p2
         static val_t once_value_7; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 2001;
+  fra.me.line = 2011;
   fra.me.meth = LOCATE_syntax___typing___AClosureDef___accept_typing2;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
@@ -12919,12 +12976,12 @@ void syntax___typing___AClosureDef___accept_typing2(val_t p0, val_t p1, val_t p2
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* syntax/typing.nit:2003 */
+  /* syntax/typing.nit:2013 */
   ATTR_syntax___typing___AClosureDef____escapable(fra.me.REG[0]) = fra.me.REG[2];
-  /* syntax/typing.nit:2005 */
+  /* syntax/typing.nit:2015 */
   fra.me.REG[3] = CALL_syntax___scope___EscapableClosure___closure(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[3] = CALL_metamodel___static_type___MMClosure___signature(fra.me.REG[3])(fra.me.REG[3]);
-  /* syntax/typing.nit:2006 */
+  /* syntax/typing.nit:2016 */
   REGB0 = CALL_metamodel___static_type___MMSignature___arity(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[4] = CALL_parser___parser_nodes___AClosureDef___n_ids(fra.me.REG[0])(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[4])(fra.me.REG[4]);
@@ -12933,12 +12990,12 @@ void syntax___typing___AClosureDef___accept_typing2(val_t p0, val_t p1, val_t p2
   } else {
     /* ../lib/standard/kernel.nit:230 */
     REGB1 = TAG_Bool((REGB0)==(REGB1));
-    /* syntax/typing.nit:2006 */
+    /* syntax/typing.nit:2016 */
     REGB2 = REGB1;
   }
   REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
   if (UNTAG_Bool(REGB2)) {
-    /* syntax/typing.nit:2007 */
+    /* syntax/typing.nit:2017 */
     REGB2 = TAG_Int(5);
     fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB2);
     if (!once_value_1) {
@@ -12977,26 +13034,26 @@ void syntax___typing___AClosureDef___accept_typing2(val_t p0, val_t p1, val_t p2
     CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
     fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[4]);
-    /* syntax/typing.nit:2008 */
+    /* syntax/typing.nit:2018 */
     goto label4;
   }
-  /* syntax/typing.nit:2011 */
+  /* syntax/typing.nit:2021 */
   fra.me.REG[4] = CALL_syntax___scope___EscapableClosure___closure(fra.me.REG[2])(fra.me.REG[2]);
   ATTR_syntax___typing___AClosureDef____closure(fra.me.REG[0]) = fra.me.REG[4];
-  /* syntax/typing.nit:2013 */
+  /* syntax/typing.nit:2023 */
   fra.me.REG[4] = CALL_syntax___typing___TypingVisitor___scope_ctx(fra.me.REG[1])(fra.me.REG[1]);
   CALL_syntax___scope___ScopeContext___push(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* syntax/typing.nit:2014 */
+  /* syntax/typing.nit:2024 */
   fra.me.REG[4] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:2015 */
+  /* syntax/typing.nit:2025 */
   fra.me.REG[5] = CALL_syntax___typing___TypingVisitor___base_flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
-  /* syntax/typing.nit:2016 */
+  /* syntax/typing.nit:2026 */
   fra.me.REG[6] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
   CALL_syntax___typing___TypingVisitor___base_flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-  /* syntax/typing.nit:2017 */
+  /* syntax/typing.nit:2027 */
   fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
   CALL_syntax___syntax_base___AClosureDef___variables__eq(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6]);
-  /* syntax/typing.nit:2018 */
+  /* syntax/typing.nit:2028 */
   REGB2 = TAG_Int(0);
   fra.me.REG[6] = CALL_parser___parser_nodes___AClosureDef___n_ids(fra.me.REG[0])(fra.me.REG[0]);
   REGB1 = CALL_standard___collection___abstract_collection___Collection___length(fra.me.REG[6])(fra.me.REG[6]);
@@ -13011,30 +13068,30 @@ void syntax___typing___AClosureDef___accept_typing2(val_t p0, val_t p1, val_t p2
     REGB0 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB1));
     /* ../lib/standard/kernel.nit:355 */
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:2018 */
+      /* syntax/typing.nit:2028 */
       REGB0 = REGB2;
-      /* syntax/typing.nit:2019 */
+      /* syntax/typing.nit:2029 */
       fra.me.REG[6] = CALL_parser___parser_nodes___AClosureDef___n_ids(fra.me.REG[0])(fra.me.REG[0]);
       fra.me.REG[6] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[6])(fra.me.REG[6], REGB0);
       REGB3 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
-        nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 2019);
+        nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 2029);
       }
       fra.me.REG[6] = CALL_syntax___syntax_base___Token___to_symbol(fra.me.REG[6])(fra.me.REG[6]);
       fra.me.REG[7] = CALL_parser___parser_nodes___AClosureDef___n_ids(fra.me.REG[0])(fra.me.REG[0]);
       fra.me.REG[7] = CALL_standard___collection___abstract_collection___SequenceRead_____bra(fra.me.REG[7])(fra.me.REG[7], REGB0);
       fra.me.REG[7] = NEW_AutoVariable_syntax___syntax_base___AutoVariable___init(fra.me.REG[6], fra.me.REG[7]);
-      /* syntax/typing.nit:2020 */
+      /* syntax/typing.nit:2030 */
       fra.me.REG[6] = CALL_syntax___syntax_base___AClosureDef___variables(fra.me.REG[0])(fra.me.REG[0]);
       REGB3 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
-        nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 2020);
+        nit_abort("Reciever is null", NULL, LOCATE_syntax___typing, 2030);
       }
       CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
-      /* syntax/typing.nit:2021 */
+      /* syntax/typing.nit:2031 */
       fra.me.REG[6] = CALL_metamodel___static_type___MMSignature_____bra(fra.me.REG[3])(fra.me.REG[3], REGB0);
       CALL_syntax___syntax_base___Variable___stype__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[6]);
-      /* syntax/typing.nit:2022 */
+      /* syntax/typing.nit:2032 */
       fra.me.REG[6] = CALL_syntax___typing___TypingVisitor___scope_ctx(fra.me.REG[1])(fra.me.REG[1]);
       CALL_syntax___scope___ScopeContext___add_variable(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
       /* ../lib/standard/kernel.nit:357 */
@@ -13049,12 +13106,12 @@ void syntax___typing___AClosureDef___accept_typing2(val_t p0, val_t p1, val_t p2
     }
   }
   label5: while(0);
-  /* syntax/typing.nit:2025 */
+  /* syntax/typing.nit:2035 */
   REGB2 = TAG_Bool(1);
   ATTR_syntax___typing___AClosureDef____accept_typing2(fra.me.REG[0]) = REGB2;
-  /* syntax/typing.nit:2026 */
+  /* syntax/typing.nit:2036 */
   CALL_syntax___typing___ANode___accept_typing(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* syntax/typing.nit:2028 */
+  /* syntax/typing.nit:2038 */
   fra.me.REG[3] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
   REGB2 = CALL_syntax___flow___FlowContext___unreash(fra.me.REG[3])(fra.me.REG[3]);
   REGB1 = TAG_Bool(0);
@@ -13063,11 +13120,11 @@ void syntax___typing___AClosureDef___accept_typing2(val_t p0, val_t p1, val_t p2
   } else {
     /* ../lib/standard/kernel.nit:198 */
     REGB1 = TAG_Bool((REGB2)==(REGB1));
-    /* syntax/typing.nit:2028 */
+    /* syntax/typing.nit:2038 */
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:2029 */
+    /* syntax/typing.nit:2039 */
     fra.me.REG[3] = CALL_syntax___syntax_base___AClosureDef___closure(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[3] = CALL_metamodel___static_type___MMClosure___signature(fra.me.REG[3])(fra.me.REG[3]);
     fra.me.REG[3] = CALL_metamodel___static_type___MMSignature___return_type(fra.me.REG[3])(fra.me.REG[3]);
@@ -13085,7 +13142,7 @@ void syntax___typing___AClosureDef___accept_typing2(val_t p0, val_t p1, val_t p2
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:2030 */
+      /* syntax/typing.nit:2040 */
       if (!once_value_6) {
         fra.me.REG[3] = BOX_NativeString("Control error: Reached end of block (a 'continue' with a value was expected).");
         REGB0 = TAG_Int(77);
@@ -13096,7 +13153,7 @@ void syntax___typing___AClosureDef___accept_typing2(val_t p0, val_t p1, val_t p2
       fra.me.REG[3] = fra.me.REG[3];
       CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[3]);
     } else {
-      /* syntax/typing.nit:2031 */
+      /* syntax/typing.nit:2041 */
       fra.me.REG[3] = CALL_syntax___syntax_base___AClosureDef___closure(fra.me.REG[0])(fra.me.REG[0]);
       REGB0 = CALL_metamodel___static_type___MMClosure___is_break(fra.me.REG[3])(fra.me.REG[3]);
       if (UNTAG_Bool(REGB0)) {
@@ -13119,7 +13176,7 @@ void syntax___typing___AClosureDef___accept_typing2(val_t p0, val_t p1, val_t p2
         REGB0 = REGB1;
       }
       if (UNTAG_Bool(REGB0)) {
-        /* syntax/typing.nit:2032 */
+        /* syntax/typing.nit:2042 */
         if (!once_value_7) {
           fra.me.REG[2] = BOX_NativeString("Control error: Reached end of break block (a 'break' with a value was expected).");
           REGB0 = TAG_Int(80);
@@ -13132,11 +13189,11 @@ void syntax___typing___AClosureDef___accept_typing2(val_t p0, val_t p1, val_t p2
       }
     }
   }
-  /* syntax/typing.nit:2035 */
+  /* syntax/typing.nit:2045 */
   CALL_syntax___typing___TypingVisitor___flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* syntax/typing.nit:2036 */
+  /* syntax/typing.nit:2046 */
   CALL_syntax___typing___TypingVisitor___base_flow_ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* syntax/typing.nit:2037 */
+  /* syntax/typing.nit:2047 */
   fra.me.REG[1] = CALL_syntax___typing___TypingVisitor___scope_ctx(fra.me.REG[1])(fra.me.REG[1]);
   CALL_syntax___scope___ScopeContext___pop(fra.me.REG[1])(fra.me.REG[1]);
   label4: while(0);
@@ -13160,7 +13217,7 @@ void syntax___typing___ATypeCheckExpr___check_expr_cast(val_t p0, val_t p1, val_
               static val_t once_value_10; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 2043;
+  fra.me.line = 2053;
   fra.me.meth = LOCATE_syntax___typing___ATypeCheckExpr___check_expr_cast;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -13175,23 +13232,23 @@ void syntax___typing___ATypeCheckExpr___check_expr_cast(val_t p0, val_t p1, val_
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* syntax/typing.nit:2045 */
+  /* syntax/typing.nit:2055 */
   REGB0 = CALL_syntax___syntax_base___AbsSyntaxVisitor___check_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:2046 */
+  /* syntax/typing.nit:2056 */
   REGB0 = CALL_syntax___syntax_base___AType___is_typed(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:2047 */
+  /* syntax/typing.nit:2057 */
   fra.me.REG[2] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:2048 */
+  /* syntax/typing.nit:2058 */
   fra.me.REG[3] = CALL_syntax___syntax_base___AType___stype(fra.me.REG[3])(fra.me.REG[3]);
-  /* syntax/typing.nit:2049 */
+  /* syntax/typing.nit:2059 */
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[2],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -13199,7 +13256,7 @@ void syntax___typing___ATypeCheckExpr___check_expr_cast(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:2050 */
+    /* syntax/typing.nit:2060 */
     REGB0 = TAG_Int(3);
     fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
     if (!once_value_2) {
@@ -13225,14 +13282,21 @@ void syntax___typing___ATypeCheckExpr___check_expr_cast(val_t p0, val_t p1, val_
     fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
     CALL_syntax___syntax_base___AbsSyntaxVisitor___warning(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[4]);
   } else {
-    /* syntax/typing.nit:2051 */
+    /* syntax/typing.nit:2061 */
     REGB0 = CALL_metamodel___static_type___MMType_____l(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:2052 */
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[3], COLOR_metamodel___type_formal___MMTypeFormal, ID_metamodel___type_formal___MMTypeFormal)) /*cast MMTypeFormal*/;
+      /* syntax/typing.nit:2062 */
+      REGB0 = CALL_metamodel___type_formal___MMType___has_formal(fra.me.REG[3])(fra.me.REG[3]);
       REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
       if (UNTAG_Bool(REGB0)) {
-        /* syntax/typing.nit:2054 */
+        REGB0 = CALL_metamodel___type_formal___MMType___has_formal(fra.me.REG[2])(fra.me.REG[2]);
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+      } else {
+        REGB1 = TAG_Bool(0);
+        REGB0 = REGB1;
+      }
+      if (UNTAG_Bool(REGB0)) {
+        /* syntax/typing.nit:2064 */
         REGB0 = TAG_Int(5);
         fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
         if (!once_value_4) {
@@ -13270,10 +13334,10 @@ void syntax___typing___ATypeCheckExpr___check_expr_cast(val_t p0, val_t p1, val_
         CALL_syntax___syntax_base___AbsSyntaxVisitor___warning(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[4]);
       }
     } else {
-      /* syntax/typing.nit:2056 */
+      /* syntax/typing.nit:2066 */
       REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
       if (UNTAG_Bool(REGB0)) {
-        /* syntax/typing.nit:2058 */
+        /* syntax/typing.nit:2068 */
         REGB0 = TAG_Int(3);
         fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
         if (!once_value_7) {
@@ -13299,7 +13363,7 @@ void syntax___typing___ATypeCheckExpr___check_expr_cast(val_t p0, val_t p1, val_
         fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
         CALL_syntax___syntax_base___AbsSyntaxVisitor___warning(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[4]);
       } else {
-        /* syntax/typing.nit:2059 */
+        /* syntax/typing.nit:2069 */
         REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[2])(fra.me.REG[2]);
         if (UNTAG_Bool(REGB0)) {
           fra.me.REG[2] = CALL_metamodel___static_type___MMType___as_notnull(fra.me.REG[2])(fra.me.REG[2]);
@@ -13314,7 +13378,7 @@ void syntax___typing___ATypeCheckExpr___check_expr_cast(val_t p0, val_t p1, val_
           REGB0 = REGB1;
         }
         if (UNTAG_Bool(REGB0)) {
-          /* syntax/typing.nit:2060 */
+          /* syntax/typing.nit:2070 */
           REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[3], COLOR_metamodel___type_formal___MMTypeFormal, ID_metamodel___type_formal___MMTypeFormal)) /*cast MMTypeFormal*/;
           if (UNTAG_Bool(REGB0)) {
             fra.me.REG[3] = CALL_metamodel___type_formal___MMTypeFormal___bound(fra.me.REG[3])(fra.me.REG[3]);
@@ -13325,10 +13389,10 @@ void syntax___typing___ATypeCheckExpr___check_expr_cast(val_t p0, val_t p1, val_
           }
           if (UNTAG_Bool(REGB0)) {
           } else {
-            /* syntax/typing.nit:2066 */
+            /* syntax/typing.nit:2076 */
             REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_parser___parser_nodes___AIsaExpr, ID_parser___parser_nodes___AIsaExpr)) /*cast AIsaExpr*/;
             if (UNTAG_Bool(REGB0)) {
-              /* syntax/typing.nit:2067 */
+              /* syntax/typing.nit:2077 */
               if (!once_value_9) {
                fra.me.REG[3] = BOX_NativeString("Warning: Prefer '!= null'.");
                REGB0 = TAG_Int(26);
@@ -13339,7 +13403,7 @@ void syntax___typing___ATypeCheckExpr___check_expr_cast(val_t p0, val_t p1, val_
               fra.me.REG[3] = fra.me.REG[3];
               CALL_syntax___syntax_base___AbsSyntaxVisitor___warning(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0], fra.me.REG[3]);
             } else {
-              /* syntax/typing.nit:2069 */
+              /* syntax/typing.nit:2079 */
               if (!once_value_10) {
                fra.me.REG[3] = BOX_NativeString("Warning: Prefer '.as(not null)'.");
                REGB0 = TAG_Int(32);
@@ -13367,7 +13431,7 @@ void syntax___typing___AIsaExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 2077;
+  fra.me.line = 2087;
   fra.me.meth = LOCATE_syntax___typing___AIsaExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -13379,21 +13443,21 @@ void syntax___typing___AIsaExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:2079 */
+  /* syntax/typing.nit:2089 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AIsaExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_parser___parser_nodes___AIsaExpr___n_type(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___ATypeCheckExpr___check_expr_cast(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3]);
-  /* syntax/typing.nit:2080 */
+  /* syntax/typing.nit:2090 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AIsaExpr___n_type(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___syntax_base___AType___is_typed(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:2081 */
+  /* syntax/typing.nit:2091 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AIsaExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___typing___AExpr___its_variable(fra.me.REG[3])(fra.me.REG[3]);
-  /* syntax/typing.nit:2082 */
+  /* syntax/typing.nit:2092 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -13408,17 +13472,17 @@ void syntax___typing___AIsaExpr___after_typing(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:2083 */
+    /* syntax/typing.nit:2093 */
     fra.me.REG[2] = CALL_syntax___typing___TypingVisitor___flow_ctx(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[4] = CALL_parser___parser_nodes___AIsaExpr___n_type(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[4] = CALL_syntax___syntax_base___AType___stype(fra.me.REG[4])(fra.me.REG[4]);
     fra.me.REG[4] = CALL_syntax___flow___FlowContext___sub_with(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0], fra.me.REG[3], fra.me.REG[4]);
     ATTR_syntax___typing___AExpr____if_true_flow_ctx(fra.me.REG[0]) = fra.me.REG[4];
   }
-  /* syntax/typing.nit:2085 */
+  /* syntax/typing.nit:2095 */
   fra.me.REG[1] = CALL_syntax___syntax_base___AbsSyntaxVisitor___type_bool(fra.me.REG[1])(fra.me.REG[1]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/typing.nit:2086 */
+  /* syntax/typing.nit:2096 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   label1: while(0);
@@ -13433,7 +13497,7 @@ void syntax___typing___AAsCastExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 2092;
+  fra.me.line = 2102;
   fra.me.meth = LOCATE_syntax___typing___AAsCastExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13444,22 +13508,22 @@ void syntax___typing___AAsCastExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:2094 */
+  /* syntax/typing.nit:2104 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AAsCastExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_parser___parser_nodes___AAsCastExpr___n_type(fra.me.REG[0])(fra.me.REG[0]);
   CALL_syntax___typing___ATypeCheckExpr___check_expr_cast(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3]);
-  /* syntax/typing.nit:2095 */
+  /* syntax/typing.nit:2105 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AAsCastExpr___n_type(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___syntax_base___AType___is_typed(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:2096 */
+  /* syntax/typing.nit:2106 */
   fra.me.REG[3] = CALL_parser___parser_nodes___AAsCastExpr___n_type(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AType___stype(fra.me.REG[3])(fra.me.REG[3]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[3];
-  /* syntax/typing.nit:2097 */
+  /* syntax/typing.nit:2107 */
   fra.me.REG[3] = ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -13488,7 +13552,7 @@ void syntax___typing___AAsNotnullExpr___after_typing(val_t p0, val_t p1){
       static val_t once_value_3; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 2102;
+  fra.me.line = 2112;
   fra.me.meth = LOCATE_syntax___typing___AAsNotnullExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -13500,20 +13564,20 @@ void syntax___typing___AAsNotnullExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:2104 */
+  /* syntax/typing.nit:2114 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AAsNotnullExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___syntax_base___AbsSyntaxVisitor___check_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:2105 */
+  /* syntax/typing.nit:2115 */
   fra.me.REG[2] = CALL_parser___parser_nodes___AAsNotnullExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:2106 */
+  /* syntax/typing.nit:2116 */
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_metamodel___static_type___MMTypeNone, ID_metamodel___static_type___MMTypeNone)) /*cast MMTypeNone*/;
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:2107 */
+    /* syntax/typing.nit:2117 */
     fra.me.REG[3] = CALL_parser___parser_nodes___AAsNotnullExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
     if (!once_value_2) {
       fra.me.REG[4] = BOX_NativeString("Type error: 'as(not null)' on 'null' value.");
@@ -13524,14 +13588,14 @@ void syntax___typing___AAsNotnullExpr___after_typing(val_t p0, val_t p1){
     } else fra.me.REG[4] = once_value_2;
     fra.me.REG[4] = fra.me.REG[4];
     CALL_syntax___syntax_base___AbsSyntaxVisitor___error(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3], fra.me.REG[4]);
-    /* syntax/typing.nit:2108 */
+    /* syntax/typing.nit:2118 */
     goto label1;
   } else {
-    /* syntax/typing.nit:2109 */
+    /* syntax/typing.nit:2119 */
     REGB0 = CALL_metamodel___static_type___MMType___is_nullable(fra.me.REG[2])(fra.me.REG[2]);
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* syntax/typing.nit:2110 */
+      /* syntax/typing.nit:2120 */
       fra.me.REG[2] = CALL_parser___parser_nodes___AAsNotnullExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
       if (!once_value_3) {
         fra.me.REG[4] = BOX_NativeString("Warning: 'as(not null)' on non nullable type.");
@@ -13544,12 +13608,12 @@ void syntax___typing___AAsNotnullExpr___after_typing(val_t p0, val_t p1){
       CALL_syntax___syntax_base___AbsSyntaxVisitor___warning(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2], fra.me.REG[4]);
     }
   }
-  /* syntax/typing.nit:2112 */
+  /* syntax/typing.nit:2122 */
   fra.me.REG[4] = CALL_parser___parser_nodes___AAsNotnullExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[4])(fra.me.REG[4]);
   fra.me.REG[4] = CALL_metamodel___static_type___MMType___as_notnull(fra.me.REG[4])(fra.me.REG[4]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[4];
-  /* syntax/typing.nit:2113 */
+  /* syntax/typing.nit:2123 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
   label1: while(0);
@@ -13563,7 +13627,7 @@ void syntax___typing___AProxyExpr___after_typing(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 2118;
+  fra.me.line = 2128;
   fra.me.meth = LOCATE_syntax___typing___AProxyExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13572,31 +13636,31 @@ void syntax___typing___AProxyExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:2120 */
+  /* syntax/typing.nit:2130 */
   fra.me.REG[1] = CALL_parser___parser_nodes___AProxyExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___syntax_base___AExpr___is_typed(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:2121 */
+  /* syntax/typing.nit:2131 */
   REGB0 = TAG_Bool(1);
   ATTR_syntax___typing___AExpr____is_typed(fra.me.REG[0]) = REGB0;
-  /* syntax/typing.nit:2122 */
+  /* syntax/typing.nit:2132 */
   fra.me.REG[1] = CALL_parser___parser_nodes___AProxyExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___syntax_base___AExpr___is_statement(fra.me.REG[1])(fra.me.REG[1]);
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:2123 */
+  /* syntax/typing.nit:2133 */
   fra.me.REG[1] = CALL_parser___parser_nodes___AProxyExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[1] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[1])(fra.me.REG[1]);
   ATTR_syntax___typing___AExpr____stype(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/typing.nit:2124 */
+  /* syntax/typing.nit:2134 */
   fra.me.REG[1] = CALL_parser___parser_nodes___AProxyExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[1] = ATTR_syntax___typing___AExpr____if_true_flow_ctx(fra.me.REG[1]);
   ATTR_syntax___typing___AExpr____if_true_flow_ctx(fra.me.REG[0]) = fra.me.REG[1];
-  /* syntax/typing.nit:2125 */
+  /* syntax/typing.nit:2135 */
   fra.me.REG[1] = CALL_parser___parser_nodes___AProxyExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[1] = ATTR_syntax___typing___AExpr____if_false_flow_ctx(fra.me.REG[1]);
   ATTR_syntax___typing___AExpr____if_false_flow_ctx(fra.me.REG[0]) = fra.me.REG[1];
@@ -13611,14 +13675,14 @@ val_t syntax___typing___AProxyExpr___is_self(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 2128;
+  fra.me.line = 2138;
   fra.me.meth = LOCATE_syntax___typing___AProxyExpr___is_self;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:2128 */
+  /* syntax/typing.nit:2138 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AProxyExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___typing___AExpr___is_self(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -13632,14 +13696,14 @@ val_t syntax___typing___AProxyExpr___its_variable(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 2130;
+  fra.me.line = 2140;
   fra.me.meth = LOCATE_syntax___typing___AProxyExpr___its_variable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* syntax/typing.nit:2130 */
+  /* syntax/typing.nit:2140 */
   fra.me.REG[0] = CALL_parser___parser_nodes___AProxyExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_syntax___typing___AExpr___its_variable(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
@@ -13657,7 +13721,7 @@ void syntax___typing___AOnceExpr___accept_typing(val_t p0, val_t p1){
     static val_t once_value_1; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 2134;
+  fra.me.line = 2144;
   fra.me.meth = LOCATE_syntax___typing___AOnceExpr___accept_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -13669,10 +13733,10 @@ void syntax___typing___AOnceExpr___accept_typing(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:2134 */
+  /* syntax/typing.nit:2144 */
   fra.me.REG[2] = fra.me.REG[0];
   fra.me.REG[3] = fra.me.REG[1];
-  /* syntax/typing.nit:2136 */
+  /* syntax/typing.nit:2146 */
   REGB0 = CALL_syntax___typing___TypingVisitor___once_count(fra.me.REG[3])(fra.me.REG[3]);
   REGB1 = TAG_Int(0);
   REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
@@ -13682,9 +13746,9 @@ void syntax___typing___AOnceExpr___accept_typing(val_t p0, val_t p1){
   }
   /* ../lib/standard/kernel.nit:237 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB1));
-  /* syntax/typing.nit:2136 */
+  /* syntax/typing.nit:2146 */
   if (UNTAG_Bool(REGB1)) {
-    /* syntax/typing.nit:2137 */
+    /* syntax/typing.nit:2147 */
     if (!once_value_1) {
       fra.me.REG[4] = BOX_NativeString("Useless once in a once expression.");
       REGB1 = TAG_Int(34);
@@ -13695,21 +13759,21 @@ void syntax___typing___AOnceExpr___accept_typing(val_t p0, val_t p1){
     fra.me.REG[4] = fra.me.REG[4];
     CALL_syntax___syntax_base___AbsSyntaxVisitor___warning(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2], fra.me.REG[4]);
   }
-  /* syntax/typing.nit:2139 */
+  /* syntax/typing.nit:2149 */
   REGB1 = CALL_syntax___typing___TypingVisitor___once_count(fra.me.REG[3])(fra.me.REG[3]);
   REGB0 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:238 */
   REGB0 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB0));
-  /* syntax/typing.nit:2139 */
+  /* syntax/typing.nit:2149 */
   CALL_syntax___typing___TypingVisitor___once_count__eq(fra.me.REG[3])(fra.me.REG[3], REGB0);
-  /* syntax/typing.nit:2141 */
+  /* syntax/typing.nit:2151 */
   CALL_SUPER_syntax___typing___AOnceExpr___accept_typing(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* syntax/typing.nit:2143 */
+  /* syntax/typing.nit:2153 */
   REGB0 = CALL_syntax___typing___TypingVisitor___once_count(fra.me.REG[3])(fra.me.REG[3]);
   REGB1 = TAG_Int(1);
   /* ../lib/standard/kernel.nit:240 */
   REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-  /* syntax/typing.nit:2143 */
+  /* syntax/typing.nit:2153 */
   CALL_syntax___typing___TypingVisitor___once_count__eq(fra.me.REG[3])(fra.me.REG[3], REGB1);
   stack_frame_head = fra.me.prev;
   return;
@@ -13725,7 +13789,7 @@ void syntax___typing___ADebugTypeExpr___after_typing(val_t p0, val_t p1){
     static val_t once_value_4; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_syntax___typing;
-  fra.me.line = 2148;
+  fra.me.line = 2158;
   fra.me.meth = LOCATE_syntax___typing___ADebugTypeExpr___after_typing;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -13738,27 +13802,27 @@ void syntax___typing___ADebugTypeExpr___after_typing(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* syntax/typing.nit:2150 */
+  /* syntax/typing.nit:2160 */
   fra.me.REG[2] = CALL_parser___parser_nodes___ADebugTypeExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___syntax_base___AbsSyntaxVisitor___check_expr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:2151 */
+  /* syntax/typing.nit:2161 */
   fra.me.REG[2] = CALL_parser___parser_nodes___ADebugTypeExpr___n_type(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_syntax___syntax_base___AType___is_typed(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
     goto label1;
   }
-  /* syntax/typing.nit:2152 */
+  /* syntax/typing.nit:2162 */
   fra.me.REG[2] = CALL_parser___parser_nodes___ADebugTypeExpr___n_expr(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_syntax___syntax_base___AExpr___stype(fra.me.REG[2])(fra.me.REG[2]);
-  /* syntax/typing.nit:2153 */
+  /* syntax/typing.nit:2163 */
   fra.me.REG[3] = CALL_parser___parser_nodes___ADebugTypeExpr___n_type(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_syntax___syntax_base___AType___stype(fra.me.REG[3])(fra.me.REG[3]);
-  /* syntax/typing.nit:2154 */
+  /* syntax/typing.nit:2164 */
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[2],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -13767,7 +13831,7 @@ void syntax___typing___ADebugTypeExpr___after_typing(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* syntax/typing.nit:2155 */
+    /* syntax/typing.nit:2165 */
     REGB0 = TAG_Int(5);
     fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
     if (!once_value_2) {
index 1362772..543c367 100644 (file)
@@ -202,7 +202,7 @@ val_t NEW_APropdef_parser___parser_nodes___ANode___init();
 void syntax___typing___AAttrPropdef___accept_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___AAttrPropdef___accept_typing_t)(val_t p0, val_t p1);
 val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___empty_init();
-val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9);
+val_t NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10);
 val_t NEW_AAttrPropdef_parser___parser_nodes___ANode___init();
 void syntax___typing___AMethPropdef___accept_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___AMethPropdef___accept_typing_t)(val_t p0, val_t p1);
@@ -213,7 +213,7 @@ void syntax___typing___AConcreteMethPropdef___after_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___AConcreteMethPropdef___after_typing_t)(val_t p0, val_t p1);
 val_t NEW_AConcreteMethPropdef_parser___parser_prod___AMethPropdef___empty_init();
 val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___empty_init();
-val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+val_t NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
 val_t NEW_AConcreteMethPropdef_parser___parser_nodes___ANode___init();
 val_t NEW_AConcreteMethPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 void syntax___typing___AConcreteInitPropdef___accept_typing(val_t p0, val_t p1);
@@ -222,10 +222,10 @@ void syntax___typing___AConcreteInitPropdef___after_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___AConcreteInitPropdef___after_typing_t)(val_t p0, val_t p1);
 val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___empty_init();
 val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___empty_init();
-val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
 val_t NEW_AConcreteInitPropdef_parser___parser_nodes___ANode___init();
 val_t NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___empty_init();
-val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6);
+val_t NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7);
 val_t NEW_AConcreteInitPropdef_parser___parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
 void syntax___typing___AExternInitPropdef___accept_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___AExternInitPropdef___accept_typing_t)(val_t p0, val_t p1);
@@ -244,7 +244,7 @@ val_t NEW_ASignature_parser___parser_nodes___ANode___init();
 void syntax___typing___AParam___after_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___AParam___after_typing_t)(val_t p0, val_t p1);
 val_t NEW_AParam_parser___parser_prod___AParam___empty_init();
-val_t NEW_AParam_parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2);
+val_t NEW_AParam_parser___parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, val_t p3);
 val_t NEW_AParam_parser___parser_nodes___ANode___init();
 val_t syntax___typing___AClosureDecl___escapable(val_t p0);
 typedef val_t (*syntax___typing___AClosureDecl___escapable_t)(val_t p0);
@@ -260,7 +260,7 @@ typedef val_t (*syntax___typing___AType___is_typed_t)(val_t p0);
 void syntax___typing___AType___after_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___AType___after_typing_t)(val_t p0, val_t p1);
 val_t NEW_AType_parser___parser_prod___AType___empty_init();
-val_t NEW_AType_parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2);
+val_t NEW_AType_parser___parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3);
 val_t NEW_AType_parser___parser_nodes___ANode___init();
 val_t syntax___typing___AExpr___is_typed(val_t p0);
 typedef val_t (*syntax___typing___AExpr___is_typed_t)(val_t p0);
@@ -286,7 +286,7 @@ val_t NEW_AExpr_parser___parser_nodes___ANode___init();
 void syntax___typing___AParExpr___warn_parentheses(val_t p0, val_t p1);
 typedef void (*syntax___typing___AParExpr___warn_parentheses_t)(val_t p0, val_t p1);
 val_t NEW_AParExpr_parser___parser_prod___AParExpr___empty_init();
-val_t NEW_AParExpr_parser___parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, val_t p2);
+val_t NEW_AParExpr_parser___parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, val_t p2, val_t p3);
 val_t NEW_AParExpr_parser___parser_nodes___ANode___init();
 void syntax___typing___AParExprs___after_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___AParExprs___after_typing_t)(val_t p0, val_t p1);
@@ -298,7 +298,7 @@ typedef val_t (*syntax___typing___AVardeclExpr___variable_t)(val_t p0);
 void syntax___typing___AVardeclExpr___after_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___AVardeclExpr___after_typing_t)(val_t p0, val_t p1);
 val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___empty_init();
-val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4);
+val_t NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5);
 val_t NEW_AVardeclExpr_parser___parser_nodes___ANode___init();
 void syntax___typing___ABlockExpr___accept_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___ABlockExpr___accept_typing_t)(val_t p0, val_t p1);
@@ -427,7 +427,7 @@ typedef void (*syntax___typing___ASelfExpr___after_typing_t)(val_t p0, val_t p1)
 val_t syntax___typing___ASelfExpr___is_self(val_t p0);
 typedef val_t (*syntax___typing___ASelfExpr___is_self_t)(val_t p0);
 val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___empty_init();
-val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0);
+val_t NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1);
 val_t NEW_ASelfExpr_parser___parser_nodes___ANode___init();
 val_t syntax___typing___AImplicitSelfExpr___is_implicit_self(val_t p0);
 typedef val_t (*syntax___typing___AImplicitSelfExpr___is_implicit_self_t)(val_t p0);
@@ -435,7 +435,7 @@ val_t NEW_AImplicitSelfExpr_parser___parser_prod___ASelfExpr___empty_init();
 val_t NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___empty_init();
 val_t NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
 val_t NEW_AImplicitSelfExpr_parser___parser_nodes___ANode___init();
-val_t NEW_AImplicitSelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0);
+val_t NEW_AImplicitSelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1);
 void syntax___typing___AIfexprExpr___accept_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___AIfexprExpr___accept_typing_t)(val_t p0, val_t p1);
 val_t NEW_AIfexprExpr_parser___parser_prod___AIfexprExpr___empty_init();
@@ -467,17 +467,17 @@ val_t NEW_AOrElseExpr_parser___parser_nodes___ANode___init();
 void syntax___typing___AIntExpr___after_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___AIntExpr___after_typing_t)(val_t p0, val_t p1);
 val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___empty_init();
-val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(val_t p0);
+val_t NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(val_t p0, val_t p1);
 val_t NEW_AIntExpr_parser___parser_nodes___ANode___init();
 void syntax___typing___AFloatExpr___after_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___AFloatExpr___after_typing_t)(val_t p0, val_t p1);
 val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___empty_init();
-val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0);
+val_t NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(val_t p0, val_t p1);
 val_t NEW_AFloatExpr_parser___parser_nodes___ANode___init();
 void syntax___typing___ACharExpr___after_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___ACharExpr___after_typing_t)(val_t p0, val_t p1);
 val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___empty_init();
-val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(val_t p0);
+val_t NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(val_t p0, val_t p1);
 val_t NEW_ACharExpr_parser___parser_nodes___ANode___init();
 void syntax___typing___AStringFormExpr___after_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___AStringFormExpr___after_typing_t)(val_t p0, val_t p1);
@@ -490,24 +490,24 @@ typedef void (*syntax___typing___ASuperstringExpr___after_typing_t)(val_t p0, va
   void OC_syntax___typing___ASuperstringExpr___after_typing_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
   typedef void (*OC_syntax___typing___ASuperstringExpr___after_typing_1_t)(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0);
 val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___empty_init();
-val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0);
+val_t NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, val_t p1);
 val_t NEW_ASuperstringExpr_parser___parser_nodes___ANode___init();
 void syntax___typing___ANullExpr___after_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___ANullExpr___after_typing_t)(val_t p0, val_t p1);
 val_t NEW_ANullExpr_parser___parser_prod___ANullExpr___empty_init();
-val_t NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr(val_t p0);
+val_t NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr(val_t p0, val_t p1);
 val_t NEW_ANullExpr_parser___parser_nodes___ANode___init();
 void syntax___typing___AArrayExpr___after_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___AArrayExpr___after_typing_t)(val_t p0, val_t p1);
 void syntax___typing___AArrayExpr___do_typing(val_t p0, val_t p1, val_t p2);
 typedef void (*syntax___typing___AArrayExpr___do_typing_t)(val_t p0, val_t p1, val_t p2);
 val_t NEW_AArrayExpr_parser___parser_prod___AArrayExpr___empty_init();
-val_t NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr(val_t p0);
+val_t NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1);
 val_t NEW_AArrayExpr_parser___parser_nodes___ANode___init();
 void syntax___typing___ARangeExpr___after_typing(val_t p0, val_t p1);
 typedef void (*syntax___typing___ARangeExpr___after_typing_t)(val_t p0, val_t p1);
 val_t NEW_ARangeExpr_parser___parser_prod___ARangeExpr___empty_init();
-val_t NEW_ARangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1);
+val_t NEW_ARangeExpr_parser___parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2);
 val_t NEW_ARangeExpr_parser___parser_nodes___ANode___init();
 val_t syntax___typing___ASuperExpr___init_in_superclass(val_t p0);
 typedef val_t (*syntax___typing___ASuperExpr___init_in_superclass_t)(val_t p0);
index 033f2d6..50fde66 100644 (file)
@@ -3,13 +3,9 @@
 /* out/indirect function for tables::TablesCapable::lexer_goto */
 val_t TablesCapable_lexer_goto___out( val_t recv, val_t i, val_t j )
 {
-bigint trans___i;
-bigint trans___j;
 bigint orig_return;
 val_t trans_return;
-trans___i = UNTAG_Int(i);
-trans___j = UNTAG_Int(j);
-orig_return = lexer_goto( NULL, trans___i, trans___j );
+orig_return = lexer_goto( NULL, UNTAG_Int(i), UNTAG_Int(j) );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -17,11 +13,9 @@ return trans_return;
 /* out/indirect function for tables::TablesCapable::lexer_accept */
 val_t TablesCapable_lexer_accept___out( val_t recv, val_t i )
 {
-bigint trans___i;
 bigint orig_return;
 val_t trans_return;
-trans___i = UNTAG_Int(i);
-orig_return = lexer_accept( NULL, trans___i );
+orig_return = lexer_accept( NULL, UNTAG_Int(i) );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -29,13 +23,9 @@ return trans_return;
 /* out/indirect function for tables::TablesCapable::parser_goto */
 val_t TablesCapable_parser_goto___out( val_t recv, val_t i, val_t j )
 {
-bigint trans___i;
-bigint trans___j;
 bigint orig_return;
 val_t trans_return;
-trans___i = UNTAG_Int(i);
-trans___j = UNTAG_Int(j);
-orig_return = parser_goto( NULL, trans___i, trans___j );
+orig_return = parser_goto( NULL, UNTAG_Int(i), UNTAG_Int(j) );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
@@ -43,13 +33,9 @@ return trans_return;
 /* out/indirect function for tables::TablesCapable::parser_action */
 val_t TablesCapable_parser_action___out( val_t recv, val_t i, val_t j )
 {
-bigint trans___i;
-bigint trans___j;
 bigint orig_return;
 val_t trans_return;
-trans___i = UNTAG_Int(i);
-trans___j = UNTAG_Int(j);
-orig_return = parser_action( NULL, trans___i, trans___j );
+orig_return = parser_action( NULL, UNTAG_Int(i), UNTAG_Int(j) );
 trans_return = TAG_Int(orig_return);
 nitni_local_ref_clean(  );
 return trans_return;
index da08cf9..3104f36 100644 (file)
@@ -3,7 +3,7 @@
 #include "tables_nit.h"
 
 static const int lexer_goto_row1[] = {
-       50,
+       51,
        9, 9, 1,
        10, 10, 2,
        13, 13, 3,
@@ -26,34 +26,35 @@ static const int lexer_goto_row1[] = {
        60, 60, 20,
        61, 61, 21,
        62, 62, 22,
-       65, 90, 23,
-       91, 91, 24,
-       93, 93, 25,
-       95, 95, 26,
-       96, 96, 27,
-       97, 97, 28,
-       98, 98, 29,
-       99, 99, 30,
-       100, 100, 31,
-       101, 101, 32,
-       102, 102, 33,
-       103, 104, 34,
-       105, 105, 35,
-       106, 107, 34,
-       108, 108, 36,
-       109, 109, 37,
-       110, 110, 38,
-       111, 111, 39,
-       112, 112, 40,
-       113, 113, 34,
-       114, 114, 41,
-       115, 115, 42,
-       116, 116, 43,
-       117, 117, 44,
-       118, 118, 45,
-       119, 119, 46,
-       120, 122, 34,
-       125, 125, 47
+       64, 64, 23,
+       65, 90, 24,
+       91, 91, 25,
+       93, 93, 26,
+       95, 95, 27,
+       96, 96, 28,
+       97, 97, 29,
+       98, 98, 30,
+       99, 99, 31,
+       100, 100, 32,
+       101, 101, 33,
+       102, 102, 34,
+       103, 104, 35,
+       105, 105, 36,
+       106, 107, 35,
+       108, 108, 37,
+       109, 109, 38,
+       110, 110, 39,
+       111, 111, 40,
+       112, 112, 41,
+       113, 113, 35,
+       114, 114, 42,
+       115, 115, 43,
+       116, 116, 44,
+       117, 117, 45,
+       118, 118, 46,
+       119, 119, 47,
+       120, 122, 35,
+       125, 125, 48
 };
 static const int lexer_goto_row2[] = {
        2,
@@ -62,7 +63,7 @@ static const int lexer_goto_row2[] = {
 };
 static const int lexer_goto_row4[] = {
        1,
-       10, 10, 48
+       10, 10, 49
 };
 static const int lexer_goto_row5[] = {
        1,
@@ -70,254 +71,252 @@ static const int lexer_goto_row5[] = {
 };
 static const int lexer_goto_row6[] = {
        1,
-       61, 61, 49
+       61, 61, 50
 };
 static const int lexer_goto_row7[] = {
        9,
-       0, 9, 50,
-       11, 12, 50,
-       14, 33, 50,
-       34, 34, 51,
-       35, 91, 50,
-       92, 92, 52,
-       93, 122, 50,
-       123, 123, 53,
-       124, 255, 50
+       0, 9, 51,
+       11, 12, 51,
+       14, 33, 51,
+       34, 34, 52,
+       35, 91, 51,
+       92, 92, 53,
+       93, 122, 51,
+       123, 123, 54,
+       124, 255, 51
 };
 static const int lexer_goto_row8[] = {
        5,
-       0, 9, 54,
-       10, 10, 55,
-       11, 12, 54,
-       13, 13, 56,
-       14, 255, 54
+       0, 9, 55,
+       10, 10, 56,
+       11, 12, 55,
+       13, 13, 57,
+       14, 255, 55
 };
 static const int lexer_goto_row10[] = {
        7,
-       0, 9, 57,
-       11, 12, 57,
-       14, 38, 57,
-       39, 39, 58,
-       40, 91, 57,
-       92, 92, 59,
-       93, 255, 57
+       0, 9, 58,
+       11, 12, 58,
+       14, 38, 58,
+       39, 39, 59,
+       40, 91, 58,
+       92, 92, 60,
+       93, 255, 58
 };
 static const int lexer_goto_row14[] = {
        1,
-       61, 61, 60
+       61, 61, 61
 };
 static const int lexer_goto_row16[] = {
        1,
-       61, 61, 61
+       61, 61, 62
 };
 static const int lexer_goto_row17[] = {
        2,
-       46, 46, 62,
-       48, 57, 63
+       46, 46, 63,
+       48, 57, 64
 };
 static const int lexer_goto_row19[] = {
        2,
-       46, 46, 64,
+       46, 46, 65,
        48, 57, 18
 };
 static const int lexer_goto_row20[] = {
        1,
-       58, 58, 65
+       58, 58, 66
 };
 static const int lexer_goto_row21[] = {
        2,
-       60, 60, 66,
-       61, 61, 67
+       60, 60, 67,
+       61, 61, 68
 };
 static const int lexer_goto_row22[] = {
        1,
-       61, 61, 68
+       61, 61, 69
 };
 static const int lexer_goto_row23[] = {
        2,
-       61, 61, 69,
-       62, 62, 70
+       61, 61, 70,
+       62, 62, 71
 };
-static const int lexer_goto_row24[] = {
+static const int lexer_goto_row25[] = {
        4,
-       48, 57, 71,
-       65, 90, 72,
-       95, 95, 73,
-       97, 122, 74
-};
-static const int lexer_goto_row27[] = {
-       2,
-       95, 95, 75,
-       97, 122, 76
+       48, 57, 72,
+       65, 90, 73,
+       95, 95, 74,
+       97, 122, 75
 };
 static const int lexer_goto_row28[] = {
-       1,
-       123, 123, 77
+       2,
+       95, 95, 76,
+       97, 122, 77
 };
 static const int lexer_goto_row29[] = {
-       10,
-       48, 57, 78,
-       65, 90, 79,
-       95, 95, 80,
-       97, 97, 81,
-       98, 98, 82,
-       99, 109, 81,
-       110, 110, 83,
-       111, 114, 81,
-       115, 115, 84,
-       116, 122, 81
+       1,
+       123, 123, 78
 };
 static const int lexer_goto_row30[] = {
-       4,
-       48, 95, -30,
-       97, 113, 81,
-       114, 114, 85,
-       115, 122, 81
+       10,
+       48, 57, 79,
+       65, 90, 80,
+       95, 95, 81,
+       97, 97, 82,
+       98, 98, 83,
+       99, 109, 82,
+       110, 110, 84,
+       111, 114, 82,
+       115, 115, 85,
+       116, 122, 82
 };
 static const int lexer_goto_row31[] = {
-       6,
-       48, 95, -30,
-       97, 107, 81,
-       108, 108, 86,
-       109, 110, 81,
-       111, 111, 87,
-       112, 122, 81
+       4,
+       48, 95, -31,
+       97, 113, 82,
+       114, 114, 86,
+       115, 122, 82
 };
 static const int lexer_goto_row32[] = {
-       4,
-       48, 95, -30,
-       97, 110, 81,
+       6,
+       48, 95, -31,
+       97, 107, 82,
+       108, 108, 87,
+       109, 110, 82,
        111, 111, 88,
-       112, 122, 81
+       112, 122, 82
 };
 static const int lexer_goto_row33[] = {
-       7,
-       48, 107, -32,
-       108, 108, 89,
-       109, 109, 81,
-       110, 110, 90,
-       111, 119, 81,
-       120, 120, 91,
-       121, 122, 81
+       4,
+       48, 95, -31,
+       97, 110, 82,
+       111, 111, 89,
+       112, 122, 82
 };
 static const int lexer_goto_row34[] = {
        7,
-       48, 95, -30,
-       97, 97, 92,
-       98, 110, 81,
-       111, 111, 93,
-       112, 116, 81,
-       117, 117, 94,
-       118, 122, 81
+       48, 107, -33,
+       108, 108, 90,
+       109, 109, 82,
+       110, 110, 91,
+       111, 119, 82,
+       120, 120, 92,
+       121, 122, 82
 };
 static const int lexer_goto_row35[] = {
-       2,
-       48, 95, -30,
-       97, 122, 81
+       7,
+       48, 95, -31,
+       97, 97, 93,
+       98, 110, 82,
+       111, 111, 94,
+       112, 116, 82,
+       117, 117, 95,
+       118, 122, 82
 };
 static const int lexer_goto_row36[] = {
-       9,
-       48, 95, -30,
-       97, 101, 81,
-       102, 102, 95,
-       103, 108, 81,
-       109, 109, 96,
-       110, 110, 97,
-       111, 114, 81,
-       115, 115, 98,
-       116, 122, 81
+       2,
+       48, 95, -31,
+       97, 122, 82
 };
 static const int lexer_goto_row37[] = {
-       5,
-       48, 95, -30,
-       97, 97, 99,
-       98, 110, 81,
-       111, 111, 100,
-       112, 122, 81
+       9,
+       48, 95, -31,
+       97, 101, 82,
+       102, 102, 96,
+       103, 108, 82,
+       109, 109, 97,
+       110, 110, 98,
+       111, 114, 82,
+       115, 115, 99,
+       116, 122, 82
 };
 static const int lexer_goto_row38[] = {
-       3,
-       48, 110, -33,
+       5,
+       48, 95, -31,
+       97, 97, 100,
+       98, 110, 82,
        111, 111, 101,
-       112, 122, 81
+       112, 122, 82
 };
 static const int lexer_goto_row39[] = {
-       8,
-       48, 95, -30,
-       97, 100, 81,
-       101, 101, 102,
-       102, 110, 81,
-       111, 111, 103,
-       112, 116, 81,
-       117, 117, 104,
-       118, 122, 81
+       3,
+       48, 110, -34,
+       111, 111, 102,
+       112, 122, 82
 };
 static const int lexer_goto_row40[] = {
-       6,
-       48, 95, -30,
-       97, 109, 81,
-       110, 110, 105,
-       111, 113, 81,
-       114, 114, 106,
-       115, 122, 81
+       8,
+       48, 95, -31,
+       97, 100, 82,
+       101, 101, 103,
+       102, 110, 82,
+       111, 111, 104,
+       112, 116, 82,
+       117, 117, 105,
+       118, 122, 82
 };
 static const int lexer_goto_row41[] = {
-       5,
-       48, 95, -30,
-       97, 97, 107,
-       98, 113, 81,
-       114, 114, 108,
-       115, 122, 81
+       6,
+       48, 95, -31,
+       97, 109, 82,
+       110, 110, 106,
+       111, 113, 82,
+       114, 114, 107,
+       115, 122, 82
 };
 static const int lexer_goto_row42[] = {
-       3,
-       48, 100, -40,
-       101, 101, 109,
-       102, 122, 81
+       5,
+       48, 95, -31,
+       97, 97, 108,
+       98, 113, 82,
+       114, 114, 109,
+       115, 122, 82
 };
 static const int lexer_goto_row43[] = {
-       7,
-       48, 100, -40,
+       3,
+       48, 100, -41,
        101, 101, 110,
-       102, 111, 81,
-       112, 112, 111,
-       113, 116, 81,
-       117, 117, 112,
-       118, 122, 81
+       102, 122, 82
 };
 static const int lexer_goto_row44[] = {
+       5,
+       48, 100, -41,
+       101, 101, 111,
+       102, 116, 82,
+       117, 117, 112,
+       118, 122, 82
+};
+static const int lexer_goto_row45[] = {
        8,
-       48, 95, -30,
-       97, 103, 81,
+       48, 95, -31,
+       97, 103, 82,
        104, 104, 113,
-       105, 113, 81,
+       105, 113, 82,
        114, 114, 114,
-       115, 120, 81,
+       115, 120, 82,
        121, 121, 115,
-       122, 122, 81
+       122, 122, 82
 };
-static const int lexer_goto_row45[] = {
+static const int lexer_goto_row46[] = {
        3,
-       48, 109, -41,
+       48, 109, -42,
        110, 110, 116,
-       111, 122, 81
+       111, 122, 82
 };
-static const int lexer_goto_row46[] = {
+static const int lexer_goto_row47[] = {
        3,
-       48, 95, -30,
+       48, 95, -31,
        97, 97, 117,
-       98, 122, 81
+       98, 122, 82
 };
-static const int lexer_goto_row47[] = {
+static const int lexer_goto_row48[] = {
        5,
-       48, 103, -45,
+       48, 103, -46,
        104, 104, 118,
-       105, 113, 81,
+       105, 113, 82,
        114, 114, 119,
-       115, 122, 81
+       115, 122, 82
 };
-static const int lexer_goto_row48[] = {
-       9,
+static const int lexer_goto_row49[] = {
+       11,
        0, 9, 120,
        11, 12, 120,
        14, 33, 120,
@@ -326,1208 +325,1679 @@ static const int lexer_goto_row48[] = {
        92, 92, 122,
        93, 122, 120,
        123, 123, 123,
-       124, 255, 120
+       124, 124, 120,
+       125, 125, 124,
+       126, 255, 120
 };
-static const int lexer_goto_row51[] = {
-       1,
-       0, 255, -8
+static const int lexer_goto_row52[] = {
+       3,
+       0, 33, -8,
+       34, 34, 125,
+       35, 255, -8
 };
 static const int lexer_goto_row53[] = {
+       1,
+       34, 34, 126
+};
+static const int lexer_goto_row54[] = {
        3,
-       0, 9, 124,
-       11, 12, 124,
-       14, 255, 124
+       0, 9, 127,
+       11, 12, 127,
+       14, 255, 127
 };
-static const int lexer_goto_row55[] = {
+static const int lexer_goto_row56[] = {
        1,
        0, 255, -9
 };
-static const int lexer_goto_row57[] = {
+static const int lexer_goto_row58[] = {
        1,
-       10, 10, 125
+       10, 10, 128
 };
-static const int lexer_goto_row58[] = {
+static const int lexer_goto_row59[] = {
        1,
-       39, 39, 126
+       39, 39, 129
 };
 static const int lexer_goto_row60[] = {
-       3,
-       0, 9, 127,
-       11, 12, 127,
-       14, 255, 127
-};
-static const int lexer_goto_row63[] = {
        1,
-       46, 46, 128
+       39, 39, 130
+};
+static const int lexer_goto_row61[] = {
+       3,
+       0, 9, 131,
+       11, 12, 131,
+       14, 255, 131
 };
 static const int lexer_goto_row64[] = {
        1,
-       48, 57, 63
+       46, 46, 132
 };
 static const int lexer_goto_row65[] = {
        1,
-       48, 57, 63
+       48, 57, 64
 };
-static const int lexer_goto_row68[] = {
+static const int lexer_goto_row66[] = {
        1,
-       62, 62, 129
+       48, 57, 64
 };
-static const int lexer_goto_row72[] = {
+static const int lexer_goto_row69[] = {
        1,
-       48, 122, -25
+       62, 62, 133
 };
 static const int lexer_goto_row73[] = {
        1,
-       48, 122, -25
+       48, 122, -26
 };
 static const int lexer_goto_row74[] = {
        1,
-       48, 122, -25
+       48, 122, -26
 };
 static const int lexer_goto_row75[] = {
        1,
-       48, 122, -25
+       48, 122, -26
 };
 static const int lexer_goto_row76[] = {
        1,
-       100, 100, 130
+       48, 122, -26
 };
 static const int lexer_goto_row77[] = {
-       4,
-       48, 57, 131,
-       65, 90, 132,
-       95, 95, 133,
-       97, 122, 134
+       1,
+       100, 100, 134
 };
 static const int lexer_goto_row78[] = {
-       5,
-       0, 91, 135,
-       92, 92, 136,
-       93, 95, 135,
-       96, 96, 137,
-       97, 255, 135
+       4,
+       48, 57, 135,
+       65, 90, 136,
+       95, 95, 137,
+       97, 122, 138
 };
 static const int lexer_goto_row79[] = {
-       1,
-       48, 122, -36
+       5,
+       0, 91, 139,
+       92, 92, 140,
+       93, 95, 139,
+       96, 96, 141,
+       97, 255, 139
 };
 static const int lexer_goto_row80[] = {
        1,
-       48, 122, -36
+       48, 122, -37
 };
 static const int lexer_goto_row81[] = {
        1,
-       48, 122, -36
+       48, 122, -37
 };
 static const int lexer_goto_row82[] = {
        1,
-       48, 122, -36
+       48, 122, -37
 };
 static const int lexer_goto_row83[] = {
-       5,
-       48, 110, -33,
-       111, 111, 138,
-       112, 114, 81,
-       115, 115, 139,
-       116, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row84[] = {
-       4,
-       48, 95, -30,
-       97, 99, 81,
-       100, 100, 140,
-       101, 122, 81
+       5,
+       48, 110, -34,
+       111, 111, 142,
+       112, 114, 82,
+       115, 115, 143,
+       116, 122, 82
 };
 static const int lexer_goto_row85[] = {
        4,
-       48, 95, -30,
-       97, 114, 81,
-       115, 115, 141,
-       116, 122, 81
+       48, 95, -31,
+       97, 99, 82,
+       100, 100, 144,
+       101, 122, 82
 };
 static const int lexer_goto_row86[] = {
-       3,
-       48, 100, -40,
-       101, 101, 142,
-       102, 122, 81
+       4,
+       48, 95, -31,
+       97, 114, 82,
+       115, 115, 145,
+       116, 122, 82
 };
 static const int lexer_goto_row87[] = {
        3,
-       48, 95, -30,
-       97, 97, 143,
-       98, 122, 81
+       48, 100, -41,
+       101, 101, 146,
+       102, 122, 82
 };
 static const int lexer_goto_row88[] = {
        3,
-       48, 109, -41,
-       110, 110, 144,
-       111, 122, 81
+       48, 95, -31,
+       97, 97, 147,
+       98, 122, 82
 };
 static const int lexer_goto_row89[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 109, -42,
+       110, 110, 148,
+       111, 122, 82
 };
 static const int lexer_goto_row90[] = {
-       3,
-       48, 114, -86,
-       115, 115, 145,
-       116, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row91[] = {
-       5,
-       48, 99, -85,
-       100, 100, 146,
-       101, 116, 81,
-       117, 117, 147,
-       118, 122, 81
+       3,
+       48, 114, -87,
+       115, 115, 149,
+       116, 122, 82
 };
 static const int lexer_goto_row92[] = {
-       4,
-       48, 95, -30,
-       97, 115, 81,
-       116, 116, 148,
-       117, 122, 81
+       5,
+       48, 99, -86,
+       100, 100, 150,
+       101, 116, 82,
+       117, 117, 151,
+       118, 122, 82
 };
 static const int lexer_goto_row93[] = {
-       3,
-       48, 107, -32,
-       108, 108, 149,
-       109, 122, 81
+       4,
+       48, 95, -31,
+       97, 115, 82,
+       116, 116, 152,
+       117, 122, 82
 };
 static const int lexer_goto_row94[] = {
        3,
-       48, 113, -31,
-       114, 114, 150,
-       115, 122, 81
+       48, 107, -33,
+       108, 108, 153,
+       109, 122, 82
 };
 static const int lexer_goto_row95[] = {
        3,
-       48, 109, -41,
-       110, 110, 151,
-       111, 122, 81
+       48, 113, -32,
+       114, 114, 154,
+       115, 122, 82
 };
 static const int lexer_goto_row96[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 109, -42,
+       110, 110, 155,
+       111, 122, 82
 };
 static const int lexer_goto_row97[] = {
-       4,
-       48, 95, -30,
-       97, 111, 81,
-       112, 112, 152,
-       113, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row98[] = {
-       6,
-       48, 95, -30,
-       97, 104, 81,
-       105, 105, 153,
-       106, 115, 81,
-       116, 116, 154,
-       117, 122, 81
+       4,
+       48, 95, -31,
+       97, 111, 82,
+       112, 112, 156,
+       113, 122, 82
 };
 static const int lexer_goto_row99[] = {
-       5,
-       48, 95, -30,
-       97, 97, 155,
-       98, 114, 81,
-       115, 115, 156,
-       116, 122, 81
+       6,
+       48, 95, -31,
+       97, 104, 82,
+       105, 105, 157,
+       106, 115, 82,
+       116, 116, 158,
+       117, 122, 82
 };
 static const int lexer_goto_row100[] = {
-       3,
-       48, 97, -30,
-       98, 98, 157,
-       99, 122, 81
+       5,
+       48, 95, -31,
+       97, 97, 159,
+       98, 114, 82,
+       115, 115, 160,
+       116, 122, 82
 };
 static const int lexer_goto_row101[] = {
        3,
-       48, 110, -33,
-       111, 111, 158,
-       112, 122, 81
+       48, 97, -31,
+       98, 98, 161,
+       99, 122, 82
 };
 static const int lexer_goto_row102[] = {
        3,
-       48, 99, -85,
-       100, 100, 159,
-       101, 122, 81
+       48, 110, -34,
+       111, 111, 162,
+       112, 122, 82
 };
 static const int lexer_goto_row103[] = {
-       4,
-       48, 95, -30,
-       97, 118, 81,
-       119, 119, 160,
-       120, 122, 81
+       3,
+       48, 99, -86,
+       100, 100, 163,
+       101, 122, 82
 };
 static const int lexer_goto_row104[] = {
-       3,
-       48, 115, -93,
-       116, 116, 161,
-       117, 122, 81
+       4,
+       48, 95, -31,
+       97, 118, 82,
+       119, 119, 164,
+       120, 122, 82
 };
 static const int lexer_goto_row105[] = {
        3,
-       48, 107, -32,
-       108, 108, 162,
-       109, 122, 81
+       48, 115, -94,
+       116, 116, 165,
+       117, 122, 82
 };
 static const int lexer_goto_row106[] = {
-       4,
-       48, 95, -30,
-       97, 98, 81,
-       99, 99, 163,
-       100, 122, 81
+       3,
+       48, 107, -33,
+       108, 108, 166,
+       109, 122, 82
 };
 static const int lexer_goto_row107[] = {
-       1,
-       48, 122, -36
+       4,
+       48, 95, -31,
+       97, 98, 82,
+       99, 99, 167,
+       100, 122, 82
 };
 static const int lexer_goto_row108[] = {
-       3,
-       48, 98, -107,
-       99, 99, 164,
-       100, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row109[] = {
-       5,
-       48, 104, -99,
-       105, 105, 165,
-       106, 110, 81,
-       111, 111, 166,
-       112, 122, 81
+       3,
+       48, 98, -108,
+       99, 99, 168,
+       100, 122, 82
 };
 static const int lexer_goto_row110[] = {
-       7,
-       48, 95, -30,
-       97, 97, 167,
-       98, 99, 81,
-       100, 100, 168,
-       101, 115, 81,
-       116, 116, 169,
-       117, 122, 81
+       5,
+       48, 104, -100,
+       105, 105, 169,
+       106, 110, 82,
+       111, 111, 170,
+       112, 122, 82
 };
 static const int lexer_goto_row111[] = {
-       3,
-       48, 107, -32,
-       108, 108, 170,
-       109, 122, 81
+       7,
+       48, 95, -31,
+       97, 97, 171,
+       98, 99, 82,
+       100, 100, 172,
+       101, 115, 82,
+       116, 116, 173,
+       117, 122, 82
 };
 static const int lexer_goto_row112[] = {
        3,
-       48, 100, -40,
-       101, 101, 171,
-       102, 122, 81
+       48, 107, -33,
+       108, 108, 174,
+       109, 122, 82
 };
 static const int lexer_goto_row113[] = {
        3,
-       48, 111, -98,
-       112, 112, 172,
-       113, 122, 81
+       48, 111, -99,
+       112, 112, 175,
+       113, 122, 82
 };
 static const int lexer_goto_row114[] = {
        3,
-       48, 100, -40,
-       101, 101, 173,
-       102, 122, 81
+       48, 100, -41,
+       101, 101, 176,
+       102, 122, 82
 };
 static const int lexer_goto_row115[] = {
        4,
-       48, 95, -30,
-       97, 116, 81,
-       117, 117, 174,
-       118, 122, 81
+       48, 95, -31,
+       97, 116, 82,
+       117, 117, 177,
+       118, 122, 82
 };
 static const int lexer_goto_row116[] = {
        3,
-       48, 111, -98,
-       112, 112, 175,
-       113, 122, 81
+       48, 111, -99,
+       112, 112, 178,
+       113, 122, 82
 };
 static const int lexer_goto_row117[] = {
        3,
-       48, 104, -99,
-       105, 105, 176,
-       106, 122, 81
+       48, 104, -100,
+       105, 105, 179,
+       106, 122, 82
 };
 static const int lexer_goto_row118[] = {
        3,
-       48, 113, -31,
-       114, 114, 177,
-       115, 122, 81
+       48, 113, -32,
+       114, 114, 180,
+       115, 122, 82
 };
 static const int lexer_goto_row119[] = {
        3,
-       48, 104, -99,
-       105, 105, 178,
-       106, 122, 81
+       48, 104, -100,
+       105, 105, 181,
+       106, 122, 82
 };
 static const int lexer_goto_row120[] = {
        3,
-       48, 104, -99,
-       105, 105, 179,
-       106, 122, 81
+       48, 104, -100,
+       105, 105, 182,
+       106, 122, 82
 };
 static const int lexer_goto_row121[] = {
-       1,
-       0, 255, -49
+       2,
+       0, 123, -50,
+       124, 255, 120
 };
 static const int lexer_goto_row123[] = {
        3,
-       0, 9, 180,
-       11, 12, 180,
-       14, 255, 180
+       0, 9, 183,
+       11, 12, 183,
+       14, 255, 183
 };
 static const int lexer_goto_row125[] = {
-       1,
-       0, 255, -8
+       3,
+       0, 124, -50,
+       125, 125, 184,
+       126, 255, 120
+};
+static const int lexer_goto_row127[] = {
+       11,
+       0, 9, 185,
+       10, 10, 186,
+       11, 12, 185,
+       13, 13, 187,
+       14, 33, 185,
+       34, 34, 188,
+       35, 91, 185,
+       92, 92, 189,
+       93, 122, 185,
+       123, 123, 190,
+       124, 255, 185
 };
 static const int lexer_goto_row128[] = {
        1,
-       39, 39, 181
+       0, 255, -53
 };
 static const int lexer_goto_row131[] = {
-       1,
-       101, 101, 182
+       9,
+       0, 9, 191,
+       10, 10, 192,
+       11, 12, 191,
+       13, 13, 193,
+       14, 38, 191,
+       39, 39, 194,
+       40, 91, 191,
+       92, 92, 195,
+       93, 255, 191
 };
 static const int lexer_goto_row132[] = {
        1,
-       48, 122, -78
-};
-static const int lexer_goto_row133[] = {
-       1,
-       48, 122, -78
-};
-static const int lexer_goto_row134[] = {
-       1,
-       48, 122, -78
+       39, 39, 196
 };
 static const int lexer_goto_row135[] = {
        1,
-       48, 122, -78
+       101, 101, 197
 };
 static const int lexer_goto_row136[] = {
        1,
-       0, 255, -79
+       48, 122, -79
 };
 static const int lexer_goto_row137[] = {
        1,
-       0, 255, 183
+       48, 122, -79
 };
 static const int lexer_goto_row138[] = {
        1,
-       125, 125, 184
+       48, 122, -79
 };
 static const int lexer_goto_row139[] = {
-       3,
-       48, 113, -31,
-       114, 114, 185,
-       115, 122, 81
+       1,
+       48, 122, -79
 };
 static const int lexer_goto_row140[] = {
-       3,
-       48, 115, -93,
-       116, 116, 186,
-       117, 122, 81
+       1,
+       0, 255, -80
 };
 static const int lexer_goto_row141[] = {
        1,
-       48, 122, -36
+       0, 255, 198
 };
 static const int lexer_goto_row142[] = {
-       3,
-       48, 100, -40,
-       101, 101, 187,
-       102, 122, 81
+       1,
+       125, 125, 199
 };
 static const int lexer_goto_row143[] = {
        3,
-       48, 95, -30,
-       97, 97, 188,
-       98, 122, 81
+       48, 113, -32,
+       114, 114, 200,
+       115, 122, 82
 };
 static const int lexer_goto_row144[] = {
        3,
-       48, 114, -86,
-       115, 115, 189,
-       116, 122, 81
+       48, 115, -94,
+       116, 116, 201,
+       117, 122, 82
 };
 static const int lexer_goto_row145[] = {
-       3,
-       48, 115, -93,
-       116, 116, 190,
-       117, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row146[] = {
        3,
-       48, 100, -40,
-       101, 101, 191,
-       102, 122, 81
+       48, 100, -41,
+       101, 101, 202,
+       102, 122, 82
 };
 static const int lexer_goto_row147[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 95, -31,
+       97, 97, 203,
+       98, 122, 82
 };
 static const int lexer_goto_row148[] = {
-       4,
-       48, 95, -30,
-       97, 108, 81,
-       109, 109, 192,
-       110, 122, 81
+       3,
+       48, 114, -87,
+       115, 115, 204,
+       116, 122, 82
 };
 static const int lexer_goto_row149[] = {
        3,
-       48, 100, -40,
-       101, 101, 193,
-       102, 122, 81
+       48, 115, -94,
+       116, 116, 205,
+       117, 122, 82
 };
 static const int lexer_goto_row150[] = {
        3,
-       48, 114, -86,
-       115, 115, 194,
-       116, 122, 81
+       48, 100, -41,
+       101, 101, 206,
+       102, 122, 82
 };
 static const int lexer_goto_row151[] = {
        1,
-       48, 122, -36
+       48, 122, -37
 };
 static const int lexer_goto_row152[] = {
-       1,
-       48, 122, -36
+       4,
+       48, 95, -31,
+       97, 108, 82,
+       109, 109, 207,
+       110, 122, 82
 };
 static const int lexer_goto_row153[] = {
        3,
-       48, 110, -33,
-       111, 111, 195,
-       112, 122, 81
+       48, 100, -41,
+       101, 101, 208,
+       102, 122, 82
 };
 static const int lexer_goto_row154[] = {
        3,
-       48, 115, -93,
-       116, 116, 196,
-       117, 122, 81
+       48, 114, -87,
+       115, 115, 209,
+       116, 122, 82
 };
 static const int lexer_goto_row155[] = {
-       5,
-       48, 100, -40,
-       101, 101, 197,
-       102, 113, 81,
-       114, 114, 198,
-       115, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row156[] = {
        1,
-       48, 122, -36
+       48, 122, -37
 };
 static const int lexer_goto_row157[] = {
        3,
-       48, 100, -40,
-       101, 101, 199,
-       102, 122, 81
+       48, 110, -34,
+       111, 111, 210,
+       112, 122, 82
 };
 static const int lexer_goto_row158[] = {
        3,
-       48, 100, -40,
-       101, 101, 200,
-       102, 122, 81
+       48, 115, -94,
+       116, 116, 211,
+       117, 122, 82
 };
 static const int lexer_goto_row159[] = {
-       3,
-       48, 111, -98,
-       112, 112, 201,
-       113, 122, 81
+       5,
+       48, 100, -41,
+       101, 101, 212,
+       102, 113, 82,
+       114, 114, 213,
+       115, 122, 82
 };
 static const int lexer_goto_row160[] = {
-       3,
-       48, 116, -116,
-       117, 117, 202,
-       118, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row161[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 100, -41,
+       101, 101, 214,
+       102, 122, 82
 };
 static const int lexer_goto_row162[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 100, -41,
+       101, 101, 215,
+       102, 122, 82
 };
 static const int lexer_goto_row163[] = {
        3,
-       48, 107, -32,
-       108, 108, 203,
-       109, 122, 81
+       48, 111, -99,
+       112, 112, 216,
+       113, 122, 82
 };
 static const int lexer_goto_row164[] = {
        3,
-       48, 100, -40,
-       101, 101, 204,
-       102, 122, 81
+       48, 116, -116,
+       117, 117, 217,
+       118, 122, 82
 };
 static const int lexer_goto_row165[] = {
-       4,
-       48, 95, -30,
-       97, 106, 81,
-       107, 107, 205,
-       108, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row166[] = {
-       4,
-       48, 95, -30,
-       97, 117, 81,
-       118, 118, 206,
-       119, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row167[] = {
        3,
-       48, 115, -93,
-       116, 116, 207,
-       117, 122, 81
+       48, 107, -33,
+       108, 108, 218,
+       109, 122, 82
 };
 static const int lexer_goto_row168[] = {
        3,
-       48, 99, -85,
-       100, 100, 208,
-       101, 122, 81
+       48, 100, -41,
+       101, 101, 219,
+       102, 122, 82
 };
 static const int lexer_goto_row169[] = {
-       3,
-       48, 100, -40,
-       101, 101, 209,
-       102, 122, 81
+       4,
+       48, 95, -31,
+       97, 106, 82,
+       107, 107, 220,
+       108, 122, 82
 };
 static const int lexer_goto_row170[] = {
-       3,
-       48, 116, -116,
-       117, 117, 210,
-       118, 122, 81
+       4,
+       48, 95, -31,
+       97, 117, 82,
+       118, 118, 221,
+       119, 122, 82
 };
 static const int lexer_goto_row171[] = {
        3,
-       48, 101, -37,
-       102, 102, 211,
-       103, 122, 81
+       48, 115, -94,
+       116, 116, 222,
+       117, 122, 82
 };
 static const int lexer_goto_row172[] = {
        3,
-       48, 98, -107,
-       99, 99, 212,
-       100, 122, 81
+       48, 99, -86,
+       100, 100, 223,
+       101, 122, 82
 };
 static const int lexer_goto_row173[] = {
        3,
-       48, 100, -40,
-       101, 101, 213,
-       102, 122, 81
+       48, 100, -41,
+       101, 101, 224,
+       102, 122, 82
 };
 static const int lexer_goto_row174[] = {
        3,
-       48, 109, -41,
-       110, 110, 214,
-       111, 122, 81
+       48, 116, -116,
+       117, 117, 225,
+       118, 122, 82
 };
 static const int lexer_goto_row175[] = {
        3,
-       48, 100, -40,
-       101, 101, 215,
-       102, 122, 81
+       48, 101, -38,
+       102, 102, 226,
+       103, 122, 82
 };
 static const int lexer_goto_row176[] = {
        3,
-       48, 100, -40,
-       101, 101, 216,
-       102, 122, 81
+       48, 100, -41,
+       101, 101, 227,
+       102, 122, 82
 };
 static const int lexer_goto_row177[] = {
        3,
-       48, 117, -167,
-       118, 118, 217,
-       119, 122, 81
+       48, 109, -42,
+       110, 110, 228,
+       111, 122, 82
 };
 static const int lexer_goto_row178[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 100, -41,
+       101, 101, 229,
+       102, 122, 82
 };
 static const int lexer_goto_row179[] = {
        3,
-       48, 107, -32,
-       108, 108, 218,
-       109, 122, 81
+       48, 100, -41,
+       101, 101, 230,
+       102, 122, 82
 };
 static const int lexer_goto_row180[] = {
        3,
-       48, 115, -93,
-       116, 116, 219,
-       117, 122, 81
+       48, 117, -171,
+       118, 118, 231,
+       119, 122, 82
 };
 static const int lexer_goto_row181[] = {
        1,
-       0, 255, -49
+       48, 122, -37
+};
+static const int lexer_goto_row182[] = {
+       3,
+       48, 107, -33,
+       108, 108, 232,
+       109, 122, 82
 };
 static const int lexer_goto_row183[] = {
-       1,
-       98, 98, 220
+       3,
+       48, 115, -94,
+       116, 116, 233,
+       117, 122, 82
 };
 static const int lexer_goto_row184[] = {
        1,
-       0, 255, -79
+       0, 255, -122
+};
+static const int lexer_goto_row185[] = {
+       11,
+       0, 9, 234,
+       10, 10, 235,
+       11, 12, 234,
+       13, 13, 236,
+       14, 33, 234,
+       34, 34, 237,
+       35, 91, 234,
+       92, 92, 238,
+       93, 122, 234,
+       123, 123, 239,
+       124, 255, 234
 };
 static const int lexer_goto_row186[] = {
-       3,
-       48, 115, -93,
-       116, 116, 221,
-       117, 122, 81
+       1,
+       0, 255, -128
 };
 static const int lexer_goto_row187[] = {
-       3,
-       48, 113, -31,
-       114, 114, 222,
-       115, 122, 81
+       1,
+       0, 255, -128
 };
 static const int lexer_goto_row188[] = {
-       3,
-       48, 113, -31,
-       114, 114, 223,
-       115, 122, 81
+       1,
+       0, 255, -128
 };
 static const int lexer_goto_row189[] = {
-       3,
-       48, 106, -166,
-       107, 107, 224,
-       108, 122, 81
+       10,
+       0, 9, 240,
+       10, 10, 241,
+       11, 12, 240,
+       13, 13, 242,
+       14, 33, 240,
+       34, 34, 243,
+       35, 91, 240,
+       92, 92, 244,
+       93, 122, 240,
+       124, 255, 240
 };
 static const int lexer_goto_row190[] = {
        3,
-       48, 114, -86,
-       115, 115, 225,
-       116, 122, 81
+       0, 9, 245,
+       11, 12, 245,
+       14, 255, 245
 };
 static const int lexer_goto_row191[] = {
-       3,
-       48, 104, -99,
-       105, 105, 226,
-       106, 122, 81
+       10,
+       0, 9, 246,
+       10, 10, 247,
+       11, 12, 246,
+       13, 13, 248,
+       14, 33, 246,
+       35, 91, 246,
+       92, 92, 249,
+       93, 122, 246,
+       123, 123, 250,
+       124, 255, 246
 };
 static const int lexer_goto_row192[] = {
        1,
-       48, 122, -36
+       0, 255, -132
 };
 static const int lexer_goto_row193[] = {
        1,
-       48, 122, -36
+       0, 255, -132
 };
 static const int lexer_goto_row194[] = {
-       3,
-       48, 113, -31,
-       114, 114, 227,
-       115, 122, 81
+       1,
+       0, 255, -132
 };
 static const int lexer_goto_row195[] = {
-       3,
-       48, 100, -40,
-       101, 101, 228,
-       102, 122, 81
+       9,
+       0, 9, 251,
+       10, 10, 252,
+       11, 12, 251,
+       13, 13, 253,
+       14, 38, 251,
+       39, 39, 254,
+       40, 91, 251,
+       92, 92, 255,
+       93, 255, 251
 };
 static const int lexer_goto_row196[] = {
        3,
-       48, 113, -31,
-       114, 114, 229,
-       115, 122, 81
-};
-static const int lexer_goto_row197[] = {
-       1,
-       48, 122, -36
+       0, 9, 256,
+       11, 12, 256,
+       14, 255, 256
 };
 static const int lexer_goto_row198[] = {
-       3,
-       48, 113, -31,
-       114, 114, 230,
-       115, 122, 81
+       1,
+       98, 98, 257
 };
 static const int lexer_goto_row199[] = {
-       3,
-       48, 116, -116,
-       117, 117, 231,
-       118, 122, 81
-};
-static const int lexer_goto_row200[] = {
-       3,
-       48, 115, -93,
-       116, 116, 232,
-       117, 122, 81
+       1,
+       0, 255, -80
 };
 static const int lexer_goto_row201[] = {
        3,
-       48, 107, -32,
-       108, 108, 233,
-       109, 122, 81
+       48, 115, -94,
+       116, 116, 258,
+       117, 122, 82
 };
 static const int lexer_goto_row202[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 113, -32,
+       114, 114, 259,
+       115, 122, 82
 };
 static const int lexer_goto_row203[] = {
        3,
-       48, 107, -32,
-       108, 108, 234,
-       109, 122, 81
+       48, 113, -32,
+       114, 114, 260,
+       115, 122, 82
 };
 static const int lexer_goto_row204[] = {
        3,
-       48, 95, -30,
-       97, 97, 235,
-       98, 122, 81
+       48, 106, -170,
+       107, 107, 261,
+       108, 122, 82
 };
 static const int lexer_goto_row205[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 114, -87,
+       115, 115, 262,
+       116, 122, 82
 };
 static const int lexer_goto_row206[] = {
        3,
-       48, 95, -30,
-       97, 97, 236,
-       98, 122, 81
+       48, 104, -100,
+       105, 105, 263,
+       106, 122, 82
 };
 static const int lexer_goto_row207[] = {
-       3,
-       48, 95, -30,
-       97, 97, 237,
-       98, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row208[] = {
-       3,
-       48, 100, -40,
-       101, 101, 238,
-       102, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row209[] = {
        3,
-       48, 95, -30,
-       97, 97, 239,
-       98, 122, 81
+       48, 113, -32,
+       114, 114, 264,
+       115, 122, 82
 };
 static const int lexer_goto_row210[] = {
        3,
-       48, 101, -37,
-       102, 102, 240,
-       103, 122, 81
+       48, 100, -41,
+       101, 101, 265,
+       102, 122, 82
 };
 static const int lexer_goto_row211[] = {
        3,
-       48, 113, -31,
-       114, 114, 241,
-       115, 122, 81
+       48, 113, -32,
+       114, 114, 266,
+       115, 122, 82
 };
 static const int lexer_goto_row212[] = {
        1,
-       48, 122, -36
+       48, 122, -37
 };
 static const int lexer_goto_row213[] = {
        3,
-       48, 104, -99,
-       105, 105, 242,
-       106, 122, 81
+       48, 113, -32,
+       114, 114, 267,
+       115, 122, 82
 };
 static const int lexer_goto_row214[] = {
        3,
-       48, 113, -31,
-       114, 114, 243,
-       115, 122, 81
+       48, 116, -116,
+       117, 117, 268,
+       118, 122, 82
 };
 static const int lexer_goto_row215[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 115, -94,
+       116, 116, 269,
+       117, 122, 82
 };
 static const int lexer_goto_row216[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 107, -33,
+       108, 108, 270,
+       109, 122, 82
 };
 static const int lexer_goto_row217[] = {
        1,
-       48, 122, -36
+       48, 122, -37
 };
 static const int lexer_goto_row218[] = {
        3,
-       48, 100, -40,
-       101, 101, 244,
-       102, 122, 81
+       48, 107, -33,
+       108, 108, 271,
+       109, 122, 82
 };
 static const int lexer_goto_row219[] = {
        3,
-       48, 100, -40,
-       101, 101, 245,
-       102, 122, 81
+       48, 95, -31,
+       97, 97, 272,
+       98, 122, 82
 };
 static const int lexer_goto_row220[] = {
-       3,
-       48, 95, -30,
-       97, 97, 246,
-       98, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row221[] = {
-       1,
-       117, 117, 247
+       3,
+       48, 95, -31,
+       97, 97, 273,
+       98, 122, 82
 };
 static const int lexer_goto_row222[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 95, -31,
+       97, 97, 274,
+       98, 122, 82
 };
 static const int lexer_goto_row223[] = {
        3,
-       48, 95, -30,
-       97, 97, 248,
-       98, 122, 81
+       48, 100, -41,
+       101, 101, 275,
+       102, 122, 82
 };
 static const int lexer_goto_row224[] = {
        3,
-       48, 115, -93,
-       116, 116, 249,
-       117, 122, 81
+       48, 95, -31,
+       97, 97, 276,
+       98, 122, 82
 };
 static const int lexer_goto_row225[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 101, -38,
+       102, 102, 277,
+       103, 122, 82
 };
 static const int lexer_goto_row226[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 113, -32,
+       114, 114, 278,
+       115, 122, 82
 };
 static const int lexer_goto_row227[] = {
-       3,
-       48, 109, -41,
-       110, 110, 250,
-       111, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row228[] = {
        3,
-       48, 109, -41,
-       110, 110, 251,
-       111, 122, 81
+       48, 113, -32,
+       114, 114, 279,
+       115, 122, 82
 };
 static const int lexer_goto_row229[] = {
        1,
-       48, 122, -36
+       48, 122, -37
 };
 static const int lexer_goto_row230[] = {
-       3,
-       48, 115, -93,
-       116, 116, 252,
-       117, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row231[] = {
-       5,
-       48, 101, -37,
-       102, 102, 253,
-       103, 109, 81,
-       110, 110, 254,
-       111, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row232[] = {
        3,
-       48, 99, -85,
-       100, 100, 255,
-       101, 122, 81
+       48, 100, -41,
+       101, 101, 280,
+       102, 122, 82
 };
 static const int lexer_goto_row233[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 100, -41,
+       101, 101, 281,
+       102, 122, 82
 };
 static const int lexer_goto_row234[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 95, -31,
+       97, 97, 282,
+       98, 122, 82
 };
 static const int lexer_goto_row235[] = {
-       3,
-       48, 100, -40,
-       101, 101, 256,
-       102, 122, 81
+       1,
+       0, 255, -186
 };
 static const int lexer_goto_row236[] = {
-       3,
-       48, 97, -30,
-       98, 98, 257,
-       99, 122, 81
+       11,
+       0, 9, 283,
+       10, 10, 235,
+       11, 12, 283,
+       13, 13, 236,
+       14, 33, 283,
+       34, 34, 284,
+       35, 91, 283,
+       92, 92, 285,
+       93, 122, 283,
+       123, 123, 286,
+       124, 255, 283
 };
 static const int lexer_goto_row237[] = {
-       4,
-       48, 95, -30,
-       97, 102, 81,
-       103, 103, 258,
-       104, 122, 81
+       1,
+       0, 255, -237
 };
 static const int lexer_goto_row238[] = {
-       3,
-       48, 115, -93,
-       116, 116, 259,
-       117, 122, 81
+       10,
+       0, 9, 287,
+       10, 10, 288,
+       11, 12, 287,
+       13, 13, 289,
+       14, 33, 287,
+       34, 34, 290,
+       35, 91, 287,
+       92, 92, 291,
+       93, 122, 287,
+       124, 255, 287
 };
 static const int lexer_goto_row239[] = {
        3,
-       48, 98, -107,
-       99, 99, 260,
-       100, 122, 81
+       0, 9, 292,
+       11, 12, 292,
+       14, 255, 292
 };
 static const int lexer_goto_row240[] = {
-       3,
-       48, 97, -30,
-       98, 98, 261,
-       99, 122, 81
+       10,
+       0, 9, 293,
+       10, 10, 294,
+       11, 12, 293,
+       13, 13, 295,
+       14, 33, 293,
+       35, 91, 293,
+       92, 92, 296,
+       93, 122, 293,
+       123, 123, 297,
+       124, 255, 293
 };
 static const int lexer_goto_row241[] = {
        1,
-       48, 122, -36
+       0, 255, -128
 };
 static const int lexer_goto_row242[] = {
-       3,
-       48, 109, -41,
-       110, 110, 262,
-       111, 122, 81
+       1,
+       0, 255, -128
 };
 static const int lexer_goto_row243[] = {
-       3,
-       48, 95, -30,
-       97, 97, 263,
-       98, 122, 81
+       1,
+       0, 255, -128
 };
 static const int lexer_goto_row244[] = {
-       1,
-       48, 122, -36
+       10,
+       0, 9, 298,
+       10, 10, 299,
+       11, 12, 298,
+       13, 13, 300,
+       14, 33, 298,
+       34, 34, 301,
+       35, 91, 298,
+       92, 92, 302,
+       93, 122, 298,
+       124, 255, 298
 };
 static const int lexer_goto_row245[] = {
        3,
-       48, 113, -31,
-       114, 114, 264,
-       115, 122, 81
+       0, 9, 303,
+       11, 12, 303,
+       14, 255, 303
 };
 static const int lexer_goto_row246[] = {
        1,
-       48, 122, -36
+       0, 255, -128
 };
 static const int lexer_goto_row247[] = {
-       3,
-       48, 97, -30,
-       98, 98, 265,
-       99, 122, 81
+       1,
+       0, 255, -128
 };
 static const int lexer_goto_row248[] = {
        1,
-       103, 103, 266
+       0, 255, -128
 };
 static const int lexer_goto_row249[] = {
-       3,
-       48, 98, -107,
-       99, 99, 267,
-       100, 122, 81
+       1,
+       0, 255, -128
 };
 static const int lexer_goto_row250[] = {
-       1,
-       48, 122, -36
+       3,
+       0, 9, 304,
+       11, 12, 304,
+       14, 255, 304
 };
 static const int lexer_goto_row251[] = {
-       3,
-       48, 116, -116,
-       117, 117, 268,
-       118, 122, 81
+       10,
+       0, 9, 305,
+       10, 10, 306,
+       11, 12, 305,
+       13, 13, 307,
+       14, 33, 305,
+       35, 91, 305,
+       92, 92, 308,
+       93, 122, 305,
+       123, 123, 309,
+       124, 255, 305
 };
 static const int lexer_goto_row252[] = {
        1,
-       48, 122, -36
+       0, 255, -132
 };
 static const int lexer_goto_row253[] = {
        1,
-       48, 122, -36
+       0, 255, -132
 };
 static const int lexer_goto_row254[] = {
-       3,
-       48, 95, -30,
-       97, 97, 269,
-       98, 122, 81
+       1,
+       0, 255, -132
 };
 static const int lexer_goto_row255[] = {
-       1,
-       48, 122, -36
+       9,
+       0, 9, 310,
+       10, 10, 311,
+       11, 12, 310,
+       13, 13, 312,
+       14, 38, 310,
+       39, 39, 313,
+       40, 91, 310,
+       92, 92, 314,
+       93, 255, 310
 };
 static const int lexer_goto_row256[] = {
        3,
-       48, 100, -40,
-       101, 101, 270,
-       102, 122, 81
+       0, 9, 315,
+       11, 12, 315,
+       14, 255, 315
 };
 static const int lexer_goto_row257[] = {
        1,
-       48, 122, -36
+       0, 255, -132
 };
 static const int lexer_goto_row258[] = {
-       3,
-       48, 107, -32,
-       108, 108, 271,
-       109, 122, 81
+       1,
+       117, 117, 316
 };
 static const int lexer_goto_row259[] = {
-       3,
-       48, 100, -40,
-       101, 101, 272,
-       102, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row260[] = {
        3,
-       48, 100, -40,
-       101, 101, 273,
-       102, 122, 81
+       48, 95, -31,
+       97, 97, 317,
+       98, 122, 82
 };
 static const int lexer_goto_row261[] = {
        3,
-       48, 115, -93,
-       116, 116, 274,
-       117, 122, 81
+       48, 115, -94,
+       116, 116, 318,
+       117, 122, 82
 };
 static const int lexer_goto_row262[] = {
-       3,
-       48, 107, -32,
-       108, 108, 275,
-       109, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row263[] = {
        1,
-       48, 122, -36
+       48, 122, -37
 };
 static const int lexer_goto_row264[] = {
        3,
-       48, 107, -32,
-       108, 108, 276,
-       109, 122, 81
+       48, 109, -42,
+       110, 110, 319,
+       111, 122, 82
 };
 static const int lexer_goto_row265[] = {
        3,
-       48, 114, -86,
-       115, 115, 277,
-       116, 122, 81
+       48, 109, -42,
+       110, 110, 320,
+       111, 122, 82
 };
 static const int lexer_goto_row266[] = {
-       3,
-       48, 107, -32,
-       108, 108, 278,
-       109, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row267[] = {
-       1,
-       95, 95, 279
+       3,
+       48, 115, -94,
+       116, 116, 321,
+       117, 122, 82
 };
 static const int lexer_goto_row268[] = {
-       3,
-       48, 115, -93,
-       116, 116, 280,
-       117, 122, 81
+       5,
+       48, 101, -38,
+       102, 102, 322,
+       103, 109, 82,
+       110, 110, 323,
+       111, 122, 82
 };
 static const int lexer_goto_row269[] = {
        3,
-       48, 100, -40,
-       101, 101, 281,
-       102, 122, 81
+       48, 99, -86,
+       100, 100, 324,
+       101, 122, 82
 };
 static const int lexer_goto_row270[] = {
-       3,
-       48, 98, -107,
-       99, 99, 282,
-       100, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row271[] = {
        1,
-       48, 122, -36
+       48, 122, -37
 };
 static const int lexer_goto_row272[] = {
        3,
-       48, 100, -40,
-       101, 101, 283,
-       102, 122, 81
+       48, 100, -41,
+       101, 101, 325,
+       102, 122, 82
 };
 static const int lexer_goto_row273[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 97, -31,
+       98, 98, 326,
+       99, 122, 82
 };
 static const int lexer_goto_row274[] = {
-       1,
-       48, 122, -36
+       4,
+       48, 95, -31,
+       97, 102, 82,
+       103, 103, 327,
+       104, 122, 82
 };
 static const int lexer_goto_row275[] = {
        3,
-       48, 100, -40,
-       101, 101, 284,
-       102, 122, 81
+       48, 115, -94,
+       116, 116, 328,
+       117, 122, 82
 };
 static const int lexer_goto_row276[] = {
        3,
-       48, 100, -40,
-       101, 101, 285,
-       102, 122, 81
+       48, 98, -108,
+       99, 99, 329,
+       100, 122, 82
 };
 static const int lexer_goto_row277[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 97, -31,
+       98, 98, 330,
+       99, 122, 82
 };
 static const int lexer_goto_row278[] = {
-       3,
-       48, 95, -30,
-       97, 97, 286,
-       98, 122, 81
+       1,
+       48, 122, -37
 };
 static const int lexer_goto_row279[] = {
        3,
-       48, 100, -40,
-       101, 101, 287,
-       102, 122, 81
+       48, 109, -42,
+       110, 110, 331,
+       111, 122, 82
 };
 static const int lexer_goto_row280[] = {
        1,
-       95, 95, 288
+       48, 122, -37
 };
 static const int lexer_goto_row281[] = {
-       1,
-       48, 122, -36
+       3,
+       48, 113, -32,
+       114, 114, 332,
+       115, 122, 82
 };
 static const int lexer_goto_row282[] = {
        1,
-       48, 122, -36
+       48, 122, -37
 };
 static const int lexer_goto_row283[] = {
        3,
-       48, 100, -40,
-       101, 101, 289,
-       102, 122, 81
+       48, 97, -31,
+       98, 98, 333,
+       99, 122, 82
 };
 static const int lexer_goto_row284[] = {
        1,
-       48, 122, -36
+       0, 255, -237
 };
 static const int lexer_goto_row285[] = {
-       3,
-       48, 99, -85,
-       100, 100, 290,
-       101, 122, 81
+       1,
+       0, 255, -239
 };
 static const int lexer_goto_row286[] = {
-       1,
-       48, 122, -36
+       3,
+       0, 9, 334,
+       11, 12, 334,
+       14, 255, 334
 };
 static const int lexer_goto_row287[] = {
-       3,
-       48, 107, -32,
-       108, 108, 291,
-       109, 122, 81
+       1,
+       0, 255, -241
 };
 static const int lexer_goto_row288[] = {
        1,
-       48, 122, -36
+       0, 255, -237
+};
+static const int lexer_goto_row289[] = {
+       1,
+       0, 255, -237
 };
 static const int lexer_goto_row290[] = {
        1,
-       48, 122, -36
+       0, 255, -237
 };
 static const int lexer_goto_row291[] = {
-       1,
-       48, 122, -36
+       10,
+       0, 9, 335,
+       10, 10, 336,
+       11, 12, 335,
+       13, 13, 337,
+       14, 33, 335,
+       34, 34, 338,
+       35, 91, 335,
+       92, 92, 339,
+       93, 122, 335,
+       124, 255, 335
 };
 static const int lexer_goto_row292[] = {
+       3,
+       0, 9, 340,
+       11, 12, 340,
+       14, 255, 340
+};
+static const int lexer_goto_row293[] = {
+       1,
+       0, 255, -186
+};
+static const int lexer_goto_row294[] = {
+       1,
+       0, 255, -237
+};
+static const int lexer_goto_row295[] = {
+       1,
+       0, 255, -237
+};
+static const int lexer_goto_row296[] = {
+       1,
+       0, 255, -237
+};
+static const int lexer_goto_row297[] = {
+       3,
+       0, 9, 341,
+       11, 12, 341,
+       14, 255, 341
+};
+static const int lexer_goto_row298[] = {
+       10,
+       0, 9, 342,
+       10, 10, 343,
+       11, 12, 342,
+       13, 13, 344,
+       14, 33, 342,
+       35, 91, 342,
+       92, 92, 345,
+       93, 122, 342,
+       123, 123, 346,
+       124, 255, 342
+};
+static const int lexer_goto_row299[] = {
+       1,
+       0, 255, -128
+};
+static const int lexer_goto_row300[] = {
+       1,
+       0, 255, -128
+};
+static const int lexer_goto_row301[] = {
+       1,
+       0, 255, -128
+};
+static const int lexer_goto_row303[] = {
+       3,
+       0, 9, 347,
+       11, 12, 347,
+       14, 255, 347
+};
+static const int lexer_goto_row304[] = {
+       1,
+       0, 255, -128
+};
+static const int lexer_goto_row305[] = {
+       1,
+       0, 255, -128
+};
+static const int lexer_goto_row306[] = {
+       1,
+       0, 255, -128
+};
+static const int lexer_goto_row307[] = {
+       1,
+       0, 255, -128
+};
+static const int lexer_goto_row308[] = {
+       1,
+       0, 255, -128
+};
+static const int lexer_goto_row309[] = {
+       3,
+       0, 9, 348,
+       11, 12, 348,
+       14, 255, 348
+};
+static const int lexer_goto_row311[] = {
+       1,
+       0, 255, -132
+};
+static const int lexer_goto_row312[] = {
+       1,
+       0, 255, -132
+};
+static const int lexer_goto_row313[] = {
+       1,
+       0, 255, -132
+};
+static const int lexer_goto_row315[] = {
+       3,
+       0, 9, 349,
+       11, 12, 349,
+       14, 255, 349
+};
+static const int lexer_goto_row316[] = {
+       1,
+       0, 255, -132
+};
+static const int lexer_goto_row317[] = {
+       1,
+       103, 103, 350
+};
+static const int lexer_goto_row318[] = {
+       3,
+       48, 98, -108,
+       99, 99, 351,
+       100, 122, 82
+};
+static const int lexer_goto_row319[] = {
+       1,
+       48, 122, -37
+};
+static const int lexer_goto_row320[] = {
+       3,
+       48, 116, -116,
+       117, 117, 352,
+       118, 122, 82
+};
+static const int lexer_goto_row321[] = {
+       1,
+       48, 122, -37
+};
+static const int lexer_goto_row322[] = {
+       1,
+       48, 122, -37
+};
+static const int lexer_goto_row323[] = {
+       3,
+       48, 95, -31,
+       97, 97, 353,
+       98, 122, 82
+};
+static const int lexer_goto_row324[] = {
+       1,
+       48, 122, -37
+};
+static const int lexer_goto_row325[] = {
+       3,
+       48, 100, -41,
+       101, 101, 354,
+       102, 122, 82
+};
+static const int lexer_goto_row326[] = {
+       1,
+       48, 122, -37
+};
+static const int lexer_goto_row327[] = {
+       3,
+       48, 107, -33,
+       108, 108, 355,
+       109, 122, 82
+};
+static const int lexer_goto_row328[] = {
+       3,
+       48, 100, -41,
+       101, 101, 356,
+       102, 122, 82
+};
+static const int lexer_goto_row329[] = {
+       3,
+       48, 100, -41,
+       101, 101, 357,
+       102, 122, 82
+};
+static const int lexer_goto_row330[] = {
+       3,
+       48, 115, -94,
+       116, 116, 358,
+       117, 122, 82
+};
+static const int lexer_goto_row331[] = {
+       3,
+       48, 107, -33,
+       108, 108, 359,
+       109, 122, 82
+};
+static const int lexer_goto_row332[] = {
+       1,
+       48, 122, -37
+};
+static const int lexer_goto_row333[] = {
+       3,
+       48, 114, -87,
+       115, 115, 360,
+       116, 122, 82
+};
+static const int lexer_goto_row334[] = {
+       3,
+       48, 107, -33,
+       108, 108, 361,
+       109, 122, 82
+};
+static const int lexer_goto_row335[] = {
+       1,
+       0, 255, -237
+};
+static const int lexer_goto_row336[] = {
+       1,
+       0, 255, -237
+};
+static const int lexer_goto_row337[] = {
+       1,
+       0, 255, -237
+};
+static const int lexer_goto_row338[] = {
+       1,
+       0, 255, -237
+};
+static const int lexer_goto_row340[] = {
+       3,
+       0, 9, 362,
+       11, 12, 362,
+       14, 255, 362
+};
+static const int lexer_goto_row341[] = {
+       1,
+       0, 255, -237
+};
+static const int lexer_goto_row342[] = {
+       1,
+       0, 255, -237
+};
+static const int lexer_goto_row343[] = {
+       1,
+       0, 255, -237
+};
+static const int lexer_goto_row344[] = {
+       1,
+       0, 255, -237
+};
+static const int lexer_goto_row345[] = {
+       1,
+       0, 255, -237
+};
+static const int lexer_goto_row346[] = {
+       3,
+       0, 9, 363,
+       11, 12, 363,
+       14, 255, 363
+};
+static const int lexer_goto_row348[] = {
+       1,
+       0, 255, -128
+};
+static const int lexer_goto_row349[] = {
+       1,
+       0, 255, -128
+};
+static const int lexer_goto_row350[] = {
+       1,
+       0, 255, -132
+};
+static const int lexer_goto_row351[] = {
+       1,
+       95, 95, 364
+};
+static const int lexer_goto_row352[] = {
+       3,
+       48, 115, -94,
+       116, 116, 365,
+       117, 122, 82
+};
+static const int lexer_goto_row353[] = {
+       3,
+       48, 100, -41,
+       101, 101, 366,
+       102, 122, 82
+};
+static const int lexer_goto_row354[] = {
+       3,
+       48, 98, -108,
+       99, 99, 367,
+       100, 122, 82
+};
+static const int lexer_goto_row355[] = {
+       1,
+       48, 122, -37
+};
+static const int lexer_goto_row356[] = {
+       3,
+       48, 100, -41,
+       101, 101, 368,
+       102, 122, 82
+};
+static const int lexer_goto_row357[] = {
+       1,
+       48, 122, -37
+};
+static const int lexer_goto_row358[] = {
+       1,
+       48, 122, -37
+};
+static const int lexer_goto_row359[] = {
+       3,
+       48, 100, -41,
+       101, 101, 369,
+       102, 122, 82
+};
+static const int lexer_goto_row360[] = {
+       3,
+       48, 100, -41,
+       101, 101, 370,
+       102, 122, 82
+};
+static const int lexer_goto_row361[] = {
+       3,
+       48, 95, -31,
+       97, 97, 371,
+       98, 122, 82
+};
+static const int lexer_goto_row362[] = {
+       3,
+       48, 100, -41,
+       101, 101, 372,
+       102, 122, 82
+};
+static const int lexer_goto_row363[] = {
+       1,
+       0, 255, -237
+};
+static const int lexer_goto_row364[] = {
+       1,
+       0, 255, -237
+};
+static const int lexer_goto_row365[] = {
+       1,
+       95, 95, 373
+};
+static const int lexer_goto_row366[] = {
+       1,
+       48, 122, -37
+};
+static const int lexer_goto_row367[] = {
+       1,
+       48, 122, -37
+};
+static const int lexer_goto_row368[] = {
+       3,
+       48, 100, -41,
+       101, 101, 374,
+       102, 122, 82
+};
+static const int lexer_goto_row369[] = {
+       1,
+       48, 122, -37
+};
+static const int lexer_goto_row370[] = {
+       3,
+       48, 99, -86,
+       100, 100, 375,
+       101, 122, 82
+};
+static const int lexer_goto_row371[] = {
+       1,
+       48, 122, -37
+};
+static const int lexer_goto_row372[] = {
+       3,
+       48, 107, -33,
+       108, 108, 376,
+       109, 122, 82
+};
+static const int lexer_goto_row373[] = {
+       1,
+       48, 122, -37
+};
+static const int lexer_goto_row375[] = {
+       1,
+       48, 122, -37
+};
+static const int lexer_goto_row376[] = {
+       1,
+       48, 122, -37
+};
+static const int lexer_goto_row377[] = {
        1,
-       48, 122, -36
+       48, 122, -37
 };
 static const int lexer_goto_row_null[] = {0};
 const int* const lexer_goto_table[] = {
@@ -1554,10 +2024,10 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row21,
        lexer_goto_row22,
        lexer_goto_row23,
-       lexer_goto_row24,
+       lexer_goto_row_null,
+       lexer_goto_row25,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row27,
        lexer_goto_row28,
        lexer_goto_row29,
        lexer_goto_row30,
@@ -1579,30 +2049,30 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row46,
        lexer_goto_row47,
        lexer_goto_row48,
+       lexer_goto_row49,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row51,
-       lexer_goto_row_null,
+       lexer_goto_row52,
        lexer_goto_row53,
+       lexer_goto_row54,
        lexer_goto_row_null,
-       lexer_goto_row55,
+       lexer_goto_row56,
        lexer_goto_row_null,
-       lexer_goto_row57,
        lexer_goto_row58,
-       lexer_goto_row_null,
+       lexer_goto_row59,
        lexer_goto_row60,
+       lexer_goto_row61,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row63,
        lexer_goto_row64,
        lexer_goto_row65,
+       lexer_goto_row66,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row68,
+       lexer_goto_row69,
        lexer_goto_row_null,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row72,
        lexer_goto_row73,
        lexer_goto_row74,
        lexer_goto_row75,
@@ -1657,14 +2127,14 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row_null,
        lexer_goto_row125,
        lexer_goto_row_null,
-       lexer_goto_row_null,
+       lexer_goto_row127,
        lexer_goto_row128,
        lexer_goto_row_null,
        lexer_goto_row_null,
        lexer_goto_row131,
        lexer_goto_row132,
-       lexer_goto_row133,
-       lexer_goto_row134,
+       lexer_goto_row_null,
+       lexer_goto_row_null,
        lexer_goto_row135,
        lexer_goto_row136,
        lexer_goto_row137,
@@ -1712,10 +2182,10 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row179,
        lexer_goto_row180,
        lexer_goto_row181,
-       lexer_goto_row_null,
+       lexer_goto_row182,
        lexer_goto_row183,
        lexer_goto_row184,
-       lexer_goto_row_null,
+       lexer_goto_row185,
        lexer_goto_row186,
        lexer_goto_row187,
        lexer_goto_row188,
@@ -1727,10 +2197,10 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row194,
        lexer_goto_row195,
        lexer_goto_row196,
-       lexer_goto_row197,
+       lexer_goto_row_null,
        lexer_goto_row198,
        lexer_goto_row199,
-       lexer_goto_row200,
+       lexer_goto_row_null,
        lexer_goto_row201,
        lexer_goto_row202,
        lexer_goto_row203,
@@ -1819,30 +2289,115 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row286,
        lexer_goto_row287,
        lexer_goto_row288,
-       lexer_goto_row_null,
+       lexer_goto_row289,
        lexer_goto_row290,
        lexer_goto_row291,
-       lexer_goto_row292
+       lexer_goto_row292,
+       lexer_goto_row293,
+       lexer_goto_row294,
+       lexer_goto_row295,
+       lexer_goto_row296,
+       lexer_goto_row297,
+       lexer_goto_row298,
+       lexer_goto_row299,
+       lexer_goto_row300,
+       lexer_goto_row301,
+       lexer_goto_row_null,
+       lexer_goto_row303,
+       lexer_goto_row304,
+       lexer_goto_row305,
+       lexer_goto_row306,
+       lexer_goto_row307,
+       lexer_goto_row308,
+       lexer_goto_row309,
+       lexer_goto_row_null,
+       lexer_goto_row311,
+       lexer_goto_row312,
+       lexer_goto_row313,
+       lexer_goto_row_null,
+       lexer_goto_row315,
+       lexer_goto_row316,
+       lexer_goto_row317,
+       lexer_goto_row318,
+       lexer_goto_row319,
+       lexer_goto_row320,
+       lexer_goto_row321,
+       lexer_goto_row322,
+       lexer_goto_row323,
+       lexer_goto_row324,
+       lexer_goto_row325,
+       lexer_goto_row326,
+       lexer_goto_row327,
+       lexer_goto_row328,
+       lexer_goto_row329,
+       lexer_goto_row330,
+       lexer_goto_row331,
+       lexer_goto_row332,
+       lexer_goto_row333,
+       lexer_goto_row334,
+       lexer_goto_row335,
+       lexer_goto_row336,
+       lexer_goto_row337,
+       lexer_goto_row338,
+       lexer_goto_row_null,
+       lexer_goto_row340,
+       lexer_goto_row341,
+       lexer_goto_row342,
+       lexer_goto_row343,
+       lexer_goto_row344,
+       lexer_goto_row345,
+       lexer_goto_row346,
+       lexer_goto_row_null,
+       lexer_goto_row348,
+       lexer_goto_row349,
+       lexer_goto_row350,
+       lexer_goto_row351,
+       lexer_goto_row352,
+       lexer_goto_row353,
+       lexer_goto_row354,
+       lexer_goto_row355,
+       lexer_goto_row356,
+       lexer_goto_row357,
+       lexer_goto_row358,
+       lexer_goto_row359,
+       lexer_goto_row360,
+       lexer_goto_row361,
+       lexer_goto_row362,
+       lexer_goto_row363,
+       lexer_goto_row364,
+       lexer_goto_row365,
+       lexer_goto_row366,
+       lexer_goto_row367,
+       lexer_goto_row368,
+       lexer_goto_row369,
+       lexer_goto_row370,
+       lexer_goto_row371,
+       lexer_goto_row372,
+       lexer_goto_row373,
+       lexer_goto_row_null,
+       lexer_goto_row375,
+       lexer_goto_row376,
+       lexer_goto_row377
 };
 
 const int lexer_accept_table[] = {
-       -1,0,1,1,0,80,92,2,70,-1,53,54,68,66,57,67,65,69,84,58,73,60,76,81,55,56,-1,-1,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,92,1,72,92,87,-1,88,2,2,2,91,91,91,61,62,64,85,-1,59,75,74,71,77,78,81,81,81,81,-1,83,-1,82,82,82,82,82,82,48,82,82,82,16,82,82,82,82,82,82,25,82,31,15,82,82,82,82,82,82,82,33,82,82,82,82,82,82,82,82,82,82,82,82,82,92,90,-1,89,92,2,86,91,63,79,-1,83,83,83,83,-1,-1,-1,82,82,32,82,82,82,82,82,10,82,82,82,30,11,82,82,82,41,82,82,82,82,40,34,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,19,82,82,92,86,-1,-1,93,82,82,82,82,82,82,27,8,82,82,82,13,82,82,82,82,29,82,47,42,82,82,82,82,82,82,44,82,82,26,45,12,82,82,82,-1,38,82,82,37,5,82,82,46,82,82,82,50,51,82,82,82,82,82,82,14,82,82,43,82,28,82,-1,82,39,82,21,4,82,20,82,3,82,82,82,82,82,35,82,82,82,-1,82,82,82,24,82,3,23,82,82,9,82,82,-1,6,36,82,49,82,17,82,18,52,7,22,8
+       -1,0,1,1,0,79,91,2,69,-1,52,53,67,65,56,66,64,68,84,57,72,59,75,80,81,54,55,-1,-1,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,91,1,71,91,86,-1,87,2,2,2,92,92,92,60,61,63,85,-1,58,74,73,70,76,77,81,81,81,81,-1,83,-1,82,82,82,82,82,82,47,82,82,82,15,82,82,82,82,82,82,24,82,30,14,82,82,82,82,82,82,82,32,82,82,82,82,82,82,82,82,82,82,82,82,91,89,-1,88,91,86,91,91,2,90,91,92,62,78,-1,83,83,83,83,-1,-1,-1,82,82,31,82,82,82,82,82,9,82,82,82,29,10,82,82,82,40,82,82,82,82,39,33,82,82,82,82,82,82,82,82,82,82,82,82,82,82,18,82,82,91,91,91,91,91,-1,-1,-1,91,91,91,-1,-1,90,-1,-1,93,82,82,82,82,82,82,26,8,82,82,82,12,82,82,82,82,28,82,46,41,82,82,82,82,82,82,43,82,25,44,11,82,82,82,91,-1,-1,89,-1,88,91,91,91,-1,-1,91,91,91,91,-1,-1,91,91,91,-1,-1,91,-1,37,82,82,36,5,82,82,45,82,82,82,49,50,82,82,82,82,82,82,13,82,42,82,27,82,-1,-1,-1,-1,-1,-1,-1,-1,-1,91,-1,-1,-1,-1,-1,91,91,91,86,-1,91,91,91,91,91,-1,87,91,91,91,86,-1,91,-1,82,38,82,20,4,82,19,82,3,82,82,82,82,82,34,82,82,-1,-1,-1,-1,89,-1,-1,-1,-1,-1,-1,-1,88,91,91,91,-1,82,82,82,23,82,3,22,82,82,82,82,-1,-1,-1,6,35,82,48,82,16,82,17,51,7,21,8
 };
 
 static int parser_action_row1[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 0
 };
 static int parser_action_row2[] = {
        1,
-       -1, 1, 864
+       -1, 1, 1288
 };
 static int parser_action_row3[] = {
        1,
-       -1, 1, 862
+       -1, 1, 1286
 };
 static int parser_action_row4[] = {
        2,
@@ -1851,14 +2406,14 @@ static int parser_action_row4[] = {
 };
 static int parser_action_row5[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 1
 };
 static int parser_action_row6[] = {
        1,
-       -1, 1, 832
+       -1, 1, 1250
 };
 static int parser_action_row7[] = {
        1,
@@ -1866,51 +2421,51 @@ static int parser_action_row7[] = {
 };
 static int parser_action_row8[] = {
        1,
-       -1, 1, 67
+       -1, 1, 69
 };
 static int parser_action_row9[] = {
        1,
-       -1, 1, 836
+       -1, 1, 1254
 };
 static int parser_action_row10[] = {
        1,
-       -1, 1, 834
+       -1, 1, 1252
 };
 static int parser_action_row11[] = {
        2,
-       -1, 1, 532,
-       93, 1, 68
+       -1, 1, 657,
+       93, 1, 70
 };
 static int parser_action_row12[] = {
        37,
-       -1, 1, 258,
+       -1, 1, 331,
        2, 0, 27,
-       12, 0, 28,
-       13, 0, 29,
-       15, 0, 30,
-       18, 0, 31,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       30, 0, 39,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       11, 0, 28,
+       12, 0, 29,
+       14, 0, 30,
+       17, 0, 31,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       29, 0, 39,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -1918,17 +2473,17 @@ static int parser_action_row12[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61,
+       89, 0, 61,
        92, 0, 62
 };
 static int parser_action_row13[] = {
        2,
-       -1, 1, 530,
+       -1, 1, 655,
        1, 0, 2
 };
 static int parser_action_row14[] = {
        1,
-       -1, 1, 838
+       -1, 1, 1256
 };
 static int parser_action_row15[] = {
        3,
@@ -1938,41 +2493,41 @@ static int parser_action_row15[] = {
 };
 static int parser_action_row16[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 2
 };
 static int parser_action_row17[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 4
 };
 static int parser_action_row18[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 8
 };
 static int parser_action_row19[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 16
 };
 static int parser_action_row20[] = {
        3,
-       -1, 1, 528,
+       -1, 1, 653,
        0, 0, 1,
        1, 0, 107
 };
 static int parser_action_row21[] = {
        2,
-       -1, 1, 535,
+       -1, 1, 660,
        0, 0, 109
 };
 static int parser_action_row22[] = {
@@ -1981,33 +2536,33 @@ static int parser_action_row22[] = {
 };
 static int parser_action_row23[] = {
        36,
-       -1, 1, 258,
-       12, 0, 28,
-       13, 0, 29,
-       15, 0, 30,
-       18, 0, 31,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       30, 0, 39,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       -1, 1, 331,
+       11, 0, 28,
+       12, 0, 29,
+       14, 0, 30,
+       17, 0, 31,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       29, 0, 39,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -2015,104 +2570,104 @@ static int parser_action_row23[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61,
+       89, 0, 61,
        92, 0, 62
 };
 static int parser_action_row24[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 3
 };
 static int parser_action_row25[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 5
 };
 static int parser_action_row26[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 9
 };
 static int parser_action_row27[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 17
 };
 static int parser_action_row28[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row29[] = {
        24,
-       -1, 1, 510,
-       12, 0, 122,
-       24, 0, 123,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       52, 0, 133,
-       54, 1, 506,
-       64, 1, 506,
-       66, 0, 134,
+       -1, 1, 635,
+       11, 0, 122,
+       23, 0, 123,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       51, 0, 133,
+       53, 1, 631,
+       63, 1, 631,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
 static int parser_action_row30[] = {
        4,
-       -1, 1, 258,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
 static int parser_action_row31[] = {
        33,
        -1, 3, 30,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 155,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 155,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -2120,7 +2675,7 @@ static int parser_action_row31[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
 static int parser_action_row32[] = {
        2,
@@ -2129,31 +2684,31 @@ static int parser_action_row32[] = {
 };
 static int parser_action_row33[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row34[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row35[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row36[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row37[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
@@ -2162,28 +2717,28 @@ static int parser_action_row38[] = {
        -1, 3, 37,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 155,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 155,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -2191,36 +2746,36 @@ static int parser_action_row38[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
 static int parser_action_row39[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row40[] = {
        2,
        -1, 3, 39,
-       86, 0, 169
+       85, 0, 169
 };
 static int parser_action_row41[] = {
        23,
-       -1, 1, 349,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 1, 429,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -2228,26 +2783,26 @@ static int parser_action_row41[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
 static int parser_action_row42[] = {
        24,
-       -1, 1, 356,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       50, 0, 191,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 1, 436,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       49, 0, 191,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -2255,26 +2810,26 @@ static int parser_action_row42[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
 static int parser_action_row43[] = {
        24,
-       -1, 1, 351,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       50, 0, 191,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 1, 431,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       49, 0, 191,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -2282,29 +2837,29 @@ static int parser_action_row43[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
 static int parser_action_row44[] = {
        1,
-       -1, 1, 355
+       -1, 1, 435
 };
 static int parser_action_row45[] = {
        23,
        -1, 3, 44,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 196,
        82, 0, 179,
@@ -2312,293 +2867,302 @@ static int parser_action_row45[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
 static int parser_action_row46[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row47[] = {
        24,
-       -1, 1, 510,
-       12, 0, 122,
-       24, 0, 123,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       52, 0, 133,
-       54, 1, 506,
-       64, 1, 506,
-       66, 0, 134,
+       -1, 1, 635,
+       11, 0, 122,
+       23, 0, 123,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       51, 0, 133,
+       53, 1, 631,
+       63, 1, 631,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
 static int parser_action_row48[] = {
-       1,
-       -1, 1, 485
+       2,
+       -1, 1, 572,
+       79, 0, 205
 };
 static int parser_action_row49[] = {
-       1,
-       -1, 1, 486
+       2,
+       -1, 1, 574,
+       79, 0, 205
 };
 static int parser_action_row50[] = {
-       1,
-       -1, 1, 487
+       2,
+       -1, 1, 576,
+       79, 0, 205
 };
 static int parser_action_row51[] = {
-       1,
-       -1, 1, 488
+       2,
+       -1, 1, 578,
+       79, 0, 205
 };
 static int parser_action_row52[] = {
        2,
        -1, 3, 51,
-       11, 0, 205
+       10, 0, 210
 };
 static int parser_action_row53[] = {
        23,
        -1, 3, 52,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
 static int parser_action_row54[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row55[] = {
        2,
        -1, 3, 54,
-       58, 0, 210
+       57, 0, 215
 };
 static int parser_action_row56[] = {
        28,
-       -1, 1, 506,
-       0, 1, 510,
-       1, 1, 510,
-       9, 1, 510,
-       12, 0, 122,
-       24, 0, 123,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       52, 0, 133,
-       58, 0, 211,
-       66, 0, 134,
-       79, 1, 510,
+       -1, 1, 635,
+       11, 0, 122,
+       23, 0, 123,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       51, 0, 133,
+       53, 1, 631,
+       57, 0, 216,
+       58, 1, 631,
+       59, 1, 631,
+       60, 1, 631,
+       63, 1, 631,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61,
-       93, 1, 510
+       86, 0, 60,
+       89, 0, 140
 };
 static int parser_action_row57[] = {
        4,
-       -1, 1, 473,
-       59, 0, 214,
-       60, 0, 215,
-       61, 0, 216
+       -1, 1, 557,
+       58, 0, 219,
+       59, 0, 220,
+       60, 0, 221
 };
 static int parser_action_row58[] = {
-       1,
-       -1, 1, 489
+       2,
+       -1, 1, 580,
+       79, 0, 205
 };
 static int parser_action_row59[] = {
-       1,
-       -1, 1, 490
+       2,
+       -1, 1, 582,
+       79, 0, 205
 };
 static int parser_action_row60[] = {
-       1,
-       -1, 1, 491
+       2,
+       -1, 1, 586,
+       79, 0, 205
 };
 static int parser_action_row61[] = {
        1,
-       -1, 1, 492
+       -1, 1, 598
 };
 static int parser_action_row62[] = {
-       1,
-       -1, 1, 500
+       2,
+       -1, 1, 584,
+       79, 0, 205
 };
 static int parser_action_row63[] = {
        1,
-       -1, 1, 325
+       -1, 1, 401
 };
 static int parser_action_row64[] = {
        8,
        -1, 3, 63,
-       3, 0, 218,
-       4, 0, 219,
-       5, 0, 220,
-       6, 0, 221,
-       7, 0, 222,
-       10, 0, 223,
-       20, 0, 224
+       3, 0, 227,
+       4, 0, 228,
+       5, 0, 229,
+       6, 0, 230,
+       7, 0, 231,
+       9, 0, 232,
+       19, 0, 233
 };
 static int parser_action_row65[] = {
        2,
        -1, 3, 64,
-       92, 0, 226
+       92, 0, 235
 };
 static int parser_action_row66[] = {
        1,
-       -1, 1, 327
+       -1, 1, 403
 };
 static int parser_action_row67[] = {
        1,
-       -1, 1, 69
+       -1, 1, 71
 };
 static int parser_action_row68[] = {
        1,
-       -1, 1, 70
+       -1, 1, 72
 };
 static int parser_action_row69[] = {
        3,
-       -1, 1, 340,
+       -1, 1, 420,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row70[] = {
        1,
-       -1, 1, 347
+       -1, 1, 427
 };
 static int parser_action_row71[] = {
        1,
-       -1, 1, 348
+       -1, 1, 428
 };
 static int parser_action_row72[] = {
        1,
-       -1, 1, 360
+       -1, 1, 440
 };
 static int parser_action_row73[] = {
        1,
-       -1, 1, 361
+       -1, 1, 441
 };
 static int parser_action_row74[] = {
        1,
-       -1, 1, 363
+       -1, 1, 443
 };
 static int parser_action_row75[] = {
        1,
-       -1, 1, 362
+       -1, 1, 442
 };
 static int parser_action_row76[] = {
        1,
-       -1, 1, 364
+       -1, 1, 444
 };
 static int parser_action_row77[] = {
        1,
-       -1, 1, 365
+       -1, 1, 445
 };
 static int parser_action_row78[] = {
        3,
        -1, 3, 77,
-       54, 0, 230,
-       64, 0, 231
+       53, 0, 239,
+       63, 0, 240
 };
 static int parser_action_row79[] = {
        1,
-       -1, 1, 493
+       -1, 1, 588
 };
 static int parser_action_row80[] = {
        3,
        -1, 3, 79,
-       88, 0, 233,
-       89, 0, 234
+       87, 0, 242,
+       88, 0, 243
 };
 static int parser_action_row81[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row82[] = {
-       1,
-       -1, 1, 484
+       2,
+       -1, 1, 570,
+       79, 0, 205
 };
 static int parser_action_row83[] = {
        2,
        -1, 3, 82,
-       42, 0, 240
+       41, 0, 250
 };
 static int parser_action_row84[] = {
        1,
-       -1, 1, 860
+       -1, 1, 1284
 };
 static int parser_action_row85[] = {
        1,
-       -1, 1, 521
+       -1, 1, 646
 };
 static int parser_action_row86[] = {
        3,
-       -1, 1, 523,
+       -1, 1, 648,
        80, 0, 54,
-       81, 0, 241
+       81, 0, 251
 };
 static int parser_action_row87[] = {
        3,
-       -1, 1, 529,
+       -1, 1, 654,
        0, 0, 1,
        1, 0, 107
 };
 static int parser_action_row88[] = {
        1,
-       -1, 1, 527
+       -1, 1, 652
 };
 static int parser_action_row89[] = {
        1,
-       -1, 1, 526
+       -1, 1, 651
 };
 static int parser_action_row90[] = {
        1,
-       -1, 1, 536
+       -1, 1, 661
 };
 static int parser_action_row91[] = {
        1,
-       -1, 1, 833
+       -1, 1, 1251
 };
 static int parser_action_row92[] = {
        1,
@@ -2606,21 +3170,21 @@ static int parser_action_row92[] = {
 };
 static int parser_action_row93[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 6
 };
 static int parser_action_row94[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 10
 };
 static int parser_action_row95[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 18
@@ -2631,37 +3195,37 @@ static int parser_action_row96[] = {
 };
 static int parser_action_row97[] = {
        1,
-       -1, 1, 835
+       -1, 1, 1253
 };
 static int parser_action_row98[] = {
        36,
-       -1, 1, 258,
-       12, 0, 28,
-       13, 0, 29,
-       15, 0, 30,
-       18, 0, 31,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       30, 0, 39,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       -1, 1, 331,
+       11, 0, 28,
+       12, 0, 29,
+       14, 0, 30,
+       17, 0, 31,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       29, 0, 39,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -2669,19 +3233,19 @@ static int parser_action_row98[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61,
+       89, 0, 61,
        92, 0, 62
 };
 static int parser_action_row99[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 12
 };
 static int parser_action_row100[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 20
@@ -2692,36 +3256,36 @@ static int parser_action_row101[] = {
 };
 static int parser_action_row102[] = {
        1,
-       -1, 1, 837
+       -1, 1, 1255
 };
 static int parser_action_row103[] = {
        34,
-       -1, 1, 258,
-       12, 0, 28,
-       13, 0, 29,
-       15, 0, 30,
-       18, 0, 31,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       -1, 1, 331,
+       11, 0, 28,
+       12, 0, 29,
+       14, 0, 30,
+       17, 0, 31,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -2729,11 +3293,11 @@ static int parser_action_row103[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
 static int parser_action_row104[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 24
@@ -2744,32 +3308,32 @@ static int parser_action_row105[] = {
 };
 static int parser_action_row106[] = {
        34,
-       -1, 1, 258,
-       12, 0, 28,
-       13, 0, 256,
-       15, 0, 30,
-       18, 0, 31,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       -1, 1, 331,
+       11, 0, 28,
+       12, 0, 266,
+       14, 0, 30,
+       17, 0, 31,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -2777,24 +3341,24 @@ static int parser_action_row106[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
 static int parser_action_row107[] = {
        1,
-       -1, 1, 839
+       -1, 1, 1257
 };
 static int parser_action_row108[] = {
        1,
-       -1, 1, 863
+       -1, 1, 1287
 };
 static int parser_action_row109[] = {
        2,
-       -1, 1, 533,
+       -1, 1, 658,
        0, 0, 109
 };
 static int parser_action_row110[] = {
        1,
-       -1, 1, 865
+       -1, 1, 1289
 };
 static int parser_action_row111[] = {
        1,
@@ -2802,21 +3366,21 @@ static int parser_action_row111[] = {
 };
 static int parser_action_row112[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 7
 };
 static int parser_action_row113[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 11
 };
 static int parser_action_row114[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 19
@@ -2827,14 +3391,14 @@ static int parser_action_row115[] = {
 };
 static int parser_action_row116[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 13
 };
 static int parser_action_row117[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 21
@@ -2845,7 +3409,7 @@ static int parser_action_row118[] = {
 };
 static int parser_action_row119[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 25
@@ -2856,242 +3420,250 @@ static int parser_action_row120[] = {
 };
 static int parser_action_row121[] = {
        1,
-       -1, 1, 532
+       -1, 1, 657
 };
 static int parser_action_row122[] = {
        3,
        -1, 3, 121,
-       58, 0, 268,
-       81, 0, 269
+       57, 0, 278,
+       81, 0, 279
 };
 static int parser_action_row123[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 1, 631,
+       51, 0, 282
 };
 static int parser_action_row124[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row125[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row126[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row127[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row128[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 1, 631,
+       51, 0, 282
 };
 static int parser_action_row129[] = {
-       1,
-       -1, 1, 760
+       2,
+       -1, 1, 864,
+       79, 0, 205
 };
 static int parser_action_row130[] = {
-       1,
-       -1, 1, 761
+       2,
+       -1, 1, 866,
+       79, 0, 205
 };
 static int parser_action_row131[] = {
-       1,
-       -1, 1, 762
+       2,
+       -1, 1, 868,
+       79, 0, 205
 };
 static int parser_action_row132[] = {
-       1,
-       -1, 1, 763
+       2,
+       -1, 1, 870,
+       79, 0, 205
 };
 static int parser_action_row133[] = {
        16,
        -1, 3, 132,
-       12, 0, 122,
-       39, 0, 279,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
+       11, 0, 122,
+       38, 0, 293,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
        80, 0, 54,
        81, 0, 135,
-       82, 0, 280,
+       82, 0, 294,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
 static int parser_action_row134[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row135[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row136[] = {
        3,
-       -1, 1, 506,
-       52, 0, 272,
-       58, 0, 211
+       -1, 1, 631,
+       51, 0, 282,
+       57, 0, 216
 };
 static int parser_action_row137[] = {
        1,
-       -1, 1, 751
+       -1, 1, 855
 };
 static int parser_action_row138[] = {
-       1,
-       -1, 1, 764
+       2,
+       -1, 1, 872,
+       79, 0, 205
 };
 static int parser_action_row139[] = {
-       1,
-       -1, 1, 765
+       2,
+       -1, 1, 874,
+       79, 0, 205
 };
 static int parser_action_row140[] = {
-       1,
-       -1, 1, 766
+       2,
+       -1, 1, 878,
+       79, 0, 205
 };
 static int parser_action_row141[] = {
-       1,
-       -1, 1, 767
+       2,
+       -1, 1, 876,
+       79, 0, 205
 };
 static int parser_action_row142[] = {
        1,
-       -1, 1, 768
+       -1, 1, 880
 };
 static int parser_action_row143[] = {
        1,
-       -1, 1, 479
+       -1, 1, 563
 };
 static int parser_action_row144[] = {
        1,
-       -1, 1, 373
+       -1, 1, 453
 };
 static int parser_action_row145[] = {
        2,
        -1, 3, 144,
-       42, 0, 285
+       41, 0, 303
 };
 static int parser_action_row146[] = {
        1,
-       -1, 1, 508
+       -1, 1, 633
 };
 static int parser_action_row147[] = {
        3,
-       -1, 1, 716,
-       31, 0, 286,
-       32, 0, 287
+       -1, 1, 820,
+       30, 0, 304,
+       31, 0, 305
 };
 static int parser_action_row148[] = {
        1,
-       -1, 1, 718
+       -1, 1, 822
 };
 static int parser_action_row149[] = {
        3,
-       -1, 1, 722,
-       74, 0, 288,
-       77, 0, 289
+       -1, 1, 826,
+       73, 0, 306,
+       76, 0, 307
 };
 static int parser_action_row150[] = {
        12,
-       -1, 1, 724,
-       14, 0, 290,
-       40, 0, 291,
-       65, 0, 292,
-       66, 0, 293,
-       70, 0, 294,
-       71, 0, 295,
-       72, 0, 296,
-       73, 0, 297,
-       75, 0, 298,
-       76, 0, 299,
-       78, 0, 300
+       -1, 1, 828,
+       13, 0, 308,
+       39, 0, 309,
+       64, 0, 310,
+       65, 0, 311,
+       69, 0, 312,
+       70, 0, 313,
+       71, 0, 314,
+       72, 0, 315,
+       74, 0, 316,
+       75, 0, 317,
+       77, 0, 318
 };
 static int parser_action_row151[] = {
        4,
-       -1, 1, 736,
-       67, 0, 301,
-       68, 0, 302,
-       69, 0, 303
+       -1, 1, 840,
+       66, 0, 319,
+       67, 0, 320,
+       68, 0, 321
 };
 static int parser_action_row152[] = {
        1,
-       -1, 1, 739
+       -1, 1, 843
 };
 static int parser_action_row153[] = {
        1,
-       -1, 1, 743
+       -1, 1, 847
 };
 static int parser_action_row154[] = {
        3,
-       -1, 1, 746,
-       54, 0, 230,
-       64, 0, 304
+       -1, 1, 850,
+       53, 0, 239,
+       63, 0, 322
 };
 static int parser_action_row155[] = {
        7,
        -1, 3, 154,
-       4, 0, 219,
-       5, 0, 220,
-       6, 0, 221,
-       7, 0, 222,
-       10, 0, 306,
-       20, 0, 224
+       4, 0, 228,
+       5, 0, 229,
+       6, 0, 230,
+       7, 0, 231,
+       9, 0, 324,
+       19, 0, 233
 };
 static int parser_action_row156[] = {
        2,
-       -1, 1, 338,
-       50, 1, 709
+       -1, 1, 418,
+       49, 1, 1087
 };
 static int parser_action_row157[] = {
        1,
-       -1, 1, 413
+       -1, 1, 497
 };
 static int parser_action_row158[] = {
        1,
-       -1, 1, 339
+       -1, 1, 419
 };
 static int parser_action_row159[] = {
        31,
        -1, 3, 158,
-       9, 0, 308,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 326,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -3099,260 +3671,261 @@ static int parser_action_row159[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
 static int parser_action_row160[] = {
        2,
        -1, 3, 159,
-       50, 0, 191
+       49, 0, 191
 };
 static int parser_action_row161[] = {
-       3,
-       -1, 1, 396,
-       57, 0, 312,
-       59, 0, 313
+       4,
+       -1, 1, 476,
+       56, 0, 330,
+       58, 0, 331,
+       79, 0, 205
 };
 static int parser_action_row162[] = {
        1,
-       -1, 1, 260
+       -1, 1, 333
 };
 static int parser_action_row163[] = {
        1,
-       -1, 1, 259
+       -1, 1, 332
 };
 static int parser_action_row164[] = {
        1,
-       -1, 1, 261
+       -1, 1, 334
 };
 static int parser_action_row165[] = {
        23,
        -1, 3, 164,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
 static int parser_action_row166[] = {
        23,
        -1, 3, 165,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
 static int parser_action_row167[] = {
        1,
-       -1, 1, 422
+       -1, 1, 506
 };
 static int parser_action_row168[] = {
        2,
        -1, 3, 167,
-       50, 0, 191
+       49, 0, 191
 };
 static int parser_action_row169[] = {
        3,
        -1, 3, 168,
-       52, 0, 318,
-       81, 0, 319
+       51, 0, 337,
+       81, 0, 338
 };
 static int parser_action_row170[] = {
        1,
-       -1, 1, 324
+       -1, 1, 400
 };
 static int parser_action_row171[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 1, 631,
+       51, 0, 282
 };
 static int parser_action_row172[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row173[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row174[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row175[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row176[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 1, 631,
+       51, 0, 282
 };
 static int parser_action_row177[] = {
        18,
        -1, 3, 176,
-       12, 0, 170,
-       39, 0, 45,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 206,
-       82, 0, 325,
+       11, 0, 170,
+       38, 0, 45,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 344,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
 static int parser_action_row178[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row179[] = {
        3,
-       -1, 1, 506,
-       52, 0, 272,
-       58, 0, 211
+       -1, 1, 631,
+       51, 0, 282,
+       57, 0, 216
 };
 static int parser_action_row180[] = {
        1,
-       -1, 1, 473
+       -1, 1, 557
 };
 static int parser_action_row181[] = {
        1,
-       -1, 1, 350
+       -1, 1, 430
 };
 static int parser_action_row182[] = {
        1,
-       -1, 1, 434
+       -1, 1, 518
 };
 static int parser_action_row183[] = {
        3,
-       -1, 1, 438,
-       31, 0, 329,
-       32, 0, 330
+       -1, 1, 522,
+       30, 0, 348,
+       31, 0, 349
 };
 static int parser_action_row184[] = {
        1,
-       -1, 1, 440
+       -1, 1, 524
 };
 static int parser_action_row185[] = {
        3,
-       -1, 1, 444,
-       74, 0, 331,
-       77, 0, 332
+       -1, 1, 528,
+       73, 0, 350,
+       76, 0, 351
 };
 static int parser_action_row186[] = {
        12,
-       -1, 1, 446,
-       14, 0, 333,
-       40, 0, 334,
-       65, 0, 335,
-       66, 0, 336,
-       70, 0, 337,
-       71, 0, 338,
-       72, 0, 339,
-       73, 0, 340,
-       75, 0, 341,
-       76, 0, 342,
-       78, 0, 343
+       -1, 1, 530,
+       13, 0, 352,
+       39, 0, 353,
+       64, 0, 354,
+       65, 0, 355,
+       69, 0, 356,
+       70, 0, 357,
+       71, 0, 358,
+       72, 0, 359,
+       74, 0, 360,
+       75, 0, 361,
+       77, 0, 362
 };
 static int parser_action_row187[] = {
        4,
-       -1, 1, 458,
-       67, 0, 344,
-       68, 0, 345,
-       69, 0, 346
+       -1, 1, 542,
+       66, 0, 363,
+       67, 0, 364,
+       68, 0, 365
 };
 static int parser_action_row188[] = {
        1,
-       -1, 1, 461
+       -1, 1, 545
 };
 static int parser_action_row189[] = {
        1,
-       -1, 1, 465
+       -1, 1, 549
 };
 static int parser_action_row190[] = {
        3,
-       -1, 1, 468,
-       54, 0, 230,
-       64, 0, 347
+       -1, 1, 552,
+       53, 0, 239,
+       63, 0, 366
 };
 static int parser_action_row191[] = {
        2,
        -1, 3, 190,
-       42, 0, 349
+       41, 0, 368
 };
 static int parser_action_row192[] = {
        2,
        -1, 3, 191,
-       81, 0, 350
+       81, 0, 369
 };
 static int parser_action_row193[] = {
        23,
-       -1, 1, 357,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 1, 437,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -3360,29 +3933,29 @@ static int parser_action_row193[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
 static int parser_action_row194[] = {
        1,
-       -1, 1, 358
+       -1, 1, 438
 };
 static int parser_action_row195[] = {
        23,
-       -1, 1, 352,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 1, 432,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -3390,169 +3963,194 @@ static int parser_action_row195[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
 static int parser_action_row196[] = {
        1,
-       -1, 1, 353
+       -1, 1, 433
 };
 static int parser_action_row197[] = {
        4,
-       -1, 1, 506,
-       52, 0, 272,
-       57, 0, 353,
-       58, 0, 211
+       -1, 1, 631,
+       51, 0, 282,
+       56, 0, 372,
+       57, 0, 216
 };
 static int parser_action_row198[] = {
        23,
        -1, 3, 197,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
 static int parser_action_row199[] = {
        1,
-       -1, 1, 431
+       -1, 1, 515
 };
 static int parser_action_row200[] = {
        2,
-       -1, 1, 434,
-       26, 1, 700
+       -1, 1, 518,
+       25, 1, 1034
 };
 static int parser_action_row201[] = {
        3,
-       -1, 1, 468,
-       54, 0, 230,
-       64, 0, 358
+       -1, 1, 552,
+       53, 0, 239,
+       63, 0, 377
 };
 static int parser_action_row202[] = {
        2,
        -1, 3, 201,
-       26, 0, 360
+       25, 0, 379
 };
 static int parser_action_row203[] = {
        3,
        -1, 3, 202,
-       48, 0, 361,
-       80, 0, 362
+       47, 0, 380,
+       80, 0, 381
 };
 static int parser_action_row204[] = {
        1,
-       -1, 1, 476
+       -1, 1, 560
 };
 static int parser_action_row205[] = {
        1,
-       -1, 1, 370
+       -1, 1, 450
 };
 static int parser_action_row206[] = {
-       3,
+       6,
        -1, 3, 205,
-       48, 0, 361,
-       80, 0, 362
+       3, 0, 383,
+       15, 0, 384,
+       16, 0, 385,
+       51, 0, 386,
+       81, 0, 387
 };
 static int parser_action_row207[] = {
-       3,
-       -1, 1, 506,
-       52, 0, 272,
-       58, 0, 211
+       1,
+       -1, 1, 573
 };
 static int parser_action_row208[] = {
-       2,
-       -1, 3, 207,
-       53, 0, 366
+       1,
+       -1, 1, 575
 };
 static int parser_action_row209[] = {
-       3,
-       -1, 1, 468,
-       54, 0, 230,
-       64, 0, 367
+       1,
+       -1, 1, 577
 };
 static int parser_action_row210[] = {
+       1,
+       -1, 1, 579
+};
+static int parser_action_row211[] = {
+       3,
+       -1, 3, 210,
+       47, 0, 390,
+       80, 0, 391
+};
+static int parser_action_row212[] = {
+       3,
+       -1, 1, 631,
+       51, 0, 282,
+       57, 0, 216
+};
+static int parser_action_row213[] = {
+       2,
+       -1, 3, 212,
+       52, 0, 394
+};
+static int parser_action_row214[] = {
+       3,
+       -1, 1, 552,
+       53, 0, 239,
+       63, 0, 395
+};
+static int parser_action_row215[] = {
        23,
-       -1, 3, 209,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 214,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row211[] = {
+static int parser_action_row216[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row212[] = {
+static int parser_action_row217[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row213[] = {
+static int parser_action_row218[] = {
        4,
-       -1, 1, 475,
-       59, 0, 373,
-       60, 0, 215,
-       61, 0, 216
+       -1, 1, 559,
+       58, 0, 401,
+       59, 0, 220,
+       60, 0, 221
 };
-static int parser_action_row214[] = {
+static int parser_action_row219[] = {
        2,
-       -1, 1, 367,
-       79, 0, 375
+       -1, 1, 447,
+       78, 0, 403
 };
-static int parser_action_row215[] = {
+static int parser_action_row220[] = {
        23,
-       -1, 3, 214,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 219,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -3560,33 +4158,33 @@ static int parser_action_row215[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row216[] = {
+static int parser_action_row221[] = {
        1,
-       -1, 1, 410
+       -1, 1, 494
 };
-static int parser_action_row217[] = {
+static int parser_action_row222[] = {
        1,
-       -1, 1, 411
+       -1, 1, 495
 };
-static int parser_action_row218[] = {
+static int parser_action_row223[] = {
        23,
-       -1, 3, 217,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 222,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -3594,93 +4192,110 @@ static int parser_action_row218[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row219[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+       89, 0, 61
 };
-static int parser_action_row220[] = {
+static int parser_action_row224[] = {
        1,
-       -1, 1, 103
-};
-static int parser_action_row221[] = {
-       2,
-       -1, 3, 220,
-       4, 0, 382
+       -1, 1, 581
 };
-static int parser_action_row222[] = {
+static int parser_action_row225[] = {
        1,
-       -1, 1, 105
+       -1, 1, 583
 };
-static int parser_action_row223[] = {
+static int parser_action_row226[] = {
        1,
-       -1, 1, 106
-};
-static int parser_action_row224[] = {
-       17,
-       -1, 3, 223,
-       54, 0, 383,
-       65, 0, 384,
-       66, 0, 385,
-       67, 0, 386,
-       68, 0, 387,
-       69, 0, 388,
-       70, 0, 389,
-       71, 0, 390,
-       72, 0, 391,
-       73, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       81, 0, 398
+       -1, 1, 587
 };
-static int parser_action_row225[] = {
+static int parser_action_row227[] = {
        1,
-       -1, 1, 107
+       -1, 1, 585
 };
-static int parser_action_row226[] = {
+static int parser_action_row228[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row227[] = {
+static int parser_action_row229[] = {
        1,
-       -1, 1, 326
+       -1, 1, 137
 };
-static int parser_action_row228[] = {
+static int parser_action_row230[] = {
+       2,
+       -1, 3, 229,
+       4, 0, 410
+};
+static int parser_action_row231[] = {
        1,
-       -1, 1, 854
+       -1, 1, 139
 };
-static int parser_action_row229[] = {
+static int parser_action_row232[] = {
+       1,
+       -1, 1, 140
+};
+static int parser_action_row233[] = {
+       17,
+       -1, 3, 232,
+       53, 0, 411,
+       64, 0, 412,
+       65, 0, 413,
+       66, 0, 414,
+       67, 0, 415,
+       68, 0, 416,
+       69, 0, 417,
+       70, 0, 418,
+       71, 0, 419,
+       72, 0, 420,
+       73, 0, 421,
+       74, 0, 422,
+       75, 0, 423,
+       76, 0, 424,
+       77, 0, 425,
+       81, 0, 426
+};
+static int parser_action_row234[] = {
+       2,
+       -1, 1, 141,
+       4, 0, 428
+};
+static int parser_action_row235[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row236[] = {
+       1,
+       -1, 1, 402
+};
+static int parser_action_row237[] = {
+       1,
+       -1, 1, 1272
+};
+static int parser_action_row238[] = {
        30,
-       -1, 1, 342,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       -1, 1, 422,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -3688,981 +4303,1025 @@ static int parser_action_row229[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row230[] = {
+static int parser_action_row239[] = {
        3,
-       -1, 1, 341,
+       -1, 1, 421,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row231[] = {
+static int parser_action_row240[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row232[] = {
+static int parser_action_row241[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row233[] = {
+static int parser_action_row242[] = {
        4,
-       -1, 1, 480,
-       59, 0, 406,
-       60, 0, 215,
-       61, 0, 216
+       -1, 1, 564,
+       58, 0, 435,
+       59, 0, 220,
+       60, 0, 221
 };
-static int parser_action_row234[] = {
+static int parser_action_row243[] = {
        1,
-       -1, 1, 502
+       -1, 1, 600
 };
-static int parser_action_row235[] = {
+static int parser_action_row244[] = {
        1,
-       -1, 1, 503
+       -1, 1, 601
 };
-static int parser_action_row236[] = {
+static int parser_action_row245[] = {
        1,
-       -1, 1, 856
+       -1, 1, 1274
 };
-static int parser_action_row237[] = {
+static int parser_action_row246[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row238[] = {
-       1,
-       -1, 1, 497
+static int parser_action_row247[] = {
+       2,
+       -1, 1, 593,
+       79, 0, 205
 };
-static int parser_action_row239[] = {
+static int parser_action_row248[] = {
        3,
-       -1, 3, 238,
-       88, 0, 233,
-       89, 0, 234
+       -1, 3, 247,
+       87, 0, 242,
+       88, 0, 243
 };
-static int parser_action_row240[] = {
+static int parser_action_row249[] = {
        23,
-       -1, 3, 239,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 248,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row241[] = {
+static int parser_action_row250[] = {
+       1,
+       -1, 1, 571
+};
+static int parser_action_row251[] = {
        24,
-       -1, 1, 510,
-       12, 0, 122,
-       24, 0, 123,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       52, 0, 133,
-       54, 1, 506,
-       64, 1, 506,
-       66, 0, 134,
+       -1, 1, 635,
+       11, 0, 122,
+       23, 0, 123,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       51, 0, 133,
+       53, 1, 631,
+       63, 1, 631,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row242[] = {
+static int parser_action_row252[] = {
        2,
-       -1, 3, 241,
-       58, 0, 211
+       -1, 3, 251,
+       57, 0, 216
 };
-static int parser_action_row243[] = {
+static int parser_action_row253[] = {
        1,
-       -1, 1, 861
+       -1, 1, 1285
 };
-static int parser_action_row244[] = {
+static int parser_action_row254[] = {
        1,
-       -1, 1, 522
+       -1, 1, 647
 };
-static int parser_action_row245[] = {
+static int parser_action_row255[] = {
        2,
-       -1, 1, 534,
+       -1, 1, 659,
        0, 0, 109
 };
-static int parser_action_row246[] = {
+static int parser_action_row256[] = {
        1,
        -1, 1, 38
 };
-static int parser_action_row247[] = {
+static int parser_action_row257[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 14
 };
-static int parser_action_row248[] = {
+static int parser_action_row258[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 22
 };
-static int parser_action_row249[] = {
+static int parser_action_row259[] = {
        1,
        -1, 1, 42
 };
-static int parser_action_row250[] = {
+static int parser_action_row260[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 26
 };
-static int parser_action_row251[] = {
+static int parser_action_row261[] = {
        1,
        -1, 1, 50
 };
-static int parser_action_row252[] = {
+static int parser_action_row262[] = {
        7,
-       -1, 3, 251,
-       4, 0, 219,
-       5, 0, 220,
-       6, 0, 221,
-       7, 0, 222,
-       10, 0, 223,
-       20, 0, 224
+       -1, 3, 261,
+       4, 0, 228,
+       5, 0, 229,
+       6, 0, 230,
+       7, 0, 231,
+       9, 0, 232,
+       19, 0, 233
 };
-static int parser_action_row253[] = {
+static int parser_action_row263[] = {
        1,
        -1, 1, 44
 };
-static int parser_action_row254[] = {
+static int parser_action_row264[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 28
 };
-static int parser_action_row255[] = {
+static int parser_action_row265[] = {
        1,
        -1, 1, 52
 };
-static int parser_action_row256[] = {
+static int parser_action_row266[] = {
        1,
        -1, 1, 56
 };
-static int parser_action_row257[] = {
+static int parser_action_row267[] = {
        4,
-       -1, 1, 258,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row258[] = {
+static int parser_action_row268[] = {
        2,
-       -1, 3, 257,
-       10, 0, 223
+       -1, 3, 267,
+       9, 0, 232
 };
-static int parser_action_row259[] = {
+static int parser_action_row269[] = {
        1,
        -1, 1, 39
 };
-static int parser_action_row260[] = {
+static int parser_action_row270[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 15
 };
-static int parser_action_row261[] = {
+static int parser_action_row271[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 23
 };
-static int parser_action_row262[] = {
+static int parser_action_row272[] = {
        1,
        -1, 1, 43
 };
-static int parser_action_row263[] = {
+static int parser_action_row273[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 27
 };
-static int parser_action_row264[] = {
+static int parser_action_row274[] = {
        1,
        -1, 1, 51
 };
-static int parser_action_row265[] = {
+static int parser_action_row275[] = {
        1,
        -1, 1, 45
 };
-static int parser_action_row266[] = {
+static int parser_action_row276[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 29
 };
-static int parser_action_row267[] = {
+static int parser_action_row277[] = {
        1,
        -1, 1, 53
 };
-static int parser_action_row268[] = {
+static int parser_action_row278[] = {
        1,
        -1, 1, 57
 };
-static int parser_action_row269[] = {
+static int parser_action_row279[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row270[] = {
+static int parser_action_row280[] = {
        2,
-       -1, 1, 517,
-       58, 0, 211
+       -1, 1, 642,
+       57, 0, 216
 };
-static int parser_action_row271[] = {
-       3,
-       -1, 3, 270,
+static int parser_action_row281[] = {
+       4,
+       -1, 3, 280,
        0, 0, 87,
-       1, 0, 88
+       1, 0, 88,
+       13, 0, 456
 };
-static int parser_action_row272[] = {
+static int parser_action_row282[] = {
        2,
-       -1, 3, 271,
-       81, 0, 427
+       -1, 3, 281,
+       81, 0, 459
 };
-static int parser_action_row273[] = {
+static int parser_action_row283[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row274[] = {
+static int parser_action_row284[] = {
        1,
-       -1, 1, 757
+       -1, 1, 861
 };
-static int parser_action_row275[] = {
+static int parser_action_row285[] = {
        23,
-       -1, 3, 274,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 284,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row276[] = {
+static int parser_action_row286[] = {
        20,
-       -1, 3, 275,
-       12, 0, 122,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 285,
+       11, 0, 122,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row277[] = {
+static int parser_action_row287[] = {
        3,
-       -1, 3, 276,
-       48, 0, 361,
-       80, 0, 362
+       -1, 3, 286,
+       47, 0, 380,
+       80, 0, 381
 };
-static int parser_action_row278[] = {
+static int parser_action_row288[] = {
        19,
-       -1, 3, 277,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 287,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row279[] = {
+static int parser_action_row289[] = {
        1,
-       -1, 1, 754
+       -1, 1, 858
 };
-static int parser_action_row280[] = {
+static int parser_action_row290[] = {
+       1,
+       -1, 1, 865
+};
+static int parser_action_row291[] = {
+       1,
+       -1, 1, 867
+};
+static int parser_action_row292[] = {
+       1,
+       -1, 1, 869
+};
+static int parser_action_row293[] = {
+       1,
+       -1, 1, 871
+};
+static int parser_action_row294[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row281[] = {
+static int parser_action_row295[] = {
        3,
-       -1, 1, 749,
-       54, 1, 751,
-       64, 1, 751
+       -1, 1, 853,
+       53, 1, 855,
+       63, 1, 855
 };
-static int parser_action_row282[] = {
+static int parser_action_row296[] = {
        3,
-       -1, 3, 281,
-       54, 0, 230,
-       64, 0, 434
+       -1, 3, 295,
+       53, 0, 239,
+       63, 0, 466
 };
-static int parser_action_row283[] = {
+static int parser_action_row297[] = {
        24,
-       -1, 3, 282,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       53, 0, 435,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 296,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       52, 0, 467,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row284[] = {
+static int parser_action_row298[] = {
        19,
-       -1, 3, 283,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 297,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row285[] = {
+static int parser_action_row299[] = {
        1,
-       -1, 1, 753
+       -1, 1, 857
 };
-static int parser_action_row286[] = {
+static int parser_action_row300[] = {
+       1,
+       -1, 1, 873
+};
+static int parser_action_row301[] = {
+       1,
+       -1, 1, 875
+};
+static int parser_action_row302[] = {
+       1,
+       -1, 1, 879
+};
+static int parser_action_row303[] = {
+       1,
+       -1, 1, 877
+};
+static int parser_action_row304[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 1, 631,
+       51, 0, 282
 };
-static int parser_action_row287[] = {
+static int parser_action_row305[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row288[] = {
+static int parser_action_row306[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       26, 0, 441
+       25, 0, 473
 };
-static int parser_action_row289[] = {
+static int parser_action_row307[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row290[] = {
+static int parser_action_row308[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row291[] = {
+static int parser_action_row309[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row292[] = {
+static int parser_action_row310[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row293[] = {
+static int parser_action_row311[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row294[] = {
+static int parser_action_row312[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row295[] = {
+static int parser_action_row313[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row296[] = {
+static int parser_action_row314[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row297[] = {
+static int parser_action_row315[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row298[] = {
+static int parser_action_row316[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row299[] = {
+static int parser_action_row317[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row300[] = {
+static int parser_action_row318[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row301[] = {
+static int parser_action_row319[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row302[] = {
+static int parser_action_row320[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row303[] = {
+static int parser_action_row321[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row304[] = {
+static int parser_action_row322[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row305[] = {
+static int parser_action_row323[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row306[] = {
+static int parser_action_row324[] = {
        1,
-       -1, 1, 758
+       -1, 1, 862
 };
-static int parser_action_row307[] = {
+static int parser_action_row325[] = {
        17,
-       -1, 3, 306,
-       54, 0, 383,
-       65, 0, 384,
-       66, 0, 385,
-       67, 0, 386,
-       68, 0, 387,
-       69, 0, 388,
-       70, 0, 389,
-       71, 0, 390,
-       72, 0, 391,
-       73, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       81, 0, 398
+       -1, 3, 324,
+       53, 0, 411,
+       64, 0, 412,
+       65, 0, 413,
+       66, 0, 414,
+       67, 0, 415,
+       68, 0, 416,
+       69, 0, 417,
+       70, 0, 418,
+       71, 0, 419,
+       72, 0, 420,
+       73, 0, 421,
+       74, 0, 422,
+       75, 0, 423,
+       76, 0, 424,
+       77, 0, 425,
+       81, 0, 426
 };
-static int parser_action_row308[] = {
+static int parser_action_row326[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row309[] = {
+static int parser_action_row327[] = {
        2,
-       -1, 1, 337,
-       50, 1, 708
+       -1, 1, 417,
+       49, 1, 1086
 };
-static int parser_action_row310[] = {
+static int parser_action_row328[] = {
        2,
-       -1, 1, 336,
-       50, 1, 707
+       -1, 1, 416,
+       49, 1, 1085
 };
-static int parser_action_row311[] = {
+static int parser_action_row329[] = {
        3,
-       -1, 3, 310,
+       -1, 3, 328,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row312[] = {
+static int parser_action_row330[] = {
        1,
-       -1, 1, 412
+       -1, 1, 496
 };
-static int parser_action_row313[] = {
+static int parser_action_row331[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row314[] = {
+static int parser_action_row332[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row315[] = {
+static int parser_action_row333[] = {
        2,
-       -1, 1, 397,
-       59, 0, 466
+       -1, 1, 478,
+       58, 0, 498
 };
-static int parser_action_row316[] = {
+static int parser_action_row334[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 477,
+       56, 0, 330,
+       58, 0, 499
+};
+static int parser_action_row335[] = {
+       3,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row317[] = {
+static int parser_action_row336[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row318[] = {
+static int parser_action_row337[] = {
        1,
-       -1, 1, 421
+       -1, 1, 505
 };
-static int parser_action_row319[] = {
+static int parser_action_row338[] = {
        2,
-       -1, 3, 318,
-       81, 0, 319
+       -1, 3, 337,
+       81, 0, 338
 };
-static int parser_action_row320[] = {
+static int parser_action_row339[] = {
        1,
-       -1, 1, 515
+       -1, 1, 640
 };
-static int parser_action_row321[] = {
+static int parser_action_row340[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row322[] = {
+static int parser_action_row341[] = {
        23,
-       -1, 3, 321,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 340,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row323[] = {
+static int parser_action_row342[] = {
        22,
-       -1, 3, 322,
-       12, 0, 170,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 341,
+       11, 0, 170,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row324[] = {
+static int parser_action_row343[] = {
        3,
-       -1, 3, 323,
-       48, 0, 361,
-       80, 0, 362
+       -1, 3, 342,
+       47, 0, 380,
+       80, 0, 381
 };
-static int parser_action_row325[] = {
+static int parser_action_row344[] = {
        21,
-       -1, 3, 324,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 343,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row326[] = {
+static int parser_action_row345[] = {
        3,
-       -1, 1, 471,
-       54, 1, 473,
-       64, 1, 473
+       -1, 1, 555,
+       53, 1, 557,
+       63, 1, 557
 };
-static int parser_action_row327[] = {
+static int parser_action_row346[] = {
        3,
-       -1, 3, 326,
-       54, 0, 230,
-       64, 0, 475
+       -1, 3, 345,
+       53, 0, 239,
+       63, 0, 509
 };
-static int parser_action_row328[] = {
+static int parser_action_row347[] = {
        21,
-       -1, 3, 327,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 346,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row329[] = {
+static int parser_action_row348[] = {
        2,
-       -1, 1, 475,
-       79, 0, 375
+       -1, 1, 559,
+       78, 0, 403
 };
-static int parser_action_row330[] = {
+static int parser_action_row349[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row331[] = {
+static int parser_action_row350[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       26, 0, 479
+       25, 0, 513
 };
-static int parser_action_row332[] = {
+static int parser_action_row351[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row333[] = {
+static int parser_action_row352[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row334[] = {
+static int parser_action_row353[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row335[] = {
+static int parser_action_row354[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row336[] = {
+static int parser_action_row355[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row337[] = {
+static int parser_action_row356[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row338[] = {
+static int parser_action_row357[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row339[] = {
+static int parser_action_row358[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row340[] = {
+static int parser_action_row359[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row341[] = {
+static int parser_action_row360[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row342[] = {
+static int parser_action_row361[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row343[] = {
+static int parser_action_row362[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row344[] = {
+static int parser_action_row363[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row345[] = {
+static int parser_action_row364[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row346[] = {
+static int parser_action_row365[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row347[] = {
+static int parser_action_row366[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row348[] = {
+static int parser_action_row367[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row349[] = {
+static int parser_action_row368[] = {
        2,
-       -1, 1, 480,
-       79, 0, 375
+       -1, 1, 564,
+       78, 0, 403
 };
-static int parser_action_row350[] = {
+static int parser_action_row369[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 1, 631,
+       51, 0, 282
 };
-static int parser_action_row351[] = {
+static int parser_action_row370[] = {
        1,
-       -1, 1, 375
+       -1, 1, 455
 };
-static int parser_action_row352[] = {
+static int parser_action_row371[] = {
        1,
-       -1, 1, 359
+       -1, 1, 439
 };
-static int parser_action_row353[] = {
+static int parser_action_row372[] = {
        1,
-       -1, 1, 354
+       -1, 1, 434
 };
-static int parser_action_row354[] = {
+static int parser_action_row373[] = {
        1,
-       -1, 1, 433
+       -1, 1, 517
 };
-static int parser_action_row355[] = {
+static int parser_action_row374[] = {
        2,
-       -1, 1, 475,
-       79, 0, 499
+       -1, 1, 559,
+       78, 0, 533
 };
-static int parser_action_row356[] = {
+static int parser_action_row375[] = {
        3,
-       -1, 1, 506,
-       52, 0, 272,
-       58, 0, 211
+       -1, 1, 631,
+       51, 0, 282,
+       57, 0, 216
 };
-static int parser_action_row357[] = {
+static int parser_action_row376[] = {
        1,
-       -1, 1, 432
+       -1, 1, 516
 };
-static int parser_action_row358[] = {
+static int parser_action_row377[] = {
        2,
-       -1, 3, 357,
-       26, 0, 503
+       -1, 3, 376,
+       25, 0, 537
 };
-static int parser_action_row359[] = {
+static int parser_action_row378[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row360[] = {
+static int parser_action_row379[] = {
        2,
-       -1, 1, 480,
-       79, 0, 499
+       -1, 1, 564,
+       78, 0, 533
 };
-static int parser_action_row361[] = {
+static int parser_action_row380[] = {
        33,
-       -1, 3, 360,
+       -1, 3, 379,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 506,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -4670,82 +5329,129 @@ static int parser_action_row361[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row362[] = {
+static int parser_action_row381[] = {
        2,
-       -1, 3, 361,
-       80, 0, 509
+       -1, 3, 380,
+       80, 0, 543
 };
-static int parser_action_row363[] = {
+static int parser_action_row382[] = {
+       3,
+       -1, 1, 771,
+       53, 0, 544,
+       79, 0, 545
+};
+static int parser_action_row383[] = {
        2,
-       -1, 1, 328,
-       54, 0, 510
+       -1, 3, 382,
+       63, 0, 547
 };
-static int parser_action_row364[] = {
+static int parser_action_row384[] = {
+       1,
+       -1, 1, 628
+};
+static int parser_action_row385[] = {
+       1,
+       -1, 1, 626
+};
+static int parser_action_row386[] = {
+       1,
+       -1, 1, 627
+};
+static int parser_action_row387[] = {
+       5,
+       -1, 3, 386,
+       3, 0, 383,
+       15, 0, 384,
+       16, 0, 385,
+       81, 0, 387
+};
+static int parser_action_row388[] = {
+       1,
+       -1, 1, 625
+};
+static int parser_action_row389[] = {
+       1,
+       -1, 1, 602
+};
+static int parser_action_row390[] = {
+       3,
+       -1, 1, 604,
+       51, 0, 550,
+       79, 0, 205
+};
+static int parser_action_row391[] = {
        2,
-       -1, 3, 363,
-       64, 0, 511
+       -1, 3, 390,
+       80, 0, 552
 };
-static int parser_action_row365[] = {
+static int parser_action_row392[] = {
+       3,
+       -1, 1, 404,
+       53, 0, 553,
+       79, 0, 205
+};
+static int parser_action_row393[] = {
        2,
-       -1, 3, 364,
-       57, 0, 512
+       -1, 3, 392,
+       56, 0, 555
 };
-static int parser_action_row366[] = {
+static int parser_action_row394[] = {
        1,
-       -1, 1, 475
+       -1, 1, 559
 };
-static int parser_action_row367[] = {
-       1,
-       -1, 1, 494
+static int parser_action_row395[] = {
+       2,
+       -1, 1, 589,
+       79, 0, 205
 };
-static int parser_action_row368[] = {
+static int parser_action_row396[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row369[] = {
+static int parser_action_row397[] = {
        1,
-       -1, 1, 480
+       -1, 1, 564
 };
-static int parser_action_row370[] = {
+static int parser_action_row398[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row371[] = {
+static int parser_action_row399[] = {
        2,
-       -1, 3, 370,
-       55, 0, 515
+       -1, 3, 398,
+       54, 0, 559
 };
-static int parser_action_row372[] = {
+static int parser_action_row400[] = {
        1,
-       -1, 1, 525
+       -1, 1, 650
 };
-static int parser_action_row373[] = {
+static int parser_action_row401[] = {
        1,
-       -1, 1, 524
+       -1, 1, 649
 };
-static int parser_action_row374[] = {
+static int parser_action_row402[] = {
        23,
-       -1, 3, 373,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 401,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -4753,25 +5459,25 @@ static int parser_action_row374[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row375[] = {
+static int parser_action_row403[] = {
        23,
-       -1, 3, 374,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 402,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -4779,157 +5485,161 @@ static int parser_action_row375[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row376[] = {
+static int parser_action_row404[] = {
        3,
-       -1, 3, 375,
-       36, 0, 518,
-       81, 0, 519
+       -1, 3, 403,
+       35, 0, 562,
+       81, 0, 563
 };
-static int parser_action_row377[] = {
+static int parser_action_row405[] = {
        1,
-       -1, 1, 369
+       -1, 1, 449
 };
-static int parser_action_row378[] = {
+static int parser_action_row406[] = {
        1,
-       -1, 1, 376
+       -1, 1, 456
 };
-static int parser_action_row379[] = {
+static int parser_action_row407[] = {
        2,
-       -1, 3, 378,
-       79, 0, 375
+       -1, 3, 406,
+       78, 0, 403
 };
-static int parser_action_row380[] = {
+static int parser_action_row408[] = {
        1,
-       -1, 1, 401
+       -1, 1, 485
 };
-static int parser_action_row381[] = {
+static int parser_action_row409[] = {
        1,
-       -1, 1, 406
+       -1, 1, 490
 };
-static int parser_action_row382[] = {
+static int parser_action_row410[] = {
        4,
-       -1, 3, 381,
-       9, 0, 522,
-       58, 0, 268,
-       81, 0, 269
+       -1, 3, 409,
+       8, 0, 566,
+       57, 0, 278,
+       81, 0, 279
 };
-static int parser_action_row383[] = {
+static int parser_action_row411[] = {
        1,
-       -1, 1, 104
+       -1, 1, 138
 };
-static int parser_action_row384[] = {
+static int parser_action_row412[] = {
        2,
-       -1, 3, 383,
-       55, 0, 524
+       -1, 3, 411,
+       54, 0, 568
 };
-static int parser_action_row385[] = {
+static int parser_action_row413[] = {
        1,
-       -1, 1, 263
+       -1, 1, 336
 };
-static int parser_action_row386[] = {
+static int parser_action_row414[] = {
        1,
-       -1, 1, 264
+       -1, 1, 337
 };
-static int parser_action_row387[] = {
+static int parser_action_row415[] = {
        1,
-       -1, 1, 265
+       -1, 1, 338
 };
-static int parser_action_row388[] = {
+static int parser_action_row416[] = {
        1,
-       -1, 1, 266
+       -1, 1, 339
 };
-static int parser_action_row389[] = {
+static int parser_action_row417[] = {
        1,
-       -1, 1, 267
+       -1, 1, 340
 };
-static int parser_action_row390[] = {
+static int parser_action_row418[] = {
        1,
-       -1, 1, 268
+       -1, 1, 341
 };
-static int parser_action_row391[] = {
+static int parser_action_row419[] = {
        1,
-       -1, 1, 269
+       -1, 1, 342
 };
-static int parser_action_row392[] = {
+static int parser_action_row420[] = {
        1,
-       -1, 1, 272
+       -1, 1, 345
 };
-static int parser_action_row393[] = {
+static int parser_action_row421[] = {
        1,
-       -1, 1, 270
+       -1, 1, 343
 };
-static int parser_action_row394[] = {
+static int parser_action_row422[] = {
        1,
-       -1, 1, 274
+       -1, 1, 347
 };
-static int parser_action_row395[] = {
+static int parser_action_row423[] = {
        1,
-       -1, 1, 273
+       -1, 1, 346
 };
-static int parser_action_row396[] = {
+static int parser_action_row424[] = {
        1,
-       -1, 1, 271
+       -1, 1, 344
 };
-static int parser_action_row397[] = {
+static int parser_action_row425[] = {
        1,
-       -1, 1, 275
+       -1, 1, 348
 };
-static int parser_action_row398[] = {
+static int parser_action_row426[] = {
        1,
-       -1, 1, 277
+       -1, 1, 350
 };
-static int parser_action_row399[] = {
+static int parser_action_row427[] = {
        2,
-       -1, 1, 262,
-       59, 0, 525
+       -1, 1, 335,
+       58, 0, 569
 };
-static int parser_action_row400[] = {
+static int parser_action_row428[] = {
        5,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       52, 0, 526,
-       57, 0, 312
+       51, 0, 570,
+       56, 0, 330
 };
-static int parser_action_row401[] = {
+static int parser_action_row429[] = {
+       1,
+       -1, 1, 142
+};
+static int parser_action_row430[] = {
        2,
-       -1, 3, 400,
-       80, 0, 531
+       -1, 3, 429,
+       80, 0, 575
 };
-static int parser_action_row402[] = {
+static int parser_action_row431[] = {
        1,
-       -1, 1, 346
+       -1, 1, 426
 };
-static int parser_action_row403[] = {
+static int parser_action_row432[] = {
        1,
-       -1, 1, 855
+       -1, 1, 1273
 };
-static int parser_action_row404[] = {
+static int parser_action_row433[] = {
        30,
-       -1, 1, 343,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       -1, 1, 423,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -4937,59 +5647,59 @@ static int parser_action_row404[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row405[] = {
+static int parser_action_row434[] = {
        23,
-       -1, 3, 404,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 433,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row406[] = {
+static int parser_action_row435[] = {
        5,
-       -1, 3, 405,
-       12, 0, 532,
-       47, 0, 533,
-       81, 0, 534,
-       82, 0, 535
+       -1, 3, 434,
+       11, 0, 576,
+       46, 0, 577,
+       81, 0, 578,
+       82, 0, 579
 };
-static int parser_action_row407[] = {
+static int parser_action_row436[] = {
        23,
-       -1, 3, 406,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 435,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -4997,25 +5707,25 @@ static int parser_action_row407[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row408[] = {
+static int parser_action_row437[] = {
        23,
-       -1, 3, 407,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 436,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -5023,642 +5733,663 @@ static int parser_action_row408[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row409[] = {
+static int parser_action_row438[] = {
        23,
-       -1, 3, 408,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 437,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row410[] = {
+static int parser_action_row439[] = {
        1,
-       -1, 1, 857
+       -1, 1, 595
 };
-static int parser_action_row411[] = {
+static int parser_action_row440[] = {
        1,
-       -1, 1, 498
+       -1, 1, 1275
 };
-static int parser_action_row412[] = {
+static int parser_action_row441[] = {
+       2,
+       -1, 1, 594,
+       79, 0, 205
+};
+static int parser_action_row442[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row413[] = {
+static int parser_action_row443[] = {
        1,
-       -1, 1, 477
+       -1, 1, 561
 };
-static int parser_action_row414[] = {
+static int parser_action_row444[] = {
        1,
-       -1, 1, 371
+       -1, 1, 451
 };
-static int parser_action_row415[] = {
+static int parser_action_row445[] = {
        1,
        -1, 1, 46
 };
-static int parser_action_row416[] = {
+static int parser_action_row446[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 30
 };
-static int parser_action_row417[] = {
+static int parser_action_row447[] = {
        1,
        -1, 1, 54
 };
-static int parser_action_row418[] = {
+static int parser_action_row448[] = {
        1,
        -1, 1, 58
 };
-static int parser_action_row419[] = {
+static int parser_action_row449[] = {
        1,
        -1, 1, 60
 };
-static int parser_action_row420[] = {
+static int parser_action_row450[] = {
        2,
-       -1, 3, 419,
-       10, 0, 306
+       -1, 3, 449,
+       9, 0, 324
 };
-static int parser_action_row421[] = {
+static int parser_action_row451[] = {
        1,
        -1, 1, 47
 };
-static int parser_action_row422[] = {
+static int parser_action_row452[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
        93, 1, 31
 };
-static int parser_action_row423[] = {
+static int parser_action_row453[] = {
        1,
        -1, 1, 55
 };
-static int parser_action_row424[] = {
+static int parser_action_row454[] = {
        1,
        -1, 1, 59
 };
-static int parser_action_row425[] = {
+static int parser_action_row455[] = {
        1,
        -1, 1, 61
 };
-static int parser_action_row426[] = {
+static int parser_action_row456[] = {
        2,
-       -1, 3, 425,
-       81, 0, 542
+       -1, 3, 455,
+       81, 0, 587
 };
-static int parser_action_row427[] = {
+static int parser_action_row457[] = {
+       7,
+       -1, 3, 456,
+       0, 0, 87,
+       1, 0, 88,
+       3, 0, 383,
+       15, 0, 384,
+       16, 0, 385,
+       81, 0, 387
+};
+static int parser_action_row458[] = {
+       3,
+       -1, 3, 457,
+       0, 0, 87,
+       1, 0, 88
+};
+static int parser_action_row459[] = {
        1,
        -1, 1, 64
 };
-static int parser_action_row428[] = {
+static int parser_action_row460[] = {
        2,
-       -1, 1, 518,
-       58, 0, 211
+       -1, 1, 643,
+       57, 0, 216
 };
-static int parser_action_row429[] = {
+static int parser_action_row461[] = {
        24,
-       -1, 3, 428,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       53, 0, 544,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 460,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       52, 0, 593,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
-       81, 0, 206,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row430[] = {
+static int parser_action_row462[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row431[] = {
+static int parser_action_row463[] = {
        1,
-       -1, 1, 723
+       -1, 1, 827
 };
-static int parser_action_row432[] = {
+static int parser_action_row464[] = {
        3,
-       -1, 1, 506,
-       52, 0, 272,
-       64, 0, 547
+       -1, 1, 631,
+       51, 0, 282,
+       63, 0, 596
 };
-static int parser_action_row433[] = {
+static int parser_action_row465[] = {
        1,
-       -1, 1, 745
+       -1, 1, 849
 };
-static int parser_action_row434[] = {
+static int parser_action_row466[] = {
        3,
-       -1, 3, 433,
-       48, 0, 361,
-       80, 0, 362
+       -1, 3, 465,
+       47, 0, 380,
+       80, 0, 381
 };
-static int parser_action_row435[] = {
+static int parser_action_row467[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row436[] = {
+static int parser_action_row468[] = {
        6,
-       -1, 1, 509,
-       54, 1, 505,
-       59, 1, 505,
-       60, 1, 505,
-       61, 1, 505,
-       64, 1, 505
+       -1, 1, 634,
+       53, 1, 630,
+       58, 1, 630,
+       59, 1, 630,
+       60, 1, 630,
+       63, 1, 630
 };
-static int parser_action_row437[] = {
+static int parser_action_row469[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row438[] = {
+static int parser_action_row470[] = {
        2,
-       -1, 3, 437,
-       53, 0, 552
+       -1, 3, 469,
+       52, 0, 601
 };
-static int parser_action_row439[] = {
+static int parser_action_row471[] = {
        1,
-       -1, 1, 744
+       -1, 1, 848
 };
-static int parser_action_row440[] = {
+static int parser_action_row472[] = {
        1,
-       -1, 1, 755
+       -1, 1, 859
 };
-static int parser_action_row441[] = {
+static int parser_action_row473[] = {
        20,
-       -1, 3, 440,
-       12, 0, 122,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 472,
+       11, 0, 122,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row442[] = {
+static int parser_action_row474[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row443[] = {
+static int parser_action_row475[] = {
        20,
-       -1, 3, 442,
-       12, 0, 122,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 474,
+       11, 0, 122,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row444[] = {
+static int parser_action_row476[] = {
        19,
-       -1, 3, 443,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 475,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row445[] = {
+static int parser_action_row477[] = {
        19,
-       -1, 3, 444,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 476,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row446[] = {
+static int parser_action_row478[] = {
        19,
-       -1, 3, 445,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 477,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row447[] = {
+static int parser_action_row479[] = {
        3,
-       -1, 3, 446,
-       48, 0, 361,
-       80, 0, 362
+       -1, 3, 478,
+       47, 0, 390,
+       80, 0, 391
 };
-static int parser_action_row448[] = {
+static int parser_action_row480[] = {
        19,
-       -1, 3, 447,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 479,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row449[] = {
+static int parser_action_row481[] = {
        19,
-       -1, 3, 448,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 480,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row450[] = {
+static int parser_action_row482[] = {
        19,
-       -1, 3, 449,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 481,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row451[] = {
+static int parser_action_row483[] = {
        19,
-       -1, 3, 450,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 482,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row452[] = {
+static int parser_action_row484[] = {
        19,
-       -1, 3, 451,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 483,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row453[] = {
+static int parser_action_row485[] = {
        19,
-       -1, 3, 452,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 484,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row454[] = {
+static int parser_action_row486[] = {
        19,
-       -1, 3, 453,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 485,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row455[] = {
+static int parser_action_row487[] = {
        19,
-       -1, 3, 454,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 486,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row456[] = {
+static int parser_action_row488[] = {
        19,
-       -1, 3, 455,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 487,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row457[] = {
+static int parser_action_row489[] = {
        19,
-       -1, 3, 456,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 488,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row458[] = {
+static int parser_action_row490[] = {
        19,
-       -1, 3, 457,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 489,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row459[] = {
+static int parser_action_row491[] = {
        19,
-       -1, 3, 458,
-       12, 0, 122,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 490,
+       11, 0, 122,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row460[] = {
+static int parser_action_row492[] = {
        5,
-       -1, 3, 459,
-       12, 0, 572,
-       47, 0, 573,
-       81, 0, 574,
-       82, 0, 575
+       -1, 3, 491,
+       11, 0, 621,
+       46, 0, 622,
+       81, 0, 623,
+       82, 0, 624
 };
-static int parser_action_row461[] = {
+static int parser_action_row493[] = {
        5,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       52, 0, 526,
-       57, 0, 312
+       51, 0, 570,
+       56, 0, 330
 };
-static int parser_action_row462[] = {
+static int parser_action_row494[] = {
        2,
-       -1, 3, 461,
-       80, 0, 578
+       -1, 3, 493,
+       80, 0, 627
 };
-static int parser_action_row463[] = {
+static int parser_action_row495[] = {
        31,
-       -1, 3, 462,
-       9, 0, 579,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       -1, 3, 494,
+       8, 0, 628,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -5666,37 +6397,37 @@ static int parser_action_row463[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row464[] = {
+static int parser_action_row496[] = {
        3,
-       -1, 3, 463,
+       -1, 3, 495,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row465[] = {
+static int parser_action_row497[] = {
        3,
-       -1, 3, 464,
-       48, 0, 361,
-       80, 0, 362
+       -1, 3, 496,
+       47, 0, 390,
+       80, 0, 391
 };
-static int parser_action_row466[] = {
+static int parser_action_row498[] = {
        23,
-       -1, 3, 465,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 497,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -5704,551 +6435,562 @@ static int parser_action_row466[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row467[] = {
+static int parser_action_row499[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row468[] = {
+static int parser_action_row500[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row501[] = {
        2,
-       -1, 3, 467,
-       25, 0, 584
+       -1, 1, 479,
+       58, 0, 634
 };
-static int parser_action_row469[] = {
+static int parser_action_row502[] = {
        2,
-       -1, 3, 468,
-       15, 0, 585
+       -1, 3, 501,
+       24, 0, 635
 };
-static int parser_action_row470[] = {
+static int parser_action_row503[] = {
+       2,
+       -1, 3, 502,
+       14, 0, 636
+};
+static int parser_action_row504[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       53, 0, 586
+       52, 0, 637
 };
-static int parser_action_row471[] = {
+static int parser_action_row505[] = {
        3,
-       -1, 3, 470,
-       30, 0, 588,
-       56, 0, 589
+       -1, 3, 504,
+       29, 0, 639,
+       55, 0, 640
 };
-static int parser_action_row472[] = {
+static int parser_action_row506[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row473[] = {
+static int parser_action_row507[] = {
        1,
-       -1, 1, 445
+       -1, 1, 529
 };
-static int parser_action_row474[] = {
+static int parser_action_row508[] = {
        3,
-       -1, 1, 506,
-       52, 0, 272,
-       64, 0, 511
+       -1, 1, 631,
+       51, 0, 282,
+       63, 0, 547
 };
-static int parser_action_row475[] = {
+static int parser_action_row509[] = {
        1,
-       -1, 1, 467
+       -1, 1, 551
 };
-static int parser_action_row476[] = {
+static int parser_action_row510[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row477[] = {
+static int parser_action_row511[] = {
        1,
-       -1, 1, 466
+       -1, 1, 550
 };
-static int parser_action_row478[] = {
+static int parser_action_row512[] = {
        1,
-       -1, 1, 436
+       -1, 1, 520
 };
-static int parser_action_row479[] = {
+static int parser_action_row513[] = {
        22,
-       -1, 3, 478,
-       12, 0, 170,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 512,
+       11, 0, 170,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row480[] = {
+static int parser_action_row514[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row481[] = {
+static int parser_action_row515[] = {
        22,
-       -1, 3, 480,
-       12, 0, 170,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 514,
+       11, 0, 170,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row482[] = {
+static int parser_action_row516[] = {
        21,
-       -1, 3, 481,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 515,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row483[] = {
+static int parser_action_row517[] = {
        21,
-       -1, 3, 482,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 516,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row484[] = {
+static int parser_action_row518[] = {
        21,
-       -1, 3, 483,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 517,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row485[] = {
+static int parser_action_row519[] = {
        3,
-       -1, 3, 484,
-       48, 0, 361,
-       80, 0, 362
+       -1, 3, 518,
+       47, 0, 390,
+       80, 0, 391
 };
-static int parser_action_row486[] = {
+static int parser_action_row520[] = {
        21,
-       -1, 3, 485,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 519,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row487[] = {
+static int parser_action_row521[] = {
        21,
-       -1, 3, 486,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 520,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row488[] = {
+static int parser_action_row522[] = {
        21,
-       -1, 3, 487,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 521,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row489[] = {
+static int parser_action_row523[] = {
        21,
-       -1, 3, 488,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 522,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row490[] = {
+static int parser_action_row524[] = {
        21,
-       -1, 3, 489,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 523,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row491[] = {
+static int parser_action_row525[] = {
        21,
-       -1, 3, 490,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 524,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row492[] = {
+static int parser_action_row526[] = {
        21,
-       -1, 3, 491,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 525,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row493[] = {
+static int parser_action_row527[] = {
        21,
-       -1, 3, 492,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 526,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row494[] = {
+static int parser_action_row528[] = {
        21,
-       -1, 3, 493,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 527,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row495[] = {
+static int parser_action_row529[] = {
        21,
-       -1, 3, 494,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 528,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row496[] = {
+static int parser_action_row530[] = {
        21,
-       -1, 3, 495,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 529,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row497[] = {
+static int parser_action_row531[] = {
        21,
-       -1, 3, 496,
-       12, 0, 170,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 530,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row498[] = {
+static int parser_action_row532[] = {
        5,
-       -1, 3, 497,
-       12, 0, 612,
-       47, 0, 533,
-       81, 0, 613,
-       82, 0, 614
+       -1, 3, 531,
+       11, 0, 663,
+       46, 0, 577,
+       81, 0, 664,
+       82, 0, 665
 };
-static int parser_action_row499[] = {
+static int parser_action_row533[] = {
        1,
-       -1, 1, 437
+       -1, 1, 521
 };
-static int parser_action_row500[] = {
+static int parser_action_row534[] = {
        3,
-       -1, 3, 499,
-       36, 0, 518,
-       81, 0, 519
+       -1, 3, 533,
+       35, 0, 562,
+       81, 0, 563
 };
-static int parser_action_row501[] = {
+static int parser_action_row535[] = {
        2,
-       -1, 3, 500,
-       79, 0, 499
+       -1, 3, 534,
+       78, 0, 533
 };
-static int parser_action_row502[] = {
+static int parser_action_row536[] = {
        1,
-       -1, 1, 702
+       -1, 1, 1036
 };
-static int parser_action_row503[] = {
+static int parser_action_row537[] = {
        1,
-       -1, 1, 661
+       -1, 1, 991
 };
-static int parser_action_row504[] = {
+static int parser_action_row538[] = {
        33,
-       -1, 3, 503,
+       -1, 3, 537,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 506,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -6256,53 +6998,53 @@ static int parser_action_row504[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row505[] = {
+static int parser_action_row539[] = {
        5,
-       -1, 3, 504,
-       12, 0, 612,
-       47, 0, 533,
-       81, 0, 618,
-       82, 0, 614
+       -1, 3, 538,
+       11, 0, 663,
+       46, 0, 577,
+       81, 0, 669,
+       82, 0, 665
 };
-static int parser_action_row506[] = {
+static int parser_action_row540[] = {
        1,
-       -1, 1, 703
+       -1, 1, 1037
 };
-static int parser_action_row507[] = {
+static int parser_action_row541[] = {
        1,
-       -1, 1, 338
+       -1, 1, 418
 };
-static int parser_action_row508[] = {
+static int parser_action_row542[] = {
        1,
-       -1, 1, 429
+       -1, 1, 513
 };
-static int parser_action_row509[] = {
+static int parser_action_row543[] = {
        31,
-       -1, 3, 508,
-       9, 0, 619,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       -1, 3, 542,
+       8, 0, 670,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -6310,42 +7052,125 @@ static int parser_action_row509[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row510[] = {
-       2,
-       -1, 1, 329,
-       54, 0, 621
+static int parser_action_row544[] = {
+       3,
+       -1, 1, 772,
+       53, 0, 672,
+       79, 0, 545
 };
-static int parser_action_row511[] = {
+static int parser_action_row545[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row512[] = {
+static int parser_action_row546[] = {
+       6,
+       -1, 3, 545,
+       3, 0, 383,
+       15, 0, 384,
+       16, 0, 385,
+       51, 0, 675,
+       81, 0, 387
+};
+static int parser_action_row547[] = {
+       1,
+       -1, 1, 773
+};
+static int parser_action_row548[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row513[] = {
+static int parser_action_row549[] = {
+       2,
+       -1, 1, 609,
+       55, 0, 679
+};
+static int parser_action_row550[] = {
+       2,
+       -1, 3, 549,
+       52, 0, 682
+};
+static int parser_action_row551[] = {
+       36,
+       -1, 3, 550,
+       11, 0, 170,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 171,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       32, 0, 172,
+       33, 0, 683,
+       34, 0, 684,
+       35, 0, 685,
+       36, 0, 686,
+       37, 0, 44,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       47, 0, 390,
+       48, 0, 176,
+       50, 0, 687,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       79, 0, 205,
+       80, 0, 688,
+       81, 0, 689,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row552[] = {
+       1,
+       -1, 1, 605
+};
+static int parser_action_row553[] = {
+       3,
+       -1, 1, 405,
+       53, 0, 704,
+       79, 0, 205
+};
+static int parser_action_row554[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row555[] = {
+       1,
+       -1, 1, 406
+};
+static int parser_action_row556[] = {
        23,
-       -1, 3, 512,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 555,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -6353,466 +7178,493 @@ static int parser_action_row513[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row514[] = {
+static int parser_action_row557[] = {
+       1,
+       -1, 1, 590
+};
+static int parser_action_row558[] = {
        5,
-       -1, 3, 513,
-       12, 0, 612,
-       47, 0, 533,
-       81, 0, 625,
-       82, 0, 614
+       -1, 3, 557,
+       11, 0, 663,
+       46, 0, 577,
+       81, 0, 708,
+       82, 0, 665
 };
-static int parser_action_row515[] = {
+static int parser_action_row559[] = {
        3,
-       -1, 1, 512,
-       56, 0, 626,
-       63, 0, 627
+       -1, 1, 637,
+       55, 0, 709,
+       62, 0, 710
 };
-static int parser_action_row516[] = {
+static int parser_action_row560[] = {
        1,
-       -1, 1, 511
+       -1, 1, 636
 };
-static int parser_action_row517[] = {
+static int parser_action_row561[] = {
        1,
-       -1, 1, 403
+       -1, 1, 487
 };
-static int parser_action_row518[] = {
+static int parser_action_row562[] = {
        1,
-       -1, 1, 408
+       -1, 1, 492
 };
-static int parser_action_row519[] = {
+static int parser_action_row563[] = {
        1,
-       -1, 1, 394
+       -1, 1, 474
 };
-static int parser_action_row520[] = {
+static int parser_action_row564[] = {
        1,
-       -1, 1, 393
+       -1, 1, 473
 };
-static int parser_action_row521[] = {
+static int parser_action_row565[] = {
        5,
-       -1, 3, 520,
-       15, 0, 630,
-       52, 0, 631,
-       59, 0, 632,
-       81, 0, 319
+       -1, 3, 564,
+       14, 0, 713,
+       51, 0, 714,
+       58, 0, 715,
+       81, 0, 338
 };
-static int parser_action_row522[] = {
+static int parser_action_row566[] = {
        1,
-       -1, 1, 377
+       -1, 1, 457
 };
-static int parser_action_row523[] = {
+static int parser_action_row567[] = {
        3,
-       -1, 3, 522,
+       -1, 3, 566,
        0, 0, 87,
        1, 0, 88
 };
-static int parser_action_row524[] = {
-       3,
-       -1, 3, 523,
+static int parser_action_row568[] = {
+       4,
+       -1, 3, 567,
        0, 0, 87,
-       1, 0, 88
+       1, 0, 88,
+       13, 0, 456
 };
-static int parser_action_row525[] = {
+static int parser_action_row569[] = {
        2,
-       -1, 1, 276,
-       59, 0, 636
+       -1, 1, 349,
+       58, 0, 720
 };
-static int parser_action_row526[] = {
+static int parser_action_row570[] = {
        1,
-       -1, 1, 278
+       -1, 1, 351
 };
-static int parser_action_row527[] = {
+static int parser_action_row571[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row528[] = {
+static int parser_action_row572[] = {
        6,
-       -1, 3, 527,
-       3, 0, 638,
-       14, 0, 639,
-       15, 0, 640,
-       30, 0, 39,
+       -1, 3, 571,
+       3, 0, 722,
+       13, 0, 723,
+       14, 0, 724,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row529[] = {
+static int parser_action_row573[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row530[] = {
+static int parser_action_row574[] = {
        3,
-       -1, 1, 290,
-       36, 0, 644,
-       79, 0, 645
+       -1, 1, 363,
+       35, 0, 730,
+       78, 0, 731
 };
-static int parser_action_row531[] = {
+static int parser_action_row575[] = {
        2,
-       -1, 3, 530,
-       59, 0, 649
+       -1, 3, 574,
+       58, 0, 735
 };
-static int parser_action_row532[] = {
+static int parser_action_row576[] = {
        6,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       30, 0, 39,
-       54, 0, 650,
+       29, 0, 39,
+       53, 0, 736,
        92, 0, 62
 };
-static int parser_action_row533[] = {
+static int parser_action_row577[] = {
        24,
-       -1, 1, 510,
-       12, 0, 122,
-       24, 0, 123,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       52, 0, 133,
-       54, 1, 506,
-       64, 1, 506,
-       66, 0, 134,
+       -1, 1, 635,
+       11, 0, 122,
+       23, 0, 123,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       51, 0, 133,
+       53, 1, 631,
+       63, 1, 631,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row534[] = {
+static int parser_action_row578[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row535[] = {
+static int parser_action_row579[] = {
        27,
-       -1, 1, 506,
-       0, 1, 510,
-       1, 1, 510,
-       9, 1, 510,
-       12, 0, 122,
-       24, 0, 123,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       52, 0, 133,
-       66, 0, 134,
-       79, 1, 510,
+       -1, 1, 635,
+       11, 0, 122,
+       23, 0, 123,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       51, 0, 133,
+       53, 1, 631,
+       58, 1, 631,
+       59, 1, 631,
+       60, 1, 631,
+       63, 1, 631,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61,
-       93, 1, 510
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row536[] = {
+static int parser_action_row580[] = {
        4,
-       -1, 1, 472,
-       59, 0, 664,
-       60, 0, 215,
-       61, 0, 216
+       -1, 1, 556,
+       58, 0, 752,
+       59, 0, 220,
+       60, 0, 221
 };
-static int parser_action_row537[] = {
+static int parser_action_row581[] = {
        1,
-       -1, 1, 404
+       -1, 1, 488
 };
-static int parser_action_row538[] = {
+static int parser_action_row582[] = {
        1,
-       -1, 1, 409
+       -1, 1, 493
 };
-static int parser_action_row539[] = {
+static int parser_action_row583[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row540[] = {
+static int parser_action_row584[] = {
        1,
-       -1, 1, 499
+       -1, 1, 596
 };
-static int parser_action_row541[] = {
+static int parser_action_row585[] = {
+       1,
+       -1, 1, 597
+};
+static int parser_action_row586[] = {
        1,
        -1, 1, 62
 };
-static int parser_action_row542[] = {
+static int parser_action_row587[] = {
        1,
        -1, 1, 63
 };
-static int parser_action_row543[] = {
+static int parser_action_row588[] = {
        2,
-       -1, 1, 519,
-       58, 0, 211
+       -1, 1, 644,
+       57, 0, 216
 };
-static int parser_action_row544[] = {
+static int parser_action_row589[] = {
        2,
-       -1, 3, 543,
-       81, 0, 667
+       -1, 3, 588,
+       81, 0, 755
 };
-static int parser_action_row545[] = {
+static int parser_action_row590[] = {
        1,
-       -1, 1, 505
+       -1, 1, 321
 };
-static int parser_action_row546[] = {
+static int parser_action_row591[] = {
+       1,
+       -1, 1, 608
+};
+static int parser_action_row592[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row593[] = {
+       1,
+       -1, 1, 65
+};
+static int parser_action_row594[] = {
+       1,
+       -1, 1, 630
+};
+static int parser_action_row595[] = {
        2,
-       -1, 3, 545,
-       53, 0, 668
+       -1, 3, 594,
+       52, 0, 760
 };
-static int parser_action_row547[] = {
+static int parser_action_row596[] = {
        2,
-       -1, 3, 546,
-       25, 0, 669
+       -1, 3, 595,
+       24, 0, 761
 };
-static int parser_action_row548[] = {
+static int parser_action_row597[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row549[] = {
+static int parser_action_row598[] = {
        1,
-       -1, 1, 747
+       -1, 1, 851
 };
-static int parser_action_row550[] = {
+static int parser_action_row599[] = {
        2,
-       -1, 3, 549,
-       64, 0, 547
+       -1, 3, 598,
+       63, 0, 596
 };
-static int parser_action_row551[] = {
+static int parser_action_row600[] = {
        5,
-       -1, 3, 550,
-       12, 0, 572,
-       47, 0, 573,
-       81, 0, 574,
-       82, 0, 671
+       -1, 3, 599,
+       11, 0, 621,
+       46, 0, 622,
+       81, 0, 623,
+       82, 0, 763
 };
-static int parser_action_row552[] = {
+static int parser_action_row601[] = {
        2,
-       -1, 1, 512,
-       56, 0, 626
+       -1, 1, 637,
+       55, 0, 709
 };
-static int parser_action_row553[] = {
+static int parser_action_row602[] = {
        6,
-       -1, 1, 507,
-       54, 1, 504,
-       59, 1, 504,
-       60, 1, 504,
-       61, 1, 504,
-       64, 1, 504
+       -1, 1, 632,
+       53, 1, 629,
+       58, 1, 629,
+       59, 1, 629,
+       60, 1, 629,
+       63, 1, 629
 };
-static int parser_action_row554[] = {
+static int parser_action_row603[] = {
        1,
-       -1, 1, 720
+       -1, 1, 824
 };
-static int parser_action_row555[] = {
+static int parser_action_row604[] = {
        20,
-       -1, 3, 554,
-       12, 0, 122,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
+       -1, 3, 603,
+       11, 0, 122,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row556[] = {
+static int parser_action_row605[] = {
        1,
-       -1, 1, 719
+       -1, 1, 823
 };
-static int parser_action_row557[] = {
+static int parser_action_row606[] = {
        3,
-       -1, 1, 730,
-       65, 0, 292,
-       66, 0, 293
+       -1, 1, 834,
+       64, 0, 310,
+       65, 0, 311
 };
-static int parser_action_row558[] = {
+static int parser_action_row607[] = {
        3,
-       -1, 1, 733,
-       65, 0, 292,
-       66, 0, 293
+       -1, 1, 837,
+       64, 0, 310,
+       65, 0, 311
 };
-static int parser_action_row559[] = {
+static int parser_action_row608[] = {
        3,
-       -1, 1, 726,
-       65, 0, 292,
-       66, 0, 293
+       -1, 1, 830,
+       64, 0, 310,
+       65, 0, 311
 };
-static int parser_action_row560[] = {
+static int parser_action_row609[] = {
        1,
-       -1, 1, 735
+       -1, 1, 839
 };
-static int parser_action_row561[] = {
+static int parser_action_row610[] = {
        4,
-       -1, 1, 737,
-       67, 0, 301,
-       68, 0, 302,
-       69, 0, 303
+       -1, 1, 841,
+       66, 0, 319,
+       67, 0, 320,
+       68, 0, 321
 };
-static int parser_action_row562[] = {
+static int parser_action_row611[] = {
        4,
-       -1, 1, 738,
-       67, 0, 301,
-       68, 0, 302,
-       69, 0, 303
+       -1, 1, 842,
+       66, 0, 319,
+       67, 0, 320,
+       68, 0, 321
 };
-static int parser_action_row563[] = {
+static int parser_action_row612[] = {
        3,
-       -1, 1, 725,
-       65, 0, 292,
-       66, 0, 293
+       -1, 1, 829,
+       64, 0, 310,
+       65, 0, 311
 };
-static int parser_action_row564[] = {
+static int parser_action_row613[] = {
        3,
-       -1, 1, 727,
-       65, 0, 292,
-       66, 0, 293
+       -1, 1, 831,
+       64, 0, 310,
+       65, 0, 311
 };
-static int parser_action_row565[] = {
+static int parser_action_row614[] = {
        3,
-       -1, 1, 728,
-       65, 0, 292,
-       66, 0, 293
+       -1, 1, 832,
+       64, 0, 310,
+       65, 0, 311
 };
-static int parser_action_row566[] = {
+static int parser_action_row615[] = {
        3,
-       -1, 1, 729,
-       65, 0, 292,
-       66, 0, 293
+       -1, 1, 833,
+       64, 0, 310,
+       65, 0, 311
 };
-static int parser_action_row567[] = {
+static int parser_action_row616[] = {
        3,
-       -1, 1, 731,
-       65, 0, 292,
-       66, 0, 293
+       -1, 1, 835,
+       64, 0, 310,
+       65, 0, 311
 };
-static int parser_action_row568[] = {
+static int parser_action_row617[] = {
        3,
-       -1, 1, 732,
-       65, 0, 292,
-       66, 0, 293
+       -1, 1, 836,
+       64, 0, 310,
+       65, 0, 311
 };
-static int parser_action_row569[] = {
+static int parser_action_row618[] = {
        3,
-       -1, 1, 734,
-       65, 0, 292,
-       66, 0, 293
+       -1, 1, 838,
+       64, 0, 310,
+       65, 0, 311
 };
-static int parser_action_row570[] = {
+static int parser_action_row619[] = {
        1,
-       -1, 1, 740
+       -1, 1, 844
 };
-static int parser_action_row571[] = {
+static int parser_action_row620[] = {
        1,
-       -1, 1, 741
+       -1, 1, 845
 };
-static int parser_action_row572[] = {
+static int parser_action_row621[] = {
        1,
-       -1, 1, 742
+       -1, 1, 846
 };
-static int parser_action_row573[] = {
+static int parser_action_row622[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 1, 631,
+       51, 0, 282
 };
-static int parser_action_row574[] = {
+static int parser_action_row623[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row575[] = {
+static int parser_action_row624[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 1, 631,
+       51, 0, 282
 };
-static int parser_action_row576[] = {
+static int parser_action_row625[] = {
        1,
-       -1, 1, 750
+       -1, 1, 854
 };
-static int parser_action_row577[] = {
+static int parser_action_row626[] = {
        6,
-       -1, 3, 576,
-       3, 0, 638,
-       14, 0, 676,
-       15, 0, 677,
-       30, 0, 39,
+       -1, 3, 625,
+       3, 0, 722,
+       13, 0, 768,
+       14, 0, 769,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row578[] = {
+static int parser_action_row627[] = {
        2,
-       -1, 3, 577,
-       59, 0, 680
+       -1, 3, 626,
+       58, 0, 774
 };
-static int parser_action_row579[] = {
+static int parser_action_row628[] = {
        6,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       30, 0, 39,
-       54, 0, 650,
+       29, 0, 39,
+       53, 0, 736,
        92, 0, 62
 };
-static int parser_action_row580[] = {
+static int parser_action_row629[] = {
        1,
-       -1, 1, 344
+       -1, 1, 424
 };
-static int parser_action_row581[] = {
+static int parser_action_row630[] = {
        31,
-       -1, 3, 580,
-       9, 0, 686,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       -1, 3, 629,
+       8, 0, 781,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -6820,33 +7672,33 @@ static int parser_action_row581[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row582[] = {
+static int parser_action_row631[] = {
        1,
-       -1, 1, 335
+       -1, 1, 415
 };
-static int parser_action_row583[] = {
+static int parser_action_row632[] = {
        1,
-       -1, 1, 398
+       -1, 1, 480
 };
-static int parser_action_row584[] = {
+static int parser_action_row633[] = {
        23,
-       -1, 3, 583,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 632,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -6854,72 +7706,104 @@ static int parser_action_row584[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row585[] = {
+static int parser_action_row634[] = {
+       23,
+       -1, 3, 633,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row635[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row636[] = {
        34,
-       -1, 3, 584,
+       -1, 3, 635,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 688,
-       12, 0, 689,
-       15, 0, 690,
-       18, 0, 691,
-       24, 0, 692,
-       26, 0, 693,
-       27, 0, 694,
-       28, 0, 695,
-       29, 0, 696,
-       34, 0, 697,
-       35, 0, 698,
-       36, 0, 699,
-       37, 0, 700,
-       38, 0, 701,
-       39, 0, 45,
-       42, 0, 702,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 703,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 704,
-       82, 0, 705,
+       8, 0, 785,
+       11, 0, 786,
+       14, 0, 787,
+       17, 0, 788,
+       23, 0, 789,
+       25, 0, 790,
+       26, 0, 791,
+       27, 0, 792,
+       28, 0, 793,
+       33, 0, 794,
+       34, 0, 795,
+       35, 0, 796,
+       36, 0, 797,
+       37, 0, 798,
+       38, 0, 45,
+       41, 0, 799,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 800,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 801,
+       82, 0, 802,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row586[] = {
+static int parser_action_row637[] = {
        33,
-       -1, 3, 585,
+       -1, 3, 636,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 155,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 155,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -6927,372 +7811,506 @@ static int parser_action_row586[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row587[] = {
+static int parser_action_row638[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row588[] = {
+static int parser_action_row639[] = {
        2,
-       -1, 3, 587,
-       56, 0, 589
+       -1, 3, 638,
+       55, 0, 640
 };
-static int parser_action_row589[] = {
+static int parser_action_row640[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row590[] = {
+static int parser_action_row641[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row591[] = {
+static int parser_action_row642[] = {
        2,
-       -1, 3, 590,
-       25, 0, 725
+       -1, 3, 641,
+       24, 0, 822
 };
-static int parser_action_row592[] = {
+static int parser_action_row643[] = {
        1,
-       -1, 1, 469
+       -1, 1, 553
 };
-static int parser_action_row593[] = {
+static int parser_action_row644[] = {
        5,
-       -1, 3, 592,
-       12, 0, 612,
-       47, 0, 533,
-       81, 0, 625,
-       82, 0, 726
+       -1, 3, 643,
+       11, 0, 663,
+       46, 0, 577,
+       81, 0, 708,
+       82, 0, 823
 };
-static int parser_action_row594[] = {
+static int parser_action_row645[] = {
        1,
-       -1, 1, 442
+       -1, 1, 526
 };
-static int parser_action_row595[] = {
+static int parser_action_row646[] = {
        22,
-       -1, 3, 594,
-       12, 0, 170,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 645,
+       11, 0, 170,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row596[] = {
+static int parser_action_row647[] = {
        1,
-       -1, 1, 441
+       -1, 1, 525
 };
-static int parser_action_row597[] = {
+static int parser_action_row648[] = {
        3,
-       -1, 1, 452,
-       65, 0, 335,
-       66, 0, 336
+       -1, 1, 536,
+       64, 0, 354,
+       65, 0, 355
 };
-static int parser_action_row598[] = {
+static int parser_action_row649[] = {
        3,
-       -1, 1, 455,
-       65, 0, 335,
-       66, 0, 336
+       -1, 1, 539,
+       64, 0, 354,
+       65, 0, 355
 };
-static int parser_action_row599[] = {
+static int parser_action_row650[] = {
        3,
-       -1, 1, 448,
-       65, 0, 335,
-       66, 0, 336
+       -1, 1, 532,
+       64, 0, 354,
+       65, 0, 355
 };
-static int parser_action_row600[] = {
+static int parser_action_row651[] = {
        1,
-       -1, 1, 457
+       -1, 1, 541
 };
-static int parser_action_row601[] = {
+static int parser_action_row652[] = {
        4,
-       -1, 1, 459,
-       67, 0, 344,
-       68, 0, 345,
-       69, 0, 346
+       -1, 1, 543,
+       66, 0, 363,
+       67, 0, 364,
+       68, 0, 365
 };
-static int parser_action_row602[] = {
+static int parser_action_row653[] = {
        4,
-       -1, 1, 460,
-       67, 0, 344,
-       68, 0, 345,
-       69, 0, 346
+       -1, 1, 544,
+       66, 0, 363,
+       67, 0, 364,
+       68, 0, 365
 };
-static int parser_action_row603[] = {
+static int parser_action_row654[] = {
        3,
-       -1, 1, 447,
-       65, 0, 335,
-       66, 0, 336
+       -1, 1, 531,
+       64, 0, 354,
+       65, 0, 355
 };
-static int parser_action_row604[] = {
+static int parser_action_row655[] = {
        3,
-       -1, 1, 449,
-       65, 0, 335,
-       66, 0, 336
+       -1, 1, 533,
+       64, 0, 354,
+       65, 0, 355
 };
-static int parser_action_row605[] = {
+static int parser_action_row656[] = {
        3,
-       -1, 1, 450,
-       65, 0, 335,
-       66, 0, 336
+       -1, 1, 534,
+       64, 0, 354,
+       65, 0, 355
 };
-static int parser_action_row606[] = {
+static int parser_action_row657[] = {
        3,
-       -1, 1, 451,
-       65, 0, 335,
-       66, 0, 336
+       -1, 1, 535,
+       64, 0, 354,
+       65, 0, 355
 };
-static int parser_action_row607[] = {
+static int parser_action_row658[] = {
        3,
-       -1, 1, 453,
-       65, 0, 335,
-       66, 0, 336
+       -1, 1, 537,
+       64, 0, 354,
+       65, 0, 355
 };
-static int parser_action_row608[] = {
+static int parser_action_row659[] = {
        3,
-       -1, 1, 454,
-       65, 0, 335,
-       66, 0, 336
+       -1, 1, 538,
+       64, 0, 354,
+       65, 0, 355
 };
-static int parser_action_row609[] = {
+static int parser_action_row660[] = {
        3,
-       -1, 1, 456,
-       65, 0, 335,
-       66, 0, 336
+       -1, 1, 540,
+       64, 0, 354,
+       65, 0, 355
 };
-static int parser_action_row610[] = {
+static int parser_action_row661[] = {
        1,
-       -1, 1, 462
+       -1, 1, 546
 };
-static int parser_action_row611[] = {
+static int parser_action_row662[] = {
        1,
-       -1, 1, 463
+       -1, 1, 547
 };
-static int parser_action_row612[] = {
+static int parser_action_row663[] = {
        1,
-       -1, 1, 464
+       -1, 1, 548
 };
-static int parser_action_row613[] = {
+static int parser_action_row664[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 1, 631,
+       51, 0, 282
 };
-static int parser_action_row614[] = {
+static int parser_action_row665[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 1, 631,
+       51, 0, 282
 };
-static int parser_action_row615[] = {
+static int parser_action_row666[] = {
        1,
-       -1, 1, 472
+       -1, 1, 556
 };
-static int parser_action_row616[] = {
+static int parser_action_row667[] = {
        5,
-       -1, 3, 615,
-       15, 0, 729,
-       52, 0, 730,
-       59, 0, 731,
-       81, 0, 319
+       -1, 3, 666,
+       14, 0, 826,
+       51, 0, 827,
+       58, 0, 828,
+       81, 0, 338
 };
-static int parser_action_row617[] = {
+static int parser_action_row668[] = {
        1,
-       -1, 1, 662
+       -1, 1, 992
 };
-static int parser_action_row618[] = {
+static int parser_action_row669[] = {
        1,
-       -1, 1, 430
+       -1, 1, 514
 };
-static int parser_action_row619[] = {
+static int parser_action_row670[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 1, 631,
+       51, 0, 282
 };
-static int parser_action_row620[] = {
+static int parser_action_row671[] = {
        1,
-       -1, 1, 337
+       -1, 1, 417
 };
-static int parser_action_row621[] = {
+static int parser_action_row672[] = {
        1,
-       -1, 1, 336
+       -1, 1, 416
 };
-static int parser_action_row622[] = {
+static int parser_action_row673[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row623[] = {
+static int parser_action_row674[] = {
+       1,
+       -1, 1, 774
+};
+static int parser_action_row675[] = {
        3,
-       -1, 3, 622,
-       48, 0, 361,
-       80, 0, 362
+       -1, 3, 674,
+       47, 0, 390,
+       80, 0, 391
 };
-static int parser_action_row624[] = {
+static int parser_action_row676[] = {
+       5,
+       -1, 3, 675,
+       3, 0, 383,
+       15, 0, 384,
+       16, 0, 385,
+       81, 0, 387
+};
+static int parser_action_row677[] = {
        2,
-       -1, 3, 623,
-       81, 0, 737
+       -1, 1, 885,
+       79, 0, 545
 };
-static int parser_action_row625[] = {
+static int parser_action_row678[] = {
        1,
-       -1, 1, 374
+       -1, 1, 883
 };
-static int parser_action_row626[] = {
+static int parser_action_row679[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
-};
-static int parser_action_row627[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 678,
+       81, 0, 836
 };
-static int parser_action_row628[] = {
+static int parser_action_row680[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row629[] = {
+static int parser_action_row681[] = {
        1,
-       -1, 1, 858
+       -1, 1, 1276
 };
-static int parser_action_row630[] = {
+static int parser_action_row682[] = {
        2,
-       -1, 1, 513,
-       56, 0, 626
+       -1, 1, 610,
+       55, 0, 679
 };
-static int parser_action_row631[] = {
-       33,
-       -1, 3, 630,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 155,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+static int parser_action_row683[] = {
+       1,
+       -1, 1, 603
+};
+static int parser_action_row684[] = {
+       23,
+       -1, 1, 1093,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
-       81, 0, 55,
-       82, 0, 56,
+       81, 0, 178,
+       82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row632[] = {
+static int parser_action_row685[] = {
+       24,
+       -1, 1, 1100,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       49, 0, 191,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row686[] = {
+       24,
+       -1, 1, 1095,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       49, 0, 191,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row687[] = {
+       1,
+       -1, 1, 1099
+};
+static int parser_action_row688[] = {
        2,
-       -1, 3, 631,
-       81, 0, 319
+       -1, 3, 687,
+       10, 0, 844
 };
-static int parser_action_row633[] = {
+static int parser_action_row689[] = {
+       4,
+       -1, 1, 404,
+       53, 0, 553,
+       57, 0, 215,
+       79, 0, 205
+};
+static int parser_action_row690[] = {
        3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 631,
+       51, 0, 282,
+       57, 0, 216
 };
-static int parser_action_row634[] = {
-       5,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2,
-       15, 0, 747,
-       59, 0, 748
+static int parser_action_row691[] = {
+       1,
+       -1, 1, 621
 };
-static int parser_action_row635[] = {
+static int parser_action_row692[] = {
        1,
-       -1, 1, 66
+       -1, 1, 1091
 };
-static int parser_action_row636[] = {
+static int parser_action_row693[] = {
        1,
-       -1, 1, 65
+       -1, 1, 1092
 };
-static int parser_action_row637[] = {
+static int parser_action_row694[] = {
        1,
-       -1, 1, 279
+       -1, 1, 1104
 };
-static int parser_action_row638[] = {
+static int parser_action_row695[] = {
+       1,
+       -1, 1, 1106
+};
+static int parser_action_row696[] = {
+       1,
+       -1, 1, 1105
+};
+static int parser_action_row697[] = {
+       1,
+       -1, 1, 1107
+};
+static int parser_action_row698[] = {
+       1,
+       -1, 1, 1108
+};
+static int parser_action_row699[] = {
+       1,
+       -1, 1, 622
+};
+static int parser_action_row700[] = {
        3,
-       -1, 3, 637,
-       53, 0, 749,
-       81, 0, 750
+       -1, 1, 552,
+       53, 0, 239,
+       63, 0, 845
 };
-static int parser_action_row639[] = {
+static int parser_action_row701[] = {
+       1,
+       -1, 1, 624
+};
+static int parser_action_row702[] = {
+       2,
+       -1, 3, 701,
+       52, 0, 846
+};
+static int parser_action_row703[] = {
+       2,
+       -1, 1, 618,
+       55, 0, 847
+};
+static int parser_action_row704[] = {
+       1,
+       -1, 1, 623
+};
+static int parser_action_row705[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row640[] = {
+static int parser_action_row706[] = {
+       1,
+       -1, 1, 407
+};
+static int parser_action_row707[] = {
+       3,
+       -1, 3, 706,
+       47, 0, 390,
+       80, 0, 391
+};
+static int parser_action_row708[] = {
+       1,
+       -1, 1, 454
+};
+static int parser_action_row709[] = {
        2,
-       -1, 3, 639,
-       20, 0, 754
+       -1, 1, 631,
+       51, 0, 282
 };
-static int parser_action_row641[] = {
+static int parser_action_row710[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row711[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row712[] = {
+       1,
+       -1, 1, 1282
+};
+static int parser_action_row713[] = {
+       2,
+       -1, 1, 638,
+       55, 0, 709
+};
+static int parser_action_row714[] = {
        33,
-       -1, 3, 640,
+       -1, 3, 713,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 506,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 155,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -7300,156 +8318,274 @@ static int parser_action_row641[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row642[] = {
+static int parser_action_row715[] = {
+       2,
+       -1, 3, 714,
+       81, 0, 338
+};
+static int parser_action_row716[] = {
        3,
-       -1, 3, 641,
-       30, 0, 39,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row717[] = {
+       5,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       14, 0, 861,
+       58, 0, 862
+};
+static int parser_action_row718[] = {
+       1,
+       -1, 1, 68
+};
+static int parser_action_row719[] = {
+       3,
+       -1, 3, 718,
+       0, 0, 87,
+       1, 0, 88
+};
+static int parser_action_row720[] = {
+       1,
+       -1, 1, 66
+};
+static int parser_action_row721[] = {
+       1,
+       -1, 1, 352
+};
+static int parser_action_row722[] = {
+       3,
+       -1, 3, 721,
+       52, 0, 864,
+       81, 0, 865
+};
+static int parser_action_row723[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row724[] = {
+       8,
+       -1, 3, 723,
+       0, 0, 87,
+       1, 0, 88,
+       3, 0, 383,
+       15, 0, 384,
+       16, 0, 385,
+       19, 0, 869,
+       81, 0, 387
+};
+static int parser_action_row725[] = {
+       33,
+       -1, 3, 724,
+       0, 0, 1,
+       1, 0, 2,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 55,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row726[] = {
+       1,
+       -1, 1, 672
+};
+static int parser_action_row727[] = {
+       2,
+       -1, 3, 726,
+       14, 0, 873
+};
+static int parser_action_row728[] = {
+       3,
+       -1, 3, 727,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row643[] = {
+static int parser_action_row729[] = {
        1,
-       -1, 1, 559
+       -1, 1, 690
 };
-static int parser_action_row644[] = {
+static int parser_action_row730[] = {
        4,
-       -1, 1, 288,
-       36, 0, 644,
-       59, 1, 567,
-       79, 0, 645
+       -1, 1, 361,
+       35, 0, 730,
+       58, 1, 698,
+       78, 0, 731
 };
-static int parser_action_row645[] = {
+static int parser_action_row731[] = {
        2,
-       -1, 3, 644,
-       79, 0, 758
+       -1, 3, 730,
+       78, 0, 876
 };
-static int parser_action_row646[] = {
+static int parser_action_row732[] = {
        2,
-       -1, 3, 645,
-       81, 0, 759
+       -1, 3, 731,
+       81, 0, 877
 };
-static int parser_action_row647[] = {
+static int parser_action_row733[] = {
        1,
-       -1, 1, 291
+       -1, 1, 364
 };
-static int parser_action_row648[] = {
+static int parser_action_row734[] = {
        1,
-       -1, 1, 848
+       -1, 1, 1266
 };
-static int parser_action_row649[] = {
+static int parser_action_row735[] = {
        3,
-       -1, 1, 304,
-       36, 0, 644,
-       79, 0, 645
+       -1, 1, 380,
+       35, 0, 730,
+       78, 0, 731
 };
-static int parser_action_row650[] = {
+static int parser_action_row736[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row651[] = {
+static int parser_action_row737[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row652[] = {
+static int parser_action_row738[] = {
        5,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       30, 0, 39,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row653[] = {
+static int parser_action_row739[] = {
        1,
-       -1, 1, 840
+       -1, 1, 1258
 };
-static int parser_action_row654[] = {
+static int parser_action_row740[] = {
        1,
-       -1, 1, 842
+       -1, 1, 1260
 };
-static int parser_action_row655[] = {
+static int parser_action_row741[] = {
        3,
-       -1, 3, 654,
+       -1, 3, 740,
        0, 0, 87,
        1, 0, 88
 };
-static int parser_action_row656[] = {
+static int parser_action_row742[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row657[] = {
-       10,
-       -1, 1, 258,
-       8, 0, 771,
-       9, 0, 772,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       42, 0, 776
+static int parser_action_row743[] = {
+       11,
+       -1, 1, 331,
+       3, 0, 890,
+       8, 0, 891,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895,
+       81, 0, 896
 };
-static int parser_action_row658[] = {
+static int parser_action_row744[] = {
+       1,
+       -1, 1, 1290
+};
+static int parser_action_row745[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row659[] = {
+static int parser_action_row746[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row660[] = {
+static int parser_action_row747[] = {
+       5,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       29, 0, 39,
+       92, 0, 62
+};
+static int parser_action_row748[] = {
        1,
-       -1, 1, 478
+       -1, 1, 562
 };
-static int parser_action_row661[] = {
+static int parser_action_row749[] = {
        1,
-       -1, 1, 372
+       -1, 1, 452
 };
-static int parser_action_row662[] = {
+static int parser_action_row750[] = {
        2,
-       -1, 3, 661,
-       52, 0, 785
+       -1, 3, 749,
+       51, 0, 911
 };
-static int parser_action_row663[] = {
+static int parser_action_row751[] = {
        4,
-       -1, 1, 474,
-       59, 0, 786,
-       60, 0, 215,
-       61, 0, 216
+       -1, 1, 558,
+       58, 0, 912,
+       59, 0, 220,
+       60, 0, 221
 };
-static int parser_action_row664[] = {
+static int parser_action_row752[] = {
        2,
-       -1, 1, 366,
-       79, 0, 375
+       -1, 1, 446,
+       78, 0, 403
 };
-static int parser_action_row665[] = {
+static int parser_action_row753[] = {
        23,
-       -1, 3, 664,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 752,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -7457,25 +8593,25 @@ static int parser_action_row665[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row666[] = {
+static int parser_action_row754[] = {
        23,
-       -1, 3, 665,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 753,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -7483,87 +8619,118 @@ static int parser_action_row666[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row667[] = {
+static int parser_action_row755[] = {
        1,
-       -1, 1, 501
+       -1, 1, 599
 };
-static int parser_action_row668[] = {
+static int parser_action_row756[] = {
        2,
-       -1, 1, 520,
-       58, 0, 211
+       -1, 1, 645,
+       57, 0, 216
 };
-static int parser_action_row669[] = {
+static int parser_action_row757[] = {
+       2,
+       -1, 3, 756,
+       8, 0, 917
+};
+static int parser_action_row758[] = {
        1,
-       -1, 1, 504
+       -1, 1, 1278
 };
-static int parser_action_row670[] = {
+static int parser_action_row759[] = {
+       5,
+       -1, 3, 758,
+       3, 0, 383,
+       15, 0, 384,
+       16, 0, 385,
+       81, 0, 387
+};
+static int parser_action_row760[] = {
+       5,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       8, 1, 611,
+       14, 1, 611
+};
+static int parser_action_row761[] = {
+       1,
+       -1, 1, 629
+};
+static int parser_action_row762[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row671[] = {
+static int parser_action_row763[] = {
        2,
-       -1, 3, 670,
-       81, 0, 792
+       -1, 3, 762,
+       81, 0, 921
 };
-static int parser_action_row672[] = {
+static int parser_action_row764[] = {
        3,
-       -1, 1, 748,
-       54, 1, 750,
-       64, 1, 750
+       -1, 1, 852,
+       53, 1, 854,
+       63, 1, 854
 };
-static int parser_action_row673[] = {
+static int parser_action_row765[] = {
        1,
-       -1, 1, 721
+       -1, 1, 825
 };
-static int parser_action_row674[] = {
+static int parser_action_row766[] = {
        1,
-       -1, 1, 756
+       -1, 1, 860
 };
-static int parser_action_row675[] = {
+static int parser_action_row767[] = {
        2,
-       -1, 3, 674,
-       52, 0, 793
+       -1, 3, 766,
+       51, 0, 922
 };
-static int parser_action_row676[] = {
+static int parser_action_row768[] = {
        1,
-       -1, 1, 752
+       -1, 1, 856
 };
-static int parser_action_row677[] = {
-       2,
-       -1, 3, 676,
-       20, 0, 794
+static int parser_action_row769[] = {
+       8,
+       -1, 3, 768,
+       0, 0, 87,
+       1, 0, 88,
+       3, 0, 383,
+       15, 0, 384,
+       16, 0, 385,
+       19, 0, 923,
+       81, 0, 387
 };
-static int parser_action_row678[] = {
+static int parser_action_row770[] = {
        33,
-       -1, 3, 677,
+       -1, 3, 769,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 506,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -7571,176 +8738,224 @@ static int parser_action_row678[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row679[] = {
+static int parser_action_row771[] = {
+       1,
+       -1, 1, 673
+};
+static int parser_action_row772[] = {
+       2,
+       -1, 3, 771,
+       14, 0, 925
+};
+static int parser_action_row773[] = {
        3,
-       -1, 3, 678,
-       30, 0, 39,
+       -1, 3, 772,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row680[] = {
+static int parser_action_row774[] = {
        1,
-       -1, 1, 560
+       -1, 1, 691
 };
-static int parser_action_row681[] = {
+static int parser_action_row775[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row682[] = {
+static int parser_action_row776[] = {
        5,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       30, 0, 39,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row683[] = {
+static int parser_action_row777[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row684[] = {
-       10,
-       -1, 1, 258,
-       8, 0, 771,
-       9, 0, 805,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       42, 0, 776
+static int parser_action_row778[] = {
+       11,
+       -1, 1, 331,
+       3, 0, 890,
+       8, 0, 936,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895,
+       81, 0, 896
 };
-static int parser_action_row685[] = {
+static int parser_action_row779[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row686[] = {
+static int parser_action_row780[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row687[] = {
+static int parser_action_row781[] = {
+       5,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       29, 0, 39,
+       92, 0, 62
+};
+static int parser_action_row782[] = {
        1,
-       -1, 1, 345
+       -1, 1, 425
 };
-static int parser_action_row688[] = {
+static int parser_action_row783[] = {
        1,
-       -1, 1, 399
+       -1, 1, 482
 };
-static int parser_action_row689[] = {
+static int parser_action_row784[] = {
        1,
-       -1, 1, 420
+       -1, 1, 481
 };
-static int parser_action_row690[] = {
-       24,
-       -1, 1, 510,
-       12, 0, 122,
-       24, 0, 123,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       52, 0, 133,
-       54, 1, 506,
-       64, 1, 506,
-       66, 0, 134,
+static int parser_action_row785[] = {
+       23,
+       -1, 3, 784,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
-       81, 0, 135,
-       82, 0, 136,
-       83, 0, 137,
-       84, 0, 138,
-       85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
-};
-static int parser_action_row691[] = {
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row786[] = {
+       1,
+       -1, 1, 504
+};
+static int parser_action_row787[] = {
+       24,
+       -1, 1, 635,
+       11, 0, 122,
+       23, 0, 123,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       51, 0, 133,
+       53, 1, 631,
+       63, 1, 631,
+       65, 0, 134,
+       80, 0, 54,
+       81, 0, 135,
+       82, 0, 136,
+       83, 0, 137,
+       84, 0, 138,
+       85, 0, 139,
+       86, 0, 60,
+       89, 0, 140
+};
+static int parser_action_row788[] = {
        33,
-       -1, 3, 690,
+       -1, 3, 787,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 810,
-       12, 0, 689,
-       15, 0, 690,
-       18, 0, 691,
-       24, 0, 692,
-       27, 0, 694,
-       28, 0, 695,
-       29, 0, 696,
-       34, 0, 697,
-       35, 0, 698,
-       36, 0, 699,
-       37, 0, 700,
-       38, 0, 701,
-       39, 0, 45,
-       42, 0, 702,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 703,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 704,
-       82, 0, 705,
+       8, 0, 946,
+       11, 0, 786,
+       14, 0, 787,
+       17, 0, 788,
+       23, 0, 789,
+       26, 0, 791,
+       27, 0, 792,
+       28, 0, 793,
+       33, 0, 794,
+       34, 0, 795,
+       35, 0, 796,
+       36, 0, 797,
+       37, 0, 798,
+       38, 0, 45,
+       41, 0, 799,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 800,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 801,
+       82, 0, 802,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row692[] = {
+static int parser_action_row789[] = {
        2,
-       -1, 3, 691,
-       81, 0, 815
+       -1, 3, 788,
+       81, 0, 951
 };
-static int parser_action_row693[] = {
+static int parser_action_row790[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row694[] = {
+static int parser_action_row791[] = {
        33,
-       -1, 3, 693,
+       -1, 3, 790,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 506,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -7748,161 +8963,161 @@ static int parser_action_row694[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row695[] = {
+static int parser_action_row792[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row696[] = {
+static int parser_action_row793[] = {
        33,
-       -1, 3, 695,
+       -1, 3, 792,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 810,
-       12, 0, 689,
-       15, 0, 690,
-       18, 0, 691,
-       24, 0, 692,
-       27, 0, 694,
-       28, 0, 695,
-       29, 0, 696,
-       34, 0, 697,
-       35, 0, 698,
-       36, 0, 699,
-       37, 0, 700,
-       38, 0, 701,
-       39, 0, 45,
-       42, 0, 702,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 703,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 704,
-       82, 0, 705,
+       8, 0, 946,
+       11, 0, 786,
+       14, 0, 787,
+       17, 0, 788,
+       23, 0, 789,
+       26, 0, 791,
+       27, 0, 792,
+       28, 0, 793,
+       33, 0, 794,
+       34, 0, 795,
+       35, 0, 796,
+       36, 0, 797,
+       37, 0, 798,
+       38, 0, 45,
+       41, 0, 799,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 800,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 801,
+       82, 0, 802,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row697[] = {
+static int parser_action_row794[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row698[] = {
+static int parser_action_row795[] = {
        24,
-       -1, 1, 349,
-       12, 0, 170,
-       24, 0, 171,
-       26, 1, 635,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
+       -1, 1, 429,
+       11, 0, 170,
+       23, 0, 171,
+       25, 1, 965,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row699[] = {
+static int parser_action_row796[] = {
        25,
-       -1, 1, 356,
-       12, 0, 170,
-       24, 0, 171,
-       26, 1, 642,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       50, 0, 191,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
+       -1, 1, 436,
+       11, 0, 170,
+       23, 0, 171,
+       25, 1, 972,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       49, 0, 191,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row700[] = {
+static int parser_action_row797[] = {
        25,
-       -1, 1, 351,
-       12, 0, 170,
-       24, 0, 171,
-       26, 1, 637,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       50, 0, 191,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
+       -1, 1, 431,
+       11, 0, 170,
+       23, 0, 171,
+       25, 1, 967,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       49, 0, 191,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row701[] = {
+static int parser_action_row798[] = {
        2,
-       -1, 1, 355,
-       26, 1, 641
+       -1, 1, 435,
+       25, 1, 971
 };
-static int parser_action_row702[] = {
+static int parser_action_row799[] = {
        23,
-       -1, 3, 701,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 798,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 196,
        82, 0, 179,
@@ -7910,123 +9125,123 @@ static int parser_action_row702[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row703[] = {
+static int parser_action_row800[] = {
        24,
-       -1, 1, 510,
-       12, 0, 122,
-       24, 0, 123,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       52, 0, 133,
-       54, 1, 506,
-       64, 1, 506,
-       66, 0, 134,
+       -1, 1, 635,
+       11, 0, 122,
+       23, 0, 123,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       51, 0, 133,
+       53, 1, 631,
+       63, 1, 631,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row704[] = {
+static int parser_action_row801[] = {
        2,
-       -1, 3, 703,
-       11, 0, 830
+       -1, 3, 800,
+       10, 0, 966
 };
-static int parser_action_row705[] = {
+static int parser_action_row802[] = {
        28,
-       -1, 1, 510,
-       12, 0, 122,
-       24, 0, 123,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       52, 0, 133,
-       54, 1, 506,
-       58, 0, 211,
-       59, 1, 506,
-       60, 1, 506,
-       61, 1, 506,
-       64, 1, 506,
-       66, 0, 134,
+       -1, 1, 635,
+       11, 0, 122,
+       23, 0, 123,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       51, 0, 133,
+       53, 1, 631,
+       57, 0, 216,
+       58, 1, 631,
+       59, 1, 631,
+       60, 1, 631,
+       63, 1, 631,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row706[] = {
+static int parser_action_row803[] = {
        4,
-       -1, 1, 473,
-       59, 0, 833,
-       60, 0, 215,
-       61, 0, 216
+       -1, 1, 557,
+       58, 0, 969,
+       59, 0, 220,
+       60, 0, 221
 };
-static int parser_action_row707[] = {
+static int parser_action_row804[] = {
        1,
-       -1, 1, 415
+       -1, 1, 499
 };
-static int parser_action_row708[] = {
+static int parser_action_row805[] = {
        1,
-       -1, 1, 417
+       -1, 1, 501
 };
-static int parser_action_row709[] = {
+static int parser_action_row806[] = {
        3,
-       -1, 3, 708,
-       54, 0, 230,
-       64, 0, 835
+       -1, 3, 805,
+       53, 0, 239,
+       63, 0, 971
 };
-static int parser_action_row710[] = {
+static int parser_action_row807[] = {
        2,
-       -1, 3, 709,
-       42, 0, 837
+       -1, 3, 806,
+       41, 0, 973
 };
-static int parser_action_row711[] = {
+static int parser_action_row808[] = {
        32,
-       -1, 3, 710,
-       9, 0, 688,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       26, 0, 693,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       -1, 3, 807,
+       8, 0, 785,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       25, 0, 790,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -8034,319 +9249,265 @@ static int parser_action_row711[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row712[] = {
+static int parser_action_row809[] = {
        2,
-       -1, 3, 711,
-       26, 0, 841
+       -1, 3, 808,
+       25, 0, 977
 };
-static int parser_action_row713[] = {
+static int parser_action_row810[] = {
        1,
-       -1, 1, 633
+       -1, 1, 963
 };
-static int parser_action_row714[] = {
+static int parser_action_row811[] = {
        1,
-       -1, 1, 634
+       -1, 1, 964
 };
-static int parser_action_row715[] = {
+static int parser_action_row812[] = {
        1,
-       -1, 1, 646
+       -1, 1, 976
 };
-static int parser_action_row716[] = {
+static int parser_action_row813[] = {
        1,
-       -1, 1, 647
+       -1, 1, 977
 };
-static int parser_action_row717[] = {
+static int parser_action_row814[] = {
        1,
-       -1, 1, 649
+       -1, 1, 979
 };
-static int parser_action_row718[] = {
+static int parser_action_row815[] = {
        1,
-       -1, 1, 648
+       -1, 1, 978
 };
-static int parser_action_row719[] = {
+static int parser_action_row816[] = {
        1,
-       -1, 1, 650
+       -1, 1, 980
 };
-static int parser_action_row720[] = {
+static int parser_action_row817[] = {
        1,
-       -1, 1, 651
+       -1, 1, 981
 };
-static int parser_action_row721[] = {
+static int parser_action_row818[] = {
        1,
-       -1, 1, 424
+       -1, 1, 508
 };
-static int parser_action_row722[] = {
+static int parser_action_row819[] = {
        2,
-       -1, 3, 721,
-       50, 0, 191
+       -1, 3, 818,
+       49, 0, 191
 };
-static int parser_action_row723[] = {
+static int parser_action_row820[] = {
        2,
-       -1, 3, 722,
-       30, 0, 843
+       -1, 3, 819,
+       29, 0, 979
 };
-static int parser_action_row724[] = {
+static int parser_action_row821[] = {
        23,
-       -1, 3, 723,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 820,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row725[] = {
+static int parser_action_row822[] = {
        2,
-       -1, 3, 724,
-       81, 0, 845
+       -1, 3, 821,
+       81, 0, 981
 };
-static int parser_action_row726[] = {
+static int parser_action_row823[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row727[] = {
+static int parser_action_row824[] = {
        3,
-       -1, 1, 470,
-       54, 1, 472,
-       64, 1, 472
+       -1, 1, 554,
+       53, 1, 556,
+       63, 1, 556
 };
-static int parser_action_row728[] = {
+static int parser_action_row825[] = {
        1,
-       -1, 1, 443
+       -1, 1, 527
 };
-static int parser_action_row729[] = {
+static int parser_action_row826[] = {
        2,
-       -1, 1, 474,
-       79, 0, 375
+       -1, 1, 558,
+       78, 0, 403
 };
-static int parser_action_row730[] = {
+static int parser_action_row827[] = {
        33,
-       -1, 3, 729,
+       -1, 3, 826,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 810,
-       12, 0, 689,
-       15, 0, 690,
-       18, 0, 691,
-       24, 0, 692,
-       27, 0, 694,
-       28, 0, 695,
-       29, 0, 696,
-       34, 0, 697,
-       35, 0, 698,
-       36, 0, 699,
-       37, 0, 700,
-       38, 0, 701,
-       39, 0, 45,
-       42, 0, 702,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 703,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 704,
-       82, 0, 705,
+       8, 0, 946,
+       11, 0, 786,
+       14, 0, 787,
+       17, 0, 788,
+       23, 0, 789,
+       26, 0, 791,
+       27, 0, 792,
+       28, 0, 793,
+       33, 0, 794,
+       34, 0, 795,
+       35, 0, 796,
+       36, 0, 797,
+       37, 0, 798,
+       38, 0, 45,
+       41, 0, 799,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 800,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 801,
+       82, 0, 802,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row731[] = {
+static int parser_action_row828[] = {
        2,
-       -1, 3, 730,
-       81, 0, 319
+       -1, 3, 827,
+       81, 0, 338
 };
-static int parser_action_row732[] = {
+static int parser_action_row829[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row733[] = {
+static int parser_action_row830[] = {
        5,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       15, 0, 853,
-       59, 0, 854
+       14, 0, 989,
+       58, 0, 990
 };
-static int parser_action_row734[] = {
+static int parser_action_row831[] = {
        2,
-       -1, 1, 474,
-       79, 0, 499
+       -1, 1, 558,
+       78, 0, 533
 };
-static int parser_action_row735[] = {
+static int parser_action_row832[] = {
        3,
-       -1, 3, 734,
-       48, 0, 361,
-       80, 0, 362
+       -1, 3, 831,
+       47, 0, 390,
+       80, 0, 391
 };
-static int parser_action_row736[] = {
+static int parser_action_row833[] = {
        2,
-       -1, 1, 332,
-       56, 0, 857
+       -1, 1, 412,
+       55, 0, 993
 };
-static int parser_action_row737[] = {
+static int parser_action_row834[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row738[] = {
+static int parser_action_row835[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 3, 834,
+       52, 0, 997
 };
-static int parser_action_row739[] = {
+static int parser_action_row836[] = {
        1,
-       -1, 1, 474
+       -1, 1, 886
 };
-static int parser_action_row740[] = {
-       23,
-       -1, 3, 739,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
-       82, 0, 179,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
+static int parser_action_row837[] = {
+       2,
+       -1, 1, 631,
+       51, 0, 282
 };
-static int parser_action_row741[] = {
-       22,
-       -1, 3, 740,
-       12, 0, 863,
-       24, 0, 864,
-       33, 0, 865,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+static int parser_action_row838[] = {
+       5,
+       -1, 3, 837,
+       3, 0, 383,
+       15, 0, 384,
+       16, 0, 385,
+       81, 0, 387
 };
-static int parser_action_row742[] = {
+static int parser_action_row839[] = {
        1,
-       -1, 1, 859
+       -1, 1, 1277
 };
-static int parser_action_row743[] = {
+static int parser_action_row840[] = {
        1,
-       -1, 1, 381
+       -1, 1, 1094
 };
-static int parser_action_row744[] = {
-       31,
-       -1, 1, 390,
-       9, 0, 308,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+static int parser_action_row841[] = {
+       23,
+       -1, 1, 1101,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
-       81, 0, 55,
-       82, 0, 56,
+       81, 0, 178,
+       82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row745[] = {
-       2,
-       -1, 3, 744,
-       50, 0, 191
-};
-static int parser_action_row746[] = {
-       4,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2,
-       53, 0, 896
+static int parser_action_row842[] = {
+       1,
+       -1, 1, 1102
 };
-static int parser_action_row747[] = {
+static int parser_action_row843[] = {
        23,
-       -1, 3, 746,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 1, 1096,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -8354,151 +9515,386 @@ static int parser_action_row747[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row748[] = {
-       33,
-       -1, 3, 747,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 155,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 55,
-       82, 0, 56,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
+static int parser_action_row844[] = {
+       1,
+       -1, 1, 1097
 };
-static int parser_action_row749[] = {
+static int parser_action_row845[] = {
        3,
-       -1, 1, 531,
+       -1, 3, 844,
+       47, 0, 390,
+       80, 0, 391
+};
+static int parser_action_row846[] = {
+       3,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row750[] = {
-       4,
-       -1, 1, 531,
+static int parser_action_row847[] = {
+       2,
+       -1, 1, 606,
+       79, 0, 205
+};
+static int parser_action_row848[] = {
+       3,
+       -1, 1, 656,
        0, 0, 1,
-       1, 0, 2,
-       57, 0, 312
+       1, 0, 2
 };
-static int parser_action_row751[] = {
-       2,
-       -1, 1, 301,
-       57, 0, 312
+static int parser_action_row849[] = {
+       1,
+       -1, 1, 1280
 };
-static int parser_action_row752[] = {
+static int parser_action_row850[] = {
        2,
-       -1, 3, 751,
-       53, 0, 906
+       -1, 1, 619,
+       55, 0, 847
 };
-static int parser_action_row753[] = {
-       4,
-       -1, 1, 531,
+static int parser_action_row851[] = {
+       3,
+       -1, 3, 850,
+       47, 0, 390,
+       80, 0, 391
+};
+static int parser_action_row852[] = {
+       3,
+       -1, 1, 656,
        0, 0, 1,
-       1, 0, 2,
-       56, 0, 907
+       1, 0, 2
 };
-static int parser_action_row754[] = {
+static int parser_action_row853[] = {
+       1,
+       -1, 1, 558
+};
+static int parser_action_row854[] = {
+       23,
+       -1, 3, 853,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row855[] = {
+       22,
+       -1, 3, 854,
+       11, 0, 1010,
+       23, 0, 1011,
+       32, 0, 1012,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row856[] = {
+       1,
+       -1, 1, 1283
+};
+static int parser_action_row857[] = {
+       1,
+       -1, 1, 461
+};
+static int parser_action_row858[] = {
+       31,
+       -1, 1, 470,
+       8, 0, 326,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 55,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row859[] = {
+       2,
+       -1, 3, 858,
+       49, 0, 191
+};
+static int parser_action_row860[] = {
+       4,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       52, 0, 1043
+};
+static int parser_action_row861[] = {
+       23,
+       -1, 3, 860,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row862[] = {
+       33,
+       -1, 3, 861,
+       0, 0, 1,
+       1, 0, 2,
+       8, 0, 155,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 55,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row863[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row864[] = {
+       1,
+       -1, 1, 67
+};
+static int parser_action_row865[] = {
+       4,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       56, 0, 330
+};
+static int parser_action_row866[] = {
+       3,
+       -1, 1, 374,
+       56, 0, 330,
+       79, 0, 205
+};
+static int parser_action_row867[] = {
+       2,
+       -1, 3, 866,
+       52, 0, 1054
+};
+static int parser_action_row868[] = {
+       4,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       55, 0, 1055
+};
+static int parser_action_row869[] = {
        20,
-       -1, 3, 753,
-       42, 0, 911,
-       48, 0, 361,
-       54, 0, 383,
-       65, 0, 384,
-       66, 0, 385,
-       67, 0, 386,
-       68, 0, 387,
-       69, 0, 388,
-       70, 0, 389,
-       71, 0, 390,
-       72, 0, 391,
-       73, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       80, 0, 912,
-       81, 0, 398
+       -1, 3, 868,
+       41, 0, 1059,
+       47, 0, 390,
+       53, 0, 411,
+       64, 0, 412,
+       65, 0, 413,
+       66, 0, 414,
+       67, 0, 415,
+       68, 0, 416,
+       69, 0, 417,
+       70, 0, 418,
+       71, 0, 419,
+       72, 0, 420,
+       73, 0, 421,
+       74, 0, 422,
+       75, 0, 423,
+       76, 0, 424,
+       77, 0, 425,
+       80, 0, 1060,
+       81, 0, 426
 };
-static int parser_action_row755[] = {
+static int parser_action_row870[] = {
        5,
-       -1, 1, 543,
-       3, 0, 638,
-       30, 0, 39,
-       86, 0, 918,
+       -1, 1, 674,
+       3, 0, 722,
+       29, 0, 39,
+       85, 0, 1066,
        92, 0, 62
 };
-static int parser_action_row756[] = {
+static int parser_action_row871[] = {
        2,
-       -1, 1, 537,
-       9, 0, 921
+       -1, 1, 321,
+       14, 1, 323
 };
-static int parser_action_row757[] = {
+static int parser_action_row872[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row873[] = {
+       2,
+       -1, 1, 662,
+       8, 0, 1070
+};
+static int parser_action_row874[] = {
+       33,
+       -1, 3, 873,
+       0, 0, 1,
+       1, 0, 2,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 55,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row875[] = {
        1,
-       -1, 1, 561
+       -1, 1, 692
 };
-static int parser_action_row758[] = {
+static int parser_action_row876[] = {
        2,
-       -1, 1, 289,
-       59, 1, 568
+       -1, 1, 362,
+       58, 1, 699
 };
-static int parser_action_row759[] = {
+static int parser_action_row877[] = {
        2,
-       -1, 3, 758,
-       81, 0, 922
+       -1, 3, 876,
+       81, 0, 1072
 };
-static int parser_action_row760[] = {
+static int parser_action_row878[] = {
        3,
-       -1, 1, 296,
-       52, 0, 923,
-       57, 0, 312
+       -1, 1, 369,
+       51, 0, 1073,
+       56, 0, 330
 };
-static int parser_action_row761[] = {
+static int parser_action_row879[] = {
        1,
-       -1, 1, 849
+       -1, 1, 1267
 };
-static int parser_action_row762[] = {
+static int parser_action_row880[] = {
        23,
-       -1, 3, 761,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 879,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -8506,311 +9902,480 @@ static int parser_action_row762[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row763[] = {
+static int parser_action_row881[] = {
        2,
-       -1, 3, 762,
-       80, 0, 928
+       -1, 3, 880,
+       80, 0, 1078
 };
-static int parser_action_row764[] = {
+static int parser_action_row882[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row765[] = {
-       10,
-       -1, 1, 258,
-       8, 0, 771,
-       9, 0, 933,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       42, 0, 776
+static int parser_action_row883[] = {
+       11,
+       -1, 1, 331,
+       3, 0, 890,
+       8, 0, 1083,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895,
+       81, 0, 896
 };
-static int parser_action_row766[] = {
+static int parser_action_row884[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row767[] = {
+static int parser_action_row885[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row768[] = {
+static int parser_action_row886[] = {
+       5,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       29, 0, 39,
+       92, 0, 62
+};
+static int parser_action_row887[] = {
        1,
-       -1, 1, 115
+       -1, 1, 152
 };
-static int parser_action_row769[] = {
-       10,
-       -1, 1, 258,
-       8, 0, 771,
-       9, 0, 937,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       42, 0, 776
+static int parser_action_row888[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1091,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
 };
-static int parser_action_row770[] = {
+static int parser_action_row889[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row771[] = {
+static int parser_action_row890[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row772[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+static int parser_action_row891[] = {
+       1,
+       -1, 1, 1249
 };
-static int parser_action_row773[] = {
+static int parser_action_row892[] = {
        1,
-       -1, 1, 71
+       -1, 1, 73
 };
-static int parser_action_row774[] = {
+static int parser_action_row893[] = {
        6,
-       -1, 1, 258,
-       16, 0, 942,
-       17, 0, 943,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       15, 0, 1095,
+       16, 0, 1096,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row775[] = {
+static int parser_action_row894[] = {
        1,
-       -1, 1, 252
+       -1, 1, 325
 };
-static int parser_action_row776[] = {
+static int parser_action_row895[] = {
        1,
-       -1, 1, 254
+       -1, 1, 327
 };
-static int parser_action_row777[] = {
+static int parser_action_row896[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row778[] = {
+static int parser_action_row897[] = {
+       1,
+       -1, 1, 1248
+};
+static int parser_action_row898[] = {
        6,
-       -1, 1, 258,
-       13, 0, 946,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       12, 0, 1099,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row779[] = {
+static int parser_action_row899[] = {
        5,
-       -1, 1, 258,
-       13, 0, 949,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       12, 0, 1102,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row780[] = {
+static int parser_action_row900[] = {
        6,
-       -1, 3, 779,
-       10, 0, 951,
-       11, 0, 952,
-       12, 0, 953,
-       18, 0, 954,
-       39, 0, 955
+       -1, 3, 899,
+       9, 0, 1104,
+       10, 0, 1105,
+       11, 0, 1106,
+       17, 0, 1107,
+       38, 0, 1108
 };
-static int parser_action_row781[] = {
+static int parser_action_row901[] = {
+       37,
+       -1, 3, 900,
+       0, 0, 87,
+       1, 0, 88,
+       11, 0, 122,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 123,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       32, 0, 124,
+       33, 0, 1109,
+       34, 0, 1110,
+       35, 0, 1111,
+       36, 0, 1112,
+       37, 0, 44,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       47, 0, 390,
+       48, 0, 132,
+       50, 0, 1113,
+       51, 0, 1114,
+       65, 0, 134,
+       79, 0, 205,
+       80, 0, 688,
+       81, 0, 1115,
+       82, 0, 1116,
+       83, 0, 137,
+       84, 0, 138,
+       85, 0, 139,
+       86, 0, 60,
+       89, 0, 140
+};
+static int parser_action_row902[] = {
        1,
-       -1, 1, 841
+       -1, 1, 1259
 };
-static int parser_action_row782[] = {
-       10,
-       -1, 1, 258,
-       8, 0, 771,
-       9, 0, 956,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       42, 0, 776
+static int parser_action_row903[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1132,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
 };
-static int parser_action_row783[] = {
+static int parser_action_row904[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row784[] = {
+static int parser_action_row905[] = {
        1,
-       -1, 1, 843
+       -1, 1, 1261
 };
-static int parser_action_row785[] = {
+static int parser_action_row906[] = {
        8,
-       -1, 1, 258,
-       9, 0, 958,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       8, 0, 1134,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row786[] = {
+static int parser_action_row907[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row787[] = {
-       23,
-       -1, 3, 786,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 178,
-       82, 0, 179,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
+static int parser_action_row908[] = {
+       11,
+       -1, 1, 331,
+       3, 0, 890,
+       8, 0, 1138,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895,
+       81, 0, 896
 };
-static int parser_action_row788[] = {
-       23,
-       -1, 3, 787,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 178,
-       82, 0, 179,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
+static int parser_action_row909[] = {
+       1,
+       -1, 1, 1291
+};
+static int parser_action_row910[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row911[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row912[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row913[] = {
+       23,
+       -1, 3, 912,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row789[] = {
+static int parser_action_row914[] = {
+       23,
+       -1, 3, 913,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row915[] = {
        1,
-       -1, 1, 368
+       -1, 1, 448
 };
-static int parser_action_row790[] = {
+static int parser_action_row916[] = {
        1,
-       -1, 1, 400
+       -1, 1, 484
 };
-static int parser_action_row791[] = {
+static int parser_action_row917[] = {
        1,
-       -1, 1, 405
+       -1, 1, 489
 };
-static int parser_action_row792[] = {
+static int parser_action_row918[] = {
+       1,
+       -1, 1, 322
+};
+static int parser_action_row919[] = {
+       37,
+       -1, 3, 918,
+       0, 0, 87,
+       1, 0, 88,
+       11, 0, 122,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 123,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       32, 0, 124,
+       33, 0, 1109,
+       34, 0, 1110,
+       35, 0, 1111,
+       36, 0, 1112,
+       37, 0, 44,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       47, 0, 390,
+       48, 0, 132,
+       50, 0, 1113,
+       51, 0, 1145,
+       65, 0, 134,
+       79, 0, 205,
+       80, 0, 688,
+       81, 0, 1115,
+       82, 0, 1116,
+       83, 0, 137,
+       84, 0, 138,
+       85, 0, 139,
+       86, 0, 60,
+       89, 0, 140
+};
+static int parser_action_row920[] = {
+       1,
+       -1, 1, 1279
+};
+static int parser_action_row921[] = {
        23,
-       -1, 3, 791,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 920,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row793[] = {
+static int parser_action_row922[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 1, 631,
+       51, 0, 282
 };
-static int parser_action_row794[] = {
+static int parser_action_row923[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row795[] = {
+static int parser_action_row924[] = {
        5,
-       -1, 1, 544,
-       3, 0, 638,
-       30, 0, 39,
-       86, 0, 965,
+       -1, 1, 675,
+       3, 0, 722,
+       29, 0, 39,
+       85, 0, 1152,
        92, 0, 62
 };
-static int parser_action_row796[] = {
+static int parser_action_row925[] = {
        2,
-       -1, 1, 538,
-       9, 0, 968
+       -1, 1, 663,
+       8, 0, 1155
 };
-static int parser_action_row797[] = {
+static int parser_action_row926[] = {
+       33,
+       -1, 3, 925,
+       0, 0, 1,
+       1, 0, 2,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 55,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row927[] = {
        1,
-       -1, 1, 562
+       -1, 1, 693
 };
-static int parser_action_row798[] = {
+static int parser_action_row928[] = {
        23,
-       -1, 3, 797,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 927,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -8818,134 +10383,177 @@ static int parser_action_row798[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row799[] = {
+static int parser_action_row929[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row800[] = {
-       10,
-       -1, 1, 258,
-       8, 0, 771,
-       9, 0, 973,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       42, 0, 776
+static int parser_action_row930[] = {
+       11,
+       -1, 1, 331,
+       3, 0, 890,
+       8, 0, 1161,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895,
+       81, 0, 896
 };
-static int parser_action_row801[] = {
+static int parser_action_row931[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row802[] = {
+static int parser_action_row932[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row803[] = {
-       10,
-       -1, 1, 258,
-       8, 0, 771,
-       9, 0, 977,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       42, 0, 776
+static int parser_action_row933[] = {
+       5,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       29, 0, 39,
+       92, 0, 62
 };
-static int parser_action_row804[] = {
+static int parser_action_row934[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1169,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
+};
+static int parser_action_row935[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row805[] = {
+static int parser_action_row936[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row806[] = {
+static int parser_action_row937[] = {
        1,
-       -1, 1, 72
+       -1, 1, 74
 };
-static int parser_action_row807[] = {
-       10,
-       -1, 1, 258,
-       8, 0, 771,
-       9, 0, 981,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       42, 0, 776
+static int parser_action_row938[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1173,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
 };
-static int parser_action_row808[] = {
+static int parser_action_row939[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row809[] = {
+static int parser_action_row940[] = {
        8,
-       -1, 1, 258,
-       9, 0, 983,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       8, 0, 1175,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row810[] = {
+static int parser_action_row941[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row942[] = {
+       11,
+       -1, 1, 331,
+       3, 0, 890,
+       8, 0, 1179,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895,
+       81, 0, 896
+};
+static int parser_action_row943[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row944[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row945[] = {
+       1,
+       -1, 1, 483
+};
+static int parser_action_row946[] = {
        2,
-       -1, 1, 373,
-       26, 1, 659
+       -1, 1, 453,
+       25, 1, 989
 };
-static int parser_action_row811[] = {
+static int parser_action_row947[] = {
        3,
-       -1, 1, 338,
-       26, 1, 631,
-       50, 1, 709
+       -1, 1, 418,
+       25, 1, 961,
+       49, 1, 1087
 };
-static int parser_action_row812[] = {
+static int parser_action_row948[] = {
        31,
-       -1, 3, 811,
-       9, 0, 984,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       -1, 3, 947,
+       8, 0, 1183,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -8953,355 +10561,356 @@ static int parser_action_row812[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row813[] = {
+static int parser_action_row949[] = {
        1,
-       -1, 1, 688
+       -1, 1, 1022
 };
-static int parser_action_row814[] = {
+static int parser_action_row950[] = {
        1,
-       -1, 1, 632
+       -1, 1, 962
 };
-static int parser_action_row815[] = {
+static int parser_action_row951[] = {
        2,
-       -1, 3, 814,
-       50, 0, 191
+       -1, 3, 950,
+       49, 0, 191
 };
-static int parser_action_row816[] = {
-       4,
-       -1, 1, 396,
-       26, 1, 673,
-       57, 0, 312,
-       59, 0, 987
+static int parser_action_row952[] = {
+       5,
+       -1, 1, 476,
+       25, 1, 1003,
+       56, 0, 330,
+       58, 0, 1186,
+       79, 0, 205
 };
-static int parser_action_row817[] = {
+static int parser_action_row953[] = {
        23,
-       -1, 3, 816,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 952,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row818[] = {
+static int parser_action_row954[] = {
        1,
-       -1, 1, 419
+       -1, 1, 503
 };
-static int parser_action_row819[] = {
+static int parser_action_row955[] = {
        23,
-       -1, 3, 818,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 954,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row820[] = {
+static int parser_action_row956[] = {
        1,
-       -1, 1, 691
+       -1, 1, 1025
 };
-static int parser_action_row821[] = {
+static int parser_action_row957[] = {
        2,
-       -1, 3, 820,
-       50, 0, 191
+       -1, 3, 956,
+       49, 0, 191
 };
-static int parser_action_row822[] = {
+static int parser_action_row958[] = {
        3,
-       -1, 3, 821,
-       52, 0, 992,
-       81, 0, 319
+       -1, 3, 957,
+       51, 0, 1192,
+       81, 0, 338
 };
-static int parser_action_row823[] = {
+static int parser_action_row959[] = {
        1,
-       -1, 1, 636
+       -1, 1, 966
 };
-static int parser_action_row824[] = {
+static int parser_action_row960[] = {
        24,
-       -1, 1, 357,
-       12, 0, 170,
-       24, 0, 171,
-       26, 1, 643,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
+       -1, 1, 437,
+       11, 0, 170,
+       23, 0, 171,
+       25, 1, 973,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row825[] = {
+static int parser_action_row961[] = {
        1,
-       -1, 1, 644
+       -1, 1, 974
 };
-static int parser_action_row826[] = {
+static int parser_action_row962[] = {
        24,
-       -1, 1, 352,
-       12, 0, 170,
-       24, 0, 171,
-       26, 1, 638,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
+       -1, 1, 432,
+       11, 0, 170,
+       23, 0, 171,
+       25, 1, 968,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row827[] = {
+static int parser_action_row963[] = {
        1,
-       -1, 1, 639
+       -1, 1, 969
 };
-static int parser_action_row828[] = {
+static int parser_action_row964[] = {
        23,
-       -1, 3, 827,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
+       -1, 3, 963,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row829[] = {
+static int parser_action_row965[] = {
        2,
-       -1, 3, 828,
-       26, 0, 997
+       -1, 3, 964,
+       25, 0, 1197
 };
-static int parser_action_row830[] = {
+static int parser_action_row966[] = {
        2,
-       -1, 1, 370,
-       26, 1, 656
+       -1, 1, 450,
+       25, 1, 986
 };
-static int parser_action_row831[] = {
+static int parser_action_row967[] = {
        3,
-       -1, 3, 830,
-       48, 0, 361,
-       80, 0, 362
+       -1, 3, 966,
+       47, 0, 390,
+       80, 0, 391
 };
-static int parser_action_row832[] = {
+static int parser_action_row968[] = {
        4,
-       -1, 1, 475,
-       59, 0, 999,
-       60, 0, 215,
-       61, 0, 216
+       -1, 1, 559,
+       58, 0, 1199,
+       59, 0, 220,
+       60, 0, 221
 };
-static int parser_action_row833[] = {
+static int parser_action_row969[] = {
        3,
-       -1, 1, 367,
-       26, 1, 653,
-       79, 0, 499
+       -1, 1, 447,
+       25, 1, 983,
+       78, 0, 533
 };
-static int parser_action_row834[] = {
+static int parser_action_row970[] = {
        23,
-       -1, 3, 833,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
+       -1, 3, 969,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row835[] = {
+static int parser_action_row971[] = {
        23,
-       -1, 3, 834,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
+       -1, 3, 970,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row836[] = {
+static int parser_action_row972[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row837[] = {
+static int parser_action_row973[] = {
        4,
-       -1, 1, 480,
-       59, 0, 1005,
-       60, 0, 215,
-       61, 0, 216
+       -1, 1, 564,
+       58, 0, 1205,
+       59, 0, 220,
+       60, 0, 221
 };
-static int parser_action_row838[] = {
+static int parser_action_row974[] = {
        24,
-       -1, 1, 510,
-       12, 0, 122,
-       24, 0, 123,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       52, 0, 133,
-       54, 1, 506,
-       64, 1, 506,
-       66, 0, 134,
+       -1, 1, 635,
+       11, 0, 122,
+       23, 0, 123,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       51, 0, 133,
+       53, 1, 631,
+       63, 1, 631,
+       65, 0, 134,
        80, 0, 54,
        81, 0, 135,
        82, 0, 136,
        83, 0, 137,
        84, 0, 138,
        85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       86, 0, 60,
+       89, 0, 140
 };
-static int parser_action_row839[] = {
+static int parser_action_row975[] = {
        3,
-       -1, 3, 838,
-       9, 0, 688,
-       26, 0, 693
+       -1, 3, 974,
+       8, 0, 785,
+       25, 0, 790
 };
-static int parser_action_row840[] = {
+static int parser_action_row976[] = {
        3,
-       -1, 3, 839,
+       -1, 3, 975,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row841[] = {
+static int parser_action_row977[] = {
        1,
-       -1, 1, 418
+       -1, 1, 502
 };
-static int parser_action_row842[] = {
+static int parser_action_row978[] = {
        33,
-       -1, 3, 841,
+       -1, 3, 977,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 506,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -9309,83 +10918,83 @@ static int parser_action_row842[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row843[] = {
+static int parser_action_row979[] = {
        1,
-       -1, 1, 423
+       -1, 1, 507
 };
-static int parser_action_row844[] = {
+static int parser_action_row980[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row845[] = {
+static int parser_action_row981[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row846[] = {
+static int parser_action_row982[] = {
        1,
-       -1, 1, 516
+       -1, 1, 641
 };
-static int parser_action_row847[] = {
+static int parser_action_row983[] = {
        23,
-       -1, 3, 846,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 982,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row848[] = {
+static int parser_action_row984[] = {
        1,
-       -1, 1, 435
+       -1, 1, 519
 };
-static int parser_action_row849[] = {
+static int parser_action_row985[] = {
        31,
-       -1, 1, 390,
-       9, 0, 984,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       -1, 1, 470,
+       8, 0, 1183,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -9393,383 +11002,478 @@ static int parser_action_row849[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row850[] = {
+static int parser_action_row986[] = {
        1,
-       -1, 1, 666
+       -1, 1, 996
 };
-static int parser_action_row851[] = {
+static int parser_action_row987[] = {
        2,
-       -1, 3, 850,
-       50, 0, 191
+       -1, 3, 986,
+       49, 0, 191
 };
-static int parser_action_row852[] = {
+static int parser_action_row988[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       53, 0, 1015
+       52, 0, 1215
 };
-static int parser_action_row853[] = {
+static int parser_action_row989[] = {
        23,
-       -1, 3, 852,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
+       -1, 3, 988,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row854[] = {
+static int parser_action_row990[] = {
        33,
-       -1, 3, 853,
+       -1, 3, 989,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 810,
-       12, 0, 689,
-       15, 0, 690,
-       18, 0, 691,
-       24, 0, 692,
-       27, 0, 694,
-       28, 0, 695,
-       29, 0, 696,
-       34, 0, 697,
-       35, 0, 698,
-       36, 0, 699,
-       37, 0, 700,
-       38, 0, 701,
-       39, 0, 45,
-       42, 0, 702,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 703,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 704,
-       82, 0, 705,
+       8, 0, 946,
+       11, 0, 786,
+       14, 0, 787,
+       17, 0, 788,
+       23, 0, 789,
+       26, 0, 791,
+       27, 0, 792,
+       28, 0, 793,
+       33, 0, 794,
+       34, 0, 795,
+       35, 0, 796,
+       36, 0, 797,
+       37, 0, 798,
+       38, 0, 45,
+       41, 0, 799,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 800,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 801,
+       82, 0, 802,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row855[] = {
+static int parser_action_row991[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row856[] = {
+static int parser_action_row992[] = {
        1,
-       -1, 1, 701
+       -1, 1, 1035
 };
-static int parser_action_row857[] = {
+static int parser_action_row993[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row858[] = {
+static int parser_action_row994[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row859[] = {
+static int parser_action_row995[] = {
        1,
-       -1, 1, 852
+       -1, 1, 1270
 };
-static int parser_action_row860[] = {
+static int parser_action_row996[] = {
        2,
-       -1, 1, 333,
-       56, 0, 857
+       -1, 1, 413,
+       55, 0, 993
 };
-static int parser_action_row861[] = {
+static int parser_action_row997[] = {
        2,
-       -1, 3, 860,
-       55, 0, 1025
+       -1, 3, 996,
+       54, 0, 1225
 };
-static int parser_action_row862[] = {
+static int parser_action_row998[] = {
        1,
-       -1, 1, 481
+       -1, 1, 884
 };
-static int parser_action_row863[] = {
+static int parser_action_row999[] = {
+       1,
+       -1, 1, 565
+};
+static int parser_action_row1000[] = {
+       1,
+       -1, 1, 617
+};
+static int parser_action_row1001[] = {
+       1,
+       -1, 1, 1103
+};
+static int parser_action_row1002[] = {
+       1,
+       -1, 1, 1098
+};
+static int parser_action_row1003[] = {
+       2,
+       -1, 3, 1002,
+       56, 0, 1226
+};
+static int parser_action_row1004[] = {
+       5,
+       -1, 3, 1003,
+       11, 0, 663,
+       46, 0, 577,
+       81, 0, 1227,
+       82, 0, 579
+};
+static int parser_action_row1005[] = {
+       1,
+       -1, 1, 607
+};
+static int parser_action_row1006[] = {
+       36,
+       -1, 3, 1005,
+       11, 0, 170,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 171,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       32, 0, 172,
+       33, 0, 683,
+       34, 0, 684,
+       35, 0, 685,
+       36, 0, 686,
+       37, 0, 44,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       47, 0, 390,
+       48, 0, 176,
+       50, 0, 687,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       79, 0, 205,
+       80, 0, 688,
+       81, 0, 689,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1007[] = {
+       1,
+       -1, 1, 1281
+};
+static int parser_action_row1008[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row864[] = {
+static int parser_action_row1009[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 3, 1008,
+       54, 0, 1230
 };
-static int parser_action_row865[] = {
+static int parser_action_row1010[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row866[] = {
+static int parser_action_row1011[] = {
+       2,
+       -1, 1, 631,
+       51, 0, 282
+};
+static int parser_action_row1012[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row867[] = {
+static int parser_action_row1013[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row868[] = {
+static int parser_action_row1014[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row869[] = {
+static int parser_action_row1015[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1016[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 1, 631,
+       51, 0, 282
 };
-static int parser_action_row870[] = {
-       1,
-       -1, 1, 617
+static int parser_action_row1017[] = {
+       2,
+       -1, 1, 750,
+       79, 0, 205
 };
-static int parser_action_row871[] = {
-       1,
-       -1, 1, 618
+static int parser_action_row1018[] = {
+       2,
+       -1, 1, 752,
+       79, 0, 205
 };
-static int parser_action_row872[] = {
-       1,
-       -1, 1, 619
+static int parser_action_row1019[] = {
+       2,
+       -1, 1, 754,
+       79, 0, 205
 };
-static int parser_action_row873[] = {
-       1,
-       -1, 1, 620
+static int parser_action_row1020[] = {
+       2,
+       -1, 1, 756,
+       79, 0, 205
 };
-static int parser_action_row874[] = {
+static int parser_action_row1021[] = {
        17,
-       -1, 3, 873,
-       12, 0, 863,
-       39, 0, 1033,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       52, 0, 874,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 1034,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+       -1, 3, 1020,
+       11, 0, 1010,
+       38, 0, 1242,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       51, 0, 1021,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1243,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
 };
-static int parser_action_row875[] = {
+static int parser_action_row1022[] = {
        23,
-       -1, 3, 874,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1021,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row876[] = {
+static int parser_action_row1023[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row877[] = {
+static int parser_action_row1024[] = {
        3,
-       -1, 1, 506,
-       52, 0, 272,
-       58, 0, 211
+       -1, 1, 631,
+       51, 0, 282,
+       57, 0, 216
 };
-static int parser_action_row878[] = {
+static int parser_action_row1025[] = {
        1,
-       -1, 1, 609
+       -1, 1, 742
 };
-static int parser_action_row879[] = {
-       1,
-       -1, 1, 621
+static int parser_action_row1026[] = {
+       2,
+       -1, 1, 758,
+       79, 0, 205
 };
-static int parser_action_row880[] = {
-       1,
-       -1, 1, 622
+static int parser_action_row1027[] = {
+       2,
+       -1, 1, 760,
+       79, 0, 205
 };
-static int parser_action_row881[] = {
-       1,
-       -1, 1, 623
+static int parser_action_row1028[] = {
+       2,
+       -1, 1, 764,
+       79, 0, 205
 };
-static int parser_action_row882[] = {
-       1,
-       -1, 1, 624
+static int parser_action_row1029[] = {
+       2,
+       -1, 1, 762,
+       79, 0, 205
 };
-static int parser_action_row883[] = {
+static int parser_action_row1030[] = {
        1,
-       -1, 1, 625
+       -1, 1, 766
 };
-static int parser_action_row884[] = {
+static int parser_action_row1031[] = {
        2,
-       -1, 3, 883,
-       42, 0, 1039
+       -1, 3, 1030,
+       41, 0, 1252
 };
-static int parser_action_row885[] = {
+static int parser_action_row1032[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row886[] = {
+static int parser_action_row1033[] = {
        3,
-       -1, 1, 574,
-       31, 0, 1041,
-       32, 0, 1042
+       -1, 1, 707,
+       30, 0, 1254,
+       31, 0, 1255
 };
-static int parser_action_row887[] = {
+static int parser_action_row1034[] = {
        1,
-       -1, 1, 576
+       -1, 1, 709
 };
-static int parser_action_row888[] = {
+static int parser_action_row1035[] = {
        3,
-       -1, 1, 580,
-       74, 0, 1043,
-       77, 0, 1044
+       -1, 1, 713,
+       73, 0, 1256,
+       76, 0, 1257
 };
-static int parser_action_row889[] = {
+static int parser_action_row1036[] = {
        12,
-       -1, 1, 582,
-       14, 0, 1045,
-       40, 0, 1046,
-       65, 0, 1047,
-       66, 0, 1048,
-       70, 0, 1049,
-       71, 0, 1050,
-       72, 0, 1051,
-       73, 0, 1052,
-       75, 0, 1053,
-       76, 0, 1054,
-       78, 0, 1055
+       -1, 1, 715,
+       13, 0, 1258,
+       39, 0, 1259,
+       64, 0, 1260,
+       65, 0, 1261,
+       69, 0, 1262,
+       70, 0, 1263,
+       71, 0, 1264,
+       72, 0, 1265,
+       74, 0, 1266,
+       75, 0, 1267,
+       77, 0, 1268
 };
-static int parser_action_row890[] = {
+static int parser_action_row1037[] = {
        4,
-       -1, 1, 594,
-       67, 0, 1056,
-       68, 0, 1057,
-       69, 0, 1058
+       -1, 1, 727,
+       66, 0, 1269,
+       67, 0, 1270,
+       68, 0, 1271
 };
-static int parser_action_row891[] = {
+static int parser_action_row1038[] = {
        1,
-       -1, 1, 597
+       -1, 1, 730
 };
-static int parser_action_row892[] = {
+static int parser_action_row1039[] = {
        1,
-       -1, 1, 601
+       -1, 1, 734
 };
-static int parser_action_row893[] = {
+static int parser_action_row1040[] = {
        2,
-       -1, 1, 604,
-       64, 0, 1059
+       -1, 1, 737,
+       63, 0, 1272
 };
-static int parser_action_row894[] = {
+static int parser_action_row1041[] = {
        1,
-       -1, 1, 387
+       -1, 1, 467
 };
-static int parser_action_row895[] = {
+static int parser_action_row1042[] = {
        3,
-       -1, 3, 894,
+       -1, 3, 1041,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row896[] = {
+static int parser_action_row1043[] = {
        1,
-       -1, 1, 378
+       -1, 1, 458
 };
-static int parser_action_row897[] = {
+static int parser_action_row1044[] = {
        3,
-       -1, 3, 896,
-       15, 0, 1062,
-       59, 0, 1063
+       -1, 3, 1043,
+       14, 0, 1275,
+       58, 0, 1276
 };
-static int parser_action_row898[] = {
+static int parser_action_row1045[] = {
        1,
-       -1, 1, 384
+       -1, 1, 464
 };
-static int parser_action_row899[] = {
+static int parser_action_row1046[] = {
        1,
-       -1, 1, 395
+       -1, 1, 475
 };
-static int parser_action_row900[] = {
+static int parser_action_row1047[] = {
        1,
-       -1, 1, 383
+       -1, 1, 463
 };
-static int parser_action_row901[] = {
+static int parser_action_row1048[] = {
        31,
-       -1, 1, 392,
-       9, 0, 308,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       -1, 1, 472,
+       8, 0, 326,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -9777,30 +11481,30 @@ static int parser_action_row901[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row902[] = {
+static int parser_action_row1049[] = {
        2,
-       -1, 3, 901,
-       50, 0, 191
+       -1, 3, 1048,
+       49, 0, 191
 };
-static int parser_action_row903[] = {
+static int parser_action_row1050[] = {
        23,
-       -1, 3, 902,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 1049,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -9808,908 +11512,1366 @@ static int parser_action_row903[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row904[] = {
+static int parser_action_row1051[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row905[] = {
+static int parser_action_row1052[] = {
        3,
-       -1, 1, 284,
-       36, 0, 644,
-       79, 0, 645
+       -1, 1, 357,
+       35, 0, 730,
+       78, 0, 731
 };
-static int parser_action_row906[] = {
+static int parser_action_row1053[] = {
        2,
-       -1, 1, 302,
-       62, 0, 1069
+       -1, 1, 376,
+       61, 0, 1282
 };
-static int parser_action_row907[] = {
-       4,
-       -1, 1, 531,
+static int parser_action_row1054[] = {
+       2,
+       -1, 1, 375,
+       56, 0, 330
+};
+static int parser_action_row1055[] = {
+       4,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       57, 0, 312
+       56, 0, 330
 };
-static int parser_action_row908[] = {
+static int parser_action_row1056[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row909[] = {
+static int parser_action_row1057[] = {
        1,
-       -1, 1, 846
+       -1, 1, 1264
 };
-static int parser_action_row910[] = {
+static int parser_action_row1058[] = {
        1,
-       -1, 1, 298
+       -1, 1, 371
 };
-static int parser_action_row911[] = {
+static int parser_action_row1059[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       56, 0, 907
+       55, 0, 1055
 };
-static int parser_action_row912[] = {
+static int parser_action_row1060[] = {
        1,
-       -1, 1, 317
+       -1, 1, 393
 };
-static int parser_action_row913[] = {
-       4,
-       -1, 1, 320,
-       47, 1, 328,
-       54, 0, 510,
-       58, 0, 1075
+static int parser_action_row1061[] = {
+       5,
+       -1, 1, 396,
+       46, 1, 404,
+       53, 0, 553,
+       57, 0, 1289,
+       79, 0, 205
 };
-static int parser_action_row914[] = {
+static int parser_action_row1062[] = {
        1,
-       -1, 1, 318
+       -1, 1, 394
 };
-static int parser_action_row915[] = {
+static int parser_action_row1063[] = {
        2,
-       -1, 1, 312,
-       56, 0, 1076
+       -1, 1, 388,
+       55, 0, 1290
 };
-static int parser_action_row916[] = {
+static int parser_action_row1064[] = {
        1,
-       -1, 1, 315
+       -1, 1, 391
 };
-static int parser_action_row917[] = {
+static int parser_action_row1065[] = {
        1,
-       -1, 1, 316
+       -1, 1, 392
 };
-static int parser_action_row918[] = {
+static int parser_action_row1066[] = {
        2,
-       -1, 3, 917,
-       47, 0, 1079
+       -1, 3, 1065,
+       46, 0, 1293
 };
-static int parser_action_row919[] = {
+static int parser_action_row1067[] = {
        4,
-       -1, 1, 545,
-       3, 0, 638,
-       30, 0, 39,
+       -1, 1, 676,
+       3, 0, 722,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row920[] = {
+static int parser_action_row1068[] = {
        3,
-       -1, 1, 547,
-       30, 0, 39,
+       -1, 1, 678,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row921[] = {
+static int parser_action_row1069[] = {
        1,
-       -1, 1, 551
+       -1, 1, 682
 };
-static int parser_action_row922[] = {
+static int parser_action_row1070[] = {
+       2,
+       -1, 1, 324,
+       8, 0, 917
+};
+static int parser_action_row1071[] = {
        1,
-       -1, 1, 539
+       -1, 1, 666
 };
-static int parser_action_row923[] = {
+static int parser_action_row1072[] = {
+       2,
+       -1, 1, 664,
+       8, 0, 1297
+};
+static int parser_action_row1073[] = {
        3,
-       -1, 1, 296,
-       52, 0, 923,
-       57, 0, 312
+       -1, 1, 369,
+       51, 0, 1073,
+       56, 0, 330
 };
-static int parser_action_row924[] = {
+static int parser_action_row1074[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row925[] = {
+static int parser_action_row1075[] = {
        5,
-       -1, 3, 924,
+       -1, 3, 1074,
        0, 0, 1,
        1, 0, 2,
-       15, 0, 1085,
-       59, 0, 1086
+       14, 0, 1300,
+       58, 0, 1301
 };
-static int parser_action_row926[] = {
+static int parser_action_row1076[] = {
        1,
-       -1, 1, 297
+       -1, 1, 370
 };
-static int parser_action_row927[] = {
+static int parser_action_row1077[] = {
        1,
-       -1, 1, 541
+       -1, 1, 670
 };
-static int parser_action_row928[] = {
+static int parser_action_row1078[] = {
        1,
-       -1, 1, 311
+       -1, 1, 387
 };
-static int parser_action_row929[] = {
-       2,
-       -1, 1, 111,
-       57, 0, 312
+static int parser_action_row1079[] = {
+       3,
+       -1, 1, 146,
+       56, 0, 330,
+       79, 0, 205
 };
-static int parser_action_row930[] = {
+static int parser_action_row1080[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       56, 0, 1089
+       55, 0, 1305
 };
-static int parser_action_row931[] = {
-       10,
-       -1, 1, 258,
-       8, 0, 771,
-       9, 0, 1093,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       42, 0, 776
+static int parser_action_row1081[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1309,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
 };
-static int parser_action_row932[] = {
+static int parser_action_row1082[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row933[] = {
+static int parser_action_row1083[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row934[] = {
+static int parser_action_row1084[] = {
        1,
-       -1, 1, 73
+       -1, 1, 75
 };
-static int parser_action_row935[] = {
-       10,
-       -1, 1, 258,
-       8, 0, 771,
-       9, 0, 1097,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       42, 0, 776
+static int parser_action_row1085[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1313,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
 };
-static int parser_action_row936[] = {
+static int parser_action_row1086[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row937[] = {
+static int parser_action_row1087[] = {
        8,
-       -1, 1, 258,
-       9, 0, 1099,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       8, 0, 1315,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row938[] = {
-       1,
-       -1, 1, 75
+static int parser_action_row1088[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row939[] = {
-       10,
-       -1, 1, 258,
-       8, 0, 771,
-       9, 0, 1100,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       42, 0, 776
+static int parser_action_row1089[] = {
+       11,
+       -1, 1, 331,
+       3, 0, 890,
+       8, 0, 1319,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895,
+       81, 0, 896
 };
-static int parser_action_row940[] = {
+static int parser_action_row1090[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row941[] = {
-       8,
-       -1, 1, 258,
-       9, 0, 1102,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+static int parser_action_row1091[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row942[] = {
+static int parser_action_row1092[] = {
+       1,
+       -1, 1, 81
+};
+static int parser_action_row1093[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1323,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
+};
+static int parser_action_row1094[] = {
        3,
-       -1, 3, 941,
-       48, 0, 361,
-       80, 0, 362
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row943[] = {
+static int parser_action_row1095[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1325,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1096[] = {
        1,
-       -1, 1, 253
+       -1, 1, 326
 };
-static int parser_action_row944[] = {
+static int parser_action_row1097[] = {
        1,
-       -1, 1, 255
+       -1, 1, 328
 };
-static int parser_action_row945[] = {
+static int parser_action_row1098[] = {
        6,
-       -1, 3, 944,
-       10, 0, 1104,
-       11, 0, 1105,
-       12, 0, 1106,
-       18, 0, 1107,
-       39, 0, 1108
+       -1, 3, 1097,
+       9, 0, 1326,
+       10, 0, 1327,
+       11, 0, 1328,
+       17, 0, 1329,
+       38, 0, 1330
 };
-static int parser_action_row946[] = {
+static int parser_action_row1099[] = {
        3,
-       -1, 3, 945,
-       48, 0, 361,
-       80, 0, 362
+       -1, 3, 1098,
+       47, 0, 390,
+       80, 0, 391
 };
-static int parser_action_row947[] = {
+static int parser_action_row1100[] = {
        5,
-       -1, 1, 258,
-       17, 0, 943,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       16, 0, 1096,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row948[] = {
+static int parser_action_row1101[] = {
        5,
-       -1, 1, 258,
-       13, 0, 1111,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       12, 0, 1333,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row949[] = {
+static int parser_action_row1102[] = {
        2,
-       -1, 3, 948,
-       18, 0, 1113
+       -1, 3, 1101,
+       17, 0, 1335
 };
-static int parser_action_row950[] = {
+static int parser_action_row1103[] = {
        4,
-       -1, 1, 258,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row951[] = {
+static int parser_action_row1104[] = {
        2,
-       -1, 3, 950,
-       18, 0, 1115
+       -1, 3, 1103,
+       17, 0, 1337
 };
-static int parser_action_row952[] = {
+static int parser_action_row1105[] = {
        17,
-       -1, 3, 951,
-       54, 0, 383,
-       65, 0, 384,
-       66, 0, 385,
-       67, 0, 386,
-       68, 0, 387,
-       69, 0, 388,
-       70, 0, 389,
-       71, 0, 390,
-       72, 0, 391,
-       73, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       81, 0, 398
+       -1, 3, 1104,
+       53, 0, 411,
+       64, 0, 412,
+       65, 0, 413,
+       66, 0, 414,
+       67, 0, 415,
+       68, 0, 416,
+       69, 0, 417,
+       70, 0, 418,
+       71, 0, 419,
+       72, 0, 420,
+       73, 0, 421,
+       74, 0, 422,
+       75, 0, 423,
+       76, 0, 424,
+       77, 0, 425,
+       81, 0, 426
 };
-static int parser_action_row953[] = {
+static int parser_action_row1106[] = {
        2,
-       -1, 3, 952,
-       80, 0, 1117
+       -1, 3, 1105,
+       80, 0, 1339
 };
-static int parser_action_row954[] = {
+static int parser_action_row1107[] = {
        21,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       52, 0, 1118,
-       54, 0, 383,
-       57, 0, 312,
-       65, 0, 384,
-       66, 0, 385,
-       67, 0, 386,
-       68, 0, 387,
-       69, 0, 388,
-       70, 0, 389,
-       71, 0, 390,
-       72, 0, 391,
-       73, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       81, 0, 398
+       51, 0, 1340,
+       53, 0, 411,
+       56, 0, 330,
+       64, 0, 412,
+       65, 0, 413,
+       66, 0, 414,
+       67, 0, 415,
+       68, 0, 416,
+       69, 0, 417,
+       70, 0, 418,
+       71, 0, 419,
+       72, 0, 420,
+       73, 0, 421,
+       74, 0, 422,
+       75, 0, 423,
+       76, 0, 424,
+       77, 0, 425,
+       81, 0, 426
 };
-static int parser_action_row955[] = {
+static int parser_action_row1108[] = {
        3,
-       -1, 3, 954,
-       81, 0, 1122,
-       82, 0, 1123
+       -1, 3, 1107,
+       81, 0, 1344,
+       82, 0, 1345
 };
-static int parser_action_row956[] = {
+static int parser_action_row1109[] = {
        21,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       52, 0, 1118,
-       54, 0, 383,
-       57, 0, 312,
-       65, 0, 384,
-       66, 0, 385,
-       67, 0, 386,
-       68, 0, 387,
-       69, 0, 388,
-       70, 0, 389,
-       71, 0, 390,
-       72, 0, 391,
-       73, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       81, 0, 398
+       51, 0, 1340,
+       53, 0, 411,
+       56, 0, 330,
+       64, 0, 412,
+       65, 0, 413,
+       66, 0, 414,
+       67, 0, 415,
+       68, 0, 416,
+       69, 0, 417,
+       70, 0, 418,
+       71, 0, 419,
+       72, 0, 420,
+       73, 0, 421,
+       74, 0, 422,
+       75, 0, 423,
+       76, 0, 424,
+       77, 0, 425,
+       81, 0, 426
 };
-static int parser_action_row957[] = {
-       1,
-       -1, 1, 79
+static int parser_action_row1110[] = {
+       23,
+       -1, 1, 1112,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row958[] = {
-       8,
-       -1, 1, 258,
-       9, 0, 1126,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+static int parser_action_row1111[] = {
+       24,
+       -1, 1, 1119,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       49, 0, 191,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row959[] = {
+static int parser_action_row1112[] = {
+       24,
+       -1, 1, 1114,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       49, 0, 191,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1113[] = {
        1,
-       -1, 1, 87
+       -1, 1, 1118
 };
-static int parser_action_row960[] = {
+static int parser_action_row1114[] = {
+       2,
+       -1, 3, 1113,
+       10, 0, 1353
+};
+static int parser_action_row1115[] = {
+       36,
+       -1, 3, 1114,
+       11, 0, 170,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 171,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       32, 0, 172,
+       33, 0, 683,
+       34, 0, 684,
+       35, 0, 685,
+       36, 0, 686,
+       37, 0, 44,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       47, 0, 390,
+       48, 0, 176,
+       50, 0, 687,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       79, 0, 205,
+       80, 0, 688,
+       81, 0, 689,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1116[] = {
+       3,
+       -1, 1, 631,
+       51, 0, 282,
+       57, 0, 216
+};
+static int parser_action_row1117[] = {
        4,
-       -1, 3, 959,
-       33, 0, 1127,
-       48, 0, 361,
-       80, 0, 362
+       -1, 1, 855,
+       58, 0, 1356,
+       59, 0, 220,
+       60, 0, 221
 };
-static int parser_action_row961[] = {
+static int parser_action_row1118[] = {
        1,
-       -1, 1, 402
+       -1, 1, 889
 };
-static int parser_action_row962[] = {
+static int parser_action_row1119[] = {
        1,
-       -1, 1, 407
+       -1, 1, 1110
 };
-static int parser_action_row963[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+static int parser_action_row1120[] = {
+       1,
+       -1, 1, 1123
 };
-static int parser_action_row964[] = {
+static int parser_action_row1121[] = {
        1,
-       -1, 1, 759
+       -1, 1, 1125
 };
-static int parser_action_row965[] = {
-       4,
-       -1, 3, 964,
-       33, 0, 1130,
-       48, 0, 361,
-       80, 0, 362
+static int parser_action_row1122[] = {
+       1,
+       -1, 1, 1124
 };
-static int parser_action_row966[] = {
-       4,
-       -1, 1, 546,
-       3, 0, 638,
-       30, 0, 39,
-       92, 0, 62
+static int parser_action_row1123[] = {
+       1,
+       -1, 1, 1126
 };
-static int parser_action_row967[] = {
+static int parser_action_row1124[] = {
+       1,
+       -1, 1, 1127
+};
+static int parser_action_row1125[] = {
        3,
-       -1, 1, 548,
-       30, 0, 39,
-       92, 0, 62
+       -1, 3, 1124,
+       0, 0, 87,
+       1, 0, 88
 };
-static int parser_action_row968[] = {
+static int parser_action_row1126[] = {
        1,
-       -1, 1, 552
+       -1, 1, 1243
 };
-static int parser_action_row969[] = {
+static int parser_action_row1127[] = {
        1,
-       -1, 1, 540
+       -1, 1, 1111
 };
-static int parser_action_row970[] = {
+static int parser_action_row1128[] = {
        1,
-       -1, 1, 542
+       -1, 1, 890
 };
-static int parser_action_row971[] = {
-       10,
-       -1, 1, 258,
-       8, 0, 771,
-       9, 0, 1135,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       42, 0, 776
+static int parser_action_row1129[] = {
+       3,
+       -1, 1, 850,
+       53, 0, 239,
+       63, 0, 1359
 };
-static int parser_action_row972[] = {
+static int parser_action_row1130[] = {
        3,
-       -1, 1, 531,
+       -1, 3, 1129,
+       0, 0, 87,
+       1, 0, 88
+};
+static int parser_action_row1131[] = {
+       2,
+       -1, 1, 887,
+       55, 0, 847
+};
+static int parser_action_row1132[] = {
+       1,
+       -1, 1, 891
+};
+static int parser_action_row1133[] = {
+       1,
+       -1, 1, 89
+};
+static int parser_action_row1134[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1363,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1135[] = {
+       1,
+       -1, 1, 105
+};
+static int parser_action_row1136[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1364,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
+};
+static int parser_action_row1137[] = {
+       3,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row973[] = {
+static int parser_action_row1138[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row974[] = {
+static int parser_action_row1139[] = {
        1,
-       -1, 1, 74
+       -1, 1, 77
 };
-static int parser_action_row975[] = {
-       10,
-       -1, 1, 258,
-       8, 0, 771,
-       9, 0, 1139,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       42, 0, 776
+static int parser_action_row1140[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1368,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
 };
-static int parser_action_row976[] = {
+static int parser_action_row1141[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row977[] = {
+static int parser_action_row1142[] = {
        8,
-       -1, 1, 258,
-       9, 0, 1141,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       8, 0, 1370,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row978[] = {
+static int parser_action_row1143[] = {
+       4,
+       -1, 3, 1142,
+       32, 0, 1371,
+       47, 0, 390,
+       80, 0, 391
+};
+static int parser_action_row1144[] = {
        1,
-       -1, 1, 76
+       -1, 1, 486
 };
-static int parser_action_row979[] = {
-       10,
-       -1, 1, 258,
-       8, 0, 771,
-       9, 0, 1142,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       42, 0, 776
+static int parser_action_row1145[] = {
+       1,
+       -1, 1, 491
 };
-static int parser_action_row980[] = {
+static int parser_action_row1146[] = {
+       36,
+       -1, 3, 1145,
+       11, 0, 170,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 171,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       32, 0, 172,
+       33, 0, 683,
+       34, 0, 684,
+       35, 0, 685,
+       36, 0, 686,
+       37, 0, 44,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       47, 0, 390,
+       48, 0, 176,
+       50, 0, 687,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       79, 0, 205,
+       80, 0, 688,
+       81, 0, 689,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1147[] = {
        3,
-       -1, 1, 531,
+       -1, 3, 1146,
+       0, 0, 87,
+       1, 0, 88
+};
+static int parser_action_row1148[] = {
+       1,
+       -1, 1, 612
+};
+static int parser_action_row1149[] = {
+       3,
+       -1, 3, 1148,
+       0, 0, 87,
+       1, 0, 88
+};
+static int parser_action_row1150[] = {
+       3,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row981[] = {
-       8,
-       -1, 1, 258,
-       9, 0, 1144,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
-};
-static int parser_action_row982[] = {
+static int parser_action_row1151[] = {
        1,
-       -1, 1, 80
+       -1, 1, 863
 };
-static int parser_action_row983[] = {
-       8,
-       -1, 1, 258,
-       9, 0, 1145,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+static int parser_action_row1152[] = {
+       4,
+       -1, 3, 1151,
+       32, 0, 1377,
+       47, 0, 390,
+       80, 0, 391
 };
-static int parser_action_row984[] = {
-       1,
-       -1, 1, 88
+static int parser_action_row1153[] = {
+       4,
+       -1, 1, 677,
+       3, 0, 722,
+       29, 0, 39,
+       92, 0, 62
 };
-static int parser_action_row985[] = {
+static int parser_action_row1154[] = {
        3,
-       -1, 1, 337,
-       26, 1, 630,
-       50, 1, 708
+       -1, 1, 679,
+       29, 0, 39,
+       92, 0, 62
 };
-static int parser_action_row986[] = {
-       3,
-       -1, 1, 336,
-       26, 1, 629,
-       50, 1, 707
+static int parser_action_row1155[] = {
+       1,
+       -1, 1, 683
 };
-static int parser_action_row987[] = {
+static int parser_action_row1156[] = {
+       1,
+       -1, 1, 667
+};
+static int parser_action_row1157[] = {
        2,
-       -1, 1, 412,
-       26, 1, 687
+       -1, 1, 665,
+       8, 0, 1382
 };
-static int parser_action_row988[] = {
+static int parser_action_row1158[] = {
+       1,
+       -1, 1, 671
+};
+static int parser_action_row1159[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1383,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
+};
+static int parser_action_row1160[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row989[] = {
+static int parser_action_row1161[] = {
        3,
-       -1, 1, 397,
-       26, 1, 674,
-       59, 0, 1147
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row990[] = {
+static int parser_action_row1162[] = {
+       1,
+       -1, 1, 76
+};
+static int parser_action_row1163[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1387,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
+};
+static int parser_action_row1164[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row991[] = {
+static int parser_action_row1165[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1389,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1166[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row992[] = {
-       2,
-       -1, 1, 421,
-       26, 1, 690
-};
-static int parser_action_row993[] = {
-       2,
-       -1, 3, 992,
-       81, 0, 319
+static int parser_action_row1167[] = {
+       11,
+       -1, 1, 331,
+       3, 0, 890,
+       8, 0, 1393,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895,
+       81, 0, 896
 };
-static int parser_action_row994[] = {
+static int parser_action_row1168[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row995[] = {
-       1,
-       -1, 1, 645
+static int parser_action_row1169[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row996[] = {
+static int parser_action_row1170[] = {
        1,
-       -1, 1, 640
+       -1, 1, 82
 };
-static int parser_action_row997[] = {
-       2,
-       -1, 3, 996,
-       26, 0, 1152
+static int parser_action_row1171[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1397,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
 };
-static int parser_action_row998[] = {
-       33,
-       -1, 3, 997,
+static int parser_action_row1172[] = {
+       3,
+       -1, 1, 656,
        0, 0, 1,
-       1, 0, 2,
-       9, 0, 1153,
-       12, 0, 689,
-       15, 0, 690,
-       18, 0, 691,
-       24, 0, 692,
-       27, 0, 694,
-       28, 0, 695,
-       29, 0, 696,
-       34, 0, 697,
-       35, 0, 698,
-       36, 0, 699,
-       37, 0, 700,
-       38, 0, 701,
-       39, 0, 45,
-       42, 0, 702,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 703,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 704,
-       82, 0, 705,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row999[] = {
-       2,
-       -1, 3, 998,
-       57, 0, 1156
-};
-static int parser_action_row1000[] = {
-       23,
-       -1, 3, 999,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
-       82, 0, 179,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
+       1, 0, 2
 };
-static int parser_action_row1001[] = {
-       23,
-       -1, 3, 1000,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
-       82, 0, 179,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
+static int parser_action_row1173[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1399,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row1002[] = {
+static int parser_action_row1174[] = {
        1,
-       -1, 1, 655
+       -1, 1, 90
 };
-static int parser_action_row1003[] = {
-       1,
-       -1, 1, 678
+static int parser_action_row1175[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1400,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row1004[] = {
+static int parser_action_row1176[] = {
        1,
-       -1, 1, 683
+       -1, 1, 106
 };
-static int parser_action_row1005[] = {
-       5,
-       -1, 3, 1004,
-       12, 0, 1159,
-       47, 0, 533,
-       81, 0, 1160,
-       82, 0, 1161
+static int parser_action_row1177[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1401,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
 };
-static int parser_action_row1006[] = {
+static int parser_action_row1178[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1179[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1180[] = {
+       1,
+       -1, 1, 78
+};
+static int parser_action_row1181[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1405,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
+};
+static int parser_action_row1182[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1183[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1407,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1184[] = {
+       3,
+       -1, 1, 417,
+       25, 1, 960,
+       49, 1, 1086
+};
+static int parser_action_row1185[] = {
+       3,
+       -1, 1, 416,
+       25, 1, 959,
+       49, 1, 1085
+};
+static int parser_action_row1186[] = {
+       2,
+       -1, 1, 496,
+       25, 1, 1021
+};
+static int parser_action_row1187[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1188[] = {
+       3,
+       -1, 1, 478,
+       25, 1, 1005,
+       58, 0, 1409
+};
+static int parser_action_row1189[] = {
+       4,
+       -1, 1, 477,
+       25, 1, 1004,
+       56, 0, 330,
+       58, 0, 1410
+};
+static int parser_action_row1190[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1191[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1192[] = {
+       2,
+       -1, 1, 505,
+       25, 1, 1024
+};
+static int parser_action_row1193[] = {
+       2,
+       -1, 3, 1192,
+       81, 0, 338
+};
+static int parser_action_row1194[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1195[] = {
+       1,
+       -1, 1, 975
+};
+static int parser_action_row1196[] = {
+       1,
+       -1, 1, 970
+};
+static int parser_action_row1197[] = {
+       2,
+       -1, 3, 1196,
+       25, 0, 1416
+};
+static int parser_action_row1198[] = {
+       33,
+       -1, 3, 1197,
+       0, 0, 1,
+       1, 0, 2,
+       8, 0, 1417,
+       11, 0, 786,
+       14, 0, 787,
+       17, 0, 788,
+       23, 0, 789,
+       26, 0, 791,
+       27, 0, 792,
+       28, 0, 793,
+       33, 0, 794,
+       34, 0, 795,
+       35, 0, 796,
+       36, 0, 797,
+       37, 0, 798,
+       38, 0, 45,
+       41, 0, 799,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 800,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 801,
+       82, 0, 802,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1199[] = {
+       2,
+       -1, 3, 1198,
+       56, 0, 1420
+};
+static int parser_action_row1200[] = {
        23,
-       -1, 3, 1005,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
+       -1, 3, 1199,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1007[] = {
+static int parser_action_row1201[] = {
        23,
-       -1, 3, 1006,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
+       -1, 3, 1200,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1008[] = {
+static int parser_action_row1202[] = {
+       1,
+       -1, 1, 985
+};
+static int parser_action_row1203[] = {
+       1,
+       -1, 1, 1012
+};
+static int parser_action_row1204[] = {
+       1,
+       -1, 1, 1017
+};
+static int parser_action_row1205[] = {
+       5,
+       -1, 3, 1204,
+       11, 0, 1423,
+       46, 0, 577,
+       81, 0, 1424,
+       82, 0, 1425
+};
+static int parser_action_row1206[] = {
+       23,
+       -1, 3, 1205,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1207[] = {
+       23,
+       -1, 3, 1206,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1208[] = {
        2,
-       -1, 1, 371,
-       26, 1, 657
+       -1, 1, 451,
+       25, 1, 987
 };
-static int parser_action_row1009[] = {
+static int parser_action_row1209[] = {
        1,
-       -1, 1, 416
+       -1, 1, 500
 };
-static int parser_action_row1010[] = {
+static int parser_action_row1210[] = {
        3,
-       -1, 3, 1009,
+       -1, 3, 1209,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1011[] = {
+static int parser_action_row1211[] = {
        1,
-       -1, 1, 414
+       -1, 1, 498
 };
-static int parser_action_row1012[] = {
+static int parser_action_row1212[] = {
        23,
-       -1, 3, 1011,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1211,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1013[] = {
+static int parser_action_row1213[] = {
        2,
-       -1, 3, 1012,
-       15, 0, 1165
+       -1, 3, 1212,
+       14, 0, 1429
 };
-static int parser_action_row1014[] = {
+static int parser_action_row1214[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1015[] = {
+static int parser_action_row1215[] = {
        2,
-       -1, 1, 378,
-       26, 1, 663
+       -1, 1, 458,
+       25, 1, 993
 };
-static int parser_action_row1016[] = {
+static int parser_action_row1216[] = {
        3,
-       -1, 3, 1015,
-       15, 0, 1167,
-       59, 0, 1168
+       -1, 3, 1215,
+       14, 0, 1431,
+       58, 0, 1432
 };
-static int parser_action_row1017[] = {
+static int parser_action_row1217[] = {
        1,
-       -1, 1, 669
+       -1, 1, 999
 };
-static int parser_action_row1018[] = {
+static int parser_action_row1218[] = {
        1,
-       -1, 1, 672
+       -1, 1, 1002
 };
-static int parser_action_row1019[] = {
+static int parser_action_row1219[] = {
        31,
-       -1, 1, 392,
-       9, 0, 984,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       -1, 1, 472,
+       8, 0, 1183,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -10717,352 +12879,430 @@ static int parser_action_row1019[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1020[] = {
+static int parser_action_row1220[] = {
        1,
-       -1, 1, 668
+       -1, 1, 998
 };
-static int parser_action_row1021[] = {
+static int parser_action_row1221[] = {
        2,
-       -1, 3, 1020,
-       50, 0, 191
+       -1, 3, 1220,
+       49, 0, 191
 };
-static int parser_action_row1022[] = {
+static int parser_action_row1222[] = {
        23,
-       -1, 3, 1021,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
+       -1, 3, 1221,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1023[] = {
+static int parser_action_row1223[] = {
        2,
-       -1, 3, 1022,
-       55, 0, 1171
+       -1, 3, 1222,
+       54, 0, 1435
 };
-static int parser_action_row1024[] = {
+static int parser_action_row1224[] = {
        3,
-       -1, 3, 1023,
-       48, 0, 361,
-       80, 0, 362
+       -1, 3, 1223,
+       47, 0, 390,
+       80, 0, 391
 };
-static int parser_action_row1025[] = {
+static int parser_action_row1225[] = {
        1,
-       -1, 1, 853
+       -1, 1, 1271
 };
-static int parser_action_row1026[] = {
+static int parser_action_row1226[] = {
+       2,
+       -1, 1, 775,
+       79, 0, 545
+};
+static int parser_action_row1227[] = {
+       23,
+       -1, 3, 1226,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1228[] = {
+       2,
+       -1, 1, 631,
+       51, 0, 282
+};
+static int parser_action_row1229[] = {
        1,
-       -1, 1, 330
+       -1, 1, 620
 };
-static int parser_action_row1027[] = {
+static int parser_action_row1230[] = {
+       2,
+       -1, 3, 1229,
+       54, 0, 1439
+};
+static int parser_action_row1231[] = {
+       2,
+       -1, 1, 408,
+       79, 0, 205
+};
+static int parser_action_row1232[] = {
        1,
-       -1, 1, 514
+       -1, 1, 639
 };
-static int parser_action_row1028[] = {
+static int parser_action_row1233[] = {
        1,
-       -1, 1, 615
+       -1, 1, 748
 };
-static int parser_action_row1029[] = {
+static int parser_action_row1234[] = {
        23,
-       -1, 3, 1028,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1233,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1030[] = {
+static int parser_action_row1235[] = {
        21,
-       -1, 3, 1029,
-       12, 0, 863,
-       33, 0, 865,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+       -1, 3, 1234,
+       11, 0, 1010,
+       32, 0, 1012,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
 };
-static int parser_action_row1031[] = {
+static int parser_action_row1236[] = {
        3,
-       -1, 3, 1030,
-       48, 0, 1175,
-       80, 0, 1176
+       -1, 3, 1235,
+       47, 0, 1443,
+       80, 0, 1444
 };
-static int parser_action_row1032[] = {
+static int parser_action_row1237[] = {
        20,
-       -1, 3, 1031,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+       -1, 3, 1236,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
 };
-static int parser_action_row1033[] = {
+static int parser_action_row1238[] = {
        1,
-       -1, 1, 612
+       -1, 1, 745
 };
-static int parser_action_row1034[] = {
+static int parser_action_row1239[] = {
+       1,
+       -1, 1, 751
+};
+static int parser_action_row1240[] = {
+       1,
+       -1, 1, 753
+};
+static int parser_action_row1241[] = {
+       1,
+       -1, 1, 755
+};
+static int parser_action_row1242[] = {
+       1,
+       -1, 1, 757
+};
+static int parser_action_row1243[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1035[] = {
+static int parser_action_row1244[] = {
        2,
-       -1, 1, 607,
-       64, 1, 609
+       -1, 1, 740,
+       63, 1, 742
 };
-static int parser_action_row1036[] = {
+static int parser_action_row1245[] = {
        2,
-       -1, 3, 1035,
-       64, 0, 1180
+       -1, 3, 1244,
+       63, 0, 1448
 };
-static int parser_action_row1037[] = {
+static int parser_action_row1246[] = {
        2,
-       -1, 3, 1036,
-       53, 0, 1181
+       -1, 3, 1245,
+       52, 0, 1449
 };
-static int parser_action_row1038[] = {
+static int parser_action_row1247[] = {
        20,
-       -1, 3, 1037,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+       -1, 3, 1246,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
 };
-static int parser_action_row1039[] = {
+static int parser_action_row1248[] = {
+       1,
+       -1, 1, 744
+};
+static int parser_action_row1249[] = {
        1,
-       -1, 1, 611
+       -1, 1, 759
 };
-static int parser_action_row1040[] = {
+static int parser_action_row1250[] = {
+       1,
+       -1, 1, 761
+};
+static int parser_action_row1251[] = {
+       1,
+       -1, 1, 765
+};
+static int parser_action_row1252[] = {
+       1,
+       -1, 1, 763
+};
+static int parser_action_row1253[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 1, 631,
+       51, 0, 282
 };
-static int parser_action_row1041[] = {
+static int parser_action_row1254[] = {
        3,
-       -1, 3, 1040,
-       54, 0, 1184,
-       55, 0, 1185
+       -1, 3, 1253,
+       53, 0, 1452,
+       54, 0, 1453
 };
-static int parser_action_row1042[] = {
+static int parser_action_row1255[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1043[] = {
+static int parser_action_row1256[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       26, 0, 1187
+       25, 0, 1455
 };
-static int parser_action_row1044[] = {
+static int parser_action_row1257[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1045[] = {
+static int parser_action_row1258[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1046[] = {
+static int parser_action_row1259[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1047[] = {
+static int parser_action_row1260[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1048[] = {
+static int parser_action_row1261[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1049[] = {
+static int parser_action_row1262[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1050[] = {
+static int parser_action_row1263[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1051[] = {
+static int parser_action_row1264[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1052[] = {
+static int parser_action_row1265[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1053[] = {
+static int parser_action_row1266[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1054[] = {
+static int parser_action_row1267[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1055[] = {
+static int parser_action_row1268[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1056[] = {
+static int parser_action_row1269[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1057[] = {
+static int parser_action_row1270[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1058[] = {
+static int parser_action_row1271[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1059[] = {
+static int parser_action_row1272[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1060[] = {
+static int parser_action_row1273[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1061[] = {
+static int parser_action_row1274[] = {
        31,
-       -1, 1, 342,
-       9, 0, 579,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       -1, 1, 422,
+       8, 0, 628,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -11070,41 +13310,41 @@ static int parser_action_row1061[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1062[] = {
+static int parser_action_row1275[] = {
        3,
-       -1, 3, 1061,
+       -1, 3, 1274,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1063[] = {
+static int parser_action_row1276[] = {
        33,
-       -1, 3, 1062,
+       -1, 3, 1275,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 155,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 155,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -11112,162 +13352,171 @@ static int parser_action_row1063[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1064[] = {
+static int parser_action_row1277[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1065[] = {
+static int parser_action_row1278[] = {
        1,
-       -1, 1, 389
+       -1, 1, 469
 };
-static int parser_action_row1066[] = {
+static int parser_action_row1279[] = {
        1,
-       -1, 1, 380
+       -1, 1, 460
 };
-static int parser_action_row1067[] = {
+static int parser_action_row1280[] = {
        1,
-       -1, 1, 386
+       -1, 1, 466
 };
-static int parser_action_row1068[] = {
+static int parser_action_row1281[] = {
        4,
-       -1, 1, 280,
-       36, 0, 644,
-       59, 1, 563,
-       79, 0, 645
+       -1, 1, 353,
+       35, 0, 730,
+       58, 1, 694,
+       78, 0, 731
 };
-static int parser_action_row1069[] = {
+static int parser_action_row1282[] = {
        1,
-       -1, 1, 286
+       -1, 1, 359
 };
-static int parser_action_row1070[] = {
+static int parser_action_row1283[] = {
        1,
-       -1, 1, 303
+       -1, 1, 378
 };
-static int parser_action_row1071[] = {
+static int parser_action_row1284[] = {
+       2,
+       -1, 1, 377,
+       61, 0, 1480
+};
+static int parser_action_row1285[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1072[] = {
+static int parser_action_row1286[] = {
        3,
-       -1, 1, 285,
-       36, 0, 644,
-       79, 0, 645
+       -1, 1, 358,
+       35, 0, 730,
+       78, 0, 731
 };
-static int parser_action_row1073[] = {
+static int parser_action_row1287[] = {
        2,
-       -1, 3, 1072,
-       81, 0, 750
+       -1, 3, 1286,
+       81, 0, 865
 };
-static int parser_action_row1074[] = {
+static int parser_action_row1288[] = {
        1,
-       -1, 1, 847
+       -1, 1, 1265
 };
-static int parser_action_row1075[] = {
+static int parser_action_row1289[] = {
        1,
-       -1, 1, 299
+       -1, 1, 372
 };
-static int parser_action_row1076[] = {
+static int parser_action_row1290[] = {
        17,
-       -1, 3, 1075,
-       54, 0, 383,
-       65, 0, 384,
-       66, 0, 385,
-       67, 0, 386,
-       68, 0, 387,
-       69, 0, 388,
-       70, 0, 389,
-       71, 0, 390,
-       72, 0, 391,
-       73, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       81, 0, 398
+       -1, 3, 1289,
+       53, 0, 411,
+       64, 0, 412,
+       65, 0, 413,
+       66, 0, 414,
+       67, 0, 415,
+       68, 0, 416,
+       69, 0, 417,
+       70, 0, 418,
+       71, 0, 419,
+       72, 0, 420,
+       73, 0, 421,
+       74, 0, 422,
+       75, 0, 423,
+       76, 0, 424,
+       77, 0, 425,
+       81, 0, 426
 };
-static int parser_action_row1077[] = {
+static int parser_action_row1291[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1078[] = {
+static int parser_action_row1292[] = {
        1,
-       -1, 1, 850
+       -1, 1, 1268
 };
-static int parser_action_row1079[] = {
+static int parser_action_row1293[] = {
        2,
-       -1, 1, 313,
-       56, 0, 1076
+       -1, 1, 389,
+       55, 0, 1290
 };
-static int parser_action_row1080[] = {
+static int parser_action_row1294[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1081[] = {
+static int parser_action_row1295[] = {
        3,
-       -1, 1, 549,
-       30, 0, 39,
+       -1, 1, 680,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1082[] = {
+static int parser_action_row1296[] = {
        1,
-       -1, 1, 553
+       -1, 1, 684
 };
-static int parser_action_row1083[] = {
+static int parser_action_row1297[] = {
        1,
-       -1, 1, 555
+       -1, 1, 686
 };
-static int parser_action_row1084[] = {
+static int parser_action_row1298[] = {
+       1,
+       -1, 1, 668
+};
+static int parser_action_row1299[] = {
        5,
-       -1, 3, 1083,
+       -1, 3, 1298,
        0, 0, 1,
        1, 0, 2,
-       15, 0, 1220,
-       59, 0, 1221
+       14, 0, 1489,
+       58, 0, 1490
 };
-static int parser_action_row1085[] = {
+static int parser_action_row1300[] = {
        3,
-       -1, 3, 1084,
-       53, 0, 1223,
-       81, 0, 750
+       -1, 3, 1299,
+       52, 0, 1492,
+       81, 0, 865
 };
-static int parser_action_row1086[] = {
+static int parser_action_row1301[] = {
        33,
-       -1, 3, 1085,
+       -1, 3, 1300,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 506,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -11275,703 +13524,2888 @@ static int parser_action_row1086[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1087[] = {
+static int parser_action_row1302[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1088[] = {
+static int parser_action_row1303[] = {
        1,
-       -1, 1, 305
+       -1, 1, 381
 };
-static int parser_action_row1089[] = {
+static int parser_action_row1304[] = {
        1,
-       -1, 1, 112
+       -1, 1, 148
 };
-static int parser_action_row1090[] = {
+static int parser_action_row1305[] = {
+       2,
+       -1, 1, 147,
+       56, 0, 330
+};
+static int parser_action_row1306[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1091[] = {
+static int parser_action_row1307[] = {
        1,
-       -1, 1, 844
+       -1, 1, 1262
 };
-static int parser_action_row1092[] = {
+static int parser_action_row1308[] = {
        2,
-       -1, 3, 1091,
-       55, 0, 1228
+       -1, 3, 1307,
+       54, 0, 1498
 };
-static int parser_action_row1093[] = {
+static int parser_action_row1309[] = {
        4,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       56, 0, 1089
+       55, 0, 1305
 };
-static int parser_action_row1094[] = {
+static int parser_action_row1310[] = {
        1,
-       -1, 1, 77
+       -1, 1, 83
 };
-static int parser_action_row1095[] = {
-       10,
-       -1, 1, 258,
-       8, 0, 771,
-       9, 0, 1231,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       42, 0, 776
+static int parser_action_row1311[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1501,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
 };
-static int parser_action_row1096[] = {
+static int parser_action_row1312[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1097[] = {
+static int parser_action_row1313[] = {
        8,
-       -1, 1, 258,
-       9, 0, 1233,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       8, 0, 1503,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row1098[] = {
+static int parser_action_row1314[] = {
        1,
-       -1, 1, 81
+       -1, 1, 91
 };
-static int parser_action_row1099[] = {
+static int parser_action_row1315[] = {
        8,
-       -1, 1, 258,
-       9, 0, 1234,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       8, 0, 1504,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row1100[] = {
+static int parser_action_row1316[] = {
        1,
-       -1, 1, 89
+       -1, 1, 107
 };
-static int parser_action_row1101[] = {
-       1,
-       -1, 1, 83
+static int parser_action_row1317[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1505,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
 };
-static int parser_action_row1102[] = {
-       8,
-       -1, 1, 258,
-       9, 0, 1235,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+static int parser_action_row1318[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row1103[] = {
-       1,
-       -1, 1, 91
+static int parser_action_row1319[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row1104[] = {
+static int parser_action_row1320[] = {
        1,
-       -1, 1, 113
-};
-static int parser_action_row1105[] = {
-       17,
-       -1, 3, 1104,
-       54, 0, 383,
-       65, 0, 384,
-       66, 0, 385,
-       67, 0, 386,
-       68, 0, 387,
-       69, 0, 388,
-       70, 0, 389,
-       71, 0, 390,
-       72, 0, 391,
-       73, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       81, 0, 398
+       -1, 1, 79
 };
-static int parser_action_row1106[] = {
-       2,
-       -1, 3, 1105,
-       80, 0, 1237
+static int parser_action_row1321[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1509,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
 };
-static int parser_action_row1107[] = {
+static int parser_action_row1322[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1323[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1511,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1324[] = {
+       1,
+       -1, 1, 97
+};
+static int parser_action_row1325[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1512,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1326[] = {
+       1,
+       -1, 1, 113
+};
+static int parser_action_row1327[] = {
+       17,
+       -1, 3, 1326,
+       53, 0, 411,
+       64, 0, 412,
+       65, 0, 413,
+       66, 0, 414,
+       67, 0, 415,
+       68, 0, 416,
+       69, 0, 417,
+       70, 0, 418,
+       71, 0, 419,
+       72, 0, 420,
+       73, 0, 421,
+       74, 0, 422,
+       75, 0, 423,
+       76, 0, 424,
+       77, 0, 425,
+       81, 0, 426
+};
+static int parser_action_row1328[] = {
+       2,
+       -1, 3, 1327,
+       80, 0, 1514
+};
+static int parser_action_row1329[] = {
        21,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       52, 0, 1118,
-       54, 0, 383,
-       57, 0, 312,
-       65, 0, 384,
-       66, 0, 385,
-       67, 0, 386,
-       68, 0, 387,
-       69, 0, 388,
-       70, 0, 389,
-       71, 0, 390,
-       72, 0, 391,
-       73, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       81, 0, 398
+       51, 0, 1340,
+       53, 0, 411,
+       56, 0, 330,
+       64, 0, 412,
+       65, 0, 413,
+       66, 0, 414,
+       67, 0, 415,
+       68, 0, 416,
+       69, 0, 417,
+       70, 0, 418,
+       71, 0, 419,
+       72, 0, 420,
+       73, 0, 421,
+       74, 0, 422,
+       75, 0, 423,
+       76, 0, 424,
+       77, 0, 425,
+       81, 0, 426
 };
-static int parser_action_row1108[] = {
+static int parser_action_row1330[] = {
        3,
-       -1, 3, 1107,
-       81, 0, 1240,
-       82, 0, 1241
+       -1, 3, 1329,
+       81, 0, 1517,
+       82, 0, 1518
 };
-static int parser_action_row1109[] = {
+static int parser_action_row1331[] = {
        21,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       52, 0, 1118,
-       54, 0, 383,
-       57, 0, 312,
-       65, 0, 384,
-       66, 0, 385,
-       67, 0, 386,
-       68, 0, 387,
-       69, 0, 388,
-       70, 0, 389,
-       71, 0, 390,
-       72, 0, 391,
-       73, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       81, 0, 398
+       51, 0, 1340,
+       53, 0, 411,
+       56, 0, 330,
+       64, 0, 412,
+       65, 0, 413,
+       66, 0, 414,
+       67, 0, 415,
+       68, 0, 416,
+       69, 0, 417,
+       70, 0, 418,
+       71, 0, 419,
+       72, 0, 420,
+       73, 0, 421,
+       74, 0, 422,
+       75, 0, 423,
+       76, 0, 424,
+       77, 0, 425,
+       81, 0, 426
 };
-static int parser_action_row1110[] = {
-       1,
-       -1, 1, 114
+static int parser_action_row1332[] = {
+       2,
+       -1, 1, 150,
+       13, 0, 456
 };
-static int parser_action_row1111[] = {
+static int parser_action_row1333[] = {
        2,
-       -1, 3, 1110,
-       18, 0, 1244
+       -1, 3, 1332,
+       17, 0, 1522
 };
-static int parser_action_row1112[] = {
+static int parser_action_row1334[] = {
        4,
-       -1, 1, 258,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row1113[] = {
+static int parser_action_row1335[] = {
        2,
-       -1, 3, 1112,
-       18, 0, 1246
+       -1, 3, 1334,
+       17, 0, 1524
 };
-static int parser_action_row1114[] = {
+static int parser_action_row1336[] = {
        2,
-       -1, 3, 1113,
-       82, 0, 1247
+       -1, 3, 1335,
+       82, 0, 1525
 };
-static int parser_action_row1115[] = {
+static int parser_action_row1337[] = {
        2,
-       -1, 3, 1114,
-       18, 0, 1248
+       -1, 3, 1336,
+       17, 0, 1526
 };
-static int parser_action_row1116[] = {
+static int parser_action_row1338[] = {
        2,
-       -1, 3, 1115,
-       82, 0, 1249
+       -1, 3, 1337,
+       82, 0, 1527
 };
-static int parser_action_row1117[] = {
+static int parser_action_row1339[] = {
        5,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       52, 0, 526,
-       57, 0, 312
+       51, 0, 570,
+       56, 0, 330
 };
-static int parser_action_row1118[] = {
+static int parser_action_row1340[] = {
        2,
-       -1, 3, 1117,
-       57, 0, 312
+       -1, 3, 1339,
+       56, 0, 330
 };
-static int parser_action_row1119[] = {
+static int parser_action_row1341[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1120[] = {
+static int parser_action_row1342[] = {
        5,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2,
-       52, 0, 1118,
-       57, 0, 312
+       51, 0, 1340,
+       56, 0, 330
 };
-static int parser_action_row1121[] = {
+static int parser_action_row1343[] = {
+       3,
+       -1, 3, 1342,
+       13, 0, 1533,
+       14, 0, 1534
+};
+static int parser_action_row1344[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1345[] = {
+       9,
+       -1, 1, 221,
+       12, 0, 1537,
+       13, 0, 456,
+       16, 1, 331,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       56, 0, 330,
+       58, 0, 1538
+};
+static int parser_action_row1346[] = {
+       3,
+       -1, 1, 189,
+       56, 0, 330,
+       58, 0, 1543
+};
+static int parser_action_row1347[] = {
+       5,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       51, 0, 1340,
+       56, 0, 330
+};
+static int parser_action_row1348[] = {
+       6,
+       -1, 3, 1347,
+       3, 0, 722,
+       13, 0, 1546,
+       29, 0, 39,
+       85, 0, 1547,
+       92, 0, 62
+};
+static int parser_action_row1349[] = {
+       1,
+       -1, 1, 1113
+};
+static int parser_action_row1350[] = {
+       23,
+       -1, 1, 1120,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1351[] = {
+       1,
+       -1, 1, 1121
+};
+static int parser_action_row1352[] = {
+       23,
+       -1, 1, 1115,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1353[] = {
+       1,
+       -1, 1, 1116
+};
+static int parser_action_row1354[] = {
+       3,
+       -1, 3, 1353,
+       47, 0, 390,
+       80, 0, 391
+};
+static int parser_action_row1355[] = {
        2,
-       -1, 3, 1120,
-       15, 0, 1255
+       -1, 3, 1354,
+       52, 0, 1553
 };
-static int parser_action_row1122[] = {
+static int parser_action_row1356[] = {
+       4,
+       -1, 1, 857,
+       58, 0, 1554,
+       59, 0, 220,
+       60, 0, 221
+};
+static int parser_action_row1357[] = {
+       23,
+       -1, 3, 1356,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1358[] = {
+       23,
+       -1, 3, 1357,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1359[] = {
+       1,
+       -1, 1, 1244
+};
+static int parser_action_row1360[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1361[] = {
+       4,
+       -1, 1, 862,
+       58, 0, 1559,
+       59, 0, 220,
+       60, 0, 221
+};
+static int parser_action_row1362[] = {
+       1,
+       -1, 1, 1247
+};
+static int parser_action_row1363[] = {
+       2,
+       -1, 1, 888,
+       55, 0, 847
+};
+static int parser_action_row1364[] = {
+       1,
+       -1, 1, 121
+};
+static int parser_action_row1365[] = {
+       1,
+       -1, 1, 85
+};
+static int parser_action_row1366[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1561,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
+};
+static int parser_action_row1367[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1368[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1563,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1369[] = {
+       1,
+       -1, 1, 93
+};
+static int parser_action_row1370[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1564,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1371[] = {
+       1,
+       -1, 1, 109
+};
+static int parser_action_row1372[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1373[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1374[] = {
+       2,
+       -1, 3, 1373,
+       52, 0, 1567
+};
+static int parser_action_row1375[] = {
+       1,
+       -1, 1, 613
+};
+static int parser_action_row1376[] = {
+       1,
+       -1, 1, 616
+};
+static int parser_action_row1377[] = {
+       2,
+       -1, 3, 1376,
+       25, 0, 1568
+};
+static int parser_action_row1378[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1379[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1380[] = {
+       3,
+       -1, 1, 681,
+       29, 0, 39,
+       92, 0, 62
+};
+static int parser_action_row1381[] = {
+       1,
+       -1, 1, 685
+};
+static int parser_action_row1382[] = {
+       1,
+       -1, 1, 687
+};
+static int parser_action_row1383[] = {
+       1,
+       -1, 1, 669
+};
+static int parser_action_row1384[] = {
+       1,
+       -1, 1, 84
+};
+static int parser_action_row1385[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1572,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
+};
+static int parser_action_row1386[] = {
+       3,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1123[] = {
+static int parser_action_row1387[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1574,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1388[] = {
+       1,
+       -1, 1, 92
+};
+static int parser_action_row1389[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1575,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1390[] = {
+       1,
+       -1, 1, 108
+};
+static int parser_action_row1391[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1576,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
+};
+static int parser_action_row1392[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1393[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1394[] = {
+       1,
+       -1, 1, 80
+};
+static int parser_action_row1395[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1580,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
+};
+static int parser_action_row1396[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1397[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1582,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1398[] = {
+       1,
+       -1, 1, 98
+};
+static int parser_action_row1399[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1583,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1400[] = {
+       1,
+       -1, 1, 114
+};
+static int parser_action_row1401[] = {
+       1,
+       -1, 1, 122
+};
+static int parser_action_row1402[] = {
+       1,
+       -1, 1, 86
+};
+static int parser_action_row1403[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1584,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
+};
+static int parser_action_row1404[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1405[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1586,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1406[] = {
+       1,
+       -1, 1, 94
+};
+static int parser_action_row1407[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1587,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1408[] = {
+       1,
+       -1, 1, 110
+};
+static int parser_action_row1409[] = {
+       23,
+       -1, 3, 1408,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1410[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1411[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1412[] = {
+       3,
+       -1, 1, 479,
+       25, 1, 1006,
+       58, 0, 1591
+};
+static int parser_action_row1413[] = {
+       2,
+       -1, 3, 1412,
+       24, 0, 1592
+};
+static int parser_action_row1414[] = {
+       2,
+       -1, 3, 1413,
+       14, 0, 1593
+};
+static int parser_action_row1415[] = {
+       4,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       52, 0, 1594
+};
+static int parser_action_row1416[] = {
+       3,
+       -1, 3, 1415,
+       29, 0, 1595,
+       55, 0, 640
+};
+static int parser_action_row1417[] = {
+       33,
+       -1, 3, 1416,
+       0, 0, 1,
+       1, 0, 2,
+       8, 0, 1417,
+       11, 0, 786,
+       14, 0, 787,
+       17, 0, 788,
+       23, 0, 789,
+       26, 0, 791,
+       27, 0, 792,
+       28, 0, 793,
+       33, 0, 794,
+       34, 0, 795,
+       35, 0, 796,
+       36, 0, 797,
+       37, 0, 798,
+       38, 0, 45,
+       41, 0, 799,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 800,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 801,
+       82, 0, 802,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1418[] = {
+       2,
+       -1, 1, 418,
+       25, 1, 961
+};
+static int parser_action_row1419[] = {
+       31,
+       -1, 3, 1418,
+       8, 0, 1597,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 55,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1420[] = {
+       1,
+       -1, 1, 1032
+};
+static int parser_action_row1421[] = {
+       23,
+       -1, 3, 1420,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1422[] = {
+       1,
+       -1, 1, 1014
+};
+static int parser_action_row1423[] = {
+       1,
+       -1, 1, 1019
+};
+static int parser_action_row1424[] = {
+       24,
+       -1, 1, 635,
+       11, 0, 122,
+       23, 0, 123,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       51, 0, 133,
+       53, 1, 631,
+       63, 1, 631,
+       65, 0, 134,
+       80, 0, 54,
+       81, 0, 135,
+       82, 0, 136,
+       83, 0, 137,
+       84, 0, 138,
+       85, 0, 139,
+       86, 0, 60,
+       89, 0, 140
+};
+static int parser_action_row1425[] = {
+       27,
+       -1, 1, 635,
+       11, 0, 122,
+       23, 0, 123,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       51, 0, 133,
+       53, 1, 631,
+       58, 1, 631,
+       59, 1, 631,
+       60, 1, 631,
+       63, 1, 631,
+       65, 0, 134,
+       80, 0, 54,
+       81, 0, 135,
+       82, 0, 136,
+       83, 0, 137,
+       84, 0, 138,
+       85, 0, 139,
+       86, 0, 60,
+       89, 0, 140
+};
+static int parser_action_row1426[] = {
+       4,
+       -1, 1, 556,
+       58, 0, 1603,
+       59, 0, 220,
+       60, 0, 221
+};
+static int parser_action_row1427[] = {
+       1,
+       -1, 1, 1015
+};
+static int parser_action_row1428[] = {
+       1,
+       -1, 1, 1020
+};
+static int parser_action_row1429[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1430[] = {
+       33,
+       -1, 3, 1429,
+       0, 0, 1,
+       1, 0, 2,
+       8, 0, 155,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 55,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1431[] = {
+       2,
+       -1, 3, 1430,
+       25, 0, 1608
+};
+static int parser_action_row1432[] = {
+       33,
+       -1, 3, 1431,
+       0, 0, 1,
+       1, 0, 2,
+       8, 0, 946,
+       11, 0, 786,
+       14, 0, 787,
+       17, 0, 788,
+       23, 0, 789,
+       26, 0, 791,
+       27, 0, 792,
+       28, 0, 793,
+       33, 0, 794,
+       34, 0, 795,
+       35, 0, 796,
+       36, 0, 797,
+       37, 0, 798,
+       38, 0, 45,
+       41, 0, 799,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 800,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 801,
+       82, 0, 802,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1433[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1434[] = {
+       2,
+       -1, 1, 460,
+       25, 1, 995
+};
+static int parser_action_row1435[] = {
+       1,
+       -1, 1, 1001
+};
+static int parser_action_row1436[] = {
+       2,
+       -1, 1, 776,
+       79, 0, 545
+};
+static int parser_action_row1437[] = {
+       1,
+       -1, 1, 414
+};
+static int parser_action_row1438[] = {
+       1,
+       -1, 1, 777
+};
+static int parser_action_row1439[] = {
+       1,
+       -1, 1, 1109
+};
+static int parser_action_row1440[] = {
+       2,
+       -1, 1, 409,
+       79, 0, 205
+};
+static int parser_action_row1441[] = {
+       1,
+       -1, 1, 410
+};
+static int parser_action_row1442[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1443[] = {
+       1,
+       -1, 1, 714
+};
+static int parser_action_row1444[] = {
+       2,
+       -1, 3, 1443,
+       80, 0, 1616
+};
+static int parser_action_row1445[] = {
+       2,
+       -1, 1, 892,
+       79, 0, 545
+};
+static int parser_action_row1446[] = {
+       3,
+       -1, 1, 631,
+       51, 0, 282,
+       63, 0, 1618
+};
+static int parser_action_row1447[] = {
+       1,
+       -1, 1, 736
+};
+static int parser_action_row1448[] = {
+       3,
+       -1, 3, 1447,
+       47, 0, 1443,
+       80, 0, 1444
+};
+static int parser_action_row1449[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1450[] = {
+       2,
+       -1, 1, 767,
+       79, 0, 205
+};
+static int parser_action_row1451[] = {
+       1,
+       -1, 1, 735
+};
+static int parser_action_row1452[] = {
+       1,
+       -1, 1, 746
+};
+static int parser_action_row1453[] = {
+       2,
+       -1, 1, 568,
+       79, 0, 205
+};
+static int parser_action_row1454[] = {
+       2,
+       -1, 1, 566,
+       79, 0, 205
+};
+static int parser_action_row1455[] = {
+       21,
+       -1, 3, 1454,
+       11, 0, 1010,
+       32, 0, 1012,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1456[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1457[] = {
+       21,
+       -1, 3, 1456,
+       11, 0, 1010,
+       32, 0, 1012,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1458[] = {
+       20,
+       -1, 3, 1457,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1459[] = {
+       20,
+       -1, 3, 1458,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1460[] = {
+       20,
+       -1, 3, 1459,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1461[] = {
+       3,
+       -1, 3, 1460,
+       47, 0, 1631,
+       80, 0, 1632
+};
+static int parser_action_row1462[] = {
+       20,
+       -1, 3, 1461,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1463[] = {
+       20,
+       -1, 3, 1462,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1464[] = {
+       20,
+       -1, 3, 1463,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1465[] = {
+       20,
+       -1, 3, 1464,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1466[] = {
+       20,
+       -1, 3, 1465,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1467[] = {
+       20,
+       -1, 3, 1466,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1468[] = {
+       20,
+       -1, 3, 1467,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1469[] = {
+       20,
+       -1, 3, 1468,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1470[] = {
+       20,
+       -1, 3, 1469,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1471[] = {
+       20,
+       -1, 3, 1470,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1472[] = {
+       20,
+       -1, 3, 1471,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1473[] = {
+       20,
+       -1, 3, 1472,
+       11, 0, 1010,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
+};
+static int parser_action_row1474[] = {
+       5,
+       -1, 3, 1473,
+       11, 0, 1646,
+       46, 0, 1647,
+       81, 0, 1648,
+       82, 0, 1649
+};
+static int parser_action_row1475[] = {
+       31,
+       -1, 1, 423,
+       8, 0, 781,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 55,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1476[] = {
+       1,
+       -1, 1, 462
+};
+static int parser_action_row1477[] = {
+       31,
+       -1, 1, 471,
+       8, 0, 326,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 55,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1478[] = {
+       2,
+       -1, 3, 1477,
+       49, 0, 191
+};
+static int parser_action_row1479[] = {
+       23,
+       -1, 3, 1478,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1480[] = {
+       2,
+       -1, 1, 355,
+       58, 1, 696
+};
+static int parser_action_row1481[] = {
+       1,
+       -1, 1, 379
+};
+static int parser_action_row1482[] = {
+       4,
+       -1, 1, 354,
+       35, 0, 730,
+       58, 1, 695,
+       78, 0, 731
+};
+static int parser_action_row1483[] = {
+       1,
+       -1, 1, 360
+};
+static int parser_action_row1484[] = {
+       1,
+       -1, 1, 373
+};
+static int parser_action_row1485[] = {
+       1,
+       -1, 1, 395
+};
+static int parser_action_row1486[] = {
+       20,
+       -1, 3, 1485,
+       41, 0, 1059,
+       47, 0, 390,
+       53, 0, 411,
+       64, 0, 412,
+       65, 0, 413,
+       66, 0, 414,
+       67, 0, 415,
+       68, 0, 416,
+       69, 0, 417,
+       70, 0, 418,
+       71, 0, 419,
+       72, 0, 420,
+       73, 0, 421,
+       74, 0, 422,
+       75, 0, 423,
+       76, 0, 424,
+       77, 0, 425,
+       80, 0, 1060,
+       81, 0, 426
+};
+static int parser_action_row1487[] = {
+       1,
+       -1, 1, 1269
+};
+static int parser_action_row1488[] = {
+       4,
+       -1, 3, 1487,
+       32, 0, 1655,
+       47, 0, 1656,
+       51, 0, 1657
+};
+static int parser_action_row1489[] = {
+       1,
+       -1, 1, 688
+};
+static int parser_action_row1490[] = {
+       33,
+       -1, 3, 1489,
+       0, 0, 1,
+       1, 0, 2,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 55,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1491[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1492[] = {
+       1,
+       -1, 1, 382
+};
+static int parser_action_row1493[] = {
+       2,
+       -1, 1, 365,
+       56, 0, 330
+};
+static int parser_action_row1494[] = {
+       2,
+       -1, 3, 1493,
+       52, 0, 1661
+};
+static int parser_action_row1495[] = {
+       3,
+       -1, 3, 1494,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1496[] = {
+       23,
+       -1, 3, 1495,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1497[] = {
+       1,
+       -1, 1, 149
+};
+static int parser_action_row1498[] = {
+       2,
+       -1, 3, 1497,
+       80, 0, 1078
+};
+static int parser_action_row1499[] = {
+       1,
+       -1, 1, 143
+};
+static int parser_action_row1500[] = {
+       1,
+       -1, 1, 1263
+};
+static int parser_action_row1501[] = {
+       2,
+       -1, 3, 1500,
+       54, 0, 1665
+};
+static int parser_action_row1502[] = {
+       1,
+       -1, 1, 99
+};
+static int parser_action_row1503[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1666,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1504[] = {
+       1,
+       -1, 1, 115
+};
+static int parser_action_row1505[] = {
+       1,
+       -1, 1, 123
+};
+static int parser_action_row1506[] = {
+       1,
+       -1, 1, 87
+};
+static int parser_action_row1507[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1667,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
+};
+static int parser_action_row1508[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1509[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1669,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1510[] = {
+       1,
+       -1, 1, 95
+};
+static int parser_action_row1511[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1670,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1512[] = {
+       1,
+       -1, 1, 111
+};
+static int parser_action_row1513[] = {
+       1,
+       -1, 1, 129
+};
+static int parser_action_row1514[] = {
+       5,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       51, 0, 570,
+       56, 0, 330
+};
+static int parser_action_row1515[] = {
+       2,
+       -1, 3, 1514,
+       56, 0, 330
+};
+static int parser_action_row1516[] = {
+       5,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       51, 0, 1340,
+       56, 0, 330
+};
+static int parser_action_row1517[] = {
+       3,
+       -1, 3, 1516,
+       13, 0, 1533,
+       14, 0, 1675
+};
+static int parser_action_row1518[] = {
+       9,
+       -1, 1, 222,
+       12, 0, 1537,
+       13, 0, 456,
+       16, 1, 331,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       56, 0, 330,
+       58, 0, 1677
+};
+static int parser_action_row1519[] = {
+       3,
+       -1, 1, 190,
+       56, 0, 330,
+       58, 0, 1681
+};
+static int parser_action_row1520[] = {
+       5,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       51, 0, 1340,
+       56, 0, 330
+};
+static int parser_action_row1521[] = {
+       6,
+       -1, 3, 1520,
+       3, 0, 722,
+       13, 0, 1684,
+       29, 0, 39,
+       85, 0, 1685,
+       92, 0, 62
+};
+static int parser_action_row1522[] = {
+       1,
+       -1, 1, 151
+};
+static int parser_action_row1523[] = {
+       2,
+       -1, 3, 1522,
+       82, 0, 1688
+};
+static int parser_action_row1524[] = {
+       2,
+       -1, 3, 1523,
+       17, 0, 1689
+};
+static int parser_action_row1525[] = {
+       2,
+       -1, 3, 1524,
+       82, 0, 1690
+};
+static int parser_action_row1526[] = {
+       3,
+       -1, 1, 191,
+       56, 0, 330,
+       58, 0, 1691
+};
+static int parser_action_row1527[] = {
+       2,
+       -1, 3, 1526,
+       82, 0, 1693
+};
+static int parser_action_row1528[] = {
+       3,
+       -1, 1, 193,
+       56, 0, 330,
+       58, 0, 1694
+};
+static int parser_action_row1529[] = {
+       6,
+       -1, 3, 1528,
+       3, 0, 722,
+       13, 0, 1696,
+       14, 0, 1697,
+       29, 0, 39,
+       92, 0, 62
+};
+static int parser_action_row1530[] = {
+       2,
+       -1, 3, 1529,
+       58, 0, 1702
+};
+static int parser_action_row1531[] = {
+       2,
+       -1, 1, 269,
+       13, 0, 456
+};
+static int parser_action_row1532[] = {
+       3,
+       -1, 3, 1531,
+       52, 0, 1704,
+       81, 0, 865
+};
+static int parser_action_row1533[] = {
+       3,
+       -1, 3, 1532,
+       13, 0, 1533,
+       14, 0, 1706
+};
+static int parser_action_row1534[] = {
+       7,
+       -1, 3, 1533,
+       0, 0, 87,
+       1, 0, 88,
+       3, 0, 383,
+       15, 0, 384,
+       16, 0, 385,
+       81, 0, 387
+};
+static int parser_action_row1535[] = {
+       33,
+       -1, 3, 1534,
+       0, 0, 1,
+       1, 0, 2,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 55,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1536[] = {
+       2,
+       -1, 3, 1535,
+       14, 0, 1711
+};
+static int parser_action_row1537[] = {
+       3,
+       -1, 1, 361,
+       35, 0, 730,
+       78, 0, 731
+};
+static int parser_action_row1538[] = {
+       4,
+       -1, 1, 331,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1539[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1540[] = {
+       1,
+       -1, 1, 229
+};
+static int parser_action_row1541[] = {
+       3,
+       -1, 1, 225,
+       13, 0, 456,
+       58, 0, 1715
+};
+static int parser_action_row1542[] = {
+       2,
+       -1, 3, 1541,
+       16, 0, 1717
+};
+static int parser_action_row1543[] = {
+       8,
+       -1, 1, 223,
+       12, 0, 1537,
+       13, 0, 456,
+       16, 1, 331,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       58, 0, 1718
+};
+static int parser_action_row1544[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1545[] = {
+       2,
+       -1, 1, 197,
+       58, 0, 1722
+};
+static int parser_action_row1546[] = {
+       6,
+       -1, 3, 1545,
+       3, 0, 722,
+       13, 0, 1723,
+       29, 0, 39,
+       85, 0, 1724,
+       92, 0, 62
+};
+static int parser_action_row1547[] = {
+       2,
+       -1, 3, 1546,
+       19, 0, 1727
+};
+static int parser_action_row1548[] = {
+       4,
+       -1, 3, 1547,
+       3, 0, 722,
+       29, 0, 39,
+       92, 0, 62
+};
+static int parser_action_row1549[] = {
+       3,
+       -1, 3, 1548,
+       29, 0, 39,
+       92, 0, 62
+};
+static int parser_action_row1550[] = {
+       1,
+       -1, 1, 305
+};
+static int parser_action_row1551[] = {
+       1,
+       -1, 1, 1122
+};
+static int parser_action_row1552[] = {
+       1,
+       -1, 1, 1117
+};
+static int parser_action_row1553[] = {
+       2,
+       -1, 3, 1552,
+       56, 0, 1731
+};
+static int parser_action_row1554[] = {
+       4,
+       -1, 3, 1553,
+       0, 0, 87,
+       1, 0, 88,
+       79, 0, 205
+};
+static int parser_action_row1555[] = {
+       23,
+       -1, 3, 1554,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1556[] = {
+       23,
+       -1, 3, 1555,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1557[] = {
+       1,
+       -1, 1, 808
+};
+static int parser_action_row1558[] = {
+       1,
+       -1, 1, 813
+};
+static int parser_action_row1559[] = {
+       5,
+       -1, 3, 1558,
+       11, 0, 621,
+       46, 0, 622,
+       81, 0, 1736,
+       82, 0, 1737
+};
+static int parser_action_row1560[] = {
+       23,
+       -1, 3, 1559,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1561[] = {
+       23,
+       -1, 3, 1560,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1562[] = {
+       1,
+       -1, 1, 101
+};
+static int parser_action_row1563[] = {
        8,
-       -1, 1, 178,
-       13, 0, 1257,
-       17, 1, 258,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       57, 0, 312,
-       59, 0, 1258
+       -1, 1, 331,
+       8, 0, 1740,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row1124[] = {
-       3,
-       -1, 1, 146,
-       57, 0, 312,
-       59, 0, 1262
+static int parser_action_row1564[] = {
+       1,
+       -1, 1, 117
 };
-static int parser_action_row1125[] = {
-       5,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2,
-       52, 0, 1118,
-       57, 0, 312
+static int parser_action_row1565[] = {
+       1,
+       -1, 1, 125
 };
-static int parser_action_row1126[] = {
-       6,
-       -1, 3, 1125,
-       3, 0, 638,
-       14, 0, 1265,
-       30, 0, 39,
-       86, 0, 1266,
-       92, 0, 62
+static int parser_action_row1566[] = {
+       2,
+       -1, 3, 1565,
+       45, 0, 1741
 };
-static int parser_action_row1127[] = {
-       1,
-       -1, 1, 95
+static int parser_action_row1567[] = {
+       2,
+       -1, 3, 1566,
+       52, 0, 1742
 };
-static int parser_action_row1128[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+static int parser_action_row1568[] = {
+       4,
+       -1, 3, 1567,
+       0, 0, 87,
+       1, 0, 88,
+       79, 0, 205
 };
-static int parser_action_row1129[] = {
+static int parser_action_row1569[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1130[] = {
+static int parser_action_row1570[] = {
        2,
-       -1, 3, 1129,
-       26, 0, 1271
+       -1, 3, 1569,
+       45, 0, 1746
 };
-static int parser_action_row1131[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+static int parser_action_row1571[] = {
+       2,
+       -1, 3, 1570,
+       52, 0, 1747
 };
-static int parser_action_row1132[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+static int parser_action_row1572[] = {
+       1,
+       -1, 1, 689
 };
-static int parser_action_row1133[] = {
-       3,
-       -1, 1, 550,
-       30, 0, 39,
-       92, 0, 62
+static int parser_action_row1573[] = {
+       1,
+       -1, 1, 100
 };
-static int parser_action_row1134[] = {
+static int parser_action_row1574[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1748,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
+};
+static int parser_action_row1575[] = {
        1,
-       -1, 1, 554
+       -1, 1, 116
 };
-static int parser_action_row1135[] = {
+static int parser_action_row1576[] = {
        1,
-       -1, 1, 556
+       -1, 1, 124
 };
-static int parser_action_row1136[] = {
+static int parser_action_row1577[] = {
        1,
-       -1, 1, 78
+       -1, 1, 88
 };
-static int parser_action_row1137[] = {
-       10,
-       -1, 1, 258,
-       8, 0, 771,
-       9, 0, 1275,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       42, 0, 776
+static int parser_action_row1578[] = {
+       9,
+       -1, 1, 331,
+       8, 0, 1749,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       41, 0, 895
 };
-static int parser_action_row1138[] = {
+static int parser_action_row1579[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1139[] = {
+static int parser_action_row1580[] = {
        8,
-       -1, 1, 258,
-       9, 0, 1277,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       8, 0, 1751,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row1140[] = {
+static int parser_action_row1581[] = {
        1,
-       -1, 1, 82
+       -1, 1, 96
 };
-static int parser_action_row1141[] = {
+static int parser_action_row1582[] = {
        8,
-       -1, 1, 258,
-       9, 0, 1278,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       8, 0, 1752,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row1142[] = {
+static int parser_action_row1583[] = {
        1,
-       -1, 1, 90
+       -1, 1, 112
 };
-static int parser_action_row1143[] = {
+static int parser_action_row1584[] = {
        1,
-       -1, 1, 84
+       -1, 1, 130
 };
-static int parser_action_row1144[] = {
+static int parser_action_row1585[] = {
+       1,
+       -1, 1, 102
+};
+static int parser_action_row1586[] = {
        8,
-       -1, 1, 258,
-       9, 0, 1279,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+       -1, 1, 331,
+       8, 0, 1753,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row1145[] = {
+static int parser_action_row1587[] = {
        1,
-       -1, 1, 92
+       -1, 1, 118
 };
-static int parser_action_row1146[] = {
+static int parser_action_row1588[] = {
        1,
-       -1, 1, 96
+       -1, 1, 126
 };
-static int parser_action_row1147[] = {
+static int parser_action_row1589[] = {
+       1,
+       -1, 1, 1007
+};
+static int parser_action_row1590[] = {
        23,
-       -1, 3, 1146,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
+       -1, 3, 1589,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1148[] = {
+static int parser_action_row1591[] = {
+       23,
+       -1, 3, 1590,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1592[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1149[] = {
-       2,
-       -1, 3, 1148,
-       25, 0, 1282
-};
-static int parser_action_row1150[] = {
-       2,
-       -1, 3, 1149,
-       15, 0, 1283
-};
-static int parser_action_row1151[] = {
-       4,
-       -1, 1, 531,
+static int parser_action_row1593[] = {
+       34,
+       -1, 3, 1592,
        0, 0, 1,
        1, 0, 2,
-       53, 0, 1284
-};
-static int parser_action_row1152[] = {
-       3,
-       -1, 3, 1151,
-       30, 0, 1285,
-       56, 0, 589
+       8, 0, 785,
+       11, 0, 786,
+       14, 0, 787,
+       17, 0, 788,
+       23, 0, 789,
+       25, 0, 790,
+       26, 0, 791,
+       27, 0, 792,
+       28, 0, 793,
+       33, 0, 794,
+       34, 0, 795,
+       35, 0, 796,
+       36, 0, 797,
+       37, 0, 798,
+       38, 0, 45,
+       41, 0, 799,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 800,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 801,
+       82, 0, 802,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row1153[] = {
+static int parser_action_row1594[] = {
        33,
-       -1, 3, 1152,
+       -1, 3, 1593,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 1153,
-       12, 0, 689,
-       15, 0, 690,
-       18, 0, 691,
-       24, 0, 692,
-       27, 0, 694,
-       28, 0, 695,
-       29, 0, 696,
-       34, 0, 697,
-       35, 0, 698,
-       36, 0, 699,
-       37, 0, 700,
-       38, 0, 701,
-       39, 0, 45,
-       42, 0, 702,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 703,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 704,
-       82, 0, 705,
+       8, 0, 946,
+       11, 0, 786,
+       14, 0, 787,
+       17, 0, 788,
+       23, 0, 789,
+       26, 0, 791,
+       27, 0, 792,
+       28, 0, 793,
+       33, 0, 794,
+       34, 0, 795,
+       35, 0, 796,
+       36, 0, 797,
+       37, 0, 798,
+       38, 0, 45,
+       41, 0, 799,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 800,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 801,
+       82, 0, 802,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1154[] = {
+static int parser_action_row1595[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1596[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1597[] = {
+       1,
+       -1, 1, 1033
+};
+static int parser_action_row1598[] = {
        2,
-       -1, 1, 338,
-       26, 1, 631
+       -1, 1, 417,
+       25, 1, 960
 };
-static int parser_action_row1155[] = {
-       31,
-       -1, 3, 1154,
-       9, 0, 1287,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+static int parser_action_row1599[] = {
+       2,
+       -1, 1, 416,
+       25, 1, 959
+};
+static int parser_action_row1600[] = {
+       1,
+       -1, 1, 990
+};
+static int parser_action_row1601[] = {
+       2,
+       -1, 1, 452,
+       25, 1, 988
+};
+static int parser_action_row1602[] = {
+       4,
+       -1, 1, 558,
+       58, 0, 1762,
+       59, 0, 220,
+       60, 0, 221
+};
+static int parser_action_row1603[] = {
+       3,
+       -1, 1, 446,
+       25, 1, 982,
+       78, 0, 533
+};
+static int parser_action_row1604[] = {
+       23,
+       -1, 3, 1603,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
-       81, 0, 55,
-       82, 0, 56,
+       81, 0, 374,
+       82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1156[] = {
-       1,
-       -1, 1, 698
+       89, 0, 61
 };
-static int parser_action_row1157[] = {
+static int parser_action_row1605[] = {
        23,
-       -1, 3, 1156,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
+       -1, 3, 1604,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1158[] = {
-       1,
-       -1, 1, 680
-};
-static int parser_action_row1159[] = {
-       1,
-       -1, 1, 685
-};
-static int parser_action_row1160[] = {
-       24,
-       -1, 1, 510,
-       12, 0, 122,
-       24, 0, 123,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       52, 0, 133,
-       54, 1, 506,
-       64, 1, 506,
-       66, 0, 134,
-       80, 0, 54,
-       81, 0, 135,
-       82, 0, 136,
-       83, 0, 137,
-       84, 0, 138,
-       85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1161[] = {
-       27,
-       -1, 1, 510,
-       12, 0, 122,
-       24, 0, 123,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       52, 0, 133,
-       54, 1, 506,
-       59, 1, 506,
-       60, 1, 506,
-       61, 1, 506,
-       64, 1, 506,
-       66, 0, 134,
-       80, 0, 54,
-       81, 0, 135,
-       82, 0, 136,
-       83, 0, 137,
-       84, 0, 138,
-       85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
-};
-static int parser_action_row1162[] = {
-       4,
-       -1, 1, 472,
-       59, 0, 1293,
-       60, 0, 215,
-       61, 0, 216
+static int parser_action_row1606[] = {
+       2,
+       -1, 3, 1605,
+       14, 0, 1767
 };
-static int parser_action_row1163[] = {
+static int parser_action_row1607[] = {
        1,
-       -1, 1, 681
+       -1, 1, 512
 };
-static int parser_action_row1164[] = {
-       1,
-       -1, 1, 686
+static int parser_action_row1608[] = {
+       2,
+       -1, 3, 1607,
+       49, 0, 191
 };
-static int parser_action_row1165[] = {
+static int parser_action_row1609[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1166[] = {
-       33,
-       -1, 3, 1165,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 155,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+static int parser_action_row1610[] = {
+       31,
+       -1, 1, 471,
+       8, 0, 1183,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -11979,790 +16413,312 @@ static int parser_action_row1166[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1167[] = {
+static int parser_action_row1611[] = {
+       1,
+       -1, 1, 997
+};
+static int parser_action_row1612[] = {
        2,
-       -1, 3, 1166,
-       26, 0, 1298
+       -1, 3, 1611,
+       49, 0, 191
 };
-static int parser_action_row1168[] = {
-       33,
-       -1, 3, 1167,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 810,
-       12, 0, 689,
-       15, 0, 690,
-       18, 0, 691,
-       24, 0, 692,
-       27, 0, 694,
-       28, 0, 695,
-       29, 0, 696,
-       34, 0, 697,
-       35, 0, 698,
-       36, 0, 699,
-       37, 0, 700,
-       38, 0, 701,
-       39, 0, 45,
-       42, 0, 702,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 703,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 704,
-       82, 0, 705,
+static int parser_action_row1613[] = {
+       23,
+       -1, 3, 1612,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
+       82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1169[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
-};
-static int parser_action_row1170[] = {
-       2,
-       -1, 1, 380,
-       26, 1, 665
+       89, 0, 61
 };
-static int parser_action_row1171[] = {
+static int parser_action_row1614[] = {
        1,
-       -1, 1, 671
+       -1, 1, 778
 };
-static int parser_action_row1172[] = {
+static int parser_action_row1615[] = {
        1,
-       -1, 1, 331
+       -1, 1, 411
 };
-static int parser_action_row1173[] = {
+static int parser_action_row1616[] = {
+       2,
+       -1, 3, 1615,
+       24, 0, 1772
+};
+static int parser_action_row1617[] = {
+       2,
+       -1, 1, 893,
+       79, 0, 545
+};
+static int parser_action_row1618[] = {
        1,
-       -1, 1, 334
+       -1, 1, 894
 };
-static int parser_action_row1174[] = {
+static int parser_action_row1619[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1175[] = {
+static int parser_action_row1620[] = {
        1,
-       -1, 1, 581
+       -1, 1, 738
 };
-static int parser_action_row1176[] = {
+static int parser_action_row1621[] = {
        2,
-       -1, 3, 1175,
-       80, 0, 1304
-};
-static int parser_action_row1177[] = {
-       1,
-       -1, 1, 569
+       -1, 3, 1620,
+       63, 0, 1618
 };
-static int parser_action_row1178[] = {
-       3,
-       -1, 1, 506,
-       52, 0, 272,
-       64, 0, 1305
+static int parser_action_row1622[] = {
+       5,
+       -1, 3, 1621,
+       11, 0, 1646,
+       46, 0, 1647,
+       81, 0, 1648,
+       82, 0, 1775
 };
-static int parser_action_row1179[] = {
+static int parser_action_row1623[] = {
        1,
-       -1, 1, 603
-};
-static int parser_action_row1180[] = {
-       3,
-       -1, 3, 1179,
-       48, 0, 1175,
-       80, 0, 1176
-};
-static int parser_action_row1181[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 768
 };
-static int parser_action_row1182[] = {
+static int parser_action_row1624[] = {
        1,
-       -1, 1, 626
+       -1, 1, 569
 };
-static int parser_action_row1183[] = {
+static int parser_action_row1625[] = {
        1,
-       -1, 1, 602
+       -1, 1, 567
 };
-static int parser_action_row1184[] = {
+static int parser_action_row1626[] = {
        1,
-       -1, 1, 613
+       -1, 1, 711
 };
-static int parser_action_row1185[] = {
-       1,
-       -1, 1, 483
+static int parser_action_row1627[] = {
+       21,
+       -1, 3, 1626,
+       11, 0, 1010,
+       32, 0, 1012,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
 };
-static int parser_action_row1186[] = {
+static int parser_action_row1628[] = {
        1,
-       -1, 1, 482
-};
-static int parser_action_row1187[] = {
-       21,
-       -1, 3, 1186,
-       12, 0, 863,
-       33, 0, 865,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+       -1, 1, 710
 };
-static int parser_action_row1188[] = {
+static int parser_action_row1629[] = {
        3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
-};
-static int parser_action_row1189[] = {
-       21,
-       -1, 3, 1188,
-       12, 0, 863,
-       33, 0, 865,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
-};
-static int parser_action_row1190[] = {
-       20,
-       -1, 3, 1189,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
-};
-static int parser_action_row1191[] = {
-       20,
-       -1, 3, 1190,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+       -1, 1, 721,
+       64, 0, 1260,
+       65, 0, 1261
 };
-static int parser_action_row1192[] = {
-       20,
-       -1, 3, 1191,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
-};
-static int parser_action_row1193[] = {
+static int parser_action_row1630[] = {
        3,
-       -1, 3, 1192,
-       48, 0, 1175,
-       80, 0, 1176
+       -1, 1, 724,
+       64, 0, 1260,
+       65, 0, 1261
 };
-static int parser_action_row1194[] = {
-       20,
-       -1, 3, 1193,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+static int parser_action_row1631[] = {
+       3,
+       -1, 1, 717,
+       64, 0, 1260,
+       65, 0, 1261
 };
-static int parser_action_row1195[] = {
-       20,
-       -1, 3, 1194,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+static int parser_action_row1632[] = {
+       2,
+       -1, 3, 1631,
+       80, 0, 1777
 };
-static int parser_action_row1196[] = {
-       20,
-       -1, 3, 1195,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+static int parser_action_row1633[] = {
+       2,
+       -1, 1, 700,
+       79, 0, 205
 };
-static int parser_action_row1197[] = {
-       20,
-       -1, 3, 1196,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+static int parser_action_row1634[] = {
+       1,
+       -1, 1, 726
 };
-static int parser_action_row1198[] = {
-       20,
-       -1, 3, 1197,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+static int parser_action_row1635[] = {
+       4,
+       -1, 1, 728,
+       66, 0, 1269,
+       67, 0, 1270,
+       68, 0, 1271
 };
-static int parser_action_row1199[] = {
-       20,
-       -1, 3, 1198,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+static int parser_action_row1636[] = {
+       4,
+       -1, 1, 729,
+       66, 0, 1269,
+       67, 0, 1270,
+       68, 0, 1271
 };
-static int parser_action_row1200[] = {
-       20,
-       -1, 3, 1199,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+static int parser_action_row1637[] = {
+       3,
+       -1, 1, 716,
+       64, 0, 1260,
+       65, 0, 1261
 };
-static int parser_action_row1201[] = {
-       20,
-       -1, 3, 1200,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+static int parser_action_row1638[] = {
+       3,
+       -1, 1, 718,
+       64, 0, 1260,
+       65, 0, 1261
 };
-static int parser_action_row1202[] = {
-       20,
-       -1, 3, 1201,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+static int parser_action_row1639[] = {
+       3,
+       -1, 1, 719,
+       64, 0, 1260,
+       65, 0, 1261
 };
-static int parser_action_row1203[] = {
-       20,
-       -1, 3, 1202,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+static int parser_action_row1640[] = {
+       3,
+       -1, 1, 720,
+       64, 0, 1260,
+       65, 0, 1261
 };
-static int parser_action_row1204[] = {
-       20,
-       -1, 3, 1203,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+static int parser_action_row1641[] = {
+       3,
+       -1, 1, 722,
+       64, 0, 1260,
+       65, 0, 1261
 };
-static int parser_action_row1205[] = {
-       20,
-       -1, 3, 1204,
-       12, 0, 863,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+static int parser_action_row1642[] = {
+       3,
+       -1, 1, 723,
+       64, 0, 1260,
+       65, 0, 1261
 };
-static int parser_action_row1206[] = {
-       5,
-       -1, 3, 1205,
-       12, 0, 1328,
-       47, 0, 1329,
-       81, 0, 1330,
-       82, 0, 1331
+static int parser_action_row1643[] = {
+       3,
+       -1, 1, 725,
+       64, 0, 1260,
+       65, 0, 1261
 };
-static int parser_action_row1207[] = {
-       31,
-       -1, 1, 343,
-       9, 0, 686,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 55,
-       82, 0, 56,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
+static int parser_action_row1644[] = {
+       1,
+       -1, 1, 731
 };
-static int parser_action_row1208[] = {
+static int parser_action_row1645[] = {
        1,
-       -1, 1, 382
+       -1, 1, 732
 };
-static int parser_action_row1209[] = {
-       31,
-       -1, 1, 391,
-       9, 0, 308,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 55,
-       82, 0, 56,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
+static int parser_action_row1646[] = {
+       1,
+       -1, 1, 733
 };
-static int parser_action_row1210[] = {
+static int parser_action_row1647[] = {
        2,
-       -1, 3, 1209,
-       50, 0, 191
+       -1, 1, 631,
+       51, 0, 282
 };
-static int parser_action_row1211[] = {
-       23,
-       -1, 3, 1210,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 178,
-       82, 0, 179,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
+static int parser_action_row1648[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row1212[] = {
+static int parser_action_row1649[] = {
        2,
-       -1, 1, 282,
-       59, 1, 565
-};
-static int parser_action_row1213[] = {
-       4,
-       -1, 1, 281,
-       36, 0, 644,
-       59, 1, 564,
-       79, 0, 645
+       -1, 1, 631,
+       51, 0, 282
 };
-static int parser_action_row1214[] = {
+static int parser_action_row1650[] = {
        1,
-       -1, 1, 287
+       -1, 1, 741
 };
-static int parser_action_row1215[] = {
+static int parser_action_row1651[] = {
        1,
-       -1, 1, 300
+       -1, 1, 468
 };
-static int parser_action_row1216[] = {
+static int parser_action_row1652[] = {
        1,
-       -1, 1, 319
-};
-static int parser_action_row1217[] = {
-       20,
-       -1, 3, 1216,
-       42, 0, 911,
-       48, 0, 361,
-       54, 0, 383,
-       65, 0, 384,
-       66, 0, 385,
-       67, 0, 386,
-       68, 0, 387,
-       69, 0, 388,
-       70, 0, 389,
-       71, 0, 390,
-       72, 0, 391,
-       73, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       80, 0, 912,
-       81, 0, 398
+       -1, 1, 459
 };
-static int parser_action_row1218[] = {
+static int parser_action_row1653[] = {
        1,
-       -1, 1, 851
+       -1, 1, 465
 };
-static int parser_action_row1219[] = {
-       4,
-       -1, 3, 1218,
-       33, 0, 1337,
-       48, 0, 1338,
-       52, 0, 1339
+static int parser_action_row1654[] = {
+       2,
+       -1, 1, 356,
+       58, 1, 697
 };
-static int parser_action_row1220[] = {
+static int parser_action_row1655[] = {
        1,
-       -1, 1, 557
-};
-static int parser_action_row1221[] = {
-       33,
-       -1, 3, 1220,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 506,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 55,
-       82, 0, 56,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
+       -1, 1, 390
 };
-static int parser_action_row1222[] = {
+static int parser_action_row1656[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1223[] = {
+static int parser_action_row1657[] = {
        1,
-       -1, 1, 306
-};
-static int parser_action_row1224[] = {
-       2,
-       -1, 1, 292,
-       57, 0, 312
+       -1, 1, 398
 };
-static int parser_action_row1225[] = {
-       2,
-       -1, 3, 1224,
-       53, 0, 1343
+static int parser_action_row1658[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row1226[] = {
+static int parser_action_row1659[] = {
        3,
-       -1, 3, 1225,
+       -1, 3, 1658,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1227[] = {
+static int parser_action_row1660[] = {
        23,
-       -1, 3, 1226,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 1659,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -12770,201 +16726,114 @@ static int parser_action_row1227[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1228[] = {
-       2,
-       -1, 3, 1227,
-       80, 0, 928
-};
-static int parser_action_row1229[] = {
-       1,
-       -1, 1, 108
+       89, 0, 61
 };
-static int parser_action_row1230[] = {
+static int parser_action_row1661[] = {
        1,
-       -1, 1, 845
+       -1, 1, 367
 };
-static int parser_action_row1231[] = {
+static int parser_action_row1662[] = {
        2,
-       -1, 3, 1230,
-       55, 0, 1347
+       -1, 1, 366,
+       56, 0, 330
 };
-static int parser_action_row1232[] = {
+static int parser_action_row1663[] = {
        1,
-       -1, 1, 85
+       -1, 1, 383
 };
-static int parser_action_row1233[] = {
-       8,
-       -1, 1, 258,
-       9, 0, 1348,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+static int parser_action_row1664[] = {
+       3,
+       -1, 3, 1663,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row1234[] = {
+static int parser_action_row1665[] = {
        1,
-       -1, 1, 93
+       -1, 1, 145
 };
-static int parser_action_row1235[] = {
+static int parser_action_row1666[] = {
        1,
-       -1, 1, 97
+       -1, 1, 144
 };
-static int parser_action_row1236[] = {
+static int parser_action_row1667[] = {
        1,
-       -1, 1, 99
-};
-static int parser_action_row1237[] = {
-       5,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2,
-       52, 0, 526,
-       57, 0, 312
-};
-static int parser_action_row1238[] = {
-       2,
-       -1, 3, 1237,
-       57, 0, 312
-};
-static int parser_action_row1239[] = {
-       5,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2,
-       52, 0, 1118,
-       57, 0, 312
+       -1, 1, 131
 };
-static int parser_action_row1240[] = {
-       2,
-       -1, 3, 1239,
-       15, 0, 1353
+static int parser_action_row1668[] = {
+       1,
+       -1, 1, 103
 };
-static int parser_action_row1241[] = {
+static int parser_action_row1669[] = {
        8,
-       -1, 1, 179,
-       13, 0, 1257,
-       17, 1, 258,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       57, 0, 312,
-       59, 0, 1354
+       -1, 1, 331,
+       8, 0, 1788,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row1242[] = {
-       3,
-       -1, 1, 147,
-       57, 0, 312,
-       59, 0, 1357
+static int parser_action_row1670[] = {
+       1,
+       -1, 1, 119
 };
-static int parser_action_row1243[] = {
-       5,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2,
-       52, 0, 1118,
-       57, 0, 312
+static int parser_action_row1671[] = {
+       1,
+       -1, 1, 127
 };
-static int parser_action_row1244[] = {
+static int parser_action_row1672[] = {
        6,
-       -1, 3, 1243,
-       3, 0, 638,
-       14, 0, 1360,
-       30, 0, 39,
-       86, 0, 1361,
+       -1, 3, 1671,
+       3, 0, 722,
+       13, 0, 1789,
+       14, 0, 1790,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1245[] = {
-       2,
-       -1, 3, 1244,
-       82, 0, 1364
-};
-static int parser_action_row1246[] = {
-       2,
-       -1, 3, 1245,
-       18, 0, 1365
-};
-static int parser_action_row1247[] = {
-       2,
-       -1, 3, 1246,
-       82, 0, 1366
-};
-static int parser_action_row1248[] = {
-       3,
-       -1, 1, 148,
-       57, 0, 312,
-       59, 0, 1367
-};
-static int parser_action_row1249[] = {
+static int parser_action_row1673[] = {
        2,
-       -1, 3, 1248,
-       82, 0, 1369
-};
-static int parser_action_row1250[] = {
-       3,
-       -1, 1, 150,
-       57, 0, 312,
-       59, 0, 1370
-};
-static int parser_action_row1251[] = {
-       6,
-       -1, 3, 1250,
-       3, 0, 638,
-       14, 0, 1372,
-       15, 0, 1373,
-       30, 0, 39,
-       92, 0, 62
+       -1, 3, 1672,
+       58, 0, 1795
 };
-static int parser_action_row1252[] = {
+static int parser_action_row1674[] = {
        2,
-       -1, 3, 1251,
-       59, 0, 1376
+       -1, 1, 270,
+       13, 0, 456
 };
-static int parser_action_row1253[] = {
-       1,
-       -1, 1, 202
-};
-static int parser_action_row1254[] = {
+static int parser_action_row1675[] = {
        3,
-       -1, 3, 1253,
-       53, 0, 1377,
-       81, 0, 750
-};
-static int parser_action_row1255[] = {
-       2,
-       -1, 3, 1254,
-       15, 0, 1379
+       -1, 3, 1674,
+       13, 0, 1533,
+       14, 0, 1797
 };
-static int parser_action_row1256[] = {
+static int parser_action_row1676[] = {
        33,
-       -1, 3, 1255,
+       -1, 3, 1675,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 506,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -12972,394 +16841,300 @@ static int parser_action_row1256[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1257[] = {
-       3,
-       -1, 1, 288,
-       36, 0, 644,
-       79, 0, 645
+       89, 0, 61
 };
-static int parser_action_row1258[] = {
-       4,
-       -1, 1, 258,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
+static int parser_action_row1677[] = {
+       2,
+       -1, 3, 1676,
+       14, 0, 1800
 };
-static int parser_action_row1259[] = {
+static int parser_action_row1678[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1260[] = {
-       2,
-       -1, 1, 182,
-       59, 0, 1384
+static int parser_action_row1679[] = {
+       1,
+       -1, 1, 230
 };
-static int parser_action_row1261[] = {
-       2,
-       -1, 3, 1260,
-       17, 0, 1385
+static int parser_action_row1680[] = {
+       3,
+       -1, 1, 226,
+       13, 0, 456,
+       58, 0, 1802
 };
-static int parser_action_row1262[] = {
-       7,
-       -1, 1, 180,
-       13, 0, 1257,
-       17, 1, 258,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       59, 0, 1386
+static int parser_action_row1681[] = {
+       8,
+       -1, 1, 224,
+       12, 0, 1537,
+       13, 0, 456,
+       16, 1, 331,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34,
+       58, 0, 1804
 };
-static int parser_action_row1263[] = {
+static int parser_action_row1682[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1264[] = {
+static int parser_action_row1683[] = {
        2,
-       -1, 1, 154,
-       59, 0, 1389
+       -1, 1, 198,
+       58, 0, 1808
 };
-static int parser_action_row1265[] = {
+static int parser_action_row1684[] = {
        6,
-       -1, 3, 1264,
-       3, 0, 638,
-       14, 0, 1390,
-       30, 0, 39,
-       86, 0, 1391,
+       -1, 3, 1683,
+       3, 0, 722,
+       13, 0, 1809,
+       29, 0, 39,
+       85, 0, 1810,
        92, 0, 62
 };
-static int parser_action_row1266[] = {
+static int parser_action_row1685[] = {
        2,
-       -1, 3, 1265,
-       20, 0, 1394
+       -1, 3, 1684,
+       19, 0, 1813
 };
-static int parser_action_row1267[] = {
+static int parser_action_row1686[] = {
        4,
-       -1, 3, 1266,
-       3, 0, 638,
-       30, 0, 39,
+       -1, 3, 1685,
+       3, 0, 722,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1268[] = {
+static int parser_action_row1687[] = {
        3,
-       -1, 3, 1267,
-       30, 0, 39,
+       -1, 3, 1686,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1269[] = {
+static int parser_action_row1688[] = {
        1,
-       -1, 1, 236
+       -1, 1, 306
 };
-static int parser_action_row1270[] = {
-       2,
-       -1, 3, 1269,
-       46, 0, 1398
+static int parser_action_row1689[] = {
+       3,
+       -1, 1, 192,
+       56, 0, 330,
+       58, 0, 1817
 };
-static int parser_action_row1271[] = {
+static int parser_action_row1690[] = {
        2,
-       -1, 3, 1270,
-       53, 0, 1399
+       -1, 3, 1689,
+       82, 0, 1819
 };
-static int parser_action_row1272[] = {
+static int parser_action_row1691[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 195,
+       56, 0, 330,
+       58, 0, 1820
+};
+static int parser_action_row1692[] = {
+       3,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1273[] = {
-       2,
-       -1, 3, 1272,
-       46, 0, 1401
-};
-static int parser_action_row1274[] = {
+static int parser_action_row1693[] = {
        2,
-       -1, 3, 1273,
-       53, 0, 1402
-};
-static int parser_action_row1275[] = {
-       1,
-       -1, 1, 558
-};
-static int parser_action_row1276[] = {
-       1,
-       -1, 1, 86
-};
-static int parser_action_row1277[] = {
-       8,
-       -1, 1, 258,
-       9, 0, 1403,
-       13, 0, 773,
-       16, 0, 774,
-       17, 0, 775,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34
-};
-static int parser_action_row1278[] = {
-       1,
-       -1, 1, 94
-};
-static int parser_action_row1279[] = {
-       1,
-       -1, 1, 98
-};
-static int parser_action_row1280[] = {
-       1,
-       -1, 1, 100
-};
-static int parser_action_row1281[] = {
-       1,
-       -1, 1, 675
+       -1, 1, 199,
+       58, 0, 1823
 };
-static int parser_action_row1282[] = {
-       23,
-       -1, 3, 1281,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
-       82, 0, 179,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
+static int parser_action_row1694[] = {
+       3,
+       -1, 1, 194,
+       56, 0, 330,
+       58, 0, 1824
 };
-static int parser_action_row1283[] = {
-       34,
-       -1, 3, 1282,
+static int parser_action_row1695[] = {
+       3,
+       -1, 1, 656,
        0, 0, 1,
-       1, 0, 2,
-       9, 0, 688,
-       12, 0, 689,
-       15, 0, 690,
-       18, 0, 691,
-       24, 0, 692,
-       26, 0, 693,
-       27, 0, 694,
-       28, 0, 695,
-       29, 0, 696,
-       34, 0, 697,
-       35, 0, 698,
-       36, 0, 699,
-       37, 0, 700,
-       38, 0, 701,
-       39, 0, 45,
-       42, 0, 702,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 703,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 704,
-       82, 0, 705,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
+       1, 0, 2
 };
-static int parser_action_row1284[] = {
+static int parser_action_row1696[] = {
+       2,
+       -1, 1, 201,
+       58, 0, 1827
+};
+static int parser_action_row1697[] = {
+       10,
+       -1, 3, 1696,
+       0, 0, 87,
+       1, 0, 88,
+       3, 0, 383,
+       5, 0, 1828,
+       15, 0, 384,
+       16, 0, 385,
+       18, 0, 1829,
+       19, 0, 1830,
+       81, 0, 387
+};
+static int parser_action_row1698[] = {
        33,
-       -1, 3, 1283,
+       -1, 3, 1697,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 810,
-       12, 0, 689,
-       15, 0, 690,
-       18, 0, 691,
-       24, 0, 692,
-       27, 0, 694,
-       28, 0, 695,
-       29, 0, 696,
-       34, 0, 697,
-       35, 0, 698,
-       36, 0, 699,
-       37, 0, 700,
-       38, 0, 701,
-       39, 0, 45,
-       42, 0, 702,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 703,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 704,
-       82, 0, 705,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 55,
+       82, 0, 56,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1285[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
-};
-static int parser_action_row1286[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+       89, 0, 61
 };
-static int parser_action_row1287[] = {
+static int parser_action_row1699[] = {
        1,
-       -1, 1, 699
+       -1, 1, 163
 };
-static int parser_action_row1288[] = {
+static int parser_action_row1700[] = {
        2,
-       -1, 1, 337,
-       26, 1, 630
+       -1, 3, 1699,
+       14, 0, 1832
 };
-static int parser_action_row1289[] = {
-       2,
-       -1, 1, 336,
-       26, 1, 629
+static int parser_action_row1701[] = {
+       3,
+       -1, 3, 1700,
+       29, 0, 39,
+       92, 0, 62
 };
-static int parser_action_row1290[] = {
+static int parser_action_row1702[] = {
        1,
-       -1, 1, 660
+       -1, 1, 185
 };
-static int parser_action_row1291[] = {
-       2,
-       -1, 1, 372,
-       26, 1, 658
+static int parser_action_row1703[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row1292[] = {
-       4,
-       -1, 1, 474,
-       59, 0, 1410,
-       60, 0, 215,
-       61, 0, 216
+static int parser_action_row1704[] = {
+       1,
+       -1, 1, 271
 };
-static int parser_action_row1293[] = {
-       3,
-       -1, 1, 366,
-       26, 1, 652,
-       79, 0, 499
+static int parser_action_row1705[] = {
+       4,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       56, 0, 330
 };
-static int parser_action_row1294[] = {
-       23,
-       -1, 3, 1293,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
-       82, 0, 179,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
+static int parser_action_row1706[] = {
+       2,
+       -1, 3, 1705,
+       52, 0, 1836
 };
-static int parser_action_row1295[] = {
-       23,
-       -1, 3, 1294,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
-       82, 0, 179,
+static int parser_action_row1707[] = {
+       33,
+       -1, 3, 1706,
+       0, 0, 1,
+       1, 0, 2,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 55,
+       82, 0, 56,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1296[] = {
+static int parser_action_row1708[] = {
        2,
-       -1, 3, 1295,
-       15, 0, 1415
+       -1, 3, 1707,
+       14, 0, 1838
 };
-static int parser_action_row1297[] = {
+static int parser_action_row1709[] = {
        1,
-       -1, 1, 428
-};
-static int parser_action_row1298[] = {
-       2,
-       -1, 3, 1297,
-       50, 0, 191
+       -1, 1, 323
 };
-static int parser_action_row1299[] = {
+static int parser_action_row1710[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1300[] = {
-       31,
-       -1, 1, 391,
-       9, 0, 984,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+static int parser_action_row1711[] = {
+       2,
+       -1, 1, 253,
+       8, 0, 1840
+};
+static int parser_action_row1712[] = {
+       33,
+       -1, 3, 1711,
+       0, 0, 1,
+       1, 0, 2,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -13367,367 +17142,472 @@ static int parser_action_row1300[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1301[] = {
+static int parser_action_row1713[] = {
        1,
-       -1, 1, 667
+       -1, 1, 362
 };
-static int parser_action_row1302[] = {
+static int parser_action_row1714[] = {
        2,
-       -1, 3, 1301,
-       50, 0, 191
+       -1, 3, 1713,
+       16, 0, 1842
 };
-static int parser_action_row1303[] = {
+static int parser_action_row1715[] = {
        23,
-       -1, 3, 1302,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
+       -1, 3, 1714,
+       11, 0, 170,
+       23, 0, 1843,
+       32, 0, 1844,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1304[] = {
-       2,
-       -1, 3, 1303,
-       25, 0, 1420
-};
-static int parser_action_row1305[] = {
-       1,
-       -1, 1, 570
-};
-static int parser_action_row1306[] = {
+static int parser_action_row1716[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1307[] = {
+static int parser_action_row1717[] = {
        1,
-       -1, 1, 605
-};
-static int parser_action_row1308[] = {
-       2,
-       -1, 3, 1307,
-       64, 0, 1305
-};
-static int parser_action_row1309[] = {
-       5,
-       -1, 3, 1308,
-       12, 0, 1328,
-       47, 0, 1329,
-       81, 0, 1330,
-       82, 0, 1422
+       -1, 1, 233
 };
-static int parser_action_row1310[] = {
+static int parser_action_row1718[] = {
        1,
-       -1, 1, 578
+       -1, 1, 329
 };
-static int parser_action_row1311[] = {
-       21,
-       -1, 3, 1310,
-       12, 0, 863,
-       33, 0, 865,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+static int parser_action_row1719[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row1312[] = {
+static int parser_action_row1720[] = {
        1,
-       -1, 1, 577
+       -1, 1, 231
 };
-static int parser_action_row1313[] = {
+static int parser_action_row1721[] = {
        3,
-       -1, 1, 588,
-       65, 0, 1047,
-       66, 0, 1048
+       -1, 1, 227,
+       13, 0, 456,
+       58, 0, 1852
 };
-static int parser_action_row1314[] = {
-       3,
-       -1, 1, 591,
-       65, 0, 1047,
-       66, 0, 1048
+static int parser_action_row1722[] = {
+       23,
+       -1, 3, 1721,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row1315[] = {
+static int parser_action_row1723[] = {
        3,
-       -1, 1, 584,
-       65, 0, 1047,
-       66, 0, 1048
-};
-static int parser_action_row1316[] = {
-       1,
-       -1, 1, 593
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row1317[] = {
-       4,
-       -1, 1, 595,
-       67, 0, 1056,
-       68, 0, 1057,
-       69, 0, 1058
+static int parser_action_row1724[] = {
+       2,
+       -1, 3, 1723,
+       19, 0, 1856
 };
-static int parser_action_row1318[] = {
+static int parser_action_row1725[] = {
        4,
-       -1, 1, 596,
-       67, 0, 1056,
-       68, 0, 1057,
-       69, 0, 1058
+       -1, 3, 1724,
+       3, 0, 722,
+       29, 0, 39,
+       92, 0, 62
 };
-static int parser_action_row1319[] = {
+static int parser_action_row1726[] = {
        3,
-       -1, 1, 583,
-       65, 0, 1047,
-       66, 0, 1048
+       -1, 3, 1725,
+       29, 0, 39,
+       92, 0, 62
 };
-static int parser_action_row1320[] = {
-       3,
-       -1, 1, 585,
-       65, 0, 1047,
-       66, 0, 1048
+static int parser_action_row1727[] = {
+       1,
+       -1, 1, 307
 };
-static int parser_action_row1321[] = {
-       3,
-       -1, 1, 586,
-       65, 0, 1047,
-       66, 0, 1048
+static int parser_action_row1728[] = {
+       5,
+       -1, 1, 273,
+       3, 0, 722,
+       29, 0, 39,
+       85, 0, 1860,
+       92, 0, 62
 };
-static int parser_action_row1322[] = {
+static int parser_action_row1729[] = {
        3,
-       -1, 1, 587,
-       65, 0, 1047,
-       66, 0, 1048
+       -1, 3, 1728,
+       29, 0, 39,
+       92, 0, 62
 };
-static int parser_action_row1323[] = {
-       3,
-       -1, 1, 589,
-       65, 0, 1047,
-       66, 0, 1048
+static int parser_action_row1730[] = {
+       1,
+       -1, 1, 309
 };
-static int parser_action_row1324[] = {
-       3,
-       -1, 1, 590,
-       65, 0, 1047,
-       66, 0, 1048
+static int parser_action_row1731[] = {
+       1,
+       -1, 1, 313
 };
-static int parser_action_row1325[] = {
+static int parser_action_row1732[] = {
+       23,
+       -1, 3, 1731,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1733[] = {
        3,
-       -1, 1, 592,
-       65, 0, 1047,
-       66, 0, 1048
+       -1, 3, 1732,
+       0, 0, 87,
+       1, 0, 88
 };
-static int parser_action_row1326[] = {
+static int parser_action_row1734[] = {
        1,
-       -1, 1, 598
+       -1, 1, 1245
 };
-static int parser_action_row1327[] = {
+static int parser_action_row1735[] = {
        1,
-       -1, 1, 599
+       -1, 1, 810
 };
-static int parser_action_row1328[] = {
+static int parser_action_row1736[] = {
        1,
-       -1, 1, 600
+       -1, 1, 815
 };
-static int parser_action_row1329[] = {
+static int parser_action_row1737[] = {
        2,
-       -1, 1, 506,
-       52, 0, 272
+       -1, 1, 631,
+       51, 0, 282
 };
-static int parser_action_row1330[] = {
+static int parser_action_row1738[] = {
+       4,
+       -1, 1, 854,
+       58, 0, 1867,
+       59, 0, 220,
+       60, 0, 221
+};
+static int parser_action_row1739[] = {
+       1,
+       -1, 1, 811
+};
+static int parser_action_row1740[] = {
+       1,
+       -1, 1, 816
+};
+static int parser_action_row1741[] = {
+       1,
+       -1, 1, 133
+};
+static int parser_action_row1742[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1331[] = {
-       2,
-       -1, 1, 506,
-       52, 0, 272
+static int parser_action_row1743[] = {
+       1,
+       -1, 1, 591
 };
-static int parser_action_row1332[] = {
+static int parser_action_row1744[] = {
+       3,
+       -1, 3, 1743,
+       0, 0, 87,
+       1, 0, 88
+};
+static int parser_action_row1745[] = {
        1,
-       -1, 1, 608
+       -1, 1, 614
 };
-static int parser_action_row1333[] = {
+static int parser_action_row1746[] = {
+       21,
+       -1, 3, 1745,
+       11, 0, 122,
+       23, 0, 123,
+       32, 0, 124,
+       38, 0, 125,
+       40, 0, 126,
+       41, 0, 127,
+       42, 0, 128,
+       43, 0, 129,
+       44, 0, 130,
+       45, 0, 131,
+       48, 0, 132,
+       65, 0, 134,
+       80, 0, 54,
+       81, 0, 135,
+       82, 0, 136,
+       83, 0, 137,
+       84, 0, 138,
+       85, 0, 139,
+       86, 0, 60,
+       89, 0, 140
+};
+static int parser_action_row1747[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1748[] = {
        1,
-       -1, 1, 388
+       -1, 1, 881
 };
-static int parser_action_row1334[] = {
+static int parser_action_row1749[] = {
        1,
-       -1, 1, 379
+       -1, 1, 132
 };
-static int parser_action_row1335[] = {
+static int parser_action_row1750[] = {
        1,
-       -1, 1, 385
+       -1, 1, 104
 };
-static int parser_action_row1336[] = {
-       2,
-       -1, 1, 283,
-       59, 1, 566
+static int parser_action_row1751[] = {
+       8,
+       -1, 1, 331,
+       8, 0, 1873,
+       12, 0, 892,
+       15, 0, 893,
+       16, 0, 894,
+       20, 0, 32,
+       21, 0, 33,
+       22, 0, 34
 };
-static int parser_action_row1337[] = {
+static int parser_action_row1752[] = {
        1,
-       -1, 1, 314
+       -1, 1, 120
 };
-static int parser_action_row1338[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+static int parser_action_row1753[] = {
+       1,
+       -1, 1, 128
 };
-static int parser_action_row1339[] = {
+static int parser_action_row1754[] = {
        1,
-       -1, 1, 322
+       -1, 1, 134
 };
-static int parser_action_row1340[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+static int parser_action_row1755[] = {
+       1,
+       -1, 1, 1009
 };
-static int parser_action_row1341[] = {
-       3,
-       -1, 3, 1340,
-       0, 0, 1,
-       1, 0, 2
+static int parser_action_row1756[] = {
+       1,
+       -1, 1, 1008
 };
-static int parser_action_row1342[] = {
+static int parser_action_row1757[] = {
        23,
-       -1, 3, 1341,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 1756,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
-       81, 0, 178,
+       81, 0, 374,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1343[] = {
-       1,
-       -1, 1, 294
+       89, 0, 61
 };
-static int parser_action_row1344[] = {
+static int parser_action_row1758[] = {
        2,
-       -1, 1, 293,
-       57, 0, 312
+       -1, 3, 1757,
+       25, 0, 1875
 };
-static int parser_action_row1345[] = {
+static int parser_action_row1759[] = {
        1,
-       -1, 1, 307
+       -1, 1, 1027
 };
-static int parser_action_row1346[] = {
-       3,
-       -1, 3, 1345,
-       0, 0, 1,
-       1, 0, 2
+static int parser_action_row1760[] = {
+       2,
+       -1, 3, 1759,
+       49, 0, 191
 };
-static int parser_action_row1347[] = {
-       1,
-       -1, 1, 110
+static int parser_action_row1761[] = {
+       2,
+       -1, 3, 1760,
+       29, 0, 1877
 };
-static int parser_action_row1348[] = {
-       1,
-       -1, 1, 109
+static int parser_action_row1762[] = {
+       23,
+       -1, 3, 1761,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row1349[] = {
-       1,
-       -1, 1, 101
+static int parser_action_row1763[] = {
+       23,
+       -1, 3, 1762,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row1350[] = {
-       6,
-       -1, 3, 1349,
-       3, 0, 638,
-       14, 0, 1433,
-       15, 0, 1434,
-       30, 0, 39,
-       92, 0, 62
+static int parser_action_row1764[] = {
+       23,
+       -1, 3, 1763,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 374,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row1351[] = {
-       2,
-       -1, 3, 1350,
-       59, 0, 1437
+static int parser_action_row1765[] = {
+       1,
+       -1, 1, 984
 };
-static int parser_action_row1352[] = {
+static int parser_action_row1766[] = {
        1,
-       -1, 1, 203
+       -1, 1, 1011
 };
-static int parser_action_row1353[] = {
-       2,
-       -1, 3, 1352,
-       15, 0, 1438
+static int parser_action_row1767[] = {
+       1,
+       -1, 1, 1016
 };
-static int parser_action_row1354[] = {
+static int parser_action_row1768[] = {
        33,
-       -1, 3, 1353,
+       -1, 3, 1767,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 506,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 155,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -13735,150 +17615,166 @@ static int parser_action_row1354[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1355[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+static int parser_action_row1769[] = {
+       1,
+       -1, 1, 510
 };
-static int parser_action_row1356[] = {
+static int parser_action_row1770[] = {
+       23,
+       -1, 3, 1769,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1771[] = {
        2,
-       -1, 1, 183,
-       59, 0, 1441
+       -1, 1, 459,
+       25, 1, 994
 };
-static int parser_action_row1357[] = {
-       7,
-       -1, 1, 181,
-       13, 0, 1257,
-       17, 1, 258,
-       21, 0, 32,
-       22, 0, 33,
-       23, 0, 34,
-       59, 0, 1442
+static int parser_action_row1772[] = {
+       1,
+       -1, 1, 1000
 };
-static int parser_action_row1358[] = {
+static int parser_action_row1773[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1359[] = {
-       2,
-       -1, 1, 155,
-       59, 0, 1445
+static int parser_action_row1774[] = {
+       1,
+       -1, 1, 895
 };
-static int parser_action_row1360[] = {
-       6,
-       -1, 3, 1359,
-       3, 0, 638,
-       14, 0, 1446,
-       30, 0, 39,
-       86, 0, 1447,
-       92, 0, 62
+static int parser_action_row1775[] = {
+       2,
+       -1, 3, 1774,
+       81, 0, 1885
 };
-static int parser_action_row1361[] = {
+static int parser_action_row1776[] = {
        2,
-       -1, 3, 1360,
-       20, 0, 1450
+       -1, 1, 739,
+       63, 1, 741
 };
-static int parser_action_row1362[] = {
-       4,
-       -1, 3, 1361,
-       3, 0, 638,
-       30, 0, 39,
-       92, 0, 62
+static int parser_action_row1777[] = {
+       1,
+       -1, 1, 712
 };
-static int parser_action_row1363[] = {
-       3,
-       -1, 3, 1362,
-       30, 0, 39,
-       92, 0, 62
+static int parser_action_row1778[] = {
+       2,
+       -1, 1, 701,
+       79, 0, 205
 };
-static int parser_action_row1364[] = {
+static int parser_action_row1779[] = {
        1,
-       -1, 1, 237
+       -1, 1, 702
 };
-static int parser_action_row1365[] = {
-       3,
-       -1, 1, 149,
-       57, 0, 312,
-       59, 0, 1454
+static int parser_action_row1780[] = {
+       1,
+       -1, 1, 747
 };
-static int parser_action_row1366[] = {
+static int parser_action_row1781[] = {
        2,
-       -1, 3, 1365,
-       82, 0, 1456
-};
-static int parser_action_row1367[] = {
-       3,
-       -1, 1, 152,
-       57, 0, 312,
-       59, 0, 1457
+       -1, 3, 1780,
+       51, 0, 1887
 };
-static int parser_action_row1368[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+static int parser_action_row1782[] = {
+       1,
+       -1, 1, 743
 };
-static int parser_action_row1369[] = {
+static int parser_action_row1783[] = {
        2,
-       -1, 1, 156,
-       59, 0, 1460
+       -1, 3, 1782,
+       47, 0, 1888
 };
-static int parser_action_row1370[] = {
+static int parser_action_row1784[] = {
        3,
-       -1, 1, 151,
-       57, 0, 312,
-       59, 0, 1461
+       -1, 3, 1783,
+       47, 0, 390,
+       80, 0, 391
 };
-static int parser_action_row1371[] = {
+static int parser_action_row1785[] = {
+       1,
+       -1, 1, 384
+};
+static int parser_action_row1786[] = {
        3,
-       -1, 1, 531,
+       -1, 3, 1785,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1372[] = {
-       2,
-       -1, 1, 158,
-       59, 0, 1464
+static int parser_action_row1787[] = {
+       1,
+       -1, 1, 368
 };
-static int parser_action_row1373[] = {
-       4,
-       -1, 3, 1372,
-       5, 0, 1465,
-       19, 0, 1466,
-       20, 0, 1467
+static int parser_action_row1788[] = {
+       1,
+       -1, 1, 385
 };
-static int parser_action_row1374[] = {
+static int parser_action_row1789[] = {
+       1,
+       -1, 1, 135
+};
+static int parser_action_row1790[] = {
+       10,
+       -1, 3, 1789,
+       0, 0, 87,
+       1, 0, 88,
+       3, 0, 383,
+       5, 0, 1891,
+       15, 0, 384,
+       16, 0, 385,
+       18, 0, 1892,
+       19, 0, 1893,
+       81, 0, 387
+};
+static int parser_action_row1791[] = {
        33,
-       -1, 3, 1373,
+       -1, 3, 1790,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 506,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -13886,63 +17782,64 @@ static int parser_action_row1374[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1375[] = {
+static int parser_action_row1792[] = {
+       1,
+       -1, 1, 164
+};
+static int parser_action_row1793[] = {
+       2,
+       -1, 3, 1792,
+       14, 0, 1895
+};
+static int parser_action_row1794[] = {
        3,
-       -1, 3, 1374,
-       30, 0, 39,
+       -1, 3, 1793,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1376[] = {
+static int parser_action_row1795[] = {
        1,
-       -1, 1, 142
+       -1, 1, 186
 };
-static int parser_action_row1377[] = {
+static int parser_action_row1796[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1378[] = {
-       4,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2,
-       57, 0, 312
-};
-static int parser_action_row1379[] = {
-       2,
-       -1, 3, 1378,
-       53, 0, 1472
+static int parser_action_row1797[] = {
+       1,
+       -1, 1, 272
 };
-static int parser_action_row1380[] = {
+static int parser_action_row1798[] = {
        33,
-       -1, 3, 1379,
+       -1, 3, 1797,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 506,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -13950,477 +17847,333 @@ static int parser_action_row1380[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1381[] = {
+static int parser_action_row1799[] = {
        2,
-       -1, 1, 194,
-       9, 0, 1474
-};
-static int parser_action_row1382[] = {
-       1,
-       -1, 1, 289
+       -1, 3, 1798,
+       14, 0, 1899
 };
-static int parser_action_row1383[] = {
+static int parser_action_row1800[] = {
        2,
-       -1, 3, 1382,
-       17, 0, 1475
+       -1, 1, 254,
+       8, 0, 1900
 };
-static int parser_action_row1384[] = {
+static int parser_action_row1801[] = {
+       33,
+       -1, 3, 1800,
+       0, 0, 1,
+       1, 0, 2,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 55,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1802[] = {
        23,
-       -1, 3, 1383,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1801,
+       11, 0, 170,
+       23, 0, 1843,
+       32, 0, 1844,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1385[] = {
+static int parser_action_row1803[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1386[] = {
+static int parser_action_row1804[] = {
        1,
-       -1, 1, 256
+       -1, 1, 234
 };
-static int parser_action_row1387[] = {
+static int parser_action_row1805[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1388[] = {
-       2,
-       -1, 1, 184,
-       59, 0, 1479
+static int parser_action_row1806[] = {
+       1,
+       -1, 1, 232
 };
-static int parser_action_row1389[] = {
+static int parser_action_row1807[] = {
+       3,
+       -1, 1, 228,
+       13, 0, 456,
+       58, 0, 1905
+};
+static int parser_action_row1808[] = {
        23,
-       -1, 3, 1388,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1807,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1390[] = {
+static int parser_action_row1809[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1391[] = {
+static int parser_action_row1810[] = {
        2,
-       -1, 3, 1390,
-       20, 0, 1482
+       -1, 3, 1809,
+       19, 0, 1909
 };
-static int parser_action_row1392[] = {
+static int parser_action_row1811[] = {
        4,
-       -1, 3, 1391,
-       3, 0, 638,
-       30, 0, 39,
+       -1, 3, 1810,
+       3, 0, 722,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1393[] = {
+static int parser_action_row1812[] = {
        3,
-       -1, 3, 1392,
-       30, 0, 39,
+       -1, 3, 1811,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1394[] = {
+static int parser_action_row1813[] = {
        1,
-       -1, 1, 238
+       -1, 1, 308
 };
-static int parser_action_row1395[] = {
+static int parser_action_row1814[] = {
        5,
-       -1, 1, 204,
-       3, 0, 638,
-       30, 0, 39,
-       86, 0, 1486,
+       -1, 1, 274,
+       3, 0, 722,
+       29, 0, 39,
+       85, 0, 1913,
        92, 0, 62
 };
-static int parser_action_row1396[] = {
+static int parser_action_row1815[] = {
        3,
-       -1, 3, 1395,
-       30, 0, 39,
+       -1, 3, 1814,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1397[] = {
+static int parser_action_row1816[] = {
        1,
-       -1, 1, 240
+       -1, 1, 310
 };
-static int parser_action_row1398[] = {
+static int parser_action_row1817[] = {
        1,
-       -1, 1, 244
+       -1, 1, 314
 };
-static int parser_action_row1399[] = {
+static int parser_action_row1818[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1400[] = {
-       1,
-       -1, 1, 495
+static int parser_action_row1819[] = {
+       2,
+       -1, 1, 200,
+       58, 0, 1918
 };
-static int parser_action_row1401[] = {
-       21,
-       -1, 3, 1400,
-       12, 0, 122,
-       24, 0, 123,
-       33, 0, 124,
-       39, 0, 125,
-       41, 0, 126,
-       42, 0, 127,
-       43, 0, 128,
-       44, 0, 129,
-       45, 0, 130,
-       46, 0, 131,
-       49, 0, 132,
-       66, 0, 134,
-       80, 0, 54,
-       81, 0, 135,
-       82, 0, 136,
-       83, 0, 137,
-       84, 0, 138,
-       85, 0, 139,
-       86, 0, 140,
-       87, 0, 61
+static int parser_action_row1820[] = {
+       3,
+       -1, 1, 196,
+       56, 0, 330,
+       58, 0, 1919
 };
-static int parser_action_row1402[] = {
+static int parser_action_row1821[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1403[] = {
-       1,
-       -1, 1, 769
-};
-static int parser_action_row1404[] = {
-       1,
-       -1, 1, 102
-};
-static int parser_action_row1405[] = {
-       1,
-       -1, 1, 676
-};
-static int parser_action_row1406[] = {
-       2,
-       -1, 3, 1405,
-       26, 0, 1493
-};
-static int parser_action_row1407[] = {
-       1,
-       -1, 1, 693
-};
-static int parser_action_row1408[] = {
-       2,
-       -1, 3, 1407,
-       50, 0, 191
-};
-static int parser_action_row1409[] = {
+static int parser_action_row1822[] = {
        2,
-       -1, 3, 1408,
-       30, 0, 1495
-};
-static int parser_action_row1410[] = {
-       23,
-       -1, 3, 1409,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
-       82, 0, 179,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1411[] = {
-       23,
-       -1, 3, 1410,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
-       82, 0, 179,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
+       -1, 1, 203,
+       58, 0, 1922
 };
-static int parser_action_row1412[] = {
+static int parser_action_row1823[] = {
        23,
-       -1, 3, 1411,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 355,
-       82, 0, 179,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1413[] = {
-       1,
-       -1, 1, 654
-};
-static int parser_action_row1414[] = {
-       1,
-       -1, 1, 677
-};
-static int parser_action_row1415[] = {
-       1,
-       -1, 1, 682
-};
-static int parser_action_row1416[] = {
-       33,
-       -1, 3, 1415,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 155,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       -1, 3, 1822,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
-       81, 0, 55,
-       82, 0, 56,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1417[] = {
-       1,
-       -1, 1, 426
-};
-static int parser_action_row1418[] = {
-       23,
-       -1, 3, 1417,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1419[] = {
-       2,
-       -1, 1, 379,
-       26, 1, 664
-};
-static int parser_action_row1420[] = {
-       1,
-       -1, 1, 670
+       89, 0, 61
 };
-static int parser_action_row1421[] = {
+static int parser_action_row1824[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1422[] = {
-       2,
-       -1, 3, 1421,
-       81, 0, 1503
-};
-static int parser_action_row1423[] = {
-       2,
-       -1, 1, 606,
-       64, 1, 608
-};
-static int parser_action_row1424[] = {
-       1,
-       -1, 1, 579
-};
-static int parser_action_row1425[] = {
-       1,
-       -1, 1, 614
-};
-static int parser_action_row1426[] = {
-       2,
-       -1, 3, 1425,
-       52, 0, 1504
-};
-static int parser_action_row1427[] = {
-       1,
-       -1, 1, 610
+static int parser_action_row1825[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row1428[] = {
+static int parser_action_row1826[] = {
        2,
-       -1, 3, 1427,
-       48, 0, 1505
-};
-static int parser_action_row1429[] = {
-       3,
-       -1, 3, 1428,
-       48, 0, 361,
-       80, 0, 362
+       -1, 1, 202,
+       58, 0, 1926
 };
-static int parser_action_row1430[] = {
-       1,
-       -1, 1, 308
+static int parser_action_row1827[] = {
+       23,
+       -1, 3, 1826,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row1431[] = {
+static int parser_action_row1828[] = {
        3,
-       -1, 3, 1430,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1432[] = {
+static int parser_action_row1829[] = {
        1,
-       -1, 1, 295
+       -1, 1, 165
 };
-static int parser_action_row1433[] = {
+static int parser_action_row1830[] = {
        1,
-       -1, 1, 309
+       -1, 1, 167
 };
-static int parser_action_row1434[] = {
-       4,
-       -1, 3, 1433,
-       5, 0, 1508,
-       19, 0, 1509,
-       20, 0, 1510
+static int parser_action_row1831[] = {
+       5,
+       -1, 1, 169,
+       3, 0, 722,
+       29, 0, 39,
+       85, 0, 1929,
+       92, 0, 62
 };
-static int parser_action_row1435[] = {
+static int parser_action_row1832[] = {
+       2,
+       -1, 1, 153,
+       8, 0, 1932
+};
+static int parser_action_row1833[] = {
        33,
-       -1, 3, 1434,
+       -1, 3, 1832,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 506,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -14428,51 +18181,83 @@ static int parser_action_row1435[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1436[] = {
-       3,
-       -1, 3, 1435,
-       30, 0, 39,
-       92, 0, 62
+       89, 0, 61
 };
-static int parser_action_row1437[] = {
+static int parser_action_row1834[] = {
        1,
-       -1, 1, 143
+       -1, 1, 187
 };
-static int parser_action_row1438[] = {
+static int parser_action_row1835[] = {
+       23,
+       -1, 3, 1834,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1836[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1439[] = {
+static int parser_action_row1837[] = {
+       4,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       56, 0, 330
+};
+static int parser_action_row1838[] = {
+       2,
+       -1, 1, 255,
+       8, 0, 1937
+};
+static int parser_action_row1839[] = {
        33,
-       -1, 3, 1438,
+       -1, 3, 1838,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 506,
-       12, 0, 28,
-       15, 0, 30,
-       18, 0, 31,
-       24, 0, 35,
-       27, 0, 36,
-       28, 0, 37,
-       29, 0, 38,
-       34, 0, 40,
-       35, 0, 41,
-       36, 0, 42,
-       37, 0, 43,
-       38, 0, 44,
-       39, 0, 45,
-       42, 0, 46,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 51,
-       52, 0, 52,
-       54, 0, 53,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
        80, 0, 54,
        81, 0, 55,
        82, 0, 56,
@@ -14480,277 +18265,507 @@ static int parser_action_row1439[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1440[] = {
+static int parser_action_row1840[] = {
+       1,
+       -1, 1, 324
+};
+static int parser_action_row1841[] = {
+       1,
+       -1, 1, 261
+};
+static int parser_action_row1842[] = {
        2,
-       -1, 1, 195,
-       9, 0, 1515
+       -1, 1, 257,
+       8, 0, 1939
 };
-static int parser_action_row1441[] = {
-       23,
-       -1, 3, 1440,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
-       82, 0, 179,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
+static int parser_action_row1843[] = {
+       1,
+       -1, 1, 330
 };
-static int parser_action_row1442[] = {
+static int parser_action_row1844[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1443[] = {
+static int parser_action_row1845[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1444[] = {
+static int parser_action_row1846[] = {
+       11,
+       -1, 1, 1175,
+       39, 0, 1942,
+       64, 0, 354,
+       65, 0, 355,
+       69, 0, 1943,
+       70, 0, 1944,
+       71, 0, 1945,
+       72, 0, 1946,
+       74, 0, 1947,
+       75, 0, 1948,
+       77, 0, 1949
+};
+static int parser_action_row1847[] = {
        2,
-       -1, 1, 185,
-       59, 0, 1519
+       -1, 1, 237,
+       13, 0, 456
 };
-static int parser_action_row1445[] = {
+static int parser_action_row1848[] = {
+       3,
+       -1, 1, 1167,
+       30, 0, 1951,
+       31, 0, 1952
+};
+static int parser_action_row1849[] = {
+       1,
+       -1, 1, 1169
+};
+static int parser_action_row1850[] = {
+       3,
+       -1, 1, 1173,
+       73, 0, 1953,
+       76, 0, 1954
+};
+static int parser_action_row1851[] = {
        23,
-       -1, 3, 1444,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1850,
+       11, 0, 170,
+       23, 0, 1843,
+       32, 0, 1844,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1446[] = {
+static int parser_action_row1852[] = {
+       23,
+       -1, 3, 1851,
+       11, 0, 170,
+       23, 0, 1843,
+       32, 0, 1844,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1853[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1447[] = {
-       2,
-       -1, 3, 1446,
-       20, 0, 1522
+static int parser_action_row1854[] = {
+       1,
+       -1, 1, 235
 };
-static int parser_action_row1448[] = {
-       4,
-       -1, 3, 1447,
-       3, 0, 638,
-       30, 0, 39,
+static int parser_action_row1855[] = {
+       1,
+       -1, 1, 205
+};
+static int parser_action_row1856[] = {
+       23,
+       -1, 3, 1855,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1857[] = {
+       5,
+       -1, 1, 275,
+       3, 0, 722,
+       29, 0, 39,
+       85, 0, 1959,
        92, 0, 62
 };
-static int parser_action_row1449[] = {
+static int parser_action_row1858[] = {
        3,
-       -1, 3, 1448,
-       30, 0, 39,
+       -1, 3, 1857,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1450[] = {
+static int parser_action_row1859[] = {
        1,
-       -1, 1, 239
+       -1, 1, 311
 };
-static int parser_action_row1451[] = {
-       5,
-       -1, 1, 205,
-       3, 0, 638,
-       30, 0, 39,
-       86, 0, 1526,
+static int parser_action_row1860[] = {
+       1,
+       -1, 1, 315
+};
+static int parser_action_row1861[] = {
+       4,
+       -1, 1, 277,
+       3, 0, 722,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1452[] = {
+static int parser_action_row1862[] = {
        3,
-       -1, 3, 1451,
-       30, 0, 39,
+       -1, 1, 281,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1453[] = {
+static int parser_action_row1863[] = {
        1,
-       -1, 1, 241
+       -1, 1, 289
 };
-static int parser_action_row1454[] = {
+static int parser_action_row1864[] = {
        1,
-       -1, 1, 245
+       -1, 1, 317
 };
-static int parser_action_row1455[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+static int parser_action_row1865[] = {
+       1,
+       -1, 1, 1128
 };
-static int parser_action_row1456[] = {
+static int parser_action_row1866[] = {
+       1,
+       -1, 1, 1246
+};
+static int parser_action_row1867[] = {
+       4,
+       -1, 1, 856,
+       58, 0, 1966,
+       59, 0, 220,
+       60, 0, 221
+};
+static int parser_action_row1868[] = {
+       23,
+       -1, 3, 1867,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1869[] = {
+       23,
+       -1, 3, 1868,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1870[] = {
        2,
-       -1, 1, 157,
-       59, 0, 1531
+       -1, 3, 1869,
+       52, 0, 1970
 };
-static int parser_action_row1457[] = {
-       3,
-       -1, 1, 153,
-       57, 0, 312,
-       59, 0, 1532
+static int parser_action_row1871[] = {
+       1,
+       -1, 1, 615
 };
-static int parser_action_row1458[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+static int parser_action_row1872[] = {
+       1,
+       -1, 1, 821
 };
-static int parser_action_row1459[] = {
+static int parser_action_row1873[] = {
        2,
-       -1, 1, 160,
-       59, 0, 1535
+       -1, 3, 1872,
+       52, 0, 1971
 };
-static int parser_action_row1460[] = {
-       23,
-       -1, 3, 1459,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
-       82, 0, 179,
+static int parser_action_row1874[] = {
+       1,
+       -1, 1, 136
+};
+static int parser_action_row1875[] = {
+       1,
+       -1, 1, 1010
+};
+static int parser_action_row1876[] = {
+       33,
+       -1, 3, 1875,
+       0, 0, 1,
+       1, 0, 2,
+       8, 0, 1417,
+       11, 0, 786,
+       14, 0, 787,
+       17, 0, 788,
+       23, 0, 789,
+       26, 0, 791,
+       27, 0, 792,
+       28, 0, 793,
+       33, 0, 794,
+       34, 0, 795,
+       35, 0, 796,
+       36, 0, 797,
+       37, 0, 798,
+       38, 0, 45,
+       41, 0, 799,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 800,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 801,
+       82, 0, 802,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1461[] = {
+static int parser_action_row1877[] = {
+       2,
+       -1, 1, 507,
+       25, 1, 1026
+};
+static int parser_action_row1878[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1462[] = {
+static int parser_action_row1879[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1463[] = {
+static int parser_action_row1880[] = {
+       1,
+       -1, 1, 1013
+};
+static int parser_action_row1881[] = {
+       1,
+       -1, 1, 1018
+};
+static int parser_action_row1882[] = {
+       1,
+       -1, 1, 511
+};
+static int parser_action_row1883[] = {
        2,
-       -1, 1, 159,
-       59, 0, 1539
+       -1, 3, 1882,
+       49, 0, 191
 };
-static int parser_action_row1464[] = {
+static int parser_action_row1884[] = {
+       1,
+       -1, 1, 523
+};
+static int parser_action_row1885[] = {
        23,
-       -1, 3, 1463,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1884,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1465[] = {
+static int parser_action_row1886[] = {
+       2,
+       -1, 1, 631,
+       51, 0, 282
+};
+static int parser_action_row1887[] = {
+       1,
+       -1, 1, 703
+};
+static int parser_action_row1888[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1466[] = {
+static int parser_action_row1889[] = {
        1,
-       -1, 1, 122
+       -1, 1, 399
 };
-static int parser_action_row1467[] = {
+static int parser_action_row1890[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1891[] = {
        1,
-       -1, 1, 124
+       -1, 1, 386
 };
-static int parser_action_row1468[] = {
+static int parser_action_row1892[] = {
+       1,
+       -1, 1, 166
+};
+static int parser_action_row1893[] = {
+       1,
+       -1, 1, 168
+};
+static int parser_action_row1894[] = {
        5,
-       -1, 1, 126,
-       3, 0, 638,
-       30, 0, 39,
-       86, 0, 1542,
+       -1, 1, 170,
+       3, 0, 722,
+       29, 0, 39,
+       85, 0, 1980,
        92, 0, 62
 };
-static int parser_action_row1469[] = {
+static int parser_action_row1895[] = {
        2,
-       -1, 1, 116,
-       9, 0, 1545
+       -1, 1, 154,
+       8, 0, 1983
 };
-static int parser_action_row1470[] = {
+static int parser_action_row1896[] = {
+       33,
+       -1, 3, 1895,
+       0, 0, 1,
+       1, 0, 2,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 55,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1897[] = {
        1,
-       -1, 1, 144
+       -1, 1, 188
 };
-static int parser_action_row1471[] = {
+static int parser_action_row1898[] = {
        23,
-       -1, 3, 1470,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 1897,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
        81, 0, 178,
        82, 0, 179,
@@ -14758,1428 +18773,1864 @@ static int parser_action_row1471[] = {
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
+};
+static int parser_action_row1899[] = {
+       2,
+       -1, 1, 256,
+       8, 0, 1986
+};
+static int parser_action_row1900[] = {
+       33,
+       -1, 3, 1899,
+       0, 0, 1,
+       1, 0, 2,
+       8, 0, 540,
+       11, 0, 28,
+       14, 0, 30,
+       17, 0, 31,
+       23, 0, 35,
+       26, 0, 36,
+       27, 0, 37,
+       28, 0, 38,
+       33, 0, 40,
+       34, 0, 41,
+       35, 0, 42,
+       36, 0, 43,
+       37, 0, 44,
+       38, 0, 45,
+       41, 0, 46,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 51,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 55,
+       82, 0, 56,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row1472[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
-};
-static int parser_action_row1473[] = {
-       4,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2,
-       57, 0, 312
-};
-static int parser_action_row1474[] = {
-       2,
-       -1, 1, 196,
-       9, 0, 1549
-};
-static int parser_action_row1475[] = {
+static int parser_action_row1901[] = {
        1,
-       -1, 1, 198
+       -1, 1, 262
 };
-static int parser_action_row1476[] = {
-       1,
-       -1, 1, 257
+static int parser_action_row1902[] = {
+       2,
+       -1, 1, 258,
+       8, 0, 1988
 };
-static int parser_action_row1477[] = {
-       1,
-       -1, 1, 186
+static int parser_action_row1903[] = {
+       2,
+       -1, 1, 238,
+       13, 0, 456
 };
-static int parser_action_row1478[] = {
+static int parser_action_row1904[] = {
        23,
-       -1, 3, 1477,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1903,
+       11, 0, 170,
+       23, 0, 1843,
+       32, 0, 1844,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1479[] = {
+static int parser_action_row1905[] = {
        23,
-       -1, 3, 1478,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1904,
+       11, 0, 170,
+       23, 0, 1843,
+       32, 0, 1844,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1480[] = {
+static int parser_action_row1906[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1481[] = {
+static int parser_action_row1907[] = {
        1,
-       -1, 1, 162
+       -1, 1, 236
 };
-static int parser_action_row1482[] = {
+static int parser_action_row1908[] = {
+       1,
+       -1, 1, 206
+};
+static int parser_action_row1909[] = {
        23,
-       -1, 3, 1481,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1908,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1483[] = {
+static int parser_action_row1910[] = {
        5,
-       -1, 1, 206,
-       3, 0, 638,
-       30, 0, 39,
-       86, 0, 1554,
+       -1, 1, 276,
+       3, 0, 722,
+       29, 0, 39,
+       85, 0, 1994,
        92, 0, 62
 };
-static int parser_action_row1484[] = {
+static int parser_action_row1911[] = {
        3,
-       -1, 3, 1483,
-       30, 0, 39,
+       -1, 3, 1910,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1485[] = {
+static int parser_action_row1912[] = {
        1,
-       -1, 1, 242
+       -1, 1, 312
 };
-static int parser_action_row1486[] = {
+static int parser_action_row1913[] = {
        1,
-       -1, 1, 246
+       -1, 1, 316
 };
-static int parser_action_row1487[] = {
+static int parser_action_row1914[] = {
        4,
-       -1, 1, 208,
-       3, 0, 638,
-       30, 0, 39,
+       -1, 1, 278,
+       3, 0, 722,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1488[] = {
+static int parser_action_row1915[] = {
        3,
-       -1, 1, 212,
-       30, 0, 39,
+       -1, 1, 282,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1489[] = {
-       1,
-       -1, 1, 220
-};
-static int parser_action_row1490[] = {
+static int parser_action_row1916[] = {
        1,
-       -1, 1, 248
+       -1, 1, 290
 };
-static int parser_action_row1491[] = {
-       2,
-       -1, 3, 1490,
-       53, 0, 1561
-};
-static int parser_action_row1492[] = {
+static int parser_action_row1917[] = {
        1,
-       -1, 1, 717
-};
-static int parser_action_row1493[] = {
-       2,
-       -1, 3, 1492,
-       53, 0, 1562
+       -1, 1, 318
 };
-static int parser_action_row1494[] = {
-       33,
-       -1, 3, 1493,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 1153,
-       12, 0, 689,
-       15, 0, 690,
-       18, 0, 691,
-       24, 0, 692,
-       27, 0, 694,
-       28, 0, 695,
-       29, 0, 696,
-       34, 0, 697,
-       35, 0, 698,
-       36, 0, 699,
-       37, 0, 700,
-       38, 0, 701,
-       39, 0, 45,
-       42, 0, 702,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 703,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 704,
-       82, 0, 705,
+static int parser_action_row1918[] = {
+       23,
+       -1, 3, 1917,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1495[] = {
-       2,
-       -1, 1, 423,
-       26, 1, 692
-};
-static int parser_action_row1496[] = {
+static int parser_action_row1919[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1497[] = {
+static int parser_action_row1920[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1498[] = {
-       1,
-       -1, 1, 679
-};
-static int parser_action_row1499[] = {
-       1,
-       -1, 1, 684
-};
-static int parser_action_row1500[] = {
-       1,
-       -1, 1, 427
-};
-static int parser_action_row1501[] = {
+static int parser_action_row1921[] = {
        2,
-       -1, 3, 1500,
-       50, 0, 191
-};
-static int parser_action_row1502[] = {
-       1,
-       -1, 1, 439
+       -1, 1, 204,
+       58, 0, 2004
 };
-static int parser_action_row1503[] = {
+static int parser_action_row1922[] = {
        23,
-       -1, 3, 1502,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1921,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1504[] = {
-       2,
-       -1, 1, 506,
-       52, 0, 272
-};
-static int parser_action_row1505[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
-};
-static int parser_action_row1506[] = {
-       1,
-       -1, 1, 323
+       89, 0, 61
 };
-static int parser_action_row1507[] = {
+static int parser_action_row1923[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1508[] = {
-       1,
-       -1, 1, 310
-};
-static int parser_action_row1509[] = {
-       1,
-       -1, 1, 123
-};
-static int parser_action_row1510[] = {
-       1,
-       -1, 1, 125
-};
-static int parser_action_row1511[] = {
-       5,
-       -1, 1, 127,
-       3, 0, 638,
-       30, 0, 39,
-       86, 0, 1571,
-       92, 0, 62
-};
-static int parser_action_row1512[] = {
-       2,
-       -1, 1, 117,
-       9, 0, 1574
-};
-static int parser_action_row1513[] = {
+static int parser_action_row1924[] = {
        1,
-       -1, 1, 145
+       -1, 1, 207
 };
-static int parser_action_row1514[] = {
+static int parser_action_row1925[] = {
        23,
-       -1, 3, 1513,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
+       -1, 3, 1924,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
        80, 0, 54,
-       81, 0, 178,
-       82, 0, 179,
-       83, 0, 57,
-       84, 0, 58,
-       85, 0, 59,
-       86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1515[] = {
-       2,
-       -1, 1, 197,
-       9, 0, 1576
-};
-static int parser_action_row1516[] = {
-       1,
-       -1, 1, 199
-};
-static int parser_action_row1517[] = {
-       1,
-       -1, 1, 187
-};
-static int parser_action_row1518[] = {
-       23,
-       -1, 3, 1517,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1519[] = {
+static int parser_action_row1926[] = {
        23,
-       -1, 3, 1518,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1925,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1520[] = {
+static int parser_action_row1927[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1521[] = {
+static int parser_action_row1928[] = {
        1,
-       -1, 1, 163
+       -1, 1, 209
 };
-static int parser_action_row1522[] = {
+static int parser_action_row1929[] = {
        23,
-       -1, 3, 1521,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1928,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1523[] = {
-       5,
-       -1, 1, 207,
-       3, 0, 638,
-       30, 0, 39,
-       86, 0, 1581,
+static int parser_action_row1930[] = {
+       4,
+       -1, 1, 171,
+       3, 0, 722,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1524[] = {
+static int parser_action_row1931[] = {
        3,
-       -1, 3, 1523,
-       30, 0, 39,
+       -1, 1, 173,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1525[] = {
+static int parser_action_row1932[] = {
        1,
-       -1, 1, 243
+       -1, 1, 177
 };
-static int parser_action_row1526[] = {
+static int parser_action_row1933[] = {
        1,
-       -1, 1, 247
+       -1, 1, 157
 };
-static int parser_action_row1527[] = {
-       4,
-       -1, 1, 209,
-       3, 0, 638,
-       30, 0, 39,
-       92, 0, 62
+static int parser_action_row1934[] = {
+       2,
+       -1, 1, 155,
+       8, 0, 2014
 };
-static int parser_action_row1528[] = {
+static int parser_action_row1935[] = {
+       1,
+       -1, 1, 161
+};
+static int parser_action_row1936[] = {
        3,
-       -1, 1, 213,
-       30, 0, 39,
-       92, 0, 62
+       -1, 1, 353,
+       35, 0, 730,
+       78, 0, 731
 };
-static int parser_action_row1529[] = {
+static int parser_action_row1937[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1938[] = {
        1,
-       -1, 1, 221
+       -1, 1, 263
 };
-static int parser_action_row1530[] = {
+static int parser_action_row1939[] = {
+       2,
+       -1, 1, 259,
+       8, 0, 2017
+};
+static int parser_action_row1940[] = {
        1,
-       -1, 1, 249
+       -1, 1, 265
 };
-static int parser_action_row1531[] = {
+static int parser_action_row1941[] = {
        23,
-       -1, 3, 1530,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1940,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1532[] = {
+static int parser_action_row1942[] = {
+       22,
+       -1, 3, 1941,
+       11, 0, 170,
+       32, 0, 1844,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row1943[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1533[] = {
+static int parser_action_row1944[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1534[] = {
+static int parser_action_row1945[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1946[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1947[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1948[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1949[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1950[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1951[] = {
+       1,
+       -1, 1, 245
+};
+static int parser_action_row1952[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1953[] = {
+       4,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2,
+       25, 0, 2029
+};
+static int parser_action_row1954[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1955[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1956[] = {
        2,
-       -1, 1, 161,
-       59, 0, 1591
+       -1, 1, 241,
+       13, 0, 456
 };
-static int parser_action_row1535[] = {
+static int parser_action_row1957[] = {
+       2,
+       -1, 1, 239,
+       13, 0, 456
+};
+static int parser_action_row1958[] = {
        23,
-       -1, 3, 1534,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1957,
+       11, 0, 170,
+       23, 0, 1843,
+       32, 0, 1844,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1536[] = {
+static int parser_action_row1959[] = {
+       1,
+       -1, 1, 213
+};
+static int parser_action_row1960[] = {
+       4,
+       -1, 1, 279,
+       3, 0, 722,
+       29, 0, 39,
+       92, 0, 62
+};
+static int parser_action_row1961[] = {
        3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 283,
+       29, 0, 39,
+       92, 0, 62
 };
-static int parser_action_row1537[] = {
+static int parser_action_row1962[] = {
        1,
-       -1, 1, 164
+       -1, 1, 291
 };
-static int parser_action_row1538[] = {
+static int parser_action_row1963[] = {
+       1,
+       -1, 1, 319
+};
+static int parser_action_row1964[] = {
+       3,
+       -1, 1, 285,
+       29, 0, 39,
+       92, 0, 62
+};
+static int parser_action_row1965[] = {
+       1,
+       -1, 1, 293
+};
+static int parser_action_row1966[] = {
+       1,
+       -1, 1, 297
+};
+static int parser_action_row1967[] = {
        23,
-       -1, 3, 1537,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1966,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1539[] = {
+static int parser_action_row1968[] = {
        23,
-       -1, 3, 1538,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1967,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 178,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1540[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+static int parser_action_row1969[] = {
+       1,
+       -1, 1, 807
 };
-static int parser_action_row1541[] = {
+static int parser_action_row1970[] = {
        1,
-       -1, 1, 166
+       -1, 1, 812
 };
-static int parser_action_row1542[] = {
+static int parser_action_row1971[] = {
+       1,
+       -1, 1, 592
+};
+static int parser_action_row1972[] = {
+       1,
+       -1, 1, 882
+};
+static int parser_action_row1973[] = {
+       1,
+       -1, 1, 1023
+};
+static int parser_action_row1974[] = {
        23,
-       -1, 3, 1541,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1973,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1543[] = {
+static int parser_action_row1975[] = {
+       2,
+       -1, 3, 1974,
+       14, 0, 2043
+};
+static int parser_action_row1976[] = {
+       1,
+       -1, 1, 509
+};
+static int parser_action_row1977[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1978[] = {
+       1,
+       -1, 1, 749
+};
+static int parser_action_row1979[] = {
+       4,
+       -1, 3, 1978,
+       32, 0, 2045,
+       47, 0, 390,
+       80, 0, 391
+};
+static int parser_action_row1980[] = {
+       2,
+       -1, 3, 1979,
+       52, 0, 2047
+};
+static int parser_action_row1981[] = {
        4,
-       -1, 1, 128,
-       3, 0, 638,
-       30, 0, 39,
+       -1, 1, 172,
+       3, 0, 722,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1544[] = {
+static int parser_action_row1982[] = {
        3,
-       -1, 1, 130,
-       30, 0, 39,
+       -1, 1, 174,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1545[] = {
+static int parser_action_row1983[] = {
        1,
-       -1, 1, 134
+       -1, 1, 178
 };
-static int parser_action_row1546[] = {
+static int parser_action_row1984[] = {
        1,
-       -1, 1, 118
+       -1, 1, 158
 };
-static int parser_action_row1547[] = {
+static int parser_action_row1985[] = {
+       2,
+       -1, 1, 156,
+       8, 0, 2051
+};
+static int parser_action_row1986[] = {
        1,
-       -1, 1, 120
+       -1, 1, 162
 };
-static int parser_action_row1548[] = {
-       3,
-       -1, 1, 280,
-       36, 0, 644,
-       79, 0, 645
+static int parser_action_row1987[] = {
+       1,
+       -1, 1, 264
 };
-static int parser_action_row1549[] = {
-       3,
-       -1, 1, 531,
-       0, 0, 1,
-       1, 0, 2
+static int parser_action_row1988[] = {
+       2,
+       -1, 1, 260,
+       8, 0, 2052
 };
-static int parser_action_row1550[] = {
+static int parser_action_row1989[] = {
        1,
-       -1, 1, 200
+       -1, 1, 266
 };
-static int parser_action_row1551[] = {
+static int parser_action_row1990[] = {
        1,
-       -1, 1, 190
+       -1, 1, 246
 };
-static int parser_action_row1552[] = {
-       1,
-       -1, 1, 188
+static int parser_action_row1991[] = {
+       2,
+       -1, 1, 242,
+       13, 0, 456
 };
-static int parser_action_row1553[] = {
+static int parser_action_row1992[] = {
+       2,
+       -1, 1, 240,
+       13, 0, 456
+};
+static int parser_action_row1993[] = {
        23,
-       -1, 3, 1552,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 1992,
+       11, 0, 170,
+       23, 0, 1843,
+       32, 0, 1844,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1554[] = {
+static int parser_action_row1994[] = {
        1,
-       -1, 1, 170
+       -1, 1, 214
 };
-static int parser_action_row1555[] = {
+static int parser_action_row1995[] = {
        4,
-       -1, 1, 210,
-       3, 0, 638,
-       30, 0, 39,
+       -1, 1, 280,
+       3, 0, 722,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1556[] = {
+static int parser_action_row1996[] = {
        3,
-       -1, 1, 214,
-       30, 0, 39,
+       -1, 1, 284,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1557[] = {
+static int parser_action_row1997[] = {
        1,
-       -1, 1, 222
+       -1, 1, 292
 };
-static int parser_action_row1558[] = {
+static int parser_action_row1998[] = {
        1,
-       -1, 1, 250
+       -1, 1, 320
 };
-static int parser_action_row1559[] = {
+static int parser_action_row1999[] = {
        3,
-       -1, 1, 216,
-       30, 0, 39,
+       -1, 1, 286,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1560[] = {
-       1,
-       -1, 1, 224
-};
-static int parser_action_row1561[] = {
-       1,
-       -1, 1, 228
-};
-static int parser_action_row1562[] = {
+static int parser_action_row2000[] = {
        1,
-       -1, 1, 496
+       -1, 1, 294
 };
-static int parser_action_row1563[] = {
+static int parser_action_row2001[] = {
        1,
-       -1, 1, 770
+       -1, 1, 298
 };
-static int parser_action_row1564[] = {
+static int parser_action_row2002[] = {
        1,
-       -1, 1, 689
+       -1, 1, 208
 };
-static int parser_action_row1565[] = {
+static int parser_action_row2003[] = {
        23,
-       -1, 3, 1564,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 2002,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1566[] = {
-       2,
-       -1, 3, 1565,
-       15, 0, 1609
+       89, 0, 61
 };
-static int parser_action_row1567[] = {
-       1,
-       -1, 1, 425
+static int parser_action_row2004[] = {
+       23,
+       -1, 3, 2003,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row1568[] = {
+static int parser_action_row2005[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1569[] = {
+static int parser_action_row2006[] = {
        1,
-       -1, 1, 616
+       -1, 1, 211
 };
-static int parser_action_row1570[] = {
-       4,
-       -1, 3, 1569,
-       33, 0, 1611,
-       48, 0, 361,
-       80, 0, 362
+static int parser_action_row2007[] = {
+       23,
+       -1, 3, 2006,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row1571[] = {
-       2,
-       -1, 3, 1570,
-       53, 0, 1613
+static int parser_action_row2008[] = {
+       1,
+       -1, 1, 215
 };
-static int parser_action_row1572[] = {
-       4,
-       -1, 1, 129,
-       3, 0, 638,
-       30, 0, 39,
-       92, 0, 62
+static int parser_action_row2009[] = {
+       1,
+       -1, 1, 210
 };
-static int parser_action_row1573[] = {
+static int parser_action_row2010[] = {
+       23,
+       -1, 3, 2009,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row2011[] = {
+       1,
+       -1, 1, 217
+};
+static int parser_action_row2012[] = {
        3,
-       -1, 1, 131,
-       30, 0, 39,
+       -1, 1, 175,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1574[] = {
+static int parser_action_row2013[] = {
        1,
-       -1, 1, 135
+       -1, 1, 179
 };
-static int parser_action_row1575[] = {
+static int parser_action_row2014[] = {
        1,
-       -1, 1, 119
+       -1, 1, 181
 };
-static int parser_action_row1576[] = {
+static int parser_action_row2015[] = {
        1,
-       -1, 1, 121
+       -1, 1, 159
 };
-static int parser_action_row1577[] = {
+static int parser_action_row2016[] = {
        1,
-       -1, 1, 201
+       -1, 1, 355
 };
-static int parser_action_row1578[] = {
+static int parser_action_row2017[] = {
+       3,
+       -1, 1, 354,
+       35, 0, 730,
+       78, 0, 731
+};
+static int parser_action_row2018[] = {
        1,
-       -1, 1, 191
+       -1, 1, 267
 };
-static int parser_action_row1579[] = {
+static int parser_action_row2019[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row2020[] = {
        1,
-       -1, 1, 189
+       -1, 1, 1174
 };
-static int parser_action_row1580[] = {
-       23,
-       -1, 3, 1579,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+static int parser_action_row2021[] = {
+       3,
+       -1, 3, 2020,
+       47, 0, 390,
+       80, 0, 391
+};
+static int parser_action_row2022[] = {
+       21,
+       -1, 3, 2021,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1581[] = {
-       1,
-       -1, 1, 171
-};
-static int parser_action_row1582[] = {
-       4,
-       -1, 1, 211,
-       3, 0, 638,
-       30, 0, 39,
-       92, 0, 62
-};
-static int parser_action_row1583[] = {
-       3,
-       -1, 1, 215,
-       30, 0, 39,
-       92, 0, 62
-};
-static int parser_action_row1584[] = {
-       1,
-       -1, 1, 223
+       89, 0, 61
 };
-static int parser_action_row1585[] = {
-       1,
-       -1, 1, 251
+static int parser_action_row2023[] = {
+       21,
+       -1, 3, 2022,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row1586[] = {
-       3,
-       -1, 1, 217,
-       30, 0, 39,
-       92, 0, 62
+static int parser_action_row2024[] = {
+       21,
+       -1, 3, 2023,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row1587[] = {
-       1,
-       -1, 1, 225
+static int parser_action_row2025[] = {
+       21,
+       -1, 3, 2024,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row1588[] = {
-       1,
-       -1, 1, 229
+static int parser_action_row2026[] = {
+       21,
+       -1, 3, 2025,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row1589[] = {
-       1,
-       -1, 1, 165
+static int parser_action_row2027[] = {
+       21,
+       -1, 3, 2026,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row1590[] = {
-       23,
-       -1, 3, 1589,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+static int parser_action_row2028[] = {
+       21,
+       -1, 3, 2027,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1591[] = {
-       23,
-       -1, 3, 1590,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+static int parser_action_row2029[] = {
+       22,
+       -1, 3, 2028,
+       11, 0, 170,
+       32, 0, 1844,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1592[] = {
+static int parser_action_row2030[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1593[] = {
-       1,
-       -1, 1, 168
-};
-static int parser_action_row1594[] = {
-       23,
-       -1, 3, 1593,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+static int parser_action_row2031[] = {
+       22,
+       -1, 3, 2030,
+       11, 0, 170,
+       32, 0, 1844,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1595[] = {
-       1,
-       -1, 1, 172
-};
-static int parser_action_row1596[] = {
-       1,
-       -1, 1, 167
+       89, 0, 61
 };
-static int parser_action_row1597[] = {
-       23,
-       -1, 3, 1596,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+static int parser_action_row2032[] = {
+       21,
+       -1, 3, 2031,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
-};
-static int parser_action_row1598[] = {
-       1,
-       -1, 1, 174
+       89, 0, 61
 };
-static int parser_action_row1599[] = {
-       3,
-       -1, 1, 132,
-       30, 0, 39,
-       92, 0, 62
+static int parser_action_row2033[] = {
+       21,
+       -1, 3, 2032,
+       11, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
 };
-static int parser_action_row1600[] = {
+static int parser_action_row2034[] = {
        1,
-       -1, 1, 136
+       -1, 1, 249
 };
-static int parser_action_row1601[] = {
+static int parser_action_row2035[] = {
        1,
-       -1, 1, 138
+       -1, 1, 247
 };
-static int parser_action_row1602[] = {
-       1,
-       -1, 1, 282
+static int parser_action_row2036[] = {
+       2,
+       -1, 1, 243,
+       13, 0, 456
 };
-static int parser_action_row1603[] = {
+static int parser_action_row2037[] = {
        3,
-       -1, 1, 281,
-       36, 0, 644,
-       79, 0, 645
+       -1, 1, 287,
+       29, 0, 39,
+       92, 0, 62
 };
-static int parser_action_row1604[] = {
+static int parser_action_row2038[] = {
        1,
-       -1, 1, 192
+       -1, 1, 295
 };
-static int parser_action_row1605[] = {
-       3,
-       -1, 1, 218,
-       30, 0, 39,
-       92, 0, 62
+static int parser_action_row2039[] = {
+       1,
+       -1, 1, 299
 };
-static int parser_action_row1606[] = {
+static int parser_action_row2040[] = {
        1,
-       -1, 1, 226
+       -1, 1, 301
 };
-static int parser_action_row1607[] = {
+static int parser_action_row2041[] = {
        1,
-       -1, 1, 230
+       -1, 1, 809
 };
-static int parser_action_row1608[] = {
+static int parser_action_row2042[] = {
        1,
-       -1, 1, 232
+       -1, 1, 814
 };
-static int parser_action_row1609[] = {
+static int parser_action_row2043[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1610[] = {
+static int parser_action_row2044[] = {
        33,
-       -1, 3, 1609,
+       -1, 3, 2043,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 810,
-       12, 0, 689,
-       15, 0, 690,
-       18, 0, 691,
-       24, 0, 692,
-       27, 0, 694,
-       28, 0, 695,
-       29, 0, 696,
-       34, 0, 697,
-       35, 0, 698,
-       36, 0, 699,
-       37, 0, 700,
-       38, 0, 701,
-       39, 0, 45,
-       42, 0, 702,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 703,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 704,
-       82, 0, 705,
+       8, 0, 946,
+       11, 0, 786,
+       14, 0, 787,
+       17, 0, 788,
+       23, 0, 789,
+       26, 0, 791,
+       27, 0, 792,
+       28, 0, 793,
+       33, 0, 794,
+       34, 0, 795,
+       35, 0, 796,
+       36, 0, 797,
+       37, 0, 798,
+       38, 0, 45,
+       41, 0, 799,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 800,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 801,
+       82, 0, 802,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1611[] = {
+static int parser_action_row2045[] = {
        2,
-       -1, 3, 1610,
-       26, 0, 1633
+       -1, 3, 2044,
+       25, 0, 2086
 };
-static int parser_action_row1612[] = {
+static int parser_action_row2046[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1613[] = {
+static int parser_action_row2047[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1614[] = {
+static int parser_action_row2048[] = {
        1,
-       -1, 1, 321
+       -1, 1, 397
 };
-static int parser_action_row1615[] = {
+static int parser_action_row2049[] = {
        3,
-       -1, 1, 133,
-       30, 0, 39,
+       -1, 1, 176,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1616[] = {
+static int parser_action_row2050[] = {
        1,
-       -1, 1, 137
+       -1, 1, 180
 };
-static int parser_action_row1617[] = {
+static int parser_action_row2051[] = {
        1,
-       -1, 1, 139
+       -1, 1, 182
 };
-static int parser_action_row1618[] = {
+static int parser_action_row2052[] = {
        1,
-       -1, 1, 193
+       -1, 1, 160
 };
-static int parser_action_row1619[] = {
+static int parser_action_row2053[] = {
+       1,
+       -1, 1, 268
+};
+static int parser_action_row2054[] = {
+       1,
+       -1, 1, 250
+};
+static int parser_action_row2055[] = {
+       1,
+       -1, 1, 248
+};
+static int parser_action_row2056[] = {
+       2,
+       -1, 1, 244,
+       13, 0, 456
+};
+static int parser_action_row2057[] = {
        3,
-       -1, 1, 219,
-       30, 0, 39,
+       -1, 1, 288,
+       29, 0, 39,
        92, 0, 62
 };
-static int parser_action_row1620[] = {
+static int parser_action_row2058[] = {
        1,
-       -1, 1, 227
+       -1, 1, 296
 };
-static int parser_action_row1621[] = {
+static int parser_action_row2059[] = {
        1,
-       -1, 1, 231
+       -1, 1, 300
 };
-static int parser_action_row1622[] = {
+static int parser_action_row2060[] = {
        1,
-       -1, 1, 233
+       -1, 1, 302
 };
-static int parser_action_row1623[] = {
+static int parser_action_row2061[] = {
        1,
-       -1, 1, 173
+       -1, 1, 216
 };
-static int parser_action_row1624[] = {
+static int parser_action_row2062[] = {
        1,
-       -1, 1, 169
+       -1, 1, 212
 };
-static int parser_action_row1625[] = {
+static int parser_action_row2063[] = {
        23,
-       -1, 3, 1624,
-       12, 0, 170,
-       24, 0, 171,
-       33, 0, 172,
-       39, 0, 173,
-       41, 0, 174,
-       42, 0, 175,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       49, 0, 176,
-       52, 0, 52,
-       54, 0, 53,
-       66, 0, 177,
-       80, 0, 54,
-       81, 0, 206,
+       -1, 3, 2062,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
        82, 0, 179,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1626[] = {
+static int parser_action_row2064[] = {
        1,
-       -1, 1, 176
+       -1, 1, 219
 };
-static int parser_action_row1627[] = {
+static int parser_action_row2065[] = {
        1,
-       -1, 1, 175
+       -1, 1, 218
 };
-static int parser_action_row1628[] = {
+static int parser_action_row2066[] = {
        1,
-       -1, 1, 140
+       -1, 1, 183
 };
-static int parser_action_row1629[] = {
+static int parser_action_row2067[] = {
        1,
-       -1, 1, 283
+       -1, 1, 356
 };
-static int parser_action_row1630[] = {
+static int parser_action_row2068[] = {
+       2,
+       -1, 3, 2067,
+       24, 0, 2093
+};
+static int parser_action_row2069[] = {
        1,
-       -1, 1, 234
+       -1, 1, 1185
 };
-static int parser_action_row1631[] = {
+static int parser_action_row2070[] = {
+       3,
+       -1, 1, 1176,
+       64, 0, 354,
+       65, 0, 355
+};
+static int parser_action_row2071[] = {
+       3,
+       -1, 1, 1177,
+       64, 0, 354,
+       65, 0, 355
+};
+static int parser_action_row2072[] = {
+       3,
+       -1, 1, 1178,
+       64, 0, 354,
+       65, 0, 355
+};
+static int parser_action_row2073[] = {
+       3,
+       -1, 1, 1179,
+       64, 0, 354,
+       65, 0, 355
+};
+static int parser_action_row2074[] = {
+       3,
+       -1, 1, 1181,
+       64, 0, 354,
+       65, 0, 355
+};
+static int parser_action_row2075[] = {
+       3,
+       -1, 1, 1182,
+       64, 0, 354,
+       65, 0, 355
+};
+static int parser_action_row2076[] = {
+       3,
+       -1, 1, 1184,
+       64, 0, 354,
+       65, 0, 355
+};
+static int parser_action_row2077[] = {
+       1,
+       -1, 1, 1171
+};
+static int parser_action_row2078[] = {
+       22,
+       -1, 3, 2077,
+       11, 0, 170,
+       32, 0, 1844,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row2079[] = {
+       1,
+       -1, 1, 1170
+};
+static int parser_action_row2080[] = {
+       3,
+       -1, 1, 1180,
+       64, 0, 354,
+       65, 0, 355
+};
+static int parser_action_row2081[] = {
+       3,
+       -1, 1, 1183,
+       64, 0, 354,
+       65, 0, 355
+};
+static int parser_action_row2082[] = {
+       1,
+       -1, 1, 251
+};
+static int parser_action_row2083[] = {
+       1,
+       -1, 1, 303
+};
+static int parser_action_row2084[] = {
        2,
-       -1, 3, 1630,
-       15, 0, 1639
+       -1, 3, 2083,
+       14, 0, 2095
 };
-static int parser_action_row1632[] = {
+static int parser_action_row2085[] = {
        1,
-       -1, 1, 697
+       -1, 1, 1031
 };
-static int parser_action_row1633[] = {
+static int parser_action_row2086[] = {
        2,
-       -1, 3, 1632,
-       50, 0, 191
+       -1, 3, 2085,
+       49, 0, 191
 };
-static int parser_action_row1634[] = {
+static int parser_action_row2087[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1635[] = {
+static int parser_action_row2088[] = {
        2,
-       -1, 3, 1634,
-       46, 0, 1642
+       -1, 3, 2087,
+       45, 0, 2098
 };
-static int parser_action_row1636[] = {
+static int parser_action_row2089[] = {
        2,
-       -1, 3, 1635,
-       53, 0, 1643
+       -1, 3, 2088,
+       52, 0, 2099
 };
-static int parser_action_row1637[] = {
+static int parser_action_row2090[] = {
        1,
-       -1, 1, 141
+       -1, 1, 184
 };
-static int parser_action_row1638[] = {
+static int parser_action_row2091[] = {
        1,
-       -1, 1, 235
+       -1, 1, 252
 };
-static int parser_action_row1639[] = {
+static int parser_action_row2092[] = {
        1,
-       -1, 1, 177
+       -1, 1, 304
 };
-static int parser_action_row1640[] = {
+static int parser_action_row2093[] = {
+       1,
+       -1, 1, 220
+};
+static int parser_action_row2094[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row2095[] = {
+       1,
+       -1, 1, 1172
+};
+static int parser_action_row2096[] = {
        33,
-       -1, 3, 1639,
+       -1, 3, 2095,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 810,
-       12, 0, 689,
-       15, 0, 690,
-       18, 0, 691,
-       24, 0, 692,
-       27, 0, 694,
-       28, 0, 695,
-       29, 0, 696,
-       34, 0, 697,
-       35, 0, 698,
-       36, 0, 699,
-       37, 0, 700,
-       38, 0, 701,
-       39, 0, 45,
-       42, 0, 702,
-       43, 0, 47,
-       44, 0, 48,
-       45, 0, 49,
-       46, 0, 50,
-       51, 0, 703,
-       52, 0, 52,
-       54, 0, 53,
-       80, 0, 54,
-       81, 0, 704,
-       82, 0, 705,
+       8, 0, 946,
+       11, 0, 786,
+       14, 0, 787,
+       17, 0, 788,
+       23, 0, 789,
+       26, 0, 791,
+       27, 0, 792,
+       28, 0, 793,
+       33, 0, 794,
+       34, 0, 795,
+       35, 0, 796,
+       36, 0, 797,
+       37, 0, 798,
+       38, 0, 45,
+       41, 0, 799,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       50, 0, 800,
+       51, 0, 52,
+       53, 0, 53,
+       80, 0, 54,
+       81, 0, 801,
+       82, 0, 802,
        83, 0, 57,
        84, 0, 58,
        85, 0, 59,
        86, 0, 60,
-       87, 0, 61
+       89, 0, 61
 };
-static int parser_action_row1641[] = {
+static int parser_action_row2097[] = {
        2,
-       -1, 1, 426,
-       26, 1, 695
+       -1, 1, 510,
+       25, 1, 1029
 };
-static int parser_action_row1642[] = {
+static int parser_action_row2098[] = {
        22,
-       -1, 3, 1641,
-       12, 0, 863,
-       24, 0, 864,
-       33, 0, 865,
-       39, 0, 866,
-       41, 0, 867,
-       42, 0, 868,
-       43, 0, 869,
-       44, 0, 870,
-       45, 0, 871,
-       46, 0, 872,
-       49, 0, 873,
-       52, 0, 874,
-       66, 0, 875,
-       80, 0, 54,
-       81, 0, 876,
-       82, 0, 877,
-       83, 0, 878,
-       84, 0, 879,
-       85, 0, 880,
-       86, 0, 881,
-       87, 0, 61
+       -1, 3, 2097,
+       11, 0, 1010,
+       23, 0, 1011,
+       32, 0, 1012,
+       38, 0, 1013,
+       40, 0, 1014,
+       41, 0, 1015,
+       42, 0, 1016,
+       43, 0, 1017,
+       44, 0, 1018,
+       45, 0, 1019,
+       48, 0, 1020,
+       51, 0, 1021,
+       65, 0, 1022,
+       80, 0, 54,
+       81, 0, 1023,
+       82, 0, 1024,
+       83, 0, 1025,
+       84, 0, 1026,
+       85, 0, 1027,
+       86, 0, 60,
+       89, 0, 1028
 };
-static int parser_action_row1643[] = {
+static int parser_action_row2099[] = {
        3,
-       -1, 1, 531,
+       -1, 1, 656,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1644[] = {
+static int parser_action_row2100[] = {
        1,
-       -1, 1, 627
+       -1, 1, 769
 };
-static int parser_action_row1645[] = {
+static int parser_action_row2101[] = {
+       23,
+       -1, 3, 2100,
+       11, 0, 170,
+       23, 0, 171,
+       32, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row2102[] = {
        1,
-       -1, 1, 696
+       -1, 1, 1030
 };
-static int parser_action_row1646[] = {
+static int parser_action_row2103[] = {
        2,
-       -1, 3, 1645,
-       50, 0, 191
+       -1, 3, 2102,
+       49, 0, 191
 };
-static int parser_action_row1647[] = {
+static int parser_action_row2104[] = {
        1,
-       -1, 1, 575
+       -1, 1, 708
 };
-static int parser_action_row1648[] = {
+static int parser_action_row2105[] = {
        2,
-       -1, 3, 1647,
-       53, 0, 1649
+       -1, 3, 2104,
+       52, 0, 2107
 };
-static int parser_action_row1649[] = {
+static int parser_action_row2106[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row2107[] = {
        2,
-       -1, 1, 425,
-       26, 1, 694
+       -1, 1, 509,
+       25, 1, 1028
 };
-static int parser_action_row1650[] = {
+static int parser_action_row2108[] = {
        1,
-       -1, 1, 628
+       -1, 1, 770
+};
+static int parser_action_row2109[] = {
+       2,
+       -1, 3, 2108,
+       25, 0, 2109
+};
+static int parser_action_row2110[] = {
+       3,
+       -1, 1, 656,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row2111[] = {
+       23,
+       -1, 3, 2110,
+       11, 0, 170,
+       23, 0, 1843,
+       32, 0, 1844,
+       38, 0, 173,
+       40, 0, 174,
+       41, 0, 175,
+       42, 0, 47,
+       43, 0, 48,
+       44, 0, 49,
+       45, 0, 50,
+       48, 0, 176,
+       51, 0, 52,
+       53, 0, 53,
+       65, 0, 177,
+       80, 0, 54,
+       81, 0, 211,
+       82, 0, 179,
+       83, 0, 57,
+       84, 0, 58,
+       85, 0, 59,
+       86, 0, 60,
+       89, 0, 61
+};
+static int parser_action_row2112[] = {
+       1,
+       -1, 1, 1168
 };
 
 const int* const parser_action_table[] = {
@@ -17832,7 +22283,469 @@ const int* const parser_action_table[] = {
        parser_action_row1647,
        parser_action_row1648,
        parser_action_row1649,
-       parser_action_row1650
+       parser_action_row1650,
+       parser_action_row1651,
+       parser_action_row1652,
+       parser_action_row1653,
+       parser_action_row1654,
+       parser_action_row1655,
+       parser_action_row1656,
+       parser_action_row1657,
+       parser_action_row1658,
+       parser_action_row1659,
+       parser_action_row1660,
+       parser_action_row1661,
+       parser_action_row1662,
+       parser_action_row1663,
+       parser_action_row1664,
+       parser_action_row1665,
+       parser_action_row1666,
+       parser_action_row1667,
+       parser_action_row1668,
+       parser_action_row1669,
+       parser_action_row1670,
+       parser_action_row1671,
+       parser_action_row1672,
+       parser_action_row1673,
+       parser_action_row1674,
+       parser_action_row1675,
+       parser_action_row1676,
+       parser_action_row1677,
+       parser_action_row1678,
+       parser_action_row1679,
+       parser_action_row1680,
+       parser_action_row1681,
+       parser_action_row1682,
+       parser_action_row1683,
+       parser_action_row1684,
+       parser_action_row1685,
+       parser_action_row1686,
+       parser_action_row1687,
+       parser_action_row1688,
+       parser_action_row1689,
+       parser_action_row1690,
+       parser_action_row1691,
+       parser_action_row1692,
+       parser_action_row1693,
+       parser_action_row1694,
+       parser_action_row1695,
+       parser_action_row1696,
+       parser_action_row1697,
+       parser_action_row1698,
+       parser_action_row1699,
+       parser_action_row1700,
+       parser_action_row1701,
+       parser_action_row1702,
+       parser_action_row1703,
+       parser_action_row1704,
+       parser_action_row1705,
+       parser_action_row1706,
+       parser_action_row1707,
+       parser_action_row1708,
+       parser_action_row1709,
+       parser_action_row1710,
+       parser_action_row1711,
+       parser_action_row1712,
+       parser_action_row1713,
+       parser_action_row1714,
+       parser_action_row1715,
+       parser_action_row1716,
+       parser_action_row1717,
+       parser_action_row1718,
+       parser_action_row1719,
+       parser_action_row1720,
+       parser_action_row1721,
+       parser_action_row1722,
+       parser_action_row1723,
+       parser_action_row1724,
+       parser_action_row1725,
+       parser_action_row1726,
+       parser_action_row1727,
+       parser_action_row1728,
+       parser_action_row1729,
+       parser_action_row1730,
+       parser_action_row1731,
+       parser_action_row1732,
+       parser_action_row1733,
+       parser_action_row1734,
+       parser_action_row1735,
+       parser_action_row1736,
+       parser_action_row1737,
+       parser_action_row1738,
+       parser_action_row1739,
+       parser_action_row1740,
+       parser_action_row1741,
+       parser_action_row1742,
+       parser_action_row1743,
+       parser_action_row1744,
+       parser_action_row1745,
+       parser_action_row1746,
+       parser_action_row1747,
+       parser_action_row1748,
+       parser_action_row1749,
+       parser_action_row1750,
+       parser_action_row1751,
+       parser_action_row1752,
+       parser_action_row1753,
+       parser_action_row1754,
+       parser_action_row1755,
+       parser_action_row1756,
+       parser_action_row1757,
+       parser_action_row1758,
+       parser_action_row1759,
+       parser_action_row1760,
+       parser_action_row1761,
+       parser_action_row1762,
+       parser_action_row1763,
+       parser_action_row1764,
+       parser_action_row1765,
+       parser_action_row1766,
+       parser_action_row1767,
+       parser_action_row1768,
+       parser_action_row1769,
+       parser_action_row1770,
+       parser_action_row1771,
+       parser_action_row1772,
+       parser_action_row1773,
+       parser_action_row1774,
+       parser_action_row1775,
+       parser_action_row1776,
+       parser_action_row1777,
+       parser_action_row1778,
+       parser_action_row1779,
+       parser_action_row1780,
+       parser_action_row1781,
+       parser_action_row1782,
+       parser_action_row1783,
+       parser_action_row1784,
+       parser_action_row1785,
+       parser_action_row1786,
+       parser_action_row1787,
+       parser_action_row1788,
+       parser_action_row1789,
+       parser_action_row1790,
+       parser_action_row1791,
+       parser_action_row1792,
+       parser_action_row1793,
+       parser_action_row1794,
+       parser_action_row1795,
+       parser_action_row1796,
+       parser_action_row1797,
+       parser_action_row1798,
+       parser_action_row1799,
+       parser_action_row1800,
+       parser_action_row1801,
+       parser_action_row1802,
+       parser_action_row1803,
+       parser_action_row1804,
+       parser_action_row1805,
+       parser_action_row1806,
+       parser_action_row1807,
+       parser_action_row1808,
+       parser_action_row1809,
+       parser_action_row1810,
+       parser_action_row1811,
+       parser_action_row1812,
+       parser_action_row1813,
+       parser_action_row1814,
+       parser_action_row1815,
+       parser_action_row1816,
+       parser_action_row1817,
+       parser_action_row1818,
+       parser_action_row1819,
+       parser_action_row1820,
+       parser_action_row1821,
+       parser_action_row1822,
+       parser_action_row1823,
+       parser_action_row1824,
+       parser_action_row1825,
+       parser_action_row1826,
+       parser_action_row1827,
+       parser_action_row1828,
+       parser_action_row1829,
+       parser_action_row1830,
+       parser_action_row1831,
+       parser_action_row1832,
+       parser_action_row1833,
+       parser_action_row1834,
+       parser_action_row1835,
+       parser_action_row1836,
+       parser_action_row1837,
+       parser_action_row1838,
+       parser_action_row1839,
+       parser_action_row1840,
+       parser_action_row1841,
+       parser_action_row1842,
+       parser_action_row1843,
+       parser_action_row1844,
+       parser_action_row1845,
+       parser_action_row1846,
+       parser_action_row1847,
+       parser_action_row1848,
+       parser_action_row1849,
+       parser_action_row1850,
+       parser_action_row1851,
+       parser_action_row1852,
+       parser_action_row1853,
+       parser_action_row1854,
+       parser_action_row1855,
+       parser_action_row1856,
+       parser_action_row1857,
+       parser_action_row1858,
+       parser_action_row1859,
+       parser_action_row1860,
+       parser_action_row1861,
+       parser_action_row1862,
+       parser_action_row1863,
+       parser_action_row1864,
+       parser_action_row1865,
+       parser_action_row1866,
+       parser_action_row1867,
+       parser_action_row1868,
+       parser_action_row1869,
+       parser_action_row1870,
+       parser_action_row1871,
+       parser_action_row1872,
+       parser_action_row1873,
+       parser_action_row1874,
+       parser_action_row1875,
+       parser_action_row1876,
+       parser_action_row1877,
+       parser_action_row1878,
+       parser_action_row1879,
+       parser_action_row1880,
+       parser_action_row1881,
+       parser_action_row1882,
+       parser_action_row1883,
+       parser_action_row1884,
+       parser_action_row1885,
+       parser_action_row1886,
+       parser_action_row1887,
+       parser_action_row1888,
+       parser_action_row1889,
+       parser_action_row1890,
+       parser_action_row1891,
+       parser_action_row1892,
+       parser_action_row1893,
+       parser_action_row1894,
+       parser_action_row1895,
+       parser_action_row1896,
+       parser_action_row1897,
+       parser_action_row1898,
+       parser_action_row1899,
+       parser_action_row1900,
+       parser_action_row1901,
+       parser_action_row1902,
+       parser_action_row1903,
+       parser_action_row1904,
+       parser_action_row1905,
+       parser_action_row1906,
+       parser_action_row1907,
+       parser_action_row1908,
+       parser_action_row1909,
+       parser_action_row1910,
+       parser_action_row1911,
+       parser_action_row1912,
+       parser_action_row1913,
+       parser_action_row1914,
+       parser_action_row1915,
+       parser_action_row1916,
+       parser_action_row1917,
+       parser_action_row1918,
+       parser_action_row1919,
+       parser_action_row1920,
+       parser_action_row1921,
+       parser_action_row1922,
+       parser_action_row1923,
+       parser_action_row1924,
+       parser_action_row1925,
+       parser_action_row1926,
+       parser_action_row1927,
+       parser_action_row1928,
+       parser_action_row1929,
+       parser_action_row1930,
+       parser_action_row1931,
+       parser_action_row1932,
+       parser_action_row1933,
+       parser_action_row1934,
+       parser_action_row1935,
+       parser_action_row1936,
+       parser_action_row1937,
+       parser_action_row1938,
+       parser_action_row1939,
+       parser_action_row1940,
+       parser_action_row1941,
+       parser_action_row1942,
+       parser_action_row1943,
+       parser_action_row1944,
+       parser_action_row1945,
+       parser_action_row1946,
+       parser_action_row1947,
+       parser_action_row1948,
+       parser_action_row1949,
+       parser_action_row1950,
+       parser_action_row1951,
+       parser_action_row1952,
+       parser_action_row1953,
+       parser_action_row1954,
+       parser_action_row1955,
+       parser_action_row1956,
+       parser_action_row1957,
+       parser_action_row1958,
+       parser_action_row1959,
+       parser_action_row1960,
+       parser_action_row1961,
+       parser_action_row1962,
+       parser_action_row1963,
+       parser_action_row1964,
+       parser_action_row1965,
+       parser_action_row1966,
+       parser_action_row1967,
+       parser_action_row1968,
+       parser_action_row1969,
+       parser_action_row1970,
+       parser_action_row1971,
+       parser_action_row1972,
+       parser_action_row1973,
+       parser_action_row1974,
+       parser_action_row1975,
+       parser_action_row1976,
+       parser_action_row1977,
+       parser_action_row1978,
+       parser_action_row1979,
+       parser_action_row1980,
+       parser_action_row1981,
+       parser_action_row1982,
+       parser_action_row1983,
+       parser_action_row1984,
+       parser_action_row1985,
+       parser_action_row1986,
+       parser_action_row1987,
+       parser_action_row1988,
+       parser_action_row1989,
+       parser_action_row1990,
+       parser_action_row1991,
+       parser_action_row1992,
+       parser_action_row1993,
+       parser_action_row1994,
+       parser_action_row1995,
+       parser_action_row1996,
+       parser_action_row1997,
+       parser_action_row1998,
+       parser_action_row1999,
+       parser_action_row2000,
+       parser_action_row2001,
+       parser_action_row2002,
+       parser_action_row2003,
+       parser_action_row2004,
+       parser_action_row2005,
+       parser_action_row2006,
+       parser_action_row2007,
+       parser_action_row2008,
+       parser_action_row2009,
+       parser_action_row2010,
+       parser_action_row2011,
+       parser_action_row2012,
+       parser_action_row2013,
+       parser_action_row2014,
+       parser_action_row2015,
+       parser_action_row2016,
+       parser_action_row2017,
+       parser_action_row2018,
+       parser_action_row2019,
+       parser_action_row2020,
+       parser_action_row2021,
+       parser_action_row2022,
+       parser_action_row2023,
+       parser_action_row2024,
+       parser_action_row2025,
+       parser_action_row2026,
+       parser_action_row2027,
+       parser_action_row2028,
+       parser_action_row2029,
+       parser_action_row2030,
+       parser_action_row2031,
+       parser_action_row2032,
+       parser_action_row2033,
+       parser_action_row2034,
+       parser_action_row2035,
+       parser_action_row2036,
+       parser_action_row2037,
+       parser_action_row2038,
+       parser_action_row2039,
+       parser_action_row2040,
+       parser_action_row2041,
+       parser_action_row2042,
+       parser_action_row2043,
+       parser_action_row2044,
+       parser_action_row2045,
+       parser_action_row2046,
+       parser_action_row2047,
+       parser_action_row2048,
+       parser_action_row2049,
+       parser_action_row2050,
+       parser_action_row2051,
+       parser_action_row2052,
+       parser_action_row2053,
+       parser_action_row2054,
+       parser_action_row2055,
+       parser_action_row2056,
+       parser_action_row2057,
+       parser_action_row2058,
+       parser_action_row2059,
+       parser_action_row2060,
+       parser_action_row2061,
+       parser_action_row2062,
+       parser_action_row2063,
+       parser_action_row2064,
+       parser_action_row2065,
+       parser_action_row2066,
+       parser_action_row2067,
+       parser_action_row2068,
+       parser_action_row2069,
+       parser_action_row2070,
+       parser_action_row2071,
+       parser_action_row2072,
+       parser_action_row2073,
+       parser_action_row2074,
+       parser_action_row2075,
+       parser_action_row2076,
+       parser_action_row2077,
+       parser_action_row2078,
+       parser_action_row2079,
+       parser_action_row2080,
+       parser_action_row2081,
+       parser_action_row2082,
+       parser_action_row2083,
+       parser_action_row2084,
+       parser_action_row2085,
+       parser_action_row2086,
+       parser_action_row2087,
+       parser_action_row2088,
+       parser_action_row2089,
+       parser_action_row2090,
+       parser_action_row2091,
+       parser_action_row2092,
+       parser_action_row2093,
+       parser_action_row2094,
+       parser_action_row2095,
+       parser_action_row2096,
+       parser_action_row2097,
+       parser_action_row2098,
+       parser_action_row2099,
+       parser_action_row2100,
+       parser_action_row2101,
+       parser_action_row2102,
+       parser_action_row2103,
+       parser_action_row2104,
+       parser_action_row2105,
+       parser_action_row2106,
+       parser_action_row2107,
+       parser_action_row2108,
+       parser_action_row2109,
+       parser_action_row2110,
+       parser_action_row2111,
+       parser_action_row2112
 };
 
 static int parser_goto_row1[] = {
@@ -17861,28 +22774,28 @@ static int parser_goto_row4[] = {
        24, 114,
        25, 117,
        26, 119,
-       92, 245,
-       93, 248,
-       94, 250,
-       98, 252,
-       99, 254,
-       103, 255,
-       111, 258,
-       112, 261,
-       113, 263,
-       115, 264,
-       116, 266,
-       118, 267,
-       246, 414,
-       247, 416,
-       249, 417,
-       253, 418,
-       259, 420,
-       260, 422,
-       262, 423,
-       265, 424,
-       415, 540,
-       421, 541
+       92, 255,
+       93, 258,
+       94, 260,
+       98, 262,
+       99, 264,
+       103, 265,
+       111, 268,
+       112, 271,
+       113, 273,
+       115, 274,
+       116, 276,
+       118, 277,
+       256, 444,
+       257, 446,
+       259, 447,
+       263, 448,
+       269, 450,
+       270, 452,
+       272, 453,
+       275, 454,
+       445, 585,
+       451, 586
 };
 static int parser_goto_row5[] = {
        1,
@@ -17897,295 +22810,362 @@ static int parser_goto_row6[] = {
        98, 101,
        112, 101,
        115, 101,
-       246, 101,
-       259, 101
+       256, 101,
+       269, 101
 };
 static int parser_goto_row7[] = {
        2,
-       -1, 225,
-       154, 307
+       -1, 234,
+       154, 325
 };
 static int parser_goto_row8[] = {
        2,
-       -1, 651,
-       578, 681
+       -1, 737,
+       627, 775
 };
 static int parser_goto_row9[] = {
        2,
-       -1, 1090,
-       1092, 1229
+       -1, 1306,
+       1308, 1499
 };
 static int parser_goto_row10[] = {
        2,
-       -1, 929,
-       1227, 1346
+       -1, 1079,
+       1497, 1664
 };
 static int parser_goto_row11[] = {
-       9,
-       -1, 652,
-       657, 780,
-       684, 780,
-       765, 780,
-       769, 780,
-       800, 780,
-       803, 780,
-       931, 780,
-       971, 780
+       17,
+       -1, 738,
+       744, 901,
+       778, 901,
+       883, 901,
+       888, 901,
+       909, 901,
+       930, 901,
+       934, 901,
+       942, 901,
+       1081, 901,
+       1089, 901,
+       1136, 901,
+       1159, 901,
+       1167, 901,
+       1177, 901,
+       1317, 901,
+       1391, 901
 };
 static int parser_goto_row12[] = {
-       17,
-       -1, 653,
-       658, 783,
-       685, 783,
-       766, 783,
-       770, 783,
-       782, 783,
-       801, 783,
-       804, 783,
-       807, 783,
-       932, 783,
-       935, 783,
-       939, 783,
-       972, 783,
-       975, 783,
-       979, 783,
-       1095, 783,
-       1137, 783
+       33,
+       -1, 739,
+       745, 904,
+       779, 904,
+       884, 904,
+       889, 904,
+       903, 904,
+       910, 904,
+       931, 904,
+       935, 904,
+       938, 904,
+       943, 904,
+       1082, 904,
+       1085, 904,
+       1090, 904,
+       1093, 904,
+       1137, 904,
+       1140, 904,
+       1160, 904,
+       1163, 904,
+       1168, 904,
+       1171, 904,
+       1178, 904,
+       1181, 904,
+       1311, 904,
+       1318, 904,
+       1321, 904,
+       1366, 904,
+       1385, 904,
+       1392, 904,
+       1395, 904,
+       1403, 904,
+       1507, 904,
+       1578, 904
 };
 static int parser_goto_row13[] = {
        1,
-       -1, 654
+       -1, 740
 };
 static int parser_goto_row14[] = {
-       1,
-       -1, 777
+       25,
+       -1, 457,
+       567, 718,
+       571, 725,
+       625, 770,
+       1331, 1521,
+       1344, 1539,
+       1517, 1678,
+       1528, 1698,
+       1530, 1703,
+       1540, 1716,
+       1542, 1719,
+       1671, 1791,
+       1673, 1796,
+       1679, 1803,
+       1680, 1805,
+       1720, 1853,
+       1806, 1906,
+       1846, 1950,
+       1902, 1989,
+       1955, 2033,
+       1956, 2034,
+       1990, 2053,
+       1991, 2054,
+       2035, 2081,
+       2055, 2090
 };
 static int parser_goto_row15[] = {
-       2,
-       -1, 778,
-       777, 947
+       8,
+       -1, 726,
+       625, 771,
+       1342, 1535,
+       1516, 1676,
+       1528, 1699,
+       1532, 1707,
+       1671, 1792,
+       1674, 1798
 };
 static int parser_goto_row16[] = {
-       4,
-       -1, 1259,
-       1240, 1355,
-       1261, 1387,
-       1356, 1443
+       1,
+       -1, 897
 };
 static int parser_goto_row17[] = {
+       2,
+       -1, 898,
+       897, 1100
+};
+static int parser_goto_row18[] = {
+       4,
+       -1, 1540,
+       1517, 1679,
+       1542, 1720,
+       1680, 1806
+};
+static int parser_goto_row19[] = {
        20,
-       -1, 779,
+       -1, 899,
        11, 63,
        22, 63,
        29, 154,
-       97, 251,
-       102, 251,
-       105, 257,
-       256, 419,
-       773, 944,
-       777, 948,
-       778, 950,
-       946, 1110,
-       947, 1112,
-       949, 1114,
-       1111, 1245,
-       1122, 1260,
-       1240, 1260,
-       1257, 1382,
-       1261, 1260,
-       1356, 1260
+       97, 261,
+       102, 261,
+       105, 267,
+       266, 449,
+       892, 1097,
+       897, 1101,
+       898, 1103,
+       1099, 1332,
+       1100, 1334,
+       1102, 1336,
+       1333, 1523,
+       1344, 1541,
+       1517, 1541,
+       1537, 1713,
+       1542, 1541,
+       1680, 1541
 };
-static int parser_goto_row18[] = {
+static int parser_goto_row20[] = {
        10,
-       -1, 913,
-       223, 399,
-       306, 460,
-       951, 1116,
-       953, 1119,
-       955, 1124,
-       1075, 1215,
-       1104, 1236,
-       1106, 1238,
-       1108, 1242
+       -1, 1061,
+       232, 427,
+       324, 492,
+       1104, 1338,
+       1106, 1341,
+       1108, 1346,
+       1289, 1484,
+       1326, 1513,
+       1328, 1515,
+       1330, 1519
 };
-static int parser_goto_row19[] = {
+static int parser_goto_row21[] = {
        12,
-       -1, 527,
-       460, 576,
-       953, 1120,
-       955, 1125,
-       1106, 1239,
-       1108, 1243,
-       1116, 1250,
-       1119, 1254,
-       1124, 1264,
-       1236, 1349,
-       1238, 1352,
-       1242, 1359
+       -1, 571,
+       492, 625,
+       1106, 1342,
+       1108, 1347,
+       1328, 1516,
+       1330, 1520,
+       1338, 1528,
+       1341, 1532,
+       1346, 1545,
+       1513, 1671,
+       1515, 1674,
+       1519, 1683
 };
-static int parser_goto_row20[] = {
+static int parser_goto_row22[] = {
        2,
-       -1, 924,
-       922, 1083
+       -1, 1074,
+       1072, 1298
 };
-static int parser_goto_row21[] = {
+static int parser_goto_row23[] = {
        3,
-       -1, 751,
-       1084, 1224,
-       1253, 1378
+       -1, 866,
+       1299, 1493,
+       1531, 1705
 };
-static int parser_goto_row22[] = {
+static int parser_goto_row24[] = {
        2,
-       -1, 908,
-       910, 1073
+       -1, 1056,
+       1058, 1287
 };
-static int parser_goto_row23[] = {
+static int parser_goto_row25[] = {
        2,
-       -1, 752,
-       1072, 1214
+       -1, 867,
+       1286, 1483
 };
-static int parser_goto_row24[] = {
+static int parser_goto_row26[] = {
        9,
-       -1, 646,
-       643, 757,
-       904, 1068,
-       1067, 1211,
-       1071, 1213,
-       1212, 1335,
-       1256, 1381,
-       1547, 1601,
-       1602, 1628
+       -1, 732,
+       729, 875,
+       1051, 1281,
+       1280, 1479,
+       1285, 1482,
+       1481, 1653,
+       1536, 1712,
+       1935, 2015,
+       2016, 2066
 };
-static int parser_goto_row25[] = {
+static int parser_goto_row27[] = {
        2,
-       -1, 647,
-       648, 760
+       -1, 733,
+       734, 878
 };
-static int parser_goto_row26[] = {
+static int parser_goto_row28[] = {
        4,
-       -1, 926,
-       797, 969,
-       1470, 1546,
-       1513, 1575
+       -1, 1076,
+       927, 1157,
+       1834, 1934,
+       1897, 1985
 };
-static int parser_goto_row27[] = {
+static int parser_goto_row29[] = {
        28,
-       -1, 641,
-       576, 678,
-       754, 919,
-       794, 966,
-       918, 1080,
-       965, 1132,
-       1125, 1267,
-       1243, 1362,
-       1250, 1374,
-       1264, 1392,
-       1266, 1395,
-       1349, 1435,
-       1359, 1448,
-       1361, 1451,
-       1391, 1483,
-       1394, 1487,
-       1447, 1523,
-       1450, 1527,
-       1467, 1543,
-       1482, 1555,
-       1486, 1558,
-       1510, 1572,
-       1522, 1582,
-       1526, 1585,
-       1542, 1598,
-       1554, 1604,
-       1571, 1614,
-       1581, 1618
+       -1, 727,
+       625, 772,
+       869, 1067,
+       923, 1153,
+       1066, 1294,
+       1152, 1379,
+       1347, 1548,
+       1520, 1686,
+       1528, 1700,
+       1545, 1725,
+       1547, 1728,
+       1671, 1793,
+       1683, 1811,
+       1685, 1814,
+       1724, 1857,
+       1727, 1861,
+       1810, 1910,
+       1813, 1914,
+       1830, 1930,
+       1856, 1960,
+       1860, 1963,
+       1893, 1981,
+       1909, 1995,
+       1913, 1998,
+       1929, 2011,
+       1959, 2036,
+       1980, 2048,
+       1994, 2056
 };
-static int parser_goto_row28[] = {
+static int parser_goto_row30[] = {
        2,
-       -1, 1077,
-       1078, 1217
+       -1, 1291,
+       1292, 1486
 };
-static int parser_goto_row29[] = {
+static int parser_goto_row31[] = {
        2,
-       -1, 914,
-       1216, 1336
+       -1, 1062,
+       1485, 1654
 };
-static int parser_goto_row30[] = {
+static int parser_goto_row32[] = {
        1,
-       -1, 915
+       -1, 1063
 };
-static int parser_goto_row31[] = {
+static int parser_goto_row33[] = {
        1,
-       -1, 916
+       -1, 1064
 };
-static int parser_goto_row32[] = {
+static int parser_goto_row34[] = {
        1,
        -1, 64
 };
-static int parser_goto_row33[] = {
-       61,
+static int parser_goto_row35[] = {
+       65,
        -1, 65,
-       527, 642,
-       531, 655,
-       576, 679,
-       578, 682,
-       641, 756,
-       651, 763,
-       678, 796,
-       681, 798,
-       754, 920,
-       794, 967,
-       918, 1081,
-       919, 1082,
-       965, 1133,
-       966, 1134,
-       1080, 1219,
-       1125, 1268,
-       1132, 1274,
-       1243, 1363,
-       1250, 1375,
-       1264, 1393,
-       1266, 1396,
-       1267, 1397,
-       1349, 1436,
-       1359, 1449,
-       1361, 1452,
-       1362, 1453,
-       1374, 1469,
-       1391, 1484,
-       1392, 1485,
-       1394, 1488,
-       1395, 1489,
-       1435, 1512,
-       1447, 1524,
-       1448, 1525,
-       1450, 1528,
-       1451, 1529,
-       1467, 1544,
-       1482, 1556,
-       1483, 1557,
-       1486, 1559,
-       1487, 1560,
-       1510, 1573,
-       1522, 1583,
-       1523, 1584,
-       1526, 1586,
-       1527, 1587,
-       1542, 1599,
-       1543, 1600,
-       1554, 1605,
-       1555, 1606,
-       1558, 1607,
-       1571, 1615,
-       1572, 1616,
-       1581, 1619,
-       1582, 1620,
-       1585, 1621,
-       1598, 1627,
-       1604, 1629,
-       1614, 1636,
-       1618, 1637
+       571, 728,
+       575, 741,
+       625, 773,
+       627, 776,
+       727, 874,
+       737, 881,
+       746, 906,
+       772, 926,
+       775, 928,
+       780, 940,
+       869, 1068,
+       885, 1087,
+       923, 1154,
+       932, 1165,
+       1066, 1295,
+       1067, 1296,
+       1152, 1380,
+       1153, 1381,
+       1294, 1488,
+       1347, 1549,
+       1379, 1571,
+       1520, 1687,
+       1528, 1701,
+       1545, 1726,
+       1547, 1729,
+       1548, 1730,
+       1671, 1794,
+       1683, 1812,
+       1685, 1815,
+       1686, 1816,
+       1700, 1833,
+       1724, 1858,
+       1725, 1859,
+       1727, 1862,
+       1728, 1863,
+       1793, 1896,
+       1810, 1911,
+       1811, 1912,
+       1813, 1915,
+       1814, 1916,
+       1830, 1931,
+       1856, 1961,
+       1857, 1962,
+       1860, 1964,
+       1861, 1965,
+       1893, 1982,
+       1909, 1996,
+       1910, 1997,
+       1913, 1999,
+       1914, 2000,
+       1929, 2012,
+       1930, 2013,
+       1959, 2037,
+       1960, 2038,
+       1963, 2039,
+       1980, 2049,
+       1981, 2050,
+       1994, 2057,
+       1995, 2058,
+       1998, 2059,
+       2011, 2065,
+       2036, 2082,
+       2048, 2089,
+       2056, 2091
 };
-static int parser_goto_row34[] = {
+static int parser_goto_row36[] = {
        5,
        -1, 9,
        16, 96,
@@ -18193,139 +23173,157 @@ static int parser_goto_row34[] = {
        92, 96,
        111, 96
 };
-static int parser_goto_row35[] = {
-       19,
-       -1, 735,
-       202, 363,
-       205, 364,
-       276, 431,
-       323, 473,
-       433, 549,
-       446, 559,
-       464, 581,
-       484, 599,
-       753, 917,
-       830, 998,
-       941, 1103,
-       945, 1109,
-       959, 1128,
-       964, 1131,
-       1023, 1172,
-       1216, 917,
-       1428, 1506,
-       1569, 1612
-};
-static int parser_goto_row36[] = {
-       2,
-       -1, 736,
-       734, 856
-};
 static int parser_goto_row37[] = {
-       2,
-       -1, 858,
-       859, 1024
+       23,
+       -1, 832,
+       210, 392,
+       478, 608,
+       496, 630,
+       518, 650,
+       550, 690,
+       844, 1002,
+       868, 1065,
+       900, 1117,
+       918, 1117,
+       966, 1198,
+       1005, 690,
+       1098, 1331,
+       1114, 690,
+       1142, 1372,
+       1145, 690,
+       1151, 1378,
+       1223, 1436,
+       1353, 1552,
+       1485, 1065,
+       1783, 1889,
+       1978, 2046,
+       2020, 2068
 };
 static int parser_goto_row38[] = {
-       29,
-       -1, 1121,
-       160, 314,
-       399, 528,
-       460, 528,
-       749, 903,
-       750, 905,
-       759, 925,
-       815, 988,
-       906, 1070,
-       922, 925,
-       928, 1088,
-       1116, 528,
-       1117, 1252,
-       1122, 1261,
-       1123, 1263,
-       1223, 1342,
-       1236, 528,
-       1237, 1351,
-       1240, 1356,
-       1241, 1358,
-       1247, 1368,
-       1249, 1371,
-       1343, 1431,
-       1364, 1455,
-       1366, 1458,
-       1369, 1462,
-       1377, 1471,
-       1456, 1533,
-       1472, 1548
+       4,
+       -1, 833,
+       706, 851,
+       831, 992,
+       850, 1007
 };
 static int parser_goto_row39[] = {
-       32,
+       2,
+       -1, 994,
+       995, 1224
+};
+static int parser_goto_row40[] = {
+       33,
+       -1, 1343,
+       160, 332,
+       333, 500,
+       427, 572,
+       492, 572,
+       864, 1050,
+       865, 1052,
+       877, 1075,
+       951, 1187,
+       1053, 1283,
+       1054, 1284,
+       1072, 1075,
+       1078, 1303,
+       1188, 1411,
+       1304, 1496,
+       1338, 572,
+       1339, 1530,
+       1344, 1542,
+       1345, 1544,
+       1492, 1660,
+       1513, 572,
+       1514, 1673,
+       1517, 1680,
+       1518, 1682,
+       1525, 1692,
+       1527, 1695,
+       1661, 1786,
+       1688, 1818,
+       1690, 1821,
+       1693, 1825,
+       1704, 1835,
+       1819, 1920,
+       1836, 1936
+};
+static int parser_goto_row41[] = {
+       40,
        -1, 156,
        37, 166,
-       360, 507,
-       503, 617,
-       585, 720,
-       630, 742,
-       640, 755,
-       677, 795,
-       693, 817,
-       695, 166,
-       729, 742,
-       747, 899,
-       841, 1010,
-       853, 899,
-       997, 507,
-       1062, 1207,
-       1085, 1225,
-       1152, 617,
-       1165, 1296,
-       1167, 1207,
-       1220, 1340,
-       1255, 1380,
-       1283, 720,
-       1353, 1439,
-       1373, 1468,
-       1379, 1473,
-       1415, 1499,
-       1434, 1511,
-       1438, 1514,
-       1493, 1010,
-       1609, 1296,
-       1639, 1499
+       379, 541,
+       537, 668,
+       636, 817,
+       713, 856,
+       724, 872,
+       769, 924,
+       790, 953,
+       792, 166,
+       826, 856,
+       861, 1046,
+       873, 1071,
+       925, 1156,
+       977, 1210,
+       989, 1046,
+       1197, 541,
+       1275, 1475,
+       1300, 1494,
+       1416, 668,
+       1429, 1606,
+       1431, 1475,
+       1489, 1658,
+       1534, 1710,
+       1593, 817,
+       1675, 1799,
+       1697, 1831,
+       1706, 1837,
+       1711, 1841,
+       1767, 1881,
+       1790, 1894,
+       1797, 1898,
+       1800, 1901,
+       1832, 1933,
+       1838, 1938,
+       1875, 1210,
+       1895, 1984,
+       1899, 1987,
+       2043, 1606,
+       2095, 1881
 };
-static int parser_goto_row40[] = {
+static int parser_goto_row42[] = {
        1,
        -1, 66
 };
-static int parser_goto_row41[] = {
+static int parser_goto_row43[] = {
        8,
        -1, 67,
-       710, 838,
-       743, 893,
-       848, 893,
-       900, 1064,
-       1018, 1064,
-       1208, 1332,
-       1299, 1332
+       807, 974,
+       857, 1040,
+       984, 1040,
+       1047, 1277,
+       1218, 1277,
+       1476, 1650,
+       1609, 1650
 };
-static int parser_goto_row42[] = {
+static int parser_goto_row44[] = {
        7,
-       -1, 309,
-       508, 620,
-       811, 985,
-       848, 985,
-       1018, 985,
-       1154, 1288,
-       1299, 985
+       -1, 327,
+       542, 671,
+       947, 1184,
+       984, 1184,
+       1218, 1184,
+       1418, 1598,
+       1609, 1184
 };
-static int parser_goto_row43[] = {
+static int parser_goto_row45[] = {
        5,
-       -1, 227,
-       229, 402,
-       463, 402,
-       1009, 402,
-       1061, 402
+       -1, 236,
+       238, 431,
+       495, 431,
+       1209, 431,
+       1274, 431
 };
-static int parser_goto_row44[] = {
+static int parser_goto_row46[] = {
        25,
        -1, 157,
        11, 68,
@@ -18333,325 +23331,422 @@ static int parser_goto_row44[] = {
        97, 68,
        102, 68,
        105, 68,
-       158, 310,
-       228, 401,
-       403, 401,
-       462, 401,
-       508, 310,
-       580, 401,
-       584, 706,
-       710, 839,
-       743, 894,
-       811, 310,
-       848, 894,
-       900, 894,
-       1018, 894,
-       1060, 401,
-       1154, 310,
-       1206, 401,
-       1208, 894,
-       1282, 706,
-       1299, 894
+       158, 328,
+       237, 430,
+       432, 430,
+       494, 430,
+       542, 328,
+       629, 430,
+       635, 803,
+       807, 975,
+       857, 1041,
+       947, 328,
+       984, 1041,
+       1047, 1041,
+       1218, 1041,
+       1273, 430,
+       1418, 328,
+       1474, 430,
+       1476, 1041,
+       1592, 803,
+       1609, 1041
 };
-static int parser_goto_row45[] = {
-       20,
+static int parser_goto_row47[] = {
+       24,
        -1, 192,
        42, 194,
-       159, 311,
-       167, 317,
-       698, 823,
-       699, 825,
-       721, 842,
-       744, 895,
-       814, 986,
-       820, 991,
-       850, 1014,
-       901, 1065,
-       1020, 1169,
-       1209, 1333,
-       1297, 1416,
-       1301, 1418,
-       1407, 1494,
-       1500, 1566,
-       1632, 1640,
-       1645, 1648
-};
-static int parser_goto_row46[] = {
-       11,
-       -1, 477,
-       213, 376,
-       348, 498,
-       359, 498,
-       378, 521,
-       500, 521,
-       663, 788,
-       728, 847,
-       733, 847,
-       832, 376,
-       1292, 788
-};
-static int parser_goto_row47[] = {
-       1,
-       -1, 377
+       159, 329,
+       167, 336,
+       684, 840,
+       685, 842,
+       795, 959,
+       796, 961,
+       818, 978,
+       858, 1042,
+       950, 1185,
+       956, 1191,
+       986, 1214,
+       1048, 1278,
+       1110, 1349,
+       1111, 1351,
+       1220, 1433,
+       1477, 1651,
+       1607, 1768,
+       1611, 1770,
+       1759, 1876,
+       1882, 1975,
+       2085, 2096,
+       2102, 2106
 };
 static int parser_goto_row48[] = {
-       7,
-       -1, 378,
-       354, 500,
-       359, 500,
-       500, 500,
-       733, 500,
-       832, 500,
-       1292, 500
+       11,
+       -1, 511,
+       218, 404,
+       367, 532,
+       378, 532,
+       406, 565,
+       534, 565,
+       751, 914,
+       825, 983,
+       830, 983,
+       968, 404,
+       1602, 914
 };
 static int parser_goto_row49[] = {
-       2,
-       -1, 520,
-       499, 615
+       1,
+       -1, 405
 };
 static int parser_goto_row50[] = {
        7,
-       -1, 897,
-       902, 1066,
-       1021, 1066,
-       1210, 1334,
-       1226, 1345,
-       1302, 1334,
-       1341, 1430
+       -1, 406,
+       373, 534,
+       378, 534,
+       534, 534,
+       830, 534,
+       968, 534,
+       1602, 534
 };
 static int parser_goto_row51[] = {
-       1,
-       -1, 69
+       2,
+       -1, 564,
+       533, 666
 };
 static int parser_goto_row52[] = {
-       1,
-       -1, 70
+       7,
+       -1, 1044,
+       1049, 1279,
+       1221, 1279,
+       1478, 1652,
+       1495, 1663,
+       1612, 1652,
+       1659, 1785
 };
 static int parser_goto_row53[] = {
-       10,
-       -1, 217,
-       212, 374,
-       232, 407,
-       535, 665,
-       662, 787,
-       705, 834,
-       831, 1000,
-       836, 1006,
-       1161, 1294,
-       1291, 1411
+       7,
+       -1, 69,
+       550, 691,
+       900, 1118,
+       918, 1118,
+       1005, 691,
+       1114, 691,
+       1145, 691
 };
 static int parser_goto_row54[] = {
-       1,
-       -1, 71
+       5,
+       -1, 70,
+       550, 692,
+       1005, 692,
+       1114, 692,
+       1145, 692
 };
 static int parser_goto_row55[] = {
-       1,
-       -1, 72
+       15,
+       -1, 222,
+       217, 402,
+       241, 436,
+       579, 753,
+       750, 913,
+       802, 970,
+       967, 1200,
+       972, 1206,
+       1116, 1357,
+       1355, 1555,
+       1360, 1560,
+       1425, 1604,
+       1601, 1763,
+       1737, 1868,
+       1866, 1967
 };
 static int parser_goto_row56[] = {
-       3,
-       -1, 707,
-       710, 840,
-       838, 1008
+       7,
+       -1, 71,
+       550, 693,
+       900, 1119,
+       918, 1119,
+       1005, 693,
+       1114, 693,
+       1145, 693
 };
 static int parser_goto_row57[] = {
        1,
-       -1, 73
+       -1, 72
 };
 static int parser_goto_row58[] = {
-       1,
-       -1, 74
+       3,
+       -1, 804,
+       807, 976,
+       974, 1208
 };
 static int parser_goto_row59[] = {
-       1,
-       -1, 75
+       7,
+       -1, 73,
+       550, 694,
+       900, 1120,
+       918, 1120,
+       1005, 694,
+       1114, 694,
+       1145, 694
 };
 static int parser_goto_row60[] = {
-       1,
-       -1, 76
+       7,
+       -1, 74,
+       550, 695,
+       900, 1121,
+       918, 1121,
+       1005, 695,
+       1114, 695,
+       1145, 695
 };
 static int parser_goto_row61[] = {
+       7,
+       -1, 75,
+       550, 696,
+       900, 1122,
+       918, 1122,
+       1005, 696,
+       1114, 696,
+       1145, 696
+};
+static int parser_goto_row62[] = {
+       7,
+       -1, 76,
+       550, 697,
+       900, 1123,
+       918, 1123,
+       1005, 697,
+       1114, 697,
+       1145, 697
+};
+static int parser_goto_row63[] = {
        2,
        -1, 197,
-       701, 827
+       798, 963
 };
-static int parser_goto_row62[] = {
-       45,
-       -1, 898,
+static int parser_goto_row64[] = {
+       71,
+       -1, 1045,
        40, 180,
        41, 193,
        42, 195,
        44, 198,
-       192, 351,
-       194, 352,
-       197, 356,
-       214, 379,
-       217, 380,
-       373, 516,
-       374, 517,
-       406, 536,
-       407, 537,
-       465, 582,
-       512, 624,
-       583, 687,
-       664, 789,
-       665, 790,
-       697, 180,
-       698, 193,
-       699, 195,
-       701, 198,
-       761, 927,
-       786, 960,
-       787, 961,
-       797, 927,
-       823, 351,
-       825, 352,
-       827, 356,
-       833, 379,
-       834, 380,
-       999, 516,
-       1000, 517,
-       1005, 536,
-       1006, 537,
-       1146, 582,
-       1156, 624,
-       1281, 687,
-       1293, 789,
-       1294, 790,
-       1410, 960,
-       1411, 961,
-       1470, 927,
-       1513, 927
+       192, 370,
+       194, 371,
+       197, 375,
+       219, 407,
+       222, 408,
+       401, 560,
+       402, 561,
+       435, 580,
+       436, 581,
+       497, 631,
+       555, 707,
+       632, 782,
+       633, 783,
+       683, 839,
+       684, 841,
+       685, 843,
+       752, 915,
+       753, 916,
+       784, 944,
+       794, 180,
+       795, 193,
+       796, 195,
+       798, 198,
+       840, 1000,
+       842, 1001,
+       879, 1077,
+       912, 1143,
+       913, 1144,
+       927, 1077,
+       959, 370,
+       961, 371,
+       963, 375,
+       969, 407,
+       970, 408,
+       1109, 1348,
+       1110, 1350,
+       1111, 1352,
+       1199, 560,
+       1200, 561,
+       1205, 580,
+       1206, 581,
+       1226, 1438,
+       1349, 1550,
+       1351, 1551,
+       1356, 1556,
+       1357, 1557,
+       1408, 631,
+       1420, 707,
+       1554, 1734,
+       1555, 1735,
+       1559, 1738,
+       1560, 1739,
+       1589, 782,
+       1590, 783,
+       1603, 915,
+       1604, 916,
+       1731, 1864,
+       1756, 944,
+       1762, 1143,
+       1763, 1144,
+       1834, 1077,
+       1867, 1968,
+       1868, 1969,
+       1897, 1077,
+       1966, 2040,
+       1967, 2041
 };
-static int parser_goto_row63[] = {
+static int parser_goto_row65[] = {
        74,
        -1, 181,
        44, 199,
-       52, 207,
-       164, 315,
-       165, 316,
+       52, 212,
+       164, 334,
+       165, 335,
        197, 199,
-       209, 369,
-       239, 411,
-       274, 429,
-       282, 436,
-       321, 471,
-       404, 436,
-       408, 538,
-       428, 436,
-       697, 199,
-       698, 199,
-       699, 199,
-       701, 199,
-       723, 844,
-       739, 862,
-       791, 962,
-       816, 989,
-       818, 990,
-       823, 199,
-       825, 199,
-       827, 199,
-       833, 199,
-       834, 199,
-       846, 1013,
-       852, 199,
-       874, 1036,
-       999, 199,
-       1000, 199,
-       1005, 199,
-       1006, 199,
-       1011, 1164,
-       1021, 199,
-       1028, 1173,
-       1146, 199,
-       1156, 199,
-       1281, 199,
-       1293, 199,
-       1294, 199,
-       1302, 199,
-       1383, 1476,
-       1388, 1480,
-       1409, 1496,
-       1410, 199,
-       1411, 199,
-       1417, 1501,
-       1440, 1516,
-       1444, 1520,
-       1459, 1536,
-       1463, 1540,
-       1477, 1550,
-       1478, 1551,
-       1481, 1553,
-       1502, 1567,
-       1517, 1577,
-       1518, 1578,
-       1521, 1580,
-       1530, 1588,
-       1534, 1592,
-       1537, 1594,
-       1538, 1595,
-       1541, 1597,
-       1552, 1603,
-       1564, 1608,
-       1579, 1617,
-       1589, 1622,
-       1590, 1623,
-       1593, 1625,
-       1596, 1626,
-       1624, 1638
+       214, 397,
+       248, 441,
+       284, 461,
+       296, 468,
+       340, 505,
+       433, 468,
+       437, 582,
+       460, 468,
+       550, 698,
+       794, 199,
+       795, 199,
+       796, 199,
+       798, 199,
+       820, 980,
+       853, 1009,
+       920, 1149,
+       952, 1189,
+       954, 1190,
+       959, 199,
+       961, 199,
+       963, 199,
+       969, 199,
+       970, 199,
+       982, 1213,
+       988, 199,
+       1005, 698,
+       1021, 1245,
+       1114, 698,
+       1145, 698,
+       1199, 199,
+       1200, 199,
+       1205, 199,
+       1206, 199,
+       1211, 1428,
+       1221, 199,
+       1233, 1441,
+       1408, 199,
+       1420, 199,
+       1589, 199,
+       1590, 199,
+       1603, 199,
+       1604, 199,
+       1612, 199,
+       1721, 1854,
+       1756, 199,
+       1761, 1878,
+       1762, 199,
+       1763, 199,
+       1769, 1883,
+       1807, 1907,
+       1822, 1923,
+       1826, 1927,
+       1855, 1958,
+       1884, 1976,
+       1908, 1993,
+       1917, 2001,
+       1921, 2005,
+       1924, 2007,
+       1925, 2008,
+       1928, 2010,
+       1940, 2018,
+       1973, 2042,
+       2002, 2060,
+       2003, 2061,
+       2006, 2063,
+       2009, 2064,
+       2062, 2092,
+       2100, 2105
 };
-static int parser_goto_row64[] = {
+static int parser_goto_row66[] = {
        1,
        -1, 182
 };
-static int parser_goto_row65[] = {
+static int parser_goto_row67[] = {
        5,
        -1, 183,
-       322, 472,
-       478, 593,
-       480, 595,
-       594, 727
+       341, 506,
+       512, 644,
+       514, 646,
+       645, 824
 };
-static int parser_goto_row66[] = {
+static int parser_goto_row68[] = {
        1,
        -1, 184
 };
-static int parser_goto_row67[] = {
-       11,
+static int parser_goto_row69[] = {
+       33,
        -1, 185,
-       481, 596,
-       482, 597,
-       483, 598,
-       487, 602,
-       488, 603,
-       489, 604,
-       490, 605,
-       491, 606,
-       492, 607,
-       493, 608
+       515, 647,
+       516, 648,
+       517, 649,
+       521, 653,
+       522, 654,
+       523, 655,
+       524, 656,
+       525, 657,
+       526, 658,
+       527, 659,
+       1714, 1845,
+       1801, 1845,
+       1850, 1845,
+       1851, 1845,
+       1903, 1845,
+       1904, 1845,
+       1941, 1845,
+       1957, 1845,
+       1992, 1845,
+       2021, 2069,
+       2022, 2070,
+       2023, 2071,
+       2024, 2072,
+       2025, 2073,
+       2026, 2074,
+       2027, 2075,
+       2028, 1845,
+       2030, 1845,
+       2031, 2079,
+       2032, 2080,
+       2077, 1845,
+       2110, 1845
 };
-static int parser_goto_row68[] = {
+static int parser_goto_row70[] = {
        3,
        -1, 186,
-       485, 600,
-       486, 601
+       519, 651,
+       520, 652
 };
-static int parser_goto_row69[] = {
+static int parser_goto_row71[] = {
        6,
        -1, 187,
-       324, 474,
-       327, 476,
-       494, 609,
-       495, 610,
-       496, 611
+       343, 508,
+       346, 510,
+       528, 660,
+       529, 661,
+       530, 662
 };
-static int parser_goto_row70[] = {
+static int parser_goto_row72[] = {
        1,
        -1, 188
 };
-static int parser_goto_row71[] = {
-       111,
-       -1, 208,
+static int parser_goto_row73[] = {
+       149,
+       -1, 213,
        11, 77,
        22, 77,
        30, 77,
@@ -18664,288 +23759,444 @@ static int parser_goto_row71[] = {
        102, 77,
        105, 77,
        158, 77,
-       176, 326,
+       176, 345,
        192, 189,
        194, 189,
        197, 200,
-       214, 189,
-       217, 189,
-       228, 77,
-       360, 77,
-       373, 189,
-       374, 189,
-       403, 77,
-       406, 189,
-       407, 189,
-       462, 77,
-       465, 189,
-       503, 77,
-       508, 77,
-       512, 189,
-       580, 77,
-       583, 189,
-       584, 708,
-       585, 77,
-       630, 77,
-       640, 77,
-       664, 189,
-       665, 189,
-       677, 77,
-       690, 708,
-       693, 77,
-       695, 708,
-       697, 200,
-       698, 200,
-       699, 200,
-       701, 200,
-       710, 77,
-       729, 708,
-       743, 77,
-       746, 189,
-       747, 77,
-       761, 189,
-       786, 189,
-       787, 189,
-       797, 189,
-       811, 77,
-       823, 200,
-       825, 200,
-       827, 200,
-       833, 200,
-       834, 200,
-       841, 77,
-       848, 77,
-       852, 200,
-       853, 708,
-       900, 77,
-       902, 189,
-       997, 708,
-       999, 200,
-       1000, 200,
-       1005, 200,
-       1006, 200,
-       1018, 77,
-       1021, 200,
-       1060, 77,
-       1062, 77,
-       1085, 77,
-       1146, 200,
-       1152, 708,
-       1154, 77,
-       1156, 200,
-       1165, 77,
-       1167, 708,
-       1206, 77,
-       1208, 77,
-       1210, 189,
-       1220, 77,
+       219, 189,
+       222, 189,
+       237, 77,
+       379, 77,
+       401, 189,
+       402, 189,
+       432, 77,
+       435, 189,
+       436, 189,
+       494, 77,
+       497, 189,
+       537, 77,
+       542, 77,
+       550, 699,
+       555, 189,
+       629, 77,
+       632, 189,
+       633, 189,
+       635, 805,
+       636, 77,
+       683, 189,
+       684, 189,
+       685, 189,
+       713, 77,
+       724, 77,
+       752, 189,
+       753, 189,
+       769, 77,
+       784, 189,
+       787, 805,
+       790, 77,
+       792, 805,
+       794, 200,
+       795, 200,
+       796, 200,
+       798, 200,
+       807, 77,
+       826, 805,
+       840, 189,
+       842, 189,
+       857, 77,
+       860, 189,
+       861, 77,
+       873, 77,
+       879, 189,
+       912, 189,
+       913, 189,
+       925, 77,
+       927, 189,
+       947, 77,
+       959, 200,
+       961, 200,
+       963, 200,
+       969, 200,
+       970, 200,
+       977, 77,
+       984, 77,
+       988, 200,
+       989, 805,
+       1005, 699,
+       1047, 77,
+       1049, 189,
+       1109, 189,
+       1110, 189,
+       1111, 189,
+       1114, 699,
+       1145, 699,
+       1197, 805,
+       1199, 200,
+       1200, 200,
+       1205, 200,
+       1206, 200,
+       1218, 77,
+       1221, 200,
        1226, 189,
-       1255, 77,
-       1281, 200,
-       1282, 708,
-       1283, 708,
-       1293, 200,
-       1294, 200,
-       1299, 77,
-       1302, 200,
-       1341, 189,
-       1353, 77,
-       1373, 77,
-       1379, 77,
-       1410, 200,
-       1411, 200,
-       1415, 77,
-       1434, 77,
-       1438, 77,
-       1470, 189,
-       1493, 708,
-       1513, 189,
-       1609, 708,
-       1639, 708
+       1273, 77,
+       1275, 77,
+       1300, 77,
+       1349, 189,
+       1351, 189,
+       1356, 189,
+       1357, 189,
+       1408, 200,
+       1416, 805,
+       1418, 77,
+       1420, 200,
+       1429, 77,
+       1431, 805,
+       1474, 77,
+       1476, 77,
+       1478, 189,
+       1489, 77,
+       1495, 189,
+       1534, 77,
+       1554, 189,
+       1555, 189,
+       1559, 189,
+       1560, 189,
+       1589, 200,
+       1590, 200,
+       1592, 805,
+       1593, 805,
+       1603, 200,
+       1604, 200,
+       1609, 77,
+       1612, 200,
+       1659, 189,
+       1675, 77,
+       1697, 77,
+       1706, 77,
+       1711, 77,
+       1731, 189,
+       1756, 200,
+       1762, 200,
+       1763, 200,
+       1767, 77,
+       1790, 77,
+       1797, 77,
+       1800, 77,
+       1832, 77,
+       1834, 189,
+       1838, 77,
+       1867, 189,
+       1868, 189,
+       1875, 805,
+       1895, 77,
+       1897, 189,
+       1899, 77,
+       1966, 189,
+       1967, 189,
+       2043, 805,
+       2095, 805
 };
-static int parser_goto_row72[] = {
-       60,
+static int parser_goto_row74[] = {
+       62,
        -1, 78,
        28, 141,
        46, 141,
        55, 141,
        132, 141,
-       240, 141,
-       275, 141,
-       277, 141,
-       283, 141,
-       440, 141,
-       442, 141,
-       443, 141,
-       444, 141,
-       445, 141,
-       447, 141,
-       448, 141,
-       449, 141,
-       450, 141,
-       451, 141,
-       452, 141,
-       453, 141,
-       454, 141,
-       455, 141,
-       456, 141,
-       457, 141,
-       458, 141,
-       532, 141,
-       534, 141,
-       554, 141,
-       689, 141,
-       702, 141,
-       704, 141,
-       740, 882,
-       837, 141,
-       873, 882,
-       1029, 882,
-       1031, 882,
-       1037, 882,
-       1159, 141,
-       1160, 141,
-       1186, 882,
-       1188, 882,
-       1189, 882,
-       1190, 882,
-       1191, 882,
-       1193, 882,
-       1194, 882,
-       1195, 882,
-       1196, 882,
-       1197, 882,
-       1198, 882,
-       1199, 882,
-       1200, 882,
-       1201, 882,
-       1202, 882,
-       1203, 882,
-       1204, 882,
-       1310, 882,
-       1400, 141,
-       1641, 882
+       250, 141,
+       285, 141,
+       287, 141,
+       297, 141,
+       472, 141,
+       474, 141,
+       475, 141,
+       476, 141,
+       477, 141,
+       479, 141,
+       480, 141,
+       481, 141,
+       482, 141,
+       483, 141,
+       484, 141,
+       485, 141,
+       486, 141,
+       487, 141,
+       488, 141,
+       489, 141,
+       490, 141,
+       576, 141,
+       578, 141,
+       603, 141,
+       786, 141,
+       799, 141,
+       801, 141,
+       854, 1029,
+       900, 141,
+       918, 141,
+       973, 141,
+       1020, 1029,
+       1234, 1029,
+       1236, 1029,
+       1246, 1029,
+       1423, 141,
+       1424, 141,
+       1454, 1029,
+       1456, 1029,
+       1457, 1029,
+       1458, 1029,
+       1459, 1029,
+       1461, 1029,
+       1462, 1029,
+       1463, 1029,
+       1464, 1029,
+       1465, 1029,
+       1466, 1029,
+       1467, 1029,
+       1468, 1029,
+       1469, 1029,
+       1470, 1029,
+       1471, 1029,
+       1472, 1029,
+       1626, 1029,
+       1745, 141,
+       2097, 1029
 };
-static int parser_goto_row73[] = {
+static int parser_goto_row75[] = {
        1,
        -1, 79
 };
-static int parser_goto_row74[] = {
+static int parser_goto_row76[] = {
        1,
        -1, 80
 };
-static int parser_goto_row75[] = {
+static int parser_goto_row77[] = {
        2,
-       -1, 235,
-       238, 409
+       -1, 244,
+       247, 439
 };
-static int parser_goto_row76[] = {
+static int parser_goto_row78[] = {
        1,
-       -1, 236
+       -1, 245
 };
-static int parser_goto_row77[] = {
+static int parser_goto_row79[] = {
        2,
-       -1, 237,
-       238, 410
+       -1, 246,
+       247, 440
 };
-static int parser_goto_row78[] = {
-       39,
+static int parser_goto_row80[] = {
+       50,
+       -1, 700,
+       47, 206,
+       48, 207,
+       49, 208,
+       50, 209,
+       57, 223,
+       58, 224,
+       59, 225,
+       61, 226,
+       81, 249,
+       128, 289,
+       129, 290,
+       130, 291,
+       131, 292,
+       137, 299,
+       138, 300,
+       139, 301,
+       140, 302,
+       160, 333,
+       246, 438,
+       389, 551,
+       391, 554,
+       394, 556,
+       440, 583,
+       552, 705,
+       688, 554,
+       846, 1004,
+       865, 1053,
+       900, 1124,
+       918, 1146,
+       951, 1188,
+       1016, 1238,
+       1017, 1239,
+       1018, 1240,
+       1019, 1241,
+       1025, 1248,
+       1026, 1249,
+       1027, 1250,
+       1028, 1251,
+       1060, 554,
+       1078, 1304,
+       1230, 1440,
+       1439, 1614,
+       1449, 1622,
+       1452, 1623,
+       1453, 1624,
+       1553, 1732,
+       1567, 1743,
+       1632, 1778,
+       1777, 1886
+};
+static int parser_goto_row81[] = {
+       3,
+       -1, 548,
+       205, 388,
+       837, 999
+};
+static int parser_goto_row82[] = {
+       3,
+       -1, 870,
+       456, 589,
+       1533, 1708
+};
+static int parser_goto_row83[] = {
+       3,
+       -1, 590,
+       386, 549,
+       675, 834
+};
+static int parser_goto_row84[] = {
+       3,
+       -1, 756,
+       871, 1069,
+       1709, 1839
+};
+static int parser_goto_row85[] = {
+       2,
+       -1, 757,
+       759, 919
+};
+static int parser_goto_row86[] = {
+       2,
+       -1, 680,
+       681, 838
+};
+static int parser_goto_row87[] = {
+       3,
+       -1, 701,
+       1114, 1354,
+       1145, 1373
+};
+static int parser_goto_row88[] = {
+       3,
+       -1, 848,
+       849, 1006,
+       1362, 1006
+};
+static int parser_goto_row89[] = {
+       2,
+       -1, 702,
+       1005, 1228
+};
+static int parser_goto_row90[] = {
+       3,
+       -1, 389,
+       545, 676,
+       758, 918
+};
+static int parser_goto_row91[] = {
+       43,
        -1, 142,
        46, 203,
-       55, 212,
-       122, 273,
-       127, 278,
-       135, 284,
+       55, 217,
+       122, 283,
+       127, 288,
+       135, 298,
        175, 203,
-       178, 328,
-       196, 354,
-       206, 365,
-       240, 412,
-       285, 439,
-       349, 412,
-       355, 354,
-       431, 548,
-       473, 591,
-       532, 659,
-       534, 662,
-       572, 673,
-       574, 675,
-       612, 659,
-       613, 728,
-       618, 733,
-       625, 738,
-       702, 203,
-       704, 831,
-       737, 861,
-       792, 963,
-       837, 412,
-       863, 1027,
-       868, 1032,
-       876, 1038,
-       1039, 1183,
-       1159, 659,
-       1160, 1291,
-       1177, 1306,
-       1328, 1424,
-       1330, 1426,
-       1503, 1568
+       178, 347,
+       196, 373,
+       211, 393,
+       250, 442,
+       303, 471,
+       368, 442,
+       374, 373,
+       463, 597,
+       507, 642,
+       576, 747,
+       578, 750,
+       621, 765,
+       623, 767,
+       663, 747,
+       664, 825,
+       669, 830,
+       689, 217,
+       708, 852,
+       799, 203,
+       801, 967,
+       836, 998,
+       921, 1150,
+       973, 442,
+       1010, 1232,
+       1015, 1237,
+       1023, 1247,
+       1115, 1355,
+       1227, 750,
+       1252, 1451,
+       1423, 747,
+       1424, 1601,
+       1445, 1619,
+       1646, 1779,
+       1648, 1781,
+       1736, 1866,
+       1885, 1977
 };
-static int parser_goto_row79[] = {
+static int parser_goto_row92[] = {
        12,
        -1, 143,
        46, 204,
-       55, 213,
-       240, 413,
-       532, 660,
-       534, 663,
-       689, 809,
-       702, 829,
-       704, 832,
-       837, 1007,
-       1159, 1290,
-       1160, 1292
+       55, 218,
+       250, 443,
+       576, 748,
+       578, 751,
+       786, 945,
+       799, 965,
+       801, 968,
+       973, 1207,
+       1423, 1600,
+       1424, 1602
 };
-static int parser_goto_row80[] = {
-       9,
+static int parser_goto_row93[] = {
+       11,
        -1, 81,
-       77, 232,
-       153, 305,
-       189, 348,
-       200, 359,
-       208, 368,
-       281, 305,
-       326, 368,
-       708, 836
+       77, 241,
+       153, 323,
+       189, 367,
+       200, 378,
+       213, 396,
+       295, 323,
+       345, 396,
+       699, 241,
+       805, 972,
+       1128, 1360
 };
-static int parser_goto_row81[] = {
+static int parser_goto_row94[] = {
        3,
-       -1, 370,
-       282, 437,
-       428, 545
+       -1, 398,
+       296, 469,
+       460, 594
 };
-static int parser_goto_row82[] = {
+static int parser_goto_row95[] = {
        2,
-       -1, 628,
-       629, 741
+       -1, 711,
+       712, 855
 };
-static int parser_goto_row83[] = {
+static int parser_goto_row96[] = {
        8,
-       -1, 320,
-       318, 469,
-       520, 633,
-       615, 732,
-       631, 745,
-       730, 851,
-       821, 993,
-       992, 1150
+       -1, 339,
+       337, 503,
+       564, 716,
+       666, 829,
+       714, 859,
+       827, 987,
+       957, 1193,
+       1192, 1414
 };
-static int parser_goto_row84[] = {
+static int parser_goto_row97[] = {
        2,
-       -1, 270,
-       381, 523
+       -1, 280,
+       409, 567
 };
-static int parser_goto_row85[] = {
-       117,
+static int parser_goto_row98[] = {
+       127,
        -1, 190,
        11, 82,
        22, 82,
@@ -18959,133 +24210,158 @@ static int parser_goto_row85[] = {
        105, 82,
        132, 144,
        158, 82,
-       228, 82,
-       240, 144,
-       275, 144,
-       277, 144,
-       283, 144,
-       360, 82,
-       403, 82,
-       440, 144,
-       442, 144,
-       443, 144,
-       444, 144,
-       445, 144,
-       447, 144,
-       448, 144,
-       449, 144,
-       450, 144,
-       451, 144,
-       452, 144,
-       453, 144,
-       454, 144,
-       455, 144,
-       456, 144,
-       457, 144,
-       458, 144,
-       462, 82,
-       503, 82,
-       508, 82,
-       532, 144,
-       534, 144,
-       554, 144,
-       580, 82,
-       584, 709,
-       585, 82,
-       630, 82,
-       640, 82,
-       677, 82,
-       689, 144,
-       690, 709,
-       693, 82,
-       695, 709,
-       702, 144,
-       704, 144,
-       710, 82,
-       729, 709,
-       740, 883,
-       743, 82,
-       747, 82,
-       811, 82,
-       837, 144,
-       841, 82,
-       848, 82,
-       853, 709,
-       873, 883,
-       900, 82,
-       997, 709,
-       1018, 82,
-       1029, 883,
-       1031, 883,
-       1037, 883,
-       1060, 82,
-       1062, 82,
-       1085, 82,
-       1152, 709,
-       1154, 82,
-       1159, 144,
-       1160, 144,
-       1165, 82,
-       1167, 709,
-       1186, 883,
-       1188, 883,
-       1189, 883,
-       1190, 883,
-       1191, 883,
-       1193, 883,
-       1194, 883,
-       1195, 883,
-       1196, 883,
-       1197, 883,
-       1198, 883,
-       1199, 883,
-       1200, 883,
-       1201, 883,
-       1202, 883,
-       1203, 883,
-       1204, 883,
-       1206, 82,
-       1208, 82,
-       1220, 82,
-       1255, 82,
-       1282, 709,
-       1283, 709,
-       1299, 82,
-       1310, 883,
-       1353, 82,
-       1373, 82,
-       1379, 82,
-       1400, 144,
-       1415, 82,
-       1434, 82,
-       1438, 82,
-       1493, 709,
-       1609, 709,
-       1639, 709,
-       1641, 883
+       237, 82,
+       250, 144,
+       285, 144,
+       287, 144,
+       297, 144,
+       379, 82,
+       432, 82,
+       472, 144,
+       474, 144,
+       475, 144,
+       476, 144,
+       477, 144,
+       479, 144,
+       480, 144,
+       481, 144,
+       482, 144,
+       483, 144,
+       484, 144,
+       485, 144,
+       486, 144,
+       487, 144,
+       488, 144,
+       489, 144,
+       490, 144,
+       494, 82,
+       537, 82,
+       542, 82,
+       576, 144,
+       578, 144,
+       603, 144,
+       629, 82,
+       635, 806,
+       636, 82,
+       713, 82,
+       724, 82,
+       769, 82,
+       786, 144,
+       787, 806,
+       790, 82,
+       792, 806,
+       799, 144,
+       801, 144,
+       807, 82,
+       826, 806,
+       854, 1030,
+       857, 82,
+       861, 82,
+       873, 82,
+       900, 144,
+       918, 144,
+       925, 82,
+       947, 82,
+       973, 144,
+       977, 82,
+       984, 82,
+       989, 806,
+       1020, 1030,
+       1047, 82,
+       1197, 806,
+       1218, 82,
+       1234, 1030,
+       1236, 1030,
+       1246, 1030,
+       1273, 82,
+       1275, 82,
+       1300, 82,
+       1416, 806,
+       1418, 82,
+       1423, 144,
+       1424, 144,
+       1429, 82,
+       1431, 806,
+       1454, 1030,
+       1456, 1030,
+       1457, 1030,
+       1458, 1030,
+       1459, 1030,
+       1461, 1030,
+       1462, 1030,
+       1463, 1030,
+       1464, 1030,
+       1465, 1030,
+       1466, 1030,
+       1467, 1030,
+       1468, 1030,
+       1469, 1030,
+       1470, 1030,
+       1471, 1030,
+       1472, 1030,
+       1474, 82,
+       1476, 82,
+       1489, 82,
+       1534, 82,
+       1592, 806,
+       1593, 806,
+       1609, 82,
+       1626, 1030,
+       1675, 82,
+       1697, 82,
+       1706, 82,
+       1711, 82,
+       1745, 144,
+       1767, 82,
+       1790, 82,
+       1797, 82,
+       1800, 82,
+       1832, 82,
+       1838, 82,
+       1875, 806,
+       1895, 82,
+       1899, 82,
+       2043, 806,
+       2095, 806,
+       2097, 1030
 };
-static int parser_goto_row86[] = {
+static int parser_goto_row99[] = {
        4,
        -1, 83,
-       85, 242,
-       271, 242,
-       543, 242
+       85, 252,
+       281, 252,
+       588, 252
 };
-static int parser_goto_row87[] = {
+static int parser_goto_row100[] = {
        2,
        -1, 84,
-       85, 243
+       85, 253
 };
-static int parser_goto_row88[] = {
-       5,
-       -1, 89,
-       270, 426,
-       522, 634,
-       523, 635,
-       654, 767
+static int parser_goto_row101[] = {
+       20,
+       -1, 871,
+       14, 89,
+       280, 458,
+       456, 591,
+       457, 592,
+       566, 717,
+       567, 719,
+       718, 863,
+       740, 886,
+       900, 1125,
+       918, 1147,
+       1124, 1358,
+       1129, 1361,
+       1146, 1374,
+       1148, 1375,
+       1533, 1709,
+       1553, 1733,
+       1567, 1744,
+       1732, 1865,
+       1743, 1870
 };
-static int parser_goto_row89[] = {
-       82,
+static int parser_goto_row102[] = {
+       90,
        -1, 120,
        0, 10,
        4, 10,
@@ -19099,7 +24375,7 @@ static int parser_goto_row89[] = {
        26, 10,
        30, 158,
        37, 158,
-       68, 228,
+       68, 237,
        92, 10,
        93, 10,
        94, 10,
@@ -19112,675 +24388,654 @@ static int parser_goto_row89[] = {
        115, 10,
        116, 10,
        118, 10,
-       229, 403,
-       246, 10,
-       247, 10,
-       249, 10,
-       253, 10,
+       238, 432,
+       256, 10,
+       257, 10,
        259, 10,
-       260, 10,
-       262, 10,
-       265, 10,
-       310, 462,
-       360, 508,
-       415, 10,
-       421, 10,
-       463, 580,
-       503, 508,
-       584, 710,
-       585, 158,
-       630, 743,
-       640, 508,
-       677, 508,
-       690, 811,
-       693, 508,
-       695, 811,
-       729, 848,
-       747, 900,
-       839, 228,
-       841, 508,
-       853, 1018,
-       894, 1060,
-       924, 1087,
-       997, 1154,
-       1009, 403,
-       1061, 1206,
-       1062, 1208,
-       1083, 1222,
-       1085, 508,
-       1152, 1154,
-       1165, 158,
-       1167, 1299,
-       1220, 508,
-       1225, 1344,
-       1255, 508,
-       1282, 710,
-       1283, 811,
-       1340, 1429,
-       1345, 1432,
-       1353, 508,
-       1373, 508,
-       1379, 508,
-       1415, 158,
-       1430, 1507,
-       1434, 508,
-       1438, 508,
-       1493, 1154,
-       1609, 811,
-       1639, 811
+       263, 10,
+       269, 10,
+       270, 10,
+       272, 10,
+       275, 10,
+       328, 494,
+       379, 542,
+       445, 10,
+       451, 10,
+       495, 629,
+       537, 542,
+       635, 807,
+       636, 158,
+       713, 857,
+       724, 542,
+       769, 542,
+       787, 947,
+       790, 542,
+       792, 947,
+       826, 984,
+       861, 1047,
+       873, 542,
+       925, 542,
+       975, 237,
+       977, 542,
+       989, 1218,
+       1041, 1273,
+       1074, 1302,
+       1197, 1418,
+       1209, 432,
+       1274, 1474,
+       1275, 1476,
+       1298, 1491,
+       1300, 542,
+       1416, 1418,
+       1429, 158,
+       1431, 1609,
+       1489, 542,
+       1494, 1662,
+       1534, 542,
+       1592, 807,
+       1593, 947,
+       1658, 1784,
+       1663, 1787,
+       1675, 542,
+       1697, 542,
+       1706, 542,
+       1711, 542,
+       1767, 158,
+       1785, 1890,
+       1790, 542,
+       1797, 542,
+       1800, 542,
+       1832, 542,
+       1838, 542,
+       1875, 1418,
+       1895, 542,
+       1899, 542,
+       2043, 947,
+       2095, 947
 };
-static int parser_goto_row90[] = {
-       303,
+static int parser_goto_row103[] = {
+       369,
        -1, 105,
        0, 11,
        4, 22,
        15, 22,
-       16, 97,
-       17, 102,
-       23, 22,
-       24, 97,
-       25, 102,
-       27, 121,
-       32, 161,
-       33, 162,
-       34, 163,
-       35, 164,
-       36, 165,
-       38, 168,
-       45, 202,
-       53, 209,
-       80, 239,
-       92, 97,
-       93, 102,
-       98, 102,
-       111, 97,
-       112, 102,
-       115, 102,
-       123, 274,
-       124, 275,
-       125, 276,
-       126, 277,
-       133, 282,
-       134, 283,
-       171, 321,
-       172, 322,
-       173, 323,
-       174, 324,
-       177, 327,
-       210, 371,
-       211, 372,
-       218, 381,
-       225, 400,
-       230, 404,
-       231, 405,
-       236, 408,
-       246, 102,
-       259, 102,
-       268, 425,
-       272, 428,
-       279, 433,
-       286, 440,
-       287, 442,
-       288, 443,
-       289, 444,
-       290, 445,
-       291, 446,
-       292, 447,
-       293, 448,
-       294, 449,
-       295, 450,
-       296, 451,
-       297, 452,
-       298, 453,
-       299, 454,
-       300, 455,
-       301, 456,
-       302, 457,
-       303, 458,
-       304, 459,
-       307, 461,
-       312, 464,
-       313, 465,
-       315, 467,
-       316, 468,
-       320, 470,
-       329, 478,
-       330, 480,
-       331, 481,
-       332, 482,
-       333, 483,
-       334, 484,
-       335, 485,
-       336, 486,
-       337, 487,
-       338, 488,
-       339, 489,
-       340, 490,
-       341, 491,
-       342, 492,
-       343, 493,
-       344, 494,
-       345, 495,
-       346, 496,
-       347, 497,
-       358, 504,
-       367, 513,
-       369, 514,
-       399, 529,
-       411, 539,
-       429, 546,
-       434, 550,
-       436, 551,
-       441, 554,
-       460, 529,
-       466, 583,
-       469, 587,
-       471, 590,
-       475, 592,
-       479, 594,
-       510, 622,
-       511, 623,
-       526, 637,
-       528, 643,
-       531, 656,
-       533, 661,
-       538, 666,
-       547, 670,
-       573, 674,
-       578, 683,
-       586, 722,
-       588, 723,
-       589, 724,
-       621, 734,
-       626, 739,
-       627, 740,
-       632, 746,
-       633, 587,
-       638, 753,
-       649, 761,
-       650, 762,
-       651, 764,
-       655, 768,
-       657, 781,
-       658, 784,
-       669, 791,
-       680, 797,
-       681, 799,
-       682, 802,
-       684, 806,
-       685, 808,
-       692, 816,
-       694, 818,
-       696, 821,
-       725, 846,
-       731, 852,
-       732, 587,
-       736, 860,
-       745, 587,
-       748, 902,
-       749, 904,
-       752, 909,
-       763, 930,
-       765, 934,
-       766, 936,
-       769, 938,
-       770, 940,
-       771, 941,
-       776, 945,
-       782, 957,
-       785, 959,
-       793, 964,
-       798, 970,
-       800, 974,
-       801, 976,
-       803, 978,
-       804, 980,
-       807, 982,
-       835, 1004,
-       843, 1011,
-       844, 1012,
-       851, 587,
-       854, 1021,
-       856, 1022,
-       857, 1023,
-       862, 1026,
-       864, 1028,
-       865, 1029,
-       866, 1030,
-       867, 1031,
-       875, 1037,
-       884, 1040,
-       903, 1067,
-       906, 1071,
-       907, 1072,
-       910, 1074,
-       923, 1084,
-       929, 1091,
-       931, 1094,
-       932, 1096,
-       935, 1098,
-       939, 1101,
-       953, 529,
-       955, 529,
-       962, 1129,
-       971, 1136,
-       972, 1138,
-       975, 1140,
-       979, 1143,
-       987, 1146,
-       989, 1148,
-       990, 1149,
-       993, 1151,
-       1013, 1166,
-       1033, 1179,
-       1041, 1186,
-       1042, 1188,
-       1043, 1189,
-       1044, 1190,
-       1045, 1191,
-       1046, 1192,
-       1047, 1193,
-       1048, 1194,
-       1049, 1195,
-       1050, 1196,
-       1051, 1197,
-       1052, 1198,
-       1053, 1199,
-       1054, 1200,
-       1055, 1201,
-       1056, 1202,
-       1057, 1203,
-       1058, 1204,
-       1059, 1205,
-       1063, 1210,
-       1070, 1212,
-       1076, 1216,
-       1079, 1218,
-       1086, 1226,
-       1089, 1227,
-       1092, 1230,
-       1095, 1232,
-       1106, 529,
-       1108, 529,
-       1116, 529,
-       1118, 1253,
-       1119, 529,
-       1121, 1256,
-       1124, 529,
-       1127, 1269,
-       1128, 1270,
-       1130, 1272,
-       1131, 1273,
-       1137, 1276,
-       1147, 1281,
-       1150, 587,
-       1164, 1295,
-       1168, 1302,
-       1173, 1303,
-       1180, 1308,
-       1187, 1310,
-       1221, 1341,
-       1236, 529,
-       1238, 529,
-       1242, 529,
-       1258, 1383,
-       1262, 1388,
-       1271, 1400,
-       1284, 1408,
-       1285, 1409,
-       1298, 1417,
-       1305, 1421,
-       1329, 1425,
-       1337, 1427,
-       1339, 1428,
-       1354, 1440,
-       1357, 1444,
-       1367, 1459,
-       1370, 1463,
-       1376, 1470,
-       1377, 904,
-       1384, 1477,
-       1386, 1478,
-       1389, 1481,
-       1398, 1490,
-       1401, 1492,
-       1420, 1502,
-       1437, 1513,
-       1441, 1517,
-       1442, 1518,
-       1445, 1521,
-       1454, 1530,
-       1457, 1534,
-       1460, 1537,
-       1461, 1538,
-       1464, 1541,
-       1471, 1547,
-       1472, 1071,
-       1479, 1552,
-       1495, 1564,
-       1496, 1565,
-       1504, 1569,
-       1506, 1570,
-       1519, 1579,
-       1531, 1589,
-       1532, 1590,
-       1535, 1593,
-       1539, 1596,
-       1548, 1602,
-       1567, 1610,
-       1591, 1624,
-       1608, 1630,
-       1611, 1634,
-       1612, 1635,
-       1633, 1641,
-       1642, 1647
-};
-static int parser_goto_row91[] = {
-       1,
-       -1, 12
-};
-static int parser_goto_row92[] = {
-       17,
-       -1, 13,
-       18, 106,
-       26, 106,
-       94, 106,
-       99, 106,
-       103, 106,
-       113, 106,
-       116, 106,
-       118, 106,
-       247, 106,
-       249, 106,
-       253, 106,
-       260, 106,
-       262, 106,
-       265, 106,
-       415, 106,
-       421, 106
-};
-static int parser_goto_row93[] = {
-       1,
-       -1, 14
-};
-static int parser_goto_row94[] = {
-       4,
-       -1, 530,
-       460, 577,
-       1116, 1251,
-       1236, 1350
-};
-static int parser_goto_row95[] = {
-       3,
-       -1, 1177,
-       1179, 1307,
-       1192, 1315
-};
-static int parser_goto_row96[] = {
-       1,
-       -1, -1
-};
-static int parser_goto_row97[] = {
-       2,
-       -1, 884,
-       1641, 1646
-};
-static int parser_goto_row98[] = {
-       1,
-       -1, 885
-};
-static int parser_goto_row99[] = {
-       5,
-       -1, 886,
-       1029, 1174,
-       1186, 1309,
-       1188, 1311,
-       1310, 1423
-};
-static int parser_goto_row100[] = {
-       1,
-       -1, 887
-};
-static int parser_goto_row101[] = {
-       11,
-       -1, 888,
-       1189, 1312,
-       1190, 1313,
-       1191, 1314,
-       1195, 1318,
-       1196, 1319,
-       1197, 1320,
-       1198, 1321,
-       1199, 1322,
-       1200, 1323,
-       1201, 1324
-};
-static int parser_goto_row102[] = {
-       3,
-       -1, 889,
-       1193, 1316,
-       1194, 1317
-};
-static int parser_goto_row103[] = {
-       6,
-       -1, 890,
-       1031, 1178,
-       1037, 1182,
-       1202, 1325,
-       1203, 1326,
-       1204, 1327
+       16, 97,
+       17, 102,
+       23, 22,
+       24, 97,
+       25, 102,
+       27, 121,
+       32, 161,
+       33, 162,
+       34, 163,
+       35, 164,
+       36, 165,
+       38, 168,
+       45, 202,
+       53, 214,
+       80, 248,
+       92, 97,
+       93, 102,
+       98, 102,
+       111, 97,
+       112, 102,
+       115, 102,
+       123, 284,
+       124, 285,
+       125, 286,
+       126, 287,
+       133, 296,
+       134, 297,
+       171, 340,
+       172, 341,
+       173, 342,
+       174, 343,
+       177, 346,
+       215, 399,
+       216, 400,
+       227, 409,
+       234, 429,
+       239, 433,
+       240, 434,
+       245, 437,
+       256, 102,
+       269, 102,
+       278, 455,
+       282, 460,
+       293, 465,
+       304, 472,
+       305, 474,
+       306, 475,
+       307, 476,
+       308, 477,
+       309, 478,
+       310, 479,
+       311, 480,
+       312, 481,
+       313, 482,
+       314, 483,
+       315, 484,
+       316, 485,
+       317, 486,
+       318, 487,
+       319, 488,
+       320, 489,
+       321, 490,
+       322, 491,
+       325, 493,
+       330, 496,
+       331, 497,
+       334, 501,
+       335, 502,
+       339, 504,
+       348, 512,
+       349, 514,
+       350, 515,
+       351, 516,
+       352, 517,
+       353, 518,
+       354, 519,
+       355, 520,
+       356, 521,
+       357, 522,
+       358, 523,
+       359, 524,
+       360, 525,
+       361, 526,
+       362, 527,
+       363, 528,
+       364, 529,
+       365, 530,
+       366, 531,
+       377, 538,
+       395, 557,
+       397, 558,
+       427, 573,
+       441, 584,
+       461, 595,
+       466, 599,
+       468, 600,
+       473, 603,
+       492, 573,
+       498, 632,
+       499, 633,
+       503, 638,
+       505, 641,
+       509, 643,
+       513, 645,
+       544, 674,
+       547, 678,
+       553, 706,
+       570, 721,
+       572, 729,
+       575, 742,
+       577, 749,
+       582, 754,
+       591, 758,
+       596, 762,
+       622, 766,
+       627, 777,
+       634, 784,
+       637, 819,
+       639, 820,
+       640, 821,
+       672, 831,
+       679, 837,
+       704, 850,
+       709, 853,
+       710, 854,
+       715, 860,
+       716, 638,
+       722, 868,
+       735, 879,
+       736, 880,
+       737, 882,
+       741, 887,
+       744, 902,
+       745, 905,
+       746, 907,
+       759, 758,
+       761, 920,
+       774, 927,
+       775, 929,
+       776, 933,
+       778, 937,
+       779, 939,
+       780, 941,
+       789, 952,
+       791, 954,
+       793, 957,
+       822, 982,
+       828, 988,
+       829, 638,
+       833, 996,
+       845, 1003,
+       847, 1005,
+       851, 1008,
+       859, 638,
+       862, 1049,
+       864, 1051,
+       867, 1057,
+       871, 758,
+       881, 1080,
+       883, 1084,
+       884, 1086,
+       885, 1088,
+       888, 1092,
+       889, 1094,
+       895, 1098,
+       903, 1133,
+       906, 1135,
+       909, 1139,
+       910, 1141,
+       911, 1142,
+       922, 1151,
+       928, 1158,
+       930, 1162,
+       931, 1164,
+       932, 1166,
+       934, 1170,
+       935, 1172,
+       938, 1174,
+       940, 1176,
+       942, 1180,
+       943, 1182,
+       971, 1204,
+       979, 1211,
+       980, 1212,
+       987, 638,
+       990, 1221,
+       992, 1222,
+       993, 1223,
+       1007, 1229,
+       1009, 1231,
+       1011, 1233,
+       1012, 1234,
+       1013, 1235,
+       1014, 1236,
+       1022, 1246,
+       1031, 1253,
+       1050, 1280,
+       1054, 1285,
+       1055, 1286,
+       1058, 1288,
+       1073, 1299,
+       1079, 1307,
+       1081, 1310,
+       1082, 1312,
+       1085, 1314,
+       1087, 1316,
+       1089, 1320,
+       1090, 1322,
+       1093, 1324,
+       1106, 573,
+       1108, 573,
+       1136, 1365,
+       1137, 1367,
+       1140, 1369,
+       1149, 1376,
+       1159, 1384,
+       1160, 1386,
+       1163, 1388,
+       1165, 1390,
+       1167, 1394,
+       1168, 1396,
+       1171, 1398,
+       1177, 1402,
+       1178, 1404,
+       1181, 1406,
+       1186, 1408,
+       1189, 1412,
+       1190, 1413,
+       1193, 1415,
+       1213, 1430,
+       1242, 1447,
+       1254, 1454,
+       1255, 1456,
+       1256, 1457,
+       1257, 1458,
+       1258, 1459,
+       1259, 1460,
+       1260, 1461,
+       1261, 1462,
+       1262, 1463,
+       1263, 1464,
+       1264, 1465,
+       1265, 1466,
+       1266, 1467,
+       1267, 1468,
+       1268, 1469,
+       1269, 1470,
+       1270, 1471,
+       1271, 1472,
+       1272, 1473,
+       1276, 1478,
+       1284, 1481,
+       1290, 1485,
+       1293, 1487,
+       1301, 1495,
+       1305, 1497,
+       1308, 1500,
+       1311, 1502,
+       1317, 1506,
+       1318, 1508,
+       1321, 1510,
+       1328, 573,
+       1330, 573,
+       1338, 573,
+       1340, 1531,
+       1341, 573,
+       1343, 1536,
+       1346, 573,
+       1359, 1558,
+       1366, 1562,
+       1371, 1565,
+       1372, 1566,
+       1377, 1569,
+       1378, 1570,
+       1385, 1573,
+       1391, 1577,
+       1392, 1579,
+       1395, 1581,
+       1403, 1585,
+       1409, 1589,
+       1410, 1590,
+       1414, 638,
+       1428, 1605,
+       1432, 1612,
+       1441, 1615,
+       1448, 1621,
+       1455, 1626,
+       1490, 1659,
+       1507, 1668,
+       1513, 573,
+       1515, 573,
+       1519, 573,
+       1538, 1714,
+       1543, 1721,
+       1568, 1745,
+       1578, 1750,
+       1591, 1756,
+       1594, 1760,
+       1595, 1761,
+       1608, 1769,
+       1618, 1774,
+       1647, 1780,
+       1655, 1782,
+       1657, 1783,
+       1677, 1801,
+       1681, 1807,
+       1691, 1822,
+       1694, 1826,
+       1702, 1834,
+       1704, 1051,
+       1709, 758,
+       1715, 1850,
+       1718, 1851,
+       1722, 1855,
+       1741, 1869,
+       1746, 1872,
+       1772, 1884,
+       1795, 1897,
+       1802, 1903,
+       1804, 1904,
+       1808, 1908,
+       1817, 1917,
+       1820, 1921,
+       1823, 1924,
+       1824, 1925,
+       1827, 1928,
+       1835, 1935,
+       1836, 1285,
+       1843, 1940,
+       1844, 1941,
+       1852, 1957,
+       1877, 1973,
+       1878, 1974,
+       1887, 1978,
+       1889, 1979,
+       1905, 1992,
+       1918, 2002,
+       1919, 2003,
+       1922, 2006,
+       1926, 2009,
+       1936, 2016,
+       1942, 2020,
+       1943, 2021,
+       1944, 2022,
+       1945, 2023,
+       1946, 2024,
+       1947, 2025,
+       1948, 2026,
+       1949, 2027,
+       1951, 2028,
+       1952, 2030,
+       1953, 2031,
+       1954, 2032,
+       1976, 2044,
+       2004, 2062,
+       2018, 2067,
+       2029, 2077,
+       2042, 2083,
+       2045, 2087,
+       2046, 2088,
+       2086, 2097,
+       2093, 2100,
+       2098, 2104,
+       2105, 2108,
+       2109, 2110
 };
 static int parser_goto_row104[] = {
        1,
-       -1, 891
+       -1, 12
 };
 static int parser_goto_row105[] = {
-       2,
-       -1, 892,
-       873, 1035
+       17,
+       -1, 13,
+       18, 106,
+       26, 106,
+       94, 106,
+       99, 106,
+       103, 106,
+       113, 106,
+       116, 106,
+       118, 106,
+       257, 106,
+       259, 106,
+       263, 106,
+       270, 106,
+       272, 106,
+       275, 106,
+       445, 106,
+       451, 106
 };
 static int parser_goto_row106[] = {
-       11,
-       -1, 812,
-       695, 819,
-       729, 849,
-       853, 1019,
-       997, 1155,
-       1152, 1286,
-       1167, 1300,
-       1283, 1406,
-       1493, 1563,
-       1609, 1631,
-       1639, 1644
+       1,
+       -1, 14
 };
 static int parser_goto_row107[] = {
-       3,
-       -1, 813,
-       584, 711,
-       1282, 1405
+       4,
+       -1, 574,
+       492, 626,
+       1338, 1529,
+       1513, 1672
 };
 static int parser_goto_row108[] = {
-       6,
-       -1, 501,
-       359, 505,
-       500, 616,
-       733, 855,
-       832, 1001,
-       1292, 1412
+       1,
+       -1, 1633
 };
 static int parser_goto_row109[] = {
        1,
-       -1, 502
+       -1, -1
 };
 static int parser_goto_row110[] = {
-       3,
-       -1, 1016,
-       1021, 1170,
-       1302, 1419
+       2,
+       -1, 1031,
+       2097, 2103
 };
 static int parser_goto_row111[] = {
        1,
-       -1, 712
+       -1, 1032
 };
 static int parser_goto_row112[] = {
-       1,
-       -1, 713
+       5,
+       -1, 1033,
+       1234, 1442,
+       1454, 1625,
+       1456, 1627,
+       1626, 1776
 };
 static int parser_goto_row113[] = {
        1,
-       -1, 714
+       -1, 1034
 };
 static int parser_goto_row114[] = {
-       1,
-       -1, 715
+       11,
+       -1, 1035,
+       1457, 1628,
+       1458, 1629,
+       1459, 1630,
+       1463, 1636,
+       1464, 1637,
+       1465, 1638,
+       1466, 1639,
+       1467, 1640,
+       1468, 1641,
+       1469, 1642
 };
 static int parser_goto_row115[] = {
-       1,
-       -1, 716
+       3,
+       -1, 1036,
+       1461, 1634,
+       1462, 1635
 };
 static int parser_goto_row116[] = {
-       1,
-       -1, 717
+       6,
+       -1, 1037,
+       1236, 1446,
+       1246, 1450,
+       1470, 1643,
+       1471, 1644,
+       1472, 1645
 };
 static int parser_goto_row117[] = {
        1,
-       -1, 718
+       -1, 1038
 };
 static int parser_goto_row118[] = {
-       1,
-       -1, 719
+       2,
+       -1, 1039,
+       1020, 1244
 };
 static int parser_goto_row119[] = {
-       23,
-       -1, 1017,
-       44, 201,
-       197, 357,
-       697, 822,
-       698, 824,
-       699, 826,
-       701, 828,
-       823, 994,
-       825, 995,
-       827, 996,
-       833, 1002,
-       834, 1003,
-       999, 1157,
-       1000, 1158,
-       1005, 1162,
-       1006, 1163,
-       1146, 1280,
-       1156, 1289,
-       1281, 1404,
-       1293, 1413,
-       1294, 1414,
-       1410, 1497,
-       1411, 1498
+       4,
+       -1, 382,
+       286, 463,
+       342, 507,
+       465, 598
 };
 static int parser_goto_row120[] = {
        1,
        -1, -1
 };
 static int parser_goto_row121[] = {
-       16,
-       -1, 159,
-       37, 167,
-       585, 721,
-       630, 744,
-       690, 814,
-       695, 820,
-       729, 850,
-       747, 901,
-       853, 1020,
-       1062, 1209,
-       1165, 1297,
-       1167, 1301,
-       1283, 1407,
-       1415, 1500,
-       1609, 1632,
-       1639, 1645
+       1,
+       -1, 1126
 };
 static int parser_goto_row122[] = {
        1,
        -1, -1
 };
 static int parser_goto_row123[] = {
-       1,
-       -1, -1
-};
-static int parser_goto_row124[] = {
-       2,
+       4,
        -1, 145,
-       1400, 1491
+       900, 1127,
+       918, 1127,
+       1745, 1871
 };
-static int parser_goto_row125[] = {
+static int parser_goto_row124[] = {
        1,
        -1, 146
 };
-static int parser_goto_row126[] = {
+static int parser_goto_row125[] = {
        5,
        -1, 147,
-       275, 430,
-       440, 553,
-       442, 555,
-       554, 672
+       285, 462,
+       472, 602,
+       474, 604,
+       603, 764
 };
-static int parser_goto_row127[] = {
+static int parser_goto_row126[] = {
        1,
        -1, 148
 };
-static int parser_goto_row128[] = {
+static int parser_goto_row127[] = {
        11,
        -1, 149,
-       443, 556,
-       444, 557,
-       445, 558,
-       449, 562,
-       450, 563,
-       451, 564,
-       452, 565,
-       453, 566,
-       454, 567,
-       455, 568
+       475, 605,
+       476, 606,
+       477, 607,
+       481, 611,
+       482, 612,
+       483, 613,
+       484, 614,
+       485, 615,
+       486, 616,
+       487, 617
 };
-static int parser_goto_row129[] = {
+static int parser_goto_row128[] = {
        3,
        -1, 150,
-       447, 560,
-       448, 561
+       479, 609,
+       480, 610
 };
-static int parser_goto_row130[] = {
+static int parser_goto_row129[] = {
        6,
        -1, 151,
-       277, 432,
-       283, 438,
-       456, 569,
-       457, 570,
-       458, 571
+       287, 464,
+       297, 470,
+       488, 618,
+       489, 619,
+       490, 620
 };
-static int parser_goto_row131[] = {
+static int parser_goto_row130[] = {
        1,
        -1, 152
 };
-static int parser_goto_row132[] = {
-       2,
+static int parser_goto_row131[] = {
+       4,
        -1, 153,
-       132, 281
+       132, 295,
+       900, 1128,
+       918, 1128
+};
+static int parser_goto_row132[] = {
+       7,
+       -1, 546,
+       543, 673,
+       676, 835,
+       1225, 1437,
+       1435, 1613,
+       1444, 1617,
+       1616, 1773
 };
 static int parser_goto_row133[] = {
        1,
-       -1, -1
+       -1, 677
 };
 static int parser_goto_row134[] = {
-       1,
-       -1, -1
+       2,
+       -1, 1129,
+       918, 1148
 };
 static int parser_goto_row135[] = {
        1,
-       -1, -1
+       -1, 1130
 };
 static int parser_goto_row136[] = {
-       1,
-       -1, -1
+       2,
+       -1, 1445,
+       1447, 1620
 };
 static int parser_goto_row137[] = {
        1,
@@ -19819,18 +25074,272 @@ static int parser_goto_row145[] = {
        -1, -1
 };
 static int parser_goto_row146[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row147[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row148[] = {
+       11,
+       -1, 948,
+       792, 955,
+       826, 985,
+       989, 1219,
+       1197, 1419,
+       1416, 1596,
+       1431, 1610,
+       1593, 1758,
+       1875, 1972,
+       2043, 2084,
+       2095, 2101
+};
+static int parser_goto_row149[] = {
+       3,
+       -1, 949,
+       635, 808,
+       1592, 1757
+};
+static int parser_goto_row150[] = {
+       6,
+       -1, 535,
+       378, 539,
+       534, 667,
+       830, 991,
+       968, 1201,
+       1602, 1764
+};
+static int parser_goto_row151[] = {
+       1,
+       -1, 536
+};
+static int parser_goto_row152[] = {
+       3,
+       -1, 1216,
+       1221, 1434,
+       1612, 1771
+};
+static int parser_goto_row153[] = {
+       1,
+       -1, 809
+};
+static int parser_goto_row154[] = {
+       1,
+       -1, 810
+};
+static int parser_goto_row155[] = {
+       1,
+       -1, 811
+};
+static int parser_goto_row156[] = {
+       1,
+       -1, 812
+};
+static int parser_goto_row157[] = {
+       1,
+       -1, 813
+};
+static int parser_goto_row158[] = {
+       1,
+       -1, 814
+};
+static int parser_goto_row159[] = {
+       1,
+       -1, 815
+};
+static int parser_goto_row160[] = {
+       1,
+       -1, 816
+};
+static int parser_goto_row161[] = {
+       25,
+       -1, 1217,
+       44, 201,
+       197, 376,
+       794, 958,
+       795, 960,
+       796, 962,
+       798, 964,
+       959, 1194,
+       961, 1195,
+       963, 1196,
+       969, 1202,
+       970, 1203,
+       1199, 1421,
+       1200, 1422,
+       1205, 1426,
+       1206, 1427,
+       1408, 1588,
+       1420, 1599,
+       1589, 1754,
+       1590, 1755,
+       1603, 1765,
+       1604, 1766,
+       1756, 1874,
+       1762, 1879,
+       1763, 1880
+};
+static int parser_goto_row162[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row163[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row164[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row165[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row166[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row167[] = {
+       16,
+       -1, 159,
+       37, 167,
+       636, 818,
+       713, 858,
+       787, 950,
+       792, 956,
+       826, 986,
+       861, 1048,
+       989, 1220,
+       1275, 1477,
+       1429, 1607,
+       1431, 1611,
+       1593, 1759,
+       1767, 1882,
+       2043, 2085,
+       2095, 2102
+};
+static int parser_goto_row168[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row169[] = {
+       1,
+       -1, 703
+};
+static int parser_goto_row170[] = {
+       1,
+       -1, 1131
+};
+static int parser_goto_row171[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row172[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row173[] = {
+       9,
+       -1, 1846,
+       1801, 1902,
+       1850, 1955,
+       1851, 1956,
+       1903, 1990,
+       1904, 1991,
+       1957, 2035,
+       1992, 2055,
+       2110, 2111
+};
+static int parser_goto_row174[] = {
+       1,
+       -1, 1847
+};
+static int parser_goto_row175[] = {
+       5,
+       -1, 1848,
+       1941, 2019,
+       2028, 2076,
+       2030, 2078,
+       2077, 2094
+};
+static int parser_goto_row176[] = {
+       1,
+       -1, 1849
+};
+static int parser_goto_row177[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row178[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row179[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row180[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row181[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row182[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row183[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row184[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row185[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row186[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row187[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row188[] = {
+       1,
+       -1, -1
+};
+static int parser_goto_row189[] = {
+       5,
+       -1, 743,
+       746, 908,
+       780, 908,
+       885, 908,
+       932, 908
+};
+static int parser_goto_row190[] = {
+       1,
+       -1, 900
+};
+static int parser_goto_row191[] = {
        2,
        -1, 15,
        4, 23
 };
-static int parser_goto_row147[] = {
+static int parser_goto_row192[] = {
        4,
        -1, 16,
        4, 24,
        15, 92,
        23, 111
 };
-static int parser_goto_row148[] = {
+static int parser_goto_row193[] = {
        8,
        -1, 17,
        4, 25,
@@ -19838,10 +25347,10 @@ static int parser_goto_row148[] = {
        16, 98,
        23, 112,
        24, 115,
-       92, 246,
-       111, 259
+       92, 256,
+       111, 269
 };
-static int parser_goto_row149[] = {
+static int parser_goto_row194[] = {
        16,
        -1, 18,
        4, 26,
@@ -19851,97 +25360,141 @@ static int parser_goto_row149[] = {
        23, 113,
        24, 116,
        25, 118,
-       92, 247,
-       93, 249,
-       98, 253,
-       111, 260,
-       112, 262,
-       115, 265,
-       246, 415,
-       259, 421
-};
-static int parser_goto_row150[] = {
-       8,
-       -1, 657,
-       578, 684,
-       651, 765,
-       655, 769,
-       681, 800,
-       682, 803,
-       763, 931,
-       798, 971
-};
-static int parser_goto_row151[] = {
+       92, 257,
+       93, 259,
+       98, 263,
+       111, 270,
+       112, 272,
+       115, 275,
+       256, 445,
+       269, 451
+};
+static int parser_goto_row195[] = {
        16,
-       -1, 658,
-       578, 685,
-       651, 766,
-       655, 770,
-       657, 782,
-       681, 801,
-       682, 804,
-       684, 807,
-       763, 932,
-       765, 935,
-       769, 939,
-       798, 972,
-       800, 975,
-       803, 979,
-       931, 1095,
-       971, 1137
-};
-static int parser_goto_row152[] = {
-       1,
-       -1, 1092
-};
-static int parser_goto_row153[] = {
-       1,
-       -1, 910
+       -1, 744,
+       627, 778,
+       737, 883,
+       741, 888,
+       746, 909,
+       775, 930,
+       776, 934,
+       780, 942,
+       881, 1081,
+       885, 1089,
+       906, 1136,
+       928, 1159,
+       932, 1167,
+       940, 1177,
+       1087, 1317,
+       1165, 1391
+};
+static int parser_goto_row196[] = {
+       32,
+       -1, 745,
+       627, 779,
+       737, 884,
+       741, 889,
+       744, 903,
+       746, 910,
+       775, 931,
+       776, 935,
+       778, 938,
+       780, 943,
+       881, 1082,
+       883, 1085,
+       885, 1090,
+       888, 1093,
+       906, 1137,
+       909, 1140,
+       928, 1160,
+       930, 1163,
+       932, 1168,
+       934, 1171,
+       940, 1178,
+       942, 1181,
+       1081, 1311,
+       1087, 1318,
+       1089, 1321,
+       1136, 1366,
+       1159, 1385,
+       1165, 1392,
+       1167, 1395,
+       1177, 1403,
+       1317, 1507,
+       1391, 1578
+};
+static int parser_goto_row197[] = {
+       1,
+       -1, 1308
+};
+static int parser_goto_row198[] = {
+       1,
+       -1, 1058
+};
+static int parser_goto_row199[] = {
+       1,
+       -1, 734
+};
+static int parser_goto_row200[] = {
+       1,
+       -1, 1292
+};
+static int parser_goto_row201[] = {
+       1,
+       -1, 995
+};
+static int parser_goto_row202[] = {
+       4,
+       -1, 238,
+       328, 495,
+       975, 1209,
+       1041, 1274
 };
-static int parser_goto_row154[] = {
+static int parser_goto_row203[] = {
        1,
-       -1, 648
+       -1, 247
 };
-static int parser_goto_row155[] = {
+static int parser_goto_row204[] = {
        1,
-       -1, 1078
+       -1, 681
 };
-static int parser_goto_row156[] = {
+static int parser_goto_row205[] = {
        1,
-       -1, 859
-};
-static int parser_goto_row157[] = {
-       4,
-       -1, 229,
-       310, 463,
-       839, 1009,
-       894, 1061
+       -1, 759
 };
-static int parser_goto_row158[] = {
-       1,
-       -1, 238
+static int parser_goto_row206[] = {
+       2,
+       -1, 849,
+       1130, 1362
 };
-static int parser_goto_row159[] = {
+static int parser_goto_row207[] = {
        1,
-       -1, 629
+       -1, 712
 };
-static int parser_goto_row160[] = {
+static int parser_goto_row208[] = {
        4,
        -1, 85,
-       121, 271,
-       381, 271,
-       425, 543
+       121, 281,
+       409, 281,
+       455, 588
 };
-static int parser_goto_row161[] = {
+static int parser_goto_row209[] = {
        2,
        -1, 19,
        12, 86
 };
-static int parser_goto_row162[] = {
+static int parser_goto_row210[] = {
        3,
        -1, 20,
        19, 108,
-       86, 244
+       86, 254
+};
+static int parser_goto_row211[] = {
+       4,
+       -1, 746,
+       627, 780,
+       737, 885,
+       775, 932
 };
 
 const int* const parser_goto_table[] = {
@@ -20106,5 +25659,54 @@ const int* const parser_goto_table[] = {
        parser_goto_row159,
        parser_goto_row160,
        parser_goto_row161,
-       parser_goto_row162
+       parser_goto_row162,
+       parser_goto_row163,
+       parser_goto_row164,
+       parser_goto_row165,
+       parser_goto_row166,
+       parser_goto_row167,
+       parser_goto_row168,
+       parser_goto_row169,
+       parser_goto_row170,
+       parser_goto_row171,
+       parser_goto_row172,
+       parser_goto_row173,
+       parser_goto_row174,
+       parser_goto_row175,
+       parser_goto_row176,
+       parser_goto_row177,
+       parser_goto_row178,
+       parser_goto_row179,
+       parser_goto_row180,
+       parser_goto_row181,
+       parser_goto_row182,
+       parser_goto_row183,
+       parser_goto_row184,
+       parser_goto_row185,
+       parser_goto_row186,
+       parser_goto_row187,
+       parser_goto_row188,
+       parser_goto_row189,
+       parser_goto_row190,
+       parser_goto_row191,
+       parser_goto_row192,
+       parser_goto_row193,
+       parser_goto_row194,
+       parser_goto_row195,
+       parser_goto_row196,
+       parser_goto_row197,
+       parser_goto_row198,
+       parser_goto_row199,
+       parser_goto_row200,
+       parser_goto_row201,
+       parser_goto_row202,
+       parser_goto_row203,
+       parser_goto_row204,
+       parser_goto_row205,
+       parser_goto_row206,
+       parser_goto_row207,
+       parser_goto_row208,
+       parser_goto_row209,
+       parser_goto_row210,
+       parser_goto_row211
 };
index a98d54d..f9c7fbe 100644 (file)
@@ -13,10 +13,6 @@ return trans_return;
 /* out/indirect function for time::Sys::nanosleep */
 void Sys_nanosleep___out( val_t recv, val_t sec, val_t nanosec )
 {
-bigint trans___sec;
-bigint trans___nanosec;
-trans___sec = UNTAG_Int(sec);
-trans___nanosec = UNTAG_Int(nanosec);
-std_nanosleep( NULL, trans___sec, trans___nanosec );
+std_nanosleep( NULL, UNTAG_Int(sec), UNTAG_Int(nanosec) );
 nitni_local_ref_clean(  );
 }
index cde4651..e2bac90 100644 (file)
@@ -767,7 +767,7 @@ void toolcontext___ToolContext___check_errors(val_t p0){
         if (UNTAG_Bool(REGB0)) {
           nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
         }
-        /* ../lib/standard/collection/array.nit:718 */
+        /* ../lib/standard/collection/array.nit:724 */
         fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB1)];
         /* toolcontext.nit:91 */
         fra.me.REG[4] = CALL_toolcontext___ToolContext___opt_no_color(fra.me.REG[0])(fra.me.REG[0]);
index 0d09f4a..2e4583b 100644 (file)
@@ -74,7 +74,7 @@ val_t utils___Object___cmangle(val_t p0, val_t p1){
       if (UNTAG_Bool(REGB1)) {
         nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
       }
-      /* ../lib/standard/collection/array.nit:718 */
+      /* ../lib/standard/collection/array.nit:724 */
       fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
       /* utils.nit:29 */
       REGB1 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[0])(fra.me.REG[0]);
diff --git a/examples/curl_http.nit b/examples/curl_http.nit
new file mode 100644 (file)
index 0000000..fb0b56c
--- /dev/null
@@ -0,0 +1,135 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2013 Matthieu Lucas <lucasmatthieu@gmail.com>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Sample of the Curl module.
+module curl_http
+
+import curl
+
+# Small class to represent an Http Fetcher
+class MyHttpFetcher
+  super CurlCallbacks
+
+  var curl: Curl
+  var our_body: String = ""
+
+  init do self.curl = new Curl
+
+  # Release curl object
+  fun destroy do self.curl.destroy
+
+  fun request(url: String): nullable CurlRequest do return self.curl.http_request(url)
+
+  # Header callback
+  redef fun header_callback(line: String) do
+       # We keep this callback silent for testing purposes
+    #if not line.has_prefix("Date:") then print "Header_callback : {line}"
+  end
+
+  # Body callback
+  redef fun body_callback(line: String) do self.our_body = "{self.our_body}{line}"
+
+  # Stream callback - Cf : No one is registered
+  redef fun stream_callback(buffer: String, size: Int, count: Int) do print "Stream_callback : {buffer} - {size} - {count}"
+end
+
+
+# Program
+if args.length < 2 then
+  print "Usage {sys.program_name} <method wished [POST, GET, GET_FILE]> <target url>"
+else
+
+  var myHttpFetcher = new MyHttpFetcher
+  var url = args[1]
+
+  # HTTP Get Request
+  if args[0] == "GET" then
+    var getContentRequest = myHttpFetcher.request(url)
+    if getContentRequest isa CurlHTTPRequest then
+
+      getContentRequest.verbose = false
+      var getResponse = getContentRequest.execute
+
+      if getResponse isa CurlResponseSuccess then
+        print "Status code : {getResponse.status_code}"
+        print "Body : {getResponse.body_str}"
+      else if getResponse isa CurlResponseFailed then
+        print "Error code : {getResponse.error_code}"
+        print "Error msg : {getResponse.error_msg}"
+      end
+
+    else
+      print "Wrong init with Curl HTTP request"
+    end
+
+  # HTTP Post Request
+  else if args[0] == "POST" then
+    var postContentRequest = myHttpFetcher.request(url)
+    if postContentRequest isa CurlHTTPRequest then
+
+      postContentRequest.delegate = myHttpFetcher
+      var postDatas = new HeaderMap
+      postDatas["Bugs Bunny"] = "Daffy Duck"
+      postDatas["Batman"] = "Robin likes special characters @#ùà!è§'(\"é&://,;<>∞~*"
+      postDatas["Batman"] = "Yes you can set multiple identical keys, but APACHE will consider only once, the last one"
+      postContentRequest.datas = postDatas
+      postContentRequest.verbose = false
+      var postResponse = postContentRequest.execute
+
+      print "Our body from the callback : {myHttpFetcher.our_body}"
+
+      if postResponse isa CurlResponseSuccess then
+        print "*** Answer ***"
+        print "Status code : {postResponse.status_code}"
+        print "Body should be empty, because we decided to manage callbacks : {postResponse.body_str.length}"
+      else if postResponse isa CurlResponseFailed then
+        print "Error code : {postResponse.error_code}"
+        print "Error msg : {postResponse.error_msg}"
+      end
+
+    else
+      print "Wrong init with Curl HTTP request"
+    end
+
+  # HTTP Get to file Request
+  else if args[0] == "GET_FILE" then
+    var downloadFileRequest = myHttpFetcher.request(url)
+    if downloadFileRequest isa CurlHTTPRequest then
+
+      var headers = new HeaderMap
+      headers["Accept"] = "Moo"
+      downloadFileRequest.headers = headers
+      downloadFileRequest.verbose = false
+      var downloadResponse = downloadFileRequest.download_to_file(null)
+
+      if downloadResponse isa CurlFileResponseSuccess then
+        print "*** Answer ***"
+        print "Status code : {downloadResponse.status_code}"
+        print "Size downloaded : {downloadResponse.size_download}"
+      else if downloadResponse isa CurlResponseFailed then
+        print "Error code : {downloadResponse.error_code}"
+        print "Error msg : {downloadResponse.error_msg}"
+      end
+
+    else
+      print "Wrong init with Curl HTTP request"
+    end
+
+  # Program logic
+  else
+    print "Usage : Method[POST, GET, GET_FILE]"
+  end
+end
diff --git a/examples/curl_mail.nit b/examples/curl_mail.nit
new file mode 100644 (file)
index 0000000..c20fbd3
--- /dev/null
@@ -0,0 +1,59 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2013 Matthieu Lucas <lucasmatthieu@gmail.com>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Mail sender sample using the Curl module
+module curl_mail
+
+import curl
+
+var curl = new Curl
+var mail_request = curl.mail_request
+
+# Networks
+var response = mail_request.set_outgoing_server("smtps://smtp.example.org:465", "user@example.org", "mypassword")
+if response isa CurlResponseFailed then
+  print "Error code : {response.error_code}"
+  print "Error msg : {response.error_msg}"
+end
+
+# Headers
+mail_request.from = "Billy Bob"
+mail_request.to = ["user@example.org"]
+mail_request.cc = ["bob@example.org"]
+mail_request.bcc = null
+
+var headers_body = new HeaderMap
+headers_body["Content-Type:"] = "text/html; charset=\"UTF-8\""
+headers_body["Content-Transfer-Encoding:"] = "quoted-printable"
+mail_request.headers_body = headers_body
+
+# Content
+mail_request.body = "<h1>Here you can write HTML stuff.</h1>"
+mail_request.subject = "Hello From My Nit Program"
+
+# Others
+mail_request.verbose = false
+
+# Send mail
+response = mail_request.execute
+if response isa CurlResponseFailed then
+  print "Error code : {response.error_code}"
+  print "Error msg : {response.error_msg}"
+else if response isa CurlMailResponseSuccess then
+  print "Mail Sent"
+else
+  print "Unknown Curl Response type"
+end
diff --git a/lib/curl/curl.nit b/lib/curl/curl.nit
new file mode 100644 (file)
index 0000000..788c553
--- /dev/null
@@ -0,0 +1,473 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2013 Matthieu Lucas <lucasmatthieu@gmail.com>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Network functionnalities based on Curl_c module.
+module curl
+
+import curl_c
+
+# Top level of Curl
+class Curl
+       protected var prim_curl: CCurl
+
+       init
+       do
+               self.prim_curl = new CCurl.easy_init
+               assert curlInstance:self.prim_curl.is_init else
+                       print "Curl must be instancied to be used"
+               end
+       end
+
+       # Check for correct initialization
+       fun is_ok: Bool do return self.prim_curl.is_init
+
+       # Get an HTTP Request object to perform your own
+       fun http_request(url: String): nullable CurlRequest
+       do
+               var err: CURLCode
+               err = self.prim_curl.easy_setopt(new CURLOption.follow_location, 1)
+               if not err.is_ok then return null
+
+               err = self.prim_curl.easy_setopt(new CURLOption.url, url)
+               if not err.is_ok then return null
+
+               return new CurlHTTPRequest(url, self)
+       end
+
+  # Get a MAIL Request Object
+  fun mail_request: nullable CurlMailRequest
+  do
+    var err: CURLCode
+    err = self.prim_curl.easy_setopt(new CURLOption.follow_location, 1)
+    if not err.is_ok then return null
+
+    return new CurlMailRequest(self)
+  end
+
+       # Release Curl instance
+       fun destroy do self.prim_curl.easy_clean
+end
+
+# CURL Request
+class CurlRequest
+
+       var verbose: Bool writable = false
+       private var curl: nullable Curl = null
+
+       # Launch request method
+       fun execute: CurlResponse is abstract
+
+       # Intern perform method, lowest level of request launching
+       private fun perform: nullable CurlResponse
+       do
+               if not self.curl.is_ok then return answer_failure(0, "Curl instance is not correctly initialized")
+
+               var err: CURLCode
+
+               err = self.curl.prim_curl.easy_setopt(new CURLOption.verbose, self.verbose)
+               if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+
+               err = self.curl.prim_curl.easy_perform
+               if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+
+               return null
+       end
+
+       # Intern method with return a failed answer with given code and message
+       private fun answer_failure(error_code: Int, error_msg: String): CurlResponse
+       do
+               return new CurlResponseFailed(error_code, error_msg)
+       end
+end
+
+# CURL HTTP Request
+class CurlHTTPRequest
+       super CurlRequest
+  super CCurlCallbacks
+  super CurlCallbacksRegisterIntern
+
+  var url: String
+       var datas: nullable HeaderMap writable = null
+       var headers: nullable HeaderMap writable = null
+
+  init (url: String, curl: nullable Curl)
+  do
+    self.url = url
+    self.curl = curl
+  end
+
+       # Execute HTTP request with settings configured through attribute
+       redef fun execute: CurlResponse
+       do
+               if not self.curl.is_ok then return answer_failure(0, "Curl instance is not correctly initialized")
+
+               var success_response: CurlResponseSuccess = new CurlResponseSuccess
+
+               var callback_receiver: CurlCallbacks = success_response
+               if self.delegate != null then callback_receiver = self.delegate.as(not null)
+
+               var err: CURLCode
+    # Callbacks
+               err = self.curl.prim_curl.register_callback(callback_receiver, new CURLCallbackType.header)
+               if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+
+               err = self.curl.prim_curl.register_callback(callback_receiver, new CURLCallbackType.body)
+               if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+
+    # HTTP Header
+               if self.headers != null then
+                       var headers_joined = self.headers.join_pairs(": ")
+                       err = self.curl.prim_curl.easy_setopt(new CURLOption.httpheader, headers_joined.to_curlslist)
+                       if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+               end
+
+    # Datas
+               if self.datas != null then
+                       var postdatas = self.datas.to_url_encoded(self.curl.prim_curl)
+                       err = self.curl.prim_curl.easy_setopt(new CURLOption.postfields, postdatas)
+                       if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+               end
+
+               var err_resp = perform
+               if err_resp != null then return err_resp
+
+               var st_code = self.curl.prim_curl.easy_getinfo_long(new CURLInfoLong.response_code)
+               if not st_code == null then success_response.status_code = st_code.response
+
+               return success_response
+       end
+
+       # Download to file given resource
+       fun download_to_file(output_file_name: nullable String): CurlResponse
+       do
+               var success_response: CurlFileResponseSuccess = new CurlFileResponseSuccess
+
+               var callback_receiver: CurlCallbacks = success_response
+               if self.delegate != null then callback_receiver = self.delegate.as(not null)
+
+               var err: CURLCode
+               err = self.curl.prim_curl.register_callback(callback_receiver, new CURLCallbackType.header)
+               if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+
+               err = self.curl.prim_curl.register_callback(callback_receiver, new CURLCallbackType.stream)
+               if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+
+               var opt_name:nullable String
+               if not output_file_name == null then
+                       opt_name = output_file_name
+               else if not self.url.substring(self.url.length-1, self.url.length) == "/" then
+                       opt_name = self.url.basename("")
+               else
+                       return answer_failure(0, "Unable to extract file name, please specify one")
+               end
+
+               success_response.i_file = new OFile.open(opt_name.to_cstring)
+               if not success_response.i_file.is_valid then
+                       success_response.i_file.close
+                       return answer_failure(0, "Unable to create associated file")
+               end
+
+               var err_resp = perform
+               if err_resp != null then return err_resp
+
+               var st_code = self.curl.prim_curl.easy_getinfo_long(new CURLInfoLong.response_code)
+               if not st_code == null then success_response.status_code = st_code.response
+
+               var speed = self.curl.prim_curl.easy_getinfo_double(new CURLInfoDouble.speed_download)
+               if not speed == null then success_response.speed_download = speed.response
+
+               var size = self.curl.prim_curl.easy_getinfo_double(new CURLInfoDouble.size_download)
+               if not size == null then success_response.size_download = size.response
+
+               var time = self.curl.prim_curl.easy_getinfo_double(new CURLInfoDouble.total_time)
+               if not time == null then success_response.total_time = time.response
+
+               success_response.i_file.close
+
+               return success_response
+       end
+end
+
+# CURL Mail Request
+class CurlMailRequest
+  super CurlRequest
+  super CCurlCallbacks
+
+  var headers: nullable HeaderMap writable = null
+       var headers_body: nullable HeaderMap writable = null
+       var from: nullable String writable = null
+       var to: nullable Array[String] writable = null
+       var cc: nullable Array[String] writable = null
+       var bcc: nullable Array[String] writable = null
+       var subject: nullable String writable = ""
+       var body: nullable String writable = ""
+       private var supported_outgoing_protocol: Array[String]
+
+  init (curl: nullable Curl)
+  do
+    self.curl = curl
+               self.supported_outgoing_protocol = once ["smtp", "smtps"]
+  end
+
+       # Helper method to add conventional space while building entire mail
+       private fun add_conventional_space(str: String):String do return "{str}\n" end
+
+       # Helper method to add pair values to mail content while building it (ex: "To:", "address@mail.com")
+       private fun add_pair_to_content(str: String, att: String, val: nullable String):String
+       do
+               if val != null then return "{str}{att}{val}\n"
+               return "{str}{att}\n"
+       end
+
+  # Helper method to add entire list of pairs to mail content
+  private fun add_pairs_to_content(content: String, pairs: HeaderMap):String
+  do
+    for h_key, h_val in pairs do content = add_pair_to_content(content, h_key, h_val)
+    return content
+  end
+
+       # Check for host and protocol availability
+       private fun is_supported_outgoing_protocol(host: String):CURLCode
+       do
+               var host_reach = host.split_with("://")
+               if host_reach.length > 1 and supported_outgoing_protocol.has(host_reach[0]) then return once new CURLCode.ok
+               return once new CURLCode.unsupported_protocol
+       end
+
+       # Configure server host and user credentials if needed.
+       fun set_outgoing_server(host: String, user: nullable String, pwd: nullable String):nullable CurlResponse
+       do
+               # Check Curl initialisation
+               if not self.curl.is_ok then return answer_failure(0, "Curl instance is not correctly initialized")
+
+               var err: CURLCode
+
+    # Host & Protocol
+               err = is_supported_outgoing_protocol(host)
+               if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+               err = self.curl.prim_curl.easy_setopt(new CURLOption.url, host)
+               if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+
+               # Credentials
+               if not user == null and not pwd == null then
+                       err = self.curl.prim_curl.easy_setopt(new CURLOption.username, user)
+                       if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+                       err = self.curl.prim_curl.easy_setopt(new CURLOption.password, pwd)
+                       if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+               end
+
+               return null
+       end
+
+       # Execute Mail request with settings configured through attribute
+       redef fun execute: CurlResponse
+       do
+               if not self.curl.is_ok then return answer_failure(0, "Curl instance is not correctly initialized")
+
+               var success_response: CurlMailResponseSuccess = new CurlMailResponseSuccess
+               var err: CURLCode
+    var content = ""
+    # Headers
+               if self.headers != null then
+      content = add_pairs_to_content(content, self.headers.as(not null))
+               end
+
+               # Recipients
+               var g_rec = new Array[String]
+               if self.to != null and self.to.length > 0 then
+                       content = add_pair_to_content(content, "To:", self.to.join(","))
+                       g_rec.append(self.to.as(not null))
+               end
+               if self.cc != null and self.cc.length > 0 then
+                       content = add_pair_to_content(content, "Cc:", self.cc.join(","))
+                       g_rec.append(self.cc.as(not null))
+               end
+               if self.bcc != null and self.bcc.length > 0 then g_rec.append(self.bcc.as(not null))
+
+               if g_rec.length < 1 then return answer_failure(0, "The mail recipients can not be empty")
+               err = self.curl.prim_curl.easy_setopt(new CURLOption.mail_rcpt, g_rec.to_curlslist)
+               if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+
+    # From
+               if not self.from == null then
+                       content = add_pair_to_content(content, "From:", self.from)
+                       err = self.curl.prim_curl.easy_setopt(new CURLOption.mail_from, self.from.as(not null))
+                       if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+               end
+
+               # Subject
+               content = add_pair_to_content(content, "Subject:", self.subject)
+
+    # Headers body
+               if self.headers_body != null then
+      content = add_pairs_to_content(content, self.headers_body.as(not null))
+               end
+
+               # Body
+               content = add_conventional_space(content)
+               content = add_pair_to_content(content, "", self.body)
+               content = add_conventional_space(content)
+               err = self.curl.prim_curl.register_callback(self, once new CURLCallbackType.read)
+               if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+               err = self.curl.prim_curl.register_read_datas_callback(self, content)
+               if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+
+               var err_resp = perform
+               if err_resp != null then return err_resp
+
+               return success_response
+       end
+end
+
+# Callbacks Interface, allow you to manage in your way the different streams
+interface CurlCallbacks
+       super CCurlCallbacks
+end
+
+# Callbacks attributes
+abstract class CurlCallbacksRegisterIntern
+  var delegate: nullable CurlCallbacks writable = null
+end
+
+# Abstract Curl request response
+abstract class CurlResponse
+end
+
+# Failed Response Class returned when errors during configuration are raised
+class CurlResponseFailed
+       super CurlResponse
+
+       var error_code: Int
+       var error_msg: String
+
+       init (err_code: Int, err_msg: String)
+       do
+               self.error_code = err_code
+               self.error_msg = err_msg
+       end
+end
+
+# Success Abstract Response Success Class
+abstract class CurlResponseSuccessIntern
+       super CurlCallbacks
+       super CurlResponse
+
+       var headers: HashMap[String, String] = new HashMap[String, String]
+
+       # Receive headers from request due to headers callback registering
+       redef fun header_callback(line: String)
+       do
+               var splitted = line.split_with(':')
+               if splitted.length > 1 then
+                       var key = splitted.shift
+                       self.headers[key] = splitted.to_s
+               end
+       end
+end
+
+# Success Response Class of a basic response
+class CurlResponseSuccess
+       super CurlResponseSuccessIntern
+
+       var body_str: String = ""
+       var status_code: Int = 0
+
+       # Receive body from request due to body callback registering
+       redef fun body_callback(line: String)
+       do
+               self.body_str = "{self.body_str}{line}"
+       end
+end
+
+# Success Response Class of mail request
+class CurlMailResponseSuccess
+  super CurlResponseSuccessIntern
+end
+
+# Success Response Class of a downloaded File
+class CurlFileResponseSuccess
+       super CurlResponseSuccessIntern
+
+       var status_code: Int = 0
+       var speed_download: Int = 0
+       var size_download: Int = 0
+       var total_time: Int = 0
+       private var i_file: nullable OFile = null
+
+       # Receive bytes stream from request due to stream callback registering
+       redef fun stream_callback(buffer: String, size: Int, count: Int)
+       do
+               self.i_file.write(buffer, size, count)
+       end
+end
+
+# Pseudo map associating Strings to Strings,
+# each key can have multiple associations
+# and the order of insertion is important.
+class HeaderMap
+       private var arr = new Array[Couple[String, String]]
+
+       fun []=(k, v: String) do arr.add(new Couple[String, String](k, v))
+
+       fun [](k: String): Array[String]
+       do
+               var res = new Array[String]
+               for c in arr do if c.first == k then res.add(c.second)
+               return res
+       end
+
+       fun iterate !each(k, v: String)
+       do
+               var i = arr.iterator
+               while i.is_ok do
+                       var item = i.item
+                       each(item.first, item.second)
+                       i.next
+               end
+       end
+
+       # Convert Self to a single string used to post http fields
+       fun to_url_encoded(curl: CCurl): String
+       do
+               assert curlNotInitialized: curl.is_init else
+                       print "to_url_encoded required a valid instance of CCurl Object."
+               end
+               var str: String = ""
+               var length = self.length
+               var i = 0
+               for k, v in self do
+                       if k.length > 0 then
+                               k = curl.escape(k)
+                               v = curl.escape(v)
+                               str = "{str}{k}={v}"
+                               if i < length-1 then str = "{str}&"
+                       end
+                       i += 1
+               end
+               return str
+       end
+
+       # Concatenate couple of 'key value' separated by 'sep' in Array
+       fun join_pairs(sep: String): Array[String]
+       do
+               var col = new Array[String]
+               for k, v in self do col.add("{k}{sep}{v}")
+               return col
+       end
+
+       fun length: Int do return arr.length
+       fun is_empty: Bool do return arr.is_empty
+end
diff --git a/lib/curl/curl_c.nit b/lib/curl/curl_c.nit
new file mode 100644 (file)
index 0000000..61525a6
--- /dev/null
@@ -0,0 +1,668 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2013 Matthieu Lucas <lucasmatthieu@gmail.com>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Binding of C libCurl which allow us to interact with network.
+module curl_c
+
+import pipeline
+
+in "C header" `{
+       #include <stdio.h>
+       #include <stdlib.h>
+       #include <curl/curl.h>
+
+       typedef enum {
+               CURLcallbackTypeHeader,
+               CURLcallbackTypeBody,
+               CURLcallbackTypeStream,
+               CURLcallbackTypeRead,
+       } CURLcallbackType;
+
+       typedef struct {
+               CCurlCallbacks delegate;
+               CURLcallbackType type;
+       } CURLCallbackDatas;
+
+       typedef struct {
+               char *data;
+               int len;
+               int pos;
+       } CURLCallbackReadDatas;
+`}
+
+in "C body" `{
+       // Callbacks method for Header, Body, Stream.
+       size_t nit_curl_callback_func(void *buffer, size_t size, size_t count, CURLCallbackDatas *datas){
+               if(datas->type == CURLcallbackTypeHeader){
+                       char *line_c = (char*)buffer;
+                       String line_o = new_String_copy_from_native(line_c);
+                       CCurlCallbacks_header_callback(datas->delegate, line_o);
+               }
+               else if(datas->type == CURLcallbackTypeBody){
+                       char *line_c = (char*)buffer;
+                       String line_o = new_String_copy_from_native(line_c);
+                       CCurlCallbacks_body_callback(datas->delegate, line_o);
+               }
+               else if(datas->type == CURLcallbackTypeStream){
+                       char *line_c = (char*)buffer;
+                       String line_o = new_String_from_cstring(line_c);
+                       CCurlCallbacks_stream_callback(datas->delegate, line_o, size, count);
+               }
+               return count;
+       }
+       // Callback method to read datas from buffer.
+       size_t nit_curl_callback_read_func(void *buffer, size_t size, size_t count, CURLCallbackReadDatas *datas){
+               int len = datas->len - datas->pos;
+               if(len > size * count) len = size * count;
+               memcpy(buffer, datas->data + datas->pos, len);
+               datas->pos += len;
+               return len;
+       }
+`}
+
+# CURL Extern Type, reproduce CURL low level behaviors
+extern CCurl `{ CURL * `}
+       # Constructor, CURL low level initializer
+       new easy_init `{ return curl_easy_init(); `}
+       # Check for correct initialization
+       fun is_init:Bool `{ return (recv != NULL); `}
+       # Easy Clean / Release CURL instance
+       fun easy_clean `{ curl_easy_cleanup( recv ); `}
+       # Perform the transfer described by setted options
+       fun easy_perform:CURLCode `{ return curl_easy_perform( recv ); `}
+       # Set options to tell CURL how to behave. Obj parameter type can be Int, Bool, String, OFile, CURLSList.
+       fun easy_setopt(opt: CURLOption, obj: Object):CURLCode
+       do
+               if obj isa Int then return i_setopt_int(opt, obj)
+               if obj isa Bool and obj == true then return i_setopt_int(opt, 1)
+               if obj isa Bool and obj == false then return i_setopt_int(opt, 0)
+               if obj isa String then return i_setopt_string(opt, obj)
+               if obj isa OFile then return i_setopt_file(opt, obj)
+               if obj isa CURLSList then return i_setopt_slist(opt, obj)
+               return once new CURLCode.unknown_option
+       end
+       # Internal method to set options to CURL using OFile parameter.
+       private fun i_setopt_file(opt: CURLOption, fl: OFile):CURLCode `{ return curl_easy_setopt( recv, opt, fl); `}
+       # Internal method to set options to CURL using Int parameter.
+       private fun i_setopt_int(opt: CURLOption, num: Int):CURLCode `{ return curl_easy_setopt( recv, opt, num); `}
+       # Internal method to set options to CURL using CURLSList parameter.
+       private fun i_setopt_slist(opt: CURLOption, list: CURLSList):CURLCode `{ return curl_easy_setopt( recv, opt, list); `}
+       # Internal method to set options to CURL using String parameter.
+       private fun i_setopt_string(opt: CURLOption, str: String):CURLCode import String::to_cstring `{
+               char *rStr = String_to_cstring(str);
+               return curl_easy_setopt( recv, opt, rStr);
+       `}
+       # Request Chars internal information from the CURL session
+       fun easy_getinfo_chars(opt: CURLInfoChars):nullable CURLInfoResponseString
+       do
+                var answ = new CURLInfoResponseString
+                if not i_getinfo_chars(opt, answ).is_ok then return null
+                return answ
+       end
+       # Internal method used to get String object information initially knowns as C Chars type
+       private fun i_getinfo_chars(opt: CURLInfoChars, res: CURLInfoResponseString):CURLCode import CURLInfoResponseString::response= `{
+               char *r = NULL;
+               CURLcode c = curl_easy_getinfo( recv, opt, &r);
+               if((c == CURLE_OK) && r != NULL){
+                       String ro = new_String_copy_from_native(r);
+                       CURLInfoResponseString_response__assign( res, ro);
+               }
+               return c;
+       `}
+       # Request Long internal information from the CURL session
+       fun easy_getinfo_long(opt: CURLInfoLong):nullable CURLInfoResponseLong
+       do
+                var answ = new CURLInfoResponseLong
+                if not i_getinfo_long(opt, answ).is_ok then return null
+                return answ
+       end
+       # Internal method used to get Int object information initially knowns as C Long type
+       private fun i_getinfo_long(opt: CURLInfoLong, res: CURLInfoResponseLong):CURLCode import CURLInfoResponseLong::response= `{
+               long *r = NULL;
+               r = malloc(sizeof(long));
+               CURLcode c = curl_easy_getinfo( recv, opt, r);
+               if((c == CURLE_OK) && r != NULL) CURLInfoResponseLong_response__assign( res, *r);
+               free(r);
+               return c;
+       `}
+       # Request Double internal information from the CURL session
+       fun easy_getinfo_double(opt: CURLInfoDouble):nullable CURLInfoResponseDouble
+       do
+                var answ = new CURLInfoResponseDouble
+                if not i_getinfo_double(opt, answ).is_ok then return null
+                return answ
+       end
+       # Internal method used to get Int object information initially knowns as C Double type
+       private fun i_getinfo_double(opt: CURLInfoDouble, res: CURLInfoResponseDouble):CURLCode import CURLInfoResponseDouble::response= `{
+               double *r = NULL;
+               r = malloc(sizeof(double));
+               CURLcode c = curl_easy_getinfo( recv, opt, r);
+               if((c == CURLE_OK) && r != NULL) CURLInfoResponseDouble_response__assign( res, *r);
+               free(r);
+               return c;
+       `}
+       # Request SList internal information from the CURL session
+       fun easy_getinfo_slist(opt: CURLInfoSList):nullable CURLInfoResponseArray
+       do
+               var answ = new CURLInfoResponseArray
+               if not i_getinfo_slist(opt, answ).is_ok then return null
+               answ.response = answ.prim_response.to_a
+               answ.prim_response.destroy
+               return answ
+       end
+       # Internal method used to get Array[String] object information initially knowns as C SList type
+       private fun i_getinfo_slist(opt: CURLInfoSList, res: CURLInfoResponseArray):CURLCode import CURLInfoResponseArray::prim_response=`{
+               struct curl_slist* csl = NULL;
+               CURLcode ce = curl_easy_getinfo( recv, opt, &csl);
+               CURLInfoResponseArray_prim_response__assign(res, csl);
+               return ce;
+       `}
+       # Register delegate to get callbacks about the CURL transfer performed
+       fun register_callback(delegate: CCurlCallbacks, cbtype: CURLCallbackType):CURLCode
+       do
+               if once [new CURLCallbackType.header, new CURLCallbackType.body, new CURLCallbackType.stream, new CURLCallbackType.read].has(cbtype) then
+                       return i_register_callback(delegate, cbtype)
+               end
+               return once new CURLCode.unknown_option
+       end
+       # Register delegate to read datas from given buffer
+       fun register_read_datas_callback(delegate: CCurlCallbacks, datas: String):CURLCode
+       do
+               if datas.length > 0 then return i_register_read_datas_callback(delegate, datas, datas.length)
+               return once new CURLCode.unknown_option
+       end
+       # Internal method used to configure read callback
+       private fun i_register_read_datas_callback(delegate: CCurlCallbacks, datas: String, size: Int):CURLCode import String::to_cstring, String::copy_from_native `{
+               CURLCallbackReadDatas *d = NULL;
+               d = malloc(sizeof(CURLCallbackReadDatas));
+               d->data = (char*)String_to_cstring(datas);
+               d->len = size;
+               d->pos = 0;
+               return curl_easy_setopt( recv, CURLOPT_READDATA, d);
+
+       `}
+       # Internal method used to configure callbacks in terms of given type
+       private fun i_register_callback(delegate: CCurlCallbacks, cbtype: CURLCallbackType):CURLCode is extern import CCurlCallbacks::header_callback,  CCurlCallbacks::body_callback, CCurlCallbacks::stream_callback  `{
+               CURLCallbackDatas *d = malloc(sizeof(CURLCallbackDatas));
+               CCurlCallbacks_incr_ref(delegate);
+               d->type = cbtype;
+               d->delegate = delegate;
+               CURLcode e;
+               switch(cbtype){
+                       case CURLcallbackTypeHeader:
+                               e = curl_easy_setopt( recv, CURLOPT_HEADERFUNCTION, &nit_curl_callback_func);
+                               if(e != CURLE_OK) return e;
+                               e = curl_easy_setopt( recv, CURLOPT_WRITEHEADER, d);
+                       break;
+                       case CURLcallbackTypeBody:
+                       case CURLcallbackTypeStream:
+                               e = curl_easy_setopt( recv, CURLOPT_WRITEFUNCTION, &nit_curl_callback_func);
+                               if(e != CURLE_OK) return e;
+                               e = curl_easy_setopt( recv, CURLOPT_WRITEDATA, d);
+                       break;
+                       case CURLcallbackTypeRead:
+                               e = curl_easy_setopt( recv, CURLOPT_READFUNCTION, &nit_curl_callback_read_func);
+                       default:
+                       break;
+               }
+               return e;
+       `}
+       # Convert given string to URL encoded string
+       fun escape(url: String):String `{
+               char *orig_url, *encoded_url = NULL;
+               orig_url = String_to_cstring(url);
+               encoded_url = curl_easy_escape( recv, orig_url, strlen(orig_url));
+               String b_url = new_String_copy_from_native(encoded_url);
+               curl_free(encoded_url);
+               return b_url;
+       `}
+end
+
+# FILE Extern type, reproduce basic FILE I/O
+extern OFile `{ FILE* `}
+       # Open / Create a file from given name
+       new open(str: NativeString) `{ return fopen(str, "wb"); `}
+       # Check for File validity
+       fun is_valid:Bool `{ return recv != NULL; `}
+       # Internal method to write to the current file
+       private fun n_write(buffer: NativeString, size: Int, count: Int):Int `{ return fwrite(buffer, size, count, recv); `}
+       # Write datas to the current file
+       fun write(buffer: String, size: Int, count: Int):Int
+       do
+               if is_valid == true then return n_write(buffer.to_cstring, size, count)
+               return 0
+       end
+       # Internal method to close the current file
+       private fun n_close:Int `{ return fclose(recv); `}
+       # Close the current file
+       fun close:Bool
+       do
+               if is_valid == true then return n_close == 0
+               return false
+       end
+end
+
+# Interface for internal information callbacks methods
+interface CCurlCallbacks
+       fun header_callback(line: String) is abstract
+       fun body_callback(line: String) is abstract
+       fun stream_callback(buffer: String, size: Int, count: Int) is abstract
+end
+
+# Extern Type to reproduce Enum of available Callback type
+extern CURLCallbackType `{ CURLcallbackType `}
+       new header `{ return CURLcallbackTypeHeader; `}
+       new body `{ return CURLcallbackTypeBody; `}
+       new stream `{ return CURLcallbackTypeStream; `}
+       new read `{ return CURLcallbackTypeRead; `}
+       fun to_i:Int `{ return recv; `}
+end
+
+# CURL Code binding and helpers
+extern CURLCode `{ CURLcode `}
+       new unknown_option `{ return CURLE_UNKNOWN_OPTION; `}
+       new unsupported_protocol `{ return CURLE_UNSUPPORTED_PROTOCOL; `}
+       new ok `{ return CURLE_OK; `}
+       new failed_init `{ return CURLE_FAILED_INIT; `}
+       fun code:Int `{ return recv; `}
+       fun is_ok:Bool `{ return recv == CURLE_OK; `}
+       fun is_valid_protocol:Bool `{ return recv == CURLE_UNSUPPORTED_PROTOCOL; `}
+       fun is_valid_init:Bool `{ return recv == CURLE_FAILED_INIT; `}
+       fun to_i:Int do return code end
+       redef fun to_s `{
+               char *c = (char*)curl_easy_strerror(recv);
+               return new_String_copy_from_native(c);
+       `}
+end
+
+# Extern Type of the Linked list type of CURL
+extern CURLSList `{ struct curl_slist * `}
+       # Empty constructor which allow us to avoid the use of Nit NULLABLE type
+       private new `{ return NULL; `}
+       # Constructor allow us to get list instancied by appending an element inside.
+       new with_str(s: String) import String::to_cstring `{
+               struct curl_slist *l = NULL;
+               l = curl_slist_append(l, String_to_cstring(s));
+               return l;
+       `}
+       # Check for initialization
+       fun is_init:Bool `{ return (recv != NULL); `}
+       # Append an element in the linked list
+       fun append(key: String) import String::to_cstring `{
+                char *k = String_to_cstring(key);
+                curl_slist_append(recv, (char*)k);
+       `}
+       # Internal method to check for reachability of current data
+       private fun i_data_reachable(c: CURLSList):Bool `{ return (c != NULL && c->data != NULL); `}
+       # Internal method to check for reachability of next element
+       private fun i_next_reachable(c: CURLSList):Bool `{ return (c != NULL && c->next != NULL); `}
+       # Internal method to get current data
+       private fun i_data(c: CURLSList):String `{ return new_String_from_cstring(c->data); `}
+       # Internal method to get next element
+       private fun i_next(c: CURLSList):CURLSList `{ return c->next; `}
+       # Convert current low level List to an Array[String] object
+       fun to_a:Array[String]
+       do
+               var r = new Array[String]
+               var cursor = self
+               loop
+                       if i_data_reachable(cursor) != true then break
+                       r.add(i_data(cursor))
+                       cursor = i_next(cursor)
+               end
+               return r
+       end
+       # Release allocated memory
+       fun destroy `{ curl_slist_free_all(recv); `}
+end
+
+redef class Collection[E]
+       # Convert Collection[String] to CURLSList
+       fun to_curlslist: CURLSList
+       do
+               assert collectionItemType: self isa Collection[String] else
+                       print "Collection item must be strings."
+               end
+               var primList = new CURLSList.with_str(self.first)
+               for s in self.skip_head(1) do primList.append(s)
+               return primList
+       end
+end
+
+# Array Response type of CCurl::easy_getinfo method
+class CURLInfoResponseArray
+       var response:Array[String] = new Array[String]
+       private var prim_response:CURLSList = new CURLSList
+end
+
+# Long Response type of CCurl::easy_getinfo method
+class CURLInfoResponseLong
+       var response:Int=0
+end
+
+# Double Response type of CCurl::easy_getinfo method
+class CURLInfoResponseDouble
+       var response:Int=0
+end
+
+# String Response type of CCurl:easy_getinfo method
+class CURLInfoResponseString
+       var response:String = ""
+end
+
+# Reproduce Enum of available CURL SList information, used for CCurl::easy_getinfo
+extern CURLInfoSList `{ CURLINFO `}
+       new ssl_engines `{ return CURLINFO_SSL_ENGINES; `}
+       new cookielist `{ return CURLINFO_COOKIELIST; `}
+end
+
+# Reproduce Enum of available CURL Long information, used for CCurl::easy_getinfo
+extern CURLInfoLong `{ CURLINFO `}
+       new response_code `{ return CURLINFO_RESPONSE_CODE; `}
+       new header_size `{ return CURLINFO_HEADER_SIZE; `}
+       new http_connectcode `{ return CURLINFO_HTTP_CONNECTCODE; `}
+       new filetime `{ return CURLINFO_FILETIME; `}
+       new redirect_count `{ return CURLINFO_REDIRECT_COUNT; `}
+       new request_size `{ return CURLINFO_REQUEST_SIZE; `}
+       new ssl_verifyresult `{ return CURLINFO_SSL_VERIFYRESULT; `}
+       new httpauth_avail `{ return CURLINFO_HTTPAUTH_AVAIL; `}
+       new proxyauth_avail `{ return CURLINFO_PROXYAUTH_AVAIL; `}
+       new os_errno `{ return CURLINFO_OS_ERRNO; `}
+       new num_connects `{ return CURLINFO_NUM_CONNECTS; `}
+       new primary_port `{ return CURLINFO_PRIMARY_PORT; `}
+       new local_port `{ return CURLINFO_LOCAL_PORT; `}
+       new lastsocket `{ return CURLINFO_LASTSOCKET; `}
+       new condition_unmet `{ return CURLINFO_CONDITION_UNMET; `}
+       new rtsp_client_cseq `{ return CURLINFO_RTSP_CLIENT_CSEQ; `}
+       new rtsp_server_cseq `{ return CURLINFO_RTSP_SERVER_CSEQ; `}
+       new rtsp_cseq_recv `{ return CURLINFO_RTSP_CSEQ_RECV; `}
+end
+
+# Reproduce Enum of available CURL Double information, used for CCurl::easy_getinfo
+extern CURLInfoDouble `{ CURLINFO `}
+       new total_time `{ return CURLINFO_TOTAL_TIME; `}
+       new namelookup_time `{ return CURLINFO_NAMELOOKUP_TIME; `}
+       new connect_time `{ return CURLINFO_CONNECT_TIME; `}
+       new appconnect_time `{ return CURLINFO_APPCONNECT_TIME; `}
+       new pretransfer_time `{ return CURLINFO_PRETRANSFER_TIME; `}
+       new starttransfer_time `{ return CURLINFO_STARTTRANSFER_TIME; `}
+       new redirect_time `{ return CURLINFO_REDIRECT_TIME; `}
+       new size_upload `{ return CURLINFO_SIZE_UPLOAD; `}
+       new size_download `{ return CURLINFO_SIZE_DOWNLOAD; `}
+       new speed_download `{ return CURLINFO_SPEED_DOWNLOAD; `}
+       new speed_upload `{ return CURLINFO_SPEED_UPLOAD; `}
+       new content_length_download `{ return CURLINFO_CONTENT_LENGTH_DOWNLOAD; `}
+       new content_length_upload `{ return CURLINFO_CONTENT_LENGTH_UPLOAD; `}
+end
+
+# Reproduce Enum of available CURL Chars information, used for CCurl::easy_getinfo
+extern CURLInfoChars `{ CURLINFO `}
+       new content_type `{ return CURLINFO_CONTENT_TYPE; `}
+       new effective_url `{ return CURLINFO_EFFECTIVE_URL; `}
+       new redirect_url `{ return CURLINFO_REDIRECT_URL; `}
+       new primary_ip `{ return CURLINFO_PRIMARY_IP; `}
+       new local_ip `{ return CURLINFO_LOCAL_IP; `}
+       new ftp_entry_path `{ return CURLINFO_FTP_ENTRY_PATH; `}
+       new rtsp_session_id `{ return CURLINFO_RTSP_SESSION_ID; `}
+       new private_data `{ return CURLINFO_PRIVATE; `}
+end
+
+# Reproduce Enum of HTTP Status Code
+extern CURLStatusCode `{ int `}
+       new proceed `{ return 100; `}
+       new switching_protocols `{ return 101; `}
+       new ok `{ return 200; `}
+       new created `{ return 201; `}
+       new accepted `{ return 202; `}
+       new non_authoritative_information `{ return 203; `}
+       new no_content `{ return 204; `}
+       new reset_content `{ return 205; `}
+       new partial_content `{ return 206; `}
+       new multiple_choices `{ return 300; `}
+       new moved_permanently `{ return 301; `}
+       new moved_temporarily `{ return 302; `}
+       new see_other `{ return 303; `}
+       new not_modified `{ return 304; `}
+       new use_proxy `{ return 305; `}
+       new bad_request `{ return 400; `}
+       new unauthorized `{ return 401; `}
+       new payment_required `{ return 402; `}
+       new forbidden `{ return 403; `}
+       new not_found `{ return 404; `}
+       new method_not_allowed `{ return 405; `}
+       new not_acceptable `{ return 406; `}
+       new proxy_authentication_required `{ return 407; `}
+       new request_timeout `{ return 408; `}
+       new conflict `{ return 409; `}
+       new gone `{ return 410; `}
+       new length_required `{ return 411; `}
+       new precondition_failed `{ return 412; `}
+       new request_entity_too_large `{ return 413; `}
+       new request_uri_too_large `{ return 414; `}
+       new unsupported_media_type `{ return 415; `}
+       new internal_server_error `{ return 500; `}
+       new not_implemented `{ return 501; `}
+       new bad_gateway `{ return 502; `}
+       new service_unavailable `{ return 503; `}
+       new gateway_timeout `{ return 504; `}
+       new http_version_not_supported `{ return 505; `}
+       fun to_i:Int `{ return recv; `}
+end
+
+# Reproduce Enum of CURL Options usable, used for CCurl::easy_setopt
+extern CURLOption `{ CURLoption `}
+       new write_function `{ return CURLOPT_WRITEFUNCTION; `}
+       new write_data `{ return CURLOPT_WRITEDATA; `}
+#      new     `{ return CURLOPT_FILE; `}
+       new url `{ return CURLOPT_URL; `}
+#      new     `{ return CURLOPT_PORT; `}
+#      new     `{ return CURLOPT_PROXY; `}
+#      new     `{ return CURLOPT_USERPWD; `}
+#      new     `{ return CURLOPT_PROXYUSERPWD; `}
+#      new     `{ return CURLOPT_RANGE; `}
+#      new     `{ return CURLOPT_INFILE; `}
+#      new     `{ return CURLOPT_ERRORBUFFER; `}
+#      new     `{ return CURLOPT_WRITEFUNCTION; `}
+#      new     `{ return CURLOPT_READFUNCTION; `}
+#      new     `{ return CURLOPT_TIMEOUT; `}
+#      new     `{ return CURLOPT_INFILESIZE; `}
+       new postfields `{ return CURLOPT_POSTFIELDS; `}
+#      new     `{ return CURLOPT_REFERER; `}
+#      new     `{ return CURLOPT_FTPPORT; `}
+#      new     `{ return CURLOPT_USERAGENT; `}
+#      new     `{ return CURLOPT_LOW_SPEED_LIMIT; `}
+#      new     `{ return CURLOPT_LOW_SPEED_TIME; `}
+#      new     `{ return CURLOPT_RESUME_FROM; `}
+#      new     `{ return CURLOPT_COOKIE; `}
+       new httpheader `{ return CURLOPT_HTTPHEADER; `}
+#      new     `{ return CURLOPT_HTTPPOST; `}
+#      new     `{ return CURLOPT_SSLCERT; `}
+#      new     `{ return CURLOPT_KEYPASSWD; `}
+#      new     `{ return CURLOPT_CRLF; `}
+#      new     `{ return CURLOPT_QUOTE; `}
+#      new     `{ return CURLOPT_WRITEHEADER; `}
+#      new     `{ return CURLOPT_COOKIEFILE; `}
+#      new     `{ return CURLOPT_SSLVERSION; `}
+#      new     `{ return CURLOPT_TIMECONDITION; `}
+#      new     `{ return CURLOPT_TIMEVALUE; `}
+#      new     `{ return CURLOPT_CUSTOMREQUEST; `}
+#      new     `{ return CURLOPT_STDERR; `}
+#      new     `{ return CURLOPT_POSTQUOTE; `}
+#      new     `{ return CURLOPT_WRITEINFO; `} /* DEPRECATED, do not use! */
+       new verbose `{ return CURLOPT_VERBOSE; `}                       # talk a lot
+       new header `{ return CURLOPT_HEADER; `}                  # throw the header out too
+       new no_progress `{ return CURLOPT_NOPROGRESS; `}         # shut off the progress meter
+       new no_body `{ return CURLOPT_NOBODY; `}                         # use HEAD to get http document
+       new fail_on_error `{ return CURLOPT_FAILONERROR; `}     # no output on http error codes >= 300
+       new upload `{ return CURLOPT_UPLOAD; `}                  # this is an upload
+       new post `{ return CURLOPT_POST; `}                              # HTTP POST method
+       new dir_list_only `{ return CURLOPT_DIRLISTONLY; `}     # bare names when listing directories
+       new append `{ return CURLOPT_APPEND; `}                  # Append instead of overwrite on upload!
+#      new     `{ return CURLOPT_NETRC; `}
+       new follow_location `{ return CURLOPT_FOLLOWLOCATION; `}        # use Location: Luke!
+       new transfert_text `{ return CURLOPT_TRANSFERTEXT; `} # transfer data in text/ASCII format
+       new put `{ return CURLOPT_PUT; `}                                       # HTTP PUT */
+#      new     `{ return CURLOPT_PROGRESSFUNCTION; `}
+#      new     `{ return CURLOPT_PROGRESSDATA; `}
+#      new     `{ return CURLOPT_AUTOREFERER; `}
+#      new     `{ return CURLOPT_PROXYPORT; `}
+#      new     `{ return CURLOPT_POSTFIELDSIZE; `}
+#      new     `{ return CURLOPT_HTTPPROXYTUNNEL; `}
+#      new     `{ return CURLOPT_INTERFACE; `}
+#      new     `{ return CURLOPT_KRBLEVEL; `}
+#      new     `{ return CURLOPT_SSL_VERIFYPEER; `}
+#      new     `{ return CURLOPT_CAINFO; `}
+#      new     `{ return CURLOPT_MAXREDIRS; `}
+#      new     `{ return CURLOPT_FILETIME; `}
+#      new     `{ return CURLOPT_TELNETOPTIONS; `}
+#      new     `{ return CURLOPT_MAXCONNECTS; `}
+#      new     `{ return CURLOPT_CLOSEPOLICY; `} /* DEPRECATED, do not use! */
+#      new     `{ return CURLOPT_FRESH_CONNECT; `}
+#      new     `{ return CURLOPT_FORBID_REUSE; `}
+#      new     `{ return CURLOPT_RANDOM_FILE; `}
+#      new     `{ return CURLOPT_EGDSOCKET; `}
+#      new     `{ return CURLOPT_CONNECTTIMEOUT; `}
+#      new     `{ return CURLOPT_HEADERFUNCTION; `}
+#      new     `{ return CURLOPT_HTTPGET; `}
+#      new     `{ return CURLOPT_SSL_VERIFYHOST; `}
+#      new     `{ return CURLOPT_COOKIEJAR; `}
+#      new     `{ return CURLOPT_SSL_CIPHER_LIST; `}
+#      new     `{ return CURLOPT_HTTP_VERSION; `}
+#      new     `{ return CURLOPT_FTP_USE_EPSV; `}
+#      new     `{ return CURLOPT_SSLCERTTYPE; `}
+#      new     `{ return CURLOPT_SSLKEY; `}
+#      new     `{ return CURLOPT_SSLKEYTYPE; `}
+#      new     `{ return CURLOPT_SSLENGINE; `}
+#      new     `{ return CURLOPT_SSLENGINE_DEFAULT; `}
+#      new     `{ return CURLOPT_DNS_USE_GLOBAL_CACHE; `} /* DEPRECATED, do not use! */
+#      new     `{ return CURLOPT_DNS_CACHE_TIMEOUT; `}
+#      new     `{ return CURLOPT_PREQUOTE; `}
+#      new     `{ return CURLOPT_DEBUGFUNCTION; `}
+#      new     `{ return CURLOPT_DEBUGDATA; `}
+#      new     `{ return CURLOPT_COOKIESESSION; `}
+#      new     `{ return CURLOPT_CAPATH; `}
+#      new     `{ return CURLOPT_BUFFERSIZE; `}
+#      new     `{ return CURLOPT_NOSIGNAL; `}
+#      new     `{ return CURLOPT_SHARE; `}
+#      new     `{ return CURLOPT_PROXYTYPE; `}
+#      new     `{ return CURLOPT_ACCEPT_ENCODING; `}
+#      new     `{ return CURLOPT_PRIVATE; `}
+#      new     `{ return CURLOPT_HTTP200ALIASES; `}
+#      new     `{ return CURLOPT_UNRESTRICTED_AUTH; `}
+#      new     `{ return CURLOPT_FTP_USE_EPRT; `}
+#      new     `{ return CURLOPT_HTTPAUTH; `}
+#      new     `{ return CURLOPT_SSL_CTX_FUNCTION; `}
+#      new     `{ return CURLOPT_SSL_CTX_DATA; `}
+#      new     `{ return CURLOPT_FTP_CREATE_MISSING_DIRS; `}
+#      new     `{ return CURLOPT_PROXYAUTH; `}
+#      new     `{ return CURLOPT_FTP_RESPONSE_TIMEOUT; `}
+#      new     `{ return CURLOPT_IPRESOLVE; `}
+#      new     `{ return CURLOPT_MAXFILESIZE; `}
+#      new     `{ return CURLOPT_INFILESIZE_LARGE; `}
+#      new     `{ return CURLOPT_RESUME_FROM_LARGE; `}
+#      new     `{ return CURLOPT_MAXFILESIZE_LARGE; `}
+#      new     `{ return CURLOPT_NETRC_FILE; `}
+#      new     `{ return CURLOPT_USE_SSL; `}
+#      new     `{ return CURLOPT_POSTFIELDSIZE_LARGE; `}
+#      new     `{ return CURLOPT_TCP_NODELAY; `}
+#      new     `{ return CURLOPT_FTPSSLAUTH; `}
+#      new     `{ return CURLOPT_IOCTLFUNCTION; `}
+#      new     `{ return CURLOPT_IOCTLDATA; `}
+#      new     `{ return CURLOPT_FTP_ACCOUNT; `}
+#      new     `{ return CURLOPT_COOKIELIST; `}
+#      new     `{ return CURLOPT_IGNORE_CONTENT_LENGTH; `}
+#      new     `{ return CURLOPT_FTP_SKIP_PASV_IP; `}
+#      new     `{ return CURLOPT_FTP_FILEMETHOD; `}
+#      new     `{ return CURLOPT_LOCALPORT; `}
+#      new     `{ return CURLOPT_LOCALPORTRANGE; `}
+#      new     `{ return CURLOPT_CONNECT_ONLY; `}
+#      new     `{ return CURLOPT_CONV_FROM_NETWORK_FUNCTION; `}
+#      new     `{ return CURLOPT_CONV_TO_NETWORK_FUNCTION; `}
+#      new     `{ return CURLOPT_CONV_FROM_UTF8_FUNCTION; `}
+#      new     `{ return CURLOPT_MAX_SEND_SPEED_LARGE; `}
+#      new     `{ return CURLOPT_MAX_RECV_SPEED_LARGE; `}
+#      new     `{ return CURLOPT_FTP_ALTERNATIVE_TO_USER; `}
+#      new     `{ return CURLOPT_SOCKOPTFUNCTION; `}
+#      new     `{ return CURLOPT_SOCKOPTDATA; `}
+#      new     `{ return CURLOPT_SSL_SESSIONID_CACHE; `}
+#      new     `{ return CURLOPT_SSH_AUTH_TYPES; `}
+#      new     `{ return CURLOPT_SSH_PUBLIC_KEYFILE; `}
+#      new     `{ return CURLOPT_SSH_PRIVATE_KEYFILE; `}
+#      new     `{ return CURLOPT_FTP_SSL_CCC; `}
+#      new     `{ return CURLOPT_TIMEOUT_MS; `}
+#      new     `{ return CURLOPT_CONNECTTIMEOUT_MS; `}
+#      new     `{ return CURLOPT_HTTP_TRANSFER_DECODING; `}
+#      new     `{ return CURLOPT_HTTP_CONTENT_DECODING; `}
+#      new     `{ return CURLOPT_NEW_FILE_PERMS; `}
+#      new     `{ return CURLOPT_NEW_DIRECTORY_PERMS; `}
+#      new     `{ return CURLOPT_POSTREDIR; `}
+#      new     `{ return CURLOPT_SSH_HOST_PUBLIC_KEY_MD5; `}
+#      new     `{ return CURLOPT_OPENSOCKETFUNCTION; `}
+#      new     `{ return CURLOPT_OPENSOCKETDATA; `}
+#      new     `{ return CURLOPT_COPYPOSTFIELDS; `}
+#      new     `{ return CURLOPT_PROXY_TRANSFER_MODE; `}
+#      new     `{ return CURLOPT_SEEKFUNCTION; `}
+#      new     `{ return CURLOPT_SEEKDATA; `}
+#      new     `{ return CURLOPT_CRLFILE; `}
+#      new     `{ return CURLOPT_ISSUERCERT; `}
+#      new     `{ return CURLOPT_ADDRESS_SCOPE; `}
+#      new     `{ return CURLOPT_CERTINFO; `}
+       new     username `{ return CURLOPT_USERNAME; `}
+       new     password `{ return CURLOPT_PASSWORD; `}
+#      new     `{ return CURLOPT_PROXYUSERNAME; `}
+#      new     `{ return CURLOPT_PROXYPASSWORD; `}
+#      new     `{ return CURLOPT_NOPROXY; `}
+#      new     `{ return CURLOPT_TFTP_BLKSIZE; `}
+#      new     `{ return CURLOPT_SOCKS5_GSSAPI_SERVICE; `}
+#      new     `{ return CURLOPT_SOCKS5_GSSAPI_NEC; `}
+#      new     `{ return CURLOPT_PROTOCOLS; `}
+#      new     `{ return CURLOPT_REDIR_PROTOCOLS; `}
+#      new     `{ return CURLOPT_SSH_KNOWNHOSTS; `}
+#      new     `{ return CURLOPT_SSH_KEYFUNCTION; `}
+#      new     `{ return CURLOPT_SSH_KEYDATA; `}
+       new     mail_from `{ return CURLOPT_MAIL_FROM; `}
+       new     mail_rcpt `{ return CURLOPT_MAIL_RCPT; `}
+#      new     `{ return CURLOPT_FTP_USE_PRET; `}
+#      new     `{ return CURLOPT_RTSP_REQUEST; `}
+#      new     `{ return CURLOPT_RTSP_SESSION_ID; `}
+#      new     `{ return CURLOPT_RTSP_STREAM_URI; `}
+#      new     `{ return CURLOPT_RTSP_TRANSPORT; `}
+#      new     `{ return CURLOPT_RTSP_CLIENT_CSEQ; `}
+#      new     `{ return CURLOPT_RTSP_SERVER_CSEQ; `}
+#      new     `{ return CURLOPT_INTERLEAVEDATA; `}
+#      new     `{ return CURLOPT_INTERLEAVEFUNCTION; `}
+#      new     `{ return CURLOPT_WILDCARDMATCH; `}
+#      new     `{ return CURLOPT_CHUNK_BGN_FUNCTION; `}
+#      new     `{ return CURLOPT_CHUNK_END_FUNCTION; `}
+#      new     `{ return CURLOPT_FNMATCH_FUNCTION; `}
+#      new     `{ return CURLOPT_CHUNK_DATA; `}
+#      new     `{ return CURLOPT_FNMATCH_DATA; `}
+#      new     `{ return CURLOPT_RESOLVE; `}
+#      new     `{ return CURLOPT_TLSAUTH_USERNAME; `}
+#      new     `{ return CURLOPT_TLSAUTH_PASSWORD; `}
+#      new     `{ return CURLOPT_TLSAUTH_TYPE; `}
+#      new     `{ return CURLOPT_TRANSFER_ENCODING; `}
+#      new     `{ return CURLOPT_CLOSESOCKETFUNCTION; `}
+#      new     `{ return CURLOPT_CLOSESOCKETDATA; `}
+#      new     `{ return CURLOPT_GSSAPI_DELEGATION; `}
+#      new     `{ return CURLOPT_DNS_SERVERS; `}
+#      new     `{ return CURLOPT_ACCEPTTIMEOUT_MS; `}
+#      new     `{ return CURLOPT_TCP_KEEPALIVE; `}
+#      new     `{ return CURLOPT_TCP_KEEPIDLE; `}
+#      new     `{ return CURLOPT_TCP_KEEPINTVL; `}
+#      new     `{ return CURLOPT_SSL_OPTIONS; `}
+#      new     `{ return CURLOPT_MAIL_AUTH; `}
+end
diff --git a/lib/curl/curl_c.nit.args b/lib/curl/curl_c.nit.args
new file mode 100644 (file)
index 0000000..bfd2c46
--- /dev/null
@@ -0,0 +1 @@
+--cc-lib-name curl
index 0bc9e94..4c575b5 100644 (file)
@@ -1000,8 +1000,10 @@ redef class Sys
                _args_cache = args
        end
 
-       private fun native_argc: Int is extern "kernel_Sys_Sys_native_argc_0" # First argument of the main C function.
-       
-       private fun native_argv(i: Int): NativeString is extern "kernel_Sys_Sys_native_argv_1" # Second argument of the main C function.
+       # First argument of the main C function.
+       private fun native_argc: Int is intern
+
+       # Second argument of the main C function.
+       private fun native_argv(i: Int): NativeString is intern
 end
 
diff --git a/lib/standard/string_nit.c b/lib/standard/string_nit.c
deleted file mode 100644 (file)
index 747df8c..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/* This file is part of NIT ( http://www.nitlanguage.org ).
- *
- * Copyright 2012 Alexis Laferrière <alexis.laf@xymus.net>
- *
- * This file is free software, which comes along with NIT.  This software is
- * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without  even  the implied warranty of  MERCHANTABILITY or  FITNESS FOR A
- * PARTICULAR PURPOSE.  You can modify it is you want,  provided this header
- * is kept unaltered, and a notification of the changes is added.
- * You  are  allowed  to  redistribute it and sell it, alone or is a part of
- * another product.
- */
-
-#include "string_nit.h"
diff --git a/lib/standard/string_nit.h b/lib/standard/string_nit.h
deleted file mode 100644 (file)
index 5653f27..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef __STRING_NIT_H
-#define __STRING_NIT_H
-/* This file is part of NIT ( http://www.nitlanguage.org ).
- *
- * Copyright 2004-2008 Jean Privat <jean@pryen.org>
- *
- * This file is free software, which comes along with NIT.  This software is
- * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without  even  the implied warranty of  MERCHANTABILITY or  FITNESS FOR A 
- * PARTICULAR PURPOSE.  You can modify it is you want,  provided this header
- * is kept unaltered, and a notification of the changes is added.
- * You  are  allowed  to  redistribute it and sell it, alone or is a part of
- * another product.
- */
-
-#define kernel_Sys_Sys_native_argc_0(self) (glob_argc)
-#define kernel_Sys_Sys_native_argv_1(self, p0) (glob_argv[(p0)])
-
-#endif
index 9b4be94..20ebe59 100644 (file)
@@ -1634,6 +1634,12 @@ redef class AInternMethPropdef
                else if pname == "force_garbage_collection" then
                        v.add("nit_gcollect();")
                        return
+               else if pname == "native_argc" then
+                       v.ret(v.new_expr("glob_argc", ret.as(not null)))
+                       return
+               else if pname == "native_argv" then
+                       v.ret(v.new_expr("glob_argv[{arguments[1]}]", ret.as(not null)))
+                       return
                end
                v.add("printf(\"NOT YET IMPLEMENTED {class_name}:{mpropdef} at {location.to_s}\\n\");")
                debug("Not implemented {mpropdef}")
index 26c8f43..ccccb08 100644 (file)
@@ -874,6 +874,10 @@ redef class INative
                else if c == once "Sys".to_symbol then
                        if n == once "force_garbage_collection".to_symbol then
                                s = "Nit_gc_force_garbage_collection()"
+                       else if n == once "native_argc".to_symbol then
+                               s = "TAG_Int(glob_argc)"
+                       else if n == once "native_argv".to_symbol then
+                               s = "BOX_NativeString(glob_argv[UNTAG_Int({regs[1]})])"
                        end
                else if n == once "object_id".to_symbol then
                        s = "TAG_Int((bigint)((obj_t){regs[0]})[1].object_id)"
index 7e6fb6f..8aa6919 100644 (file)
@@ -834,6 +834,11 @@ redef class AInternMethPropdef
                        mtype = mtype.arguments.first
                        var val = new Array[Instance].filled_with(v.null_instance, args[1].to_i)
                        return new PrimitiveInstance[Array[Instance]](v.mainmodule.get_primitive_class("NativeArray").get_mtype([mtype]), val)
+               else if pname == "native_argc" then
+                       return v.int_instance(v.arguments.length)
+               else if pname == "native_argv" then
+                       var txt = v.arguments[args[1].to_i]
+                       return v.native_string_instance(txt)
                end
                fatal(v, "NOT YET IMPLEMENTED intern {mpropdef}")
                abort
diff --git a/tests/curl_http.args b/tests/curl_http.args
new file mode 100644 (file)
index 0000000..86fbf10
--- /dev/null
@@ -0,0 +1,3 @@
+GET example.org
+POST example.com
+GET_FILE example.org
diff --git a/tests/sav/curl_http.sav b/tests/sav/curl_http.sav
new file mode 100644 (file)
index 0000000..649c9c1
--- /dev/null
@@ -0,0 +1 @@
+Usage ./out/curl_http.bin <method wished [POST, GET, GET_FILE]> <target url>
diff --git a/tests/sav/curl_http_args1.sav b/tests/sav/curl_http_args1.sav
new file mode 100644 (file)
index 0000000..c47c136
--- /dev/null
@@ -0,0 +1,52 @@
+Status code : 200
+Body : <!doctype html>
+<html>
+<head>
+    <title>Example Domain</title>
+
+    <meta charset="utf-8" />
+    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type="text/css">
+    body {
+        background-color: #f0f0f2;
+        margin: 0;
+        padding: 0;
+        font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+        
+    }
+    div {
+        width: 600px;
+        margin: 5em auto;
+        padding: 50px;
+        background-color: #fff;
+        border-radius: 1em;
+    }
+    a:link, a:visited {
+        color: #38488f;
+        text-decoration: none;
+    }
+    @media (max-width: 700px) {
+        body {
+            background-color: #fff;
+        }
+        div {
+            width: auto;
+            margin: 0 auto;
+            border-radius: 0;
+            padding: 1em;
+        }
+    }
+    </style>    
+</head>
+
+<body>
+<div>
+    <h1>Example Domain</h1>
+    <p>This domain is established to be used for illustrative examples in documents. You may use this
+    domain in examples without prior coordination or asking for permission.</p>
+    <p><a href="http://www.iana.org/domains/example">More information...</a></p>
+</div>
+</body>
+</html>
+
diff --git a/tests/sav/curl_http_args2.sav b/tests/sav/curl_http_args2.sav
new file mode 100644 (file)
index 0000000..a7b3f76
--- /dev/null
@@ -0,0 +1,54 @@
+Our body from the callback : <!doctype html>
+<html>
+<head>
+    <title>Example Domain</title>
+
+    <meta charset="utf-8" />
+    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type="text/css">
+    body {
+        background-color: #f0f0f2;
+        margin: 0;
+        padding: 0;
+        font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+        
+    }
+    div {
+        width: 600px;
+        margin: 5em auto;
+        padding: 50px;
+        background-color: #fff;
+        border-radius: 1em;
+    }
+    a:link, a:visited {
+        color: #38488f;
+        text-decoration: none;
+    }
+    @media (max-width: 700px) {
+        body {
+            background-color: #fff;
+        }
+        div {
+            width: auto;
+            margin: 0 auto;
+            border-radius: 0;
+            padding: 1em;
+        }
+    }
+    </style>    
+</head>
+
+<body>
+<div>
+    <h1>Example Domain</h1>
+    <p>This domain is established to be used for illustrative examples in documents. You may use this
+    domain in examples without prior coordination or asking for permission.</p>
+    <p><a href="http://www.iana.org/domains/example">More information...</a></p>
+</div>
+</body>
+</html>
+
+*** Answer ***
+Status code : 200
+Body should be empty, because we decided to manage callbacks : 0
diff --git a/tests/sav/curl_http_args3.sav b/tests/sav/curl_http_args3.sav
new file mode 100644 (file)
index 0000000..0c72a82
--- /dev/null
@@ -0,0 +1,3 @@
+*** Answer ***
+Status code : 200
+Size downloaded : 1270
diff --git a/tests/sav/curl_mail.sav b/tests/sav/curl_mail.sav
new file mode 100644 (file)
index 0000000..5e63d7f
--- /dev/null
@@ -0,0 +1,2 @@
+Error code : 6
+Error msg : Couldn't resolve host name
diff --git a/tests/sav/test_curl.sav b/tests/sav/test_curl.sav
new file mode 100644 (file)
index 0000000..0126379
--- /dev/null
@@ -0,0 +1,5 @@
+CURLSList to array - content: tititotototo2toto3toto4toto9
+CURLSList to array - length: 6
+Array to CURLSList - content: tatatata2
+Array to CURLSList - length: 2
+hello=toto&hello=tata&allo=foo
diff --git a/tests/test_curl.nit b/tests/test_curl.nit
new file mode 100644 (file)
index 0000000..79cdb5b
--- /dev/null
@@ -0,0 +1,214 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2013 Matthieu Lucas <lucasmatthieu@gmail.com>
+# Copyright 2013 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+module test_curl
+
+import curl
+
+class CallbackManager
+  super CurlCallbacks
+
+  redef fun body_callback(line: String) do end
+end
+
+fun error_manager(err: CURLCode) do if not err.is_ok then print err
+
+var url = "http://example.org/"
+
+var curl = new CCurl.easy_init
+if not curl.is_init then print "failed init"
+
+var error:CURLCode
+error = curl.easy_setopt(new CURLOption.url, url)
+error_manager(error)
+
+# Activate for advanced debugging
+#error = curl.easy_setopt(new CURLOption.verbose, 1)
+#error_manager(error)
+
+var cbManager = new CallbackManager
+error = curl.register_callback(cbManager, new CURLCallbackType.body)
+error_manager(error)
+
+error = curl.easy_perform
+error_manager(error)
+
+# Long set
+var info:nullable CURLInfoResponseLong
+info = curl.easy_getinfo_long(new CURLInfoLong.header_size)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.response_code)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.http_connectcode)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.filetime)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.redirect_count)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.request_size)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.ssl_verifyresult)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.httpauth_avail)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.proxyauth_avail)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.os_errno)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.primary_port)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.num_connects)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.local_port)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.lastsocket)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.condition_unmet)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.rtsp_client_cseq)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.rtsp_server_cseq)
+assert infoResp:info != null
+
+info = curl.easy_getinfo_long(new CURLInfoLong.rtsp_cseq_recv)
+assert infoResp:info != null
+
+# Double
+var infoDouble: nullable CURLInfoResponseDouble
+infoDouble = curl.easy_getinfo_double(new CURLInfoDouble.total_time)
+assert infoResp:infoDouble != null
+
+infoDouble = curl.easy_getinfo_double(new CURLInfoDouble.namelookup_time)
+assert infoResp:infoDouble != null
+
+infoDouble = curl.easy_getinfo_double(new CURLInfoDouble.connect_time)
+assert infoResp:infoDouble != null
+
+infoDouble = curl.easy_getinfo_double(new CURLInfoDouble.appconnect_time)
+assert infoResp:infoDouble != null
+
+infoDouble = curl.easy_getinfo_double(new CURLInfoDouble.pretransfer_time)
+assert infoResp:infoDouble != null
+
+infoDouble = curl.easy_getinfo_double(new CURLInfoDouble.starttransfer_time)
+assert infoResp:infoDouble != null
+
+infoDouble = curl.easy_getinfo_double(new CURLInfoDouble.redirect_time)
+assert infoResp:infoDouble != null
+
+infoDouble = curl.easy_getinfo_double(new CURLInfoDouble.size_upload)
+assert infoResp:infoDouble != null
+
+infoDouble = curl.easy_getinfo_double(new CURLInfoDouble.size_download)
+assert infoResp:infoDouble != null
+
+infoDouble = curl.easy_getinfo_double(new CURLInfoDouble.speed_download)
+assert infoResp:infoDouble != null
+
+infoDouble = curl.easy_getinfo_double(new CURLInfoDouble.speed_upload)
+assert infoResp:infoDouble != null
+
+infoDouble = curl.easy_getinfo_double(new CURLInfoDouble.content_length_download)
+assert infoResp:infoDouble != null
+
+infoDouble = curl.easy_getinfo_double(new CURLInfoDouble.content_length_upload)
+assert infoResp:infoDouble != null
+
+# String set
+var infoStr:nullable CURLInfoResponseString
+infoStr = curl.easy_getinfo_chars(new CURLInfoChars.content_type)
+assert infoResp:infoStr != null
+
+infoStr = curl.easy_getinfo_chars(new CURLInfoChars.effective_url)
+assert infoResp:infoStr != null
+
+infoStr = curl.easy_getinfo_chars(new CURLInfoChars.redirect_url)
+assert infoResp:infoStr != null
+
+infoStr = curl.easy_getinfo_chars(new CURLInfoChars.primary_ip)
+assert infoResp:infoStr != null
+
+infoStr = curl.easy_getinfo_chars(new CURLInfoChars.local_ip)
+assert infoResp:infoStr != null
+
+infoStr = curl.easy_getinfo_chars(new CURLInfoChars.ftp_entry_path)
+assert infoResp:infoStr != null
+
+infoStr = curl.easy_getinfo_chars(new CURLInfoChars.private_data)
+assert infoResp:infoStr != null
+
+infoStr = curl.easy_getinfo_chars(new CURLInfoChars.rtsp_session_id)
+assert infoResp:infoStr != null
+
+# CURLSList set
+var infoList:nullable CURLInfoResponseArray
+infoList = curl.easy_getinfo_slist(new CURLInfoSList.ssl_engines)
+assert infoResp:infoList != null
+
+infoList = curl.easy_getinfo_slist(new CURLInfoSList.cookielist)
+assert infoResp:infoList != null
+
+# CURLSList to Array
+var mailList = new CURLSList.with_str("titi")
+mailList.append("toto")
+mailList.append("toto2")
+mailList.append("toto3")
+mailList.append("toto4")
+mailList.append("toto9")
+if mailList.is_init then
+  var content = mailList.to_a
+  print "CURLSList to array - content: {content.to_s}"
+  print "CURLSList to array - length: {content.length.to_s}"
+  mailList.destroy
+else
+  print "CURLSList to array: CURLSList wrong init"
+end
+
+# CURLSList from Array
+var mailRecipientsArray = new Array[String]
+mailRecipientsArray.add("tata")
+mailRecipientsArray.add("tata2")
+var mailRecipientsList: CURLSList = mailRecipientsArray.to_curlslist
+if mailRecipientsList.is_init then
+  print "Array to CURLSList - content: {mailRecipientsList.to_a.to_s}"
+  print "Array to CURLSList - length: {mailRecipientsList.to_a.length.to_s}"
+  mailRecipientsList.destroy
+else
+  print "CURLSList to array: CURLSList wrong init"
+end
+
+# HashMap Refines
+var hashMapRefined = new HeaderMap
+hashMapRefined["hello"] = "toto"
+hashMapRefined["hello"] = "tata"
+hashMapRefined["allo"] = "foo"
+print hashMapRefined.to_url_encoded(new CCurl.easy_init)